diff --git a/src/elogd.c b/src/elogd.c index 16d98df5..f7bb20f7 100755 --- a/src/elogd.c +++ b/src/elogd.c @@ -4520,16 +4520,24 @@ int el_submit(LOGBOOK * lbs, int message_id, BOOL bedit, \********************************************************************/ { int n, i, j, size, fh, index, tail_size, orig_size, delta, reply_id; - char file_name[256], dir[256], str[NAME_LENGTH], date_str[256]; - time_t ltime; - char *message, *p, *buffer; + char file_name[256], dir[256], str[NAME_LENGTH], date1[256], + attrib[MAX_N_ATTR][NAME_LENGTH], reply_to1[MAX_REPLY_TO * 10], + in_reply_to1[MAX_REPLY_TO * 10], encoding1[80], + *message, *p, *old_text, *buffer; char attachment_all[64 * MAX_ATTACHMENTS]; + time_t ltime; tail_size = orig_size = 0; buffer = NULL; message = xmalloc(TEXT_SIZE + 100); - + old_text = NULL; + memcpy(attrib, attr_value, sizeof(attrib)); + strlcpy(reply_to1, reply_to, sizeof(reply_to1)); + strlcpy(in_reply_to1, in_reply_to, sizeof(in_reply_to1)); + strlcpy(encoding1, encoding, sizeof(encoding1)); + strlcpy(date1, date, sizeof(date1)); + /* generate new file name YYMMDD.log in data directory */ strcpy(dir, lbs->data_dir); @@ -4562,7 +4570,7 @@ int el_submit(LOGBOOK * lbs, int message_id, BOOL bedit, /* file might have been edited, rebuild index */ el_build_index(lbs, TRUE); - return el_submit(lbs, message_id, bedit, date, attr_name, attr_value, + return el_submit(lbs, message_id, bedit, date, attr_name, attrib, n_attr, text, in_reply_to, reply_to, encoding, afilename, mark_original, locked_by); } @@ -4582,16 +4590,37 @@ int el_submit(LOGBOOK * lbs, int message_id, BOOL bedit, message[size] = 0; - if (strieq(date, "")) - el_decode(message, "Date: ", date_str); + if (strcmp(text, "") == 0) { + + p = strstr(message, "========================================\n"); + /* check for \n -> \r conversion (e.g. zipping/unzipping) */ + if (p == NULL) + p = strstr(message, "========================================\r"); + if (p) { + p += 41; + old_text = xmalloc(size+1); + strlcpy(old_text, p, size); + } + } + + if (strieq(date1, "")) + el_decode(message, "Date: ", date1); else - strlcpy(date_str, date, sizeof(date_str)); - if (strieq(reply_to, "")) - el_decode(message, "Reply to: ", reply_to); - if (strieq(in_reply_to, "")) - el_decode(message, "In reply to: ", in_reply_to); + strlcpy(date1, date, sizeof(date1)); + if (strieq(reply_to1, "")) + el_decode(message, "Reply to: ", reply_to1); + if (strieq(in_reply_to1, "")) + el_decode(message, "In reply to: ", in_reply_to1); + if (strieq(encoding1, "")) + el_decode(message, "Encoding: ", encoding1); el_decode(message, "Attachment: ", attachment_all); + for (i = 0; i < n_attr; i++) { + sprintf(str, "%s: ", attr_name[i]); + if (strieq(attrib[i], "")) + el_decode(message, str, attrib[i]); + } + /* buffer tail of logfile */ lseek(fh, 0, SEEK_END); orig_size = size; @@ -4607,22 +4636,24 @@ int el_submit(LOGBOOK * lbs, int message_id, BOOL bedit, } else { /* create new message */ if (!date[0]) - get_rfc2822_date(date_str, sizeof(date_str), 0); + get_rfc2822_date(date1, sizeof(date1), 0); else - strlcpy(date_str, date, sizeof(date_str)); + strlcpy(date1, date, sizeof(date1)); for (i = 0; i < 12; i++) - if (strncmp(date_str + 8, mname[i], 3) == 0) + if (strncmp(date1 + 8, mname[i], 3) == 0) break; - ltime = date_to_ltime(date_str); + ltime = date_to_ltime(date1); - sprintf(file_name, "%c%c%02d%c%ca.log", date_str[14], date_str[15], i + 1, date_str[5], date_str[6]); + sprintf(file_name, "%c%c%02d%c%ca.log", date1[14], date1[15], i + 1, date1[5], date1[6]); sprintf(str, "%s%s", dir, file_name); fh = open(str, O_CREAT | O_RDWR | O_BINARY, 0644); if (fh < 0) { xfree(message); + if (old_text) + xfree(old_text); return -1; } @@ -4645,7 +4676,7 @@ int el_submit(LOGBOOK * lbs, int message_id, BOOL bedit, strcpy(lbs->el_index[index].file_name, file_name); lbs->el_index[index].file_time = ltime; lbs->el_index[index].offset = TELL(fh); - lbs->el_index[index].in_reply_to = atoi(in_reply_to); + lbs->el_index[index].in_reply_to = atoi(in_reply_to1); /* if index not ordered, sort it */ i = *lbs->n_el_index; @@ -4667,16 +4698,16 @@ int el_submit(LOGBOOK * lbs, int message_id, BOOL bedit, /* compose message */ sprintf(message, "$@MID@$: %d\n", message_id); - sprintf(message + strlen(message), "Date: %s\n", date_str); + sprintf(message + strlen(message), "Date: %s\n", date1); - if (reply_to[0]) - sprintf(message + strlen(message), "Reply to: %s\n", reply_to); + if (reply_to1[0]) + sprintf(message + strlen(message), "Reply to: %s\n", reply_to1); - if (in_reply_to[0]) - sprintf(message + strlen(message), "In reply to: %s\n", in_reply_to); + if (in_reply_to1[0]) + sprintf(message + strlen(message), "In reply to: %s\n", in_reply_to1); for (i = 0; i < n_attr; i++) - sprintf(message + strlen(message), "%s: %s\n", attr_name[i], attr_value[i]); + sprintf(message + strlen(message), "%s: %s\n", attr_name[i], attrib[i]); sprintf(message + strlen(message), "Attachment: "); @@ -4688,14 +4719,21 @@ int el_submit(LOGBOOK * lbs, int message_id, BOOL bedit, } sprintf(message + strlen(message), "\n"); - sprintf(message + strlen(message), "Encoding: %s\n", encoding); + sprintf(message + strlen(message), "Encoding: %s\n", encoding1); if (locked_by && locked_by[0]) sprintf(message + strlen(message), "Locked by: %s\n", locked_by); sprintf(message + strlen(message), "========================================\n"); - strlcat(message, text, TEXT_SIZE + 100); + + if (strieq(text, "") && old_text) + strlcat(message, old_text, TEXT_SIZE + 100); + else + strlcat(message, text, TEXT_SIZE + 100); strlcat(message, "\n", TEXT_SIZE + 100); + if (old_text) + xfree(old_text); + n = write(fh, message, strlen(message)); if (n != (int) strlen(message)) { if (tail_size > 0) @@ -8745,6 +8783,26 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL /* strip attachments on duplicate */ if (bduplicate) memset(att, 0, sizeof(att)); + } else if (isparam("nsel")) { + + /* multi edit: get all entries and check if attributes are the same */ + 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")); + } + n++; + } + } + } } @@ -9330,7 +9388,8 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL if ((isparam("inlineatt") && *getparam("inlineatt")) || bpreview) strcpy(script, " OnLoad=\"document.form1.Text.focus();\""); - strcat(script, " OnLoad=\"elKeyInit();\" OnFocus=\"elKeyInit();\""); + if (enc_selected == 0) + strcat(script, " OnLoad=\"elKeyInit();\" OnFocus=\"elKeyInit();\""); if (getcfg(lbs->name, "Use Lock", str, sizeof(str)) && atoi(str) == 1) rsprintf("\n", script); @@ -9623,7 +9682,11 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL rsprintf(" onChange=\"mod();\">\n"); /* display emtpy option */ - rsprintf("