Merge branch 'master' of ssh://git.kolab.org/git/roundcubemail-plugins-kolab

This commit is contained in:
Thomas Bruederli 2013-09-12 09:59:22 +02:00
commit ea56bf9c1b
4 changed files with 62 additions and 7 deletions

View file

@ -286,19 +286,20 @@ class rcube_kolab_contacts extends rcube_addressbook
} }
$ids = array_keys($this->contacts); $ids = array_keys($this->contacts);
$this->result->count = count($this->contacts);
} }
else if (is_array($this->filter['ids'])) { else if (is_array($this->filter['ids'])) {
$ids = $this->filter['ids']; $ids = $this->filter['ids'];
if ($this->result->count = count($ids)) { if (count($ids)) {
$uids = array_map(array($this, 'id2uid'), $this->filter['ids']); $uids = array_map(array($this, 'id2uid'), $this->filter['ids']);
$this->_fetch_contacts(array(array('uid', '=', $uids))); $this->_fetch_contacts(array(array('uid', '=', $uids)));
} }
else {
$this->contacts = array();
}
} }
else { else {
$this->_fetch_contacts(); $this->_fetch_contacts();
$ids = array_keys($this->contacts); $ids = array_keys($this->contacts);
$this->result->count = count($ids);
} }
// sort data arrays according to desired list sorting // sort data arrays according to desired list sorting
@ -309,6 +310,8 @@ class rcube_kolab_contacts extends rcube_addressbook
$ids = array_values(array_intersect(array_keys($this->contacts), $ids)); $ids = array_values(array_intersect(array_keys($this->contacts), $ids));
else else
$ids = array_keys($this->contacts); $ids = array_keys($this->contacts);
$this->result->count = count($ids);
} }
// fill contact data into the current result set // fill contact data into the current result set
@ -420,6 +423,11 @@ class rcube_kolab_contacts extends rcube_addressbook
$this->filter['ids'][] = $id; $this->filter['ids'][] = $id;
} }
// dummy result with contacts count
if (!$select) {
return new rcube_result_set(count($this->filter['ids']), ($this->list_page-1) * $this->page_size);
}
// list records (now limited by $this->filter) // list records (now limited by $this->filter)
return $this->list_records(); return $this->list_records();
} }
@ -925,7 +933,7 @@ class rcube_kolab_contacts extends rcube_addressbook
* *
* @return boolean True if input is valid, False if not. * @return boolean True if input is valid, False if not.
*/ */
public function validate($save_data) public function validate(&$save_data)
{ {
// validate e-mail addresses // validate e-mail addresses
$valid = parent::validate($save_data); $valid = parent::validate($save_data);

View file

@ -326,11 +326,21 @@ class kolab_auth extends rcube_plugin
$email_attr = $rcmail->config->get('kolab_auth_email'); $email_attr = $rcmail->config->get('kolab_auth_email');
$org_attr = $rcmail->config->get('kolab_auth_organization'); $org_attr = $rcmail->config->get('kolab_auth_organization');
$role_attr = $rcmail->config->get('kolab_auth_role'); $role_attr = $rcmail->config->get('kolab_auth_role');
$imap_attr = $rcmail->config->get('kolab_auth_mailhost');
if (!empty($role_attr) && !empty($record[$role_attr])) { if (!empty($role_attr) && !empty($record[$role_attr])) {
$_SESSION['user_roledns'] = (array)($record[$role_attr]); $_SESSION['user_roledns'] = (array)($record[$role_attr]);
} }
if (!empty($imap_attr) && !empty($record[$role_attr])) {
$default_host = $rcmail->config->get('default_host');
if (!empty($default_host)) {
rcube::write_log("errors", "Both default host and kolab_auth_mailhost set. Incompatible.");
} else {
$args['host'] = "tls://" . $record[$role_attr];
}
}
// Login As... // Login As...
if (!empty($loginas) && $admin_login) { if (!empty($loginas) && $admin_login) {
// Authenticate to LDAP // Authenticate to LDAP
@ -475,13 +485,20 @@ class kolab_auth extends rcube_plugin
*/ */
public function identity_form($args) public function identity_form($args)
{ {
$rcmail = rcube::get_instance();
$ident_level = intval($rcmail->config->get('identities_level', 0));
// do nothing if email address modification is disabled
if ($ident_level == 1 || $ident_level == 3) {
return $args;
}
$ldap = self::ldap(); $ldap = self::ldap();
if (!$ldap || !$ldap->ready || empty($_SESSION['kolab_dn'])) { if (!$ldap || !$ldap->ready || empty($_SESSION['kolab_dn'])) {
return $args; return $args;
} }
$emails = array(); $emails = array();
$rcmail = rcube::get_instance();
$user_record = $ldap->get_record($_SESSION['kolab_dn']); $user_record = $ldap->get_record($_SESSION['kolab_dn']);
foreach ((array)$rcmail->config->get('kolab_auth_email', array()) as $col) { foreach ((array)$rcmail->config->get('kolab_auth_email', array()) as $col) {
@ -490,6 +507,10 @@ class kolab_auth extends rcube_plugin
$emails = array_merge($emails, array_filter($values)); $emails = array_merge($emails, array_filter($values));
} }
// kolab_delegation might want to modify this addresses list
$plugin = $rcmail->plugins->exec_hook('kolab_auth_emails', array('emails' => $emails));
$emails = $plugin['emails'];
if (!empty($emails)) { if (!empty($emails)) {
$args['form']['addressing']['content']['email'] = array( $args['form']['addressing']['content']['email'] = array(
'type' => 'select', 'type' => 'select',

View file

@ -119,6 +119,7 @@ class kolab_auth_ldap extends rcube_ldap_generic
$entries = $result->entries(true); $entries = $result->entries(true);
$dn = key($entries); $dn = key($entries);
$entry = array_pop($entries); $entry = array_pop($entries);
$entry = rcube_ldap_generic::normalize_entry($entry);
$entry = $this->field_mapping($dn, $entry); $entry = $this->field_mapping($dn, $entry);
return $entry; return $entry;
@ -288,6 +289,7 @@ class kolab_auth_ldap extends rcube_ldap_generic
break; break;
} }
$dn = $result->get_dn(); $dn = $result->get_dn();
$entry = rcube_ldap_generic::normalize_entry($entry);
$list[$dn] = $this->field_mapping($dn, $entry); $list[$dn] = $this->field_mapping($dn, $entry);
$i++; $i++;
} }

View file

@ -55,6 +55,9 @@ class kolab_delegation extends rcube_plugin
$this->add_hook('calendar_list_filter', array($this, 'calendar_list_filter')); $this->add_hook('calendar_list_filter', array($this, 'calendar_list_filter'));
$this->add_hook('calendar_load_itip', array($this, 'calendar_load_itip')); $this->add_hook('calendar_load_itip', array($this, 'calendar_load_itip'));
// delegation support in kolab_auth plugin
$this->add_hook('kolab_auth_emails', array($this, 'kolab_auth_emails'));
if ($this->rc->task == 'settings') { if ($this->rc->task == 'settings') {
// delegation management interface // delegation management interface
$this->register_action('plugin.delegation', array($this, 'controller_ui')); $this->register_action('plugin.delegation', array($this, 'controller_ui'));
@ -240,6 +243,27 @@ class kolab_delegation extends rcube_plugin
} }
} }
/**
* Delegation support in kolab_auth plugin
*/
public function kolab_auth_emails($args)
{
// Add delegators addresses to address selector in user identity form
if (!empty($_SESSION['delegators'])) {
// @TODO: Consider not adding all delegator addresses to the list.
// Instead add only address of currently edited identity
foreach ($_SESSION['delegators'] as $emails) {
$args['emails'] = array_merge($args['emails'], $emails);
}
$args['emails'] = array_unique($args['emails']);
sort($args['emails']);
}
return $args;
}
/** /**
* Delegation UI handler * Delegation UI handler
*/ */