Merge branch 'master' of ssh://git.kolab.org/git/roundcubemail-plugins-kolab
This commit is contained in:
commit
ea56bf9c1b
4 changed files with 62 additions and 7 deletions
|
@ -286,19 +286,20 @@ class rcube_kolab_contacts extends rcube_addressbook
|
|||
}
|
||||
|
||||
$ids = array_keys($this->contacts);
|
||||
$this->result->count = count($this->contacts);
|
||||
}
|
||||
else if (is_array($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']);
|
||||
$this->_fetch_contacts(array(array('uid', '=', $uids)));
|
||||
}
|
||||
else {
|
||||
$this->contacts = array();
|
||||
}
|
||||
}
|
||||
else {
|
||||
$this->_fetch_contacts();
|
||||
$ids = array_keys($this->contacts);
|
||||
$this->result->count = count($ids);
|
||||
}
|
||||
|
||||
// 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));
|
||||
else
|
||||
$ids = array_keys($this->contacts);
|
||||
|
||||
$this->result->count = count($ids);
|
||||
}
|
||||
|
||||
// fill contact data into the current result set
|
||||
|
@ -420,6 +423,11 @@ class rcube_kolab_contacts extends rcube_addressbook
|
|||
$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)
|
||||
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.
|
||||
*/
|
||||
public function validate($save_data)
|
||||
public function validate(&$save_data)
|
||||
{
|
||||
// validate e-mail addresses
|
||||
$valid = parent::validate($save_data);
|
||||
|
|
|
@ -326,11 +326,21 @@ class kolab_auth extends rcube_plugin
|
|||
$email_attr = $rcmail->config->get('kolab_auth_email');
|
||||
$org_attr = $rcmail->config->get('kolab_auth_organization');
|
||||
$role_attr = $rcmail->config->get('kolab_auth_role');
|
||||
$imap_attr = $rcmail->config->get('kolab_auth_mailhost');
|
||||
|
||||
if (!empty($role_attr) && !empty($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...
|
||||
if (!empty($loginas) && $admin_login) {
|
||||
// Authenticate to LDAP
|
||||
|
@ -475,13 +485,20 @@ class kolab_auth extends rcube_plugin
|
|||
*/
|
||||
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();
|
||||
if (!$ldap || !$ldap->ready || empty($_SESSION['kolab_dn'])) {
|
||||
return $args;
|
||||
}
|
||||
|
||||
$emails = array();
|
||||
$rcmail = rcube::get_instance();
|
||||
$user_record = $ldap->get_record($_SESSION['kolab_dn']);
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
// 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)) {
|
||||
$args['form']['addressing']['content']['email'] = array(
|
||||
'type' => 'select',
|
||||
|
|
|
@ -119,6 +119,7 @@ class kolab_auth_ldap extends rcube_ldap_generic
|
|||
$entries = $result->entries(true);
|
||||
$dn = key($entries);
|
||||
$entry = array_pop($entries);
|
||||
$entry = rcube_ldap_generic::normalize_entry($entry);
|
||||
$entry = $this->field_mapping($dn, $entry);
|
||||
|
||||
return $entry;
|
||||
|
@ -288,6 +289,7 @@ class kolab_auth_ldap extends rcube_ldap_generic
|
|||
break;
|
||||
}
|
||||
$dn = $result->get_dn();
|
||||
$entry = rcube_ldap_generic::normalize_entry($entry);
|
||||
$list[$dn] = $this->field_mapping($dn, $entry);
|
||||
$i++;
|
||||
}
|
||||
|
|
|
@ -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_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') {
|
||||
// delegation management interface
|
||||
$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
|
||||
*/
|
||||
|
|
Loading…
Add table
Reference in a new issue