int i, j = 0;
int sequence = 0;
char weekday_labels[7][32];
+ char month_labels[12][32];
long weekstart = 0;
get_pref_long("weekstart", &weekstart, 17);
}
/* populate the weekday names - end */
+ /* populate the month names - begin */
+ now = 259200L; /* 1970-jan-04 is the first Sunday ever */
+ localtime_r(&now, &tm_now);
+ for (i=0; i<12; ++i) {
+ localtime_r(&now, &tm_now);
+ wc_strftime(month_labels[i], 32, "%B", &tm_now);
+ now += 2678400L;
+ }
+ /* populate the month names - end */
+
now = time(NULL);
strcpy(organizer_string, "");
strcpy(attendee_string, "");
}
wprintf("<INPUT TYPE=\"radio\" NAME=\"transp\" VALUE=\"transparent\"");
- if (v != NULL) if (icalvalue_get_transp(v) == ICAL_TRANSP_TRANSPARENT)
+ if ((v != NULL) && (icalvalue_get_transp(v) == ICAL_TRANSP_TRANSPARENT)) {
wprintf(" CHECKED");
+ }
wprintf(">");
wprintf(_("Free"));
wprintf(" ");
wprintf("<INPUT TYPE=\"radio\" NAME=\"transp\" VALUE=\"opaque\"");
- if (v != NULL) if (icalvalue_get_transp(v) == ICAL_TRANSP_OPAQUE)
+ if ((v != NULL) && (icalvalue_get_transp(v) == ICAL_TRANSP_OPAQUE)) {
wprintf(" CHECKED");
+ }
wprintf(">");
wprintf(_("Busy"));
wprintf("<div id=\"monthday_selector\">"); /* begin 'monthday_selector' div */
wprintf("<input type=\"radio\" name=\"rrmonthtype\" id=\"rrmonthtype_mday\" "
+ "value=\"rrmonthtype_mday\" "
"%s onChange=\"RecurrenceShowHide();\">",
((which_rrmonthtype_is_preselected == 0) ? "checked" : "")
);
- char mdaybox[128];
+ char mdaybox[256];
int rrmday = 1; /* FIXME default to same as event start */
int rrmweek = 1; /* FIXME default to same as event start */
int rrmweekday = 1; /* FIXME default to same as event start */
wprintf("<br />\n");
wprintf("<input type=\"radio\" name=\"rrmonthtype\" id=\"rrmonthtype_wday\" "
+ "value=\"rrmonthtype_wday\" "
"%s onChange=\"RecurrenceShowHide();\">",
((which_rrmonthtype_is_preselected == 1) ? "checked" : "")
);
if ( (recur.by_day[0] != ICAL_RECURRENCE_ARRAY_MAX)
&& (recur.by_month[0] != ICAL_RECURRENCE_ARRAY_MAX) ) {
- which_rryeartype_is_preselected = 1; /* FIXME finish this */
+ which_rryeartype_is_preselected = 1;
rrymweek = icalrecurrencetype_day_position(recur.by_day[0]);
rrymweekday = icalrecurrencetype_day_day_of_week(recur.by_day[0]) - 1;
rrymonth = recur.by_month[0];
wprintf("<div id=\"yearday_selector\">"); /* begin 'yearday_selector' div */
- wprintf("<input type=\"radio\" name=\"rryeartype\" id=\"rrmonthtype_ymday\" "
+ wprintf("<input type=\"radio\" name=\"rryeartype\" id=\"rryeartype_ymday\" "
+ "value=\"rryeartype_ymday\" "
"%s onChange=\"RecurrenceShowHide();\">",
((which_rryeartype_is_preselected == 0) ? "checked" : "")
);
wprintf(_("every "));
wprintf("<span id=\"ymday\">%s</span><br />", _("year on this date"));
- wprintf("<input type=\"radio\" name=\"rryeartype\" id=\"rrmonthtype_ywday\" "
+ wprintf("<input type=\"radio\" name=\"rryeartype\" id=\"rryeartype_ywday\" "
+ "value=\"rryeartype_ywday\" "
"%s onChange=\"RecurrenceShowHide();\">",
- ((which_rrmonthtype_is_preselected == 1) ? "checked" : "")
+ ((which_rryeartype_is_preselected == 1) ? "checked" : "")
);
- wprintf("on the (%d) (%d) of (%d)<br />", rrymweek, rrymweekday, rrymonth); /* FIXME */
+ wprintf(_("on the "));
+ wprintf("<select name=\"rrymweek\" id=\"rrymweek\" size=\"1\" "
+ "onChange=\"RecurrenceShowHide();\">\n");
+ for (i=1; i<=5; ++i) {
+ wprintf("<option %svalue=\"%d\">%s</option>\n",
+ ((i==rrymweek) ? "selected " : ""),
+ i,
+ ordinals[i]
+ );
+ }
+ wprintf("</select> \n");
- wprintf("</div>\n"); /* end 'yearday_selector' div */
+ wprintf("<select name=\"rrymweekday\" id=\"rrymweekday\" size=\"1\" "
+ "onChange=\"RecurrenceShowHide();\">\n");
+ for (j=0; j<7; ++j) {
+ i = ((j + (int)weekstart) % 7);
+ wprintf("<option %svalue=\"%d\">%s</option>\n",
+ ((i==rrymweekday) ? "selected " : ""),
+ i,
+ weekday_labels[i]
+ );
+ }
+ wprintf("</select>");
+
+ wprintf(" %s ", _("of"));
+ wprintf("<select name=\"rrymonth\" id=\"rrymonth\" size=\"1\" "
+ "onChange=\"RecurrenceShowHide();\">\n");
+ for (i=1; i<=12; ++i) {
+ wprintf("<option %svalue=\"%d\">%s</option>\n",
+ ((i==rrymonth) ? "selected " : ""),
+ i,
+ month_labels[i-1]
+ );
+ }
+ wprintf("</select>");
+ wprintf("<br />\n");
+ wprintf("</div>\n"); /* end 'yearday_selector' div */
wprintf("</td></tr>\n");
wprintf("</b></td><td>\n");
wprintf("<input type=\"radio\" name=\"rrend\" id=\"rrend_none\" "
+ "value=\"rrend_none\" "
"%s onChange=\"RecurrenceShowHide();\">",
((which_rrend_is_preselected == 0) ? "checked" : "")
);
wprintf("%s<br />\n", _("No ending date"));
wprintf("<input type=\"radio\" name=\"rrend\" id=\"rrend_count\" "
+ "value=\"rrend_count\" "
"%s onChange=\"RecurrenceShowHide();\">",
((which_rrend_is_preselected == 1) ? "checked" : "")
);
wprintf("<br />\n");
wprintf("<input type=\"radio\" name=\"rrend\" id=\"rrend_until\" "
+ "value=\"rrend_until\" "
"%s onChange=\"RecurrenceShowHide();\">",
((which_rrend_is_preselected == 2) ? "checked" : "")
);
);
}
+ /* recurrence rules -- begin */
+
+ /* remove any existing rule */
+ while (prop = icalcomponent_get_first_property(vevent, ICAL_RRULE_PROPERTY), prop != NULL) {
+ icalcomponent_remove_property(vevent, prop);
+ icalproperty_free(prop);
+ }
+
+ if (yesbstr("is_recur")) {
+ struct icalrecurrencetype recur;
+ icalrecurrencetype_clear(&recur);
+
+ recur.interval = atoi(bstr("interval"));
+ recur.freq = atoi(bstr("freq"));
+
+ switch(recur.freq) {
+
+ /* These can't happen; they're disabled. */
+ case ICAL_SECONDLY_RECURRENCE:
+ break;
+ case ICAL_MINUTELY_RECURRENCE:
+ break;
+ case ICAL_HOURLY_RECURRENCE:
+ break;
+
+ /* These are the real options. */
+ case ICAL_DAILY_RECURRENCE:
+ break;
+ case ICAL_WEEKLY_RECURRENCE:
+ break;
+ case ICAL_MONTHLY_RECURRENCE:
+ break;
+ case ICAL_YEARLY_RECURRENCE:
+ break;
+
+ /* This one can't happen either. */
+ case ICAL_NO_RECURRENCE:
+ break;
+ }
+
+ if (!strcasecmp(bstr("rrend"), "rrend_count")) {
+ recur.count = atoi(bstr("rrcount"));
+ }
+ else if (!strcasecmp(bstr("rrend"), "rrend_until")) {
+ icaltime_from_webform_dateonly(&recur.until, "rruntil");
+ }
+
+ icalcomponent_add_property(vevent, icalproperty_new_rrule(recur));
+ }
+
+ /* recurrence rules -- end */
+
/* See if transparency is indicated */
if (havebstr("transp")) {
if (!strcasecmp(bstr("transp"), "opaque")) {