X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fcalendar.c;h=5353dfa67d8f11f7cc9502ff53b0239de196cdb5;hb=694a3ea878536e2deda1c0168e51837a31b81af7;hp=49e572a90206c22bc0d30f22595a746ac472c3c8;hpb=89fc82a8ab4fb0dd1b57888a877fa8078223fa89;p=citadel.git diff --git a/webcit/calendar.c b/webcit/calendar.c index 49e572a90..5353dfa67 100644 --- a/webcit/calendar.c +++ b/webcit/calendar.c @@ -1,17 +1,23 @@ /* * $Id$ - * - * Functions which handle calendar objects and their processing/display. - * */ +/** + * \defgroup calav Functions which handle calendar objects and their processing/display. + * \ingroup Calendaring + */ +/* @{ */ #include "webcit.h" #include "webserver.h" #ifndef WEBCIT_WITH_CALENDAR_SERVICE -/* +/** + * \brief get around non existing types * Handler stubs for builds with no calendar library available + * \param part_source dummy pointer to the source + * \param msgnum number of the mesage in the db + * \param cal_partnum number of the calendar part */ void cal_process_attachment(char *part_source, long msgnum, char *cal_partnum) { @@ -24,6 +30,10 @@ void cal_process_attachment(char *part_source, long msgnum, char *cal_partnum) { } +/** + * \brief say we can't display calendar items + * \param msgnum number of the mesage in our db + */ void display_calendar(long msgnum) { wprintf(_("" "Cannot display calendar item. You are seeing this error " @@ -32,6 +42,10 @@ void display_calendar(long msgnum) { "
\n")); } +/** + * \brief say we can't display task items + * \param msgnum number of the mesage in our db + */ void display_task(long msgnum) { wprintf(_("" "Cannot display to-do item. You are seeing this error " @@ -39,7 +53,7 @@ void display_task(long msgnum) { "calendar support. Please contact your system administrator." "
\n")); } - +/** ok, we have calendaring available */ #else /* WEBCIT_WITH_CALENDAR_SERVICE */ @@ -48,10 +62,13 @@ void display_task(long msgnum) { -/* - * Process a calendar object +/** + * \brief Process a calendar object * ...at this point it's already been deserialized by cal_process_attachment() - * + * \param cal teh calendar object + * \param recursion_level call stack depth ?????? + * \param msgnum number of the mesage in our db + * \param cal_partnum of the calendar object ???? */ void cal_process_object(icalcomponent *cal, int recursion_level, @@ -69,22 +86,22 @@ void cal_process_object(icalcomponent *cal, char conflict_message[256]; int is_update = 0; - /* Leading HTML for the display of this object */ + /** Leading HTML for the display of this object */ if (recursion_level == 0) { wprintf("
\n"); } - /* Look for a method */ + /** Look for a method */ method = icalcomponent_get_first_property(cal, ICAL_METHOD_PROPERTY); - /* See what we need to do with this */ + /** See what we need to do with this */ if (method != NULL) { the_method = icalproperty_get_method(method); switch(the_method) { case ICAL_METHOD_REQUEST: wprintf("\n"); } - /* + /** * Only show start/end times if we're actually looking at the VEVENT * component. Otherwise it shows bogus dates for things like timezone. */ @@ -146,13 +163,16 @@ void cal_process_object(icalcomponent *cal, t = icalproperty_get_dtstart(p); if (t.is_date) { + struct tm d_tm; + char d_str[32]; + memset(&d_tm, 0, sizeof d_tm); + d_tm.tm_year = t.year - 1900; + d_tm.tm_mon = t.month - 1; + d_tm.tm_mday = t.day; + wc_strftime(d_str, sizeof d_str, "%x", &d_tm); wprintf("", - months[t.month - 1], - t.day, t.year - ); + wprintf("", d_str); } else { tt = icaltime_as_timet(t); @@ -184,7 +204,7 @@ void cal_process_object(icalcomponent *cal, wprintf("\n"); } - /* If the component has attendees, iterate through them. */ + /** If the component has attendees, iterate through them. */ for (p = icalcomponent_get_first_property(cal, ICAL_ATTENDEE_PROPERTY); (p != NULL); p = icalcomponent_get_next_property(cal, ICAL_ATTENDEE_PROPERTY)) { wprintf("\n"); } - /* If the component has subcomponents, recurse through them. */ + /** If the component has subcomponents, recurse through them. */ for (c = icalcomponent_get_first_component(cal, ICAL_ANY_COMPONENT); (c != 0); c = icalcomponent_get_next_component(cal, ICAL_ANY_COMPONENT)) { @@ -213,7 +233,7 @@ void cal_process_object(icalcomponent *cal, cal_process_object(c, recursion_level+1, msgnum, cal_partnum); } - /* If this is a REQUEST, display conflicts and buttons */ + /** If this is a REQUEST, display conflicts and buttons */ if (the_method == ICAL_METHOD_REQUEST) { /* Check for conflicts */ @@ -246,15 +266,16 @@ void cal_process_object(icalcomponent *cal, } lprintf(9, "...done.\n"); - /* Display the Accept/Decline buttons */ - wprintf("" - "" + "\n", + _("How would you like to respond to this invitation?"), msgnum, cal_partnum, _("Accept"), msgnum, cal_partnum, _("Tentative"), msgnum, cal_partnum, _("Decline") @@ -262,24 +283,23 @@ void cal_process_object(icalcomponent *cal, } - /* If this is a REPLY, display update button */ + /** If this is a REPLY, display update button */ if (the_method == ICAL_METHOD_REPLY) { - /*********** - * In the future, if we want to validate this object before + /** \todo In the future, if we want to validate this object before \ * continuing, we can do it this way: serv_printf("ICAL whatever|%ld|%s|", msgnum, cal_partnum); serv_getln(buf, sizeof buf); } ***********/ - /* Display the update buttons */ + /** Display the update buttons */ wprintf("\n", _("Click Update to accept this reply and update your calendar."), @@ -289,7 +309,7 @@ void cal_process_object(icalcomponent *cal, } - /* Trailing HTML for the display of this object */ + /** Trailing HTML for the display of this object */ if (recursion_level == 0) { wprintf("
\n" "" + "src=\"static/calarea_48x.gif\">" "  " ""); wprintf(_("Meeting invitation")); @@ -93,7 +110,7 @@ void cal_process_object(icalcomponent *cal, case ICAL_METHOD_REPLY: wprintf("
\n" "" + "src=\"static/calarea_48x.gif\">" "  " ""); wprintf(_("Attendee's reply to your invitation")); @@ -102,7 +119,7 @@ void cal_process_object(icalcomponent *cal, case ICAL_METHOD_PUBLISH: wprintf("
\n" "" + "src=\"static/calarea_48x.gif\">" "  " ""); wprintf(_("Published event")); @@ -134,7 +151,7 @@ void cal_process_object(icalcomponent *cal, wprintf("
"); wprintf(_("Date:")); - wprintf("" - "%s %d, %d
%s
"); wprintf(_("Attendee:")); @@ -192,20 +212,20 @@ void cal_process_object(icalcomponent *cal, safestrncpy(buf, icalproperty_get_attendee(p), sizeof buf); if (!strncasecmp(buf, "MAILTO:", 7)) { - /* screen name or email address */ + /** screen name or email address */ strcpy(buf, &buf[7]); striplt(buf); escputs(buf); wprintf(" "); - /* participant status */ + /** participant status */ partstat_as_string(buf, p); escputs(buf); } wprintf("
How would you like to respond to this invitation?" - "%s" + /** Display the Accept/Decline buttons */ + wprintf("
%s" + "%s" " | " - "%s" + "%s" " | " - "%s" + "%s" "
" "%s" "" - "%s" + "%s" " | " - "%s" + "%s" "" "
\n"); @@ -297,9 +317,13 @@ void cal_process_object(icalcomponent *cal, } -/* +/** + * \brief process calendar mail atachment * Deserialize a calendar object in a message so it can be processed. * (This is the main entry point for these things) + * \param part_source the part of the message we want to parse + * \param msgnum number of the mesage in our db + * \param cal_partnum the number of the calendar item */ void cal_process_attachment(char *part_source, long msgnum, char *cal_partnum) { icalcomponent *cal; @@ -322,13 +346,14 @@ void cal_process_attachment(char *part_source, long msgnum, char *cal_partnum) { -/* +/** + * \brief accept/decline meeting * Respond to a meeting request */ void respond_to_request(void) { char buf[SIZ]; - output_headers(1, 1, 2, 0, 0, 0, 0); + output_headers(1, 1, 2, 0, 0, 0); wprintf("
\n"); wprintf("
" @@ -348,7 +373,7 @@ void respond_to_request(void) { if (buf[0] == '2') { wprintf("
" - "" + "" "" ); if (!strcasecmp(bstr("sc"), "accept")) { @@ -368,11 +393,11 @@ void respond_to_request(void) { wprintf(_("A reply has been sent to the meeting organizer.")); wprintf("
\n"); } else { - wprintf("" + wprintf("" "%s\n", &buf[4]); } - wprintf("wc_roomname); wprintf("\">
"); wprintf(_("Return to messages")); @@ -383,13 +408,13 @@ void respond_to_request(void) { -/* - * Handle an incoming RSVP +/** + * \brief Handle an incoming RSVP */ void handle_rsvp(void) { char buf[SIZ]; - output_headers(1, 1, 2, 0, 0, 0, 0); + output_headers(1, 1, 2, 0, 0, 0); wprintf("
\n"); wprintf("
" @@ -409,7 +434,7 @@ void handle_rsvp(void) { if (buf[0] == '2') { wprintf("
" - "" + "" "" ); if (!strcasecmp(bstr("sc"), "update")) { @@ -422,11 +447,11 @@ void handle_rsvp(void) { wprintf("
\n" ); } else { - wprintf("" + wprintf("" "%s\n", &buf[4]); } - wprintf("wc_roomname); wprintf("\">
"); wprintf(_("Return to messages")); @@ -437,20 +462,26 @@ void handle_rsvp(void) { - -/*****************************************************************************/ +/*@}*/ +/*-----------------------------------------------------------------------**/ -/* - * Display handlers for message reading +/** + * \defgroup MsgDisplayHandlers Display handlers for message reading + * \ingroup Calendaring */ +/*@{*/ -/* + +/** + * \brief get items, keep them. * If we're reading calendar items, just store them for now. We have to * sort and re-output them later when we draw the calendar. + * \param cal Our calendar to process + * \param msgnum number of the mesage in our db */ void display_individual_cal(icalcomponent *cal, long msgnum) { @@ -466,8 +497,10 @@ void display_individual_cal(icalcomponent *cal, long msgnum) { /* + * \brief edit a task * Display a task by itself (for editing) - * + * \param supplied_vtodo the todo item we want to edit + * \param msgnum number of the mesage in our db */ void display_edit_individual_task(icalcomponent *supplied_vtodo, long msgnum) { icalcomponent *vtodo; @@ -481,7 +514,8 @@ void display_edit_individual_task(icalcomponent *supplied_vtodo, long msgnum) { if (supplied_vtodo != NULL) { vtodo = supplied_vtodo; - /* If we're looking at a fully encapsulated VCALENDAR + /** + * If we're looking at a fully encapsulated VCALENDAR * rather than a VTODO component, attempt to use the first * relevant VTODO subcomponent. If there is none, the * NULL returned by icalcomponent_get_first_component() will @@ -502,10 +536,10 @@ void display_edit_individual_task(icalcomponent *supplied_vtodo, long msgnum) { created_new_vtodo = 1; } - output_headers(1, 1, 2, 0, 0, 0, 0); + output_headers(1, 1, 2, 0, 0, 0); wprintf("
\n" "" - "" + "" "
"); wprintf(_("Edit task")); wprintf("" @@ -513,10 +547,10 @@ void display_edit_individual_task(icalcomponent *supplied_vtodo, long msgnum) { "\n
\n" ); - wprintf("
" + wprintf("
" "
"); - wprintf("
\n"); + wprintf("\n"); wprintf("\n", msgnum); @@ -593,8 +627,9 @@ void display_edit_individual_task(icalcomponent *supplied_vtodo, long msgnum) { } /* - * Save an edited task - * + * \brief Save an edited task + * \param supplied_vtodo the task to save + * \param msgnum number of the mesage in our db */ void save_individual_task(icalcomponent *supplied_vtodo, long msgnum) { char buf[SIZ]; @@ -608,7 +643,8 @@ void save_individual_task(icalcomponent *supplied_vtodo, long msgnum) { if (supplied_vtodo != NULL) { vtodo = supplied_vtodo; - /* If we're looking at a fully encapsulated VCALENDAR + /** + * If we're looking at a fully encapsulated VCALENDAR * rather than a VTODO component, attempt to use the first * relevant VTODO subcomponent. If there is none, the * NULL returned by icalcomponent_get_first_component() will @@ -631,7 +667,7 @@ void save_individual_task(icalcomponent *supplied_vtodo, long msgnum) { if (strlen(bstr("save_button")) > 0) { - /* Replace values in the component with ones from the form */ + /** Replace values in the component with ones from the form */ while (prop = icalcomponent_get_first_property(vtodo, ICAL_SUMMARY_PROPERTY), prop != NULL) { @@ -669,7 +705,7 @@ void save_individual_task(icalcomponent *supplied_vtodo, long msgnum) { icalproperty_new_due(t) ); - /* Give this task a UID if it doesn't have one. */ + /** Give this task a UID if it doesn't have one. */ lprintf(9, "Give this task a UID if it doesn't have one.\n"); if (icalcomponent_get_first_property(vtodo, ICAL_UID_PROPERTY) == NULL) { @@ -679,7 +715,7 @@ void save_individual_task(icalcomponent *supplied_vtodo, long msgnum) { ); } - /* Increment the sequence ID */ + /** Increment the sequence ID */ lprintf(9, "Increment the sequence ID\n"); while (prop = icalcomponent_get_first_property(vtodo, ICAL_SEQUENCE_PROPERTY), (prop != NULL) ) { @@ -695,7 +731,7 @@ void save_individual_task(icalcomponent *supplied_vtodo, long msgnum) { icalproperty_new_sequence(sequence) ); - /* + /** * Encapsulate event into full VCALENDAR component. Clone it first, * for two reasons: one, it's easier to just free the whole thing * when we're done instead of unbundling, but more importantly, we @@ -714,7 +750,8 @@ void save_individual_task(icalcomponent *supplied_vtodo, long msgnum) { serv_puts(icalcomponent_as_ical_string(encaps)); serv_puts("000"); - /* Probably not necessary; the server will see the UID + /** + * Probably not necessary; the server will see the UID * of the object and delete the old one anyway, but * just in case... */ @@ -723,7 +760,7 @@ void save_individual_task(icalcomponent *supplied_vtodo, long msgnum) { icalcomponent_free(encaps); } - /* + /** * If the user clicked 'Delete' then explicitly delete the message. */ if (strlen(bstr("delete_button")) > 0) { @@ -739,17 +776,22 @@ void save_individual_task(icalcomponent *supplied_vtodo, long msgnum) { icalcomponent_free(vtodo); } - /* Go back to the task list */ + /** Go back to the task list */ readloop("readfwd"); } -/* +/** + * \brief generic item handler * Code common to all display handlers. Given a message number and a MIME * type, we load the message and hunt for that MIME type. If found, we load * the relevant part, deserialize it into a libical component, filter it for * the requested object type, and feed it to the specified handler. + * \param mimetype mimetyp of our object + * \param which_kind sort of ical type + * \param msgnum number of the mesage in our db + * \param callback a funcion \todo * */ void display_using_handler(long msgnum, @@ -796,12 +838,12 @@ void display_using_handler(long msgnum, ical_dezonify(cal); - /* Simple components of desired type */ + /** Simple components of desired type */ if (icalcomponent_isa(cal) == which_kind) { callback(cal, msgnum); } - /* Subcomponents of desired type */ + /** Subcomponents of desired type */ for (c = icalcomponent_get_first_component(cal, which_kind); (c != 0); @@ -817,39 +859,53 @@ void display_using_handler(long msgnum, } +/** + * \brief display whole calendar + * \param msgnum number of the mesage in our db + */ void display_calendar(long msgnum) { display_using_handler(msgnum, "text/calendar", ICAL_VEVENT_COMPONENT, display_individual_cal); } +/** + * \brief display whole taksview + * \param msgnum number of the mesage in our db + */ void display_task(long msgnum) { display_using_handler(msgnum, "text/calendar", ICAL_VTODO_COMPONENT, display_individual_cal); } +/** + * \brief display the editor component for a task + */ void display_edit_task(void) { long msgnum = 0L; - /* Force change the room if we have to */ + /** Force change the room if we have to */ if (strlen(bstr("taskrm")) > 0) { gotoroom(bstr("taskrm")); } msgnum = atol(bstr("msgnum")); if (msgnum > 0L) { - /* existing task */ + /** existing task */ display_using_handler(msgnum, "text/calendar", ICAL_VTODO_COMPONENT, display_edit_individual_task); } else { - /* new task */ + /** new task */ display_edit_individual_task(NULL, 0L); } } +/** + *\brief save an edited task + */ void save_task(void) { long msgnum = 0L; @@ -864,6 +920,9 @@ void save_task(void) { } } +/** + * \brief display the editor component for an event + */ void display_edit_event(void) { long msgnum = 0L; @@ -880,6 +939,9 @@ void display_edit_event(void) { } } +/** + * \brief save an edited event + */ void save_event(void) { long msgnum = 0L; @@ -899,8 +961,9 @@ void save_event(void) { -/* - * freebusy display (for client software) +/** + * \brief freebusy display (for client software) + * \param req dunno. ????? */ void do_freebusy(char *req) { char who[SIZ]; @@ -924,8 +987,8 @@ void do_freebusy(char *req) { serv_getln(buf, sizeof buf); if (buf[0] != '1') { - wprintf("HTTP/1.0 404 %s\n", &buf[4]); - output_headers(0, 0, 0, 0, 0, 0, 0); + wprintf("HTTP/1.1 404 %s\n", &buf[4]); + output_headers(0, 0, 0, 0, 0, 0); wprintf("Content-Type: text/plain\r\n"); wprintf("\r\n"); wprintf("%s\n", &buf[4]); @@ -940,3 +1003,6 @@ void do_freebusy(char *req) { #endif /* WEBCIT_WITH_CALENDAR_SERVICE */ + + +/*@}*/