From: Michael Vogel <icarus@dabo.de>
Date: Wed, 28 Aug 2019 20:27:48 +0000 (+0200)
Subject: New contact table functions with check for duplicates
X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=90b9ad8bedf3983d4f2e5a64e4dbe46d39d23ec9;p=friendica.git

New contact table functions with check for duplicates
---

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