Changeset 5340 in subversion


Ignore:
Timestamp:
Oct 17, 2011 6:50:37 AM (19 months ago)
Author:
alec
Message:
  • Filters - UI redesign: added possibility to move filter to any place using drag&drop (instead of up/down buttons), added filter sets list object, added more 'loading' messages
  • Added option to hide some scripts (managesieve_filename_exceptions)
Location:
trunk/plugins/managesieve
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/plugins/managesieve/Changelog

    r5334 r5340  
     1* version 5.0-beta [2011-10-17] 
     2----------------------------------------------------------- 
    13- Added possibility to create a filter based on selected message "in-place" 
    24- Fixed import from Horde-INGO (#1488064) 
     
    1113- Added Kolab's KEP:14 support (http://wiki.kolab.org/User:Greve/Drafts/KEP:14) 
    1214- Use smaller action/rule buttons 
     15- UI redesign: added possibility to move filter to any place using drag&drop 
     16  (instead of up/down buttons), added filter sets list object, added more 
     17  'loading' messages 
     18- Added option to hide some scripts (managesieve_filename_exceptions) 
    1319 
    1420* version 4.3 [2011-07-28] 
  • trunk/plugins/managesieve/config.inc.php.dist

    r5300 r5340  
    6161$rcmail_config['managesieve_filename_extension'] = '.sieve'; 
    6262 
     63// List of reserved script names (without extension). 
     64// Scripts listed here will be not presented to the user. 
     65$rcmail_config['managesieve_filename_exceptions'] = array(); 
     66 
    6367?> 
  • trunk/plugins/managesieve/lib/rcube_sieve_script.php

    r5325 r5340  
    188188            } 
    189189            foreach ($this->vars as $var) { 
    190                 $output .= (empty($has_vars) ? '# ' : '') . 'set '; 
    191                 foreach (array_diff(array_keys($var), array('name', 'value')) as $opt) { 
    192                     $output .= ":$opt "; 
    193                 } 
    194                 $output .= self::escape_string($var['name']) . ' ' . self::escape_string($var['value']) . ";\n"; 
     190                if (empty($has_vars)) { 
     191                    // 'variables' extension not supported, put vars in comments 
     192                    $output .= sprintf("# %s %s\n", $var['name'], $var['value']); 
     193                } 
     194                else { 
     195                    $output .= 'set '; 
     196                    foreach (array_diff(array_keys($var), array('name', 'value')) as $opt) { 
     197                        $output .= ":$opt "; 
     198                    } 
     199                    $output .= self::escape_string($var['name']) . ' ' . self::escape_string($var['value']) . ";\n"; 
     200                } 
    195201            } 
    196202        } 
     
    424430                } 
    425431                // KEP:14 variables 
    426                 else if (preg_match('/^# set "([^"]+)" "([^"]+)";$/', $line, $matches)) { 
     432                else if (preg_match('/^# (EDITOR|EDITOR_VERSION) (.+)$/', $line, $matches)) { 
    427433                    $this->set_var($matches[1], $matches[2]); 
    428434                } 
  • trunk/plugins/managesieve/localization/en_US.inc

    r5155 r5340  
    4444$labels['vacationsubject'] = 'Message subject:'; 
    4545$labels['rulestop'] = 'Stop evaluating rules'; 
     46$labels['enable'] = 'Enable/Disable'; 
    4647$labels['filterset'] = 'Filters set'; 
     48$labels['filtersets'] = 'Filter sets'; 
    4749$labels['filtersetadd'] = 'Add filters set'; 
    4850$labels['filtersetdel'] = 'Delete current filters set'; 
    4951$labels['filtersetact'] = 'Activate current filters set'; 
    5052$labels['filtersetdeact'] = 'Deactivate current filters set'; 
    51 $labels['filtersetget'] = 'Download filters set in text format'; 
    5253$labels['filterdef'] = 'Filter definition'; 
    5354$labels['filtersetname'] = 'Filters set name'; 
     
    8182$labels['usedata'] = 'Use following data in the filter:'; 
    8283$labels['nextstep'] = 'Next Step'; 
     84$labels['...'] = '...'; 
    8385 
    8486$messages = array(); 
    85 $messages['filterunknownerror'] = 'Unknown server error'; 
    86 $messages['filterconnerror'] = 'Unable to connect to managesieve server'; 
    87 $messages['filterdeleteerror'] = 'Unable to delete filter. Server error occured'; 
    88 $messages['filterdeleted'] = 'Filter deleted successfully'; 
    89 $messages['filtersaved'] = 'Filter saved successfully'; 
    90 $messages['filtersaveerror'] = 'Unable to save filter. Server error occured'; 
     87$messages['filterunknownerror'] = 'Unknown server error.'; 
     88$messages['filterconnerror'] = 'Unable to connect to server.'; 
     89$messages['filterdeleteerror'] = 'Unable to delete filter. Server error occured.'; 
     90$messages['filterdeleted'] = 'Filter deleted successfully.'; 
     91$messages['filtersaved'] = 'Filter saved successfully.'; 
     92$messages['filtersaveerror'] = 'Unable to save filter. Server error occured.'; 
    9193$messages['filterdeleteconfirm'] = 'Do you really want to delete selected filter?'; 
    9294$messages['ruledeleteconfirm'] = 'Are you sure, you want to delete selected rule?'; 
    9395$messages['actiondeleteconfirm'] = 'Are you sure, you want to delete selected action?'; 
    94 $messages['forbiddenchars'] = 'Forbidden characters in field'; 
    95 $messages['cannotbeempty'] = 'Field cannot be empty'; 
    96 $messages['setactivateerror'] = 'Unable to activate selected filters set. Server error occured'; 
    97 $messages['setdeactivateerror'] = 'Unable to deactivate selected filters set. Server error occured'; 
    98 $messages['setdeleteerror'] = 'Unable to delete selected filters set. Server error occured'; 
    99 $messages['setactivated'] = 'Filters set activated successfully'; 
    100 $messages['setdeactivated'] = 'Filters set deactivated successfully'; 
    101 $messages['setdeleted'] = 'Filters set deleted successfully'; 
     96$messages['forbiddenchars'] = 'Forbidden characters in field.'; 
     97$messages['cannotbeempty'] = 'Field cannot be empty.'; 
     98$messages['ruleexist'] = 'Filter with specified name already exists.'; 
     99$messages['setactivateerror'] = 'Unable to activate selected filters set. Server error occured.'; 
     100$messages['setdeactivateerror'] = 'Unable to deactivate selected filters set. Server error occured.'; 
     101$messages['setdeleteerror'] = 'Unable to delete selected filters set. Server error occured.'; 
     102$messages['setactivated'] = 'Filters set activated successfully.'; 
     103$messages['setdeactivated'] = 'Filters set deactivated successfully.'; 
     104$messages['setdeleted'] = 'Filters set deleted successfully.'; 
    102105$messages['setdeleteconfirm'] = 'Are you sure, you want to delete selected filters set?'; 
    103 $messages['setcreateerror'] = 'Unable to create filters set. Server error occured'; 
    104 $messages['setcreated'] = 'Filters set created successfully'; 
    105 $messages['emptyname'] = 'Unable to create filters set. Empty set name'; 
    106 $messages['nametoolong'] = 'Unable to create filters set. Name too long'; 
     106$messages['setcreateerror'] = 'Unable to create filters set. Server error occured.'; 
     107$messages['setcreated'] = 'Filters set created successfully.'; 
     108$messages['activateerror'] = 'Unable to enable selected filter(s). Server error occured.'; 
     109$messages['deactivateerror'] = 'Unable to disable selected filter(s). Server error occured.'; 
     110$messages['activated'] = 'Filter(s) disabled successfully.'; 
     111$messages['deactivated'] = 'Filter(s) enabled successfully.'; 
     112$messages['moved'] = 'Filter moved successfully.'; 
     113$messages['moveerror'] = 'Unable to move selected filter. Server error occured.'; 
     114$messages['nametoolong'] = 'Name too long.'; 
     115$messages['namereserved'] = 'Reserved name.'; 
     116$messages['setexist'] = 'Set already exists.'; 
    107117$messages['nodata'] = 'At least one position must be selected!'; 
    108118 
  • trunk/plugins/managesieve/localization/pl_PL.inc

    r5161 r5340  
    1010$labels['filteradd'] = 'Dodaj filtr'; 
    1111$labels['filterdel'] = 'Usuń filtr'; 
    12 $labels['moveup'] = 'Przenieś wyÅŒej'; 
    13 $labels['movedown'] = 'Przenieś niÅŒej'; 
     12$labels['enable'] = 'WłĠ
     13cz/WyłĠ
     14cz'; 
     15$labels['filtersets'] = 'Zbiory fitrów'; 
    1416$labels['filterallof'] = 'spełniajĠ
    1517cych wszystkie poniÅŒsze kryteria'; 
     
    6062$labels['filtersetdeact'] = 'Deaktywuj bieŌĠ
    6163cy zbiór filtrów'; 
    62 $labels['filtersetget'] = 'Pobierz bieŌĠ
    63 cy zbiór filtrów w formacie tekstowym'; 
    6464$labels['filterdef'] = 'Definicja filtra'; 
    6565$labels['filtersetname'] = 'Nazwa zbioru'; 
     
    9696cych danych do utworzenia filtra:'; 
    9797$labels['nextstep'] = 'Następny krok'; 
     98$labels['...'] = '...'; 
    9899 
    99100$messages = array(); 
    100101$messages['filterunknownerror'] = 'Nieznany błĠ
    101 d serwera'; 
     102d serwera.'; 
    102103$messages['filterconnerror'] = 'Nie moÅŒna nawiÄ 
    103104zać połĠ
    104 czenia z serwerem managesieve'; 
     105czenia z serwerem.'; 
    105106$messages['filterdeleteerror'] = 'Nie moÅŒna usunÄ 
    106 Ä‡ filtra. WystÄ 
    107 pił błĠ
    108 d serwera'; 
    109 $messages['filterdeleted'] = 'Filtr został usunięty pomyślnie'; 
     107ć filtra. BłĠ
     108d serwera.'; 
     109$messages['filterdeleted'] = 'Filtr został usunięty pomyślnie.'; 
    110110$messages['filterdeleteconfirm'] = 'Czy na pewno chcesz usunÄ 
    111111ć wybrany filtr?'; 
    112 $messages['filtersaved'] = 'Filtr został zapisany pomyślnie'; 
     112$messages['filtersaved'] = 'Filtr został zapisany pomyślnie.'; 
    113113$messages['filtersaveerror'] = 'Nie moÅŒna zapisać filtra. WystÄ 
    114114pił błĠ
     
    120120ć wybranĠ
    121121 akcję?'; 
    122 $messages['forbiddenchars'] = 'Pole zawiera niedozwolone znaki'; 
    123 $messages['cannotbeempty'] = 'Pole nie moÅŒe być puste'; 
     122$messages['forbiddenchars'] = 'Pole zawiera niedozwolone znaki.'; 
     123$messages['cannotbeempty'] = 'Pole nie moÅŒe być puste.'; 
    124124$messages['setactivateerror'] = 'Nie moÅŒna aktywować wybranego zbioru filtrów. BłĠ
    125 d serwera'; 
     125d serwera.'; 
    126126$messages['setdeactivateerror'] = 'Nie moÅŒna deaktywować wybranego zbioru filtrów. BłĠ
    127 d serwera'; 
     127d serwera.'; 
    128128$messages['setdeleteerror'] = 'Nie moÅŒna usunÄ 
    129129ć wybranego zbioru filtrów. BłĠ
    130 d serwera'; 
    131 $messages['setactivated'] = 'Zbiór filtrów został aktywowany pomyślnie'; 
    132 $messages['setdeactivated'] = 'Zbiór filtrów został deaktywowany pomyślnie'; 
    133 $messages['setdeleted'] = 'Zbiór filtrów został usunięty pomyślnie'; 
     130d serwera.'; 
     131$messages['setactivated'] = 'Zbiór filtrów został aktywowany pomyślnie.'; 
     132$messages['setdeactivated'] = 'Zbiór filtrów został deaktywowany pomyślnie.'; 
     133$messages['setdeleted'] = 'Zbiór filtrów został usunięty pomyślnie.'; 
    134134$messages['setdeleteconfirm'] = 'Czy na pewno chcesz usunÄ 
    135135ć wybrany zbiór filtrów?'; 
    136136$messages['setcreateerror'] = 'Nie moÅŒna utworzyć zbioru filtrów. BłĠ
    137 d serwera'; 
    138 $messages['setcreated'] = 'Zbiór filtrów został utworzony pomyślnie'; 
    139 $messages['emptyname'] = 'Nie moÅŒna utworzyć zbioru filtrów. Pusta nazwa zbioru'; 
    140 $messages['nametoolong'] = 'Nie moÅŒna utworzyć zbioru filtrów. Nazwa zbyt długa'; 
     137d serwera.'; 
     138$messages['setcreated'] = 'Zbiór filtrów został utworzony pomyślnie.'; 
    141139$messages['nodata'] = 'NaleÅŒy wybrać co najmniej jednÄ 
    142140 pozycję!'; 
     141$messages['ruleexist'] = 'Filtr o podanej nazwie juÅŒ istnieje.'; 
     142$messages['activateerror'] = 'Nie moÅŒna włĠ
     143czyć wybranych filtrów. BłĠ
     144d serwera.'; 
     145$messages['deactivateerror'] = 'Nie moÅŒna wyłĠ
     146czyć wybranych filtrów. BłĠ
     147d serwera.'; 
     148$messages['activated'] = 'Filtr(y) wyłĠ
     149czono pomyślnie.'; 
     150$messages['deactivated'] = 'Filtr(y) włĠ
     151czono pomyślnie.'; 
     152$messages['moved'] = 'Filter został przeniesiony pomyślnie.'; 
     153$messages['moveerror'] = 'Nie moÅŒna przenieść wybranego filtra. BłĠ
     154d serwera.'; 
     155$messages['nametoolong'] = 'Zbyt długa nazwa.'; 
     156$messages['namereserved'] = 'Nazwa zarezerwowana.'; 
     157$messages['setexist'] = 'Zbiór juÅŒ istnieje.'; 
    143158 
    144159?> 
  • trunk/plugins/managesieve/managesieve.js

    r5334 r5340  
    3232    // register commands 
    3333    rcmail.register_command('plugin.managesieve-save', function() { rcmail.managesieve_save() }); 
     34    rcmail.register_command('plugin.managesieve-act', function() { rcmail.managesieve_act() }); 
    3435    rcmail.register_command('plugin.managesieve-add', function() { rcmail.managesieve_add() }); 
    3536    rcmail.register_command('plugin.managesieve-del', function() { rcmail.managesieve_del() }); 
    36     rcmail.register_command('plugin.managesieve-up', function() { rcmail.managesieve_up() }); 
    37     rcmail.register_command('plugin.managesieve-down', function() { rcmail.managesieve_down() }); 
    38     rcmail.register_command('plugin.managesieve-set', function() { rcmail.managesieve_set() }); 
     37    rcmail.register_command('plugin.managesieve-move', function() { rcmail.managesieve_move() }); 
    3938    rcmail.register_command('plugin.managesieve-setadd', function() { rcmail.managesieve_setadd() }); 
    4039    rcmail.register_command('plugin.managesieve-setdel', function() { rcmail.managesieve_setdel() }); 
     
    4544      if (rcmail.gui_objects.sieveform) { 
    4645        rcmail.enable_command('plugin.managesieve-save', true); 
     46 
     47        // small resize for header element 
     48        $('select[name="_header[]"]', rcmail.gui_objects.sieveform).each(function() { 
     49          if (this.value == '...') this.style.width = '40px'; 
     50        }); 
     51 
    4752        // resize dialog window 
    4853        if (rcmail.env.action == 'plugin.managesieve' && rcmail.env.task == 'mail') { 
    4954          parent.rcmail.managesieve_dialog_resize(rcmail.gui_objects.sieveform); 
    5055        } 
     56 
    5157        $('input[type="text"]:first', rcmail.gui_objects.sieveform).focus(); 
    5258      } 
     
    5561      } 
    5662 
     63      var i, p = rcmail, setcnt, set = rcmail.env.currentset; 
     64 
    5765      if (rcmail.gui_objects.filterslist) { 
    58         var p = rcmail; 
    59         rcmail.filters_list = new rcube_list_widget(rcmail.gui_objects.filterslist, {multiselect:false, draggable:false, keyboard:false}); 
     66        rcmail.filters_list = new rcube_list_widget(rcmail.gui_objects.filterslist, 
     67          {multiselect:false, draggable:true, keyboard:false}); 
    6068        rcmail.filters_list.addEventListener('select', function(o){ p.managesieve_select(o); }); 
     69        rcmail.filters_list.addEventListener('dragstart', function(o){ p.managesieve_dragstart(o); }); 
     70        rcmail.filters_list.addEventListener('dragend', function(e){ p.managesieve_dragend(e); }); 
     71        rcmail.filters_list.row_init = function (row) { 
     72          row.obj.onmouseover = function() { p.managesieve_focus_filter(row); }; 
     73          row.obj.onmouseout = function() { p.managesieve_unfocus_filter(row); }; 
     74        }; 
    6175        rcmail.filters_list.init(); 
    6276        rcmail.filters_list.focus(); 
    63  
     77      } 
     78 
     79      if (rcmail.gui_objects.filtersetslist) { 
     80        rcmail.filtersets_list = new rcube_list_widget(rcmail.gui_objects.filtersetslist, {multiselect:false, draggable:false, keyboard:false}); 
     81        rcmail.filtersets_list.addEventListener('select', function(o){ p.managesieve_setselect(o); }); 
     82        rcmail.filtersets_list.init(); 
     83        rcmail.filtersets_list.focus(); 
     84 
     85        if (set != null) { 
     86          set = rcmail.managesieve_setid(set); 
     87          rcmail.filtersets_list.shift_start = set; 
     88          rcmail.filtersets_list.highlight_row(set, false); 
     89        } 
     90 
     91        setcnt = rcmail.filtersets_list.rowcount; 
    6492        rcmail.enable_command('plugin.managesieve-set', true); 
    65         rcmail.enable_command('plugin.managesieve-setact', 'plugin.managesieve-setget', rcmail.gui_objects.filtersetslist.length); 
    66         rcmail.enable_command('plugin.managesieve-setdel', rcmail.gui_objects.filtersetslist.length > 1); 
    67  
    68         $('#'+rcmail.buttons['plugin.managesieve-setact'][0].id).attr('title', rcmail.gettext('managesieve.filterset' 
    69           + ($.inArray(rcmail.gui_objects.filtersetslist.value, rcmail.env.active_sets) != -1 ? 'deact' : 'act'))); 
     93        rcmail.enable_command('plugin.managesieve-setact', 'plugin.managesieve-setget', setcnt); 
     94        rcmail.enable_command('plugin.managesieve-setdel', setcnt > 1); 
    7095      } 
    7196    } 
     
    76101 
    77102/*********************************************************/ 
    78 /*********     Managesieve filters methods       *********/ 
     103/*********       Managesieve UI methods          *********/ 
    79104/*********************************************************/ 
    80105 
     
    88113{ 
    89114  var id = this.filters_list.get_single_selection(); 
    90   if (confirm(this.get_label('managesieve.filterdeleteconfirm'))) 
    91     this.http_request('plugin.managesieve', 
    92       '_act=delete&_fid='+this.filters_list.rows[id].uid, true); 
    93 }; 
    94  
    95 rcube_webmail.prototype.managesieve_up = function() 
    96 { 
    97   var id = this.filters_list.get_single_selection(); 
    98   this.http_request('plugin.managesieve', 
    99     '_act=up&_fid='+this.filters_list.rows[id].uid, true); 
    100 }; 
    101  
    102 rcube_webmail.prototype.managesieve_down = function() 
    103 { 
    104   var id = this.filters_list.get_single_selection(); 
    105   this.http_request('plugin.managesieve', 
    106     '_act=down&_fid='+this.filters_list.rows[id].uid, true); 
     115  if (confirm(this.get_label('managesieve.filterdeleteconfirm'))) { 
     116    var lock = this.set_busy(true, 'loading'); 
     117    this.http_post('plugin.managesieve', 
     118      '_act=delete&_fid='+this.filters_list.rows[id].uid, lock); 
     119  } 
     120}; 
     121 
     122rcube_webmail.prototype.managesieve_act = function() 
     123{ 
     124  var id = this.filters_list.get_single_selection(), 
     125    lock = this.set_busy(true, 'loading'); 
     126 
     127  this.http_post('plugin.managesieve', 
     128    '_act=act&_fid='+this.filters_list.rows[id].uid, lock); 
     129}; 
     130 
     131// Filter selection 
     132rcube_webmail.prototype.managesieve_select = function(list) 
     133{ 
     134  var id = list.get_single_selection(); 
     135  if (id != null) 
     136    this.load_managesieveframe(list.rows[id].uid); 
     137}; 
     138 
     139// Set selection 
     140rcube_webmail.prototype.managesieve_setselect = function(list) 
     141{ 
     142  this.show_contentframe(false); 
     143  this.filters_list.clear(true); 
     144  this.enable_command('plugin.managesieve-setdel', list.rowcount > 1); 
     145  this.enable_command( 'plugin.managesieve-setact', 'plugin.managesieve-setget', true); 
     146 
     147  var id = list.get_single_selection(); 
     148  if (id != null) 
     149    this.managesieve_list(this.env.filtersets[id]); 
    107150}; 
    108151 
     
    116159}; 
    117160 
    118 rcube_webmail.prototype.managesieve_updatelist = function(action, name, id, disabled) 
     161// Returns set's identifier 
     162rcube_webmail.prototype.managesieve_setid = function(name) 
     163{ 
     164  for (var i in this.env.filtersets) 
     165    if (this.env.filtersets[i] == name) 
     166      return i; 
     167}; 
     168 
     169// Filters listing request 
     170rcube_webmail.prototype.managesieve_list = function(script) 
     171{ 
     172  var lock = this.set_busy(true, 'loading'); 
     173 
     174  this.http_post('plugin.managesieve', '_act=list&_set='+urlencode(script), lock); 
     175}; 
     176 
     177// Script download request 
     178rcube_webmail.prototype.managesieve_setget = function() 
     179{ 
     180  var id = this.filtersets_list.get_single_selection(), 
     181    script = this.env.filtersets[id]; 
     182 
     183  location.href = this.env.comm_path+'&_action=plugin.managesieve&_act=setget&_set='+urlencode(script); 
     184}; 
     185 
     186// Set activate/deactivate request 
     187rcube_webmail.prototype.managesieve_setact = function() 
     188{ 
     189  var id = this.filtersets_list.get_single_selection(), 
     190   lock = this.set_busy(true, 'loading'), 
     191    script = this.env.filtersets[id], 
     192    action = $('#rcmrow'+id).hasClass('disabled') ? 'setact' : 'deact'; 
     193 
     194  this.http_post('plugin.managesieve', '_act='+action+'&_set='+urlencode(script), lock); 
     195}; 
     196 
     197// Set delete request 
     198rcube_webmail.prototype.managesieve_setdel = function() 
     199{ 
     200  if (!confirm(this.get_label('managesieve.setdeleteconfirm'))) 
     201    return false; 
     202 
     203  var id = this.filtersets_list.get_single_selection(), 
     204    lock = this.set_busy(true, 'loading'), 
     205    script = this.env.filtersets[id]; 
     206 
     207  this.http_post('plugin.managesieve', '_act=setdel&_set='+urlencode(script), lock); 
     208}; 
     209 
     210// Set add request 
     211rcube_webmail.prototype.managesieve_setadd = function() 
     212{ 
     213  this.filters_list.clear_selection(); 
     214  this.enable_command('plugin.managesieve-act', 'plugin.managesieve-del', false); 
     215 
     216  if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) { 
     217    var lock = this.set_busy(true, 'loading'); 
     218    target = window.frames[this.env.contentframe]; 
     219    target.location.href = this.env.comm_path+'&_action=plugin.managesieve&_framed=1&_newset=1&_unlock='+lock; 
     220  } 
     221}; 
     222 
     223rcube_webmail.prototype.managesieve_updatelist = function(action, o) 
    119224{ 
    120225  this.set_busy(true); 
    121226 
    122227  switch (action) { 
    123     case 'delete': 
    124       this.filters_list.remove_row(this.managesieve_rowid(id)); 
    125       this.filters_list.clear_selection(); 
    126       this.enable_command('plugin.managesieve-del', 'plugin.managesieve-up', 'plugin.managesieve-down', false); 
     228 
     229    // Delete filter row 
     230    case 'del': 
     231      var i, list = this.filters_list, rows = list.rows; 
     232 
     233      list.remove_row(this.managesieve_rowid(o.id)); 
     234      list.clear_selection(); 
    127235      this.show_contentframe(false); 
     236      this.enable_command('plugin.managesieve-del', 'plugin.managesieve-act', false); 
    128237 
    129238      // re-numbering filters 
    130       var i, rows = this.filters_list.rows; 
    131239      for (i=0; i<rows.length; i++) { 
    132         if (rows[i] != null && rows[i].uid > id) 
     240        if (rows[i] != null && rows[i].uid > o.id) 
    133241          rows[i].uid = rows[i].uid-1; 
    134242      } 
     243 
    135244      break; 
    136245 
    137     case 'down': 
    138       var from, fromstatus, status, rows = this.filters_list.rows; 
    139  
    140       // we need only to replace filter names... 
    141       for (var i=0; i<rows.length; i++) { 
    142         if (rows[i]==null) { // removed row 
    143           continue; 
    144         } 
    145         else if (rows[i].uid == id) { 
    146           from = rows[i].obj; 
    147           fromstatus = $(from).hasClass('disabled'); 
    148         } 
    149         else if (rows[i].uid == id+1) { 
    150           name = rows[i].obj.cells[0].innerHTML; 
    151           status = $(rows[i].obj).hasClass('disabled'); 
    152           rows[i].obj.cells[0].innerHTML = from.cells[0].innerHTML; 
    153           from.cells[0].innerHTML = name; 
    154           $(from)[status?'addClass':'removeClass']('disabled'); 
    155           $(rows[i].obj)[fromstatus?'addClass':'removeClass']('disabled'); 
    156           this.filters_list.highlight_row(i); 
    157           break; 
    158         } 
     246    // Update filter row 
     247    case 'update': 
     248      var i, row = $('#rcmrow'+o.id); 
     249 
     250      if (o.name) 
     251        $('td', row).html(o.name); 
     252      if (o.disabled) 
     253        row.addClass('disabled'); 
     254      else 
     255        row.removeClass('disabled'); 
     256 
     257      $('#disabled', $('iframe').contents()).prop('checked', o.disabled); 
     258 
     259      break; 
     260 
     261    // Add filter row to the list 
     262    case 'add': 
     263      var list = this.filters_list, 
     264        row = $('<tr><td class="name"></td></tr>'); 
     265 
     266      $('td', row).html(o.name); 
     267      row.attr('id', 'rcmrow'+o.id); 
     268      if (o.disabled) 
     269        row.addClass('disabled'); 
     270 
     271      list.insert_row(row.get(0)); 
     272      list.highlight_row(o.id); 
     273 
     274      this.enable_command('plugin.managesieve-del', 'plugin.managesieve-act', true); 
     275 
     276      break; 
     277 
     278    // Filling rules list 
     279    case 'list': 
     280      var i, tr, td, el, list = this.filters_list; 
     281 
     282      if (o.clear) 
     283        list.clear(); 
     284 
     285      for (i in o.list) { 
     286        el = o.list[i]; 
     287        tr = document.createElement('TR'); 
     288        td = document.createElement('TD'); 
     289 
     290        td.innerHTML = el.name; 
     291        td.className = 'name'; 
     292        tr.id = 'rcmrow' + el.id; 
     293        if (el.class) 
     294            tr.className = el.class 
     295        tr.appendChild(td); 
     296 
     297        list.insert_row(tr); 
    159298      } 
    160       // ... and disable/enable Down button 
    161       this.filters_listbuttons(); 
     299 
     300      if (o.set) 
     301        list.highlight_row(o.set); 
     302      else 
     303        this.enable_command('plugin.managesieve-del', 'plugin.managesieve-act', false); 
     304 
    162305      break; 
    163306 
    164     case 'up': 
    165       var from, status, fromstatus, rows = this.filters_list.rows; 
    166  
    167       // we need only to replace filter names... 
    168       for (var i=0; i<rows.length; i++) { 
    169         if (rows[i] == null) { // removed row 
    170           continue; 
    171         } 
    172         else if (rows[i].uid == id-1) { 
    173           from = rows[i].obj; 
    174           fromstatus = $(from).hasClass('disabled'); 
    175           this.filters_list.highlight_row(i); 
    176         } 
    177         else if (rows[i].uid == id) { 
    178           name = rows[i].obj.cells[0].innerHTML; 
    179           status = $(rows[i].obj).hasClass('disabled'); 
    180           rows[i].obj.cells[0].innerHTML = from.cells[0].innerHTML; 
    181           from.cells[0].innerHTML = name; 
    182           $(from)[status?'addClass':'removeClass']('disabled'); 
    183           $(rows[i].obj)[fromstatus?'addClass':'removeClass']('disabled'); 
    184           break; 
    185         } 
     307    // Sactivate/deactivate set 
     308    case 'setact': 
     309      var id = this.managesieve_setid(o.name), row = $('#rcmrow' + id); 
     310      if (o.active) { 
     311        if (o.all) 
     312          $('tr', this.gui_objects.filtersetslist).addClass('disabled'); 
     313        row.removeClass('disabled'); 
    186314      } 
    187       // ... and disable/enable Up button 
    188       this.filters_listbuttons(); 
     315      else 
     316        row.addClass('disabled'); 
     317 
    189318      break; 
    190319 
    191     case 'update': 
    192       var rows = parent.rcmail.filters_list.rows; 
    193       for (var i=0; i<rows.length; i++) 
    194         if (rows[i] && rows[i].uid == id) { 
    195           rows[i].obj.cells[0].innerHTML = name; 
    196           if (disabled) 
    197             $(rows[i].obj).addClass('disabled'); 
    198           else 
    199             $(rows[i].obj).removeClass('disabled'); 
    200           break; 
    201         } 
     320    // Delete set row 
     321    case 'setdel': 
     322      var id = this.managesieve_setid(o.name); 
     323 
     324      this.filtersets_list.remove_row(id); 
     325      this.filters_list.clear(); 
     326      this.show_contentframe(false); 
     327      this.enable_command('plugin.managesieve-setdel', 'plugin.managesieve-setact', 'plugin.managesieve-setget', false); 
     328 
     329      delete this.env.filtersets[id]; 
     330 
    202331      break; 
    203332 
    204     case 'add': 
    205       var row, new_row, td, list = parent.rcmail.filters_list; 
    206  
    207       if (!list) 
    208         break; 
    209  
    210       for (var i=0; i<list.rows.length; i++) 
    211         if (list.rows[i] != null && String(list.rows[i].obj.id).match(/^rcmrow/)) 
    212           row = list.rows[i].obj; 
    213  
    214       if (row) { 
    215         new_row = parent.document.createElement('tr'); 
    216         new_row.id = 'rcmrow'+id; 
    217         td = parent.document.createElement('td'); 
    218         new_row.appendChild(td); 
    219         list.insert_row(new_row, false); 
    220         if (disabled) 
    221           $(new_row).addClass('disabled'); 
    222           if (row.cells[0].className) 
    223             td.className = row.cells[0].className; 
    224  
    225            td.innerHTML = name; 
    226         list.highlight_row(id); 
    227  
    228         parent.rcmail.enable_command('plugin.managesieve-del', 'plugin.managesieve-up', true); 
    229       } 
    230       else // refresh whole page 
    231         parent.rcmail.goto_url('plugin.managesieve'); 
     333    // Create set row 
     334    case 'setadd': 
     335      var id = 'S' + new Date().getTime(), 
     336        list = this.filtersets_list, 
     337        row = $('<tr class="disabled"><td class="name"></td></tr>'); 
     338 
     339      $('td', row).html(o.name); 
     340      row.attr('id', 'rcmrow'+id); 
     341 
     342      this.env.filtersets[id] = o.name; 
     343      list.insert_row(row.get(0)); 
     344      list.select(id); 
     345 
    232346      break; 
    233347  } 
    234348 
    235349  this.set_busy(false); 
    236 }; 
    237  
    238 rcube_webmail.prototype.managesieve_select = function(list) 
    239 { 
    240   var id = list.get_single_selection(); 
    241   if (id != null) 
    242     this.load_managesieveframe(list.rows[id].uid); 
    243 }; 
    244  
    245 rcube_webmail.prototype.managesieve_save = function() 
    246 { 
    247   if (parent.rcmail && parent.rcmail.filters_list && this.gui_objects.sieveform.name != 'filtersetform') { 
    248     var id = parent.rcmail.filters_list.get_single_selection(); 
    249     if (id != null) 
    250       this.gui_objects.sieveform.elements['_fid'].value = parent.rcmail.filters_list.rows[id].uid; 
    251   } 
    252   this.gui_objects.sieveform.submit(); 
    253350}; 
    254351 
     
    256353rcube_webmail.prototype.load_managesieveframe = function(id) 
    257354{ 
    258   if (typeof(id) != 'undefined' && id != null) { 
    259     this.enable_command('plugin.managesieve-del', true); 
    260     this.filters_listbuttons(); 
    261   } 
    262   else 
    263     this.enable_command('plugin.managesieve-up', 'plugin.managesieve-down', 'plugin.managesieve-del', false); 
     355  var has_id = typeof(id) != 'undefined' && id != null; 
     356  this.enable_command('plugin.managesieve-act', 'plugin.managesieve-del', has_id); 
    264357 
    265358  if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) { 
     
    271364}; 
    272365 
    273 // enable/disable Up/Down buttons 
    274 rcube_webmail.prototype.filters_listbuttons = function() 
    275 { 
    276   var id = this.filters_list.get_single_selection(), 
    277     rows = this.filters_list.rows; 
    278  
    279   for (var i=0; i<rows.length; i++) { 
    280     if (rows[i] == null) { // removed row 
    281     } 
    282     else if (i == id) { 
    283       this.enable_command('plugin.managesieve-up', false); 
    284       break; 
    285     } 
    286     else { 
    287       this.enable_command('plugin.managesieve-up', true); 
    288       break; 
    289     } 
    290   } 
    291  
    292   for (var i=rows.length-1; i>0; i--) { 
    293     if (rows[i] == null) { // removed row 
    294     } 
    295     else if (i == id) { 
    296       this.enable_command('plugin.managesieve-down', false); 
    297       break; 
    298     } 
    299     else { 
    300       this.enable_command('plugin.managesieve-down', true); 
    301       break; 
    302     } 
    303   }  
    304 }; 
    305  
    306 // operations on filters form 
     366// load filter frame 
     367rcube_webmail.prototype.managesieve_dragstart = function(list) 
     368{ 
     369  var id = this.filters_list.get_single_selection(); 
     370 
     371  this.drag_active = true; 
     372  this.drag_filter = id; 
     373}; 
     374 
     375rcube_webmail.prototype.managesieve_dragend = function(e) 
     376{ 
     377  if (this.drag_active) { 
     378    if (this.drag_filter_target) { 
     379      var lock = this.set_busy(true, 'loading'); 
     380 
     381      this.show_contentframe(false); 
     382      this.http_post('plugin.managesieve', '_act=move&_fid='+this.drag_filter 
     383        +'&_to='+this.drag_filter_target, lock); 
     384    } 
     385    this.drag_active = false; 
     386  } 
     387}; 
     388 
     389rcube_webmail.prototype.managesieve_focus_filter = function(row) 
     390{ 
     391  var id = row.id.replace(/^rcmrow/, ''); 
     392  if (this.drag_active && id != this.drag_filter) { 
     393    this.drag_filter_target = id; 
     394    $(row.obj).addClass(id < this.drag_filter ? 'filtermoveup' : 'filtermovedown'); 
     395  } 
     396}; 
     397 
     398rcube_webmail.prototype.managesieve_unfocus_filter = function(row) 
     399{ 
     400  if (this.drag_active) { 
     401    $(row.obj).removeClass('filtermoveup filtermovedown'); 
     402    this.drag_filter_target = null; 
     403  } 
     404}; 
     405 
     406/*********************************************************/ 
     407/*********          Filter Form methods          *********/ 
     408/*********************************************************/ 
     409 
     410// Form submition 
     411rcube_webmail.prototype.managesieve_save = function() 
     412{ 
     413  if (parent.rcmail && parent.rcmail.filters_list && this.gui_objects.sieveform.name != 'filtersetform') { 
     414    var id = parent.rcmail.filters_list.get_single_selection(); 
     415    if (id != null) 
     416      this.gui_objects.sieveform.elements['_fid'].value = parent.rcmail.filters_list.rows[id].uid; 
     417  } 
     418  this.gui_objects.sieveform.submit(); 
     419}; 
     420 
     421// Operations on filters form 
    307422rcube_webmail.prototype.managesieve_ruleadd = function(id) 
    308423{ 
     
    414529}; 
    415530 
    416 // Set change 
    417 rcube_webmail.prototype.managesieve_set = function() 
    418 { 
    419   var script = $(this.gui_objects.filtersetslist).val(); 
    420   location.href = this.env.comm_path+'&_action=plugin.managesieve&_set='+script; 
    421 }; 
    422  
    423 // Script download 
    424 rcube_webmail.prototype.managesieve_setget = function() 
    425 { 
    426   var script = $(this.gui_objects.filtersetslist).val(); 
    427   location.href = this.env.comm_path+'&_action=plugin.managesieve&_act=setget&_set='+script; 
    428 }; 
    429  
    430 // Set activate 
    431 rcube_webmail.prototype.managesieve_setact = function() 
    432 { 
    433   if (!this.gui_objects.filtersetslist) 
    434     return false; 
    435  
    436   var script = this.gui_objects.filtersetslist.value, 
    437     action = ($.inArray(script, rcmail.env.active_sets) != -1 ? 'deact' : 'setact'); 
    438  
    439   this.http_post('plugin.managesieve', '_act='+action+'&_set='+script); 
    440 }; 
    441  
    442 // Set activate flag in sets list after set activation 
    443 rcube_webmail.prototype.managesieve_reset = function() 
    444 { 
    445   if (!this.gui_objects.filtersetslist) 
    446     return false; 
    447  
    448   var list = this.gui_objects.filtersetslist, 
    449     opts = list.getElementsByTagName('option'), 
    450     label = ' (' + this.get_label('managesieve.active') + ')', 
    451     regx = new RegExp(RegExp.escape(label)+'$'); 
    452  
    453   for (var x=0; x<opts.length; x++) { 
    454     if ($.inArray(opts[x].value, rcmail.env.active_sets)<0) { 
    455       if (opts[x].innerHTML.match(regx)) 
    456         opts[x].innerHTML = opts[x].innerHTML.replace(regx, ''); 
    457     } 
    458     else if (!opts[x].innerHTML.match(regx)) 
    459       opts[x].innerHTML = opts[x].innerHTML + label; 
    460   } 
    461  
    462   // change title of setact button 
    463   $('#'+rcmail.buttons['plugin.managesieve-setact'][0].id).attr('title', rcmail.gettext('managesieve.filterset' 
    464     + ($.inArray(list.value, rcmail.env.active_sets) != -1 ? 'deact' : 'act'))); 
    465 }; 
    466  
    467 // Set delete 
    468 rcube_webmail.prototype.managesieve_setdel = function() 
    469 { 
    470   if (!this.gui_objects.filtersetslist) 
    471     return false; 
    472  
    473   if (!confirm(this.get_label('managesieve.setdeleteconfirm'))) 
    474     return false; 
    475  
    476   var script = this.gui_objects.filtersetslist.value; 
    477   this.http_post('plugin.managesieve', '_act=setdel&_set='+script); 
    478 }; 
    479  
    480 // Set add 
    481 rcube_webmail.prototype.managesieve_setadd = function() 
    482 { 
    483   this.filters_list.clear_selection(); 
    484   this.enable_command('plugin.managesieve-up', 'plugin.managesieve-down', 'plugin.managesieve-del', false); 
    485  
    486   if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) { 
    487     target = window.frames[this.env.contentframe]; 
    488     var msgid = this.set_busy(true, 'loading'); 
    489     target.location.href = this.env.comm_path+'&_action=plugin.managesieve&_framed=1&_newset=1&_unlock='+msgid; 
    490   } 
    491 }; 
    492  
    493 rcube_webmail.prototype.managesieve_reload = function(set) 
    494 { 
    495   this.env.reload_set = set; 
    496   window.setTimeout(function() { 
    497     location.href = rcmail.env.comm_path + '&_action=plugin.managesieve' 
    498       + (rcmail.env.reload_set ? '&_set=' + rcmail.env.reload_set : '') 
    499   }, 500); 
     531function rule_header_select(id) 
     532{ 
     533  var obj = document.getElementById('header' + id), 
     534    size = document.getElementById('rule_size' + id), 
     535    op = document.getElementById('rule_op' + id), 
     536    target = document.getElementById('rule_target' + id), 
     537    header = document.getElementById('custom_header' + id); 
     538 
     539  if (obj.value == 'size') { 
     540    size.style.display = 'inline'; 
     541    op.style.display = 'none'; 
     542    target.style.display = 'none'; 
     543    header.style.display = 'none'; 
     544  } 
     545  else { 
     546    header.style.display = obj.value != '...' ? 'none' : 'inline'; 
     547    size.style.display = 'none'; 
     548    op.style.display = 'inline'; 
     549    rule_op_select(id); 
     550  } 
     551 
     552  obj.style.width = obj.value == '...' ? '40px' : ''; 
     553}; 
     554 
     555function rule_op_select(id) 
     556{ 
     557  var obj = document.getElementById('rule_op' + id), 
     558    target = document.getElementById('rule_target' + id); 
     559 
     560  target.style.display = obj.value == 'exists' || obj.value == 'notexists' ? 'none' : 'inline'; 
     561}; 
     562 
     563function rule_join_radio(value) 
     564{ 
     565  $('#rules').css('display', value == 'any' ? 'none' : 'block'); 
     566}; 
     567 
     568function action_type_select(id) 
     569{ 
     570  var obj = document.getElementById('action_type' + id), 
     571    enabled = {}, 
     572    elems = { 
     573      mailbox: document.getElementById('action_mailbox' + id), 
     574      target: document.getElementById('action_target' + id), 
     575      target_area: document.getElementById('action_target_area' + id), 
     576      flags: document.getElementById('action_flags' + id), 
     577      vacation: document.getElementById('action_vacation' + id) 
     578    }; 
     579 
     580  if (obj.value == 'fileinto' || obj.value == 'fileinto_copy') { 
     581    enabled.mailbox = 1; 
     582  } 
     583  else if (obj.value == 'redirect' || obj.value == 'redirect_copy') { 
     584    enabled.target = 1; 
     585  } 
     586  else if (obj.value.match(/^reject|ereject$/)) { 
     587    enabled.target_area = 1; 
     588  } 
     589  else if (obj.value.match(/^(add|set|remove)flag$/)) { 
     590    enabled.flags = 1; 
     591  } 
     592  else if (obj.value == 'vacation') { 
     593    enabled.vacation = 1; 
     594  } 
     595 
     596  for (var x in elems) { 
     597    elems[x].style.display = !enabled[x] ? 'none' : 'inline'; 
     598  } 
    500599}; 
    501600 
     
    522621          tip.html(e.data.str) 
    523622          top -= tip.height(); 
    524            
     623 
    525624          tip.css({left: left, top: top}).show(); 
    526625        }) 
    527626      .bind('mouseleave', function(e) { tip.hide(); }); 
    528   } 
    529 }; 
    530  
    531 /*********************************************************/ 
    532 /*********     Other Managesieve UI methods      *********/ 
    533 /*********************************************************/ 
    534  
    535 function rule_header_select(id) 
    536 { 
    537   var obj = document.getElementById('header' + id), 
    538     size = document.getElementById('rule_size' + id), 
    539     op = document.getElementById('rule_op' + id), 
    540     target = document.getElementById('rule_target' + id), 
    541     header = document.getElementById('custom_header' + id); 
    542  
    543   if (obj.value == 'size') { 
    544     size.style.display = 'inline'; 
    545     op.style.display = 'none'; 
    546     target.style.display = 'none'; 
    547     header.style.display = 'none'; 
    548   } 
    549   else { 
    550     header.style.display = obj.value != '...' ? 'none' : 'inline'; 
    551     size.style.display = 'none'; 
    552     op.style.display = 'inline'; 
    553     rule_op_select(id); 
    554   } 
    555 }; 
    556  
    557 function rule_op_select(id) 
    558 { 
    559   var obj = document.getElementById('rule_op' + id), 
    560     target = document.getElementById('rule_target' + id); 
    561  
    562   target.style.display = obj.value == 'exists' || obj.value == 'notexists' ? 'none' : 'inline'; 
    563 }; 
    564  
    565 function rule_join_radio(value) 
    566 { 
    567   $('#rules').css('display', value == 'any' ? 'none' : 'block'); 
    568 }; 
    569  
    570 function action_type_select(id) 
    571 { 
    572   var obj = document.getElementById('action_type' + id), 
    573         enabled = {}, 
    574     elems = { 
    575       mailbox: document.getElementById('action_mailbox' + id), 
    576       target: document.getElementById('action_target' + id), 
    577       target_area: document.getElementById('action_target_area' + id), 
    578       flags: document.getElementById('action_flags' + id), 
    579       vacation: document.getElementById('action_vacation' + id) 
    580     }; 
    581  
    582   if (obj.value == 'fileinto' || obj.value == 'fileinto_copy') { 
    583     enabled.mailbox = 1; 
    584   } 
    585   else if (obj.value == 'redirect' || obj.value == 'redirect_copy') { 
    586     enabled.target = 1; 
    587   } 
    588   else if (obj.value.match(/^reject|ereject$/)) { 
    589     enabled.target_area = 1; 
    590   } 
    591   else if (obj.value.match(/^(add|set|remove)flag$/)) { 
    592     enabled.flags = 1; 
    593   } 
    594   else if (obj.value == 'vacation') { 
    595     enabled.vacation = 1; 
    596   } 
    597  
    598   for (var x in elems) { 
    599     elems[x].style.display = !enabled[x] ? 'none' : 'inline'; 
    600627  } 
    601628}; 
     
    679706{ 
    680707  var dialog = this.env.managesieve_dialog; 
    681    
     708 
    682709  // BUG(?): if we don't remove the iframe first, it will be reloaded 
    683710  dialog.html(''); 
  • trunk/plugins/managesieve/managesieve.php

    r5334 r5340  
    217217 
    218218            if (!empty($_GET['_set']) || !empty($_POST['_set'])) { 
    219                 $script_name = get_input_value('_set', RCUBE_INPUT_GPC); 
     219                $script_name = get_input_value('_set', RCUBE_INPUT_GPC, true); 
    220220            } 
    221221            else if (!empty($_SESSION['managesieve_current'])) { 
     
    245245                    if ($this->sieve->save_script($script_name, $content)) { 
    246246                        $this->activate_script($script_name); 
     247                        $this->list[] = $script_name; 
    247248                    } 
    248249                } 
     
    279280            $this->exts = $this->sieve->get_extensions(); 
    280281            $this->script = $this->sieve->script->as_array(); 
    281             if (empty($_GET['act'])) 
    282                 $this->rc->output->set_env('active_sets', $this->active); 
     282            $this->rc->output->set_env('currentset', $this->sieve->current); 
    283283            $_SESSION['managesieve_current'] = $this->sieve->current; 
    284284        } 
     
    295295        // Handle user requests 
    296296        if ($action = get_input_value('_act', RCUBE_INPUT_GPC)) { 
    297             $fid = (int) get_input_value('_fid', RCUBE_INPUT_GET); 
    298  
    299             if ($action == 'up' && !$error) { 
    300                 if ($fid && isset($this->script[$fid]) && isset($this->script[$fid-1])) { 
    301                     if ($this->sieve->script->update_rule($fid, $this->script[$fid-1]) !== false 
    302                         && $this->sieve->script->update_rule($fid-1, $this->script[$fid]) !== false) { 
    303                         $result = $this->save_script(); 
    304                     } 
    305  
    306                     if ($result) { 
    307 //                      $this->rc->output->show_message('managesieve.filtersaved', 'confirmation'); 
    308                         $this->rc->output->command('managesieve_updatelist', 'up', '', $fid); 
    309                     } else 
    310                         $this->rc->output->show_message('managesieve.filtersaveerror', 'error'); 
    311                 } 
    312             } 
    313             else if ($action == 'down' && !$error) { 
    314                 if (isset($this->script[$fid]) && isset($this->script[$fid+1])) { 
    315                     if ($this->sieve->script->update_rule($fid, $this->script[$fid+1]) !== false 
    316                         && $this->sieve->script->update_rule($fid+1, $this->script[$fid]) !== false) { 
    317                         $result = $this->save_script(); 
    318                     } 
    319  
    320                     if ($result === true) { 
    321 //                      $this->rc->output->show_message('managesieve.filtersaved', 'confirmation'); 
    322                         $this->rc->output->command('managesieve_updatelist', 'down', '', $fid); 
    323                     } else { 
    324                         $this->rc->output->show_message('managesieve.filtersaveerror', 'error'); 
    325                     } 
    326                 } 
    327             } 
    328             else if ($action == 'delete' && !$error) { 
     297            $fid = (int) get_input_value('_fid', RCUBE_INPUT_POST); 
     298 
     299            if ($action == 'delete' && !$error) { 
    329300                if (isset($this->script[$fid])) { 
    330301                    if ($this->sieve->script->delete_rule($fid)) 
     
    333304                    if ($result === true) { 
    334305                        $this->rc->output->show_message('managesieve.filterdeleted', 'confirmation'); 
    335                         $this->rc->output->command('managesieve_updatelist', 'delete', '', $fid); 
     306                        $this->rc->output->command('managesieve_updatelist', 'del', array('id' => $fid)); 
    336307                    } else { 
    337308                        $this->rc->output->show_message('managesieve.filterdeleteerror', 'error'); 
     309                    } 
     310                } 
     311            } 
     312            else if ($action == 'move' && !$error) { 
     313                if (isset($this->script[$fid])) { 
     314                    $to   = (int) get_input_value('_to', RCUBE_INPUT_POST); 
     315                    $rule = $this->script[$fid]; 
     316 
     317                    // remove rule 
     318                    unset($this->script[$fid]); 
     319                    $this->script = array_values($this->script); 
     320 
     321                    // add at target position 
     322                    if ($to >= count($this->script)) { 
     323                        $this->script[] = $rule; 
     324                    } 
     325                    else { 
     326                        $script = array(); 
     327                        foreach ($this->script as $idx => $r) { 
     328                            if ($idx == $to) 
     329                                $script[] = $rule; 
     330                            $script[] = $r; 
     331                        } 
     332                        $this->script = $script; 
     333                    } 
     334 
     335                    $this->sieve->script->content = $this->script; 
     336                    $result = $this->save_script(); 
     337 
     338                    if ($result === true) { 
     339                        $result = $this->list_rules(); 
     340 
     341                        $this->rc->output->show_message('managesieve.moved', 'confirmation'); 
     342                        $this->rc->output->command('managesieve_updatelist', 'list', 
     343                            array('list' => $result, 'clear' => true, 'set' => $to)); 
     344                    } else { 
     345                        $this->rc->output->show_message('managesieve.moveerror', 'error'); 
     346                    } 
     347                } 
     348            } 
     349            else if ($action == 'act' && !$error) { 
     350                if (isset($this->script[$fid])) { 
     351                    $rule     = $this->script[$fid]; 
     352                    $disabled = $rule['disabled'] ? true : false; 
     353                    $rule['disabled'] = !$disabled; 
     354                    $result = $this->sieve->script->update_rule($fid, $rule); 
     355 
     356                    if ($result !== false) 
     357                        $result = $this->save_script(); 
     358 
     359                    if ($result === true) { 
     360                        if ($rule['disabled']) 
     361                            $this->rc->output->show_message('managesieve.deactivated', 'confirmation'); 
     362                        else 
     363                            $this->rc->output->show_message('managesieve.activated', 'confirmation'); 
     364                        $this->rc->output->command('managesieve_updatelist', 'update', 
     365                            array('id' => $fid, 'disabled' => $rule['disabled'])); 
     366                    } else { 
     367                        if ($rule['disabled']) 
     368                            $this->rc->output->show_message('managesieve.deactivateerror', 'error'); 
     369                        else 
     370                            $this->rc->output->show_message('managesieve.activateerror', 'error'); 
    338371                    } 
    339372                } 
     
    342375                $script_name = get_input_value('_set', RCUBE_INPUT_GPC); 
    343376                $result = $this->activate_script($script_name); 
     377                $kep14  = $this->rc->config->get('managesieve_kolab_master'); 
    344378 
    345379                if ($result === true) { 
    346380                    $this->rc->output->set_env('active_sets', $this->active); 
    347381                    $this->rc->output->show_message('managesieve.setactivated', 'confirmation'); 
    348                     $this->rc->output->command('managesieve_reset'); 
     382                    $this->rc->output->command('managesieve_updatelist', 'setact', 
     383                        array('name' => $script_name, 'active' => true, 'all' => !$kep14)); 
    349384                } else { 
    350385                    $this->rc->output->show_message('managesieve.setactivateerror', 'error'); 
     
    358393                    $this->rc->output->set_env('active_sets', $this->active); 
    359394                    $this->rc->output->show_message('managesieve.setdeactivated', 'confirmation'); 
    360                     $this->rc->output->command('managesieve_reset'); 
     395                    $this->rc->output->command('managesieve_updatelist', 'setact', 
     396                        array('name' => $script_name, 'active' => false)); 
    361397                } else { 
    362398                    $this->rc->output->show_message('managesieve.setdeactivateerror', 'error'); 
     
    369405                if ($result === true) { 
    370406                    $this->rc->output->show_message('managesieve.setdeleted', 'confirmation'); 
    371                     $this->rc->output->command('managesieve_reload'); 
     407                    $this->rc->output->command('managesieve_updatelist', 'setdel', 
     408                        array('name' => $script_name)); 
    372409                    $this->rc->session->remove('managesieve_current'); 
    373410                } else { 
     
    401438                exit; 
    402439            } 
    403             elseif ($action == 'ruleadd') { 
     440            else if ($action == 'list') { 
     441                $result = $this->list_rules(); 
     442 
     443                $this->rc->output->command('managesieve_updatelist', 'list', array('list' => $result)); 
     444            } 
     445            else if ($action == 'ruleadd') { 
    404446                $rid = get_input_value('_rid', RCUBE_INPUT_GPC); 
    405447                $id = $this->genid(); 
     
    408450                $this->rc->output->command('managesieve_rulefill', $content, $id, $rid); 
    409451            } 
    410             elseif ($action == 'actionadd') { 
     452            else if ($action == 'actionadd') { 
    411453                $aid = get_input_value('_aid', RCUBE_INPUT_GPC); 
    412454                $id = $this->genid(); 
     
    465507        if (!empty($_POST['_newset'])) { 
    466508 
    467             $name = get_input_value('_name', RCUBE_INPUT_POST); 
    468             $copy = get_input_value('_copy', RCUBE_INPUT_POST); 
    469             $from = get_input_value('_from', RCUBE_INPUT_POST); 
    470  
    471             if (!$name) 
    472                 $error = 'managesieve.emptyname'; 
    473             else if (mb_strlen($name)>128) 
    474                 $error = 'managesieve.nametoolong'; 
     509            $name       = get_input_value('_name', RCUBE_INPUT_POST, true); 
     510            $copy       = get_input_value('_copy', RCUBE_INPUT_POST, true); 
     511            $from       = get_input_value('_from', RCUBE_INPUT_POST); 
     512            $exceptions = $this->rc->config->get('managesieve_filename_exceptions'); 
     513            $kolab      = $this->rc->config->get('managesieve_kolab_master'); 
     514            $name_uc    = mb_strtolower($name); 
     515 
     516            if (!$name) { 
     517                $this->errors['name'] = $this->gettext('emptyname'); 
     518            } 
     519            else if (mb_strlen($name) > 128) { 
     520                $this->errors['name'] = $this->gettext('nametoolong'); 
     521            } 
     522            else if (!empty($exceptions) && in_array($name, (array)$exceptions)) { 
     523                $this->errors['name'] = $this->gettext('namereserved'); 
     524            } 
     525            else if (!empty($kolab) && in_array($name_uc, array('MASTER', 'USER', 'MANAGEMENT'))) { 
     526                $this->errors['name'] = $this->gettext('namereserved'); 
     527            } 
     528            else if (($list = $this->list_scripts()) && in_array($name, $list)) { 
     529                $this->errors['name'] = $this->gettext('setexist'); 
     530            } 
    475531            else if ($from == 'file') { 
    476532                // from file 
     
    482538                    $this->sieve->load_script($file); 
    483539                    if (!$this->save_script($name)) { 
    484                         $error = 'managesieve.setcreateerror'; 
     540                        $this->errors['file'] = $this->gettext('setcreateerror'); 
    485541                    } 
    486542                } 
    487543                else {  // upload failed 
    488544                    $err = $_FILES['_file']['error']; 
    489                     $error = true; 
    490545 
    491546                    if ($err == UPLOAD_ERR_INI_SIZE || $err == UPLOAD_ERR_FORM_SIZE) { 
     
    495550                    } 
    496551                    else { 
    497                         $error = 'fileuploaderror'; 
     552                        $this->errors['file'] = $this->gettext('fileuploaderror'); 
    498553                    } 
    499554                } 
     
    503558            } 
    504559 
    505             if (!$error) { 
     560            if (!$error && empty($this->errors)) { 
    506561                $this->rc->output->show_message('managesieve.setcreated', 'confirmation'); 
    507                 $this->rc->output->command('parent.managesieve_reload', $name); 
     562                $this->rc->output->command('parent.managesieve_updatelist', 'setadd', 
     563                    array('name' => $name)); 
    508564            } else if ($msg) { 
    509565                $this->rc->output->command('display_message', $msg, 'error'); 
    510             } else { 
     566            } else if ($error) { 
    511567                $this->rc->output->show_message($error, 'error'); 
    512568            } 
     
    753809                    $this->rc->output->show_message('managesieve.filtersaved', 'confirmation'); 
    754810                    if ($this->rc->task != 'mail') { 
    755                         $this->rc->output->add_script( 
    756                             sprintf("rcmail.managesieve_updatelist('%s', '%s', %d, %d);", 
    757                                 isset($new) ? 'add' : 'update', Q($this->form['name']), 
    758                                 $fid, $this->form['disabled']), 
    759                             'foot'); 
     811                        $this->rc->output->command('parent.managesieve_updatelist', 
     812                            isset($new) ? 'add' : 'update', 
     813                            array( 
     814                                'name' => Q($this->form['name']), 
     815                                'id' => $fid, 
     816                                'disabled' => $this->form['disabled'] 
     817                        )); 
    760818                    } 
    761819                    else { 
     
    798856 
    799857        // define list of cols to be displayed 
    800         $a_show_cols = array('managesieve.filtername'); 
    801  
    802         $i = 1; 
    803         foreach ($this->script as $idx => $filter) { 
    804             if ($filter['type'] != 'if') { 
    805                 continue; 
    806             } 
    807             $fname = $filter['name'] ? $filter['name'] : "#$i"; 
    808             $result[] = array( 
    809                 'managesieve.filtername' => $fname, 
    810                 'id' => $idx, 
    811                 'class' => $filter['disabled'] ? 'disabled' : '', 
    812             ); 
    813             $i++; 
    814         } 
     858        $a_show_cols = array('name'); 
     859 
     860        $result = $this->list_rules(); 
    815861 
    816862        // create XHTML table 
     
    836882        $list = $this->list_scripts(); 
    837883 
    838         $select = new html_select(array('name' => '_set', 'id' => $attrib['id'], 
    839             'onchange' => $this->rc->task != 'mail' ? 'rcmail.managesieve_set()' : '')); 
    840  
    841         if ($list) { 
    842             asort($list, SORT_LOCALE_STRING); 
    843  
    844             foreach ($list as $set) 
    845                 $select->add($set . (in_array($set, $this->active) ? ' ('.$this->gettext('active').')' : ''), $set); 
    846         } 
    847  
    848         $out = $select->show($this->sieve->current); 
     884//        if ($list) { 
     885//            asort($list, SORT_LOCALE_STRING); 
     886//        } 
     887 
     888        if (!empty($attrib['type']) && $attrib['type'] == 'list') { 
     889            // define list of cols to be displayed 
     890            $a_show_cols = array('name'); 
     891 
     892            if ($list) { 
     893                foreach ($list as $idx => $set) { 
     894                    $scripts['S'.$idx] = $set; 
     895                    $result[] = array( 
     896                        'name' => Q($set), 
     897                        'id' => 'S'.$idx, 
     898                        'class' => !in_array($set, $this->active) ? 'disabled' : '', 
     899                    ); 
     900                } 
     901            } 
     902 
     903            // create XHTML table 
     904            $out = rcube_table_output($attrib, $result, $a_show_cols, 'id'); 
     905 
     906            $this->rc->output->set_env('filtersets', $scripts); 
     907            $this->rc->output->include_script('list.js'); 
     908        } 
     909        else { 
     910            $select = new html_select(array('name' => '_set', 'id' => $attrib['id'], 
     911                'onchange' => $this->rc->task != 'mail' ? 'rcmail.managesieve_set()' : '')); 
     912 
     913            if ($list) { 
     914                foreach ($list as $set) 
     915                    $select->add($set, $set); 
     916            } 
     917 
     918            $out = $select->show($this->sieve->current); 
     919        } 
    849920 
    850921        // set client env 
    851922        if (!$no_env) { 
    852923            $this->rc->output->add_gui_object('filtersetslist', $attrib['id']); 
    853             $this->rc->output->add_label( 
    854                 'managesieve.setdeleteconfirm', 
    855                 'managesieve.active', 
    856                 'managesieve.filtersetact', 
    857                 'managesieve.filtersetdeact' 
    858             ); 
     924            $this->rc->output->add_label('managesieve.setdeleteconfirm'); 
    859925        } 
    860926 
     
    911977 
    912978        if (is_array($list)) { 
    913             asort($list, SORT_LOCALE_STRING); 
    914  
    915             foreach ($list as $set) 
    916                 $select->add($set . (in_array($set, $this->active) ? ' ('.$this->gettext('active').')' : ''), $set); 
     979//            asort($list, SORT_LOCALE_STRING); 
     980 
     981            if (!$copy) 
     982                $copy = $_SESSION['managesieve_current']; 
     983 
     984            foreach ($list as $set) { 
     985                $select->add($set, $set); 
     986            } 
    917987 
    918988            $out .= '<br /><input type="radio" id="from_set" name="_from" value="set"' 
     
    924994        // script upload box 
    925995        $upload = new html_inputfield(array('name' => '_file', 'id' => '_file', 'size' => 30, 
    926             'type' => 'file', 'class' => ($this->errors['name'] ? 'error' : ''))); 
     996            'type' => 'file', 'class' => ($this->errors['file'] ? 'error' : ''))); 
    927997 
    928998        $out .= '<br /><input type="radio" id="from_file" name="_from" value="file"' 
     
    9331003 
    9341004        $this->rc->output->add_gui_object('sieveform', 'filtersetform'); 
     1005 
     1006        if ($this->errors['name']) 
     1007            $this->add_tip('_name', $this->errors['name'], true); 
     1008        if ($this->errors['file']) 
     1009            $this->add_tip('_file', $this->errors['file'], true); 
     1010 
     1011        $this->print_tips(); 
    9351012 
    9361013        return $out; 
     
    10961173            <input type="text" name="_custom_header[]" id="custom_header_i'.$id.'" ' 
    10971174            . $this->error_class($id, 'test', 'header', 'custom_header_i') 
    1098             .' value="' .Q($custom). '" size="20" />&nbsp;</div>' . "\n"; 
     1175            .' value="' .Q($custom). '" size="15" />&nbsp;</div>' . "\n"; 
    10991176 
    11001177        // matching type select (operator) 
    11011178        $select_op = new html_select(array('name' => "_rule_op[]", 'id' => 'rule_op'.$id, 
    11021179            'style' => 'display:' .($rule['test']!='size' ? 'inline' : 'none'), 
     1180            'class' => 'operator_selector', 
    11031181            'onchange' => 'rule_op_select('.$id.')')); 
    11041182        $select_op->add(Q($this->gettext('filtercontains')), 'contains'); 
     
    12281306        // shared targets 
    12291307        $out .= '<input type="text" name="_action_target['.$id.']" id="action_target' .$id. '" ' 
    1230             .'value="' .($action['type']=='redirect' ? Q($action['target'], 'strict', false) : ''). '" size="40" ' 
     1308            .'value="' .($action['type']=='redirect' ? Q($action['target'], 'strict', false) : ''). '" size="35" ' 
    12311309            .'style="display:' .($action['type']=='redirect' ? 'inline' : 'none') .'" ' 
    12321310            . $this->error_class($id, 'action', 'target', 'action_target') .' />'; 
    12331311        $out .= '<textarea name="_action_target_area['.$id.']" id="action_target_area' .$id. '" ' 
    1234             .'rows="3" cols="40" '. $this->error_class($id, 'action', 'targetarea', 'action_target_area') 
     1312            .'rows="3" cols="35" '. $this->error_class($id, 'action', 'targetarea', 'action_target_area') 
    12351313            .'style="display:' .(in_array($action['type'], array('reject', 'ereject')) ? 'inline' : 'none') .'">' 
    12361314            . (in_array($action['type'], array('reject', 'ereject')) ? Q($action['target'], 'strict', false) : '') 
     
    12411319        $out .= '<span class="label">'. Q($this->gettext('vacationreason')) .'</span><br />' 
    12421320            .'<textarea name="_action_reason['.$id.']" id="action_reason' .$id. '" ' 
    1243             .'rows="3" cols="45" '. $this->error_class($id, 'action', 'reason', 'action_reason') . '>' 
     1321            .'rows="3" cols="35" '. $this->error_class($id, 'action', 'reason', 'action_reason') . '>' 
    12441322            . Q($action['reason'], 'strict', false) . "</textarea>\n"; 
    12451323        $out .= '<br /><span class="label">' .Q($this->gettext('vacationsubject')) . '</span><br />' 
    12461324            .'<input type="text" name="_action_subject['.$id.']" id="action_subject'.$id.'" ' 
    1247             .'value="' . (is_array($action['subject']) ? Q(implode(', ', $action['subject']), 'strict', false) : $action['subject']) . '" size="50" ' 
     1325            .'value="' . (is_array($action['subject']) ? Q(implode(', ', $action['subject']), 'strict', false) : $action['subject']) . '" size="35" ' 
    12481326            . $this->error_class($id, 'action', 'subject', 'action_subject') .' />'; 
    12491327        $out .= '<br /><span class="label">' .Q($this->gettext('vacationaddresses')) . '</span><br />' 
    12501328            .'<input type="text" name="_action_addresses['.$id.']" id="action_addr'.$id.'" ' 
    1251             .'value="' . (is_array($action['addresses']) ? Q(implode(', ', $action['addresses']), 'strict', false) : $action['addresses']) . '" size="50" ' 
     1329            .'value="' . (is_array($action['addresses']) ? Q(implode(', ', $action['addresses']), 'strict', false) : $action['addresses']) . '" size="35" ' 
    12521330            . $this->error_class($id, 'action', 'addresses', 'action_addr') .' />'; 
    12531331        $out .= '<br /><span class="label">' . Q($this->gettext('vacationdays')) . '</span><br />' 
     
    15761654        // Kolab's KEP:14 
    15771655        if ($this->rc->config->get('managesieve_kolab_master')) { 
    1578             $this->sieve->script->set_var('editor', self::PROGNAME); 
    1579             $this->sieve->script->set_var('editor_version', self::VERSION); 
     1656            $this->sieve->script->set_var('EDITOR', self::PROGNAME); 
     1657            $this->sieve->script->set_var('EDITOR_VERSION', self::VERSION); 
    15801658        } 
    15811659 
    15821660        return $this->sieve->save($name); 
    15831661    } 
     1662 
     1663    /** 
     1664     * Returns list of rules from the current script 
     1665     * 
     1666     * @return array List of rules 
     1667     */ 
     1668    public function list_rules() 
     1669    { 
     1670        $result = array(); 
     1671        $i      = 1; 
     1672 
     1673        foreach ($this->script as $idx => $filter) { 
     1674            if ($filter['type'] != 'if') { 
     1675                continue; 
     1676            } 
     1677            $fname = $filter['name'] ? $filter['name'] : "#$i"; 
     1678            $result[] = array( 
     1679                'id'    => $idx, 
     1680                'name'  => Q($fname), 
     1681                'class' => $filter['disabled'] ? 'disabled' : '', 
     1682            ); 
     1683            $i++; 
     1684        } 
     1685 
     1686        return $result; 
     1687    } 
    15841688} 
  • trunk/plugins/managesieve/skins/default/managesieve.css

    r5334 r5340  
    1 #filterslist 
    2 { 
    3   position: absolute; 
    4   left: 20px; 
    5   top: 120px; 
    6   bottom: 20px; 
     1#filtersetslistbox 
     2{ 
     3  position: absolute; 
     4  top: 0; 
     5  bottom: 0; 
     6  left: 0; 
     7  width: 195px; 
     8  border: 1px solid #999999; 
     9  background-color: #F9F9F9; 
     10  overflow: hidden; 
     11  /* css hack for IE */ 
     12  height: expression(parseInt(this.parentNode.offsetHeight)+'px'); 
     13} 
     14 
     15#filtersscreen 
     16{ 
     17  position: absolute; 
     18  top: 0; 
     19  right: 0; 
     20  bottom: 0; 
     21  left: 205px; 
     22  /* css hack for IE */ 
     23  height: expression(parseInt(this.parentNode.offsetHeight)+'px'); 
     24} 
     25 
     26#filterslistbox 
     27{ 
     28  position: absolute; 
     29  left: 0; 
     30  top: 0; 
     31  bottom: 0; 
    732  border: 1px solid #999999; 
    833  overflow: auto; 
    934  /* css hack for IE */ 
    10   height: expression((parseInt(document.documentElement.clientHeight)-140)+'px'); 
    11 } 
    12  
    13 #filters-table 
     35  height: expression(parseInt(this.parentNode.offsetHeight)+'px'); 
     36} 
     37 
     38#filterslist, 
     39#filtersetslist 
    1440{ 
    1541  width: 100%; 
    1642  table-layout: fixed; 
    17   /* css hack for IE */ 
    18   width: expression(document.getElementById('filterslist').clientWidth); 
    19 } 
    20  
    21 #filters-table tbody td 
    22 { 
    23   cursor: pointer; 
    24 } 
    25  
    26 #filters-table tbody tr.disabled td 
     43} 
     44 
     45#filterslist tbody td, 
     46#filtersetslist tbody td 
     47{ 
     48  cursor: default; 
     49  text-overflow: ellipsis; 
     50  -o-text-overflow: ellipsis; 
     51} 
     52 
     53#filterslist tbody tr.disabled td, 
     54#filtersetslist tbody tr.disabled td 
    2755{ 
    2856  color: #999999; 
    2957} 
    3058 
    31 #filtersbuttons 
    32 { 
    33   position: absolute; 
    34   left: 20px; 
    35   top: 85px; 
    36 } 
    37  
    38 #filtersetsbuttons 
    39 { 
    40   position: absolute; 
    41   left: 230px; 
    42   top: 85px; 
    43 } 
    44  
    45 #filtersbuttons a, 
    46 #filtersetsbuttons a 
    47 { 
    48   display: block; 
    49   float: left; 
    50 } 
    51  
    52 #filtersbuttons a.button, 
    53 #filtersbuttons a.buttonPas, 
    54 #filtersetsbuttons a.button, 
    55 #filtersetsbuttons a.buttonPas 
    56 { 
    57   display: block; 
    58   float: left; 
    59   width: 32px; 
    60   height: 32px; 
    61   padding: 0; 
    62   margin-right: 3px; 
    63   overflow: hidden; 
    64   background: url(images/toolbar.png) 0 0 no-repeat transparent; 
    65   opacity: 0.99; /* this is needed to make buttons appear correctly in Chrome */ 
    66 } 
    67  
    68 #filtersbuttons a.buttonPas, 
    69 #filtersetsbuttons a.buttonPas 
    70 { 
    71   filter: alpha(opacity=35); 
    72   opacity: 0.35; 
    73 } 
    74  
    75 #filtersbuttons a.add { 
    76   background-position: 0px 0px; 
    77 } 
    78  
    79 #filtersbuttons a.addsel { 
    80   background-position: 0 -32px; 
    81 } 
    82  
    83 #filtersbuttons a.del { 
    84   background-position: -32px 0px; 
    85 } 
    86  
    87 #filtersbuttons a.delsel { 
    88   background-position: -32px -32px; 
    89 } 
    90  
    91 #filtersbuttons a.up { 
    92   background-position: -64px 0px; 
    93 } 
    94  
    95 #filtersbuttons a.upsel { 
    96   background-position: -64px -32px; 
    97 } 
    98  
    99 #filtersbuttons a.down { 
    100   background-position: -96px 0px; 
    101 } 
    102  
    103 #filtersbuttons a.downsel { 
    104   background-position: -96px -32px; 
    105 } 
    106  
    107 #filtersetsbuttons a.setadd { 
    108   background-position: -128px 0px; 
    109 } 
    110  
    111 #filtersetsbuttons a.setaddsel { 
    112   background-position: -128px -32px; 
    113 } 
    114  
    115 #filtersetsbuttons a.setdel { 
    116   background-position: -160px 0px; 
    117 } 
    118  
    119 #filtersetsbuttons a.setdelsel { 
    120   background-position: -160px -32px; 
    121 } 
    122  
    123 #filtersetsbuttons a.setset { 
    124   background-position: -192px 0px; 
    125 } 
    126  
    127 #filtersetsbuttons a.setsetsel { 
    128   background-position: -192px -32px; 
    129 } 
    130  
    131 #filtersetsbuttons a.setget { 
    132   background-position: -224px 0px; 
    133 } 
    134  
    135 #filtersetsbuttons a.setgetsel { 
    136   background-position: -224px -32px; 
    137 } 
    138  
    139 #filtersetselect 
    140 { 
    141   position: absolute; 
    142   left: 375px; 
    143   top: 90px; 
     59#filtersetslist tbody td 
     60{ 
     61  font-weight: bold; 
     62} 
     63/* 
     64#filtersetslist tr.selected 
     65{ 
     66  background-color: #929292; 
     67  border-bottom: 1px solid #898989; 
     68  color: #FFF; 
     69  font-weight: bold; 
     70} 
     71*/ 
     72 
     73#filterslist tbody tr.filtermoveup td 
     74{ 
     75  border-top: 2px dotted #555; 
     76  padding-top: 0px; 
     77} 
     78 
     79#filterslist tbody tr.filtermovedown td 
     80{ 
     81  border-bottom: 2px dotted #555; 
     82  padding-bottom: 1px; 
    14483} 
    14584 
     
    14786{ 
    14887  position: absolute; 
    149   top: 120px; 
    150   right: 20px; 
    151   bottom: 20px; 
     88  top: 0; 
     89  right: 0; 
     90  bottom: 0; 
    15291  border: 1px solid #999999; 
    15392  overflow: hidden; 
    15493  /* css hack for IE */ 
    155   width: expression((parseInt(document.documentElement.clientWidth)-40-parseInt(document.getElementById('filterslist').offsetWidth))+'px'); 
    156   height: expression((parseInt(document.documentElement.clientHeight)-140)+'px'); 
     94  width: expression((parseInt(this.parentNode.offsetWidth)-20-parseInt(document.getElementById('filterslistbox').offsetWidth))+'px'); 
     95  height: expression(parseInt(this.parentNode.offsetHeight)+'px'); 
    15796} 
    15897 
     
    164103body.iframe 
    165104{ 
    166   min-width: 740px; 
    167   width: expression(Math.max(740, document.documentElement.clientWidth)+'px'); 
     105  min-width: 620px; 
     106  width: expression(Math.max(620, document.documentElement.clientWidth)+'px'); 
    168107  background-color: #F2F2F2; 
    169108} 
     
    171110#filter-form 
    172111{ 
    173   min-width: 650px; 
     112  min-width: 550px; 
    174113  white-space: nowrap; 
    175114  padding: 20px 10px 10px 10px; 
     
    208147  padding: 0px; 
    209148  width: 100%; 
     149  min-width: 620px; 
    210150} 
    211151 
     
    227167  white-space: nowrap; 
    228168  width: 98%; 
    229   padding-left: 10px; 
     169  padding-left: 3px; 
    230170} 
    231171 
     
    244184{ 
    245185  border: 0; 
     186} 
     187 
     188select.operator_selector 
     189{ 
     190  width: 200px; 
    246191} 
    247192 
     
    318263} 
    319264 
     265#filter-form select, 
     266#filter-form input, 
     267#filter-form textarea 
     268{ 
     269  font-size: 11px; 
     270} 
     271 
    320272/* fixes for popup window */ 
    321273 
  • trunk/plugins/managesieve/skins/default/templates/managesieve.html

    r3592 r5340  
    99 
    1010<style type="text/css"> 
    11 #filterslist { width: <roundcube:exp expression="!empty(cookie:sieveviewsplitter) ? cookie:sieveviewsplitter-5 : 210" />px; } 
     11#filterslistbox { width: <roundcube:exp expression="!empty(cookie:sieveviewsplitter) ? cookie:sieveviewsplitter-5 : 210" />px; } 
    1212#filter-box { left: <roundcube:exp expression="!empty(cookie:sieveviewsplitter) ? cookie:sieveviewsplitter+5 : 220" />px; 
    1313<roundcube:exp expression="browser:ie ? ('width:expression((parseInt(this.parentNode.offsetWidth)-'.(!empty(cookie:sieveviewsplitter) ? cookie:sieveviewsplitter+5 : 220).')+\\'px\\');') : ''" /> 
     14} 
     15#filtersetslistbox { width: <roundcube:exp expression="!empty(cookie:sieveviewsplitter2) ? cookie:sieveviewsplitter2-5 : 175" />px; } 
     16#filtersscreen { left: <roundcube:exp expression="!empty(cookie:sieveviewsplitter2) ? cookie:sieveviewsplitter2+5 : 185" />px; 
     17<roundcube:exp expression="browser:ie ? ('width:expression((parseInt(this.parentNode.offsetWidth)-'.(!empty(cookie:sieveviewsplitter2) ? cookie:sieveviewsplitter2+5 : 185).')+\\'px\\');') : ''" /> 
    1418} 
    1519</style> 
    1620 
    1721</head> 
    18 <body> 
     22<body onload="rcube_init_mail_ui()"> 
    1923 
    2024<roundcube:include file="/includes/taskbar.html" /> 
     
    2226<roundcube:include file="/includes/settingstabs.html" /> 
    2327 
    24 <div id="filtersbuttons"> 
    25 <roundcube:button command="plugin.managesieve-add" type="link" class="buttonPas add" classSel="button addsel" classAct="button add" title="managesieve.filteradd" content=" " /> 
    26 <roundcube:button command="plugin.managesieve-del" type="link" class="buttonPas del" classSel="button delsel" classAct="button del" title="managesieve.filterdel" content=" " /> 
    27 <roundcube:button command="plugin.managesieve-up" type="link" class="buttonPas up" classSel="button upsel" classAct="button up" title="managesieve.moveup" content=" " /> 
    28 <roundcube:button command="plugin.managesieve-down" type="link" class="buttonPas down" classSel="button downsel" classAct="button down" title="managesieve.movedown" content=" " /> 
     28<div id="mainscreen"> 
     29 
     30<div id="filtersetslistbox"> 
     31<div id="filtersetslist-title" class="boxtitle"><roundcube:label name="managesieve.filtersets" /></div> 
     32<div class="boxlistcontent"> 
     33  <roundcube:object name="filtersetslist" id="filtersetslist" class="records-table" cellspacing="0" summary="Filters list" type="list" noheader="true" /> 
     34</div> 
     35<div class="boxfooter"> 
     36  <roundcube:button command="plugin.managesieve-setadd" type="link" title="managesieve.filtersetadd" class="buttonPas addfilterset" classAct="button addfilterset" content=" " /> 
     37  <roundcube:button name="filtersetmenulink" id="filtersetmenulink" type="link" title="moreactions" class="button groupactions" onclick="rcmail_ui.show_popup('filtersetmenu', undefined, {above:1});return false" content=" " /> 
     38</div> 
    2939</div> 
    3040 
    31 <div id="filtersetsbuttons"> 
    32 <roundcube:button command="plugin.managesieve-setadd" type="link" class="buttonPas setadd" classSel="button setaddsel" classAct="button setadd" title="managesieve.filtersetadd" content=" " /> 
    33 <roundcube:button command="plugin.managesieve-setdel" type="link" class="buttonPas setdel" classSel="button setdelsel" classAct="button setdel" title="managesieve.filtersetdel" content=" " /> 
    34 <roundcube:button command="plugin.managesieve-setact" type="link" class="buttonPas setset" classSel="button setsetsel" classAct="button setset" content=" " /> 
    35 <roundcube:button command="plugin.managesieve-setget" type="link" class="buttonPas setget" classSel="button setgetsel" classAct="button setget" title="managesieve.filtersetget" content=" " /> 
     41<div id="filtersscreen"> 
     42<div id="filterslistbox"> 
     43<div class="boxtitle"><roundcube:label name="managesieve.filters" /></div> 
     44<div class="boxlistcontent"> 
     45  <roundcube:object name="filterslist" id="filterslist" class="records-table" cellspacing="0" summary="Filters list" noheader="true" /> 
    3646</div> 
    37 <div id="filtersetselect"> 
    38 <roundcube:label name="managesieve.filterset" />: 
    39 <roundcube:object name="filtersetslist" id="filtersets-select" /> 
     47<div class="boxfooter"> 
     48  <roundcube:button command="plugin.managesieve-add" type="link" title="managesieve.filteradd" class="buttonPas addfilter" classAct="button addfilter" content=" " /> 
     49  <roundcube:button name="filtermenulink" id="filtermenulink" type="link" title="moreactions" class="button groupactions" onclick="rcmail_ui.show_popup('filtermenu', undefined, {above:1});return false" content=" " /> 
     50</div> 
    4051</div> 
    4152 
    42 <div id="filterslist"> 
    43 <roundcube:object name="filterslist" id="filters-table" class="records-table" cellspacing="0" summary="Filters list" /> 
    44 </div> 
    4553<script type="text/javascript"> 
    46   var sieveviewsplit = new rcube_splitter({id:'sieveviewsplitter', p1: 'filterslist', p2: 'filter-box', orientation: 'v', relative: true, start: 215}); 
     54  var sieveviewsplit2 = new rcube_splitter({id:'sieveviewsplitter2', p1: 'filtersetslistbox', p2: 'filtersscreen', orientation: 'v', relative: true, start: 200}); 
     55  rcmail.add_onload('sieveviewsplit2.init()'); 
     56 
     57  var sieveviewsplit = new rcube_splitter({id:'sieveviewsplitter', p1: 'filterslistbox', p2: 'filter-box', orientation: 'v', relative: true, start: 215}); 
    4758  rcmail.add_onload('sieveviewsplit.init()'); 
    4859</script> 
     60 
    4961<div id="filter-box"> 
    50 <roundcube:object name="filterframe" id="filter-frame" width="100%" height="100%" frameborder="0" src="/watermark.html" /> 
     62  <roundcube:object name="filterframe" id="filter-frame" width="100%" height="100%" frameborder="0" src="/watermark.html" /> 
     63</div> 
     64 
     65</div> 
     66</div> 
     67</div> 
     68 
     69<div id="filtersetmenu" class="popupmenu"> 
     70  <ul> 
     71    <li><roundcube:button command="plugin.managesieve-setact" label="managesieve.enable" classAct="active" /></li> 
     72    <li><roundcube:button command="plugin.managesieve-setdel" label="delete" classAct="active" /></li> 
     73    <li class="separator_above"><roundcube:button command="plugin.managesieve-setget" label="download" classAct="active" /></li> 
     74    <roundcube:container name="filtersetoptions" id="filtersetmenu" /> 
     75  </ul> 
     76</div> 
     77 
     78<div id="filtermenu" class="popupmenu"> 
     79  <ul> 
     80    <li><roundcube:button command="plugin.managesieve-act" label="managesieve.enable" classAct="active" /></li> 
     81    <li><roundcube:button command="plugin.managesieve-del" label="delete" classAct="active" /></li> 
     82    <roundcube:container name="filteroptions" id="filtermenu" /> 
     83  </ul> 
    5184</div> 
    5285 
  • trunk/plugins/managesieve/tests/parser_kep14.phpt

    r5325 r5340  
    77 
    88$txt = ' 
    9 # set "editor" "Roundcube"; 
    10 # set "editor_version" "123"; 
     9# EDITOR Roundcube 
     10# EDITOR_VERSION 123 
    1111'; 
    1212 
     
    1616?> 
    1717--EXPECT-- 
    18 # set "editor" "Roundcube"; 
    19 # set "editor_version" "123"; 
     18# EDITOR Roundcube 
     19# EDITOR_VERSION 123 
Note: See TracChangeset for help on using the changeset viewer.