X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Ficonbar.c;h=422ebbc103ea8b6807cae53c466f81d3d16cf8da;hb=fb6f6fa4ec4e3277e30d84326d48e6850822d318;hp=d9b08b6f025e857f04d2f71e693d9e2cd648c460;hpb=abdd12cff81abdc5e4f1c700f5581f89afe9d4fe;p=citadel.git diff --git a/webcit/iconbar.c b/webcit/iconbar.c index d9b08b6f0..422ebbc10 100644 --- a/webcit/iconbar.c +++ b/webcit/iconbar.c @@ -1,7 +1,15 @@ /* - * $Id$ - * * Displays and customizes the iconbar. + * + * Copyright (c) 1996-2012 by the citadel.org team + * + * This program is open source software. You can redistribute it and/or + * modify it under the terms of the GNU General Public License, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. */ #include "webcit.h" @@ -75,52 +83,8 @@ inline const char *PrintInt(void *Prefstr) } #endif -/* Produces a stylesheet which hides any iconbar icons the user does not want * / -void doUserIconStylesheet(void) { - HashPos *pos; - void *Data; - long value; - const char *key; - long HKLen; - - output_custom_content_header("text/css"); - hprintf("Cache-Control: private\r\n"); - - begin_burst(); - wc_printf("#global { left: 16%%; }\r\n"); - pos = GetNewHashPos(WC->IconBarSettings, 0); - while(GetNextHashPos(WC->IconBarSettings, pos, &HKLen, &key, &Data)) { - value = (long) Data; - if (value == 0 - && strncasecmp("ib_displayas",key,12) - && strncasecmp("ib_logoff", key, 9)) { - / * Don't shoot me for this * / - wc_printf("#%s { display: none !important; }\r\n",key); - } else if (!strncasecmp("ib_users",key, 8) && value == 2) { - wc_printf("#online_users { display: block; !important } \r\n"); - } - } - DeleteHashPos(&pos); - end_burst(); -} - -void doUserIconStylesheet(void) { - HashPos *pos; - void *Data; - long value; - const char *key; - long HKLen; - -// output_custom_content_header("text/css"); - const StrBuf *MimeType; - begin_burst(); - MimeType = DoTemplate(HKEY("user_iconbar"), NULL, &NoCtx); - http_transmit_thing(ChrPtr(MimeType), 0); +/* hprintf("Cache-Control: private\r\n"); - - end_burst(); -} - */ @@ -135,13 +99,13 @@ int ConditionalIsActiveStylesheet(StrBuf *Target, WCTemplputParams *TP) { ib_displayas = IconbarIsENABLED(lookAt, TKEY(3)); - +/* printf ("%ld == %ld ? %s : %s\n", testFor, ib_displayas, IconbarDefaults[lookAt ].Key, ChrPtr(TP->Tokens->FlatToken)); - +*/ return (testFor == ib_displayas); } @@ -163,7 +127,7 @@ void LoadIconSettings(StrBuf *iconbar, long lvalue) { WCC->IBSettingsVec = (long*) malloc (nIBV * sizeof(long)); } - /** + /* * The initialized values of these variables also happen to * specify the default values for users who haven't customized * their iconbars. These should probably be set in a master @@ -180,7 +144,7 @@ void LoadIconSettings(StrBuf *iconbar, long lvalue) Set = (dflt_IB_Setting*)vIBDfl; WCC->IBSettingsVec[Set->n] = val; - printf("%ld %s %s -> %ld \n", Set->n, Set->Key, IconbarDefaults[Set->n].Key, val); +/* printf("%ld %s %s -> %ld \n", Set->n, Set->Key, IconbarDefaults[Set->n].Key, val);*/ } #ifdef DBG_ICONBAR_HASH dbg_PrintHash(WCC->IconBarSetttings, PrintInt, NULL); @@ -243,12 +207,20 @@ void commit_iconbar(void) { } +/* + * Display the icon bar as long as we have an active session, + * and either the user is logged in or the server allows guest mode. + */ void tmplput_iconbar(StrBuf *Target, WCTemplputParams *TP) { wcsession *WCC = WC; - if ((WCC != NULL) && (WCC->logged_in)) { - DoTemplate(HKEY("iconbar"), NULL, &NoCtx); + if ( (WCC != NULL) + && ( (WCC->logged_in) + || (WCC->serv_info->serv_supports_guest) + ) + ) { + DoTemplate(HKEY("iconbar"), NULL, &NoCtx); } } @@ -280,6 +252,58 @@ ServerStartModule_ICONBAR } } + +int ConditionalWholistExpanded(StrBuf *Target, WCTemplputParams *TP) +{ + int r = 0; + if (WC) r = WC->ib_wholist_expanded; + syslog(LOG_DEBUG, "ConditionalWholistExpanded() returns %d", r); + return(r); +} + + +int ConditionalRoomlistExpanded(StrBuf *Target, WCTemplputParams *TP) +{ + if (WC) return(WC->ib_roomlist_expanded); + return(0); +} + + + +/* + * Toggle the roomlist expanded state in session memory + */ +void toggle_roomlist_expanded_state(void) { + wcsession *WCC = WC; + + if (!WCC) { + wc_printf("no session"); + return; + } + + WCC->ib_roomlist_expanded = IBSTR("wstate"); + wc_printf("%d", WCC->ib_roomlist_expanded); + syslog(LOG_DEBUG, "ib_roomlist_expanded set to %d", WCC->ib_roomlist_expanded); +} + + +/* + * Toggle the wholist expanded state in session memory + */ +void toggle_wholist_expanded_state(void) { + wcsession *WCC = WC; + + if (!WCC) { + wc_printf("no session"); + return; + } + + WCC->ib_wholist_expanded = IBSTR("wstate"); + wc_printf("%d", WCC->ib_wholist_expanded); + syslog(LOG_DEBUG, "ib_wholist_expanded set to %d", WCC->ib_wholist_expanded); +} + + void InitModule_ICONBAR (void) @@ -288,8 +312,12 @@ InitModule_ICONBAR /*WebcitAddUrlHandler(HKEY("user_iconbar"), "", 0, doUserIconStylesheet, 0); */ WebcitAddUrlHandler(HKEY("commit_iconbar"), "", 0, commit_iconbar, 0); + WebcitAddUrlHandler(HKEY("toggle_wholist_expanded_state"), "", 0, toggle_wholist_expanded_state, AJAX); + WebcitAddUrlHandler(HKEY("toggle_roomlist_expanded_state"), "", 0, toggle_roomlist_expanded_state, AJAX); RegisterConditional(HKEY("COND:ICONBAR:ACTIVE"), 3, ConditionalIsActiveStylesheet, CTX_NONE); RegisterNamespace("ICONBAR", 0, 0, tmplput_iconbar, NULL, CTX_NONE); + RegisterConditional(HKEY("COND:ICONBAR:WHOLISTEXPANDED"), 0, ConditionalWholistExpanded, CTX_NONE); + RegisterConditional(HKEY("COND:ICONBAR:ROOMLISTEXPANDED"), 0, ConditionalRoomlistExpanded, CTX_NONE); RegisterPreference("iconbar", _("Iconbar Setting"), PRF_STRING, LoadIconSettings); l = 1; @@ -311,3 +339,4 @@ SessionDestroyModule_ICONBAR if (sess->IBSettingsVec != NULL) free(sess->IBSettingsVec); } +