From 20d79c41c705a898eeea0d656d830fd58dbd80d8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Thu, 15 Oct 2009 12:45:26 +0000 Subject: [PATCH] * switch roomlisting to templating * add the iconbar roomtreview to the body so we can wipe most of the old knrooms functionality --- webcit/roomops.c | 598 +---------------------------------- webcit/static/t/iconbar.html | 2 +- webcit/static/t/knrooms.html | 15 +- webcit/static/wclib.js | 12 +- 4 files changed, 27 insertions(+), 600 deletions(-) diff --git a/webcit/roomops.c b/webcit/roomops.c index f40d9cf99..caa3d7e9a 100644 --- a/webcit/roomops.c +++ b/webcit/roomops.c @@ -2868,363 +2868,6 @@ void change_view(void) { do_change_view(view); } - -/** - * \brief One big expanded tree list view --- like a folder list - * \param fold the folder to view - * \param max_folders how many folders??? - * \param num_floors hom many floors??? - */ -void do_folder_view(struct __ofolder *fold, int max_folders, int num_floors) { - char buf[SIZ]; - int levels; - int i; - int has_subfolders = 0; - int *parents; - - parents = malloc(max_folders * sizeof(int)); - - /** BEGIN TREE MENU */ - wprintf("
Loading folder list...
\n"); - - /** include NanoTree */ - wprintf("\n"); - - /** initialize NanoTree */ - wprintf("\n" - ); - - free(parents); - /** END TREE MENU */ -} - -/** - * \brief Boxes and rooms and lists ... oh my! - * \param fold the folder to view - * \param max_folders how many folders??? - * \param num_floors hom many floors??? - */ -void do_rooms_view(struct __ofolder *fold, int max_folders, int num_floors) { - char buf[256]; - char floor_name[256]; - char old_floor_name[256]; - int levels, oldlevels; - int i, t; - int num_boxes = 0; - static int columns = 3; - int boxes_per_column = 0; - int current_column = 0; - int nf; - - strcpy(floor_name, ""); - strcpy(old_floor_name, ""); - - nf = num_floors; - while (nf % columns != 0) ++nf; - boxes_per_column = (nf / columns); - if (boxes_per_column < 1) boxes_per_column = 1; - - /** Outer table (for columnization) */ - wprintf("" - "
"); - - levels = 0; - oldlevels = 0; - for (i=0; i"); - - ++num_boxes; - if ((num_boxes % boxes_per_column) == 0) { - ++current_column; - if (current_column < columns) { - wprintf("\n"); - } - } - } - strcpy(old_floor_name, floor_name); - - if (levels == 1) { - StrBuf *Buf; - WCTemplputParams SubTP; - - Buf = NewStrBufPlain(floor_name, -1); - memset(&SubTP, 0, sizeof(WCTemplputParams)); - SubTP.Filter.ContextType = CTX_STRBUF; - SubTP.Context = Buf; - DoTemplate(HKEY("beginbox"), NULL, &SubTP); - - FreeStrBuf(&Buf); - } - - oldlevels = levels; - - if (levels > 1) { - wprintf(" "); - if (levels>2) for (t=0; t<(levels-2); ++t) wprintf("   "); - if (fold[i].selectable) { - wprintf(""); - } - else { - wprintf(""); - } - if (fold[i].hasnewmsgs) { - wprintf(""); - } - else { - wprintf(""); - } - extract_token(buf, fold[i].name, levels-1, '|', sizeof buf); - escputs(buf); - wprintf(""); - if (fold[i].selectable) { - wprintf(""); - } - else { - wprintf(""); - } - if (!strcasecmp(fold[i].name, "My Folders|Mail")) { - wprintf(" (INBOX)"); - } - wprintf("
\n"); - } - } - /** End the final inner box */ - do_template("endbox", NULL); - - wprintf("
\n"); -} - -/** - * \brief print a floor div??? - * \param which_floordiv name of the floordiv??? - */ -void set_floordiv_expanded(void) { - wcsession *WCC = WC; - StrBuf *FloorDiv; - - FloorDiv = NewStrBuf(); - StrBufExtract_token(FloorDiv, WCC->Hdr->HR.ReqLine, 0, '/'); - set_preference("floordiv_expanded", FloorDiv, 1); - WCC->floordiv_expanded = FloorDiv; -} - -/** - * \brief view the iconbar - * \param fold the folder to view - * \param max_folders how many folders??? - * \param num_floors hom many floors??? - */ -void do_iconbar_view(struct __ofolder *fold, int max_folders, int num_floors) { - char buf[256]; - char floor_name[256]; - char old_floor_name[256]; - char floordivtitle[256]; - char floordiv_id[32]; - int levels, oldlevels; - int i, t; - char *icon = NULL; - - strcpy(floor_name, ""); - strcpy(old_floor_name, ""); - - levels = 0; - oldlevels = 0; - for (i=0; i\n"); - wprintf("\n"); /** floordiv */ - } - strcpy(old_floor_name, floor_name); - - if (levels == 1) { - /** Begin floor */ - stresc(floordivtitle, 256, floor_name, 0, 0); - sprintf(floordiv_id, "floordiv%d", i); - wprintf("" - "%s
\n", floordiv_id, floordivtitle); - wprintf("
", - floordiv_id, - (!strcasecmp(floordiv_id, ChrPtr(WC->floordiv_expanded)) ? "block" : "none") - ); - } - - oldlevels = levels; - - if (levels > 1) { - wprintf("
", i); - wprintf(" "); - if (levels>2) for (t=0; t<(levels-2); ++t) wprintf(" "); - - /** choose the icon */ - if (fold[i].view == VIEW_ADDRESSBOOK) { - icon = "viewcontacts_16x.gif" ; - } - else if (fold[i].view == VIEW_CALENDAR) { - icon = "calarea_16x.gif" ; - } - else if (fold[i].view == VIEW_CALBRIEF) { - icon = "calarea_16x.gif" ; - } - else if (fold[i].view == VIEW_TASKS) { - icon = "taskmanag_16x.gif" ; - } - else if (fold[i].view == VIEW_NOTES) { - icon = "storenotes_16x.gif" ; - } - else if (fold[i].view == VIEW_MAILBOX) { - icon = "privatemess_16x.gif" ; - } - else { - icon = "chatrooms_16x.gif" ; - } - - if (fold[i].selectable) { - wprintf(""); - wprintf("\"\" ", icon); - } - else { - wprintf(""); - } - if (fold[i].hasnewmsgs) { - wprintf(""); - } - else { - wprintf(""); - } - extract_token(buf, fold[i].name, levels-1, '|', sizeof buf); - escputs(buf); - if (!strcasecmp(fold[i].name, "My Folders|Mail")) { - wprintf(" (INBOX)"); - } - wprintf(""); - if (fold[i].selectable) { - wprintf(""); - } - else { - wprintf(""); - } - wprintf("
"); - wprintf("
\n"); /** roomdiv */ - } - } - wprintf("
\n"); /** floordiv */ - - -} - - - /** * \brief Burn the cached folder list. * \param age How old the cahce needs to be before we burn it. @@ -3243,189 +2886,6 @@ void burn_folder_cache(time_t age) - -/** - * \brief Show the room list. - * (only should get called by - * knrooms() because that's where output_headers() is called from) - * \param viewpref the view preferences??? - */ - -void list_all_rooms_by_floor(const char *viewpref) { - StrBuf *Buf; - char buf[SIZ]; - int swap = 0; - struct __ofolder *fold = NULL; - struct __ofolder ftmp; - int max_folders = 0; - int alloc_folders = 0; - int *floor_mapping; - int IDMax; - int i, j; - int ShowEmptyFloors; - int ra_flags = 0; - int flags = 0; - int num_floors = 1; /** add an extra one for private folders */ - char buf3[SIZ]; - - /** If our cached folder list is very old, burn it. */ - burn_folder_cache(300); - - /** Can we do the iconbar roomlist from cache? */ - if ((WC->cache_fold != NULL) && (!strcasecmp(viewpref, "iconbar"))) { - do_iconbar_view(WC->cache_fold, WC->cache_max_folders, WC->cache_num_floors); - return; - } - Buf = NewStrBuf(); - - /** Grab the floor table so we know how to build the list... */ - load_floorlist(Buf); - FreeStrBuf(&Buf); - /** Start with the mailboxes */ - max_folders = 1; - alloc_folders = 1; - fold = malloc(sizeof(struct __ofolder)); - memset(fold, 0, sizeof(struct __ofolder)); - strcpy(fold[0].name, "My folders"); - fold[0].is_mailbox = 1; - - /** Then add floors */ - serv_puts("LFLR"); - serv_getln(buf, sizeof buf); - if (buf[0]=='1') while(serv_getln(buf, sizeof buf), strcmp(buf, "000")) { - if (max_folders >= alloc_folders) { - alloc_folders = max_folders + 100; - fold = realloc(fold, - alloc_folders * sizeof(struct __ofolder)); - } - memset(&fold[max_folders], 0, sizeof(struct __ofolder)); - extract_token(fold[max_folders].name, buf, 1, '|', sizeof fold[max_folders].name); - extract_token(buf3, buf, 0, '|', SIZ); - fold[max_folders].floor = atol (buf3); - ++max_folders; - ++num_floors; - } - IDMax = 0; - for (i=0; i= alloc_folders) { - alloc_folders = max_folders + 100; - fold = realloc(fold, - alloc_folders * sizeof(struct __ofolder)); - } - memset(&fold[max_folders], 0, sizeof(struct __ofolder)); - extract_token(fold[max_folders].room, buf, 0, '|', sizeof fold[max_folders].room); - ra_flags = extract_int(buf, 5); - flags = extract_int(buf, 1); - fold[max_folders].floor = extract_int(buf, 2); - fold[max_folders].hasnewmsgs = - ((ra_flags & UA_HASNEWMSGS) ? 1 : 0 ); - if (flags & QR_MAILBOX) { - fold[max_folders].is_mailbox = 1; - } - fold[max_folders].view = extract_int(buf, 6); - room_to_folder(fold[max_folders].name, - fold[max_folders].room, - fold[max_folders].floor, - fold[max_folders].is_mailbox); - fold[max_folders].selectable = 1; - /* Increase the room count for the associtaed floor */ - if (fold[max_folders].is_mailbox) { - fold[0].num_rooms++; - } - else { - i = floor_mapping[fold[max_folders].floor]; - fold[i].num_rooms++; - } - ++max_folders; - } - - /* - * Remove any floors that don't have rooms - */ - get_pref_yesno("emptyfloors", &ShowEmptyFloors, 0); - if (ShowEmptyFloors) - { - for (i=0; i 0) { - memcpy(&ftmp, &fold[j], sizeof(struct __ofolder)); - memcpy(&fold[j], &fold[j+1], - sizeof(struct __ofolder)); - memcpy(&fold[j+1], &ftmp, - sizeof(struct __ofolder)); - } - } - } - - - if (!strcasecmp(viewpref, "folders")) { - do_folder_view(fold, max_folders, num_floors); - } - else if (!strcasecmp(viewpref, "hackish_view")) { - for (i=0; i\n"); - } - } - else if (!strcasecmp(viewpref, "iconbar")) { - do_iconbar_view(fold, max_folders, num_floors); - } - else { - do_rooms_view(fold, max_folders, num_floors); - } - - /* Don't free the folder list ... cache it for future use! */ - if (WC->cache_fold != NULL) { - free(WC->cache_fold); - } - WC->cache_fold = fold; - WC->cache_max_folders = max_folders; - WC->cache_num_floors = num_floors; - WC->cache_timestamp = time(NULL); - free(floor_mapping); -} - - /** * \brief Do either a known rooms list or a folders list, depending on the * user's preference @@ -3434,11 +2894,9 @@ void knrooms(void) { StrBuf *ListView = NULL; - output_headers(1, 1, 2, 0, 0, 0); - /** Determine whether the user is trying to change views */ if (havebstr("view")) { - ListView = NewStrBufPlain(bstr("view"), -1); + ListView = NewStrBufDup(SBSTR("view")); set_preference("roomlistview", ListView, 1); } /** Sanitize the input so its safe */ @@ -3447,62 +2905,15 @@ void knrooms(void) (strcasecmp(ChrPtr(ListView), "table") != 0))) { if (ListView == NULL) { - ListView = NewStrBufPlain("rooms", sizeof("rooms") - 1); + ListView = NewStrBufPlain(HKEY("rooms")); set_preference("roomlistview", ListView, 0); } else { - StrBufPrintf(ListView, "rooms"); + StrBufPlain(ListView, HKEY("rooms")); save_preferences(); } } - - /** title bar */ - wprintf("
\n"); - wprintf("
"); - wprintf("

"); - if (!strcasecmp(ChrPtr(ListView), "rooms")) { - wprintf(_("Room list")); - } - else if (!strcasecmp(ChrPtr(ListView), "folders")) { - wprintf(_("Folder list")); - } - else if (!strcasecmp(ChrPtr(ListView), "table")) { - wprintf(_("Room list")); - } - wprintf("

\n"); - - /** offer the ability to switch views */ - wprintf("
"); - wprintf("
    \n"); - wprintf("
  • "); - offer_start_page(NULL, &NoCtx); - wprintf("
  • "); - wprintf("
  • \n" - ""); - wprintf("
  • "); - wprintf("
\n"); - - wprintf("
\n"); - - /** Display the room list in the user's preferred format */ - list_all_rooms_by_floor(ChrPtr(ListView)); - wDumpContent(1); + url_do_template(); } @@ -3779,7 +3190,6 @@ InitModule_ROOMOPS WebcitAddUrlHandler(HKEY("editroom"), editroom, 0); WebcitAddUrlHandler(HKEY("delete_room"), delete_room, 0); WebcitAddUrlHandler(HKEY("set_room_policy"), set_room_policy, 0); - WebcitAddUrlHandler(HKEY("set_floordiv_expanded"), set_floordiv_expanded, NEED_URL|AJAX); WebcitAddUrlHandler(HKEY("changeview"), change_view, 0); WebcitAddUrlHandler(HKEY("toggle_self_service"), toggle_self_service, 0); RegisterNamespace("ROOMBANNER", 0, 1, tmplput_roombanner, 0); diff --git a/webcit/static/t/iconbar.html b/webcit/static/t/iconbar.html index 89d23f7ea..f0682e42e 100644 --- a/webcit/static/t/iconbar.html +++ b/webcit/static/t/iconbar.html @@ -38,7 +38,7 @@
  • -"> +">
  • diff --git a/webcit/static/t/knrooms.html b/webcit/static/t/knrooms.html index 061022315..5357a7bbb 100644 --- a/webcit/static/t/knrooms.html +++ b/webcit/static/t/knrooms.html @@ -16,17 +16,26 @@
    -
    + +
    + + +
    +
    + + diff --git a/webcit/static/wclib.js b/webcit/static/wclib.js index 66df5b699..7a84ec05a 100644 --- a/webcit/static/wclib.js +++ b/webcit/static/wclib.js @@ -210,7 +210,8 @@ function switch_to_menu_buttons() { var roomlist = document.getElementById("roomlist"); roomlist.className += " hidden"; } -function IconBarRoomList() { + +function GenericTreeRoomList(roomlist) { var currentExpanded = ctdlLocalPrefs.readPref("rooms_expanded"); var curRoomName = ""; if (document.getElementById("rmname")) { @@ -218,7 +219,6 @@ function IconBarRoomList() { } currentDropTargets = new Array(); var iconbar = document.getElementById("iconbar"); - roomlist = document.getElementById("roomlist"); var ul = document.createElement("ul"); roomlist.appendChild(ul); // Add mailbox, because they are special @@ -268,6 +268,14 @@ function IconBarRoomList() { } } } +function IconBarRoomList() { + roomlist = document.getElementById("roomlist"); + GenericTreeRoomList(roomlist); +} +function KNRoomsRoomList() { + roomlist = document.getElementById("roomlist_knrooms"); + GenericTreeRoomList(roomlist); +} function addRoomToList(floorUL,room, roomToEmphasize) { var roomName = room[RN_ROOM_NAME]; -- 2.30.2