From 7f3bb215fe2d15cbca1772a3e147a30c7282d3c8 Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Sun, 24 Jul 2011 15:56:42 +0000 Subject: [PATCH] Implement selecting of sieve rule target room in dropdown. --- webcit/roomtokens.c | 13 +++++++++++++ webcit/sieve.c | 16 +++++++++++++++- webcit/static/t/sieve/display_one.html | 2 +- webcit/static/t/sieve/roomlist.html | 2 +- 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/webcit/roomtokens.c b/webcit/roomtokens.c index 21653af52..d41b36af1 100644 --- a/webcit/roomtokens.c +++ b/webcit/roomtokens.c @@ -566,6 +566,18 @@ void tmplput_ThisRoomX_FileString(StrBuf *Target, WCTemplputParams *TP) } +int ConditionalIsThisThatRoom(StrBuf *Target, WCTemplputParams *TP) +{ + folder *Folder = (folder *)CTX; + wcsession *WCC = WC; + + if (WCC == NULL) + return 0; + + return Folder == WCC->ThisRoom; +} + + void InitModule_ROOMTOKENS (void) @@ -635,4 +647,5 @@ InitModule_ROOMTOKENS RegisterNamespace("THISROOM:DIRECTORY", 0, 1, tmplput_ThisRoomDirectory, NULL, CTX_NONE); RegisterNamespace("ROOM:INFO:ACL", 0, 1, tmplput_ROOM_ACL, NULL, CTX_ROOMS); + RegisterConditional(HKEY("COND:THIS:THAT:ROOM"), 0, ConditionalIsThisThatRoom, CTX_ROOMS); } diff --git a/webcit/sieve.c b/webcit/sieve.c index 38d7b8c6b..2eab1c098 100644 --- a/webcit/sieve.c +++ b/webcit/sieve.c @@ -1514,9 +1514,21 @@ void tmplput_SieveRule_sizeval(StrBuf *Target, WCTemplputParams *TP) SieveRule *Rule = (SieveRule *)CTX; wc_printf("%d", Rule->sizeval); } + +void tmplput_SieveRule_lookup_FileIntoRoom(StrBuf *Target, WCTemplputParams *TP) +{ + void *vRoom; + SieveRule *Rule = (SieveRule *)CTX; + 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); @@ -1693,6 +1705,8 @@ InitModule_SIEVE 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); diff --git a/webcit/static/t/sieve/display_one.html b/webcit/static/t/sieve/display_one.html index 9e266b082..e7bf25373 100644 --- a/webcit/static/t/sieve/display_one.html +++ b/webcit/static/t/sieve/display_one.html @@ -1,4 +1,4 @@ - +
diff --git a/webcit/static/t/sieve/roomlist.html b/webcit/static/t/sieve/roomlist.html index 87763efd0..9479a5eef 100644 --- a/webcit/static/t/sieve/roomlist.html +++ b/webcit/static/t/sieve/roomlist.html @@ -1 +1 @@ -