icalcomponent *cal = (icalcomponent *) CTX(CTX_ICAL);
icalproperty *p;
icalproperty_kind Kind;
- struct icaltimetype tt;
Kind = (icalproperty_kind) GetTemplateTokenNumber(Target, TP, 2, ICAL_ANY_PROPERTY);
-
-
p = icalcomponent_get_first_property(cal, Kind);
if (p != NULL) {
struct icaltimetype *t;
- time_t ttt;
+ struct icaltimetype tt;
WCTemplputParams *DynamicTP;
DynamicTP = (WCTemplputParams*) malloc(sizeof(WCTemplputParams) +
sizeof(struct icaltimetype));
t = (struct icaltimetype *) ((char*)DynamicTP) + sizeof(WCTemplputParams);
+ memset(&tt, 0, sizeof(struct icaltimetype));
switch (Kind)
{
case ICAL_DTSTART_PROPERTY:
- *t = icalproperty_get_dtstart(p);
+ tt = icalproperty_get_dtstart(p);
break;
case ICAL_DTEND_PROPERTY:
tt = icalproperty_get_dtend(p);
- ttt = icaltime_as_timet(tt);
break;
default:
- memset(t, 0, sizeof(struct icaltimetype));
break;
}
-
+ memcpy(t, &tt, sizeof(struct icaltimetype));
+
StackDynamicContext (TP,
DynamicTP,
t,
icalcomponent *cal;
icalcomponent *c;
WCTemplputParams SubTP;
- WCTemplputParams SubSubTP;
+ WCTemplputParams SuperTP;
+ static int divcount = 0;
if (StrLength(Mime->Data) == 0) {
MimeLoadData(Mime);
return;
}
+ putlbstr("divname", ++divcount);
+ putbstr("cal_partnum", NewStrBufDup(Mime->PartNum));
+ putlbstr("msgnum", Mime->msgnum);
+
memset(&SubTP, 0, sizeof(WCTemplputParams));
- memset(&SubSubTP, 0, sizeof(WCTemplputParams));
- SubTP.Filter.ContextType = CTX_ICAL;
+ memset(&SuperTP, 0, sizeof(WCTemplputParams));
/*//ical_dezonify(cal); */
/* If the component has subcomponents, recurse through them. */
c = icalcomponent_get_first_component(cal, ICAL_ANY_COMPONENT);
-
c = (c != NULL) ? c : cal;
- SubTP.Context = c;
- method = icalcomponent_get_first_property(c, ICAL_METHOD_PROPERTY);
+ method = icalcomponent_get_first_property(cal, ICAL_METHOD_PROPERTY);
if (method != NULL) {
the_method = icalproperty_get_method(method);
}
- StackContext (&SubTP,
- &SubSubTP,
- &the_method,
- CTX_ICALMETHOD,
+ SuperTP.Context = &the_method;
+ SuperTP.Filter.ContextType = CTX_ICALMETHOD,
+
+ StackContext (&SuperTP,
+ &SubTP,
+ c,
+ CTX_ICAL,
0,
- SubTP.Tokens);
+ SuperTP.Tokens);
FlushStrBuf(Mime->Data);
DoTemplate(HKEY("ical_attachment_display"), Mime->Data, &SubTP);
"EnableOrDisableCheckButton(); \n"
);
- UnStackContext(&SubSubTP);
+ UnStackContext(&SubTP);
icalcomponent_free(cal);
}
void CreateIcalComponendKindLookup(void)
icalproperty_method *the_method = (icalproperty_method *) CTX(CTX_ICALMETHOD);
icalproperty_method which_method;
- which_method = GetTemplateTokenNumber(Target, TP, 3, ICAL_METHOD_X);
+ which_method = GetTemplateTokenNumber(Target, TP, 2, ICAL_METHOD_X);
return *the_method == which_method;
}
+void tmplput_Conflict(StrBuf *Target, WCTemplputParams *TP)
+{}
+HashList* IterateGetAttendees()
+{
+/*
+ /* 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)) {
+ StrBufAppendPrintf(Target, "<dt>");
+ StrBufAppendPrintf(Target, _("Attendee:"));
+ StrBufAppendPrintf(Target, "</dt><dd>");
+ ch = icalproperty_get_attendee(p);
+ if ((ch != NULL) && !strncasecmp(buf, "MAILTO:", 7)) {
+
+ /** screen name or email address * /
+ safestrncpy(buf, ch + 7, sizeof(buf));
+ striplt(buf);
+ StrEscAppend(Target, NULL, buf, 0, 0);
+ StrBufAppendPrintf(Target, " ");
+
+ /** participant status * /
+ partstat_as_string(buf, p);
+ StrEscAppend(Target, NULL, buf, 0, 0);
+ }
+ StrBufAppendPrintf(Target, "</dd>\n");
+ }
+*/
+ return NULL;
+ /* 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)) {
+ /* Recursively process subcomponent * /
+ cal_process_object(Target, c, recursion_level+1, msgnum, cal_partnum);
+ }
+ */
+}
RegisterConditional("COND:ICAL:PROPERTY", 1, cond_ICalHaveItem, CTX_ICAL);
RegisterConditional("COND:ICAL:IS:A", 1, cond_ICalIsA, CTX_ICAL);
+ RegisterNamespace("ICAL:SERV:CHECK:CONFLICT", 0, 0, tmplput_Conflict, NULL, CTX_ICAL);
+
RegisterCTX(CTX_ICALPROPERTY);
RegisterNamespace("ICAL:ITEM", 1, 2, tmplput_ICalItem, NULL, CTX_ICAL);
RegisterNamespace("ICAL:PROPERTY:STR", 0, 1, tmplput_CtxICalProperty, NULL, CTX_ICALPROPERTY);
-aaa
-<?ICAL:ITEM(#"ICAL_SUMMARY_PROPERTY", "X")>
-abc
-
-<?!("COND:ICAL:PROPERTY", 1, #"ICAL_SUMMARY_PROPERTY")>
-blarg
-<?ICAL:PROPERTY:STR("X")>
-blub
-<??("X", 1)>
-
-datum:
-<?!("COND:ICAL:PROPERTY", 2, #"ICAL_DTSTART_PROPERTY")>
-<?ICAL:PROPERTY:DATE()>
-<??("X", 2)>
-xxxx
-
-<?ICAL:ITEM(#"ICAL_SUMMARY_PROPERTY", "X")>
-
-cde
-
-<?ICAL:ITEM(#"ICAL_LOCATION_PROPERTY", "X")>
-
-efg
-
-
-<?ICAL:ITEM(#"ICAL_DESCRIPTION_PROPERTY", "X")>
-
-hij
-
-
<div class="mimepart">
-<div id="<?BSTR("divname")>_title">
+<div id="rsvp<?BSTR("divname")>_title">
<img src="static/webcit_icons/essen/32x32/calendar.png">
<span>
<div id="unknown_method"> <?_("This is an unknown type of calendar item.")></div>
-<??("COND:ICAL:METHOD", 11, #"ICAL_METHOD_REQUEST")>
+<?!("COND:ICAL:METHOD", 11, #"ICAL_METHOD_REQUEST")>
<?_("Meeting invitation")><script type="text/javascript">remove_something('unknown_method', 'hidden');</script>
-<??("X", 11)>
-<??("COND:ICAL:METHOD", 12, #"ICAL_METHOD_REPLY")>
+<?!("X", 11)>
+<?!("COND:ICAL:METHOD", 12, #"ICAL_METHOD_REPLY")>
<?_("Attendee's reply to your invitation")><script type="text/javascript">remove_something('unknown_method', 'hidden');</script>
-<??("X", 12)>
-<??("COND:ICAL:METHOD", 13 #"ICAL_METHOD_PUBLISH")>
+<?!("X", 12)>
+<?!("COND:ICAL:METHOD", 13, #"ICAL_METHOD_PUBLISH")>
<?_("Published event")><script type="text/javascript">remove_something('unknown_method', 'hidden');</script>
-<??("X", 13)>
+<?!("X", 13)>
</span>
</div>
<dl>
<?!("COND:ICAL:IS:A", 66, #"ICAL_VEVENT_COMPONENT")>
<?!("COND:ICAL:DT:PROPERTY", 67, #"ICAL_DTSTART_PROPERTY")>
-<??("COND:ICAL:DT:ISDATE", 68)>
+<?!("COND:ICAL:DT:ISDATE", 68)>
<dt><?_("Date:")></dt><dd><?ICAL:DT:DATE()></dd>
<?!("X", 68)>
-<?!("COND:ICAL:DT:ISDATE", 69)>
+<??("COND:ICAL:DT:ISDATE", 69)>
<dt><?_("Starting date/time:")></dt><dd><?ICAL:DT:DATETIME()></dd>
-<?!("X", 69)>
+<??("X", 69)>
<?!("X", 67)>
<?!("COND:ICAL:DT:PROPERTY", 77, #"ICAL_DTEND_PROPERTY")>
<dt><?_("Recurrence")></dt><dd><?_("This is a recurring event")>.</dd>
<?!("X", 99)>
- /* 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)) {
- StrBufAppendPrintf(Target, "<dt>");
- StrBufAppendPrintf(Target, _("Attendee:"));
- StrBufAppendPrintf(Target, "</dt><dd>");
- ch = icalproperty_get_attendee(p);
- if ((ch != NULL) && !strncasecmp(buf, "MAILTO:", 7)) {
-
- /** screen name or email address */
- safestrncpy(buf, ch + 7, sizeof(buf));
- striplt(buf);
- StrEscAppend(Target, NULL, buf, 0, 0);
- StrBufAppendPrintf(Target, " ");
-
- /** participant status */
- partstat_as_string(buf, p);
- StrEscAppend(Target, NULL, buf, 0, 0);
- }
- StrBufAppendPrintf(Target, "</dd>\n");
- }
- /* 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)) {
- /* Recursively process subcomponent */
- cal_process_object(Target, c, recursion_level+1, msgnum, cal_partnum);
- }
-<??("COND:ICAL:METHOD", 110, #"ICAL_METHOD_REQUEST")>
+
+<?!("COND:ICAL:METHOD", 110, #"ICAL_METHOD_REQUEST")>
<?--("If this is a REQUEST, display conflicts and buttons")>
<?--("Check for conflicts")>
<?ICAL:SERV:CHECK:CONFLICT()>
</dl>
<?--("Display the Accept/Decline buttons")>
-<p id="<?BSTR("divname")>_question">
+<p id="rsvp<?BSTR("divname")>_question">
<?_("How would you like to respond to this invitation?")>
<span class="button_link">
-<a href="javascript:RespondToInvitation('<?BSTR("divname")>_question','<?BSTR("divname")>_title','<?BSTR("msgnum")>','<?BSTR("cal_partnum")>','Accept');"><?_("Accept")></a>
+<a href="javascript:RespondToInvitation('rsvp<?BSTR("divname")>_question','rsvp<?BSTR("divname")>_title','<?BSTR("msgnum")>','<?BSTR("cal_partnum")>','Accept');"><?_("Accept")></a>
</span> <span class="button_link">
-<a href="javascript:RespondToInvitation('<?BSTR("divname")>_question','<?BSTR("divname")>_title','<?BSTR("msgnum")>','<?BSTR("cal_partnum")>','Tentative');"><?_("Tentative")></a>
+<a href="javascript:RespondToInvitation('rsvp<?BSTR("divname")>_question','rsvp<?BSTR("divname")>_title','<?BSTR("msgnum")>','<?BSTR("cal_partnum")>','Tentative');"><?_("Tentative")></a>
</span> <span class="button_link">
-<a href="javascript:RespondToInvitation('<?BSTR("divname")>_question','<?BSTR("divname")>_title','<?BSTR("msgnum")>','<?BSTR("cal_partnum")>','Decline');"><?_("Decline")></a>
+<a href="javascript:RespondToInvitation('rsvp<?BSTR("divname")>_question','rsvp<?BSTR("divname")>_title','<?BSTR("msgnum")>','<?BSTR("cal_partnum")>','Decline');"><?_("Decline")></a>
</span></p>
<??("X", 100)>
<?--("If this is a REPLY, display update button")>
-<??("COND:ICAL:METHOD", 110, #"ICAL_METHOD_REPLY")>
+<?!("COND:ICAL:METHOD", 110, #"ICAL_METHOD_REPLY")>
<?--("Display the update buttons")>
-<p id="<?BSTR("divname")>_question" >
+<p id="rsvp<?BSTR("divname")>_question" >
<?_("Click <i>Update</i> to accept this reply and update your calendar.")>
<span class="button_link">
-<a href="javascript:HandleRSVP('<?BSTR("divname")>_question','<?BSTR("divname")>_title','<?BSTR("msgnum")>','<?BSTR("cal_partnum")>','Update');"><?_("Update")></a>
+<a href="javascript:HandleRSVP('rsvp<?BSTR("divname")>_question','rsvp<?BSTR("divname")>_title','<?BSTR("msgnum")>','<?BSTR("cal_partnum")>','Update');"><?_("Update")></a>
</span> <span class="button_link">
-<a href="javascript:HandleRSVP('<?BSTR("divname")>_question','<?BSTR("divname")>_title','<?BSTR("msgnum")>','<?BSTR("cal_partnum")>','Ignore');"><?_("Ignore")></a>
+<a href="javascript:HandleRSVP('rsvp<?BSTR("divname")>_question','rsvp<?BSTR("divname")>_title','<?BSTR("msgnum")>','<?BSTR("cal_partnum")>','Ignore');"><?_("Ignore")></a>
</span></p>
-<??("X", 110)>
+<?!("X", 110)>
<?--("Trailing HTML for the display of this object")>
if (recursion_level == 0) {