From 51e201ae0270ace07da3c4371fdfe7a2d7d21b7d Mon Sep 17 00:00:00 2001 From: Stefan Ritt Date: Thu, 6 Jan 2005 08:51:22 +0000 Subject: [PATCH] Made extendable attributes work with conditional attributes SVN revision: 1166 --- src/elogd.c | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/src/elogd.c b/src/elogd.c index 58a9a86d..50a1d2d3 100755 --- a/src/elogd.c +++ b/src/elogd.c @@ -6,6 +6,9 @@ Contents: Web server program for Electronic Logbook ELOG $Log$ + Revision 1.533 2005/01/06 08:51:22 midas + Made extendable attributes work with conditional attributes + Revision 1.532 2005/01/05 20:36:49 midas Logbook hierarchy can now be deeper than two levels @@ -2996,7 +2999,7 @@ char *find_param(char *buf, char *group, char *param) while (pstr > str && (*pstr == ' ' || *pstr == '=' || *pstr == '\t')) *pstr-- = 0; - if (strieq(str, param)) { + if (match_param(str, param, FALSE)) { xfree(str); return pstart; } @@ -7866,7 +7869,6 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL rsprintf("\n", getparam("upwd")); } - rsprintf("\n"); /*---- title row ----*/ @@ -7921,6 +7923,9 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL rsprintf("%s:", loc("Entry time")); rsprintf("%s\n", str); rsprintf("\n", date); + + if (condition[0]) + rsprintf("\n", condition); /* retrieve attribute flags */ for (i = 0; i < n_attr; i++) { @@ -16070,7 +16075,7 @@ int execute_shell(LOGBOOK * lbs, int message_id, char attrib[MAX_N_ATTR][NAME_LE /*------------------------------------------------------------------*/ -int add_attribute_option(LOGBOOK * lbs, char *attrname, char *attrvalue) +int add_attribute_option(LOGBOOK * lbs, char *attrname, char *attrvalue, char *condition) { int fh, i, length; char str[NAME_LENGTH], *buf, *buf2, *p1, *p2, *p3; @@ -16092,6 +16097,11 @@ int add_attribute_option(LOGBOOK * lbs, char *attrname, char *attrvalue) buf[length] = 0; /* find location of options */ + if (condition && condition[0]) + set_condition(condition); + else + set_condition(""); + sprintf(str, "Options %s", attrname); p1 = (char *) find_param(buf, lbs->name, str); if (p1 == NULL) { @@ -16248,7 +16258,7 @@ void submit_elog(LOGBOOK * lbs) email_notify[256], 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; + mail_to_size, ltime, year, month, day, n_attr; BOOL bedit; struct tm tms; @@ -16319,7 +16329,15 @@ void submit_elog(LOGBOOK * lbs) } /* check for extended attributs */ - for (i = 0; i < lbs->n_attr; i++) { + if (isparam("condition")) { + set_condition(getparam("condition")); + + /* rescan attributes */ + n_attr = scan_attributes(lbs->name); + } else + n_attr = lbs->n_attr; + + for (i = 0; i < n_attr; i++) { strcpy(ua, attr_list[i]); btou(ua); if (isparam(ua) && attr_options[i][0][0]) { @@ -16361,7 +16379,7 @@ void submit_elog(LOGBOOK * lbs) return; } - if (!add_attribute_option(lbs, attr_list[i], getparam(ua))) + if (!add_attribute_option(lbs, attr_list[i], getparam(ua), getparam("condition"))) return; } else { sprintf(error, loc("Error: Attribute option %s not existing"), getparam(ua)); @@ -16380,7 +16398,7 @@ void submit_elog(LOGBOOK * lbs) } /* retrieve attributes */ - for (i = 0; i < lbs->n_attr; i++) { + for (i = 0; i < n_attr; i++) { strcpy(ua, attr_list[i]); btou(ua); @@ -16456,7 +16474,7 @@ void submit_elog(LOGBOOK * lbs) add_subst_list(slist, svalue, "message id", getparam("edit_id"), &n); /* substitute attributes */ - for (i = 0; i < lbs->n_attr; i++) { + for (i = 0; i < n_attr; i++) { if (!*getparam("edit_id")) { sprintf(str, "Subst %s", attr_list[i]); if (getcfg(lbs->name, str, subst_str, sizeof(subst_str))) { @@ -16517,7 +16535,7 @@ void submit_elog(LOGBOOK * lbs) } message_id = - el_submit(lbs, message_id, bedit, date, attr_list, attrib, lbs->n_attr, + el_submit(lbs, message_id, bedit, date, attr_list, attrib, n_attr, getparam("text"), in_reply_to, reply_to, *getparam("html") ? "HTML" : "plain", att_file, TRUE, NULL); @@ -16550,12 +16568,12 @@ void submit_elog(LOGBOOK * lbs) && getcfg(lbs->name, "Suppress Email on edit", str, sizeof(str)) && atoi(str) == 1)) { /* go throuch "Email xxx" in configuration file */ - for (index = mindex = 0; index <= lbs->n_attr; index++) { + for (index = mindex = 0; index <= n_attr; index++) { strcpy(ua, attr_list[index]); btou(ua); - if (index < lbs->n_attr) { + if (index < n_attr) { strcpy(str, "Email "); if (strchr(attr_list[index], ' ')) sprintf(str + strlen(str), "\"%s\"", attr_list[index]);