Currently the Managesieve plugin has no GUI for displaying variable
definitions (RFC 5229). Variables from an existing script are parsed
and saved correctly, but the GUI is blank.
The attached patch adds a simple GUI.

-- 
Paweł Słowik
IQ PL Sp. z o.o.
diff -bBNru a/plugins/managesieve/localization/en_GB.inc b/plugins/managesieve/localization/en_GB.inc
--- a/plugins/managesieve/localization/en_GB.inc	2012-06-01 09:58:42.000000000 +0200
+++ b/plugins/managesieve/localization/en_GB.inc	2012-06-20 16:20:56.000000000 +0200
@@ -93,6 +93,10 @@
 $labels['flaganswered'] = 'Answered';
 $labels['flagflagged'] = 'Flagged';
 $labels['flagdraft'] = 'Draft';
+$labels['setvariable'] = 'Set variable';
+$labels['setvarname'] = 'Variable name:';
+$labels['setvarvalue'] = 'Variable value:';
+$labels['setvarmodifiers'] = 'Modifiers:';
 $labels['filtercreate'] = 'Create filter';
 $labels['usedata'] = 'Use following data in the filter:';
 $labels['nextstep'] = 'Next Step';
diff -bBNru a/plugins/managesieve/localization/en_US.inc b/plugins/managesieve/localization/en_US.inc
--- a/plugins/managesieve/localization/en_US.inc	2012-06-01 09:58:42.000000000 +0200
+++ b/plugins/managesieve/localization/en_US.inc	2012-06-20 16:20:56.000000000 +0200
@@ -78,6 +78,10 @@
 $labels['flaganswered'] = 'Answered';
 $labels['flagflagged'] = 'Flagged';
 $labels['flagdraft'] = 'Draft';
+$labels['setvariable'] = 'Set variable';
+$labels['setvarname'] = 'Variable name:';
+$labels['setvarvalue'] = 'Variable value:';
+$labels['setvarmodifiers'] = 'Modifiers:';
 $labels['filtercreate'] = 'Create filter';
 $labels['usedata'] = 'Use following data in the filter:';
 $labels['nextstep'] = 'Next Step';
diff -bBNru a/plugins/managesieve/localization/pl_PL.inc b/plugins/managesieve/localization/pl_PL.inc
--- a/plugins/managesieve/localization/pl_PL.inc	2012-06-01 09:58:42.000000000 +0200
+++ b/plugins/managesieve/localization/pl_PL.inc	2012-06-20 16:20:56.000000000 +0200
@@ -93,6 +93,10 @@
 $labels['flaganswered'] = 'Z odpowiedzią';
 $labels['flagflagged'] = 'Oflagowana';
 $labels['flagdraft'] = 'Szkic';
+$labels['setvariable'] = 'Ustaw zmienną';
+$labels['setvarname'] = 'Nazwa zmiennej:';
+$labels['setvarvalue'] = 'Wartość zmiennej:';
+$labels['setvarmodifiers'] = 'Modyfikatory:';
 $labels['filtercreate'] = 'UtwĂłrz filtr';
 $labels['usedata'] = 'Użyj następujących danych do utworzenia filtra:';
 $labels['nextstep'] = 'Następny krok';
diff -bBNru a/plugins/managesieve/managesieve.js b/plugins/managesieve/managesieve.js
--- a/plugins/managesieve/managesieve.js	2012-06-01 09:58:42.000000000 +0200
+++ b/plugins/managesieve/managesieve.js	2012-06-18 16:28:40.000000000 +0200
@@ -638,7 +638,8 @@
       target: document.getElementById('action_target' + id),
       target_area: document.getElementById('action_target_area' + id),
       flags: document.getElementById('action_flags' + id),
-      vacation: document.getElementById('action_vacation' + id)
+      vacation: document.getElementById('action_vacation' + id),
+      set: document.getElementById('action_set' + id)
     };
 
   if (obj.value == 'fileinto' || obj.value == 'fileinto_copy') {
@@ -656,6 +657,9 @@
   else if (obj.value == 'vacation') {
     enabled.vacation = 1;
   }
+  else if (obj.value == 'set') {
+    enabled.set = 1;
+  }
 
   for (var x in elems) {
     elems[x].style.display = !enabled[x] ? 'none' : 'inline';
diff -bBNru a/plugins/managesieve/managesieve.php b/plugins/managesieve/managesieve.php
--- a/plugins/managesieve/managesieve.php	2012-06-01 09:58:42.000000000 +0200
+++ b/plugins/managesieve/managesieve.php	2012-07-02 17:28:22.000000000 +0200
@@ -617,6 +617,9 @@
             $days           = get_input_value('_action_days', RCUBE_INPUT_POST);
             $subject        = get_input_value('_action_subject', RCUBE_INPUT_POST, true);
             $flags          = get_input_value('_action_flags', RCUBE_INPUT_POST);
+            $varnames       = get_input_value('_action_varname', RCUBE_INPUT_POST);
+            $varvalues      = get_input_value('_action_varvalue', RCUBE_INPUT_POST);
+            $varmods        = get_input_value('_action_varmods', RCUBE_INPUT_POST);
 
             // we need a "hack" for radiobuttons
             foreach ($sizeitems as $item)
@@ -848,6 +851,20 @@
                     if ($this->form['actions'][$i]['days'] && !preg_match('/^[0-9]+$/', $this->form['actions'][$i]['days']))
                         $this->errors['actions'][$i]['days'] = $this->gettext('forbiddenchars');
                     break;
+
+                case 'set':
+                    if (empty($varnames[$idx])) {
+                        $this->errors['actions'][$i]['name'] = $this->gettext('cannotbeempty');
+                    }
+                    if (empty($varvalues[$idx])) {
+                        $this->errors['actions'][$i]['value'] = $this->gettext('cannotbeempty');
+                    }
+                    foreach ($varmods[$idx] as $v_m) {
+                        $this->form['actions'][$i][$v_m] = true;
+                    }
+                    $this->form['actions'][$i]['name'] = $varnames[$idx];
+                    $this->form['actions'][$i]['value'] = $varvalues[$idx];
+                    break;
                 }
 
                 $this->form['actions'][$i]['type'] = $type;
@@ -1446,6 +1463,9 @@
             $select_action->add(Q($this->gettext('addflags')), 'addflag');
             $select_action->add(Q($this->gettext('removeflags')), 'removeflag');
         }
+        if (in_array('variables', $this->exts)) {
+            $select_action->add(Q($this->gettext('setvariable')), 'set');
+        }
         $select_action->add(Q($this->gettext('rulestop')), 'stop');
 
         $select_type = $action['type'];
@@ -1509,6 +1529,32 @@
         }
         $out .= '</div>';
 
+        // set variable
+        $set_modifiers = array(
+            'lower',
+            'upper',
+            'lowerfirst',
+            'upperfirst',
+            'quotewildcard',
+            'length'
+        );
+        $out .= '<div id="action_set' .$id.'" style="display:' .($action['type']=='set' ? 'inline' : 'none') .'">';
+        $out .= '<span class="label">' .Q($this->gettext('setvarname')) . '</span><br />'
+            .'<input type="text" name="_action_varname['.$id.']" id="action_varname'.$id.'" '
+            .'value="' . Q($action['name']) . '" size="35" '
+            . $this->error_class($id, 'action', 'name', 'action_varname') .' />';
+        $out .= '<br /><span class="label">' .Q($this->gettext('setvarvalue')) . '</span><br />'
+            .'<input type="text" name="_action_varvalue['.$id.']" id="action_varvalue'.$id.'" '
+            .'value="' . Q($action['value']) . '" size="35" '
+            . $this->error_class($id, 'action', 'value', 'action_varvalue') .' />';
+        $out .= '<br /><span class="label">' .Q($this->gettext('setvarmodifiers')) . '</span><br />';
+        foreach ($set_modifiers as $j => $s_m) {
+            $s_m_id = 'action_varmods' . $id . $s_m;
+            $out .= sprintf('<input type="checkbox" name="_action_varmods[%s][]" value="%s" id="%s"%s />%s<br>',
+                $id, $s_m, $s_m_id, ((array_key_exists($s_m, $action) && $action[$s_m]) ? ' checked="checked"' : ''), $s_m);
+        }
+        $out .= '</div>';
+
         // mailbox select
         if ($action['type'] == 'fileinto')
             $mailbox = $this->mod_mailbox($action['target'], 'out');
_______________________________________________
Roundcube Development discussion mailing list
[email protected]
http://lists.roundcube.net/mailman/listinfo/dev

Reply via email to