From 0c1cb2fed7c584b31aa7f4df7aa565781dfe0021 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Tue, 27 Sep 2011 05:04:25 -0400
Subject: [PATCH] Fix typo; add attribute to allow html in labels
---
program/include/rcube_contacts.php | 85 +++++++++++++++++++++++++++++++++---------
1 files changed, 67 insertions(+), 18 deletions(-)
diff --git a/program/include/rcube_contacts.php b/program/include/rcube_contacts.php
index 5e7165e..3ad53a6 100644
--- a/program/include/rcube_contacts.php
+++ b/program/include/rcube_contacts.php
@@ -41,6 +41,7 @@
private $user_id = 0;
private $filter = null;
private $result = null;
+ private $name;
private $cache;
private $table_cols = array('name', 'email', 'firstname', 'surname');
private $fulltext_cols = array('name', 'firstname', 'surname', 'middlename', 'nickname',
@@ -51,6 +52,7 @@
public $primary_key = 'contact_id';
public $readonly = false;
public $groups = true;
+ public $undelete = true;
public $list_page = 1;
public $page_size = 10;
public $group_id = 0;
@@ -76,9 +78,18 @@
/**
+ * Returns addressbook name
+ */
+ function get_name()
+ {
+ return $this->name;
+ }
+
+
+ /**
* Save a search string for future listings
*
- * @param string SQL params to use in listing method
+ * @param string SQL params to use in listing method
*/
function set_search_set($filter)
{
@@ -284,12 +295,12 @@
$where[] = '(' . join(' AND ', $words) . ')';
}
if (is_array($value))
- $post_search[$col] = $strict ? $val : mb_strtolower($val);
+ $post_search[$col] = mb_strtolower($val);
}
}
}
- foreach ($required as $col) {
+ foreach (array_intersect($required, $this->table_cols) as $col) {
$and_where[] = $this->db->quoteIdentifier($col).' <> '.$this->db->quote('');
}
@@ -306,7 +317,7 @@
if (!empty($post_search)) {
$ids = array(0);
// build key name regexp
- $regexp = '/^(' . implode(array_keys($post_search), '|') . ')(:.*?)$/';
+ $regexp = '/^(' . implode(array_keys($post_search), '|') . ')(?:.*)$/';
// use initial WHERE clause, to limit records number if possible
if (!empty($where))
$this->set_search_set($where);
@@ -321,7 +332,7 @@
$this->list_records(null, $i, true);
while ($row = $this->result->next()) {
$id = $row[$this->primary_key];
- $found = 0;
+ $found = array();
foreach (preg_grep($regexp, array_keys($row)) as $col) {
$pos = strpos($col, ':');
$colname = $pos ? substr($col, 0, $pos) : $col;
@@ -331,16 +342,15 @@
if (is_array($value)) {
$value = implode($value);
}
- if (($strict && $value == $search)
- || (!$strict && strpos(mb_strtolower($value), $search) !== false)
- ) {
- $found++;
+ $value = mb_strtolower($value);
+ if (($strict && $value == $search) || (!$strict && strpos($value, $search) !== false)) {
+ $found[$colname] = true;
break;
}
}
}
// all fields match
- if ($found == $scnt) {
+ if (count($found) >= $scnt) {
$ids[] = $id;
}
}
@@ -349,7 +359,14 @@
// build WHERE clause
$ids = $this->db->array2list($ids, 'integer');
$where = 'c.' . $this->primary_key.' IN ('.$ids.')';
+ // reset counter
unset($this->cache['count']);
+
+ // when we know we have an empty result
+ if ($ids == '0') {
+ $this->set_search_set($where);
+ return ($this->result = new rcube_result_set(0, 0));
+ }
}
if (!empty($where)) {
@@ -587,13 +604,13 @@
return $updated;
}
-
-
+
+
private function convert_db_data($sql_arr)
{
$record = array();
$record['ID'] = $sql_arr[$this->primary_key];
-
+
if ($sql_arr['vcard']) {
unset($sql_arr['email']);
$vcard = new rcube_vcard($sql_arr['vcard']);
@@ -603,7 +620,7 @@
$record += $sql_arr;
$record['email'] = preg_split('/,\s*/', $record['email']);
}
-
+
return $record;
}
@@ -651,19 +668,47 @@
/**
* Mark one or more contact records as deleted
*
- * @param array Record identifiers
+ * @param array Record identifiers
+ * @param boolean Remove record(s) irreversible (unsupported)
*/
- function delete($ids)
+ function delete($ids, $force=true)
{
if (!is_array($ids))
$ids = explode(',', $ids);
$ids = $this->db->array2list($ids, 'integer');
- // flag record as deleted
+ // flag record as deleted (always)
$this->db->query(
"UPDATE ".get_table_name($this->db_name).
" SET del=1, changed=".$this->db->now().
+ " WHERE user_id=?".
+ " AND contact_id IN ($ids)",
+ $this->user_id
+ );
+
+ $this->cache = null;
+
+ return $this->db->affected_rows();
+ }
+
+
+ /**
+ * Undelete one or more contact records
+ *
+ * @param array Record identifiers
+ */
+ function undelete($ids)
+ {
+ if (!is_array($ids))
+ $ids = explode(',', $ids);
+
+ $ids = $this->db->array2list($ids, 'integer');
+
+ // clear deleted flag
+ $this->db->query(
+ "UPDATE ".get_table_name($this->db_name).
+ " SET del=0, changed=".$this->db->now().
" WHERE user_id=?".
" AND contact_id IN ($ids)",
$this->user_id
@@ -680,8 +725,12 @@
*/
function delete_all()
{
- $this->db->query("DELETE FROM ".get_table_name($this->db_name)." WHERE user_id = ?", $this->user_id);
$this->cache = null;
+
+ $this->db->query("UPDATE ".get_table_name($this->db_name).
+ " SET del=1, changed=".$this->db->now().
+ " WHERE user_id = ?", $this->user_id);
+
return $this->db->affected_rows();
}
--
Gitblit v1.9.1