mirror of
https://gitea.psi.ch/ELOG/elog.git
synced 2026-09-08 17:13:56 +00:00
Implemented 'Type <attrib> = datetime'
SVN revision: 1302
This commit is contained in:
parent
ad54db9dfe
commit
425c06da33
258
src/elogd.c
258
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 <attrib> = 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("<select name=\"h%s\">\n", index);
|
||||
|
||||
rsprintf("<option value=\"\">\n");
|
||||
for (i = 0; i < 24; i++)
|
||||
if (i == hour)
|
||||
rsprintf("<option selected value=\"%d\">%02d\n", i, i);
|
||||
else
|
||||
rsprintf("<option value=\"%d\">%02d\n", i, i);
|
||||
rsprintf("</select> <b>:</b> \n");
|
||||
|
||||
rsprintf("<select name=\"n%s\">", index);
|
||||
rsprintf("<option selected value=\"\">\n");
|
||||
for (i = 0; i < 60; i++)
|
||||
if (i == min)
|
||||
rsprintf("<option selected value=%d>%02d\n", i, i);
|
||||
else
|
||||
rsprintf("<option value=%d>%02d\n", i, i);
|
||||
rsprintf("</select>\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("</td>\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("<td%s class=\"attribvalue\">", title);
|
||||
sprintf(str, "%d", index);
|
||||
show_date_selector(day, month, year, str);
|
||||
rsprintf(" ");
|
||||
show_time_selector(hour, min, str);
|
||||
|
||||
rsprintf("</td>\n");
|
||||
|
||||
} else if (attr_flags[index] & AF_USERLIST) {
|
||||
|
||||
rsprintf("<td%s class=\"attribvalue\">\n", title);
|
||||
@ -9213,12 +9324,16 @@ void show_find_form(LOGBOOK * lbs)
|
||||
rsprintf("<td class=\"attribvalue\">");
|
||||
if (attr_options[i][0][0] == 0) {
|
||||
|
||||
if (attr_flags[i] & AF_DATE) {
|
||||
if (attr_flags[i] & (AF_DATE | AF_DATETIME)) {
|
||||
|
||||
rsprintf("<table width=\"100%%\" cellspacing=0 border=0>\n");
|
||||
rsprintf("<tr><td width=\"1%%\">%s:<td>", 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("</td></tr>\n");
|
||||
rsprintf("<tr><td width=\"1%%\">%s:<td>", loc("End"));
|
||||
@ -13777,6 +13892,24 @@ void display_line(LOGBOOK * lbs, int message_id, int number, char *mode,
|
||||
rsprintf("<td class=\"%s\">%s</td>\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("<td class=\"%s\"><a href=\"%s\">%s</a></td>\n", sclass, ref, str);
|
||||
else
|
||||
rsprintf("<td class=\"%s\">%s</td>\n", sclass, str);
|
||||
}
|
||||
|
||||
else if (attr_flags[i] & AF_ICON) {
|
||||
rsprintf("<td class=\"%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("<select name=\"%s\" onChange=\"document.form1.submit()\">\n", list[index]);
|
||||
|
||||
@ -15394,7 +15527,7 @@ void show_elog_list(LOGBOOK * lbs, INT past_n, INT last_n, INT page_n, char *inf
|
||||
if (*getparam(attr_list[i]))
|
||||
break;
|
||||
|
||||
if (attr_flags[i] & AF_DATE) {
|
||||
if (attr_flags[i] & (AF_DATE | AF_DATETIME)) {
|
||||
sprintf(str, "%da", i);
|
||||
if (retrieve_date(str, TRUE))
|
||||
break;
|
||||
@ -15522,7 +15655,7 @@ void show_elog_list(LOGBOOK * lbs, INT past_n, INT last_n, INT page_n, char *inf
|
||||
if (searched && !found)
|
||||
break;
|
||||
|
||||
} else if (attr_flags[i] & AF_DATE) {
|
||||
} else if (attr_flags[i] & (AF_DATE | AF_DATETIME)) {
|
||||
|
||||
/* check for last[i]/next[i] */
|
||||
|
||||
@ -15951,7 +16084,7 @@ void show_elog_list(LOGBOOK * lbs, INT past_n, INT last_n, INT page_n, char *inf
|
||||
|| *getparam("subtext");
|
||||
|
||||
for (i = 0; i < lbs->n_attr; i++)
|
||||
if (*getparam(attr_list[i]) && (attr_flags[i] & AF_DATE) == 0)
|
||||
if (*getparam(attr_list[i]) && (attr_flags[i] & (AF_DATE | AF_DATETIME)) == 0)
|
||||
disp_filter = TRUE;
|
||||
|
||||
for (i = 0; i < lbs->n_attr; i++) {
|
||||
@ -16015,7 +16148,7 @@ void show_elog_list(LOGBOOK * lbs, INT past_n, INT last_n, INT page_n, char *inf
|
||||
}
|
||||
|
||||
for (i = 0; i < lbs->n_attr; i++) {
|
||||
if (attr_flags[i] & AF_DATE) {
|
||||
if (attr_flags[i] & (AF_DATE | AF_DATETIME)) {
|
||||
|
||||
sprintf(str, "%da", i);
|
||||
ltime1 = retrieve_date(str, TRUE);
|
||||
@ -16566,6 +16699,17 @@ int compose_email(LOGBOOK * lbs, char *mail_to, int message_id,
|
||||
if (!getcfg(lbs->name, "Date format", format, sizeof(format)))
|
||||
strcpy(format, DEFAULT_DATE_FORMAT);
|
||||
|
||||
ltime = atoi(attrib[j]);
|
||||
pts = localtime(<ime);
|
||||
if (ltime == 0)
|
||||
strcpy(comment, "-");
|
||||
else
|
||||
strftime(comment, sizeof(str), format, pts);
|
||||
} else if (attr_flags[j] & AF_DATETIME) {
|
||||
|
||||
if (!getcfg(lbs->name, "Time format", format, sizeof(format)))
|
||||
strcpy(format, DEFAULT_TIME_FORMAT);
|
||||
|
||||
ltime = atoi(attrib[j]);
|
||||
pts = localtime(<ime);
|
||||
if (ltime == 0)
|
||||
@ -16912,7 +17056,7 @@ void submit_elog(LOGBOOK * lbs)
|
||||
mail_param[1000], *mail_to, att_file[MAX_ATTACHMENTS][256],
|
||||
slist[MAX_N_ATTR + 10][NAME_LENGTH], svalue[MAX_N_ATTR + 10][NAME_LENGTH], ua[NAME_LENGTH];
|
||||
int i, j, n, missing, first, index, mindex, suppress, message_id, resubmit_orig,
|
||||
mail_to_size, ltime, year, month, day, n_attr, email_notify[1000];
|
||||
mail_to_size, ltime, year, month, day, hour, min, n_attr, email_notify[1000];
|
||||
BOOL bedit;
|
||||
struct tm tms;
|
||||
|
||||
@ -16936,6 +17080,24 @@ void submit_elog(LOGBOOK * lbs)
|
||||
missing = 1;
|
||||
if (missing)
|
||||
break;
|
||||
} else if (attr_flags[i] & AF_DATETIME) {
|
||||
sprintf(str, "d%d", i);
|
||||
if (*getparam(str) == 0)
|
||||
missing = 1;
|
||||
sprintf(str, "m%d", i);
|
||||
if (*getparam(str) == 0)
|
||||
missing = 1;
|
||||
sprintf(str, "y%d", i);
|
||||
if (*getparam(str) == 0)
|
||||
missing = 1;
|
||||
sprintf(str, "h%d", i);
|
||||
if (*getparam(str) == 0)
|
||||
missing = 1;
|
||||
sprintf(str, "n%d", i);
|
||||
if (*getparam(str) == 0)
|
||||
missing = 1;
|
||||
if (missing)
|
||||
break;
|
||||
} else if ((attr_flags[i] & AF_MULTI)) {
|
||||
for (j = 0; j < MAX_N_LIST; j++) {
|
||||
sprintf(str, "%s_%d", ua, j);
|
||||
@ -17128,6 +17290,50 @@ void submit_elog(LOGBOOK * lbs)
|
||||
}
|
||||
}
|
||||
|
||||
} else if (attr_flags[i] & AF_DATETIME) {
|
||||
|
||||
if (isparam(ua)) // from edit/reply of fixed attributes
|
||||
strlcpy(attrib[i], getparam(ua), NAME_LENGTH);
|
||||
else {
|
||||
|
||||
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));
|
||||
|
||||
if (month == 0 || day == 0)
|
||||
strcpy(attrib[i], "");
|
||||
else {
|
||||
memset(&tms, 0, sizeof(struct tm));
|
||||
tms.tm_year = year - 1900;
|
||||
tms.tm_mon = month - 1;
|
||||
tms.tm_mday = day;
|
||||
tms.tm_hour = hour;
|
||||
tms.tm_min = min;
|
||||
tms.tm_isdst = -1;
|
||||
|
||||
ltime = mktime(&tms);
|
||||
|
||||
if (ltime == -1) {
|
||||
show_error(loc("Date must be between 1970 and 2037"));
|
||||
return;
|
||||
}
|
||||
sprintf(attrib[i], "%d", ltime);
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
strlcpy(attrib[i], getparam(ua), NAME_LENGTH);
|
||||
|
||||
@ -18252,6 +18458,20 @@ void show_elog_entry(LOGBOOK * lbs, char *dec_path, char *command)
|
||||
|
||||
rsprintf("%s:</td><td class=\"%s\">%s </td>\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:</td><td class=\"%s\">%s </td>\n", attr_list[i], class_value, str);
|
||||
|
||||
} else {
|
||||
rsprintf("%s:</td><td class=\"%s\">\n", attr_list[i], class_value);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user