From a8fdc7ca2c10766c60484325afef4dd040293b81 Mon Sep 17 00:00:00 2001 From: alec Date: Sun, 10 Oct 2010 16:01:31 +0000 Subject: - Added popups with form errors - Removed nonexisting 'wrongformat' label usage git-svn-id: https://svn.roundcube.net/trunk@4071 208e9e7b-5314-0410-a742-e7e81cd9613c --- plugins/managesieve/managesieve.php | 64 ++++++++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 19 deletions(-) (limited to 'plugins/managesieve/managesieve.php') diff --git a/plugins/managesieve/managesieve.php b/plugins/managesieve/managesieve.php index b959c3c93..d0ad268e7 100644 --- a/plugins/managesieve/managesieve.php +++ b/plugins/managesieve/managesieve.php @@ -7,7 +7,7 @@ * It's clickable interface which operates on text scripts and communicates * with server using managesieve protocol. Adds Filters tab in Settings. * - * @version 2.9 + * @version 2.10 * @author Aleksander 'A.L.E.C' Machniak * * Configuration (see config.inc.php.dist) @@ -23,6 +23,7 @@ class managesieve extends rcube_plugin private $sieve; private $errors; private $form; + private $tips = array(); private $script = array(); private $exts = array(); private $headers = array( @@ -421,8 +422,10 @@ class managesieve extends rcube_plugin $this->form['tests'][$i]['type'] = $sizeop; $this->form['tests'][$i]['arg'] = $sizetarget.$sizeitem; - if (!preg_match('/^[0-9]+(K|M|G)*$/i', $sizetarget)) - $this->errors['tests'][$i]['sizetarget'] = $this->gettext('wrongformat'); + if ($sizetarget == '') + $this->errors['tests'][$i]['sizetarget'] = $this->gettext('cannotbeempty'); + else if (!preg_match('/^[0-9]+(K|M|G)*$/i', $sizetarget)) + $this->errors['tests'][$i]['sizetarget'] = $this->gettext('forbiddenchars'); break; case '...': $cust_header = $headers = $this->strip_value($cust_headers[$idx]); @@ -823,6 +826,8 @@ class managesieve extends rcube_plugin $out .= "\n"; + $this->print_tips(); + if ($scr['disabled']) { $this->rc->output->set_env('rule_disabled', true); } @@ -877,7 +882,8 @@ class managesieve extends rcube_plugin $custom = is_array($rule['arg']) ? implode(', ', $rule['arg']) : $rule['arg']; $out .= '
- error_class($id, 'test', 'header') + error_class($id, 'test', 'header', 'custom_header_i') .' value="' .Q($custom). '" size="20" /> 
' . "\n"; // matching type select (operator) @@ -926,7 +932,7 @@ class managesieve extends rcube_plugin } $out .= 'error_class($id, 'test', 'target') + value="' .Q($target). '" size="20" ' . $this->error_class($id, 'test', 'target', 'rule_target') . ' style="display:' . ($rule['test']!='size' && $rule['test'] != 'exists' ? 'inline' : 'none') . '" />'."\n"; $select_size_op = new html_select(array('name' => "_rule_size_op[]", 'id' => 'rule_size_op'.$id)); @@ -935,8 +941,8 @@ class managesieve extends rcube_plugin $out .= '
'; $out .= $select_size_op->show($rule['test']=='size' ? $rule['type'] : ''); - $out .= 'error_class($id, 'test', 'sizetarget') .' /> + $out .= 'error_class($id, 'test', 'sizetarget', 'rule_size_i') .' /> '.rcube_label('B').' error_class($id, 'action', 'target') .' />'; + . $this->error_class($id, 'action', 'target', 'action_target') .' />'; $out .= '\n"; @@ -1015,16 +1021,16 @@ class managesieve extends rcube_plugin $out .= '
'; $out .= ''. Q($this->gettext('vacationreason')) .'
' .'\n"; $out .= '
' .Q($this->gettext('vacationaddresses')) . '
' - .'error_class($id, 'action', 'addresses') .' />'; + . $this->error_class($id, 'action', 'addresses', 'action_addr') .' />'; $out .= '
' . Q($this->gettext('vacationdays')) . '
' - .'error_class($id, 'action', 'days') .' />'; + . $this->error_class($id, 'action', 'days', 'action_days') .' />'; $out .= '
'; // mailbox select @@ -1099,13 +1105,15 @@ class managesieve extends rcube_plugin return trim($str); } - private function error_class($id, $type, $target, $name_only=false) + private function error_class($id, $type, $target, $elem_prefix='') { // TODO: tooltips - if ($type == 'test' && isset($this->errors['tests'][$id][$target])) - return ($name_only ? 'error' : ' class="error"'); - else if ($type == 'action' && isset($this->errors['actions'][$id][$target])) - return ($name_only ? 'error' : ' class="error"'); + if (($type == 'test' && ($str = $this->errors['tests'][$id][$target])) || + ($type == 'action' && ($str = $this->errors['actions'][$id][$target])) + ) { + $this->add_tip($elem_prefix.$id, $str, true); + return ' class="error"'; + } return ''; } @@ -1114,4 +1122,22 @@ class managesieve extends rcube_plugin { return rcube_charset_convert($text, 'UTF7-IMAP', $encoding); } + + private function add_tip($id, $str, $error=false) + { + if ($error) + $str = html::span('sieve error', $str); + + $this->tips[] = array($id, $str); + } + + private function print_tips() + { + if (empty($this->tips)) + return; + + $script = JS_OBJECT_NAME.'.managesieve_tip_register('.json_encode($this->tips).');'; + $this->rc->output->add_script($script, 'foot'); + } + } -- cgit v1.2.3