X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Ficonbar.c;h=70c46023ad29e0a1d9182aacc601f1cb3df773fb;hb=8e165dd308679f195af8614d62dbdb4e43238495;hp=b789798628cb0b7c0de8719ccf02b5a41f27b436;hpb=1ce9a4d4c13712de72f8a188c60d4bc464285ca9;p=citadel.git diff --git a/webcit/iconbar.c b/webcit/iconbar.c index b78979862..70c46023a 100644 --- a/webcit/iconbar.c +++ b/webcit/iconbar.c @@ -6,19 +6,56 @@ #include "webcit.h" - -/** Values for ib_displayas */ -#define IB_PICTEXT 0 /**< picture and text */ -#define IB_PICONLY 1 /**< just a picture */ -#define IB_TEXTONLY 2 /**< just text */ +/* Values for ib_displayas ... don't change these or you will break the templates */ +#define IB_PICTEXT 0 /* picture and text */ +#define IB_PICONLY 1 /* just a picture */ +#define IB_TEXTONLY 2 /* just text */ void DontDeleteThis(void *Data){} #define IconbarIsEnabled(a, b) IconbarIsENABLED(a, sizeof(a) - 1, b) + + +typedef struct _dflt_IB_Setting { + int DefVal; + const char *Key; + long len; +}dflt_IB_Setting; + +dflt_IB_Setting IconbarDefaults[] = { + {0, HKEY("ib_displayas")}, + {0, HKEY("ib_logo")}, + {1, HKEY("ib_summary")}, + {1, HKEY("ib_inbox")}, + {1, HKEY("ib_calendar")}, + {1, HKEY("ib_contacts")}, + {1, HKEY("ib_notes")}, + {1, HKEY("ib_tasks")}, + {1, HKEY("ib_rooms")}, + {1, HKEY("ib_users")}, + {1, HKEY("ib_chat")}, + {1, HKEY("ib_advanced")}, + {1, HKEY("ib_logoff")}, + {1, HKEY("ib_citadel")}, + {0, HKEY("")} +}; + +HashList *IBDfl = NULL; + +long IconbarGetDefault(const char *key, size_t keylen) +{ + void *vIBDfl; + + if (GetHash(IBDfl, key, keylen, &vIBDfl)) { + dflt_IB_Setting *Set = (dflt_IB_Setting*)vIBDfl; + return Set->DefVal; + } + return 0; +} long IconbarIsENABLED(const char *key, size_t keylen, long defval) { - void *Data; + void *Data = NULL; wcsession *WCC = WC; if (WCC == NULL) @@ -27,8 +64,7 @@ long IconbarIsENABLED(const char *key, size_t keylen, long defval) if (GetHash(WCC->IconBarSettings, key, keylen, - &Data) && - (Data != NULL)) + &Data)) return (long) Data; else return defval; @@ -43,7 +79,7 @@ inline const char *PrintInt(void *Prefstr) } #endif -/** Produces a stylesheet which hides any iconbar icons the user does not want */ +/* Produces a stylesheet which hides any iconbar icons the user does not want */ void doUserIconStylesheet(void) { HashPos *pos; void *Data; @@ -55,7 +91,7 @@ void doUserIconStylesheet(void) { hprintf("Cache-Control: private\r\n"); begin_burst(); - wprintf("#global { left: 16%%; }\r\n"); + wc_printf("#global { left: 16%%; }\r\n"); pos = GetNewHashPos(WC->IconBarSettings, 0); while(GetNextHashPos(WC->IconBarSettings, pos, &HKLen, &key, &Data)) { value = (long) Data; @@ -63,9 +99,9 @@ void doUserIconStylesheet(void) { && strncasecmp("ib_displayas",key,12) && strncasecmp("ib_logoff", key, 9)) { /* Don't shoot me for this */ - wprintf("#%s { display: none !important; }\r\n",key); + wc_printf("#%s { display: none !important; }\r\n",key); } else if (!strncasecmp("ib_users",key, 8) && value == 2) { - wprintf("#online_users { display: block; !important } \r\n"); + wc_printf("#online_users { display: block; !important } \r\n"); } } DeleteHashPos(&pos); @@ -73,8 +109,11 @@ void doUserIconStylesheet(void) { } int ConditionalIsActiveStylesheet(StrBuf *Target, WCTemplputParams *TP) { - long testFor = TP->Tokens->Params[3]->lvalue; - int ib_displayas = IconbarIsEnabled("ib_displayas",IB_PICTEXT); + long testFor; + int ib_displayas; + + testFor = GetTemplateTokenNumber(Target, TP, 3, IB_PICTEXT); + ib_displayas = IconbarIsENABLED(TKEY(2),IconbarGetDefault(TKEY(2))); return (testFor == ib_displayas); } @@ -115,311 +154,16 @@ void LoadIconSettings(StrBuf *iconbar, long lvalue) FreeStrBuf(&buf); } -/** - * \brief display a customized version of the iconbar - */ -void display_customize_iconbar(void) { - int i; - int bar = 0; - long val; - - int ib_displayas; - - output_headers(1, 1, 2, 0, 0, 0); - wprintf("
"); - wprintf("

"); - wprintf(_("Customize the icon bar")); - wprintf("

\n"); - - wprintf("
\n"); - - wprintf("
"); - - wprintf("
\n"); - wprintf("\n", WC->nonce); - - wprintf("\n"); - wprintf("\n"); - - bar = 1 - bar; - val = IconbarIsEnabled("ib_logo", 0); - wprintf("\n", - (bar ? "even" : "odd"), - (val ? "CHECKED" : ""),_("Yes"), - (!val ? "CHECKED" : ""),_("No"), - _("Site logo"), - _("An icon describing this site") - ); - - bar = 1 - bar; - val = IconbarIsEnabled("ib_summary", 1); - wprintf("\n", - (bar ? "even" : "odd"), - (val ? "CHECKED" : ""),_("Yes"), - (!val ? "CHECKED" : ""),_("No"), - _("Summary"), - _("Your summary page") - ); - - bar = 1 - bar; - val = IconbarIsEnabled("ib_inbox", 1); - wprintf("\n", - (bar ? "even" : "odd"), - (val ? "CHECKED" : ""),_("Yes"), - (!val ? "CHECKED" : ""),_("No"), - _("Mail (inbox)"), - _("A shortcut to your email Inbox") - ); - - bar = 1 - bar; - val = IconbarIsEnabled("ib_contacts", 1); - wprintf("\n", - (bar ? "even" : "odd"), - (val ? "CHECKED" : ""),_("Yes"), - (!val ? "CHECKED" : ""),_("No"), - _("Contacts"), - _("Your personal address book") - ); - - bar = 1 - bar; - val = IconbarIsEnabled("ib_notes", 1); - wprintf("\n", - (bar ? "even" : "odd"), - (val ? "CHECKED" : ""),_("Yes"), - (!val ? "CHECKED" : ""),_("No"), - _("Notes"), - _("Your personal notes") - ); - - bar = 1 - bar; - val = IconbarIsEnabled("ib_calendar", 1); - wprintf("\n", - (bar ? "even" : "odd"), - (val ? "CHECKED" : ""),_("Yes"), - (!val ? "CHECKED" : ""),_("No"), - _("Calendar"), - _("A shortcut to your personal calendar") - ); - - bar = 1 - bar; - val = IconbarIsEnabled("ib_tasks", 1); - wprintf("\n", - (bar ? "even" : "odd"), - (val ? "CHECKED" : ""),_("Yes"), - (!val ? "CHECKED" : ""),_("No"), - _("Tasks"), - _("A shortcut to your personal task list") - ); - - bar = 1 - bar; - val = IconbarIsEnabled("ib_rooms", 1); - wprintf("\n", - (bar ? "even" : "odd"), - (val ? "CHECKED" : ""),_("Yes"), - (!val ? "CHECKED" : ""),_("No"), - _("Rooms"), - _("Clicking this icon displays a list of all accessible " - "rooms (or folders) available.") - ); - - bar = 1 - bar; - val = IconbarIsEnabled("ib_users", 1); - wprintf("\n", - (bar ? "even" : "odd"), - (val ? "CHECKED" : ""),_("Yes"), - (!val ? "CHECKED" : ""),_("No"), - ((val > 1) ? "CHECKED" : ""),_("Yes with users list"), - _("Who is online?"), - _("Clicking this icon displays a list of all users " - "currently logged in.") - ); - - bar = 1 - bar; - val = IconbarIsEnabled("ib_chat", 1); - wprintf("\n", - (bar ? "even" : "odd"), - (val ? "CHECKED" : ""),_("Yes"), - (!val ? "CHECKED" : ""),_("No"), - _("Chat"), - _("Clicking this icon enters real-time chat mode " - "with other users in the same room.") - - ); - - bar = 1 - bar; - val = IconbarIsEnabled("ib_advanced", 1); - wprintf("\n", - (bar ? "even" : "odd"), - (val ? "CHECKED" : ""),_("Yes"), - (!val ? "CHECKED" : ""),_("No"), - _("Advanced options"), - _("Access to the complete menu of Citadel functions.") - - ); - - bar = 1 - bar; - val = IconbarIsEnabled("ib_citadel", 1); - wprintf("\n", - (bar ? "even" : "odd"), - (val ? "CHECKED" : ""),_("Yes"), - (!val ? "CHECKED" : ""),_("No"), - _("Citadel logo"), - _("Displays the 'Powered by Citadel' icon") - ); - - wprintf("
"); - wprintf(_("Display icons as:")); - wprintf(""); - ib_displayas = IconbarIsEnabled("ib_displayas",IB_PICTEXT); - for (i=0; i<=2; ++i) { - wprintf(""); - if (i == IB_PICTEXT) wprintf(_("pictures and text")); - if (i == IB_PICONLY) wprintf(_("pictures only")); - if (i == IB_TEXTONLY) wprintf(_("text only")); - wprintf("\n"); - } - wprintf("
\n"); - - wprintf(_("Select the icons you would like to see displayed " - "in the 'icon bar' menu on the left side of the " - "screen.")); - wprintf("
" - " %s    " - " %s
" - "
" - "\" \"" - "" - "%s
" - "%s" - "
" - " %s    " - " %s
" - "
" - "\" \"" - "" - "%s
" - "%s" - "
" - " %s    " - " %s
" - "
" - "\" \"" - "" - "%s
" - "%s" - "
" - " %s    " - " %s
" - "
" - "\" \"" - "" - "%s
" - "%s" - "
" - " %s    " - " %s
" - "
" - "\" \"" - "" - "%s
" - "%s" - "
" - " %s    " - " %s
" - "
" - "\" \"" - "" - "%s
" - "%s" - "
" - " %s    " - " %s
" - "
" - "\" \"" - "" - "%s
" - "%s" - "
" - " %s    " - " %s
" - "
" - "\" \"" - "" - "%s
" - "%s" - "
" - " %s    " - " %s
" - " %s" - "
" - "\" \"" - "" - "%s" - "
%s" - "
" - " %s    " - " %s
" - "
" - "\" \"" - "" - "%s
" - "%s" - "
" - " %s    " - " %s
" - "
" - "\" \"" - "" - "%s
" - "%s" - "
" - " %s    " - " %s
" - "
" - "\" \"" - "" - "%s
" - "%s" - "

\n" - "
" - "" - " " - "" - "
\n", - _("Save changes"), - _("Cancel") - ); - - wprintf("
\n"); - wDumpContent(2); -} -/** - * \brief commit the changes of an edited iconbar ???? +/* + * save changes to iconbar settings */ void commit_iconbar(void) { + const StrBuf *MimeType; StrBuf *iconbar; StrBuf *buf; int i; - char *boxen[] = { - "ib_logo", - "ib_summary", - "ib_inbox", - "ib_calendar", - "ib_contacts", - "ib_notes", - "ib_tasks", - "ib_rooms", - "ib_users", - "ib_chat", - "ib_advanced", - "ib_logoff", - "ib_citadel" - }; if (!havebstr("ok_button")) { display_main_menu(); @@ -429,40 +173,34 @@ void commit_iconbar(void) { iconbar = NewStrBuf(); buf = NewStrBuf(); StrBufPrintf(iconbar, "ib_displayas=%d", ibstr("ib_displayas")); - for (i=0; i<(sizeof(boxen)/sizeof(char *)); ++i) { + for (i=0; i<(sizeof(IconbarDefaults)/sizeof(dflt_IB_Setting )); ++i) { char *Val; - if (!strcasecmp(BSTR(boxen[i]), "yes")) { + if (!strcasecmp(Bstr(IconbarDefaults[i].Key, + IconbarDefaults[i].len), + "yes")) + { Val = "1"; } - else if (!strcasecmp(BSTR(boxen[i]), "yeslist")) { + else if (!strcasecmp(Bstr(IconbarDefaults[i].Key, + IconbarDefaults[i].len), + "yeslist")) + { Val = "2"; } else { Val = "0"; } - StrBufPrintf(buf, ",%s=%s", boxen[i], Val); + StrBufPrintf(buf, ",%s=%s", IconbarDefaults[i].Key, Val); StrBufAppendBuf(iconbar, buf, 0); } FreeStrBuf(&buf); set_preference("iconbar", iconbar, 1); - output_headers(1, 1, 2, 0, 0, 0); - /* TODO: TEMPLATE */ - wprintf("
\n"); - wprintf("

"); - wprintf(_("Customize the icon bar")); - wprintf("

\n"); - - wprintf("
\n"); - wprintf( - "
" - "" - " "); - wprintf(_("Your icon bar has been updated. Please select any of its " - "choices to continue.
You may need to force refresh (SHIFT-F5) in order for changes to take effect")); - wprintf("
\n"); - wDumpContent(2); + + begin_burst(); + MimeType = DoTemplate(HKEY("iconbar_save"), NULL, &NoCtx); + http_transmit_thing(ChrPtr(MimeType), 0); #ifdef DBG_ICONBAR_HASH dbg_PrintHash(WC->IconBarSetttings, PrintInt, NULL); #endif @@ -478,15 +216,42 @@ void tmplput_iconbar(StrBuf *Target, WCTemplputParams *TP) } } + +void +ServerShutdownModule_ICONBAR +(void) +{ + DeleteHash(&IBDfl); +} + + + +void +ServerStartModule_ICONBAR +(void) +{ + int i = 0; + IBDfl = NewHash(1, NULL); + + while (IconbarDefaults[i].len != 0) + { + Put(IBDfl, + IconbarDefaults[i].Key, + IconbarDefaults[i].len, + &IconbarDefaults[i], + reference_free_handler); + i++; + } +} + void InitModule_ICONBAR (void) { - WebcitAddUrlHandler(HKEY("user_iconbar"), doUserIconStylesheet, 0); - WebcitAddUrlHandler(HKEY("commit_iconbar"), commit_iconbar, 0); + WebcitAddUrlHandler(HKEY("user_iconbar"), "", 0, doUserIconStylesheet, 0); + WebcitAddUrlHandler(HKEY("commit_iconbar"), "", 0, commit_iconbar, 0); RegisterConditional(HKEY("COND:ICONBAR:ACTIVE"), 3, ConditionalIsActiveStylesheet, CTX_NONE); - WebcitAddUrlHandler(HKEY("display_customize_iconbar"), display_customize_iconbar, 0); - RegisterNamespace("ICONBAR", 0, 0, tmplput_iconbar, 0); + RegisterNamespace("ICONBAR", 0, 0, tmplput_iconbar, NULL, CTX_NONE); RegisterPreference("iconbar", _("Iconbar Setting"), PRF_STRING, LoadIconSettings); } @@ -499,5 +264,3 @@ SessionDestroyModule_ICONBAR { DeleteHash(&sess->IconBarSettings); } - -/*@}*/