From 3fc00e67bbfa5bad7b0d29d268545036f6dc684d Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Tue, 03 Jul 2007 13:25:05 -0400
Subject: [PATCH] Fix address adding bug reported by David Koblas

---
 CHANGELOG                          |    7 +++++++
 program/include/rcube_contacts.inc |    6 ++++--
 program/steps/addressbook/save.inc |    2 +-
 program/include/rcube_ldap.inc     |    4 ++--
 program/steps/mail/addcontact.inc  |    2 +-
 5 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 8cfd323..95c3b57 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,13 @@
 CHANGELOG RoundCube Webmail
 ---------------------------
 
+2007/07/03 (thomasb)
+----------
+- Added Macedonian (Slavic FYROM) localization
+- Fix status message bug #1484464 with regard to #1484353
+- Fix address adding bug reported by David Koblas
+
+
 2007/06/28 (tomekp)
 ----------
 - fix typos in Polish localization (Janusz Zamecki)
diff --git a/program/include/rcube_contacts.inc b/program/include/rcube_contacts.inc
index 3902e2a..c6dc40d 100644
--- a/program/include/rcube_contacts.inc
+++ b/program/include/rcube_contacts.inc
@@ -171,7 +171,7 @@
    * @param boolean True if results are requested, False if count only
    * @return Indexed list of contact records and 'count' value
    */
-  function search($fields, $value, $select=true)
+  function search($fields, $value, $strict=false, $select=true)
   {
     if (!is_array($fields))
       $fields = array($fields);
@@ -184,6 +184,8 @@
         $ids = !is_array($value) ? split(',', $value) : $value;
         $add_where[] = $this->primary_key." IN (".join(',', $ids).")";
       }
+      else if ($strict)
+        $add_where[] = $this->db->quoteIdentifier($col)."=".$this->db->quote($value);
       else
         $add_where[] = $this->db->quoteIdentifier($col)." LIKE ".$this->db->quote(strlen($value)>2 ? "%$value%" : "$value%");
     }
@@ -278,7 +280,7 @@
     $insert_id = $existing = false;
 
     if ($check)
-      $existing = $this->search('email', $save_data['email'], false);
+      $existing = $this->search('email', $save_data['email'], true, false);
 
     $a_insert_cols = $a_insert_values = array();
     foreach ($this->table_cols as $col)
diff --git a/program/include/rcube_ldap.inc b/program/include/rcube_ldap.inc
index 055c346..1aa88f1 100644
--- a/program/include/rcube_ldap.inc
+++ b/program/include/rcube_ldap.inc
@@ -231,7 +231,7 @@
    * @param boolean True if results are requested, False if count only
    * @return Indexed list of contact records and 'count' value
    */
-  function search($fields, $value, $select=true)
+  function search($fields, $value, $strict=false, $select=true)
   {
     // special treatment for ID-based search
     if ($fields == 'ID' || $fields == $this->primary_key)
@@ -249,7 +249,7 @@
     }
     
     $filter = '(|';
-    $wc = $this->prop['fuzzy_search'] ? '*' : '';
+    $wc = !$strict && $this->prop['fuzzy_search'] ? '*' : '';
     if (is_array($this->prop['search_fields']))
     {
       foreach ($this->prop['search_fields'] as $k => $field)
diff --git a/program/steps/addressbook/save.inc b/program/steps/addressbook/save.inc
index 72e54b1..c16d472 100644
--- a/program/steps/addressbook/save.inc
+++ b/program/steps/addressbook/save.inc
@@ -83,7 +83,7 @@
 else
 {
   // check for existing contacts
-  $existing = $CONTACTS->search('email', $a_record['email'], false);
+  $existing = $CONTACTS->search('email', $a_record['email'], true, false);
   
   // show warning message
   if ($existing->count)
diff --git a/program/steps/mail/addcontact.inc b/program/steps/mail/addcontact.inc
index 484b0d4..2cf1903 100644
--- a/program/steps/mail/addcontact.inc
+++ b/program/steps/mail/addcontact.inc
@@ -40,7 +40,7 @@
       $contact['name'] = ucfirst(preg_replace('/[\.\-]/', ' ', substr($contact['email'], 0, strpos($contact['email'], '@'))));
 
     // check for existing contacts
-    $existing = $CONTACTS->search('email', $contact['email'], false);
+    $existing = $CONTACTS->search('email', $contact['email'], true, false);
     if ($done = $existing->count)
       $OUTPUT->show_message('contactexists', 'warning');
     else if ($done = $CONTACTS->insert($contact))

--
Gitblit v1.9.1