From fbe54043cf598b19a753dc2b21a7ed558d23fd15 Mon Sep 17 00:00:00 2001 From: thomascube <thomas@roundcube.net> Date: Thu, 18 Aug 2011 13:40:07 -0400 Subject: [PATCH] Fix folders drop-down list: descend into root folder (e.g. INBOX) even if part of the exception list --- program/include/rcube_addressbook.php | 83 ++++++++++++++++++++++++++++++++--------- 1 files changed, 65 insertions(+), 18 deletions(-) diff --git a/program/include/rcube_addressbook.php b/program/include/rcube_addressbook.php index 8ec0abb..6d126e9 100644 --- a/program/include/rcube_addressbook.php +++ b/program/include/rcube_addressbook.php @@ -33,18 +33,24 @@ const ERROR_INCOMPLETE = 3; const ERROR_SAVING = 4; const ERROR_SEARCH = 5; - + /** public properties (mandatory) */ public $primary_key; public $groups = false; public $readonly = true; + public $undelete = false; public $ready = false; public $group_id = null; public $list_page = 1; public $page_size = 10; public $coltypes = array('name' => array('limit'=>1), 'firstname' => array('limit'=>1), 'surname' => array('limit'=>1), 'email' => array('limit'=>1)); - + protected $error; + + /** + * Returns addressbook name (e.g. for addressbooks listing) + */ + abstract function get_name(); /** * Save a search string for future listings @@ -129,7 +135,7 @@ { return $this->error; } - + /** * Setter for errors for internal use * @@ -172,18 +178,13 @@ /** * Check the given data before saving. - * If input not valid, the message to display can be fetched using get_error() + * If input isn't valid, the message to display can be fetched using get_error() * * @param array Assoziative array with data to save * @return boolean True if input is valid, False if not. */ public function validate($save_data) { - if (empty($save_data['name'])) { - $this->set_error('warning', 'nonamewarning'); - return false; - } - // check validity of email addresses foreach ($this->get_col_values('email', $save_data, true) as $email) { if (strlen($email)) { @@ -249,14 +250,25 @@ * Mark one or more contact records as deleted * * @param array Record identifiers + * @param bool Remove records irreversible (see self::undelete) */ - function delete($ids) + function delete($ids, $force=true) { /* empty for read-only address books */ } /** - * Remove all records from the database + * Unmark delete flag on contact record(s) + * + * @param array Record identifiers + */ + function undelete($ids) + { + /* empty for read-only address books */ + } + + /** + * Mark all records in database as deleted */ function delete_all() { @@ -383,7 +395,7 @@ } } } - + return $out; } @@ -402,20 +414,55 @@ array('/[\s;\+\-\/]+/i', '/(\d)[-.\s]+(\d)/', '/\s\w{1,3}\s/'), array(' ', '\\1\\2', ' '), $str)); - + foreach ($arr as $i => $part) { if (utf8_encode(utf8_decode($part)) == $part) { // is latin-1 ? - $arr[$i] = strtr(strtolower(strtr(utf8_decode($part), + $arr[$i] = utf8_encode(strtr(strtolower(strtr(utf8_decode($part), '��������������������������������������������������', 'ccaaaaeeeeiiiaeooouuuyooaiounnaaaaaeeeiiioooouuuyy')), - array('�' => 'ss', 'ae' => 'a', 'oe' => 'o', 'ue' => 'u')); + array('�' => 'ss', 'ae' => 'a', 'oe' => 'o', 'ue' => 'u'))); } else - $arr[$i] = strtolower($part); + $arr[$i] = mb_strtolower($part); } - + return join(" ", $arr); } - + + + /** + * Compose a valid display name from the given structured contact data + * + * @param array Hash array with contact data as key-value pairs + * @param bool The name will be used on the list + * + * @return string Display name + */ + public static function compose_display_name($contact, $list_mode = false) + { + $contact = rcmail::get_instance()->plugins->exec_hook('contact_displayname', $contact); + $fn = $contact['name']; + + if (!$fn) + $fn = join(' ', array_filter(array($contact['prefix'], $contact['firstname'], $contact['middlename'], $contact['surname'], $contact['suffix']))); + + // use email address part for name + $email = is_array($contact['email']) ? $contact['email'][0] : $contact['email']; + + if ($email && (empty($fn) || $fn == $email)) { + // Use full email address on contacts list + if ($list_mode) + return $email; + + list($emailname) = explode('@', $email); + if (preg_match('/(.*)[\.\-\_](.*)/', $emailname, $match)) + $fn = trim(ucfirst($match[1]).' '.ucfirst($match[2])); + else + $fn = ucfirst($emailname); + } + + return $fn; + } + } -- Gitblit v1.9.1