Allow mass-removal of addresses from a group (#1487748)
| | |
| | | CHANGELOG Roundcube Webmail |
| | | =========================== |
| | | |
| | | - Fix removing all folders on import to LDAP addressbook |
| | | - Allow mass-removal of addresses from a group (#1487748) |
| | | - Fix removing all contacts on import to LDAP addressbook |
| | | - Fix so "Back" from compose/show doesn't reset search request (#1488238) |
| | | - Add option to delete messages instead of moving to Trash when in Junk folder (#1486686) |
| | | - Fix invisible cursor when replying to a html message (#1487073) |
| | |
| | | } |
| | | } |
| | | |
| | | // if a group is currently selected, and there is at least one contact selected |
| | | // thend we can enable the group-remove-selected command |
| | | this.enable_command('group-remove-selected', typeof this.env.group != 'undefined' && list.selection.length > 0); |
| | | |
| | | this.enable_command('compose', this.env.group || list.selection.length > 0); |
| | | this.enable_command('edit', id && writable); |
| | | this.enable_command('delete', list.selection.length && writable); |
| | |
| | | this.name_input.select().focus(); |
| | | }; |
| | | |
| | | //remove selected contacts from current active group |
| | | this.group_remove_selected = function() |
| | | { |
| | | ref.http_post('group-delmembers','_cid='+urlencode(this.contact_list.selection) |
| | | + '&_source='+urlencode(this.env.source) |
| | | + '&_gid='+urlencode(this.env.group)); |
| | | }; |
| | | |
| | | //callback after deleting contact(s) from current group |
| | | this.remove_group_contacts = function(props) |
| | | { |
| | | if('undefined' != typeof this.env.group && (this.env.group === props.gid)){ |
| | | var selection = this.contact_list.get_selection(); |
| | | for (var n=0; n<selection.length; n++) { |
| | | id = selection[n]; |
| | | this.contact_list.remove_row(id, (n == selection.length-1)); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | // handler for keyboard events on the input field |
| | | this.add_input_keydown = function(e) |
| | | { |
| | |
| | | $labels['newcontactgroup'] = 'Neue Adressgruppe erstellen'; |
| | | $labels['grouprename'] = 'Gruppe umbenennen'; |
| | | $labels['groupdelete'] = 'Gruppe löschen'; |
| | | $labels['groupremoveselected'] = 'Gewählte Kontakte aus Gruppe entfernen'; |
| | | $labels['previouspage'] = 'Eine Seite zurück'; |
| | | $labels['firstpage'] = 'Erste Seite'; |
| | | $labels['nextpage'] = 'Nächste Seite'; |
| | |
| | | $labels['newcontactgroup'] = 'Neue Kontaktgruppe erstellen'; |
| | | $labels['grouprename'] = 'Gruppe umbenennen'; |
| | | $labels['groupdelete'] = 'Gruppe löschen'; |
| | | $labels['groupremoveselected'] = 'Gewählte Kontakte aus Gruppe entfernen'; |
| | | $labels['previouspage'] = 'Seite zurück'; |
| | | $labels['firstpage'] = 'Erste Seite'; |
| | | $labels['nextpage'] = 'Nächste Seite'; |
| | |
| | | $labels['newcontactgroup'] = 'Create new contact group'; |
| | | $labels['grouprename'] = 'Rename group'; |
| | | $labels['groupdelete'] = 'Delete group'; |
| | | $labels['groupremoveselected'] = 'Remove selected contacts from group'; |
| | | |
| | | $labels['previouspage'] = 'Show previous page'; |
| | | $labels['firstpage'] = 'Show first page'; |
| | |
| | | else |
| | | $result = $plugin['result']; |
| | | |
| | | if ($result) |
| | | if ($result){ |
| | | $OUTPUT->show_message('contactremovedfromgroup'); |
| | | else |
| | | $OUTPUT->command('remove_group_contacts',array('source' => $source, 'gid' => $gid)); |
| | | }else{ |
| | | $OUTPUT->show_message($plugin['message'] ? $plugin['message'] : 'errorsaving', 'error'); |
| | | } |
| | | } |
| | | } |
| | | |
| | | else if ($RCMAIL->action == 'group-create') { |
| | | if ($name = trim(get_input_value('_name', RCUBE_INPUT_POST, true))) { |
| | |
| | | <ul> |
| | | <li><roundcube:button command="group-rename" label="grouprename" classAct="active" /></li> |
| | | <li><roundcube:button command="group-delete" label="groupdelete" classAct="active" /></li> |
| | | <li><roundcube:button command="group-remove-selected" label="group-remove-selected" classAct="active" /></li> |
| | | <li class="separator_above"><roundcube:button command="search-create" label="searchsave" classAct="active" /></li> |
| | | <li><roundcube:button command="search-delete" label="searchdelete" classAct="active" /></li> |
| | | <roundcube:container name="groupoptions" id="groupoptionsmenu" /> |
| | |
| | | position: absolute; |
| | | top: 42px; |
| | | left: 0; |
| | | width: 260px; |
| | | width: 280px; |
| | | bottom: 0; |
| | | } |
| | | |
| | | #contacts-box { |
| | | position: absolute; |
| | | top: 42px; |
| | | left: 272px; |
| | | left: 292px; |
| | | right: 0; |
| | | bottom: 0; |
| | | } |
| | |
| | | div.more-headers { |
| | | cursor: pointer; |
| | | height: 10px; |
| | | background: url(images/buttons.png) center -1539px no-repeat; |
| | | background: url(images/buttons.png) center -1579px no-repeat; |
| | | } |
| | | |
| | | div.hide-headers { |
| | | background-position: center -1549px; |
| | | background-position: center -1589px; |
| | | } |
| | | |
| | | #all-headers { |
| | |
| | | background-position: 2px -1502px; |
| | | } |
| | | |
| | | .boxfooter .listbutton.removegroup .inner { |
| | | background-position: 5px -1540px; |
| | | } |
| | | |
| | | .boxfooter .listbutton.disabled .inner { |
| | | opacity: 0.4; |
| | | filter: alpha(opacity=40); |
| | |
| | | } |
| | | |
| | | .toolbar a.button.spellcheck.selected { |
| | | background-position: left -1570px; |
| | | background-position: left -1610px; |
| | | color: #1978a1; |
| | | } |
| | | |
| | |
| | | <roundcube:object name="addresslist" id="contacts-table" class="listing" noheader="true" /> |
| | | </div> |
| | | <div class="boxfooter"> |
| | | <roundcube:button command="add" type="link" title="newcontact" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" content="+" /><roundcube:button command="delete" type="link" title="deletecontact" class="listbutton delete disabled" classAct="listbutton delete" innerClass="inner" content="x" /> |
| | | <roundcube:button command="add" type="link" title="newcontact" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" content="+" /><roundcube:button command="delete" type="link" title="deletecontact" class="listbutton delete disabled" classAct="listbutton delete" innerClass="inner" content="x" /><roundcube:button command="group-remove-selected" type="link" title="groupremoveselected" class="listbutton removegroup disabled" classAct="listbutton removegroup" innerClass="inner" content="-" /> |
| | | <roundcube:object name="recordsCountDisplay" class="countdisplay" label="fromtoshort" /> |
| | | </div> |
| | | <div class="boxpagenav"> |
| | |
| | | new rcube_splitter({ id:'addressviewsplitterd', p1:'#addressview-left', p2:'#addressview-right', |
| | | orientation:'v', relative:true, start:226, min:150, size:12, render:resize_leftcol }).init(); |
| | | new rcube_splitter({ id:'addressviewsplitter', p1:'#addresslist', p2:'#contacts-box', |
| | | orientation:'v', relative:true, start:266, min:220, size:12 }).init(); |
| | | orientation:'v', relative:true, start:286, min:270, size:12 }).init(); |
| | | |
| | | new rcube_scroller('#directorylist-content', '#directorylist-header', '#directorylist-footer'); |
| | | } |