X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fsieve.c;h=cce70574ae927c451f165af0488e47215e27ac8c;hb=b26e3e79fcb15dc1b46f4c7710a6bafdc6472950;hp=38d7b8c6bf5e06b575c0c2387bcd03bd4bac79ee;hpb=8ffdf2da8a54c95737cdf4f9fbb4908d4b31ff14;p=citadel.git
diff --git a/webcit/sieve.c b/webcit/sieve.c
index 38d7b8c6b..cce70574a 100644
--- a/webcit/sieve.c
+++ b/webcit/sieve.c
@@ -1,28 +1,27 @@
/*
- * Copyright (c) 1996-2011 by the citadel.org team
+ * Copyright (c) 1996-2012 by the citadel.org team
*
* This program is open source software. You can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 3 of the
- * License, or (at your option) any later version.
+ * modify it under the terms of the GNU General Public License version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * FIXME: add logic to exclude the webcit-generated script from the manual script selection
*/
#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__"
-#define FOO 1
+
/*
* Helper function for output_sieve_rule() to output strings with quotes escaped
*/
@@ -41,13 +40,6 @@ void osr_sanitize(char *str) {
}
}
-void display_add_remove_scripts(char *message);
-void display_rules_editor_inner_div(void);
-
-
-
-
-
/*
* Output parseable Sieve script code based on rules input
@@ -202,7 +194,6 @@ void output_sieve_rule(char *hfield, char *compare, char *htext, char *sizecomp,
serv_printf("{");
}
-
/* Do action */
if (!strcasecmp(action, "keep")) {
@@ -229,26 +220,22 @@ void output_sieve_rule(char *hfield, char *compare, char *htext, char *sizecomp,
serv_printf("vacation :addresses [%s]\n\"%s\";", my_addresses, automsg);
}
-
/* Do 'final' action */
if (!strcasecmp(final, "stop")) {
serv_printf("stop;");
}
-
/* Close the braces if we're in a conditional loop */
if (strcasecmp(hfield, "all")) {
serv_printf("}");
}
-
/* End of rule. */
}
-
/*
* Translate the fields from the rule editor into something we can save...
*/
@@ -350,7 +337,10 @@ void parse_fields_from_rule_editor(void) {
redirect, automsg, final
);
- CtdlEncodeBase64(encoded_rule, rule, strlen(rule)+1, 0);
+ size_t len = CtdlEncodeBase64(encoded_rule, rule, strlen(rule)+1, 0);
+ if (encoded_rule[len - 1] == '\n') {
+ encoded_rule[len - 1] = '\0';
+ }
serv_printf("# WEBCIT_RULE|%d|%s|", i, encoded_rule);
output_sieve_rule(hfield, compare, htext, sizecomp, sizeval,
action, fileinto, redirect, automsg, final, my_addresses);
@@ -365,7 +355,6 @@ void parse_fields_from_rule_editor(void) {
}
-
/*
* save sieve config
*/
@@ -373,14 +362,12 @@ void save_sieve(void) {
int bigaction;
char script_names[MAX_SCRIPTS][64];
int num_scripts = 0;
- int active_script = (-1);
int i;
char this_name[64];
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;
}
@@ -392,9 +379,6 @@ void save_sieve(void) {
if (buf[0] == '1') while (serv_getln(buf, sizeof(buf)), strcmp(buf, "000")) {
if (num_scripts < MAX_SCRIPTS) {
extract_token(script_names[num_scripts], buf, 0, '|', 64);
- if (extract_int(buf, 1) > 0) {
- active_script = num_scripts;
- }
++num_scripts;
}
}
@@ -436,11 +420,20 @@ void save_sieve(void) {
}
}
- strcpy(WC->ImportantMessage, _("Your changes have been saved."));
+ AppendImportantMessage(_("Your changes have been saved."), -1);
display_main_menu();
return;
}
+
+void display_sieve_add_or_delete(void) {
+ output_headers(1, 1, 2, 0, 0, 0);
+ do_template("sieve_add");
+ wDumpContent(1);
+}
+
+
+
/*
* create a new script
* take the web environment script name and create it on the citadel server
@@ -450,35 +443,25 @@ void create_script(void) {
serv_printf("MSIV getscript|%s", bstr("script_name"));
serv_getln(buf, sizeof buf);
- if (buf[0] == '1') {
+ if (buf[0] == '1') { // does script exist already?
while (serv_getln(buf, sizeof(buf)), strcmp(buf, "000")) {
- /* flush */
+ // yes -- flush the output
}
-#if FOO
- display_add_remove_scripts(_("A script by that name already exists."));
-#endif
- return;
}
-
- serv_printf("MSIV putscript|%s", bstr("script_name"));
- serv_getln(buf, sizeof buf);
- if (buf[0] == '4') {
- serv_puts("keep;");
- 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."));
-#endif
- return;
+ else {
+ // no -- safe to create a new one by this name
+ serv_printf("MSIV putscript|%s", bstr("script_name"));
+ serv_getln(buf, sizeof buf);
+ if (buf[0] == '4') {
+ serv_puts("keep;");
+ serv_puts("000");
+ }
}
-#if FOO
- display_add_remove_scripts(&buf[4]);
-#endif
+ display_sieve_add_or_delete();
}
-
-
/*
* delete a script
*/
@@ -487,11 +470,8 @@ void delete_script(void) {
serv_printf("MSIV deletescript|%s", bstr("script_name"));
serv_getln(buf, sizeof buf);
-#if FOO
- display_add_remove_scripts(&buf[4]);
-#endif
+ display_sieve_add_or_delete();
}
-
/*
@@ -499,692 +479,11 @@ void delete_script(void) {
*/
void display_no_sieve(void) {
- output_headers(1, 1, 2, 0, 0, 0);
+ output_headers(1, 1, 1, 0, 0, 0);
do_template("sieve_none");
wDumpContent(1);
}
-#if FOO
-/*
- * view/edit sieve config
- */
-void display_sieve(void)
-{
- char script_names[MAX_SCRIPTS][64];
- int num_scripts = 0;
- int active_script = (-1);
- char buf[SIZ]; /* Don't make this buffer smaller or it will restrict line length */
- int i;
- int rules_script_is_active = 0;
-
- if (!WC->serv_info->serv_supports_sieve) {
- display_no_sieve();
- return;
- }
-
- memset(script_names, 0, sizeof script_names);
-
- serv_puts("MSIV listscripts");
- serv_getln(buf, sizeof(buf));
- if (buf[0] == '1') while (serv_getln(buf, sizeof(buf)), strcmp(buf, "000")) {
- if (num_scripts < MAX_SCRIPTS) {
- extract_token(script_names[num_scripts], buf, 0, '|', 64);
- if (extract_int(buf, 1) > 0) {
- active_script = num_scripts;
- if (!strcasecmp(script_names[num_scripts], RULES_SCRIPT)) {
- rules_script_is_active = 1;
- }
- }
- ++num_scripts;
- }
- }
-
- output_headers(1, 1, 2, 0, 0, 0);
-
- wc_printf(" \n"
- );
-
- wc_printf("
\n");
- wc_printf("");
- wc_printf("
");
- wc_printf(_("View/edit server-side mail filters"));
- wc_printf("
\n");
- wc_printf("
\n");
-
- wc_printf("
\n");
-
- wc_printf("
"
- "
\n");
-
-
- wc_printf("\n");
-
- wc_printf("
\n");
-
- wc_printf(" \n"
- );
-
- wDumpContent(1);
-
-}
-
-
-
-
-/*
- * show a list of available scripts to add/remove them
- */
-void display_add_remove_scripts(char *message)
-{
- char buf[256];
- char script_name[256];
-
- output_headers(1, 1, 2, 0, 0, 0);
- wc_printf("
\n");
-
- do_template("box_begin_1");
- StrBufAppendBufPlain(WC->WBuf, _("Add a new script"), -1, 0);
- do_template("box_begin_2");
-
- wc_printf(_("To create a new script, enter the desired "
- "script name in the box below and click 'Create'."));
- wc_printf("