Changeset 4522 in subversion


Ignore:
Timestamp:
Feb 10, 2011 3:13:13 AM (2 years ago)
Author:
alec
Message:
  • Added setflag/addflag/removeflag support (#1487449)
Location:
trunk/plugins/managesieve
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/plugins/managesieve/Changelog

    r4521 r4522  
    11- Fix STARTTLS for timsieved < 2.3.10 
    22- Added :regex and :matches support (#1487746) 
     3- Added setflag/addflag/removeflag support (#1487449) 
    34 
    45* version 3.0 [2011-02-01] 
  • trunk/plugins/managesieve/lib/rcube_sieve.php

    r4521 r4522  
    407407        'relational',               // RFC3431 
    408408        'regex',                    // draft-ietf-sieve-regex-01 
    409     // TODO: (most wanted first) body, imapflags, notify 
     409        'imapflags', 
     410        'imap4flags',               // RFC5232 
     411        // TODO: (most wanted first) body, notify 
    410412    ); 
    411413 
     
    570572            foreach ($rule['actions'] as $action) { 
    571573                switch ($action['type']) { 
     574 
    572575                case 'fileinto': 
    573576                    array_push($exts, 'fileinto'); 
     
    579582                    $script .= self::escape_string($action['target']) . ";\n"; 
    580583                    break; 
     584 
    581585                case 'redirect': 
    582586                    $script .= "\tredirect "; 
     
    587591                    $script .= self::escape_string($action['target']) . ";\n"; 
    588592                    break; 
     593 
    589594                case 'reject': 
    590595                case 'ereject': 
     
    593598                        . self::escape_string($action['target']) . ";\n"; 
    594599                    break; 
     600 
     601                case 'addflag': 
     602                case 'setflag': 
     603                case 'removeflag': 
     604                    $imapflags = strtolower($action['mode']) == 'imap4flags' ? 'imap4flags' : 'imapflags'; 
     605                    array_push($exts, $imapflags); 
     606                    $script .= "\t".$action['type']." " 
     607                        . self::escape_string($action['target']) . ";\n"; 
     608                    break; 
     609 
    595610                case 'keep': 
    596611                case 'discard': 
     
    598613                    $script .= "\t" . $action['type'] .";\n"; 
    599614                    break; 
     615 
    600616                case 'vacation': 
    601617                    array_push($exts, 'vacation'); 
     
    880896                $result[] = $vacation; 
    881897                break; 
     898 
     899            case 'setflag': 
     900            case 'addflag': 
     901            case 'removeflag': 
     902                $result[] = array('type' => $token, 
     903                    // Flags list: last token (skip optional variable) 
     904                    'target' => $tokens[count($tokens)-1] 
     905                ); 
     906                break; 
    882907            } 
    883908        } 
  • trunk/plugins/managesieve/localization/en_US.inc

    r4521 r4522  
    6969$labels['valueequals'] = 'value is equal to'; 
    7070$labels['valuenotequals'] = 'value does not equal'; 
     71$labels['setflags'] = 'Set flags to the message'; 
     72$labels['addflags'] = 'Add flags to the message'; 
     73$labels['removeflags'] = 'Remove flags from the message'; 
     74$labels['flagread'] = 'Read'; 
     75$labels['flagdeleted'] = 'Deleted'; 
     76$labels['flaganswered'] = 'Answered'; 
     77$labels['flagflagged'] = 'Flagged'; 
     78$labels['flagdraft'] = 'Draft'; 
    7179 
    7280$messages = array(); 
  • trunk/plugins/managesieve/localization/pl_PL.inc

    r4521 r4522  
    8282$labels['valueequals'] = 'wartość jest równa'; 
    8383$labels['valuenotequals'] = 'wartość jest róŌna od'; 
     84$labels['setflags'] = 'Ustaw flagi wiadomości'; 
     85$labels['addflags'] = 'Dodaj flagi do wiadomości'; 
     86$labels['removeflags'] = 'Usuń flagi wiadomości'; 
     87$labels['flagread'] = 'Przeczytana'; 
     88$labels['flagdeleted'] = 'Usunięta'; 
     89$labels['flaganswered'] = 'Z odpowiedziÄ 
     90'; 
     91$labels['flagflagged'] = 'Oflagowana'; 
     92$labels['flagdraft'] = 'Szkic'; 
    8493 
    8594$messages = array(); 
  • trunk/plugins/managesieve/managesieve.php

    r4521 r4522  
    361361            $addresses = $_POST['_action_addresses']; 
    362362            $days = $_POST['_action_days']; 
     363            $flags = $_POST['_action_flags']; 
    363364 
    364365            // we need a "hack" for radiobuttons 
     
    374375            if ($name == '') 
    375376                $this->errors['name'] = $this->gettext('cannotbeempty'); 
    376             else 
     377            else { 
    377378                foreach($this->script as $idx => $rule) 
    378379                    if($rule['name'] == $name && $idx != $fid) { 
     
    380381                        break; 
    381382                    } 
     383            } 
    382384 
    383385            $i = 0; 
     
    482484 
    483485                switch ($type) { 
     486 
    484487                case 'fileinto': 
    485488                case 'fileinto_copy': 
     
    491494                    } 
    492495                    break; 
     496 
    493497                case 'reject': 
    494498                case 'ereject': 
     
    499503//                      $this->errors['actions'][$i]['targetarea'] = $this->gettext('cannotbeempty'); 
    500504                    break; 
     505 
    501506                case 'redirect': 
    502507                case 'redirect_copy': 
     
    513518                    } 
    514519                    break; 
     520 
     521                case 'addflag': 
     522                case 'setflag': 
     523                case 'removeflag': 
     524                    $_target = array(); 
     525                    if (empty($flags[$idx])) { 
     526                        $this->errors['actions'][$i]['target'] = $this->gettext('noflagset'); 
     527                    } 
     528                    else { 
     529                        foreach ($flags[$idx] as $flag) { 
     530                            $_target[] = $this->strip_value($flag); 
     531                        } 
     532                    } 
     533                    $this->form['actions'][$i]['target'] = $_target; 
     534                    if (in_array('imap4flags', $this->exts)) { 
     535                        $this->form['actions'][$i]['mode'] = 'imap4flags'; 
     536                    } 
     537                    break; 
     538 
    515539                case 'vacation': 
    516540                    $reason = $this->strip_value($reasons[$idx]); 
     
    9961020            $select_action->add(Q($this->gettext('messagereply')), 'vacation'); 
    9971021        $select_action->add(Q($this->gettext('messagedelete')), 'discard'); 
     1022        if (in_array('imapflags', $this->exts) || in_array('imap4flags', $this->exts)) { 
     1023            $select_action->add(Q($this->gettext('setflags')), 'setflag'); 
     1024            $select_action->add(Q($this->gettext('addflags')), 'addflag'); 
     1025            $select_action->add(Q($this->gettext('removeflags')), 'removeflag'); 
     1026        } 
    9981027        $select_action->add(Q($this->gettext('rulestop')), 'stop'); 
    9991028 
     
    10351064        $out .= '</div>'; 
    10361065 
     1066        // flags 
     1067        $flags = array( 
     1068            'read'      => '\\\\Seen', 
     1069            'answered'  => '\\\\Answered', 
     1070            'flagged'   => '\\\\Flagged', 
     1071            'deleted'   => '\\\\Deleted', 
     1072            'draft'     => '\\\\Draft', 
     1073        ); 
     1074        $action['target'] = (array)$action['target']; 
     1075        $out .= '<div id="action_flags' .$id.'" style="display:'  
     1076            . (preg_match('/^(set|add|remove)flag$/', $action['type']) ? 'inline' : 'none') . '"' 
     1077            . $this->error_class($id, 'action', 'flags', 'action_flags') . '>'; 
     1078        foreach ($flags as $fidx => $flag) { 
     1079            $out .= '<nobr><input type="checkbox" name="_action_flags[' .$id .'][]" value="' . $flag . '"' 
     1080                . (in_array_nocase($flag, $action['target']) ? 'checked="checked"' : '') . ' />' 
     1081                . Q($this->gettext('flag'.$fidx)) .'</nobr> '; 
     1082        } 
     1083        $out .= '</div>'; 
     1084 
    10371085        // mailbox select 
    10381086        $out .= '<select id="action_mailbox' .$id. '" name="_action_mailbox[]" style="display:' 
  • trunk/plugins/managesieve/skins/default/templates/filteredit.html

    r3805 r4522  
    1212function header_select(id) 
    1313{ 
    14     var obj = document.getElementById('header'+id); 
     14    var obj = document.getElementById('header' + id), 
     15            size = document.getElementById('rule_size' + id), 
     16            op = document.getElementById('rule_op' + id), 
     17            target = document.getElementById('rule_target' + id), 
     18            header = document.getElementById('custom_header' + id); 
    1519 
    16     if (obj.value == 'size') 
    17     { 
    18         document.getElementById('rule_size' + id).style.display = 'inline'; 
    19         document.getElementById('rule_op' + id).style.display = 'none'; 
    20         document.getElementById('rule_target' + id).style.display = 'none'; 
    21         document.getElementById('custom_header' + id).style.display = 'none'; 
     20    if (obj.value == 'size') { 
     21            size.style.display = 'inline'; 
     22            op.style.display = 'none'; 
     23            target.style.display = 'none'; 
     24            header.style.display = 'none'; 
    2225    } 
    23     else 
    24     { 
    25         if (obj.value != '...') 
    26             document.getElementById('custom_header' + id).style.display = 'none'; 
    27         else 
    28             document.getElementById('custom_header' + id).style.display = 'inline'; 
    29      
    30         document.getElementById('rule_size' + id).style.display = 'none'; 
    31         document.getElementById('rule_op' + id).style.display = 'inline'; 
    32         rule_op_select(id); 
     26    else { 
     27        header.style.display = obj.value != '...' ? 'none' : 'inline'; 
     28            size.style.display = 'none'; 
     29            op.style.display = 'inline'; 
     30            rule_op_select(id); 
    3331    } 
    3432} 
     
    3634function rule_op_select(id) 
    3735{ 
    38     var obj = document.getElementById('rule_op'+id); 
     36    var obj = document.getElementById('rule_op' + id), 
     37        target = document.getElementById('rule_target' + id); 
    3938 
    40     if (obj.value == 'exists' || obj.value == 'notexists') 
    41     { 
    42         document.getElementById('rule_target' + id).style.display = 'none'; 
    43     } 
    44     else 
    45     { 
    46         document.getElementById('rule_target' + id).style.display = 'inline'; 
    47     } 
     39        target.style.display = obj.value == 'exists' || obj.value == 'notexists' ? 'none' : 'inline'; 
    4840} 
    4941 
    5042function action_type_select(id) 
    5143{ 
    52     var obj = document.getElementById('action_type'+id); 
     44    var obj = document.getElementById('action_type' + id), 
     45        enabled = {}, 
     46        elems = { 
     47            mailbox: document.getElementById('action_mailbox' + id), 
     48                target: document.getElementById('action_target' + id), 
     49                target_area: document.getElementById('action_target_area' + id), 
     50                flags: document.getElementById('action_flags' + id), 
     51                vacation: document.getElementById('action_vacation' + id) 
     52        }; 
    5353 
    54     if (obj.value == 'fileinto' || obj.value == 'fileinto_copy') 
    55     { 
    56         document.getElementById('action_mailbox' + id).style.display = 'inline'; 
    57         document.getElementById('action_target' + id).style.display = 'none'; 
    58         document.getElementById('action_target_area' + id).style.display = 'none'; 
    59         document.getElementById('action_vacation' + id).style.display = 'none'; 
     54    if (obj.value == 'fileinto' || obj.value == 'fileinto_copy') { 
     55            enabled.mailbox = 1; 
    6056    } 
    61     else if (obj.value == 'redirect' || obj.value == 'redirect_copy') 
    62     { 
    63         document.getElementById('action_target' + id).style.display = 'inline'; 
    64         document.getElementById('action_mailbox' + id).style.display = 'none'; 
    65         document.getElementById('action_target_area' + id).style.display = 'none'; 
    66         document.getElementById('action_vacation' + id).style.display = 'none'; 
     57    else if (obj.value == 'redirect' || obj.value == 'redirect_copy') { 
     58            enabled.target = 1; 
    6759    } 
    68     else if (obj.value.match(/^reject|ereject$/)) 
    69     { 
    70         document.getElementById('action_target_area' + id).style.display = 'inline'; 
    71         document.getElementById('action_vacation' + id).style.display = 'none'; 
    72         document.getElementById('action_target' + id).style.display = 'none'; 
    73         document.getElementById('action_mailbox' + id).style.display = 'none'; 
     60    else if (obj.value.match(/^reject|ereject$/)) { 
     61            enabled.target_area = 1; 
    7462    } 
    75     else if (obj.value == 'vacation') 
    76     { 
    77         document.getElementById('action_vacation' + id).style.display = 'inline'; 
    78         document.getElementById('action_target_area' + id).style.display = 'none'; 
    79         document.getElementById('action_target' + id).style.display = 'none'; 
    80         document.getElementById('action_mailbox' + id).style.display = 'none'; 
     63    else if (obj.value.match(/^(add|set|remove)flag$/)) { 
     64            enabled.flags = 1; 
    8165    } 
    82     else // discard, keep, stop 
    83     { 
    84         document.getElementById('action_target_area' + id).style.display = 'none'; 
    85         document.getElementById('action_vacation' + id).style.display = 'none'; 
    86         document.getElementById('action_target' + id).style.display = 'none'; 
    87         document.getElementById('action_mailbox' + id).style.display = 'none'; 
     66    else if (obj.value == 'vacation') { 
     67            enabled.vacation = 1; 
     68    } 
     69 
     70    for (var x in elems) { 
     71        elems[x].style.display = !enabled[x] ? 'none' : 'inline'; 
    8872    } 
    8973} 
Note: See TracChangeset for help on using the changeset viewer.