We need a PHP application with MySQL database where users can create local calendars, import calendars from other sources, edit them and export them from there.
1. Importing calendars
It should be possible to import calendars by providing an ICS file or URL, or a CalDAV URL with authentication. ICS files can be added as new calendars or imported to another calendar
1a. Syncing calendar source changes
Calendars provided as .ics files can obviously not be synced and are stored in the database as they are. For other calendars, the calendar will be synced and stored in the database whenever the user views it or it is loaded for export. While loading the data from the source - or if this fails - , data from the database will be presented to the user.
2. Logical calendars
Multiple calendars can be combined to a single logical calendar for export. Users can choose which of these calendars should be used as default when they add an event to an exported logical calendar, changes to logical calendars should not be possible on the site, instead, users will have to edit the actual calendars.
3. Editing calendars
The editing section of the site should have a similar look and feel to Google Calendar. It will be possible to add or remove local or remote calendars, add or remove events, change their information or move or copy them to a different calendar. Changes to an imported calendar which can not be changed at source should be possible, in that the information will be changed in the local database. Users will be able to set what to do in such an event if the source calendar changes - replace local version, ignore remote changes or decide manually.
3a. Syncing changes to source
Where possible, any changes to imported calendars should be synced to their source unless the user specified not to in the calendar settings.
4. Exporting calendars
Users will be able to export any given actual or logical calendar as .ics files, as URLs or using CalDAV as well as free/busy files or URLs. They will have the possibility to limit the output to a certain number of days or events before or after the current date. Any changes in CalDAV calendars will be saved in the database and, if applicable, synced to their source. It will also be possible to edit or remove events from a logical calendar, which, again, will be synced to the source if possible.