From 517e010a91807e08b1c40ae3c534fefd9b6f9f34 Mon Sep 17 00:00:00 2001 From: Stefan Ritt Date: Wed, 31 Jul 2002 11:48:08 +0000 Subject: [PATCH] Added page wise display SVN revision: 192 --- elogd.c | 394 +++++++++++++++----------------------------------------- 1 file changed, 103 insertions(+), 291 deletions(-) diff --git a/elogd.c b/elogd.c index eeb68880..620f3948 100755 --- a/elogd.c +++ b/elogd.c @@ -6,6 +6,9 @@ Contents: Web server program for Electronic Logbook ELOG $Log$ + Revision 2.53 2002/07/31 11:48:08 midas + Added page wise display + Revision 2.52 2002/07/30 12:44:54 midas Added sortable columns @@ -5269,11 +5272,64 @@ int msg_compare_reverse(const void *m1, const void *m2) return strcmp(((MSG_LIST *)m2)->string, ((MSG_LIST *)m1)->string); } -void show_elog_submit_find(LOGBOOK *lbs, INT past_n, INT last_n, INT list_n) +void show_page_navigation(int n_msg, int page_n, int n_page) +{ +int i; +char ref[256]; + + rsprintf("\n", + gt("Border width"), gt("Categories cellpadding")); + rsprintf("
\n", gt("Menu1 Align"), gt("Menu1 BGColor")); + + rsprintf(""); + + if (n_msg > n_page) + rsprintf("Goto page \n"); + + if (page_n > 1) + { + sprintf(ref, "page%d", page_n - 1); + if (strchr(getparam("cmdline"), '?')) + strcat(ref, strchr(getparam("cmdline"), '?')); + rsprintf("Previous  ", ref); + } + + for (i=0 ; i%d, ", ref, i+1); + } + + if (page_n != -1 && page_n * n_page < n_msg) + { + sprintf(ref, "page%d", page_n + 1); + if (strchr(getparam("cmdline"), '?')) + strcat(ref, strchr(getparam("cmdline"), '?')); + rsprintf("Next  ", ref); + } + + if (page_n != -1 && n_page < n_msg) + { + sprintf(ref, "page"); + if (strchr(getparam("cmdline"), '?')) + strcat(ref, strchr(getparam("cmdline"), '?')); + rsprintf("All\n", ref); + } + + rsprintf("
\n\n"); +} + +void show_elog_submit_find(LOGBOOK *lbs, INT past_n, INT last_n, INT page_n) { int i, j, n, index, size, status, d1, m1, y1, d2, m2, y2, n_line; int current_year, current_month, current_day, printable, n_logbook, - reverse, n_attr_disp, n_msg, search_all, message_id; + reverse, n_attr_disp, n_msg, search_all, message_id, n_page, i_start, i_stop; char date[80], attrib[MAX_N_ATTR][NAME_LENGTH], disp_attr[MAX_N_ATTR+4][NAME_LENGTH], list[10000], text[TEXT_SIZE], text1[TEXT_SIZE], text2[TEXT_SIZE], in_reply_to[80], reply_to[256], attachment[MAX_ATTACHMENTS][256], encoding[80]; @@ -5300,7 +5356,7 @@ MSG_LIST *msg_list; /* get mode */ strcpy(mode, "Full"); - if (past_n || last_n || list_n) + if (past_n || last_n || page_n) { if (getcfg(lbs->name, "Display Mode", str)) strcpy(mode, str); @@ -5628,9 +5684,30 @@ MSG_LIST *msg_list; memcpy(&msg_list[j++], &msg_list[i], sizeof(MSG_LIST)); n_msg = j; + /*---- number of messages per page ----*/ + + n_page = 1000000; + i_start = 0; + i_stop = n_msg-1; + if (page_n) + { + if (getcfg(lbs->name, "Messages per page", str)) + n_page = atoi(str); + else + n_page = 20; + + if (page_n != -1) + { + i_start = (page_n - 1) * n_page; + i_stop = i_start + n_page - 1; + if (i_stop >= n_msg) + i_stop = n_msg-1; + } + } + /*---- sort messasges ----*/ - qsort(msg_list, n_msg, sizeof(MSG_LIST), reverse ? msg_compare_reverse : msg_compare); + qsort(&msg_list[i_start], i_stop-i_start+1, sizeof(MSG_LIST), reverse ? msg_compare_reverse : msg_compare); /*---- header ----*/ @@ -5645,8 +5722,10 @@ MSG_LIST *msg_list; sprintf(str+strlen(str), loc("Last %d days"), past_n); else if (last_n) sprintf(str+strlen(str), loc("Last %d entries"), last_n); - else if (list_n) - sprintf(str+strlen(str), loc("Page %d of %d"), list_n, 0); + else if (page_n == -1) + sprintf(str+strlen(str), loc("all entries")); + else if (page_n) + sprintf(str+strlen(str), loc("Page %d of %d"), page_n, n_msg/n_page+1); if (strlen(str) == 2) str[0] = 0; @@ -5827,6 +5906,10 @@ MSG_LIST *msg_list; if (getcfg(lbs->name, "Summary lines", str)) n_line = atoi(str); + /*---- page navigation ----*/ + + if (!printable && page_n) + show_page_navigation(n_msg, page_n, n_page); /*---- table titles ----*/ @@ -5912,7 +5995,7 @@ MSG_LIST *msg_list; /*---- display message list ----*/ - for (index=0 ; indexel_index[msg_list[index].index].message_id; @@ -6009,288 +6092,6 @@ MSG_LIST *msg_list; } } - - - - - -#ifdef JUNK /*#################################################*/ - n_found = 0; - - if (search_all) - { - /* count logbooks */ - for (n_logbook=0 ; ; n_logbook++) - { - if (!lb_list[n_logbook].name[0]) - break; - } - } - else - { - n_logbook = 1; - } - - /* loop through all logbooks */ - for (lindex=0 ; lindex 1) - lbs = &lb_list[lindex]; - - if (past_n) - { - if (reverse) - { - message_id = el_search_message(lbs, EL_LAST, 0, threaded); - - time(&now); - ltime_start = now-3600*24*past_n; - } - else - { - time(&now); - ltime_start = now-3600*24*past_n; - - for (i=0 ; i<*lbs->n_el_index ; i++) - if (lbs->el_index[i].file_time >= ltime_start) - break; - if (i == *lbs->n_el_index) - message_id = 0; - else - message_id = lbs->el_index[i].message_id; - } - } - else if (last_n) - { - message_id = el_search_message(lbs, EL_LAST, 0, threaded); - - if (!reverse) - { - for (i=1 ; in_el_index-1 ; i>=0 ; i--) - if (lbs->el_index[i].file_time <= ltime_end) - break; - if (i<0) - message_id = 0; - else - message_id = lbs->el_index[i].message_id; - } - } - else - { - if (!*getparam("y1") && !*getparam("m1") && !*getparam("d1")) - { - /* search first message */ - message_id = el_search_message(lbs, EL_FIRST, 0, threaded); - } - else - { - for (i=0 ; i<*lbs->n_el_index ; i++) - if (lbs->el_index[i].file_time >= ltime_start) - break; - message_id = lbs->el_index[i].message_id; - } - } - } - - do - { - printf("## %d\n", message_id); - size = sizeof(text); - status = el_retrieve(lbs, message_id, date, attr_list, attrib, lbs->n_attr, - text, &size, in_reply_to, reply_to, - attachment, - encoding); - if (status != EL_SUCCESS) - break; - - for (i=0 ; i<*lbs->n_el_index ; i++) - if (lbs->el_index[i].message_id == message_id) - break; - ltime_current = lbs->el_index[i].file_time; - - if (reverse) - { - /* check for start date */ - if (ltime_start > 0) - if (ltime_current < ltime_start) - break; - - /* check for end date */ - if (ltime_end > 0) - { - if (ltime_current > ltime_end) - goto skip; - } - } - else - { - /* check for start date */ - if (ltime_start > 0) - if (ltime_current < ltime_start) - goto skip; - - /* check for end date */ - if (ltime_end > 0) - { - if (ltime_current >= ltime_end) - break; - } - } - - if (status == EL_SUCCESS) - { - /* do filtering */ - for (i=0 ; in_attr ; i++) - { - if (*getparam(attr_list[i])) - { - only_message_heads = FALSE; - strcpy(str, getparam(attr_list[i])); - for (j=0 ; j<(int)strlen(str) ; j++) - str[j] = toupper(str[j]); - str[j] = 0; - for (j=0 ; j<(int)strlen(attrib[i]) ; j++) - text1[j] = toupper(attrib[i][j]); - text1[j] = 0; - - if (strstr(text1, str) == NULL) - break; - } - } - if (i < lbs->n_attr) - goto skip; - - if (*getparam("subtext")) - { - only_message_heads = FALSE; - strcpy(str, getparam("subtext")); - for (i=0 ; i<(int)strlen(str) ; i++) - str[i] = toupper(str[i]); - str[i] = 0; - for (i=0 ; i<(int)strlen(text) ; i++) - text1[i] = toupper(text[i]); - text1[i] = 0; - - if (strstr(text1, str) == NULL) - goto skip; - - text2[0] = 0; - pt = text; /* original text */ - pt1 = text1; /* upper-case text */ - pt2 = text2; /* text with inserted coloring */ - do - { - p = strstr(pt1, str); - size = (int)(p - pt1); - if (p != NULL) - { - pt1 = p+strlen(str); - - /* copy first part original text */ - memcpy(pt2, pt, size); - pt2 += size; - pt += size; - - /* add coloring 1st part */ - - /* here: \001='<', \002='>', /003='"', and \004=' ' */ - /* see also rsputs2(char* ) */ - - if (equal_ustring(encoding, "plain") || !equal_ustring(mode, "Full")) - strcpy(pt2, "\001B\004style=\003color:black;background-color:#ffff66\003\002"); - else - strcpy(pt2, ""); - - pt2 += strlen(pt2); - - /* copy origial search text */ - memcpy(pt2, pt, strlen(str)); - pt2 += strlen(str); - pt += strlen(str); - - /* add coloring 2nd part */ - if (equal_ustring(encoding, "plain") || !equal_ustring(mode, "Full")) - strcpy(pt2, "\001/B\002"); - else - strcpy(pt2, ""); - pt2 += strlen(pt2); - } - } while (p != NULL); - - strcpy(pt2, pt); - strcpy(text, text2); - } - - /* check if reply */ - if (only_message_heads && in_reply_to[0]) - goto skip; - - /*---- filter passed: display line ----*/ - - n_found++; - - display_line(lbs, message_id, n_found, mode, 0, printable, n_line, - show_attachments, date, reply_to, n_attr_disp, disp_attr, - attrib, lbs->n_attr, text, attachment, encoding); - - if (threaded) - { - if (reply_to[0] && (!getcfg(lbs->name, "Top level only", str) || atoi(str) == 0)) - { - p = reply_to; - do - { - display_reply(lbs, atoi(p), printable, n_attr_disp, disp_attr, 1); - - while (*p && isdigit(*p)) - p++; - while (*p && (*p == ',' || *p == ' ')) - p++; - } while(*p); - } - } - } - - /* stop after all found (needed for reverse search) */ - if (last_n && n_found >= last_n) - break; - -skip: - /* get index of next message */ - if (reverse) - message_id = el_search_message(lbs, EL_PREV, message_id, only_message_heads); - else - message_id = el_search_message(lbs, EL_NEXT, message_id, only_message_heads); - - } while (message_id); - } /* for () */ - -#endif // JUNK ########################################### - - - - - - rsprintf("\n"); if (n_msg == 0) @@ -6303,8 +6104,16 @@ skip: rsprintf("\n"); } + /*---- page navigation ----*/ + + if (!printable && page_n) + show_page_navigation(n_msg, page_n, n_page); + + rsprintf("\n"); + /*---- bottom text ----*/ + if (getcfg(lbs->name, "bottom text", str)) { FILE *f; @@ -8399,10 +8208,13 @@ LOGBOOK *cur_lb; return; } - if (strncmp(path, "list", 4) == 0 && + if (strncmp(path, "page", 4) == 0 && *getparam("cmd") == 0) { - show_elog_submit_find(cur_lb, 0, 0, atoi(path+4)); + if (!path[4]) + show_elog_submit_find(cur_lb, 0, 0, -1); + else + show_elog_submit_find(cur_lb, 0, 0, atoi(path+4)); return; }