summaryrefslogtreecommitdiff
path: root/program/include
diff options
context:
space:
mode:
Diffstat (limited to 'program/include')
-rw-r--r--program/include/rcube_addressbook.php37
-rw-r--r--program/include/rcube_contacts.php6
-rw-r--r--program/include/rcube_ldap.php20
-rw-r--r--program/include/rcube_vcard.php11
4 files changed, 57 insertions, 17 deletions
diff --git a/program/include/rcube_addressbook.php b/program/include/rcube_addressbook.php
index e4deea1d1..c580c400d 100644
--- a/program/include/rcube_addressbook.php
+++ b/program/include/rcube_addressbook.php
@@ -172,18 +172,13 @@ abstract class rcube_addressbook
/**
* 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)) {
@@ -416,6 +411,34 @@ abstract class rcube_addressbook
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
+ * @return string Display name
+ */
+ public static function compose_display_name($contact)
+ {
+ $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)) {
+ list($emailname) = explode('@', $email);
+ if (preg_match('/(.*)[\.\-\_](.*)/', $emailname, $match))
+ $fn = trim(ucfirst($match[1]).' '.ucfirst($match[2]));
+ else
+ $fn = ucfirst($emailname);
+ }
+
+ return $fn;
+ }
+
}
diff --git a/program/include/rcube_contacts.php b/program/include/rcube_contacts.php
index 3c713fe19..8abc76302 100644
--- a/program/include/rcube_contacts.php
+++ b/program/include/rcube_contacts.php
@@ -184,7 +184,7 @@ class rcube_contacts extends rcube_addressbook
" AND c.user_id=?" .
($this->group_id ? " AND m.contactgroup_id=?" : "").
($this->filter ? " AND (".$this->filter.")" : "") .
- " ORDER BY c.name",
+ " ORDER BY c.name, c.email",
$start_row,
$length,
$this->user_id,
@@ -410,10 +410,10 @@ class rcube_contacts extends rcube_addressbook
*/
public function validate($save_data)
{
- // check for name input
+ // validate e-mail addresses
$valid = parent::validate($save_data);
- // require at least one e-mail address (syntax check is done later in save.inc)
+ // require at least one e-mail address (syntax check is already done)
if ($valid && !array_filter($this->get_col_values('email', $save_data, true))) {
$this->set_error('warning', 'noemailwarning');
$valid = false;
diff --git a/program/include/rcube_ldap.php b/program/include/rcube_ldap.php
index d9f5a104f..f166fd23a 100644
--- a/program/include/rcube_ldap.php
+++ b/program/include/rcube_ldap.php
@@ -610,6 +610,26 @@ class rcube_ldap extends rcube_addressbook
/**
+ * Check the given data before saving.
+ * If input not 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)
+ {
+ // check for name input
+ if (empty($save_data['name'])) {
+ $this->set_error('warning', 'nonamewarning');
+ return false;
+ }
+
+ // validate e-mail addresses
+ return parent::validate($save_data);
+ }
+
+
+ /**
* Create a new contact record
*
* @param array Hash array with save data
diff --git a/program/include/rcube_vcard.php b/program/include/rcube_vcard.php
index 0cb0b2051..4457bf3c9 100644
--- a/program/include/rcube_vcard.php
+++ b/program/include/rcube_vcard.php
@@ -115,13 +115,6 @@ class rcube_vcard
$this->email[0] = $this->email[$pref_index];
$this->email[$pref_index] = $tmp;
}
-
- // make sure displayname is not empty (required by RFC2426)
- if (!strlen($this->displayname)) {
- // the same method is used in steps/mail/addcontact.inc
- $this->displayname = ucfirst(preg_replace('/[\.\-]/', ' ',
- substr($this->email[0], 0, strpos($this->email[0], '@'))));
- }
}
@@ -585,6 +578,10 @@ class rcube_vcard
while ($type == "N" && is_array($entries[0]) && count($entries[0]) < 5)
$entries[0][] = "";
+ // make sure FN is not empty (required by RFC2426)
+ if ($type == "FN" && empty($entries))
+ $entries[0] = $data['EMAIL'][0][0];
+
foreach((array)$entries as $entry) {
$attr = '';
if (is_array($entry)) {