Changeset 5340 in subversion
- Timestamp:
- Oct 17, 2011 6:50:37 AM (19 months ago)
- Location:
- trunk/plugins/managesieve
- Files:
-
- 10 edited
-
Changelog (modified) (2 diffs)
-
config.inc.php.dist (modified) (1 diff)
-
lib/rcube_sieve_script.php (modified) (2 diffs)
-
localization/en_US.inc (modified) (2 diffs)
-
localization/pl_PL.inc (modified) (4 diffs)
-
managesieve.js (modified) (11 diffs)
-
managesieve.php (modified) (24 diffs)
-
skins/default/managesieve.css (modified) (8 diffs)
-
skins/default/templates/managesieve.html (modified) (2 diffs)
-
tests/parser_kep14.phpt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/plugins/managesieve/Changelog
r5334 r5340 1 * version 5.0-beta [2011-10-17] 2 ----------------------------------------------------------- 1 3 - Added possibility to create a filter based on selected message "in-place" 2 4 - Fixed import from Horde-INGO (#1488064) … … 11 13 - Added Kolab's KEP:14 support (http://wiki.kolab.org/User:Greve/Drafts/KEP:14) 12 14 - 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) 13 19 14 20 * version 4.3 [2011-07-28] -
trunk/plugins/managesieve/config.inc.php.dist
r5300 r5340 61 61 $rcmail_config['managesieve_filename_extension'] = '.sieve'; 62 62 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 63 67 ?> -
trunk/plugins/managesieve/lib/rcube_sieve_script.php
r5325 r5340 188 188 } 189 189 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 } 195 201 } 196 202 } … … 424 430 } 425 431 // KEP:14 variables 426 else if (preg_match('/^# set "([^"]+)" "([^"]+)";$/', $line, $matches)) {432 else if (preg_match('/^# (EDITOR|EDITOR_VERSION) (.+)$/', $line, $matches)) { 427 433 $this->set_var($matches[1], $matches[2]); 428 434 } -
trunk/plugins/managesieve/localization/en_US.inc
r5155 r5340 44 44 $labels['vacationsubject'] = 'Message subject:'; 45 45 $labels['rulestop'] = 'Stop evaluating rules'; 46 $labels['enable'] = 'Enable/Disable'; 46 47 $labels['filterset'] = 'Filters set'; 48 $labels['filtersets'] = 'Filter sets'; 47 49 $labels['filtersetadd'] = 'Add filters set'; 48 50 $labels['filtersetdel'] = 'Delete current filters set'; 49 51 $labels['filtersetact'] = 'Activate current filters set'; 50 52 $labels['filtersetdeact'] = 'Deactivate current filters set'; 51 $labels['filtersetget'] = 'Download filters set in text format';52 53 $labels['filterdef'] = 'Filter definition'; 53 54 $labels['filtersetname'] = 'Filters set name'; … … 81 82 $labels['usedata'] = 'Use following data in the filter:'; 82 83 $labels['nextstep'] = 'Next Step'; 84 $labels['...'] = '...'; 83 85 84 86 $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.'; 91 93 $messages['filterdeleteconfirm'] = 'Do you really want to delete selected filter?'; 92 94 $messages['ruledeleteconfirm'] = 'Are you sure, you want to delete selected rule?'; 93 95 $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.'; 102 105 $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.'; 107 117 $messages['nodata'] = 'At least one position must be selected!'; 108 118 -
trunk/plugins/managesieve/localization/pl_PL.inc
r5161 r5340 10 10 $labels['filteradd'] = 'Dodaj filtr'; 11 11 $labels['filterdel'] = 'UsuÅ filtr'; 12 $labels['moveup'] = 'PrzenieÅ wyÅŒej'; 13 $labels['movedown'] = 'PrzenieÅ niÅŒej'; 12 $labels['enable'] = 'WÅÄ 13 cz/WyÅÄ 14 cz'; 15 $labels['filtersets'] = 'Zbiory fitrów'; 14 16 $labels['filterallof'] = 'speÅniajÄ 15 17 cych wszystkie poniÅŒsze kryteria'; … … 60 62 $labels['filtersetdeact'] = 'Deaktywuj bieÅŒÄ 61 63 cy zbiór filtrów'; 62 $labels['filtersetget'] = 'Pobierz bieÅŒÄ63 cy zbiór filtrów w formacie tekstowym';64 64 $labels['filterdef'] = 'Definicja filtra'; 65 65 $labels['filtersetname'] = 'Nazwa zbioru'; … … 96 96 cych danych do utworzenia filtra:'; 97 97 $labels['nextstep'] = 'NastÄpny krok'; 98 $labels['...'] = '...'; 98 99 99 100 $messages = array(); 100 101 $messages['filterunknownerror'] = 'Nieznany bÅÄ 101 d serwera ';102 d serwera.'; 102 103 $messages['filterconnerror'] = 'Nie moÅŒna nawiÄ 103 104 zaÄ poÅÄ 104 czenia z serwerem managesieve';105 czenia z serwerem.'; 105 106 $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ÅÄ 108 d serwera.'; 109 $messages['filterdeleted'] = 'Filtr zostaÅ usuniÄty pomyÅlnie.'; 110 110 $messages['filterdeleteconfirm'] = 'Czy na pewno chcesz usunÄ 111 111 Ä wybrany filtr?'; 112 $messages['filtersaved'] = 'Filtr zostaÅ zapisany pomyÅlnie ';112 $messages['filtersaved'] = 'Filtr zostaÅ zapisany pomyÅlnie.'; 113 113 $messages['filtersaveerror'] = 'Nie moÅŒna zapisaÄ filtra. WystÄ 114 114 piÅ bÅÄ … … 120 120 Ä wybranÄ 121 121 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.'; 124 124 $messages['setactivateerror'] = 'Nie moÅŒna aktywowaÄ wybranego zbioru filtrów. BÅÄ 125 d serwera ';125 d serwera.'; 126 126 $messages['setdeactivateerror'] = 'Nie moÅŒna deaktywowaÄ wybranego zbioru filtrów. BÅÄ 127 d serwera ';127 d serwera.'; 128 128 $messages['setdeleteerror'] = 'Nie moÅŒna usunÄ 129 129 Ä 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 ';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.'; 134 134 $messages['setdeleteconfirm'] = 'Czy na pewno chcesz usunÄ 135 135 Ä wybrany zbiór filtrów?'; 136 136 $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'; 137 d serwera.'; 138 $messages['setcreated'] = 'Zbiór filtrów zostaÅ utworzony pomyÅlnie.'; 141 139 $messages['nodata'] = 'NaleÅŒy wybraÄ co najmniej jednÄ 142 140 pozycjÄ!'; 141 $messages['ruleexist'] = 'Filtr o podanej nazwie juÅŒ istnieje.'; 142 $messages['activateerror'] = 'Nie moÅŒna wÅÄ 143 czyÄ wybranych filtrów. BÅÄ 144 d serwera.'; 145 $messages['deactivateerror'] = 'Nie moÅŒna wyÅÄ 146 czyÄ wybranych filtrów. BÅÄ 147 d serwera.'; 148 $messages['activated'] = 'Filtr(y) wyÅÄ 149 czono pomyÅlnie.'; 150 $messages['deactivated'] = 'Filtr(y) wÅÄ 151 czono pomyÅlnie.'; 152 $messages['moved'] = 'Filter zostaÅ przeniesiony pomyÅlnie.'; 153 $messages['moveerror'] = 'Nie moÅŒna przenieÅÄ wybranego filtra. BÅÄ 154 d serwera.'; 155 $messages['nametoolong'] = 'Zbyt dÅuga nazwa.'; 156 $messages['namereserved'] = 'Nazwa zarezerwowana.'; 157 $messages['setexist'] = 'Zbiór juÅŒ istnieje.'; 143 158 144 159 ?> -
trunk/plugins/managesieve/managesieve.js
r5334 r5340 32 32 // register commands 33 33 rcmail.register_command('plugin.managesieve-save', function() { rcmail.managesieve_save() }); 34 rcmail.register_command('plugin.managesieve-act', function() { rcmail.managesieve_act() }); 34 35 rcmail.register_command('plugin.managesieve-add', function() { rcmail.managesieve_add() }); 35 36 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() }); 39 38 rcmail.register_command('plugin.managesieve-setadd', function() { rcmail.managesieve_setadd() }); 40 39 rcmail.register_command('plugin.managesieve-setdel', function() { rcmail.managesieve_setdel() }); … … 45 44 if (rcmail.gui_objects.sieveform) { 46 45 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 47 52 // resize dialog window 48 53 if (rcmail.env.action == 'plugin.managesieve' && rcmail.env.task == 'mail') { 49 54 parent.rcmail.managesieve_dialog_resize(rcmail.gui_objects.sieveform); 50 55 } 56 51 57 $('input[type="text"]:first', rcmail.gui_objects.sieveform).focus(); 52 58 } … … 55 61 } 56 62 63 var i, p = rcmail, setcnt, set = rcmail.env.currentset; 64 57 65 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}); 60 68 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 }; 61 75 rcmail.filters_list.init(); 62 76 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; 64 92 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); 70 95 } 71 96 } … … 76 101 77 102 /*********************************************************/ 78 /********* Managesieve filters methods*********/103 /********* Managesieve UI methods *********/ 79 104 /*********************************************************/ 80 105 … … 88 113 { 89 114 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 122 rcube_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 132 rcube_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 140 rcube_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]); 107 150 }; 108 151 … … 116 159 }; 117 160 118 rcube_webmail.prototype.managesieve_updatelist = function(action, name, id, disabled) 161 // Returns set's identifier 162 rcube_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 170 rcube_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 178 rcube_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 187 rcube_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 198 rcube_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 211 rcube_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 223 rcube_webmail.prototype.managesieve_updatelist = function(action, o) 119 224 { 120 225 this.set_busy(true); 121 226 122 227 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(); 127 235 this.show_contentframe(false); 236 this.enable_command('plugin.managesieve-del', 'plugin.managesieve-act', false); 128 237 129 238 // re-numbering filters 130 var i, rows = this.filters_list.rows;131 239 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) 133 241 rows[i].uid = rows[i].uid-1; 134 242 } 243 135 244 break; 136 245 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); 159 298 } 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 162 305 break; 163 306 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'); 186 314 } 187 // ... and disable/enable Up button 188 this.filters_listbuttons(); 315 else 316 row.addClass('disabled'); 317 189 318 break; 190 319 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 else199 $(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 202 331 break; 203 332 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 232 346 break; 233 347 } 234 348 235 349 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();253 350 }; 254 351 … … 256 353 rcube_webmail.prototype.load_managesieveframe = function(id) 257 354 { 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); 264 357 265 358 if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) { … … 271 364 }; 272 365 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 367 rcube_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 375 rcube_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 389 rcube_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 398 rcube_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 411 rcube_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 307 422 rcube_webmail.prototype.managesieve_ruleadd = function(id) 308 423 { … … 414 529 }; 415 530 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); 531 function 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 555 function 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 563 function rule_join_radio(value) 564 { 565 $('#rules').css('display', value == 'any' ? 'none' : 'block'); 566 }; 567 568 function 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 } 500 599 }; 501 600 … … 522 621 tip.html(e.data.str) 523 622 top -= tip.height(); 524 623 525 624 tip.css({left: left, top: top}).show(); 526 625 }) 527 626 .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';600 627 } 601 628 }; … … 679 706 { 680 707 var dialog = this.env.managesieve_dialog; 681 708 682 709 // BUG(?): if we don't remove the iframe first, it will be reloaded 683 710 dialog.html(''); -
trunk/plugins/managesieve/managesieve.php
r5334 r5340 217 217 218 218 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); 220 220 } 221 221 else if (!empty($_SESSION['managesieve_current'])) { … … 245 245 if ($this->sieve->save_script($script_name, $content)) { 246 246 $this->activate_script($script_name); 247 $this->list[] = $script_name; 247 248 } 248 249 } … … 279 280 $this->exts = $this->sieve->get_extensions(); 280 281 $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); 283 283 $_SESSION['managesieve_current'] = $this->sieve->current; 284 284 } … … 295 295 // Handle user requests 296 296 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) { 329 300 if (isset($this->script[$fid])) { 330 301 if ($this->sieve->script->delete_rule($fid)) … … 333 304 if ($result === true) { 334 305 $this->rc->output->show_message('managesieve.filterdeleted', 'confirmation'); 335 $this->rc->output->command('managesieve_updatelist', 'del ete', '', $fid);306 $this->rc->output->command('managesieve_updatelist', 'del', array('id' => $fid)); 336 307 } else { 337 308 $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'); 338 371 } 339 372 } … … 342 375 $script_name = get_input_value('_set', RCUBE_INPUT_GPC); 343 376 $result = $this->activate_script($script_name); 377 $kep14 = $this->rc->config->get('managesieve_kolab_master'); 344 378 345 379 if ($result === true) { 346 380 $this->rc->output->set_env('active_sets', $this->active); 347 381 $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)); 349 384 } else { 350 385 $this->rc->output->show_message('managesieve.setactivateerror', 'error'); … … 358 393 $this->rc->output->set_env('active_sets', $this->active); 359 394 $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)); 361 397 } else { 362 398 $this->rc->output->show_message('managesieve.setdeactivateerror', 'error'); … … 369 405 if ($result === true) { 370 406 $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)); 372 409 $this->rc->session->remove('managesieve_current'); 373 410 } else { … … 401 438 exit; 402 439 } 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') { 404 446 $rid = get_input_value('_rid', RCUBE_INPUT_GPC); 405 447 $id = $this->genid(); … … 408 450 $this->rc->output->command('managesieve_rulefill', $content, $id, $rid); 409 451 } 410 else if ($action == 'actionadd') {452 else if ($action == 'actionadd') { 411 453 $aid = get_input_value('_aid', RCUBE_INPUT_GPC); 412 454 $id = $this->genid(); … … 465 507 if (!empty($_POST['_newset'])) { 466 508 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 } 475 531 else if ($from == 'file') { 476 532 // from file … … 482 538 $this->sieve->load_script($file); 483 539 if (!$this->save_script($name)) { 484 $ error = 'managesieve.setcreateerror';540 $this->errors['file'] = $this->gettext('setcreateerror'); 485 541 } 486 542 } 487 543 else { // upload failed 488 544 $err = $_FILES['_file']['error']; 489 $error = true;490 545 491 546 if ($err == UPLOAD_ERR_INI_SIZE || $err == UPLOAD_ERR_FORM_SIZE) { … … 495 550 } 496 551 else { 497 $ error = 'fileuploaderror';552 $this->errors['file'] = $this->gettext('fileuploaderror'); 498 553 } 499 554 } … … 503 558 } 504 559 505 if (!$error ) {560 if (!$error && empty($this->errors)) { 506 561 $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)); 508 564 } else if ($msg) { 509 565 $this->rc->output->command('display_message', $msg, 'error'); 510 } else {566 } else if ($error) { 511 567 $this->rc->output->show_message($error, 'error'); 512 568 } … … 753 809 $this->rc->output->show_message('managesieve.filtersaved', 'confirmation'); 754 810 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 )); 760 818 } 761 819 else { … … 798 856 799 857 // 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(); 815 861 816 862 // create XHTML table … … 836 882 $list = $this->list_scripts(); 837 883 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 } 849 920 850 921 // set client env 851 922 if (!$no_env) { 852 923 $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'); 859 925 } 860 926 … … 911 977 912 978 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 } 917 987 918 988 $out .= '<br /><input type="radio" id="from_set" name="_from" value="set"' … … 924 994 // script upload box 925 995 $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' : ''))); 927 997 928 998 $out .= '<br /><input type="radio" id="from_file" name="_from" value="file"' … … 933 1003 934 1004 $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(); 935 1012 936 1013 return $out; … … 1096 1173 <input type="text" name="_custom_header[]" id="custom_header_i'.$id.'" ' 1097 1174 . $this->error_class($id, 'test', 'header', 'custom_header_i') 1098 .' value="' .Q($custom). '" size=" 20" /> </div>' . "\n";1175 .' value="' .Q($custom). '" size="15" /> </div>' . "\n"; 1099 1176 1100 1177 // matching type select (operator) 1101 1178 $select_op = new html_select(array('name' => "_rule_op[]", 'id' => 'rule_op'.$id, 1102 1179 'style' => 'display:' .($rule['test']!='size' ? 'inline' : 'none'), 1180 'class' => 'operator_selector', 1103 1181 'onchange' => 'rule_op_select('.$id.')')); 1104 1182 $select_op->add(Q($this->gettext('filtercontains')), 'contains'); … … 1228 1306 // shared targets 1229 1307 $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" ' 1231 1309 .'style="display:' .($action['type']=='redirect' ? 'inline' : 'none') .'" ' 1232 1310 . $this->error_class($id, 'action', 'target', 'action_target') .' />'; 1233 1311 $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') 1235 1313 .'style="display:' .(in_array($action['type'], array('reject', 'ereject')) ? 'inline' : 'none') .'">' 1236 1314 . (in_array($action['type'], array('reject', 'ereject')) ? Q($action['target'], 'strict', false) : '') … … 1241 1319 $out .= '<span class="label">'. Q($this->gettext('vacationreason')) .'</span><br />' 1242 1320 .'<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') . '>' 1244 1322 . Q($action['reason'], 'strict', false) . "</textarea>\n"; 1245 1323 $out .= '<br /><span class="label">' .Q($this->gettext('vacationsubject')) . '</span><br />' 1246 1324 .'<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" ' 1248 1326 . $this->error_class($id, 'action', 'subject', 'action_subject') .' />'; 1249 1327 $out .= '<br /><span class="label">' .Q($this->gettext('vacationaddresses')) . '</span><br />' 1250 1328 .'<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" ' 1252 1330 . $this->error_class($id, 'action', 'addresses', 'action_addr') .' />'; 1253 1331 $out .= '<br /><span class="label">' . Q($this->gettext('vacationdays')) . '</span><br />' … … 1576 1654 // Kolab's KEP:14 1577 1655 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); 1580 1658 } 1581 1659 1582 1660 return $this->sieve->save($name); 1583 1661 } 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 } 1584 1688 } -
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; 7 32 border: 1px solid #999999; 8 33 overflow: auto; 9 34 /* 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 14 40 { 15 41 width: 100%; 16 42 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 27 55 { 28 56 color: #999999; 29 57 } 30 58 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; 144 83 } 145 84 … … 147 86 { 148 87 position: absolute; 149 top: 120px;150 right: 20px;151 bottom: 20px;88 top: 0; 89 right: 0; 90 bottom: 0; 152 91 border: 1px solid #999999; 153 92 overflow: hidden; 154 93 /* 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'); 157 96 } 158 97 … … 164 103 body.iframe 165 104 { 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'); 168 107 background-color: #F2F2F2; 169 108 } … … 171 110 #filter-form 172 111 { 173 min-width: 650px;112 min-width: 550px; 174 113 white-space: nowrap; 175 114 padding: 20px 10px 10px 10px; … … 208 147 padding: 0px; 209 148 width: 100%; 149 min-width: 620px; 210 150 } 211 151 … … 227 167 white-space: nowrap; 228 168 width: 98%; 229 padding-left: 10px;169 padding-left: 3px; 230 170 } 231 171 … … 244 184 { 245 185 border: 0; 186 } 187 188 select.operator_selector 189 { 190 width: 200px; 246 191 } 247 192 … … 318 263 } 319 264 265 #filter-form select, 266 #filter-form input, 267 #filter-form textarea 268 { 269 font-size: 11px; 270 } 271 320 272 /* fixes for popup window */ 321 273 -
trunk/plugins/managesieve/skins/default/templates/managesieve.html
r3592 r5340 9 9 10 10 <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; } 12 12 #filter-box { left: <roundcube:exp expression="!empty(cookie:sieveviewsplitter) ? cookie:sieveviewsplitter+5 : 220" />px; 13 13 <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\\');') : ''" /> 14 18 } 15 19 </style> 16 20 17 21 </head> 18 <body >22 <body onload="rcube_init_mail_ui()"> 19 23 20 24 <roundcube:include file="/includes/taskbar.html" /> … … 22 26 <roundcube:include file="/includes/settingstabs.html" /> 23 27 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> 29 39 </div> 30 40 31 <div id="filters etsbuttons">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" /> 36 46 </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> 40 51 </div> 41 52 42 <div id="filterslist">43 <roundcube:object name="filterslist" id="filters-table" class="records-table" cellspacing="0" summary="Filters list" />44 </div>45 53 <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}); 47 58 rcmail.add_onload('sieveviewsplit.init()'); 48 59 </script> 60 49 61 <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> 51 84 </div> 52 85 -
trunk/plugins/managesieve/tests/parser_kep14.phpt
r5325 r5340 7 7 8 8 $txt = ' 9 # set "editor" "Roundcube";10 # set "editor_version" "123";9 # EDITOR Roundcube 10 # EDITOR_VERSION 123 11 11 '; 12 12 … … 16 16 ?> 17 17 --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.
