From 90b9ad8bedf3983d4f2e5a64e4dbe46d39d23ec9 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Wed, 28 Aug 2019 22:27:48 +0200 Subject: [PATCH] New contact table functions with check for duplicates --- src/Model/Contact.php | 60 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 6887b9d0a4..a111589cce 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -136,6 +136,66 @@ class Contact extends BaseObject return $contact; } + /** + * @brief Insert a row into the contact table + * + * @param array $param parameter array + * @param bool $on_duplicate_update Do an update on a duplicate entry + * + * @return boolean was the insert successful? + * @throws \Exception + */ + public static function insert($param, $on_duplicate_update = false) + { + $ret = DBA::insert('contact', $param, $on_duplicate_update); + + $contact = DBA::selectFirst('contact', ['nurl', 'uid', 'id'], ['id' => DBA::lastInsertId()]); + if (!DBA::isResult($contact)) { + // Shouldn't happen + return $ret; + } + + // Search for duplicated contacts and get rid of them + self::handleDuplicates($contact['nurl'], $contact['uid'], $contact['id']); + + return $ret; + } + + /** + * @param array $fields contains the fields that are updated + * @param array $condition condition array with the key values + * @param array|boolean $old_fields array with the old field values that are about to be replaced (true = update on duplicate) + * + * @return boolean was the update successfull? + * @throws \Exception + */ + public static function update($fields, $condition, $old_fields = []) + { + $ret = DBA::update('contact', $fields, $condition, $old_fields); + + // We quit when the update affected more than one row + if (DBA::affectedRows() > 1) { + return $ret; + } + + // Don't proceed when the command aboved queried more than one row + // This is not a duplicate of the test above since that only checked for affected rows + if (DBA::count('contact', $condition) != 1) { + return $ret; + } + + $contact = DBA::selectFirst('contact', ['nurl', 'uid', 'id'], $condition); + if (!DBA::isResult($contact)) { + // Shouldn't happen + return $ret; + } + + // Search for duplicated contacts and get rid of them + self::handleDuplicates($contact['nurl'], $contact['uid'], $contact['id']); + + return $ret; + } + /** * @param integer $id Contact ID * @param array $fields Array of selected fields, empty for all