diff --git a/src/elogd.c b/src/elogd.c
index a360d563..37ad3d8c 100755
--- a/src/elogd.c
+++ b/src/elogd.c
@@ -6,6 +6,9 @@
Contents: Web server program for Electronic Logbook ELOG
$Log$
+ Revision 1.539 2005/01/19 21:08:32 midas
+ Display thread in single entry page if present
+
Revision 1.538 2005/01/17 20:01:33 midas
Added note about changing 'max content length'
@@ -13166,7 +13169,7 @@ void display_line(LOGBOOK * lbs, int message_id, int number, char *mode,
char attrib[MAX_N_ATTR][NAME_LENGTH], int n_attr,
char *text, BOOL show_text,
char attachment[MAX_ATTACHMENTS][MAX_PATH_LENGTH], char *encoding,
- BOOL select, int *n_display, char *locked_by)
+ BOOL select, int *n_display, char *locked_by, int highlight)
{
char str[NAME_LENGTH], ref[256], *nowrap, sclass[80], format[256],
file_name[MAX_PATH_LENGTH], *slist, *svalue;
@@ -13190,10 +13193,17 @@ void display_line(LOGBOOK * lbs, int message_id, int number, char *mode,
} else if (strieq(mode, "Full"))
strcpy(sclass, "list1");
else if (strieq(mode, "Threaded")) {
- if (level == 0)
- strcpy(sclass, "thread");
- else
- strcpy(sclass, "threadreply");
+ if (highlight) {
+ if (highlight == message_id)
+ strcpy(sclass, "thread");
+ else
+ strcpy(sclass, "threadreply");
+ } else {
+ if (level == 0)
+ strcpy(sclass, "thread");
+ else
+ strcpy(sclass, "threadreply");
+ }
}
rsprintf("
");
@@ -13635,7 +13645,8 @@ void display_line(LOGBOOK * lbs, int message_id, int number, char *mode,
void display_reply(LOGBOOK * lbs, int message_id, int printable,
int expand, int n_line, int n_attr_disp,
- char disp_attr[MAX_N_ATTR + 4][NAME_LENGTH], BOOL show_text, int level)
+ char disp_attr[MAX_N_ATTR + 4][NAME_LENGTH],
+ BOOL show_text, int level, int highlight)
{
char *date, *text, *in_reply_to, *reply_to, *encoding, *locked_by, *attachment, *attrib, *p;
int status, size;
@@ -13672,12 +13683,14 @@ void display_reply(LOGBOOK * lbs, int message_id, int printable,
display_line(lbs, message_id, 0, "threaded", expand, level, printable,
n_line, FALSE, date, in_reply_to, reply_to, n_attr_disp,
- disp_attr, (void *) attrib, lbs->n_attr, text, show_text, NULL, encoding, 0, NULL, locked_by);
+ disp_attr, (void *) attrib, lbs->n_attr, text, show_text,
+ NULL, encoding, 0, NULL, locked_by, highlight);
if (reply_to[0]) {
p = reply_to;
do {
- display_reply(lbs, atoi(p), printable, expand, n_line, n_attr_disp, disp_attr, show_text, level + 1);
+ display_reply(lbs, atoi(p), printable, expand, n_line, n_attr_disp,
+ disp_attr, show_text, level + 1, highlight);
while (*p && isdigit(*p))
p++;
@@ -15869,14 +15882,14 @@ void show_elog_list(LOGBOOK * lbs, INT past_n, INT last_n, INT page_n, char *inf
index, mode, expand, 0, printable, n_line,
show_attachments, date, in_reply_to, reply_to,
n_attr_disp, disp_attr, attrib, lbs->n_attr, text, show_text,
- attachment, encoding, atoi(getparam("select")), &n_display, locked_by);
+ attachment, encoding, atoi(getparam("select")), &n_display, locked_by, 0);
if (threaded) {
if (reply_to[0] && expand > 0) {
p = reply_to;
do {
display_reply(msg_list[index].lbs, atoi(p), printable, expand, n_line,
- n_attr_disp, disp_attr, show_text, 1);
+ n_attr_disp, disp_attr, show_text, 1, 0);
while (*p && isdigit(*p))
p++;
@@ -15929,6 +15942,82 @@ void show_elog_list(LOGBOOK * lbs, INT past_n, INT last_n, INT page_n, char *inf
/*------------------------------------------------------------------*/
+void show_elog_thread(LOGBOOK * lbs, int message_id)
+{
+ int i, size, status, in_reply_to_id, head_id, n_display, n_attr_disp;
+ char date[80], attrib[MAX_N_ATTR][NAME_LENGTH], *text, in_reply_to[80],
+ reply_to[MAX_REPLY_TO * 10], attachment[MAX_ATTACHMENTS][MAX_PATH_LENGTH],
+ encoding[80], locked_by[256], disp_attr[MAX_N_ATTR + 4][NAME_LENGTH];
+ char *p;
+
+ text = xmalloc(TEXT_SIZE);
+
+ /* retrieve message */
+ size = TEXT_SIZE;
+ status =
+ el_retrieve(lbs, message_id, date, attr_list, attrib,
+ lbs->n_attr, text, &size, in_reply_to, reply_to, attachment, encoding, locked_by);
+
+ in_reply_to_id = atoi(in_reply_to);
+
+ /* find message head */
+ head_id = message_id;
+ if (in_reply_to_id) {
+ do {
+ head_id = in_reply_to_id;
+
+ /* search index of message */
+ for (i = 0; i < *lbs->n_el_index; i++)
+ if (lbs->el_index[i].message_id == head_id)
+ break;
+
+ /* stop if not found */
+ if (i == *lbs->n_el_index)
+ break;
+
+ in_reply_to_id = lbs->el_index[i].in_reply_to;
+
+ } while (in_reply_to_id);
+ }
+
+ n_attr_disp = lbs->n_attr + 2;
+ strcpy(disp_attr[0], loc("ID"));
+ strcpy(disp_attr[1], loc("Date"));
+ memcpy(disp_attr + 2, attr_list, sizeof(attr_list));
+
+ size = TEXT_SIZE;
+ status =
+ el_retrieve(lbs, head_id, date, attr_list, attrib,
+ lbs->n_attr, text, &size, in_reply_to, reply_to, attachment, encoding, locked_by);
+
+ rsprintf("
\n");
+
+ display_line(lbs, head_id,
+ 0, "Threaded", 1, 0, FALSE, 0,
+ FALSE, date, in_reply_to, reply_to,
+ n_attr_disp, disp_attr, attrib, lbs->n_attr, text, FALSE,
+ attachment, encoding, 0, &n_display, locked_by, message_id);
+
+ if (reply_to[0]) {
+ p = reply_to;
+ do {
+ display_reply(lbs, atoi(p), FALSE, 1, 0, n_attr_disp, disp_attr, FALSE, 1, message_id);
+
+ while (*p && isdigit(*p))
+ p++;
+ while (*p && (*p == ',' || *p == ' '))
+ p++;
+ } while (*p);
+ }
+
+ rsprintf(" \n");
+ rsprintf(" |
\n");
+
+ xfree(text);
+}
+
+/*------------------------------------------------------------------*/
+
int compose_email(LOGBOOK * lbs, char *mail_to, int message_id,
char attrib[MAX_N_ATTR][NAME_LENGTH], char *mail_param, int old_mail,
char att_file[MAX_ATTACHMENTS][256])
@@ -17389,6 +17478,9 @@ void show_elog_entry(LOGBOOK * lbs, char *dec_path, char *command)
/*---- message ----*/
+ if (reply_tag[0] || orig_tag[0])
+ show_elog_thread(lbs, message_id);
+
if (message_error == EL_EMPTY)
rsprintf("| %s |
\n", loc("Logbook is empty"));
else if (message_error == EL_NO_MSG)