}
else {
tt = icaltime_as_timet(t);
- fmt_date(buf, tt, 0);
+ webcit_fmt_date(buf, tt, 0);
wprintf("<dt>");
wprintf(_("Starting date/time:"));
wprintf("</dt><dd>%s</dd>", buf);
if (p != NULL) {
t = icalproperty_get_dtend(p);
tt = icaltime_as_timet(t);
- fmt_date(buf, tt, 0);
+ webcit_fmt_date(buf, tt, 0);
wprintf("<dt>");
wprintf(_("Ending date/time:"));
wprintf("</dt><dd>%s</dd>", buf);
_("CONFLICT:")
)
);
+ wprintf("</dt><dd>");
escputs(conflict_message);
- wprintf("</dt>\n");
+ wprintf("</dd>\n");
}
}
lprintf(9, "...done.\n");
wprintf("</dl>");
/** Display the Accept/Decline buttons */
- wprintf("<p id=\"%s_question\" class=\"buttons\">"
+ wprintf("<p id=\"%s_question\">"
"%s "
+ " <span class=\"button_link\"> "
"<a href=\"javascript:RespondToInvitation('%s_question','%s_title','%ld','%s','Accept');\">%s</a>"
- "<span> | </span>"
+ "</span> <span class=\"button_link\">"
"<a href=\"javascript:RespondToInvitation('%s_question','%s_title','%ld','%s','Tentative');\">%s</a>"
- "<span> | </span>"
+ "</span> <span class=\"button_link\">"
"<a href=\"javascript:RespondToInvitation('%s_question','%s_title','%ld','%s','Decline');\">%s</a>"
- "</p>\n",
+ "</span></p>\n",
divname,
_("How would you like to respond to this invitation?"),
divname, divname, msgnum, cal_partnum, _("Accept"),
***********/
/** Display the update buttons */
- wprintf("<div id=\"%s_question\" class=\"buttons\">"
- "%s"
+ wprintf("<p id=\"%s_question\" >"
+ "%s "
+ " <span class=\"button_link\"> "
"<a href=\"javascript:HandleRSVP('%s_question','%s_title','%ld','%s','Update');\">%s</a>"
- "<span> | </span>"
+ "</span> <span class=\"button_link\">"
"<a href=\"javascript:HandleRSVP('%s_question','%s_title','%ld','%s','Ignore');\">%s</a>"
- "</p>\n",
+ "</span></p>\n",
divname,
_("Click <i>Update</i> to accept this reply and update your calendar."),
divname, divname, msgnum, cal_partnum, _("Update"),
/** Trailing HTML for the display of this object */
if (recursion_level == 0) {
- wprintf("</div>\n");
+ wprintf("<p> </p></div>\n");
}
}
serv_getln(buf, sizeof buf);
if (buf[0] == '2') {
- wprintf("<table border=0 cellpadding=0><tr><td>");
- wprintf("<td><img align=\"center\" src=\"static/calarea_48x.gif\"></td><td><b><i>");
+ wprintf("<img src=\"static/calarea_48x.gif\"><span>");
if (!strcasecmp(bstr("sc"), "accept")) {
wprintf(_("You have accepted this meeting invitation. "
"It has been entered into your calendar.")
}
wprintf(" ");
wprintf(_("A reply has been sent to the meeting organizer."));
- wprintf("</i></b></td></tr></table>");
+ wprintf("</span>");
} else {
- wprintf("<img align=\"center\" src=\"static/error.gif\"> <b><i>");
+ wprintf("<img align=\"center\" src=\"static/error.gif\"><span>");
wprintf("%s\n", &buf[4]);
+ wprintf("</span>");
}
end_ajax_response();
serv_getln(buf, sizeof buf);
if (buf[0] == '2') {
- wprintf("<table border=0 cellpadding=0><tr><td>");
- wprintf("<td><img align=\"center\" src=\"static/calarea_48x.gif\"></td><td><b><i>");
+ wprintf("<img src=\"static/calarea_48x.gif\"><span>");
if (!strcasecmp(bstr("sc"), "update")) {
wprintf(_("Your calendar has been updated to reflect this RSVP."));
} else if (!strcasecmp(bstr("sc"), "ignore")) {
"Your calendar has <b>not</b> been updated.")
);
}
- wprintf("</i></b></td></tr></table>");
+ wprintf("</span>");
} else {
- wprintf("<img src=\"static/error.gif\" align=center> %s\n", &buf[4]);
+ wprintf("<img src=\"static/error.gif\"><span> %s\n", &buf[4]);
+ wprintf("</span>");
}
end_ajax_response();
* \param cal Our calendar to process
* \param msgnum number of the mesage in our db
*/
-void display_individual_cal(icalcomponent *cal, long msgnum) {
-
- WC->num_cal += 1;
-
- WC->disp_cal = realloc(WC->disp_cal,
- (sizeof(struct disp_cal) * WC->num_cal) );
- WC->disp_cal[WC->num_cal - 1].cal = icalcomponent_new_clone(cal);
-
- WC->disp_cal[WC->num_cal - 1].cal_msgnum = msgnum;
+void display_individual_cal(icalcomponent *cal, long msgnum, char *from, int unread)
+{
+ struct wcsession *WCC = WC; /* stack this for faster access (WC is a function) */
+
+ WCC->num_cal += 1;
+ WCC->disp_cal = realloc(WC->disp_cal, (sizeof(struct disp_cal) * WCC->num_cal) );
+ WCC->disp_cal[WCC->num_cal - 1].cal = icalcomponent_new_clone(cal);
+ WCC->disp_cal[WCC->num_cal - 1].unread = unread;
+ WCC->disp_cal[WCC->num_cal - 1].from = malloc (strlen(from) + 1);
+ strcpy (WCC->disp_cal[WCC->num_cal - 1].from, from);
+ ical_dezonify(WCC->disp_cal[WCC->num_cal - 1].cal);
+ WCC->disp_cal[WCC->num_cal - 1].cal_msgnum = msgnum;
}
* \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) {
+void display_edit_individual_task(icalcomponent *supplied_vtodo, long msgnum, char *from, int unread) {
icalcomponent *vtodo;
icalproperty *p;
struct icaltimetype t;
display_edit_individual_task(
icalcomponent_get_first_component(
vtodo, ICAL_VTODO_COMPONENT
- ), msgnum
+ ),
+ msgnum,
+ from, unread
);
return;
}
}
output_headers(1, 1, 2, 0, 0, 0);
- wprintf("<div id=\"banner\">\n"
- "<TABLE class=\"calendar_banner\"><TR>"
- "<TD><img src=\"static/taskmanag_48x.gif\"></TD>"
- "<td><SPAN CLASS=\"titlebar\">");
+ wprintf("<div id=\"banner\">\n");
+ wprintf("<img src=\"static/taskmanag_48x.gif\">");
+ wprintf("<h1>");
wprintf(_("Edit task"));
- wprintf("</SPAN>"
- "</TD></TR></TABLE>\n"
- "</div>\n<div id=\"content\">\n"
- );
+ wprintf("</h1>");
+ wprintf("</div>\n");
+
+ wprintf("<div id=\"content\" class=\"service\">\n");
wprintf("<div class=\"fix_scrollbar_bug\">"
"<table class=\"calendar_background\"><tr><td>");
* \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) {
+void save_individual_task(icalcomponent *supplied_vtodo, long msgnum, char* from, int unread) {
char buf[SIZ];
int delete_existing = 0;
icalproperty *prop;
if (icalcomponent_isa(vtodo) == ICAL_VCALENDAR_COMPONENT) {
save_individual_task(
icalcomponent_get_first_component(
- vtodo, ICAL_VTODO_COMPONENT
- ), msgnum
+ vtodo, ICAL_VTODO_COMPONENT),
+ msgnum, from, unread
);
return;
}
icalcomponent_remove_property(vtodo, prop);
icalproperty_free(prop);
}
- icalcomponent_add_property(vtodo,
- icalproperty_new_summary(bstr("summary")));
-
+ if (!IsEmptyStr(bstr("summary"))) {
+
+ icalcomponent_add_property(vtodo,
+ icalproperty_new_summary(bstr("summary")));
+ } else {
+ icalcomponent_add_property(vtodo,
+ icalproperty_new_summary("Untitled Task"));
+ }
+
while (prop = icalcomponent_get_first_property(vtodo,
ICAL_DESCRIPTION_PROPERTY), prop != NULL) {
icalcomponent_remove_property(vtodo, prop);
* \param callback a funcion \todo
*
*/
-void display_using_handler(long msgnum,
- char *mimetype,
- icalcomponent_kind which_kind,
- void (*callback)(icalcomponent *, long)
+void display_using_handler(long msgnum, int unread,
+ icalcomponent_kind which_kind,
+ void (*callback)(icalcomponent *, long, char*, int)
) {
char buf[1024];
+ char from[128] = "";
char mime_partnum[256];
char mime_filename[256];
char mime_content_type[256];
char *relevant_source = NULL;
icalcomponent *cal, *c;
- sprintf(buf, "MSG0 %ld|0", msgnum); /* unfortunately we need the mime headers */
+ relevant_partnum[0] = '\0';
+ sprintf(buf, "MSG4 %ld", msgnum); /* we need the mime headers */
serv_puts(buf);
serv_getln(buf, sizeof buf);
if (buf[0] != '1') return;
extract_token(mime_content_type, &buf[5], 4, '|', sizeof mime_content_type);
mime_length = extract_int(&buf[5], 5);
- if (!strcasecmp(mime_content_type, "text/calendar")) {
+ if ( (!strcasecmp(mime_content_type, "text/calendar"))
+ || (!strcasecmp(mime_content_type, "application/ics"))
+ || (!strcasecmp(mime_content_type, "text/vtodo"))
+ ) {
strcpy(relevant_partnum, mime_partnum);
}
-
+ }
+ else if (!strncasecmp(buf, "from=", 4)) {
+ extract_token(from, buf, 1, '=', sizeof(from));
}
}
/** Simple components of desired type */
if (icalcomponent_isa(cal) == which_kind) {
- callback(cal, msgnum);
+ callback(cal, msgnum, from, unread);
}
/** Subcomponents of desired type */
(c != 0);
c = icalcomponent_get_next_component(cal,
which_kind)) {
- callback(c, msgnum);
+ callback(c, msgnum, from, unread);
}
icalcomponent_free(cal);
}
free(relevant_source);
}
}
-
+ icalmemory_free_ring();
}
/**
* \brief display whole calendar
* \param msgnum number of the mesage in our db
*/
-void display_calendar(long msgnum) {
- display_using_handler(msgnum, "text/calendar",
+void display_calendar(long msgnum, int unread) {
+ display_using_handler(msgnum, unread,
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",
+void display_task(long msgnum, int unread) {
+ display_using_handler(msgnum, unread,
ICAL_VTODO_COMPONENT,
display_individual_cal);
}
msgnum = atol(bstr("msgnum"));
if (msgnum > 0L) {
/** existing task */
- display_using_handler(msgnum, "text/calendar",
+ display_using_handler(msgnum, 0,
ICAL_VTODO_COMPONENT,
display_edit_individual_task);
}
else {
/** new task */
- display_edit_individual_task(NULL, 0L);
+ display_edit_individual_task(NULL, 0L, "", 0);
}
}
msgnum = atol(bstr("msgnum"));
if (msgnum > 0L) {
- display_using_handler(msgnum, "text/calendar",
+ display_using_handler(msgnum, 0,
ICAL_VTODO_COMPONENT,
save_individual_task);
}
else {
- save_individual_task(NULL, 0L);
+ save_individual_task(NULL, 0L, "", 0);
}
}
msgnum = atol(bstr("msgnum"));
if (msgnum > 0L) {
/* existing event */
- display_using_handler(msgnum, "text/calendar",
+ display_using_handler(msgnum, 0,
ICAL_VEVENT_COMPONENT,
display_edit_individual_event);
}
else {
/* new event */
- display_edit_individual_event(NULL, 0L);
+ display_edit_individual_event(NULL, 0L, "", 0);
}
}
msgnum = atol(bstr("msgnum"));
if (msgnum > 0L) {
- display_using_handler(msgnum, "text/calendar",
+ display_using_handler(msgnum, 0,
ICAL_VEVENT_COMPONENT,
save_individual_event);
}
else {
- save_individual_event(NULL, 0L);
+ save_individual_event(NULL, 0L, "", 0);
}
}
#endif /* WEBCIT_WITH_CALENDAR_SERVICE */
-
-/*@}*/