X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fsieve.c;h=8cf76e459a2b6fc85f7f2cd5a080aa9214e31c2e;hb=68d6ac2aeb2c46dfca9ce85351780c6136e0cc84;hp=3a8067845f73db4ad3be864dc58f91a2f0e8a122;hpb=3d9d2f9113836deec84b59c6824ac4a1ac5a1d6b;p=citadel.git diff --git a/webcit/sieve.c b/webcit/sieve.c index 3a8067845..8cf76e459 100644 --- a/webcit/sieve.c +++ b/webcit/sieve.c @@ -21,7 +21,7 @@ #define MAX_SCRIPTS 100 #define MAX_RULES 50 #define RULES_SCRIPT "__WebCit_Generated_Script__" -#define FOO 1 +/*#define FOO 1*/ /* * Helper function for output_sieve_rule() to output strings with quotes escaped */ @@ -378,8 +378,7 @@ void save_sieve(void) { char buf[256]; if (!havebstr("save_button")) { - strcpy(WC->ImportantMessage, - _("Cancelled. Changes were not saved.")); + AppendImportantMessage(_("Cancelled. Changes were not saved."), -1); display_main_menu(); return; } @@ -435,7 +434,7 @@ void save_sieve(void) { } } - strcpy(WC->ImportantMessage, _("Your changes have been saved.")); + AppendImportantMessage(_("Your changes have been saved."), -1); display_main_menu(); return; } @@ -466,12 +465,20 @@ void create_script(void) { serv_puts("000"); #if FOO display_add_remove_scripts(_("A new script has been created. Return to the script editing screen to edit and activate it.")); +#else + output_headers(1, 1, 2, 0, 0, 0); + do_template("sieve_add"); + wDumpContent(1); #endif return; } #if FOO display_add_remove_scripts(&buf[4]); +#else + output_headers(1, 1, 2, 0, 0, 0); + do_template("sieve_add"); + wDumpContent(1); #endif } @@ -488,6 +495,10 @@ void delete_script(void) { serv_getln(buf, sizeof buf); #if FOO display_add_remove_scripts(&buf[4]); +#else + output_headers(1, 1, 2, 0, 0, 0); + do_template("sieve_add"); + wDumpContent(1); #endif } @@ -540,33 +551,33 @@ void display_sieve(void) output_headers(1, 1, 2, 0, 0, 0); - wc_printf(" \n" - ); + wc_printf("\n" +); wc_printf("
\n"); wc_printf(""); @@ -577,8 +588,8 @@ void display_sieve(void) wc_printf("
\n"); - wc_printf("" - "
\n"); + wc_printf("\n" + "\n", + wc_printf("", i, - ((i%2) ? "DDDDDD" : "FFFFFF") + ((i%2) ? "odd" : "even") ); - wc_printf(""); + wc_printf("\n\n\n"); - wc_printf(""); + wc_printf("\n"); wc_printf(""); wc_printf(""); + wc_printf("\n"); char *final_values[2][2] = { { "continue", _("continue processing") }, { "stop", _("stop") } }; - wc_printf("", _("and then") ); + wc_printf("\n", _("and then") ); - wc_printf(""); + wc_printf("\n\n"); + wc_printf("\n"); wc_printf("\n"); } - wc_printf("
\n"); wc_printf("
\n"); @@ -600,7 +611,7 @@ void display_sieve(void) wc_printf(_("Filter it through a manually edited script (advanced users only)")); wc_printf("\n"); - wc_printf(""); + wc_printf("\n\n"); @@ -634,7 +645,7 @@ void display_sieve(void) ); } } - wc_printf("\n"); + wc_printf("\n\n"); } wc_printf("   "); @@ -764,7 +775,7 @@ void display_add_remove_scripts(char *message) } } } - wc_printf("
\n"); + wc_printf("\n\n
\n"); wc_printf("", _("Delete script"), _("Delete this script?")); @@ -836,118 +847,118 @@ void display_rules_editor_inner_div(void) { * This script should get called by every onChange event... * */ - wc_printf(" \n" - ); + "function DeleteRule(rd) {\n" + " for (j=rd; j<=highest_active_rule; ++j) {\n" + " SwapRules(j, (j+1));\n" + " }\n" + " $('active'+highest_active_rule).checked = false;\n" + "}\n" + "\n" + ); wc_printf("
"); @@ -971,40 +982,40 @@ void display_rules_editor_inner_div(void) { /* now generate the table row */ - wc_printf("
"); + wc_printf("\n"); - wc_printf("
"); - wc_printf("", + wc_printf("
\n"); + wc_printf("\n", i, i, (active ? "checked" : "") ); - wc_printf("
"); + wc_printf("
\n"); if (i>0) wc_printf("" "", + "title=\"%s\"/>\n", i-1, i, _("Move rule up") ); wc_printf("" "", + "title=\"%s\"/>\n", i, i+1, i, _("Move rule down") ); wc_printf("" "", + "title=\"%s\"/>\n", i, i, _("Delete rule") ); - wc_printf("
"); - wc_printf("%d", i+1); - wc_printf("\n"); + wc_printf("%d\n", i+1); + wc_printf("%s ", _("If") ); @@ -1029,14 +1040,14 @@ void display_rules_editor_inner_div(void) { wc_printf(""); + wc_printf("\n\n"); wc_printf(""); @@ -1050,42 +1061,42 @@ void display_rules_editor_inner_div(void) { { "notmatches", _("does not match") } }; - wc_printf("
", i); - wc_printf("\n", i, i); for (j=0; j<6; ++j) { - wc_printf("", + wc_printf("\n", ( (!strcasecmp(compare, compare_values[j][0])) ? "selected" : ""), compare_values[j][0], compare_values[j][1] ); } - wc_printf(""); + wc_printf("\n\n"); wc_printf("
"); + wc_printf("\">\n\n"); wc_printf("
", i); wc_printf("%s", _("(All messages)")); - wc_printf("
"); + wc_printf("\n"); char *sizecomp_values[2][2] = { { "larger", _("is larger than") }, { "smaller", _("is smaller than") } }; - wc_printf("
", i); - wc_printf("\n", i, i); for (j=0; j<2; ++j) { - wc_printf("", + wc_printf("\n", ( (!strcasecmp(sizecomp, sizecomp_values[j][0])) ? "selected" : ""), sizecomp_values[j][0], sizecomp_values[j][1] ); } - wc_printf(""); + wc_printf("\n\n"); wc_printf("", i, i, sizeval); @@ -1103,20 +1114,20 @@ void display_rules_editor_inner_div(void) { { "vacation", _("Vacation") } }; - wc_printf("
"); - wc_printf("\n"); + wc_printf(""); + wc_printf("\n\n"); - wc_printf("
", i); - wc_printf("\n", i, i); for (j=0; j\n"); } - wc_printf("\n"); + wc_printf("\n\n"); wc_printf("
"); - wc_printf("
", i); + wc_printf("
\n", i); wc_printf("
"); + wc_printf("\">\n
\n"); - wc_printf("
", i); + wc_printf("
\n", i); wc_printf(_("Message:")); - wc_printf("
"); + wc_printf("
\n"); wc_printf(""); - wc_printf("
"); + wc_printf("
\n"); - wc_printf("
%s%s"); - wc_printf("\n"); + wc_printf(""); - wc_printf("
"); + wc_printf("
\n"); wc_printf("\n", _("Add rule") ); - wc_printf(" \n"); + wc_printf("\n"); free(rooms); } @@ -1255,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)) { @@ -1456,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; @@ -1501,17 +1488,10 @@ 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) -{ - SieveRule *Rule = (SieveRule *)CTX; - StrBufAppendTemplate(Target, TP, Rule->final, 0); -} -*/ void tmplput_SieveRule_sizeval(StrBuf *Target, WCTemplputParams *TP) { SieveRule *Rule = (SieveRule *)CTX; - wc_printf("%d", Rule->sizeval); + StrBufAppendPrintf(Target, "%d", Rule->sizeval); } void tmplput_SieveRule_lookup_FileIntoRoom(StrBuf *Target, WCTemplputParams *TP) @@ -1548,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")) @@ -1602,32 +1581,25 @@ 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; } - -HashList *GetEmptySieveRule(StrBuf *Target, WCTemplputParams *TP) -{ - int n = 0; - HashList *OneSieveRule; - SieveRule *Rule; - - OneSieveRule = NewHash(1, Flathash); - - /* We just care for our encoded header and skip everything else */ - Rule = (SieveRule*) malloc(sizeof(SieveRule)); - memset(Rule, 0, sizeof(SieveRule)); - Put(OneSieveRule, IKEY(n), Rule, FreeSieveRule); - - return OneSieveRule; -} - void SessionDetachModule_SIEVE (wcsession *sess) @@ -1685,7 +1657,6 @@ InitModule_SIEVE RegisterIterator("SIEVE:RULES", 0, NULL, GetSieveRules, NULL, DeleteHash, CTX_SIEVESCRIPT, CTX_NONE, IT_NOFLAG); - RegisterIterator("SIEVE:RULE:EMPTY", 0, NULL, GetEmptySieveRule, 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); @@ -1695,15 +1666,12 @@ 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:SIZE", 0, 1, tmplput_SieveRule_sizeval, NULL, CTX_SIEVESCRIPT); - ///RegisterNamespace("SIEVE:SCRIPT:ACTION", 0, 1, tmplput_SieveRule_action, 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);