Hybrid View

Auto-provisioning calendar data/shared calendars

I'd like to pre-fill the Zimbra calendars of our 2200 students and faculty with their class schedules. I've munged the schedule data into iCalendar format, or I could use Zimbra native/csv format if that's a little more efficient. So how do I get the data to the user accounts?

Obvious approaches include:

1) Stick each course's iCalendar data on a web server and automatically subscribe the users thereto. How? Would this store redundant data, or pointers?

2) Shove the iCalendar data into each individual calendar. Probably easiest, but would that store a lot of redundant data, or just pointers? And how would I synchronize changes? Students add/drop courses a lot during the first few weeks of the term.

3) a) Create all the course calendars within a system account, b) automatically set share permissions appropriately (and regularly update them as enrollments change), c) make those calendar shares appear for d) Outlook and e) webmail users, f) make sure that the right things hapen when courses drop/permissions revoke (i.e., no dangling share pointers in either Outlook or webmail), and g) make those calendars show up as "busy" in user free/busy lists.

I'm guessing that #3 would be most efficient, but I do not know how to do any of 3b-3g.

Oh, and ideally, this should all work for iSync/iCal/Zimbra Mobile users, too. Does that suggest #2?

3) a) Create all the course calendars within a system account, b) automatically set share permissions appropriately (and regularly update them as enrollments change), c) make those calendar shares appear for d) Outlook and e) webmail users, f) make sure that the right things hapen when courses drop/permissions revoke (i.e., no dangling share pointers in either Outlook or webmail), and g) make those calendars show up as "busy" in user free/busy lists.

I currently have several 'calendar' users who have their calendars shared to employees. I manage the permissions and shares through these users. (they have no password so they're only accessible through the admin console)

b - I haven't seen any way to automatically do permissions for calendar shares, this would be something nice to have.

d - As long as the user has view permissions they should be able to add them in Outlook, however it is a manual process to add the shared calendar in Outlook, it does not automatically sync. We're using Outlook 2003. I don't think it's capable of using the automatic share messages sent by the calendar in Zimbra.

e - the webclient will add the calendar via the accept button in the share message.

f - That's a setting when the calendar is added to the user's calendars in the webclient. As for outlook, that's probably a setting in there.

As for 'a' - I also have this with a Holidays calendar, which is another calendar user that is pulling from a remote .ics file. You should be able to get it to do that so you can use your current schedules you have created if you find that easier.

We haven't actually bought Zimbra either, so this is a pre-sales question (hint).

Is it even possible to do #2, administratively shove a bunch of events into a user's calendar? The REST interfaces all seem to assume that you know the user's password.

We are able to do https://webmail.carleton.edu/calendar.PNG today and would hate to lose that functionality. Admin staff who use calendaring every day might be motivated to manually enter global events that affect them. Students and faculty won't, and will need to be provisioned. While they don't know it, this has an effect on the squeaky-wheel admin staff as well -- imagine your a staff person trying to schedule your student employees, or a dean scheduling a faculty member for a committee meeting. That faculty member doesn't normally use online calendaring and has no real motivation to keep it up to date; but it would be pretty dumb if the system didn't know about his course schedules. We have hear from many faculty that online calendaring is not a productivity gain, but a shift of work from the secretary who used to schedule their meetings to the individual.

This would import the data into a calendar called "schedule", and also set that URL on the calendar.

Users could refresh manually or you could refresh it via:

Code:

mbox user1@macpro.local> syncFolder /schedule

Doing this creates copy of all the appointments in a local calendar.

Unfortunately in testing the createFolder case above, it doesn't look like the URL got correctly passed on create. I'll file a bug and get it fixed in the next patch release.

Originally Posted by Rich Graves

2) Shove the iCalendar data into each individual calendar. Probably easiest, but would that store a lot of redundant data, or just pointers? And how would I synchronize changes? Students add/drop courses a lot during the first few weeks of the term.

You can probably do this with:

Code:

mbox user1@macpro.local> postRestURL /calendar /tmp/data.ics

though I'm not sure on the details of synchronizing. As long as the unique ical id in the appt stays the same I'm guessin updates would work ok. You might be able to handle deletes by treating them as appointment cancels when you post them. You potentially might have a chunk of work here.

The one benefit of this is I seem to recall Zimbra Mobile only supports syncing the primary calendar (due to a limitation in the protocol used by the phones).

Originally Posted by Rich Graves

3) a) Create all the course calendars within a system account, b) automatically set share permissions appropriately (and regularly update them as enrollments change), c) make those calendar shares appear for d) Outlook and e) webmail users, f) make sure that the right things hapen when courses drop/permissions revoke (i.e., no dangling share pointers in either Outlook or webmail), and g) make those calendars show up as "busy" in user free/busy lists.

For this, you could do as you suggest:

1) create the special account

2) create a separate calendar for each class in that account

3) use zmmailbox modifyFolderGrant to grant access to a group/user (or grant access to everyone, if this is just public information)

4) for each user in that class, use zmailbox createMountpoint to mount the classes they have so they appear locally:

Where the first CS101 is what you want to call it in the users account, and the second is what it is called remotely.

This makes the data visible from within the calendar app, but doesn't copy it. It also lets users pick different colors for each calendar, turn them on/off, etc.

Originally Posted by Rich Graves

I'm guessing that #3 would be most efficient, but I do not know how to do any of 3b-3g.

Oh, and ideally, this should all work for iSync/iCal/Zimbra Mobile users, too. Does that suggest #2?

Yes, 3 is probably the cleanest/easiest solution, with the potential gotcha being limitations in Zimbra Mobile. (3) should be ok with iSync, IIRC. If the Zimbra iSync plugin has issues with mountpoints though, users could always just subscribe directly to the each class calendar in iCal, which is another nice property of (3).

Hope that helps. There are definitely some outstanding enhancement requests that we are looking into for sharing in general, which could automate a lot of this process in the future.

Oh, I hadn't realized that "Exclude this calendar when reporting free/busy times" is only for personal and imported remote calendars, not shared calendars. I though the only issue was administratively setting this option, but there ain't one. If there isn't an existing RFE for this, that'd be nice.

So for course schedules, it looks like the best approach, currently, is to administratively subscribe the user to an iCal feed. It means storing redundant data, but 15,000 or so rows shouldn't be that big a deal, should it? Not being able to set an option to "reload remote calendar every X" is a downer, but course schedules don't tend to change, and I'm sure there's an RFE for this. Oh, I guess you could cycle through the members of the group and syncFolder /schedule each one, but that would suck.

Runner-up would be posting to the user's personal calendar. Pluses: shows up in Zimbra Mobile (is there an existing RFE for selecting remote+shared calendars to overlay on Zimbra Mobile data?). Minuses: Would show up in the same color/layer as personal appointments. Much more difficult, if not impossible, to administratively remove course data (maybe we could use magical values for ical ids and do a complicated sync, or maybe we only add courses, and leave it to the user to remove dropped courses).

4) Forge iTIP invitations to the class meeting times from the course instructor to the students. But that has several issues, mainly that we don't want faculty inundated with accepts/declines. Also, a potential FERPA issue in showing the full list of students to each student (but obviously we could send individual invites).

Thanks, all. Still waiting for answer from sam (?) on programmatically adding shared calendars. We've got a few issues, but Zimbra is already ahead of the other candidates on this issue. It's just a little bit behind Horde Kronolith freeware.

Carleton College will be engaging Zimbra's professional services team to, essentially, determine the "right" answers to the various questions posed in this thread. To the maximum extent possible, all work done will be released under licenses at least as liberal as Zimbra itself. Everyone benefits when common solutions can be adopted.

Our likely strategy will include designating our Moodle installation as the authoritative source and/or aggregation point for all course-related calendar and task data, so that professors need only make changes using appropriate Moodle tools, and the changes will cascade to each student's Zimbra calendar using iCalendar or XML protocols chosen with Zimbra professional services' help. There's some likelihood that some small amount of new code will need to be written on the Zimbra side to handle course adds, drops, and changes. That code probably won't be appropriate for general distribution along with Zimbra, but we won't consider it proprietary.