X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=citadel%2Fmodules%2Fcalendar%2Fserv_calendar.c;h=83afa539bf60aafb66a1a2e8878b1c2bd8939f65;hp=df3a13d4f7109b708c9b346aff92cba9a976f51c;hb=0387f48886a9395d89eaca01cd40ab751610426f;hpb=bfb6c5a3fe31b619acafca8d4d33ce367dd431b2 diff --git a/citadel/modules/calendar/serv_calendar.c b/citadel/modules/calendar/serv_calendar.c index df3a13d4f..83afa539b 100644 --- a/citadel/modules/calendar/serv_calendar.c +++ b/citadel/modules/calendar/serv_calendar.c @@ -3,7 +3,7 @@ * room on a Citadel server. It handles iCalendar objects using the * iTIP protocol. See RFCs 2445 and 2446. * - * Copyright (c) 1987-2015 by the citadel.org team + * Copyright (c) 1987-2020 by the citadel.org team * * This program is open source software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3. @@ -17,19 +17,15 @@ #define PRODID "-//Citadel//NONSGML Citadel Calendar//EN" #include "ctdl_module.h" - #include - #include "msgbase.h" #include "internet_addressing.h" #include "serv_calendar.h" #include "room_ops.h" #include "euidindex.h" -#include "ical_dezonify.h" +#include "default_timezone.h" #include "config.h" - - struct ical_respond_data { char desired_partnum[SIZ]; icalcomponent *cal; @@ -45,7 +41,7 @@ icalcomponent *icalcomponent_new_citadel_vcalendar(void) { encaps = icalcomponent_new_vcalendar(); if (encaps == NULL) { - syslog(LOG_CRIT, "ERROR: could not allocate component!\n"); + syslog(LOG_ERR, "calendar: could not allocate component"); return NULL; } @@ -84,8 +80,6 @@ icalcomponent *ical_encapsulate_subcomponent(icalcomponent *subcomp) { } - - /* * Write a calendar object into the specified user's calendar room. * If the supplied user is NULL, this function writes the calendar object @@ -143,8 +137,6 @@ void ical_write_to_cal(struct ctdluser *u, icalcomponent *cal) { msg->cm_format_type = 4; CM_SetField(msg, eAuthor, CCC->user.fullname, strlen(CCC->user.fullname)); CM_SetField(msg, eOriginalRoom, CCC->room.QRname, strlen(CCC->room.QRname)); - CM_SetField(msg, eNodeName, CtdlGetConfigStr("c_nodename"), strlen(CtdlGetConfigStr("c_nodename"))); - CM_SetField(msg, eHumanNode, CtdlGetConfigStr("c_humannode"), strlen(CtdlGetConfigStr("c_humannode"))); MsgBody = NewStrBufPlain(NULL, serlen + 100); StrBufAppendBufPlain(MsgBody, HKEY("Content-type: text/calendar\r\n\r\n"), 0); @@ -153,7 +145,7 @@ void ical_write_to_cal(struct ctdluser *u, icalcomponent *cal) { CM_SetAsFieldSB(msg, eMesageText, &MsgBody); /* Now write the data */ - CtdlSubmitMsg(msg, NULL, "", QP_EADDR); + CtdlSubmitMsg(msg, NULL, ""); CM_Free(msg); } @@ -191,13 +183,13 @@ void ical_send_a_reply(icalcomponent *request, char *action) { strcpy(summary_string, "Calendar item"); if (request == NULL) { - syslog(LOG_ERR, "ERROR: trying to reply to NULL event?\n"); + syslog(LOG_ERR, "calendar: trying to reply to NULL event"); return; } the_reply = icalcomponent_new_clone(request); if (the_reply == NULL) { - syslog(LOG_ERR, "ERROR: cannot clone request\n"); + syslog(LOG_ERR, "calendar: cannot clone request"); return; } @@ -235,7 +227,7 @@ void ical_send_a_reply(icalcomponent *request, char *action) { /* We found our own address in the attendee list. */ if (me_attend) { /* Change the partstat from NEEDS-ACTION to ACCEPT or DECLINE */ - icalproperty_remove_parameter(me_attend, ICAL_PARTSTAT_PARAMETER); + icalproperty_remove_parameter_by_kind(me_attend, ICAL_PARTSTAT_PARAMETER); if (!strcasecmp(action, "accept")) { partstat = icalparameter_new_partstat(ICAL_PARTSTAT_ACCEPTED); @@ -305,7 +297,7 @@ void ical_send_a_reply(icalcomponent *request, char *action) { if (msg != NULL) { valid = validate_recipients(organizer_string, NULL, 0); - CtdlSubmitMsg(msg, valid, "", QP_EADDR); + CtdlSubmitMsg(msg, valid, ""); CM_Free(msg); free_recipients(valid); } @@ -314,7 +306,6 @@ void ical_send_a_reply(icalcomponent *request, char *action) { } - /* * Callback function for mime parser that hunts for calendar content types * and turns them into calendar objects. If something is found, it is placed @@ -574,8 +565,6 @@ STARTOVER: } - - /* * Handle an incoming RSVP (object with method==ICAL_METHOD_REPLY) for a * calendar event. The object has already been deserialized for us; all @@ -599,13 +588,13 @@ int ical_update_my_calendar_with_reply(icalcomponent *cal) { /* Figure out just what event it is we're dealing with */ strcpy(uid, "--==<< InVaLiD uId >>==--"); ical_learn_uid_of_reply(uid, cal); - syslog(LOG_DEBUG, "UID of event being replied to is <%s>\n", uid); + syslog(LOG_DEBUG, "calendar: UID of event being replied to is <%s>", uid); strcpy(hold_rm, CC->room.QRname); /* save current room */ if (CtdlGetRoom(&CC->room, USERCALENDARROOM) != 0) { CtdlGetRoom(&CC->room, hold_rm); - syslog(LOG_CRIT, "cannot get user calendar room\n"); + syslog(LOG_ERR, "calendar: cannot get user calendar room"); return(2); } @@ -619,7 +608,7 @@ int ical_update_my_calendar_with_reply(icalcomponent *cal) { CtdlGetRoom(&CC->room, hold_rm); /* return to saved room */ - syslog(LOG_DEBUG, "msgnum_being_replaced == %ld\n", msgnum_being_replaced); + syslog(LOG_DEBUG, "calendar: msgnum_being_replaced == %ld", msgnum_being_replaced); if (msgnum_being_replaced == 0) { return(1); /* no calendar event found */ } @@ -645,7 +634,7 @@ int ical_update_my_calendar_with_reply(icalcomponent *cal) { original_event = oec.c; if (original_event == NULL) { - syslog(LOG_ERR, "ERROR: Original_component is NULL.\n"); + syslog(LOG_ERR, "calendar: original_component is NULL"); return(2); } @@ -680,7 +669,7 @@ int ical_update_my_calendar_with_reply(icalcomponent *cal) { if (msg != NULL) { CIT_ICAL->avoid_sending_invitations = 1; - CtdlSubmitMsg(msg, NULL, roomname, QP_EADDR); + CtdlSubmitMsg(msg, NULL, roomname); CM_Free(msg); CIT_ICAL->avoid_sending_invitations = 0; } @@ -848,7 +837,7 @@ int ical_ctdl_is_overlap( return(1); } - /* syslog(LOG_DEBUG, "Comparing t1start %d:%d t1end %d:%d t2start %d:%d t2end %d:%d \n", + /* syslog(LOG_DEBUG, "Comparing t1start %d:%d t1end %d:%d t2start %d:%d t2end %d:%d", t1start.hour, t1start.minute, t1end.hour, t1end.minute, t2start.hour, t2start.minute, t2end.hour, t2end.minute); */ @@ -857,16 +846,17 @@ int ical_ctdl_is_overlap( /* If event 1 ends before event 2 starts, we're in the clear. */ if (icaltime_compare(t1end, t2start) <= 0) return(0); - /* syslog(LOG_DEBUG, "first passed\n"); */ + /* syslog(LOG_DEBUG, "calendar: first passed"); */ /* If event 2 ends before event 1 starts, we're also ok. */ if (icaltime_compare(t2end, t1start) <= 0) return(0); - /* syslog(LOG_DEBUG, "second passed\n"); */ + /* syslog(LOG_DEBUG, "calendar: second passed"); */ /* Otherwise, they overlap. */ return(1); } + /* * Phase 6 of "hunt for conflicts" * called by ical_conflicts_phase5() @@ -906,11 +896,11 @@ int ical_conflicts_phase6(struct icaltimetype t1start, existing_msgnum, conflict_event_uid, conflict_event_summary, - ( ((strlen(compare_uid)>0) + ( (!IsEmptyStr(compare_uid) &&(!strcasecmp(compare_uid, conflict_event_uid))) ? 1 : 0 - ) - ); + ) + ); conflict_reported = 1; } @@ -918,7 +908,6 @@ int ical_conflicts_phase6(struct icaltimetype t1start, } - /* * Phase 5 of "hunt for conflicts" * Called by ical_conflicts_phase4() @@ -1033,8 +1022,6 @@ void ical_conflicts_phase5(struct icaltimetype t1start, } - - /* * Phase 4 of "hunt for conflicts" * Called by ical_hunt_for_conflicts_backend() @@ -1136,7 +1123,6 @@ void ical_conflicts_phase4(icalcomponent *proposed_event, } - /* * Phase 3 of "hunt for conflicts" * Called by ical_hunt_for_conflicts() @@ -1167,7 +1153,6 @@ void ical_hunt_for_conflicts_backend(long msgnum, void *data) { } - /* * Phase 2 of "hunt for conflicts" operation. * At this point we have a calendar object which represents the VEVENT that @@ -1201,7 +1186,6 @@ void ical_hunt_for_conflicts(icalcomponent *cal) { } - /* * Hunt for conflicts (Phase 1 -- retrieve the object and call Phase 2) */ @@ -1239,7 +1223,6 @@ void ical_conflicts(long msgnum, char *partnum) { } - /* * Look for busy time in a VEVENT and add it to the supplied VFREEBUSY. * @@ -1370,7 +1353,6 @@ void ical_add_to_freebusy(icalcomponent *fb, icalcomponent *top_level_cal) { if (!icaltime_is_null_time(dtend)) { dtend = icaltime_add(dtstart, dur); dtend.zone = dtstart.zone; - dtend.is_utc = dtstart.is_utc; } ++num_recur; } @@ -1380,7 +1362,6 @@ void ical_add_to_freebusy(icalcomponent *fb, icalcomponent *top_level_cal) { } - /* * Backend for ical_freebusy() * @@ -1415,7 +1396,6 @@ void ical_freebusy_backend(long msgnum, void *data) { } - /* * Grab another user's free/busy times */ @@ -1441,7 +1421,7 @@ void ical_freebusy(char *who) { if (found_user != 0) { strcpy(buf, who); recp = validate_recipients(buf, NULL, 0); - syslog(LOG_DEBUG, "Trying <%s>\n", buf); + syslog(LOG_DEBUG, "calendar: trying <%s>", buf); if (recp != NULL) { if (recp->num_local == 1) { found_user = CtdlGetUser(&usbuf, recp->recp_local); @@ -1455,7 +1435,7 @@ void ical_freebusy(char *who) { */ if (found_user != 0) { snprintf(buf, sizeof buf, "%s@%s", who, CtdlGetConfigStr("c_fqdn")); - syslog(LOG_DEBUG, "Trying <%s>\n", buf); + syslog(LOG_DEBUG, "calendar: trying <%s>", buf); recp = validate_recipients(buf, NULL, 0); if (recp != NULL) { if (recp->num_local == 1) { @@ -1478,7 +1458,7 @@ void ical_freebusy(char *who) { if ( (!strcasecmp(type, "localhost")) || (!strcasecmp(type, "directory")) ) { snprintf(buf, sizeof buf, "%s@%s", who, host); - syslog(LOG_DEBUG, "Trying <%s>\n", buf); + syslog(LOG_DEBUG, "calendar: trying <%s>", buf); recp = validate_recipients(buf, NULL, 0); if (recp != NULL) { if (recp->num_local == 1) { @@ -1507,11 +1487,10 @@ void ical_freebusy(char *who) { } /* Create a VFREEBUSY subcomponent */ - syslog(LOG_DEBUG, "Creating VFREEBUSY component\n"); + syslog(LOG_DEBUG, "calendar: creating VFREEBUSY component"); fb = icalcomponent_new_vfreebusy(); if (fb == NULL) { - cprintf("%d Internal error: cannot allocate memory.\n", - ERROR + INTERNAL_ERROR); + cprintf("%d Internal error: cannot allocate memory.\n", ERROR + INTERNAL_ERROR); CtdlGetRoom(&CC->room, hold_rm); return; } @@ -1520,7 +1499,7 @@ void ical_freebusy(char *who) { icalcomponent_set_method(fb, ICAL_METHOD_PUBLISH); /* Set the DTSTAMP to right now. */ - icalcomponent_set_dtstamp(fb, icaltime_from_timet(time(NULL), 0)); + icalcomponent_set_dtstamp(fb, icaltime_from_timet_with_zone(time(NULL), 0, icaltimezone_get_utc_timezone())); /* Add the user's email address as ORGANIZER */ sprintf(buf, "MAILTO:%s", who); @@ -1534,21 +1513,21 @@ void ical_freebusy(char *who) { icalcomponent_add_property(fb, icalproperty_new_organizer(buf)); /* Add busy time from events */ - syslog(LOG_DEBUG, "Adding busy time from events\n"); + syslog(LOG_DEBUG, "calendar: adding busy time from events"); CtdlForEachMessage(MSGS_ALL, 0, NULL, NULL, NULL, ical_freebusy_backend, (void *)fb ); /* If values for DTSTART and DTEND are still not present, set them * to yesterday and tomorrow as default values. */ if (icalcomponent_get_first_property(fb, ICAL_DTSTART_PROPERTY) == NULL) { - icalcomponent_set_dtstart(fb, icaltime_from_timet(time(NULL)-86400L, 0)); + icalcomponent_set_dtstart(fb, icaltime_from_timet_with_zone(time(NULL)-86400L, 0, icaltimezone_get_utc_timezone())); } if (icalcomponent_get_first_property(fb, ICAL_DTEND_PROPERTY) == NULL) { - icalcomponent_set_dtend(fb, icaltime_from_timet(time(NULL)+86400L, 0)); + icalcomponent_set_dtend(fb, icaltime_from_timet_with_zone(time(NULL)+86400L, 0, icaltimezone_get_utc_timezone())); } /* Put the freebusy component into the calendar component */ - syslog(LOG_DEBUG, "Encapsulating\n"); + syslog(LOG_DEBUG, "calendar: encapsulating"); encaps = ical_encapsulate_subcomponent(fb); if (encaps == NULL) { icalcomponent_free(fb); @@ -1559,11 +1538,11 @@ void ical_freebusy(char *who) { } /* Set the method to PUBLISH */ - syslog(LOG_DEBUG, "Setting method\n"); + syslog(LOG_DEBUG, "calendar: setting method"); icalcomponent_set_method(encaps, ICAL_METHOD_PUBLISH); /* Serialize it */ - syslog(LOG_DEBUG, "Serializing\n"); + syslog(LOG_DEBUG, "calendar: serializing"); serialized_request = icalcomponent_as_ical_string_r(encaps); icalcomponent_free(encaps); /* Don't need this anymore. */ @@ -1579,7 +1558,6 @@ void ical_freebusy(char *who) { } - /* * Backend for ical_getics() * @@ -1653,7 +1631,6 @@ void ical_getics_backend(long msgnum, void *data) { } - /* * Retrieve all of the calendar items in the current room, and output them * as a single icalendar object. @@ -1671,7 +1648,7 @@ void ical_getics(void) encaps = icalcomponent_new_vcalendar(); if (encaps == NULL) { - syslog(LOG_ALERT, "ERROR: could not allocate component!\n"); + syslog(LOG_ERR, "calendar: could not allocate component!"); cprintf("%d Could not allocate memory\n", ERROR+INTERNAL_ERROR); return; } @@ -1749,7 +1726,7 @@ void ical_putics(void) } cprintf("%d Transmit data now\n", SEND_LISTING); - calstream = CtdlReadMessageBody(HKEY("000"), CtdlGetConfigLong("c_maxmsglen"), NULL, 0, 0); + calstream = CtdlReadMessageBody(HKEY("000"), CtdlGetConfigLong("c_maxmsglen"), NULL, 0); if (calstream == NULL) { return; } @@ -1797,7 +1774,7 @@ void ical_putics(void) HashPos = GetNewHashPos(tzidlist, 0); while (GetNextHashPos(tzidlist, HashPos, &len, &Key, &Value)) { - syslog(LOG_DEBUG, "Attaching timezone '%s'\n", (char*) Value); + syslog(LOG_DEBUG, "calendar: attaching timezone '%s'", (char*) Value); icaltimezone *t = NULL; /* First look for a timezone attached to the original calendar */ @@ -1862,10 +1839,8 @@ void cmd_ical(char *argbuf) } if (!strcasecmp(subcmd, "sgi")) { - CIT_ICAL->server_generated_invitations = - (extract_int(argbuf, 1) ? 1 : 0) ; - cprintf("%d %d\n", - CIT_OK, CIT_ICAL->server_generated_invitations); + CIT_ICAL->server_generated_invitations = (extract_int(argbuf, 1) ? 1 : 0) ; + cprintf("%d %d\n", CIT_OK, CIT_ICAL->server_generated_invitations); return; } @@ -1908,7 +1883,6 @@ void cmd_ical(char *argbuf) } - /* * We don't know if the calendar room exists so we just create it at login */ @@ -1922,7 +1896,7 @@ void ical_CtdlCreateRoom(void) /* Set expiration policy to manual; otherwise objects will be lost! */ if (CtdlGetRoomLock(&qr, USERCALENDARROOM)) { - syslog(LOG_CRIT, "Couldn't get the user calendar room!\n"); + syslog(LOG_ERR, "calendar: couldn't get the user calendar room"); return; } qr.QRep.expire_mode = EXPIRE_MANUAL; @@ -1939,7 +1913,7 @@ void ical_CtdlCreateRoom(void) /* Set expiration policy to manual; otherwise objects will be lost! */ if (CtdlGetRoomLock(&qr, USERTASKSROOM)) { - syslog(LOG_CRIT, "Couldn't get the user calendar room!\n"); + syslog(LOG_ERR, "calendar: couldn't get the user calendar room!"); return; } qr.QRep.expire_mode = EXPIRE_MANUAL; @@ -1956,7 +1930,7 @@ void ical_CtdlCreateRoom(void) /* Set expiration policy to manual; otherwise objects will be lost! */ if (CtdlGetRoomLock(&qr, USERNOTESROOM)) { - syslog(LOG_CRIT, "Couldn't get the user calendar room!\n"); + syslog(LOG_ERR, "calendar: couldn't get the user calendar room!"); return; } qr.QRep.expire_mode = EXPIRE_MANUAL; @@ -2005,11 +1979,10 @@ void ical_send_out_invitations(icalcomponent *top_level_cal, icalcomponent *cal) const char *tzidc = NULL; if (cal == NULL) { - syslog(LOG_ERR, "ERROR: trying to reply to NULL event?\n"); + syslog(LOG_ERR, "calendar: trying to reply to NULL event?"); return; } - /* If this is a VCALENDAR component, look for a VEVENT subcomponent. */ if (icalcomponent_isa(cal) == ICAL_VCALENDAR_COMPONENT) { ical_send_out_invitations(top_level_cal, @@ -2023,7 +1996,7 @@ void ical_send_out_invitations(icalcomponent *top_level_cal, icalcomponent *cal) /* Clone the event */ the_request = icalcomponent_new_clone(cal); if (the_request == NULL) { - syslog(LOG_ERR, "ERROR: cannot clone calendar object\n"); + syslog(LOG_ERR, "calendar: cannot clone calendar object"); return; } @@ -2057,7 +2030,7 @@ void ical_send_out_invitations(icalcomponent *top_level_cal, icalcomponent *cal) } } - syslog(LOG_DEBUG, "<%d> attendees: <%s>\n", num_attendees, attendees_string); + syslog(LOG_DEBUG, "calendar: <%d> attendees: <%s>", num_attendees, attendees_string); /* If there are no attendees, there are no invitations to send, so... * don't bother putting one together! Punch out, Maverick! @@ -2070,7 +2043,7 @@ void ical_send_out_invitations(icalcomponent *top_level_cal, icalcomponent *cal) /* Encapsulate the VEVENT component into a complete VCALENDAR */ encaps = icalcomponent_new_vcalendar(); if (encaps == NULL) { - syslog(LOG_ALERT, "ERROR: could not allocate component!\n"); + syslog(LOG_ERR, "calendar: could not allocate component!"); icalcomponent_free(the_request); return; } @@ -2147,8 +2120,7 @@ void ical_send_out_invitations(icalcomponent *top_level_cal, icalcomponent *cal) attached_zones[num_zones_attached++] = z; } - icalproperty_set_parameter(p, - icalparameter_new_tzid(icaltimezone_get_tzid(z)) + icalproperty_set_parameter(p, icalparameter_new_tzid(icaltimezone_get_tzid(z)) ); } } @@ -2197,7 +2169,7 @@ void ical_send_out_invitations(icalcomponent *top_level_cal, icalcomponent *cal) if (msg != NULL) { valid = validate_recipients(attendees_string, NULL, 0); - CtdlSubmitMsg(msg, valid, "", QP_EADDR); + CtdlSubmitMsg(msg, valid, ""); CM_Free(msg); free_recipients(valid); } @@ -2222,7 +2194,7 @@ void ical_saving_vevent(icalcomponent *top_level_cal, icalcomponent *cal) { icalproperty *organizer = NULL; char organizer_string[SIZ]; - syslog(LOG_DEBUG, "ical_saving_vevent() has been called!\n"); + syslog(LOG_DEBUG, "calendar: ical_saving_vevent() has been called"); /* Don't send out invitations unless the client wants us to. */ if (CIT_ICAL->server_generated_invitations == 0) { @@ -2271,7 +2243,6 @@ void ical_saving_vevent(icalcomponent *top_level_cal, icalcomponent *cal) { } - /* * Back end for ical_obj_beforesave() * This hunts for the UID of the calendar event (becomes Citadel msg EUID), @@ -2334,7 +2305,7 @@ void ical_obj_beforesave_backend(char *name, char *filename, char *partnum, pch = icalproperty_get_comment(p); if (!IsEmptyStr(pch)) { CM_SetField(msg, eExclusiveID, pch, strlen(pch)); - syslog(LOG_DEBUG, "Saving calendar UID <%s>\n", pch); + syslog(LOG_DEBUG, "calendar: saving calendar UID <%s>", pch); } } @@ -2371,8 +2342,6 @@ void ical_obj_beforesave_backend(char *name, char *filename, char *partnum, } - - /* * See if we need to prevent the object from being saved (we don't allow * MIME types other than text/calendar in "calendar" or "tasks" rooms). @@ -2391,7 +2360,7 @@ int ical_obj_beforesave(struct CtdlMessage *msg, recptypes *recp) /* It must be an RFC822 message! */ if (msg->cm_format_type != 4) { - syslog(LOG_DEBUG, "Rejecting non-RFC822 message\n"); + syslog(LOG_DEBUG, "calendar: rejecting non-RFC822 message"); return(1); /* You tried to save a non-RFC822 message! */ } @@ -2484,6 +2453,7 @@ void ical_session_startup(void) { memset(CIT_ICAL, 0, sizeof(struct cit_ical)); } + void ical_session_shutdown(void) { free(CIT_ICAL); } @@ -2492,9 +2462,7 @@ void ical_session_shutdown(void) { /* * Back end for ical_fixed_output() */ -void ical_fixed_output_backend(icalcomponent *cal, - int recursion_level -) { +void ical_fixed_output_backend(icalcomponent *cal, int recursion_level) { icalcomponent *c; icalproperty *p; char buf[256]; @@ -2539,7 +2507,6 @@ void ical_fixed_output_backend(icalcomponent *cal, } - /* * Function to output iCalendar data as plain text. Nobody uses MSG0 * anymore, so really this is just so we expose the vCard data to the full @@ -2565,12 +2532,11 @@ void ical_fixed_output(char *ptr, int len) { } - -void serv_calendar_destroy(void) -{ +void serv_calendar_destroy(void) { icaltimezone_free_builtin_timezones(); } + /* * Register this module with the Citadel server. */ @@ -2580,7 +2546,12 @@ CTDL_MODULE_INIT(calendar) { /* Tell libical to return errors instead of aborting if it gets bad data */ + +#ifdef LIBICAL_ICAL_EXPORT // cheap and sleazy way to detect libical >=2.0 + icalerror_set_errors_are_fatal(0); +#else icalerror_errors_are_fatal = 0; +#endif /* Use our own application prefix in tzid's generated from system tzdata */ icaltimezone_set_tzid_prefix("/citadel.org/"); @@ -2589,14 +2560,14 @@ CTDL_MODULE_INIT(calendar) CtdlRegisterMessageHook(ical_obj_beforesave, EVT_BEFORESAVE); CtdlRegisterMessageHook(ical_obj_aftersave, EVT_AFTERSAVE); CtdlRegisterSessionHook(ical_CtdlCreateRoom, EVT_LOGIN, PRIO_LOGIN + 1); - CtdlRegisterProtoHook(cmd_ical, "ICAL", "Citadel iCal commands"); + CtdlRegisterProtoHook(cmd_ical, "ICAL", "Citadel iCalendar commands"); CtdlRegisterSessionHook(ical_session_startup, EVT_START, PRIO_START + 1); CtdlRegisterSessionHook(ical_session_shutdown, EVT_STOP, PRIO_STOP + 80); CtdlRegisterFixedOutputHook("text/calendar", ical_fixed_output); CtdlRegisterFixedOutputHook("application/ics", ical_fixed_output); CtdlRegisterCleanupHook(serv_calendar_destroy); } - + /* return our module name for the log */ return "calendar"; }