From 09246c5da34d04fd5e1183c7ce0c993b5517b113 Mon Sep 17 00:00:00 2001 From: Stefan Ritt Date: Wed, 4 Jul 2007 07:34:48 +0000 Subject: [PATCH] Finished multi-edit, also for threads SVN revision: 1876 --- src/elogd.c | 126 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 93 insertions(+), 33 deletions(-) diff --git a/src/elogd.c b/src/elogd.c index 2caecc63..88e79ae7 100755 --- a/src/elogd.c +++ b/src/elogd.c @@ -8697,6 +8697,36 @@ void rsicon(char *name, char *comment, char *elcode) /*------------------------------------------------------------------*/ +void compare_attributes(LOGBOOK *lbs, int message_id, char attrib[MAX_N_ATTR][NAME_LENGTH], int *n) +{ +int status, i, n_reply; +char reply_to[MAX_REPLY_TO * 10], attr[MAX_N_ATTR][NAME_LENGTH], list[MAX_N_ATTR][NAME_LENGTH]; + + status = el_retrieve(lbs, message_id, NULL, attr_list, attr, lbs->n_attr, + NULL, NULL, NULL, reply_to, NULL, NULL, NULL); + if (status != EL_SUCCESS) + return; + + if (*n == 0) + memcpy(attrib, attr, sizeof(attrib)); + else { + for (i=0 ; in_attr ; i++) + if (!strieq(attrib[i], attr[i])) + sprintf(attrib[i], "- %s -", loc("keep original values")); + } + *n++; + if (isparam("elmode") && strieq(getparam("elmode"), "threaded")) { + + // go through all replies in threaded mode + n_reply = strbreak(reply_to, list, MAX_N_ATTR, ",", FALSE); + for (i = 0; i < n_reply; i++) { + compare_attributes(lbs, atoi(list[i]), attrib, n); + } + } +} + +/*------------------------------------------------------------------*/ + void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL bupload, BOOL breedit, BOOL bduplicate, BOOL bpreview) { @@ -8786,23 +8816,20 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL } else if (isparam("nsel")) { /* multi edit: get all entries and check if attributes are the same */ + memset(attrib, 0, sizeof(attrib)); for (i = n = 0; i < atoi(getparam("nsel")); i++) { sprintf(str, "s%d", i); if (isparam(str)) { - size = TEXT_SIZE; - el_retrieve(lbs, atoi(getparam(str)), date, attr_list, list, lbs->n_attr, - text, &size, orig_tag, reply_tag, att, encoding, locked_by); - if (n == 0) - memcpy(attrib, list, sizeof(list)); - else { - for (j=0 ; jn_attr ; j++) - if (!strieq(attrib[j], list[j])) - sprintf(attrib[j], "- %s -", loc("keep original values")); + if (n == 0) { + size = TEXT_SIZE; + el_retrieve(lbs, message_id, date, attr_list, attrib, lbs->n_attr, + text, &size, orig_tag, reply_tag, att, encoding, locked_by); + } - n++; + + compare_attributes(lbs, atoi(getparam(str)), attrib, &n); } } - } } @@ -12661,7 +12688,7 @@ void show_elog_delete(LOGBOOK * lbs, int message_id) { int i, status, reply = 0, next, nsel; char str[256], in_reply_to[80], reply_to[MAX_REPLY_TO * 10], owner[256]; - char attrib[MAX_N_ATTR][NAME_LENGTH]; + char attrib[MAX_N_ATTR][NAME_LENGTH], mode[80]; /* redirect if confirm = NO */ if (isparam("confirm") && strcmp(getparam("confirm"), loc("No")) == 0) { @@ -12676,11 +12703,17 @@ void show_elog_delete(LOGBOOK * lbs, int message_id) return; } + if (isparam("elmode")) + strlcpy(mode, getparam("elmode"), sizeof(mode)); + if (isparam("confirm")) { if (strcmp(getparam("confirm"), loc("Yes")) == 0) { if (message_id) { /* delete message */ - status = el_delete_message(lbs, message_id, TRUE, NULL, TRUE, TRUE); + if (strieq(mode, "threaded")) + status = el_delete_message(lbs, message_id, TRUE, NULL, TRUE, TRUE); + else + status = el_delete_message(lbs, message_id, TRUE, NULL, TRUE, FALSE); if (status != EL_SUCCESS) { sprintf(str, "%s = %d", loc("Error deleting message: status"), status); show_error(str); @@ -12699,8 +12732,12 @@ void show_elog_delete(LOGBOOK * lbs, int message_id) if (isparam("nsel")) { for (i = 0; i < atoi(getparam("nsel")); i++) { sprintf(str, "s%d", i); - if (isparam(str)) - status = el_delete_message(lbs, atoi(getparam(str)), TRUE, NULL, TRUE, TRUE); + if (isparam(str)) { + if (strieq(mode, "threaded")) + status = el_delete_message(lbs, atoi(getparam(str)), TRUE, NULL, TRUE, TRUE); + else + status = el_delete_message(lbs, atoi(getparam(str)), TRUE, NULL, TRUE, FALSE); + } } } @@ -12782,7 +12819,7 @@ void show_elog_delete(LOGBOOK * lbs, int message_id) rsprintf("\n"); - if (reply) + if (reply && strieq(mode, "threaded")) rsprintf("%s\n", loc("and all their replies")); } else { @@ -12846,7 +12883,6 @@ void show_logbook_delete(LOGBOOK * lbs) } else { - strcpy(str, "Delete logbook"); show_standard_header(lbs, TRUE, str, "", FALSE, NULL); @@ -15930,12 +15966,7 @@ void display_line(LOGBOOK * lbs, int message_id, int number, char *mode, /* show select box */ if (select && !strieq(mode, "Threaded")) { rsprintf("", sclass); - - if (in_reply_to[0] == 0) - rsprintf("\n", (*n_display)++, message_id); - else - rsprintf(" \n"); - + rsprintf("\n", (*n_display)++, message_id); rsprintf("\n"); } @@ -20337,6 +20368,42 @@ int set_attributes(LOGBOOK * lbs, char attributes[][NAME_LENGTH], int n) /*------------------------------------------------------------------*/ +int submit_elog_reply(LOGBOOK *lbs, int message_id, char attrib[MAX_N_ATTR][NAME_LENGTH], char *text) +{ +int n_reply, i, status; +char str[80], att_file[MAX_ATTACHMENTS][256], reply_to[MAX_REPLY_TO * 10], + list[MAX_N_ATTR][NAME_LENGTH]; + + status = el_retrieve(lbs, message_id, NULL, attr_list, NULL, 0, + NULL, NULL, NULL, reply_to, att_file, NULL, NULL); + if (status != EL_SUCCESS) + return status; + + sprintf(str, "- %s -", loc("keep original text")); + if (strcmp(text, str) == 0) + message_id = el_submit(lbs, message_id, TRUE, "", attr_list, attrib, lbs->n_attr, + "", "", "", "", att_file, TRUE, NULL); + else + message_id = el_submit(lbs, message_id, TRUE, "", attr_list, attrib, lbs->n_attr, + text, "", "", "", att_file, TRUE, NULL); + + if (message_id < 0) + return 0; + + if (isparam("elmode") && strieq(getparam("elmode"), "threaded")) { + + // go through all replies in threaded mode + n_reply = strbreak(reply_to, list, MAX_N_ATTR, ",", FALSE); + for (i = 0; i < n_reply; i++) { + submit_elog_reply(lbs, atoi(list[i]), attrib, text); + } + } + + return EL_SUCCESS; +} + +/*------------------------------------------------------------------*/ + void submit_elog(LOGBOOK * lbs) { char str[NAME_LENGTH], str2[NAME_LENGTH], file_name[256], error[1000], date[80], @@ -20347,7 +20414,7 @@ void submit_elog(LOGBOOK * lbs) slist[MAX_N_ATTR + 10][NAME_LENGTH], svalue[MAX_N_ATTR + 10][NAME_LENGTH], ua[NAME_LENGTH]; int i, j, k, n, missing, first, index, mindex, suppress, message_id, resubmit_orig, mail_to_size, rcpt_to_size, ltime, year, month, day, hour, min, sec, n_attr, email_notify[1000], - allowed_encoding; + allowed_encoding, status; BOOL bedit, bmultiedit; struct tm tms; @@ -20769,15 +20836,8 @@ void submit_elog(LOGBOOK * lbs) message_id = atoi(getparam(str)); - sprintf(str, "- %s -", loc("keep original text")); - if (strcmp(getparam("text"), str) == 0) - message_id = el_submit(lbs, message_id, TRUE, "", attr_list, attrib, n_attr, - "", "", "", "", att_file, TRUE, NULL); - else - message_id = el_submit(lbs, message_id, TRUE, "", attr_list, attrib, n_attr, - getparam("text"), "", "", "", att_file, TRUE, NULL); - - if (message_id <= 0) { + status = submit_elog_reply(lbs, message_id, attrib, getparam("text")); + if (status != EL_SUCCESS) { sprintf(str, loc("New entry cannot be written to directory \"%s\""), lbs->data_dir); strcat(str, "\n

"); strcat(str, loc("Please check that it exists and elogd has write access and disk is not full"));