\n");
- wc_printf("
"
- "\n");
+ wc_printf("\n"
+ "\n\n");
wc_printf(" | ");
+ wc_printf(" |
\n");
wc_printf("
\n",
_("Add rule")
);
- wc_printf(" \n");
+ wc_printf("\n");
free(rooms);
}
@@ -1470,6 +1266,7 @@ HashList *GetSieveScriptListing(StrBuf *Target, WCTemplputParams *TP)
Ruleset->Name = NewStrBufPlain(NULL, StrLength(Line));
StrBufExtract_NextToken(Ruleset->Name, Line, &pch, '|');
Ruleset->IsActive = StrBufExtractNext_int(Line, &pch, '|');
+ Ruleset->Content = NULL;
if (!strcasecmp(ChrPtr(Ruleset->Name), RULES_SCRIPT))
{
@@ -1491,7 +1288,7 @@ HashList *GetSieveScriptListing(StrBuf *Target, WCTemplputParams *TP)
if (num_scripts > have_rules_script)
{
- long rc;
+ long rc = 0;
long len;
const char *Key;
void *vRuleset;
@@ -1671,36 +1468,11 @@ int ConditionalSieveRule_Active(StrBuf *Target, WCTemplputParams *TP)
SieveRule *Rule = (SieveRule *)CTX;
return Rule->active;
}
-
-
-/*
-void tmplput_SieveRule_hfield(StrBuf *Target, WCTemplputParams *TP)
-{
- SieveRule *Rule = (SieveRule *)CTX;
- StrBufAppendTemplate(Target, TP, Rule->hfield, 0);
-}
-void tmplput_SieveRule_compare(StrBuf *Target, WCTemplputParams *TP)
-{
- SieveRule *Rule = (SieveRule *)CTX;
- StrBufAppendTemplate(Target, TP, Rule->compare, 0);
-}
-*/
void tmplput_SieveRule_htext(StrBuf *Target, WCTemplputParams *TP)
{
SieveRule *Rule = (SieveRule *)CTX;
StrBufAppendTemplate(Target, TP, Rule->htext, 0);
}
-/*
-void tmplput_SieveRule_sizecomp(StrBuf *Target, WCTemplputParams *TP)
-{
- SieveRule *Rule = (SieveRule *)CTX;
- StrBufAppendTemplate(Target, TP, Rule->sizecomp, 0);
-}
-void tmplput_SieveRule_action(StrBuf *Target, WCTemplputParams *TP)
-{
- SieveRule *Rule = (SieveRule *)CTX;
- StrBufAppendTemplate(Target, TP, Rule->action, 0);
- }*/
void tmplput_SieveRule_fileinto(StrBuf *Target, WCTemplputParams *TP)
{
SieveRule *Rule = (SieveRule *)CTX;
@@ -1716,16 +1488,26 @@ void tmplput_SieveRule_automsg(StrBuf *Target, WCTemplputParams *TP)
SieveRule *Rule = (SieveRule *)CTX;
StrBufAppendTemplate(Target, TP, Rule->automsg, 0);
}
-/*
-void tmplput_SieveRule_final(StrBuf *Target, WCTemplputParams *TP)
+void tmplput_SieveRule_sizeval(StrBuf *Target, WCTemplputParams *TP)
+{
+ SieveRule *Rule = (SieveRule *)CTX;
+ StrBufAppendPrintf(Target, "%d", Rule->sizeval);
+}
+
+void tmplput_SieveRule_lookup_FileIntoRoom(StrBuf *Target, WCTemplputParams *TP)
{
+ void *vRoom;
SieveRule *Rule = (SieveRule *)CTX;
- StrBufAppendTemplate(Target, TP, Rule->final, 0);
+ wcsession *WCC = WC;
+ HashList *Rooms = GetRoomListHashLKRA(Target, TP);
+
+ GetHash(Rooms, SKEY(Rule->fileinto), &vRoom);
+ WCC->ThisRoom = (folder*) vRoom;
}
-*/
+
void FreeSieveRule(void *vRule)
{
- SieveRule *Rule = (SieveRule*) Rule;
+ SieveRule *Rule = (SieveRule*) vRule;
FreeStrBuf(&Rule->htext);
FreeStrBuf(&Rule->fileinto);
@@ -1746,14 +1528,13 @@ HashList *GetSieveRules(StrBuf *Target, WCTemplputParams *TP)
int Done = 0;
SieveRule *Rule;
+ SieveRules = NewHash(1, Flathash);
serv_printf("MSIV getscript|"RULES_SCRIPT);
Line = NewStrBuf();
EncodedRule = NewStrBuf();
StrBuf_ServGetln(Line);
if (GetServerStatus(Line, NULL) == 1)
{
- SieveRules = NewHash(1, Flathash);
-
while(!Done && (StrBuf_ServGetln(Line) >= 0) )
if ( (StrLength(Line)==3) &&
!strcmp(ChrPtr(Line), "000"))
@@ -1800,10 +1581,20 @@ HashList *GetSieveRules(StrBuf *Target, WCTemplputParams *TP)
StrBufExtract_NextToken(Line, EncodedRule, &pch, '|');
Rule->final = (eSieveFinal) GetTokenDefine(SKEY(Line), econtinue);
Put(SieveRules, IKEY(n), Rule, FreeSieveRule);
+ n++;
}
}
}
+ while (n < MAX_RULES) {
+ Rule = (SieveRule*) malloc(sizeof(SieveRule));
+ memset(Rule, 0, sizeof(SieveRule));
+ Put(SieveRules, IKEY(n), Rule, FreeSieveRule);
+
+ n++;
+ }
+
+
FreeStrBuf(&EncodedRule);
FreeStrBuf(&Line);
return SieveRules;
@@ -1857,16 +1648,16 @@ InitModule_SIEVE
RegisterTokenParamDefine(HKEY("continue"), econtinue);
RegisterTokenParamDefine(HKEY("stop"), estop);
- RegisterIterator("SIEVE:SCRIPTS", 0, NULL, GetSieveRules, NULL, NULL, CTX_SIEVELIST, CTX_NONE, IT_NOFLAG);
-
- RegisterIterator("SIEVE:RULES", 0, NULL, GetSieveRules, NULL, DeleteHash, CTX_SIEVESCRIPT, CTX_NONE, IT_NOFLAG);
+ 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);
- RegisterNamespace("SIEVE:SCRIPT:NAME", 0, 1, tmplput_SieveScriptName, NULL, CTX_ROOMS);
+ 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);
@@ -1875,15 +1666,14 @@ InitModule_SIEVE
RegisterConditional(HKEY("COND:SIEVE:FINAL"), 1, ConditionalSieveRule_final, CTX_SIEVESCRIPT);
RegisterConditional(HKEY("COND:SIEVE:THISROOM"), 1, ConditionalSieveRule_ThisRoom, CTX_SIEVESCRIPT);
- //RegisterNamespace("SIEVE:SCRIPT:HFIELD", 0, 1, tmplput_SieveRule_hfield, NULL, CTX_SIEVESCRIPT);
- //RegisterNamespace("SIEVE:SCRIPT:COMPARE", 0, 1, tmplput_SieveRule_compare, NULL, CTX_SIEVESCRIPT);
RegisterNamespace("SIEVE:SCRIPT:HTEXT", 0, 1, tmplput_SieveRule_htext, NULL, CTX_SIEVESCRIPT);
- //RegisterNamespace("SIEVE:SCRIPT:SIZECOMP", 0, 1, tmplput_SieveRule_sizecomp, NULL, CTX_SIEVESCRIPT);
- ///RegisterNamespace("SIEVE:SCRIPT:ACTION", 0, 1, tmplput_SieveRule_action, NULL, CTX_SIEVESCRIPT);
+ RegisterNamespace("SIEVE:SCRIPT:SIZE", 0, 1, tmplput_SieveRule_sizeval, NULL, CTX_SIEVESCRIPT);
RegisterNamespace("SIEVE:SCRIPT:FILEINTO", 0, 1, tmplput_SieveRule_fileinto, NULL, CTX_SIEVESCRIPT);
RegisterNamespace("SIEVE:SCRIPT:REDIRECT", 0, 1, tmplput_SieveRule_redirect, NULL, CTX_SIEVESCRIPT);
RegisterNamespace("SIEVE:SCRIPT:AUTOMSG", 0, 1, tmplput_SieveRule_automsg, NULL, CTX_SIEVESCRIPT);
- ///RegisterNamespace("SIEVE:SCRIPT:FINAL", 0, 1, tmplput_SieveRule_final, NULL, CTX_SIEVESCRIPT);
+
+ /* fetch our room into WCC->ThisRoom, to evaluate while iterating over rooms with COND:THIS:THAT:ROOM */
+ RegisterNamespace("SIEVE:SCRIPT:LOOKUP_FILEINTO", 0, 1, tmplput_SieveRule_lookup_FileIntoRoom, NULL, CTX_SIEVESCRIPT);
#if FOO
WebcitAddUrlHandler(HKEY("display_sieve"), "", 0, display_sieve, 0);