| | |
| | | * List all active contact groups of this source |
| | | * |
| | | * @param string Search string to match group name |
| | | * @param int Matching mode: |
| | | * 0 - partial (*abc*), |
| | | * 1 - strict (=), |
| | | * 2 - prefix (abc*) |
| | | * |
| | | * @return array Indexed list of contact groups, each a hash array |
| | | */ |
| | | function list_groups($search = null) |
| | | function list_groups($search = null, $mode = 0) |
| | | { |
| | | $results = array(); |
| | | |
| | | if (!$this->groups) |
| | | return $results; |
| | | |
| | | $sql_filter = $search ? " AND " . $this->db->ilike('name', '%'.$search.'%') : ''; |
| | | if ($search) { |
| | | switch (intval($mode)) { |
| | | case 1: |
| | | $sql_filter = $this->db->ilike('name', $search); |
| | | break; |
| | | case 2: |
| | | $sql_filter = $this->db->ilike('name', $search . '%'); |
| | | break; |
| | | default: |
| | | $sql_filter = $this->db->ilike('name', '%' . $search . '%'); |
| | | } |
| | | |
| | | $sql_filter = " AND $sql_filter"; |
| | | } |
| | | |
| | | $sql_result = $this->db->query( |
| | | "SELECT * FROM ".$this->db->table_name($this->db_groups). |
| | |
| | | if (in_array($col, $this->table_cols)) { |
| | | switch ($mode) { |
| | | case 1: // strict |
| | | $where[] = '(' . $this->db->quoteIdentifier($col) . ' = ' . $this->db->quote($val) |
| | | $where[] = '(' . $this->db->quote_identifier($col) . ' = ' . $this->db->quote($val) |
| | | . ' OR ' . $this->db->ilike($col, $val . $AS . '%') |
| | | . ' OR ' . $this->db->ilike($col, '%' . $AS . $val . $AS . '%') |
| | | . ' OR ' . $this->db->ilike($col, '%' . $AS . $val) . ')'; |
| | |
| | | } |
| | | |
| | | foreach (array_intersect($required, $this->table_cols) as $col) { |
| | | $and_where[] = $this->db->quoteIdentifier($col).' <> '.$this->db->quote(''); |
| | | $and_where[] = $this->db->quote_identifier($col).' <> '.$this->db->quote(''); |
| | | } |
| | | |
| | | if (!empty($where)) { |
| | |
| | | // validate e-mail addresses |
| | | $valid = parent::validate($save_data, $autofix); |
| | | |
| | | // require at least one e-mail address (syntax check is already done) |
| | | if ($valid && !array_filter($this->get_col_values('email', $save_data, true))) { |
| | | // require at least one email address or a name |
| | | if ($valid && !strlen($save_data['firstname'].$save_data['surname'].$save_data['name']) && !array_filter($this->get_col_values('email', $save_data, true))) { |
| | | $this->set_error(self::ERROR_VALIDATE, 'noemailwarning'); |
| | | $valid = false; |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | $save_data = $this->convert_save_data($save_data); |
| | | $save_data = $this->convert_save_data($save_data); |
| | | $a_insert_cols = $a_insert_values = array(); |
| | | |
| | | foreach ($save_data as $col => $value) { |
| | | $a_insert_cols[] = $this->db->quoteIdentifier($col); |
| | | $a_insert_cols[] = $this->db->quote_identifier($col); |
| | | $a_insert_values[] = $this->db->quote($value); |
| | | } |
| | | |
| | |
| | | * |
| | | * @param mixed Record identifier |
| | | * @param array Assoziative array with save data |
| | | * |
| | | * @return boolean True on success, False on error |
| | | */ |
| | | function update($id, $save_cols) |
| | | { |
| | | $updated = false; |
| | | $updated = false; |
| | | $write_sql = array(); |
| | | $record = $this->get_record($id, true); |
| | | $record = $this->get_record($id, true); |
| | | $save_cols = $this->convert_save_data($save_cols, $record); |
| | | |
| | | foreach ($save_cols as $col => $value) { |
| | | $write_sql[] = sprintf("%s=%s", $this->db->quoteIdentifier($col), $this->db->quote($value)); |
| | | $write_sql[] = sprintf("%s=%s", $this->db->quote_identifier($col), $this->db->quote($value)); |
| | | } |
| | | |
| | | if (!empty($write_sql)) { |
| | |
| | | $this->result = null; // clear current result (from get_record()) |
| | | } |
| | | |
| | | return $updated; |
| | | return $updated ? true : false; |
| | | } |
| | | |
| | | |
| | |
| | | foreach ($save_data as $key => $values) { |
| | | list($field, $section) = explode(':', $key); |
| | | $fulltext = in_array($field, $this->fulltext_cols); |
| | | // avoid casting DateTime objects to array |
| | | if (is_object($values) && is_a($values, 'DateTime')) { |
| | | $values = array(0 => $values); |
| | | } |
| | | foreach ((array)$values as $value) { |
| | | if (isset($value)) |
| | | $vcard->set($field, $value, $section); |
| | |
| | | |
| | | /** |
| | | * Remove all records from the database |
| | | * |
| | | * @param bool $with_groups Remove also groups |
| | | * |
| | | * @return int Number of removed records |
| | | */ |
| | | function delete_all() |
| | | function delete_all($with_groups = false) |
| | | { |
| | | $this->cache = null; |
| | | |
| | | $this->db->query("UPDATE ".$this->db->table_name($this->db_name). |
| | | " SET del=1, changed=".$this->db->now(). |
| | | " WHERE user_id = ?", $this->user_id); |
| | | $this->db->query("UPDATE " . $this->db->table_name($this->db_name) |
| | | . " SET del = 1, changed = " . $this->db->now() |
| | | . " WHERE user_id = ?", $this->user_id); |
| | | |
| | | return $this->db->affected_rows(); |
| | | $count = $this->db->affected_rows(); |
| | | |
| | | if ($with_groups) { |
| | | $this->db->query("UPDATE " . $this->db->table_name($this->db_groups) |
| | | . " SET del = 1, changed = " . $this->db->now() |
| | | . " WHERE user_id = ?", $this->user_id); |
| | | |
| | | $count += $this->db->affected_rows(); |
| | | } |
| | | |
| | | return $count; |
| | | } |
| | | |
| | | |
| | |
| | | function delete_group($gid) |
| | | { |
| | | // flag group record as deleted |
| | | $sql_result = $this->db->query( |
| | | "UPDATE ".$this->db->table_name($this->db_groups). |
| | | " SET del=1, changed=".$this->db->now(). |
| | | " WHERE contactgroup_id=?". |
| | | " AND user_id=?", |
| | | $this->db->query( |
| | | "UPDATE " . $this->db->table_name($this->db_groups) |
| | | . " SET del = 1, changed = " . $this->db->now() |
| | | . " WHERE contactgroup_id = ?" |
| | | . " AND user_id = ?", |
| | | $gid, $this->user_id |
| | | ); |
| | | |
| | |
| | | |
| | | return $this->db->affected_rows(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Rename a specific contact group |
| | |
| | | /** |
| | | * Add the given contact records the a certain group |
| | | * |
| | | * @param string Group identifier |
| | | * @param array List of contact identifiers to be added |
| | | * @return int Number of contacts added |
| | | * @param string Group identifier |
| | | * @param array|string List of contact identifiers to be added |
| | | * |
| | | * @return int Number of contacts added |
| | | */ |
| | | function add_to_group($group_id, $ids) |
| | | { |
| | |
| | | /** |
| | | * Remove the given contact records from a certain group |
| | | * |
| | | * @param string Group identifier |
| | | * @param array List of contact identifiers to be removed |
| | | * @return int Number of deleted group members |
| | | * @param string Group identifier |
| | | * @param array|string List of contact identifiers to be removed |
| | | * |
| | | * @return int Number of deleted group members |
| | | */ |
| | | function remove_from_group($group_id, $ids) |
| | | { |