
Originally Posted by
Rich Graves
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?
For (1) you could do this with zmprov/zmailbox via:
Code:
/opt/zimbra/bin/zmprov
prov> sm user1
mailbox: user1@macpro.local, size: 8.40 MB, messages: 516, unread: 168
mbox user1@macpro.local> createFolder --view appointment --url http://server/cal.ics /schedule
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:
Code:
mbox user1@macpro.local> createMountpoint --view appointment -F # CS101 class-schedules@carleton.edu CS101
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.