diff --git a/src/elogd.c b/src/elogd.c
index adeed192..402c42f3 100755
--- a/src/elogd.c
+++ b/src/elogd.c
@@ -13119,6 +13119,12 @@ void show_import_page_xml(LOGBOOK * lbs)
rsprintf("\n");
rsprintf("
\n", loc("Derive attributes from XML file"));
+ if (isparam("keep"))
+ rsprintf("\n");
+ else
+ rsprintf("\n");
+ rsprintf("
\n", loc("Keep original entry IDs (may overwrite existing entries, but is required if imported entries contain replies)"));
+
rsprintf("\n");
rsprintf("
\n", loc("Preview import"));
@@ -13375,7 +13381,8 @@ void xml_import(LOGBOOK * lbs, char *xml, char *xmlfile)
in_reply_to[80], reply_to[MAX_REPLY_TO * 10],
attachment[MAX_ATTACHMENTS][MAX_PATH_LENGTH],
attachment_all[64 * MAX_ATTACHMENTS];
- int i, j, index, n_attr, iline, n_imported, textcol, i_line, line_len;
+ int i, j, index, n_attr, iline, n_imported, textcol, i_line, line_len,
+ message_id, bedit;
PMXML_NODE root, entry;
iline = n_imported = 0;
@@ -13433,6 +13440,8 @@ void xml_import(LOGBOOK * lbs, char *xml, char *xmlfile)
/* hidden fields */
if (isparam("head"))
rsprintf("\n", getparam("head"));
+ if (isparam("keep"))
+ rsprintf("\n", getparam("keep"));
rsprintf("\n", xmlfile);
rsprintf("\n\n");
@@ -13553,6 +13562,10 @@ void xml_import(LOGBOOK * lbs, char *xml, char *xmlfile)
} else {
+ message_id = 0;
+ if (isparam("keep"))
+ message_id = atoi(mxml_get_value(mxml_find_node(entry, "MID")));
+
for (i = 0; i < n_attr; i++) {
strlcpy(str, attr_list[i], sizeof(str));
if (mxml_find_node(entry, str) == NULL)
@@ -13601,8 +13614,17 @@ void xml_import(LOGBOOK * lbs, char *xml, char *xmlfile)
else
p = str;
+ bedit = FALSE;
+ if (isparam("keep")) {
+ for (i = 0; i < *lbs->n_el_index; i++)
+ if (lbs->el_index[i].message_id == message_id)
+ break;
+ if (lbs->el_index[i].message_id == message_id)
+ bedit = TRUE;
+ }
+
/* submit entry */
- if (el_submit(lbs, 0, FALSE, date, attr_list, (char (*)[NAME_LENGTH]) list,
+ if (el_submit(lbs, message_id, bedit, date, attr_list, (char (*)[NAME_LENGTH]) list,
n_attr, p, in_reply_to, reply_to, encoding, attachment, FALSE, NULL))
n_imported++;
}