summaryrefslogtreecommitdiff
path: root/program/include/rcube_contacts.php
diff options
context:
space:
mode:
Diffstat (limited to 'program/include/rcube_contacts.php')
-rw-r--r--program/include/rcube_contacts.php62
1 files changed, 51 insertions, 11 deletions
diff --git a/program/include/rcube_contacts.php b/program/include/rcube_contacts.php
index 41f47eae3..4bc70a9ec 100644
--- a/program/include/rcube_contacts.php
+++ b/program/include/rcube_contacts.php
@@ -417,18 +417,9 @@ class rcube_contacts extends rcube_addressbook
function create_group($name)
{
$result = false;
-
- $sql_result = $this->db->query(
- "SELECT * FROM ".get_table_name('contactgroups')."
- WHERE del<>1
- AND user_id=?
- AND name LIKE ?",
- $this->user_id,
- $name . '%');
-
+
// make sure we have a unique name
- if ($num = $this->db->num_rows($sql_result))
- $name .= ' ' . ($num+1);
+ $name = $this->unique_groupname($name);
$this->db->query(
"INSERT INTO ".get_table_name('contactgroups')." (user_id, changed, name)
@@ -445,6 +436,7 @@ class rcube_contacts extends rcube_addressbook
* Delete the given group and all linked group members
*
* @param string Group identifier
+ * @return boolean True on success, false if no data was changed
*/
function delete_group($gid)
{
@@ -461,6 +453,27 @@ class rcube_contacts extends rcube_addressbook
return $this->db->affected_rows();
}
+
+ /**
+ * Rename a specific contact group
+ *
+ * @param string Group identifier
+ * @param string New name to set for this group
+ * @return boolean New name on success, false if no data was changed
+ */
+ function rename_group($gid, $newname)
+ {
+ // make sure we have a unique name
+ $name = $this->unique_groupname($newname);
+
+ $sql_result = $this->db->query(
+ "UPDATE ".get_table_name('contactgroups')."
+ SET name=".$this->db->quote($name).", changed=".$this->db->now()."
+ WHERE contactgroup_id=?",
+ $gid);
+
+ return $this->db->affected_rows() ? $name : false;
+ }
/**
* Add the given contact records the a certain group
@@ -517,4 +530,31 @@ class rcube_contacts extends rcube_addressbook
return $this->db->affected_rows();
}
+ /**
+ * Check for existing groups with the same name
+ *
+ * @param string Name to check
+ * @return string A group name which is unique for the current use
+ */
+ private function unique_groupname($name)
+ {
+ $checkname = $name;
+ $num = 2; $hit = false;
+
+ do {
+ $sql_result = $this->db->query(
+ "SELECT 1 FROM ".get_table_name('contactgroups')."
+ WHERE del<>1
+ AND user_id=?
+ AND name LIKE ?",
+ $this->user_id,
+ $checkname);
+
+ // append number to make name unique
+ if ($hit = $this->db->num_rows($sql_result))
+ $checkname = $name . ' ' . $num++;
+ } while ($hit > 0);
+
+ return $checkname;
+ }
}