Allow lookups by fields other than nickname; LDAP backend needs to have this implemen...
[squirrelmail.git] / functions / abook_database.php
index 717236ccfa1bea4cb305072f9764e62cd384db3b..8294cf3eaa141c18fe1f0adeff578be6c586c5d2 100644 (file)
@@ -194,6 +194,34 @@ class abook_database extends addressbook_backend {
         $this->dbh = false;
     }
 
+    /**
+     * Determine internal database field name given one of
+     * the SquirrelMail SM_ABOOK_FIELD_* constants
+     *
+     * @param integer $field The SM_ABOOK_FIELD_* contant to look up
+     *
+     * @return string The desired field name, or the string "ERROR"
+     *                if the $field is not understood (the caller
+     *                is responsible for handing errors)
+     *
+     */
+    function get_field_name($field) {
+        switch ($field) {
+            case SM_ABOOK_FIELD_NICKNAME:
+                return 'nickname';
+            case SM_ABOOK_FIELD_FIRSTNAME:
+                return 'firstname';
+            case SM_ABOOK_FIELD_LASTNAME:
+                return 'lastname';
+            case SM_ABOOK_FIELD_EMAIL:
+                return 'email';
+            case SM_ABOOK_FIELD_LABEL:
+                return 'label';
+            default:
+                return 'ERROR';
+        }
+    }
+
     /* ========================== Public ======================== */
 
     /**
@@ -260,23 +288,33 @@ class abook_database extends addressbook_backend {
     }
 
     /**
-     * Lookup alias
-     * @param string $alias alias
-     * @return array search results
+     * Lookup an address by the indicated field.
+     *
+     * @param string  $value The value to look up
+     * @param integer $field The field to look in, should be one
+     *                       of the SM_ABOOK_FIELD_* constants
+     *                       defined in include/constants.php
+     *                       (OPTIONAL; defaults to nickname field)
+     *
+     * @return array Array with lookup results when the value
+     *               was found, an empty array if the value was
+     *               not found.
+     *
      */
-    function lookup($alias) {
-        if (empty($alias)) {
+    function lookup($value, $field=SM_ABOOK_FIELD_NICKNAME) {
+        if (empty($value)) {
             return array();
         }
 
-        $alias = strtolower($alias);
+        $value = strtolower($value);
 
         if (!$this->open()) {
             return false;
         }
 
-        $query = sprintf("SELECT * FROM %s WHERE owner='%s' AND LOWER(nickname)='%s'",
-                         $this->table, $this->owner, $this->dbh->quoteString($alias));
+        $query = sprintf("SELECT * FROM %s WHERE owner = '%s' AND LOWER(%s) = '%s'",
+                         $this->table, $this->owner, $this->get_field_name($field), 
+                         $this->dbh->quoteString($value));
 
         $res = $this->dbh->query($query);