Skip to content

ICS merging and (limited) access control for public Calendars. Can also act as a proxy between iCloud and Google Calendar.

Notifications You must be signed in to change notification settings

shamanskyh/CalMerge

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

CalMerge

ICS merging and (limited) access control for public Calendars. Can also act as a proxy between iCloud and Google Calendar. Runs on a LAMP stack.

Installation

NOTE: If you don't know what a LAMP stack is, it's best to read up on that first. If you're just starting out, feel free to get in touch with me and I can try to answer any questions you have! Also note that your LAMP stack must support cURL to access external URLs and that some providers block this functionality in their basic plans.

  1. Create a new MySQL database and import the database structure found in Database/Database.sql
  2. Upload the files in the PHP folder to a directory on your server — most likely a folder that a subdomain points to.
  3. Modify PHP/config.php:
    • Add your username, password, and database name
    • Change the sharePrefix. This is the URL that users will import your calendar with and needs to correspond to the URL rewriting that goes on in .htaccess.
    • Change the name of the merged output if you desire.
  4. Modify PHP/index.php:
    • This is just a page that redirects people if they just type in the initial part of the share URL. It could redirect to your homepage or something like Google.
  5. Modify the .htaccess file. Many operating systems see this as a hidden file, so be sure that it gets uploaded. This rewrites URLs into a nicer format and restricts access to settings. You will need to create an .htpasswd file that this links to. Some providers have a built in utility to do this. In that case, it might be easiest to delete the AuthName and AuthUserFile lines and use their utility.
  6. Be sure to create an .htpasswd file that protects the files in the admin folder.

Use

  1. Navigate to admin/index.php
  2. If using a service like iCloud, create public share links of all the calendars you intend to merge.
  3. Add calendars with the "+" button in the top right of the "Calendars" panel. Each calendar should have a name, a URL, and a color (in HEX, without the pound sign).
  4. Add viewers with the "+" button in the top right of the "Viewers" panel. Each viewer gets a name and a list of Calendars that they should have read access to. Modify their access through the checkboxes that appear under their name.
  5. Note that events may take up to 48 hours to process in Google Calendar. This is because they aggressively cache subscribed calendars.

FAQs

  • Q: But isn't this a public copy of my calendar? Can't anyone access it?
    • A: Yes. In theory, anyone can access the public link that you create, though it's extremely unlikely. This utility also allows you to revoke access to certain people without destroying your whole calendar.
  • Q: Why won't Google Calendar update?
    • A: Google Calendar aggressively caches subscribed calendars and there's a 24-48 hour lag window. It's supposed to be closer to 8 hours, but I've had worse luck. I realize this isn't ideal, but there's nothing I can personally do about this. Read Google's answer here.

Known Issues / To-Dos

  • It would be great to have a color picker when adding a new calendar. Or a service that attempts to recognize the color that's already been set for the calendar.
  • Timezone support is seriously lacking. For right now, known timezones exist in a static file called timezones.txt that is placed at the top of every merge output. A better implementation would aggregate timezones from calendars being merged.

About

ICS merging and (limited) access control for public Calendars. Can also act as a proxy between iCloud and Google Calendar.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published