phantomwatson / muncie-events3 Goto Github PK
View Code? Open in Web Editor NEWThe repository for MuncieEvents.com
Home Page: http://muncieevents.com
The repository for MuncieEvents.com
Home Page: http://muncieevents.com
We're using extjs 2.0.1 for our tag manager, when we really ought to be upgrading to 6. The tag manager currently also uses presentation images that are not either marked with role="presentation"
or alt-text.
Remove commented-out code from the CreateUtcTimes migration and move it to a RemoveTimeColumns migration, to be committed once nothing needs those columns anymore.
Sidenote: Despite earlier reckonings, all things considered, I think we should keep the date field as-is. It should make filtering by date way simpler than converting timezone-adjusted Cake\I18n\Time
objects into and out of 'YYYY-MM-DD' strings.
In the Cake3 version of Muncie Events, users will be able to upload images for their profiles, awesome! Here are some new features to be added:
Time to figure out why tags & events aren't linking this time.
$event
is coming through as an array as opposed to an object. That's a bad sign?
Tag auto-complete is activated when someone enters just a space. It's unlikely that a user will begin entry with a space, but it's certain that they'd reach a point when entering two tags when they've entered one, then a comma, then a space, at which point they'd get an arbitrary set of autocomplete suggestions.
Also, for some reason, the FBRLH URL is appearing in the tag auto-complete field, because the FBRLH is like my picture of Dorian Gray.
Here's all the sections of the tag manager:
These will be checked off as they are completed and fully functional.
For the pagination.ctp
element
*shruuuug*
<select>
element already provides that informationAs always, feel free to debate any of my recommendations. ๐
Opening & closing event accordions creates this weird sidebar surrounding the icon as it fades in & out?
I suggest this, to help reduce the rate of users entering variations on the names of locations (despite the location name field providing automatic suggestions) and administrators needing to manually correct for that:
eventForm.previousLocations
)Here's where we're at with the events images:
All we need is to join the two tables and create these links. Then the events will have full image functionality.
Create a page showing where the widgets ought to go.
Actually show the widgets. Or customize them. Or do anything else.
A list of what needs done to build the widgets controller & related actions is forthcoming.
Accidentally deleted an event because I was clicking and not paying attention. Better add some front-end validation to make sure admins can't do that.
The ability to export events from iCal, Google, Outlook, and Yahoo!* needs rebuilt still from Cake2 to Cake3.
*I am totally okay with not giving anyone the ability to export to Yahoo!
Send a notification to Slack (perhaps in a new #muncieevents channel) when new events get posted in order to reduce the time between posting and moderator actions.
Bonus points: Divide up moderators by days of the week and mention who's currently on duty in the messages, e.g.
Graham: The event "Competitive Pantomime Regional Championships" has been posted by M. Goldman
Event times at the top of the hour ought to have :00 removed when they display. e.g. if an event is at 9pm, it should read 9 PM rather than 9:00 PM.
In the header, in the calendar with the datepicker, there's supposed to be a list of the next seven dates that have events on them.
There isn't that list? It's not displaying.
$this->request->data
is a deprecated method, to be replaced with $this->request->getData()
. However, the two are not analogous. The method for setting custom tags in the Events Controller is dependent upon $this->request->data
, it works perfectly with that method, but the method is deprecated.
Suppose one is trying to save some Categories/Mailing List data to the join table, by creating $this->MailingList->Categories->link($mailingListWeekly, [$general]);
Due to the fact that there's a field in mailing_list called categories
, the ORM perceives this to be an attempt to modify a string rather than join data. However, suppose you try to save to the categories
field, doing something like $this->MailingList->categories = 13
, you'll receive an error for trying to save an integer or a string as a whole new object in a join table.
The long & short is that, now, fields in MySQL cannot share names with tables. It confuses the ORM.
Header datepicker does not grey out boxes for dates which have no events, as the Cake2 version of the site does.
Users need to be able to add custom tags when creating/editing events.
Add support for emojis in event descriptions.
These issues are strictly for the 3.x version of Muncie Events, although the 3.x version shares some with the 2.x version. Those issues are noted in the 2.x repository.
/events/add
, there is no warning for if the user is not logged in./register
page, nor is there an option for the user to join the mailing list./events/add
. They shouldn't get to do that./events/add
has been removed and needs put back./account
, it reads "Your" when it should read "My" in the header.Nothing about the mailing list is done.
There are enhancements that we could consider giving the moderation process to help correct user misbehavior and hopefully shift the burden of ensuring content quality from administrators to users even more:
The Cake2 version of the site had a really easy-to-develop but sort of limited plugin for using Facebook's API. With the new plugin, here's all the things we're going to do with Facebook's API:
Develop an API and inform Kyle Parker of 14Eleven Development ([email protected]) of its availability.
So, this is going to be a multiple-step process that changes how things are stored in the database. We currently have date
, time_start
& time_end
fields which store data as DATETIME objects in the form of, respectively, date('Y-m-d')
and date('h:i:s')
.
Our objective will be to consolidate these fields to start
and end
, and convert their values to UTC. That way, we can create an API for Muncie Events.
Step 1: Migrating everything in the database
start
will need to be created in the events
table, as a non-null string field.start
field will be populated by merging date
and time_start
, and converting to UTC.end
will need created as a null string field.end
populated by merging date
and time_end
.Step 2: Create a model method for converting to UTC
actions.ctp
.add()
and edit()
events methods, and convert the current date
, time_start
, and time_end
fields to start
and end
UTC fields.actions.ctp
.Step 3: Create a model method for converting from UTC
date()
formats.Step 4: Final steps
date
, time_start
, and time_end
will be deleted.Hopefully this will prevent us from having to touch the front-end at all. Thoughts?
Datepicker for the header does not appear in /events/add. It does appear in editseries & edit.
The datepicker on the event form isn't actually inputting any data. While the actual js works, looks good, does all the front-end things it's supposed to do, it doesn't communicate at all with the app itself.
private function __prepareDatePicker() { // Prepare date picker if ($this->request->action == 'add' || $this->request->action == 'edit_series') { $dateFieldValues = []; if (empty($event['date'])) { $defaultDate = 0; // Today $preselectedDates = '[]'; } else { $dates = explode(',', $event['date']); foreach ($dates as $date) { list($year, $month, $day) = explode('-', $date); if (!isset($defaultDate)) { $defaultDate = "$month/$day/$year"; } $dateFieldValues[] = "$month/$day/$year"; } $datesForJs = []; foreach ($dateFieldValues as $date) { $datesForJs[] = "'".$date."'"; } $datesForJs = implode(',', $datesForJs); $preselectedDates = "[$datesForJs]"; } $this->set([ 'defaultDate' => $defaultDate, 'preselectedDates' => $preselectedDates ]); $event['date'] = implode(',', $dateFieldValues); } elseif ($this->action == 'edit') { list($year, $month, $day) = explode('-', $event['date']); $event['date'] = "$month/$day/$year"; } }
A forethought: this was written in Cake2, initially, so basing all of this off of $event['date'] made sense because $event['date] just represented $this->request->data['Event']['date']. With Cake3, it doesn't do that, and so any form data like that has to be passed back to functions like __prepareDatePicker().
Something to try, then, is passing $event from the add() or edit() actions.
The datepicker is no longer populating dates based on which dates do & don't have events.
Nothing about events series is done.
All of our text stuff should be converted from utf8 to utf8mb4. @ericadeefox reports in issue #18 that this has been done, but I think we need a migration and a step-by-step plan so we can easily apply the change to all dev machines and the production server.
Bonus: We can refer to these steps when applying these changes to other sites, too.
$config['Datasources']['default']['encoding']
and $config['Datasources']['test']['encoding']
to 'utf8mb4'
strpos()
, stripos()
, and strlen()
and replace with mb_strpos()
, mb_stripos()
and mb_strlen()
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
$this->execute('ALTER DATABASE...')
)ALTER TABLE table_name CHANGE column_name column_name VARCHAR(???) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
change()
should actually be a set of up()
and down()
methodsto make it reversible)ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; utf8_general_ci columns:
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
Note: it's like this in the 2.x version as well.
If you click the "#" selector in the tags breakdown by letter, or the new locations breakdown by letter, you won't get any of the tags or locations that start with numbers. I think with how it's written, it's looking for tags & locations that literally start with the hash symbol.
Not really an issue, more of a reminder: when I started doing this, I never actually got the proper SMTP settings and thus I can't add them to the dotenv and also the mailing list, contact form, and password reset don't work.
In /mailing-list/join, under "frequency", the current site's weekly/daily radio buttons are missing and only the checkboxes for the "custom" option are shown.
Here are my arguments for why the "custom" part of the form was originally designed how it was:
Current routing system doesn't allow for any future, unnamed and un-slugged categories to have their own indexes. Need to set it so that there's a global variable that gets populated based on what the categories are.
A security certificate will be required to avoid users seeing browser-generated warnings about insecure password collection. Consider using https://letsencrypt.org/ (free 90-day security certificates, that can be renewed via shell).
When a tag is deleted from $selectedTags in the Events controller, it must also be deleted from $previousTags, which are all the tags that have already been run through the Tag Helper and turned into real Tag Entities from their IDs.
The month method URL reads /month/MM/YYYY. However, due to weird counting or whatever is happening there, advancing past December into January reads not as /01/YYYY, but rather /13/YYYY of the previous year. e.g. if you want to check out January 1992, you can put /01/1992 into the URL, but you can also put /25/1990 into the URL.
Month widgets only show the current month; using the prev & next buttons take you to month pages. Clicking prev & next buttons does not open the in-widget month.
Feed widgets show all the events at once, rather than a couple weeks at a time with a "More Events" button.
Clicking events in the feed widgets opens the event page, rather than the in-widget event.
Locations & custom tags don't autocomplete in the event form.
The mailing list might work? I don't know if it does and I don't know how to test it.
"More Events" button appears 100% of the time in indexes, even if there are literally no events to index.
The paginator buttons are ugly & awkward.
The index breaks if the events are more than two weeks apart.
BOLD INDICATES HIGH PRIORITY
This issue is for documenting the ways that our web infrastructure needs updated for accessibility compliance.
Here are some resources:
http://ffoodd.github.io/a11y.css/
https://webaim.org/resources/contrastchecker/
http://wave.webaim.org/report#/https://muncieevents.com
Routing/URLS not accepting %2F as a URI character. Sometimes apache rejects %2F & %5C (which is the \ slash) but it weirdly accepts %5C... and every other URI character I tried.
Therefore, tags or locations with symbols in their names cannot be indexed.
1.) Login redirects do not actually redirect to the location set in the URL. The user is just redirected to /
2.) Users are logged in for 15-30mins before being logged out. Need to set that longer.
Add validation rules in EventsTable
for Events.start_time
and Events.end_time
.
All of the admin methods and section of the site need moved into a new Admin
namespace. So there'll be Controller\Admin
and Template\Admin
.
Viewing users is now met with this error:
"Call to a member function getNextStartDate() on boolean"
The events index is populated by roughly 10-20 events (or 5-10 days of events, what have you), then a "More events..." link or button sits at the bottom of the page and, when clicked, loads 10-20 more events--until there are no more events to load and a flash message saying so comes up.
Right off the jump, the events index is populated by all of the events from all of the upcoming days. The "More events..." link still sits at the bottom but, when clicked, displays an error message.
I'm sure this just has to do with renaming variables for the js files that control the index.
Every index except for the main upcoming events index is supposed to be paginated.
Number of indexes currently paginated: 0.
Expected flow:
Actual flow:
So images still get uploaded and can be used, joined, etc. but there's extra steps for no reason.
EDIT: Just kidding, images aren't being joined either. They get uploaded but they just don't do anything beyond that.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.