Allow group identifiers to be changed upon renaming (used in LDAP)

release-0.6
thomascube 14 years ago
parent bfb7d6e681
commit 360bd3ea74

@ -310,9 +310,10 @@ abstract class rcube_addressbook
* *
* @param string Group identifier * @param string Group identifier
* @param string New name to set for this group * @param string New name to set for this group
* @param string New group identifier (if changed, otherwise don't set)
* @return boolean New name on success, false if no data was changed * @return boolean New name on success, false if no data was changed
*/ */
function rename_group($gid, $newname) function rename_group($gid, $newname, &$newid)
{ {
/* empty for address books don't supporting groups */ /* empty for address books don't supporting groups */
return false; return false;

@ -995,9 +995,10 @@ class rcube_ldap extends rcube_addressbook
* *
* @param string Group identifier * @param string Group identifier
* @param string New name to set for this group * @param string New name to set for this group
* @param string New group identifier (if changed, otherwise don't set)
* @return boolean New name on success, false if no data was changed * @return boolean New name on success, false if no data was changed
*/ */
function rename_group($group_id, $new_name) function rename_group($group_id, $new_name, &$new_id)
{ {
if (!$this->group_cache) if (!$this->group_cache)
$this->list_groups(); $this->list_groups();
@ -1006,6 +1007,7 @@ class rcube_ldap extends rcube_addressbook
$group_name = $this->group_cache[$group_id]['name']; $group_name = $this->group_cache[$group_id]['name'];
$old_dn = "cn=$group_name,$base_dn"; $old_dn = "cn=$group_name,$base_dn";
$new_rdn = "cn=$new_name"; $new_rdn = "cn=$new_name";
$new_id = base64_encode($new_rdn . ",$base_dn");
$res = ldap_rename($this->conn, $old_dn, $new_rdn, NULL, TRUE); $res = ldap_rename($this->conn, $old_dn, $new_rdn, NULL, TRUE);
if ($res === false) if ($res === false)

@ -3948,6 +3948,7 @@ function rcube_webmail()
this.env.contactfolders[key] = this.env.contactgroups[key] = prop; this.env.contactfolders[key] = this.env.contactgroups[key] = prop;
var link = $('<a>').attr('href', '#') var link = $('<a>').attr('href', '#')
.attr('rel', prop.source+':'+prop.id)
.bind('click', function() { return rcmail.command('listgroup', prop, this);}) .bind('click', function() { return rcmail.command('listgroup', prop, this);})
.html(prop.name); .html(prop.name);
var li = $('<li>').attr('id', 'rcmli'+key.replace(this.identifier_expr, '_')) var li = $('<li>').attr('id', 'rcmli'+key.replace(this.identifier_expr, '_'))
@ -3963,13 +3964,33 @@ function rcube_webmail()
{ {
this.reset_add_input(); this.reset_add_input();
var key = 'G'+prop.source+prop.id, link, li = this.get_folder_li(key); var key = 'G'+prop.source+prop.id,
li = this.get_folder_li(key),
link;
if (li && (link = li.firstChild) && link.tagName.toLowerCase() == 'a') // group ID has changed, replace link node and identifiers
if (li && prop.newid) {
var newkey = 'G'+prop.source+prop.newid;
li.id = String('rcmli'+newkey).replace(this.identifier_expr, '_');
this.env.contactfolders[newkey] = this.env.contactfolders[key];
this.env.group = prop.newid;
var newprop = $.extend({}, prop);
newprop.id = prop.newid;
newprop.type = 'group';
link = $('<a>').attr('href', '#')
.attr('rel', prop.source+':'+prop.newid)
.bind('click', function() { return rcmail.command('listgroup', newprop, this);})
.html(prop.name);
$(li).children().replaceWith(link);
}
// update displayed group name
else if (li && (link = li.firstChild) && link.tagName.toLowerCase() == 'a')
link.innerHTML = prop.name; link.innerHTML = prop.name;
this.env.contactfolders[key].name = this.env.contactgroups[key].name = prop.name; this.env.contactfolders[key].name = this.env.contactgroups[key].name = prop.name;
this.triggerEvent('group_update', { id:prop.id, source:prop.source, name:prop.name, li:li[0] }); this.triggerEvent('group_update', { id:prop.id, source:prop.source, name:prop.name, li:li[0], newid:prop.newid });
}; };

@ -91,7 +91,7 @@ else if ($RCMAIL->action == 'group-rename') {
$plugin = $RCMAIL->plugins->exec_hook('group_rename', array('group_id' => $gid, 'name' => $name, 'source' => $source)); $plugin = $RCMAIL->plugins->exec_hook('group_rename', array('group_id' => $gid, 'name' => $name, 'source' => $source));
if (!$plugin['abort']) if (!$plugin['abort'])
$newname = $CONTACTS->rename_group($gid, $plugin['name']); $newname = $CONTACTS->rename_group($gid, $plugin['name'], $newgid);
else else
$newname = $plugin['result']; $newname = $plugin['result'];
} }
@ -99,7 +99,7 @@ else if ($RCMAIL->action == 'group-rename') {
if ($newname && $OUTPUT->ajax_call) { if ($newname && $OUTPUT->ajax_call) {
$OUTPUT->show_message('grouprenamed', 'confirmation'); $OUTPUT->show_message('grouprenamed', 'confirmation');
$OUTPUT->command('update_contact_group', array( $OUTPUT->command('update_contact_group', array(
'source' => $source, 'id' => $gid, 'name' => $newname)); 'source' => $source, 'id' => $gid, 'name' => $newname, 'newid' => $newgid));
} }
else if (!$newname) else if (!$newname)
$OUTPUT->show_message($plugin['message'] ? $plugin['message'] : 'errorsaving', 'error'); $OUTPUT->show_message($plugin['message'] ? $plugin['message'] : 'errorsaving', 'error');

Loading…
Cancel
Save