* add more module handlers:
[citadel.git] / webcit / siteconfig.c
index 7d1a0b732bf1bab0ef75c71ea0c5cb1a468d1d72..b15b41e209667ac9adceb2159c7774a2a953c1d6 100644 (file)
@@ -162,7 +162,7 @@ void load_siteconfig(void)
        Buf = NewStrBuf();
        CfgToken = NULL;
        StrBuf_ServGetln(Buf);
-       if (ChrPtr(Buf)[0] == '2') {
+       if (GetServerStatus(Buf, NULL) == 2) {
                StrBufCutLeft(Buf, 4);
 
                CfgToken = NewStrBuf();
@@ -175,8 +175,8 @@ void load_siteconfig(void)
        }
 
        serv_puts("GPEX mailboxes");
-       serv_getln(buf, sizeof buf);
-       if (buf[0] == '2') {
+       StrBuf_ServGetln(Buf);
+       if (GetServerStatus(Buf, NULL) == 2) {
                StrBufCutLeft(Buf, 4);
 
                CfgToken = NewStrBuf();
@@ -187,6 +187,7 @@ void load_siteconfig(void)
                StrBufExtract_token(CfgToken, Buf, 1, '|');
                Put(Cfg, HKEY("mboxvalue"), CfgToken, HFreeStrBuf);
        }
+       FreeStrBuf(&Buf);
 }
 
 
@@ -236,8 +237,8 @@ void siteconfig(void)
        serv_getln(buf, sizeof buf);
        serv_printf("SPEX mailboxes|%d|%d", ibstr("mboxpolicy"), ibstr("mboxvalue"));
        serv_getln(buf, sizeof buf);
-
-       strcpy(serv_info.serv_default_cal_zone, bstr("c_default_cal_zone"));
+       FreeStrBuf(&WCC->serv_info->serv_default_cal_zone);
+       WCC->serv_info->serv_default_cal_zone = NewStrBufDup(sbstr("c_default_cal_zone"));
 
        safestrncpy(WCC->ImportantMessage, _("Your system configuration has been updated."),
                sizeof WCC->ImportantMessage);
@@ -245,7 +246,7 @@ void siteconfig(void)
        display_aide_menu();
 }
 
-void tmplput_servcfg(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
+void tmplput_servcfg(StrBuf *Target, WCTemplputParams *TP)
 {
        wcsession *WCC = WC;
        void *vBuf;
@@ -256,11 +257,11 @@ void tmplput_servcfg(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *C
                        load_siteconfig();
                GetHash(WCC->ServCfg, TKEY(0), &vBuf);
                Buf = (StrBuf*) vBuf;
-               StrBufAppendTemplate(Target, nArgs, Tokens, Context, ContextType, Buf, 1);
+               StrBufAppendTemplate(Target, TP, Buf, 1);
        }
 }
 
-int ConditionalServCfg(WCTemplateToken *Tokens, void *Context, int ContextType)
+int ConditionalServCfg(StrBuf *Target, WCTemplputParams *TP)
 {
        wcsession *WCC = WC;
        void *vBuf;
@@ -272,17 +273,17 @@ int ConditionalServCfg(WCTemplateToken *Tokens, void *Context, int ContextType)
                GetHash(WCC->ServCfg, TKEY(2), &vBuf);
                if (vBuf == NULL) return 0;
                Buf = (StrBuf*) vBuf;
-               if (Tokens->nParameters == 3) {
+               if (TP->Tokens->nParameters == 3) {
                        return 1;
                }
-               else if (Tokens->Params[3]->Type == TYPE_STR)
-                       return (strcmp(Tokens->Params[3]->Start, ChrPtr(Buf)) == 0);
-               else return (StrTol(Buf) == Tokens->Params[3]->lvalue);
+               else if (TP->Tokens->Params[3]->Type == TYPE_STR)
+                       return (strcmp(TP->Tokens->Params[3]->Start, ChrPtr(Buf)) == 0);
+               else return (StrTol(Buf) == TP->Tokens->Params[3]->lvalue);
        }
        else return 0;
 }
 
-int ConditionalServCfgSubst(WCTemplateToken *Tokens, void *Context, int ContextType)
+int ConditionalServCfgSubst(StrBuf *Target, WCTemplputParams *TP)
 {
        wcsession *WCC = WC;
        void *vBuf;
@@ -295,11 +296,18 @@ int ConditionalServCfgSubst(WCTemplateToken *Tokens, void *Context, int ContextT
                if (vBuf == NULL) return 0;
                Buf = (StrBuf*) vBuf;
 
-               return CompareSubstToStrBuf(Buf, Tokens->Params[3]);
+               return CompareSubstToStrBuf(Buf, TP->Tokens->Params[3]);
        }
        else return 0;
 }
 
+void CfgZoneTempl(StrBuf *TemplBuffer, WCTemplputParams *TP)
+{
+       StrBuf *Zone = (StrBuf*) CTX;
+
+       SVPutBuf("ZONENAME", Zone, 1);
+}
+
 void 
 InitModule_SITECONFIG
 (void)
@@ -309,4 +317,27 @@ InitModule_SITECONFIG
        RegisterNamespace("SERV:CFG", 1, 2, tmplput_servcfg, CTX_NONE);
        RegisterConditional(HKEY("COND:SERVCFG"), 3, ConditionalServCfg, CTX_NONE);
        RegisterConditional(HKEY("COND:SERVCFG:SUBST"), 4, ConditionalServCfgSubst, CTX_NONE);
+       RegisterIterator("PREF:ZONE", 0, ZoneHash, NULL, CfgZoneTempl, NULL, CTX_PREF, CTX_NONE, IT_NOFLAG);
+}
+
+void 
+ServerStartModule_SITECONFIG
+(void)
+{
+       LoadZoneFiles();
+}
+
+void 
+ServerShutdownModule_SITECONFIG
+(void)
+{
+       DeleteHash(&ZoneHash);
+}
+
+
+void 
+SessionDestroyModule_SITECONFIG
+(wcsession *sess)
+{
+       DeleteHash(&sess->ServCfg);
 }