X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=functions%2Fabook_database.php;h=1e69af3a0c3ddcd2bd47289826b6c420073c9a7b;hp=6fc04ac2c70d7a481d951cabd10e607285125caf;hb=2129fd5738764de5801e798f113fa4ffad4ccfe0;hpb=6c99d1de81366bceab6c9d6cf12179eedc81f9bc diff --git a/functions/abook_database.php b/functions/abook_database.php index 6fc04ac2..1e69af3a 100644 --- a/functions/abook_database.php +++ b/functions/abook_database.php @@ -14,7 +14,7 @@ * PRIMARY KEY (owner,nickname) * * - * @copyright © 1999-2006 The SquirrelMail Project Team + * @copyright © 1999-2007 The SquirrelMail Project Team * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @version $Id$ * @package squirrelmail @@ -107,7 +107,7 @@ class abook_database extends addressbook_backend { * @param array $param address book backend options */ function abook_database($param) { - $this->sname = _("Personal address book"); + $this->sname = _("Personal Address Book"); /* test if Pear DB class is available and freak out if it is not */ if (! class_exists('DB')) { @@ -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,42 @@ 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) + * NOTE: uniqueness is only guaranteed + * when the nickname field is used here; + * otherwise, the first matching address + * is returned. + * + * @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)); + $db_field = $this->get_field_name($field); + if ($db_field == 'ERROR') { + return $this->set_error(sprintf(_("Unknown field name: %s"), $field)); + } + + $query = sprintf("SELECT * FROM %s WHERE owner = '%s' AND LOWER(%s) = '%s'", + $this->table, $this->owner, $db_field, + $this->dbh->quoteString($value)); $res = $this->dbh->query($query);