diff --git a/src/elogd.c b/src/elogd.c index 4fb74671..13429a18 100755 --- a/src/elogd.c +++ b/src/elogd.c @@ -6,6 +6,9 @@ Contents: Web server program for Electronic Logbook ELOG $Log$ + Revision 1.609 2005/03/29 21:15:24 ritt + Implemented 'Type = datetime' + Revision 1.608 2005/03/29 13:31:37 ritt Handle logbook subscriptios correctly with self register = 3 @@ -1174,8 +1177,10 @@ char author_list[MAX_N_LIST][NAME_LENGTH] = { #define AF_RADIO (1<<6) #define AF_EXTENDABLE (1<<7) #define AF_DATE (1<<8) -#define AF_NUMERIC (1<<9) -#define AF_USERLIST (1<<10) +#define AF_DATETIME (1<<9) +#define AF_TIME (1<<10) +#define AF_NUMERIC (1<<11) +#define AF_USERLIST (1<<12) /* attribute format flags */ #define AFF_SAME_LINE 1 @@ -6379,6 +6384,10 @@ and attr_flags arrays */ if (getcfg(logbook, str, type, sizeof(type))) { if (strieq(type, "date")) attr_flags[i] |= AF_DATE; + if (strieq(type, "datetime")) + attr_flags[i] |= AF_DATETIME; + if (strieq(type, "time")) + attr_flags[i] |= AF_TIME; if (strieq(type, "numeric")) attr_flags[i] |= AF_NUMERIC; if (strieq(type, "userlist")) @@ -7307,7 +7316,7 @@ int build_subst_list(LOGBOOK * lbs, char list[][NAME_LENGTH], char value[][NAME_ for (; i < lbs->n_attr; i++) { strcpy(list[i], attr_list[i]); if (attrib) { - if ((attr_flags[i] & AF_DATE) && format_date) { + if ((attr_flags[i] & (AF_DATE | AF_DATETIME)) && format_date) { t = (time_t) atoi(attrib[i]); ts = localtime(&t); @@ -7678,9 +7687,35 @@ void show_date_selector(int day, int month, int year, char *index) /*------------------------------------------------------------------*/ +void show_time_selector(int hour, int min, char *index) +{ + int i; + + rsprintf(" : \n"); + + rsprintf("\n"); +} + +/*------------------------------------------------------------------*/ + void attrib_from_param(int n_attr, char attrib[MAX_N_ATTR][NAME_LENGTH]) { - int i, j, first, year, month, day; + int i, j, first, year, month, day, hour, min; char str[1000], ua[NAME_LENGTH]; time_t ltime; struct tm ts; @@ -7732,6 +7767,39 @@ void attrib_from_param(int n_attr, char attrib[MAX_N_ATTR][NAME_LENGTH]) } else strcpy(attrib[i], ""); + } else if (attr_flags[i] & AF_DATETIME) { + + sprintf(str, "y%d", i); + year = atoi(getparam(str)); + if (year < 100) + year += 2000; + + sprintf(str, "m%d", i); + month = atoi(getparam(str)); + + sprintf(str, "d%d", i); + day = atoi(getparam(str)); + + sprintf(str, "h%d", i); + hour = atoi(getparam(str)); + + sprintf(str, "n%d", i); + min = atoi(getparam(str)); + + memset(&ts, 0, sizeof(struct tm)); + ts.tm_year = year - 1900; + ts.tm_mon = month - 1; + ts.tm_mday = day; + ts.tm_hour = hour; + ts.tm_min = min; + ts.tm_isdst = -1; + + if (month && day) { + ltime = mktime(&ts); + sprintf(attrib[i], "%d", (int) ltime); + } else + strcpy(attrib[i], ""); + } else { strlcpy(attrib[i], getparam(ua), NAME_LENGTH); } @@ -7743,7 +7811,7 @@ void attrib_from_param(int n_attr, char attrib[MAX_N_ATTR][NAME_LENGTH]) void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL bupload, BOOL breedit) { int i, j, n, index, aindex, size, width, height, fh, length, input_size, input_maxlen, - format_flags[MAX_N_ATTR], year, month, day, n_attr, n_disp_attr, attr_index[MAX_N_ATTR]; + format_flags[MAX_N_ATTR], year, month, day, hour, min, n_attr, n_disp_attr, attr_index[MAX_N_ATTR]; char str[1000], preset[1000], *p, *pend, star[80], comment[10000], reply_string[256], list[MAX_N_ATTR][NAME_LENGTH], file_name[256], *buffer, format[256], date[80], attrib[MAX_N_ATTR][NAME_LENGTH], *text, orig_tag[80], @@ -7821,7 +7889,8 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL (breedit && i == 2)) { /* subst on reedit only if preset is under condition */ /* do not format date for date attributes */ - i = build_subst_list(lbs, slist, svalue, attrib, (attr_flags[index] & AF_DATE) == 0); + i = build_subst_list(lbs, slist, svalue, attrib, + (attr_flags[index] & (AF_DATE | AF_DATETIME)) == 0); strsubst(preset, slist, svalue, i); /* check for index substitution */ @@ -7844,7 +7913,8 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL if (!breedit || (breedit && i == 2)) { /* subst on reedit only if preset is under condition */ /* do not format date for date attributes */ - i = build_subst_list(lbs, slist, svalue, attrib, (attr_flags[index] & AF_DATE) == 0); + i = build_subst_list(lbs, slist, svalue, attrib, + (attr_flags[index] & (AF_DATE | AF_DATETIME)) == 0); strsubst(preset, slist, svalue, i); /* check for index substitution */ @@ -7914,7 +7984,8 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL (breedit && i == 2)) { /* subst on reedit only if preset is under condition */ /* do not format date for date attributes */ - i = build_subst_list(lbs, slist, svalue, attrib, (attr_flags[index] & AF_DATE) == 0); + i = build_subst_list(lbs, slist, svalue, attrib, + (attr_flags[index] & (AF_DATE | AF_DATETIME)) == 0); strsubst(preset, slist, svalue, i); /* check for index substitution */ @@ -7937,7 +8008,8 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL if (!breedit || (breedit && i == 2)) { /* subst on reedit only if preset is under condition */ /* do not format date for date attributes */ - i = build_subst_list(lbs, slist, svalue, attrib, (attr_flags[index] & AF_DATE) == 0); + i = build_subst_list(lbs, slist, svalue, attrib, + (attr_flags[index] & (AF_DATE | AF_DATETIME)) == 0); strsubst(preset, slist, svalue, i); /* check for index substitution */ @@ -8017,7 +8089,8 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL if (orig_tag[0] == 0) { /* do not format date for date attributes */ - i = build_subst_list(lbs, slist, svalue, attrib, (attr_flags[index] & AF_DATE) == 0); + i = build_subst_list(lbs, slist, svalue, attrib, + (attr_flags[index] & (AF_DATE | AF_DATETIME)) == 0); sprintf(str, "%d", message_id); add_subst_list(slist, svalue, "message id", str, &i); add_subst_time(lbs, slist, svalue, "entry time", date, &i); @@ -8035,7 +8108,8 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL if (getcfg(lbs->name, str, preset, sizeof(preset))) { /* do not format date for date attributes */ - i = build_subst_list(lbs, slist, svalue, attrib, (attr_flags[index] & AF_DATE) == 0); + i = build_subst_list(lbs, slist, svalue, attrib, + (attr_flags[index] & (AF_DATE | AF_DATETIME)) == 0); sprintf(str, "%d", message_id); add_subst_list(slist, svalue, "message id", str, &i); @@ -8103,7 +8177,7 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL rsprintf(" return false;\n"); rsprintf(" }\n"); - } else if (attr_flags[i] & AF_DATE) { + } else if (attr_flags[i] & (AF_DATE | AF_DATETIME)) { rsprintf(" if (document.form1.m%d.value == \"\") {\n", i); sprintf(str, loc("Please enter month for attribute '%s'"), attr_list[i]); rsprintf(" alert(\"%s\");\n", str); @@ -8123,6 +8197,21 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL rsprintf(" return false;\n"); rsprintf(" }\n"); + if (attr_flags[i] & AF_DATETIME) { + rsprintf(" if (document.form1.h%d.value == \"\") {\n", i); + sprintf(str, loc("Please enter hour for attribute '%s'"), attr_list[i]); + rsprintf(" alert(\"%s\");\n", str); + rsprintf(" document.form1.h%d.focus();\n", i); + rsprintf(" return false;\n"); + rsprintf(" }\n"); + rsprintf(" if (document.form1.n%d.value == \"\") {\n", i); + sprintf(str, loc("Please enter minute for attribute '%s'"), attr_list[i]); + rsprintf(" alert(\"%s\");\n", str); + rsprintf(" document.form1.n%d.focus();\n", i); + rsprintf(" return false;\n"); + rsprintf(" }\n"); + } + } else { rsprintf(" if (document.form1.%s.value == \"\") {\n", ua); sprintf(str, loc("Please enter attribute '%s'"), attr_list[i]); @@ -8445,6 +8534,28 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL show_date_selector(day, month, year, str); rsprintf("\n"); + } else if (attr_flags[index] & AF_DATETIME) { + + year = month = day = 0; + hour = min = -1; + if (attrib[index][0]) { + ltime = atoi(attrib[index]); + pts = localtime(<ime); + year = pts->tm_year + 1900; + month = pts->tm_mon + 1; + day = pts->tm_mday; + hour = pts->tm_hour; + min = pts->tm_min; + } + + rsprintf("", title); + sprintf(str, "%d", index); + show_date_selector(day, month, year, str); + rsprintf("  "); + show_time_selector(hour, min, str); + + rsprintf("\n"); + } else if (attr_flags[index] & AF_USERLIST) { rsprintf("\n", title); @@ -9213,12 +9324,16 @@ void show_find_form(LOGBOOK * lbs) rsprintf(""); if (attr_options[i][0][0] == 0) { - if (attr_flags[i] & AF_DATE) { + if (attr_flags[i] & (AF_DATE | AF_DATETIME)) { rsprintf("\n"); rsprintf("\n"); rsprintf("\n", sclass, str); } + else if (attr_flags[i] & AF_DATETIME) { + + if (!getcfg(lbs->name, "Time format", format, sizeof(format))) + strcpy(format, DEFAULT_TIME_FORMAT); + + ltime = atoi(attrib[i]); + pts = localtime(<ime); + if (ltime == 0) + strcpy(str, "-"); + else + strftime(str, sizeof(str), format, pts); + + if (disp_attr_link == NULL || disp_attr_link[i]) + rsprintf("\n", sclass, ref, str); + else + rsprintf("\n", sclass, str); + } + else if (attr_flags[i] & AF_ICON) { rsprintf("\n", attr_list[i], class_value, str); + } else if (attr_flags[i] & AF_DATETIME) { + + if (!getcfg(lbs->name, "Time format", format, sizeof(format))) + strcpy(format, DEFAULT_TIME_FORMAT); + + ltime = atoi(attrib[i]); + pts = localtime(<ime); + if (ltime == 0) + strcpy(str, "-"); + else + strftime(str, sizeof(str), format, pts); + + rsprintf("%s:\n", attr_list[i], class_value, str); + } else { rsprintf("%s:
%s:", loc("Start")); sprintf(str, "%da", i); show_date_selector(0, 0, 0, str); + if (attr_flags[i] & AF_DATETIME) { + rsprintf("  "); + show_time_selector(0, 0, str); + } rsprintf("
%s:", loc("End")); @@ -13777,6 +13892,24 @@ void display_line(LOGBOOK * lbs, int message_id, int number, char *mode, rsprintf("%s%s%s", sclass); if (attrib[i][0]) @@ -14527,7 +14660,7 @@ void show_page_filters(LOGBOOK * lbs, int n_msg, int page_n, BOOL mode_commands, if (attr_options[i][0][0] == 0) { - if (attr_flags[i] & AF_DATE) { + if (attr_flags[i] & (AF_DATE | AF_DATETIME)) { rsprintf("%s %s \n", attr_list[i], class_value);