X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fcalendar_view.c;h=c8820b22c6333092e972889fc79f4bfaae8b7e6f;hb=4b4dc864ede7c5d8d956febe4a0afb422b78e7c4;hp=a60697a623d896eac465bd67341a314ce82ac944;hpb=a756685375373a04dcfa4b6be45a0acd7f4be23b;p=citadel.git diff --git a/webcit/calendar_view.c b/webcit/calendar_view.c index a60697a62..c8820b22c 100644 --- a/webcit/calendar_view.c +++ b/webcit/calendar_view.c @@ -1,14 +1,12 @@ /* - * $Id$ - * * Handles the HTML display of calendar items. * - * Copyright (c) 1996-2010 by the citadel.org team + * Copyright (c) 1996-2011 by the citadel.org team * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. + * This program is open source software. You can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -17,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "webcit.h" @@ -42,7 +40,7 @@ void embeddable_mini_calendar(int year, int month) long weekstart = 0; char url[256]; char div_id[256]; - + snprintf(div_id, sizeof div_id, "mini_calendar_%d", rand() ); /* Determine what day to start. If an impossible value is found, start on Sunday. @@ -96,7 +94,7 @@ void embeddable_mini_calendar(int year, int month) wc_printf("»", (int)(tm.tm_year)+1900, tm.tm_mon + 1); - wc_printf("" + wc_printf("
" ""); colheader_time = thetime; for (i=0; i<7; ++i) { @@ -121,7 +119,7 @@ void embeddable_mini_calendar(int year, int month) } if (tm.tm_mon == month-1) { - snprintf(url, sizeof url, "readfwd?calview=day&year=%d&month=%d&day=%d", + snprintf(url, sizeof url, "readfwd?calview=day?year=%d?month=%d?day=%d", tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday); wc_printf("", url, tm.tm_mday); } @@ -190,7 +188,7 @@ void calendar_month_view_display_events(int year, int month, int day) time_t tt; if (GetCount(WCC->disp_cal_items) == 0) { - wc_printf("


\n"); + wc_printf("
\n"); return; } @@ -261,6 +259,14 @@ void calendar_month_view_display_events(int year, int month, int day) * If we determined that this event occurs today, then display it. */ if (show_event) { + + /* time_t logtt = icaltime_as_timet(t); + syslog(LOG_DEBUG, "Match on %04d-%02d-%02d for event %x%s on %s", + year, month, day, + (int)Cal, ((all_day_event) ? " (all day)" : ""), + ctime(&logtt) + ); */ + p = icalcomponent_get_first_property(Cal->cal, ICAL_SUMMARY_PROPERTY); if (p == NULL) { p = icalproperty_new_summary(_("Untitled Event")); @@ -269,40 +275,45 @@ void calendar_month_view_display_events(int year, int month, int day) if (p != NULL) { if (all_day_event) { - wc_printf("
%d
" + wc_printf("
" "
" ); } + wc_printf("" "" + , (Cal->unread)?"_unread":"_read", Cal->cal_msgnum, year, month, day - ); + ); + + escputs((char *) icalproperty_get_comment(p)); - wc_printf("%s: %s
", _("From"), Cal->from); + wc_printf(""); + + wc_printf("%s: %s
", _("From"), Cal->from); wc_printf("%s ", _("Summary:")); escputs((char *)icalproperty_get_comment(p)); - wc_printf("
"); - + wc_printf("
"); + q = icalcomponent_get_first_property( Cal->cal, ICAL_LOCATION_PROPERTY); if (q) { wc_printf("%s ", _("Location:")); escputs((char *)icalproperty_get_comment(q)); - wc_printf("
"); + wc_printf("
"); } - + /* * Only show start/end times if we're actually looking at the VEVENT * component. Otherwise it shows bogus dates for e.g. timezones */ if (icalcomponent_isa(Cal->cal) == ICAL_VEVENT_COMPONENT) { - + q = icalcomponent_get_first_property(Cal->cal, ICAL_DTSTART_PROPERTY); if (q != NULL) { int no_end = 0; @@ -364,33 +375,31 @@ void calendar_month_view_display_events(int year, int month, int day) webcit_fmt_date(buf, 256, tt, DATEFMT_BRIEF); wc_printf("%s %s
", _("Ending date/time:"), buf); } - + } } - + } - + q = icalcomponent_get_first_property(Cal->cal, ICAL_DESCRIPTION_PROPERTY); if (q) { wc_printf("%s ", _("Notes:")); escputs((char *)icalproperty_get_comment(q)); - wc_printf("
"); + wc_printf("
"); } - - wc_printf("\">"); - escputs((char *) - icalproperty_get_comment(p)); - wc_printf("

\n"); - + + wc_printf(""); + wc_printf("
\n"); + if (all_day_event) { wc_printf("
"); } - + } - + } - - + + } DeleteHashPos(&Pos); } @@ -415,20 +424,16 @@ void calendar_month_view_brief_events(time_t thetime, const char *daycolor) { icalproperty *e; struct icaltimetype t; disp_cal *Cal; - int month, day, year; int all_day_event = 0; char *timeformat; int time_format; - + time_format = get_time_format_cached (); if (time_format == WC_TIMEFORMAT_24) timeformat="%k:%M"; else timeformat="%I:%M %p"; localtime_r(&thetime, &today_tm); - month = today_tm.tm_mon + 1; - day = today_tm.tm_mday; - year = today_tm.tm_year + 1900; Pos = GetNewHashPos(WCC->disp_cal_items, 0); while (GetNextHashPos(WCC->disp_cal_items, Pos, &hklen, &HashKey, &vCal)) { @@ -451,11 +456,11 @@ void calendar_month_view_brief_events(time_t thetime, const char *daycolor) { if ((event_tms.tm_year == today_tm.tm_year) && (event_tms.tm_mon == today_tm.tm_mon) && (event_tms.tm_mday == today_tm.tm_mday)) { - - + + char sbuf[255]; char ebuf[255]; - + p = icalcomponent_get_first_property( Cal->cal, ICAL_SUMMARY_PROPERTY); @@ -480,20 +485,20 @@ void calendar_month_view_brief_events(time_t thetime, const char *daycolor) { "", daycolor, hours, minutes, - (Cal->unread)?"_unread":"_read", + (Cal->unread)?"_unread":"_read", daycolor, Cal->cal_msgnum, bstr("year"), bstr("month"), bstr("day") ); - + escputs((char *) icalproperty_get_comment(p)); /* \todo: allso ammitime format */ wc_strftime(&sbuf[0], sizeof(sbuf), timeformat, &event_tms); wc_strftime(&ebuf[0], sizeof(sbuf), timeformat, &event_tme); - + wc_printf("" "%s%s", daycolor, @@ -501,10 +506,10 @@ void calendar_month_view_brief_events(time_t thetime, const char *daycolor) { daycolor, ebuf); } - + } - - + + } } DeleteHashPos(&Pos); @@ -568,21 +573,20 @@ void calendar_month_view(int year, int month, int day) { } /* Outer table (to get the background color) */ - wc_printf("
" - " \n
"); + wc_printf(" \n
"); - wc_printf("\n"); + wc_printf("
\n"); - wc_printf("
"); + wc_printf(""); localtime_r(&previous_month, &tm); wc_printf("", (int)(tm.tm_year)+1900, tm.tm_mon + 1); - wc_printf("\n"); + wc_printf("\"%s\"\n", _("previous")); wc_strftime(colheader_label, sizeof colheader_label, "%B", &starting_tm); wc_printf("  " - "" + "" "%s %d" "" "  ", colheader_label, year); @@ -590,20 +594,20 @@ void calendar_month_view(int year, int month, int day) { localtime_r(&next_month, &tm); wc_printf("", (int)(tm.tm_year)+1900, tm.tm_mon + 1); - wc_printf("\n"); + wc_printf("\"%s\"\n", _("next")); wc_printf("
\n"); /* Inner table (the real one) */ - wc_printf(""); - wc_printf(""); + wc_printf("
"); + wc_printf(""); colheader_time = thetime; for (i=0; i<7; ++i) { colheader_time = thetime + (i * 86400) ; localtime_r(&colheader_time, &colheader_tm); wc_strftime(colheader_label, sizeof colheader_label, "%A", &colheader_tm); - wc_printf("", colheader_label); } @@ -661,22 +665,7 @@ void calendar_month_view(int year, int month, int day) { } wc_printf("
" + wc_printf("" "%s
" /* end of inner table */ - "
" /* end of outer table */ - "\n"); - - /* - * Initialize the bubble tooltips. - * - * Yes, this is as stupid as it looks. Instead of just making the call - * to btt_enableTooltips() straight away, we have to create a timer event - * and let it initialize as an event after 1 millisecond. This is to - * work around a bug in Internet Explorer that causes it to crash if we - * manipulate the innerHTML of various DOM nodes while the page is still - * being rendered. See http://www.shaftek.org/blog/archives/000212.html - * for more information. - */ - StrBufAppendPrintf(WC->trailing_javascript, - " setTimeout(\"btt_enableTooltips('inner_month')\", 1); \n" + "
\n" /* end of outer table */ ); } @@ -719,22 +708,21 @@ void calendar_brief_month_view(int year, int month, int day) { } /* Outer table (to get the background color) */ - wc_printf("
" - "
\n"); + wc_printf("
\n"); - wc_printf("\n"); + wc_printf("
\n"); - wc_printf("
"); + wc_printf(""); localtime_r(&previous_month, &tm); wc_printf("", (int)(tm.tm_year)+1900, tm.tm_mon + 1); - wc_printf("\n"); + wc_printf("\"%s\"\n", _("previous")); wc_strftime(month_label, sizeof month_label, "%B", &tm); wc_printf("  " - "" + "" "%s %d" "" "  ", month_label, year); @@ -742,12 +730,12 @@ void calendar_brief_month_view(int year, int month, int day) { localtime_r(&next_month, &tm); wc_printf("", (int)(tm.tm_year)+1900, tm.tm_mon + 1); - wc_printf("\n"); + wc_printf("\"%s\"\n", _("next")); wc_printf("
\n"); /* Inner table (the real one) */ - wc_printf(""); wc_printf("\n"); wc_printf("
\n"); @@ -764,8 +752,8 @@ void calendar_brief_month_view(int year, int month, int day) { if ((i % 7) == 0) { wc_strftime(&weeknumber[0], sizeof(weeknumber), "%U", &tm); wc_printf("" - " \n", - _("Week"), + " \n", + _("Week"), weeknumber, _("Hours"), _("Subject"), @@ -773,11 +761,11 @@ void calendar_brief_month_view(int year, int month, int day) { _("End") ); } - + daycolor=((tm.tm_mon != month-1) ? "DDDDDD" : ((tm.tm_wday==0 || tm.tm_wday==6) ? "EEEECC" : "FFFFFF")); - + /* Day Header */ wc_strftime(weekday_name, sizeof weekday_name, "%A", &tm); wc_printf("
%s %s
%s%s%s%s
%s%s%s%s
%s,%i." @@ -799,15 +787,15 @@ void calendar_brief_month_view(int year, int month, int day) { } wc_printf("
" /* end of inner table */ - "
" /* end of outer table */ - "\n"); + "
\n" /* end of outer table */ + ); } /* * Calendar week view -- not implemented yet, this is a stub function */ void calendar_week_view(int year, int month, int day) { - wc_printf("
week view FIXME

\n"); + wc_printf("
week view FIXME

\n"); } @@ -959,20 +947,23 @@ void calendar_day_view_display_events(time_t thetime, wc_printf("
  • " "" + , (Cal->unread)?"_unread":"_read", - Cal->cal_msgnum, year, month, day); - wc_printf("%s
    ", _("All day event")); - wc_printf("%s: %s
    ", _("From"), Cal->from); + Cal->cal_msgnum, year, month, day + ); + escputs((char *) icalproperty_get_comment(p)); + wc_printf(""); + wc_printf("%s
    ", _("All day event")); + wc_printf("%s: %s
    ", _("From"), Cal->from); wc_printf("%s ", _("Summary:")); escputs((char *) icalproperty_get_comment(p)); - wc_printf("
    "); + wc_printf("
    "); q = icalcomponent_get_first_property(Cal->cal,ICAL_LOCATION_PROPERTY); if (q) { wc_printf("%s ", _("Location:")); escputs((char *)icalproperty_get_comment(q)); - wc_printf("
    "); + wc_printf("
    "); } if (!icaltime_compare(t, end_t)) { /* one day only */ webcit_fmt_date(buf, 256, event_tt, DATEFMT_LOCALEDATE); @@ -988,10 +979,9 @@ void calendar_day_view_display_events(time_t thetime, if (q) { wc_printf("%s ", _("Notes:")); escputs((char *)icalproperty_get_comment(q)); - wc_printf("
    "); + wc_printf("
    "); } - wc_printf("\">"); - escputs((char *) icalproperty_get_comment(p)); + wc_printf("
    "); wc_printf("
    ("); wc_printf(_("All day event")); wc_printf(")
  • \n"); @@ -1001,20 +991,23 @@ void calendar_day_view_display_events(time_t thetime, wc_printf("
  • " "" + , (Cal->unread)?"_unread":"_read", - Cal->cal_msgnum, year, month, day); - wc_printf("%s
    ", _("Ongoing event")); - wc_printf("%s: %s
    ", _("From"), Cal->from); + Cal->cal_msgnum, year, month, day + ); + escputs((char *) icalproperty_get_comment(p)); + wc_printf(""); + wc_printf("%s
    ", _("Ongoing event")); + wc_printf("%s: %s
    ", _("From"), Cal->from); wc_printf("%s ", _("Summary:")); escputs((char *) icalproperty_get_comment(p)); - wc_printf("
    "); + wc_printf("
    "); q = icalcomponent_get_first_property(Cal->cal,ICAL_LOCATION_PROPERTY); if (q) { wc_printf("%s ", _("Location:")); escputs((char *)icalproperty_get_comment(q)); - wc_printf("
    "); + wc_printf("
    "); } webcit_fmt_date(buf, 256, event_tt, DATEFMT_BRIEF); wc_printf("%s %s
    ", _("Starting date/time:"), buf); @@ -1024,10 +1017,9 @@ void calendar_day_view_display_events(time_t thetime, if (q) { wc_printf("%s ", _("Notes:")); escputs((char *)icalproperty_get_comment(q)); - wc_printf("
    "); + wc_printf("
    "); } - wc_printf("\">"); - escputs((char *) icalproperty_get_comment(p)); + wc_printf("
    "); wc_printf("
    ("); wc_printf(_("Ongoing event")); wc_printf(")
  • \n"); @@ -1082,18 +1074,21 @@ void calendar_day_view_display_events(time_t thetime, ); wc_printf("cal_msgnum, year, month, day, t.hour); - wc_printf("%s: %s
    ", _("From"), Cal->from); + "class=\"event_title\">" + , + Cal->cal_msgnum, year, month, day, t.hour + ); + escputs((char *) icalproperty_get_comment(p)); + wc_printf(""); + wc_printf("%s: %s
    ", _("From"), Cal->from); wc_printf("%s ", _("Summary:")); escputs((char *) icalproperty_get_comment(p)); - wc_printf("
    "); + wc_printf("
    "); q = icalcomponent_get_first_property(Cal->cal,ICAL_LOCATION_PROPERTY); if (q) { wc_printf("%s ", _("Location:")); escputs((char *)icalproperty_get_comment(q)); - wc_printf("
    "); + wc_printf("
    "); } if (!icaltime_compare(t, end_t)) { /* one day only */ webcit_fmt_date(buf, 256, event_tt, DATEFMT_BRIEF); @@ -1109,11 +1104,9 @@ void calendar_day_view_display_events(time_t thetime, if (q) { wc_printf("%s ", _("Notes:")); escputs((char *)icalproperty_get_comment(q)); - wc_printf("
    "); + wc_printf("
    "); } - wc_printf("\">"); - - escputs((char *) icalproperty_get_comment(p)); + wc_printf("
    "); wc_printf("
    \n"); } } @@ -1148,7 +1141,7 @@ void calendar_day_view(int year, int month, int day) { daystart = 9; dayend = 17; } - + /* Today's date */ memset(&d_tm, 0, sizeof d_tm); d_tm.tm_year = year - 1900; @@ -1172,8 +1165,6 @@ void calendar_day_view(int year, int month, int day) { ++tomorrow.day; tomorrow = icaltime_normalize(tomorrow); - wc_printf("
    "); - /* Inner table (the real one) */ wc_printf(" \n"); @@ -1188,18 +1179,14 @@ void calendar_day_view(int year, int month, int day) { if (hourlabel > (timeline - 2)) hourlabel = timeline - 2; for (hour = 0; hour < daystart; ++hour) { /* could do HEIGHT=xx */ - wc_printf("
    " + wc_printf("
    " "", +/* TODO: what have these been used for? (hour * extratimeline ), extratimeline, extrahourlabel, +*/ year, month, day, hour ); @@ -1219,18 +1206,14 @@ void calendar_day_view(int year, int month, int day) { gap = daystart * extratimeline; for (hour = daystart; hour <= dayend; ++hour) { /* could do HEIGHT=xx */ - wc_printf("
    " + wc_printf("
    " "", +/*TODO: what have these been used for? gap + ((hour - daystart) * timeline ), timeline, hourlabel, +*/ year, month, day, hour ); @@ -1250,18 +1233,14 @@ void calendar_day_view(int year, int month, int day) { gap = gap + ((dayend - daystart + 1) * timeline); for (hour = (dayend + 1); hour < 24; ++hour) { /* could do HEIGHT=xx */ - wc_printf("
    " + wc_printf("
    " "", +/*TODO: what have these been used for? gap + ((hour - dayend - 1) * extratimeline ), extratimeline, extrahourlabel, +*/ year, month, day, hour ); @@ -1296,56 +1275,48 @@ void calendar_day_view(int year, int month, int day) { wc_printf(""); /* end extra on the middle */ - wc_printf("
    "); /* end stuff-on-the-right */ - - wc_printf("
    "); /* begin stuff-on-the-right */ + wc_printf(""); /* begin stuff-on-the-right */ /* Begin todays-date-with-left-and-right-arrows */ - wc_printf("\n"); + wc_printf("
    \n"); wc_printf(""); - /* Left arrow */ - wc_printf(""); wc_strftime(d_str, sizeof d_str, - "", &d_tm ); wc_printf("%s", d_str); /* Right arrow */ - wc_printf(""); wc_printf("
    "); + /* Left arrow */ + wc_printf(""); wc_printf("", yesterday.year, yesterday.month, yesterday.day); - wc_printf(""); + wc_printf("\"previous\""); wc_printf("" - "%A
    " - "%B
    " - "%d
    " - "%Y
    " + "
    " + "%A
    " + "%B
    " + "%d
    " + "%Y
    " "
    "); + wc_printf(""); wc_printf("", tomorrow.year, tomorrow.month, tomorrow.day); - wc_printf("\n"); + wc_printf("\"%s\"\n", _("next")); wc_printf("
    \n"); /* End todays-date-with-left-and-right-arrows */ /* Embed a mini month calendar in this space */ - wc_printf("
    \n"); + wc_printf("
    \n"); embeddable_mini_calendar(year, month); - wc_printf("\n"); - wc_printf("
    " /* end of inner table */ - "
    "); - - StrBufAppendPrintf(WC->trailing_javascript, - " setTimeout(\"btt_enableTooltips('inner_day')\", 1); \n" - ); + wc_printf("
    \n"); /* end of inner table */ } @@ -1414,7 +1385,7 @@ int calendar_summary_view(void) { wc_printf("
    \n"); + wc_printf("

    \n"); ++num_displayed; } } @@ -1454,11 +1425,13 @@ int calendar_summary_view(void) { /* * Parse the URL variables in order to determine the scope and display of a calendar view */ -int calendar_GetParamsGetServerCall(SharedMessageStatus *Stat, - void **ViewSpecific, - long oper, - char *cmd, - long len) +int calendar_GetParamsGetServerCall(SharedMessageStatus *Stat, + void **ViewSpecific, + long oper, + char *cmd, + long len, + char *filter, + long flen) { wcsession *WCC = WC; calview *c; @@ -1475,7 +1448,7 @@ int calendar_GetParamsGetServerCall(SharedMessageStatus *Stat, Stat->load_seen = 1; strcpy(cmd, "MSGS ALL"); Stat->maxmsgs = 32767; - + /* In case no date was specified, go with today */ now = time(NULL); localtime_r(&now, &tm); @@ -1540,8 +1513,8 @@ int calendar_GetParamsGetServerCall(SharedMessageStatus *Stat, /* * Render a calendar view from data previously loaded into memory */ -int calendar_RenderView_or_Tail(SharedMessageStatus *Stat, - void **ViewSpecific, +int calendar_RenderView_or_Tail(SharedMessageStatus *Stat, + void **ViewSpecific, long oper) { wcsession *WCC = WC; @@ -1567,7 +1540,9 @@ int calendar_RenderView_or_Tail(SharedMessageStatus *Stat, return 0; } - - - - +void +InitModule_CALENDAR_VIEW +(void) +{ + WebcitAddUrlHandler(HKEY("mini_calendar"), "", 0, ajax_mini_calendar, AJAX); +}