TEMPLATING: add possibility to stack another context inbetween conditional tags
[citadel.git] / webcit / sieve.c
index d93fdcc6c0c3964702c99e589f2c022adea3c674..ee6bcec9e4afa0240ca803485592501d987e09c6 100644 (file)
@@ -14,6 +14,9 @@
 
 #include "webcit.h"
 
+CtxType CTX_SIEVELIST = CTX_NONE;
+CtxType CTX_SIEVESCRIPT = CTX_NONE;
+
 #define MAX_SCRIPTS    100
 #define MAX_RULES      50
 #define RULES_SCRIPT   "__WebCit_Generated_Script__"
@@ -488,22 +491,22 @@ typedef struct __SieveListing {
 
 int ConditionalSieveScriptIsActive(StrBuf *Target, WCTemplputParams *TP)
 {
-       SieveListing     *SieveList = (SieveListing *)CTX;
+       SieveListing     *SieveList = (SieveListing *)CTX(CTX_SIEVELIST);
        return SieveList->IsActive;
 }
 int ConditionalSieveScriptIsRulesScript(StrBuf *Target, WCTemplputParams *TP)
 {
-       SieveListing     *SieveList = (SieveListing *)CTX;
+       SieveListing     *SieveList = (SieveListing *)CTX(CTX_SIEVELIST);
        return SieveList->IsActive;
 }
 void tmplput_SieveScriptName(StrBuf *Target, WCTemplputParams *TP) 
 {
-       SieveListing     *SieveList = (SieveListing *)CTX;
+       SieveListing     *SieveList = (SieveListing *)CTX(CTX_SIEVELIST);
        StrBufAppendTemplate(Target, TP, SieveList->Name, 0);
 }
 void tmplput_SieveScriptContent(StrBuf *Target, WCTemplputParams *TP) 
 {
-       SieveListing     *SieveList = (SieveListing *)CTX;
+       SieveListing     *SieveList = (SieveListing *)CTX(CTX_SIEVELIST);
        StrBufAppendTemplate(Target, TP, SieveList->Content, 0);
 }
 void FreeSieveListing(void *vSieveListing)
@@ -683,7 +686,7 @@ typedef struct __SieveRule {
 
 int ConditionalSieveRule_hfield(StrBuf *Target, WCTemplputParams *TP)
 {
-       SieveRule     *Rule = (SieveRule *)CTX;
+       SieveRule     *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
        
         return GetTemplateTokenNumber(Target, 
                                       TP, 
@@ -694,7 +697,7 @@ int ConditionalSieveRule_hfield(StrBuf *Target, WCTemplputParams *TP)
 }
 int ConditionalSieveRule_compare(StrBuf *Target, WCTemplputParams *TP)
 {
-       SieveRule     *Rule = (SieveRule *)CTX;
+       SieveRule     *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
         return GetTemplateTokenNumber(Target, 
                                       TP, 
                                       3, 
@@ -704,7 +707,7 @@ int ConditionalSieveRule_compare(StrBuf *Target, WCTemplputParams *TP)
 }
 int ConditionalSieveRule_action(StrBuf *Target, WCTemplputParams *TP)
 {
-       SieveRule     *Rule = (SieveRule *)CTX;
+       SieveRule     *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
         return GetTemplateTokenNumber(Target, 
                                       TP, 
                                       3, 
@@ -714,7 +717,7 @@ int ConditionalSieveRule_action(StrBuf *Target, WCTemplputParams *TP)
 }
 int ConditionalSieveRule_sizecomp(StrBuf *Target, WCTemplputParams *TP)
 {
-       SieveRule     *Rule = (SieveRule *)CTX;
+       SieveRule     *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
         return GetTemplateTokenNumber(Target, 
                                       TP, 
                                       3, 
@@ -724,7 +727,7 @@ int ConditionalSieveRule_sizecomp(StrBuf *Target, WCTemplputParams *TP)
 }
 int ConditionalSieveRule_final(StrBuf *Target, WCTemplputParams *TP)
 {
-       SieveRule     *Rule = (SieveRule *)CTX;
+       SieveRule     *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
         return GetTemplateTokenNumber(Target, 
                                       TP, 
                                       3, 
@@ -734,7 +737,7 @@ int ConditionalSieveRule_final(StrBuf *Target, WCTemplputParams *TP)
 }
 int ConditionalSieveRule_ThisRoom(StrBuf *Target, WCTemplputParams *TP)
 {
-       SieveRule     *Rule = (SieveRule *)CTX;
+       SieveRule     *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
         return GetTemplateTokenNumber(Target, 
                                       TP, 
                                       3, 
@@ -744,39 +747,39 @@ int ConditionalSieveRule_ThisRoom(StrBuf *Target, WCTemplputParams *TP)
 }
 int ConditionalSieveRule_Active(StrBuf *Target, WCTemplputParams *TP)
 {
-       SieveRule     *Rule = (SieveRule *)CTX;
+       SieveRule     *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
         return Rule->active;
 }
 void tmplput_SieveRule_htext(StrBuf *Target, WCTemplputParams *TP) 
 {
-       SieveRule     *Rule = (SieveRule *)CTX;
+       SieveRule     *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
        StrBufAppendTemplate(Target, TP, Rule->htext, 0);
 }
 void tmplput_SieveRule_fileinto(StrBuf *Target, WCTemplputParams *TP) 
 {
-       SieveRule     *Rule = (SieveRule *)CTX;
+       SieveRule     *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
        StrBufAppendTemplate(Target, TP, Rule->fileinto, 0);
 }
 void tmplput_SieveRule_redirect(StrBuf *Target, WCTemplputParams *TP) 
 {
-       SieveRule     *Rule = (SieveRule *)CTX;
+       SieveRule     *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
        StrBufAppendTemplate(Target, TP, Rule->redirect, 0);
 }
 void tmplput_SieveRule_automsg(StrBuf *Target, WCTemplputParams *TP) 
 {
-       SieveRule     *Rule = (SieveRule *)CTX;
+       SieveRule     *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
        StrBufAppendTemplate(Target, TP, Rule->automsg, 0);
 }
 void tmplput_SieveRule_sizeval(StrBuf *Target, WCTemplputParams *TP) 
 {
-       SieveRule     *Rule = (SieveRule *)CTX;
+       SieveRule     *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
        StrBufAppendPrintf(Target, "%d", Rule->sizeval);
 }
 
 void tmplput_SieveRule_lookup_FileIntoRoom(StrBuf *Target, WCTemplputParams *TP) 
 {
        void *vRoom;
-       SieveRule     *Rule = (SieveRule *)CTX;
+       SieveRule     *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
         wcsession *WCC = WC;
        HashList *Rooms = GetRoomListHashLKRA(Target, TP);
 
@@ -890,6 +893,8 @@ void
 InitModule_SIEVE
 (void)
 {
+       RegisterCTX(CTX_SIEVELIST);
+       RegisterCTX(CTX_SIEVESCRIPT);
        REGISTERTokenParamDefine(from);         
        REGISTERTokenParamDefine(tocc);         
        REGISTERTokenParamDefine(subject);      
@@ -929,21 +934,21 @@ InitModule_SIEVE
 
        RegisterIterator("SIEVE:SCRIPTS", 0, NULL, GetSieveScriptListing, NULL, NULL, CTX_SIEVELIST, CTX_NONE, IT_NOFLAG);
 
-       RegisterConditional(HKEY("COND:SIEVE:SCRIPT:ACTIVE"), 0, ConditionalSieveScriptIsActive, CTX_SIEVELIST);
-       RegisterConditional(HKEY("COND:SIEVE:SCRIPT:ISRULES"), 0, ConditionalSieveScriptIsRulesScript, CTX_SIEVELIST);
+       RegisterConditional("COND:SIEVE:SCRIPT:ACTIVE", 0, ConditionalSieveScriptIsActive, CTX_SIEVELIST);
+       RegisterConditional("COND:SIEVE:SCRIPT:ISRULES", 0, ConditionalSieveScriptIsRulesScript, CTX_SIEVELIST);
        RegisterNamespace("SIEVE:SCRIPT:NAME", 0, 1, tmplput_SieveScriptName, NULL, CTX_SIEVELIST);
        RegisterNamespace("SIEVE:SCRIPT:CONTENT", 0, 1, tmplput_SieveScriptContent, NULL, CTX_SIEVELIST);
 
  
        RegisterIterator("SIEVE:RULES", 0, NULL, GetSieveRules, NULL, DeleteHash, CTX_SIEVESCRIPT, CTX_NONE, IT_NOFLAG);
 
-       RegisterConditional(HKEY("COND:SIEVE:ACTIVE"), 1, ConditionalSieveRule_Active, CTX_SIEVESCRIPT);
-       RegisterConditional(HKEY("COND:SIEVE:HFIELD"), 1, ConditionalSieveRule_hfield, CTX_SIEVESCRIPT);
-       RegisterConditional(HKEY("COND:SIEVE:COMPARE"), 1, ConditionalSieveRule_compare, CTX_SIEVESCRIPT);
-       RegisterConditional(HKEY("COND:SIEVE:ACTION"), 1, ConditionalSieveRule_action, CTX_SIEVESCRIPT);
-       RegisterConditional(HKEY("COND:SIEVE:SIZECOMP"), 1, ConditionalSieveRule_sizecomp, CTX_SIEVESCRIPT);
-       RegisterConditional(HKEY("COND:SIEVE:FINAL"), 1, ConditionalSieveRule_final, CTX_SIEVESCRIPT);
-       RegisterConditional(HKEY("COND:SIEVE:THISROOM"), 1, ConditionalSieveRule_ThisRoom, CTX_SIEVESCRIPT);
+       RegisterConditional("COND:SIEVE:ACTIVE", 1, ConditionalSieveRule_Active, CTX_SIEVESCRIPT);
+       RegisterConditional("COND:SIEVE:HFIELD", 1, ConditionalSieveRule_hfield, CTX_SIEVESCRIPT);
+       RegisterConditional("COND:SIEVE:COMPARE", 1, ConditionalSieveRule_compare, CTX_SIEVESCRIPT);
+       RegisterConditional("COND:SIEVE:ACTION", 1, ConditionalSieveRule_action, CTX_SIEVESCRIPT);
+       RegisterConditional("COND:SIEVE:SIZECOMP", 1, ConditionalSieveRule_sizecomp, CTX_SIEVESCRIPT);
+       RegisterConditional("COND:SIEVE:FINAL", 1, ConditionalSieveRule_final, CTX_SIEVESCRIPT);
+       RegisterConditional("COND:SIEVE:THISROOM", 1, ConditionalSieveRule_ThisRoom, CTX_SIEVESCRIPT);
 
        RegisterNamespace("SIEVE:SCRIPT:HTEXT", 0, 1, tmplput_SieveRule_htext, NULL, CTX_SIEVESCRIPT);
        RegisterNamespace("SIEVE:SCRIPT:SIZE", 0, 1, tmplput_SieveRule_sizeval, NULL, CTX_SIEVESCRIPT);