From 09af73168c0ee5c850989c34a8a56a40d59a2137 Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Mon, 9 Oct 2017 05:02:50 +0000
Subject: [PATCH] Process "relocate" messages even if we are ignoring a contact

---
 include/dfrn.php | 37 ++++++++++++++++---------------------
 1 file changed, 16 insertions(+), 21 deletions(-)

diff --git a/include/dfrn.php b/include/dfrn.php
index 9a821a9d91..eb0f9fbb4e 100644
--- a/include/dfrn.php
+++ b/include/dfrn.php
@@ -2829,13 +2829,6 @@ class dfrn {
 			return 400;
 		}
 
-		if ($importer["readonly"]) {
-			// We aren't receiving stuff from this person. But we will quietly ignore them
-			// rather than a blatant "go away" message.
-			logger('ignoring contact '.$importer["id"]);
-			return 403;
-		}
-
 		$doc = new DOMDocument();
 		@$doc->loadXML($xml);
 
@@ -2878,11 +2871,7 @@ class dfrn {
 			$accounttype = intval($xpath->evaluate("/atom:feed/dfrn:account_type/text()", $context)->item(0)->nodeValue);
 
 			if ($accounttype != $importer["contact-type"]) {
-				/// @TODO this way is the norm or putting ); at the end of the line?
-				q("UPDATE `contact` SET `contact-type` = %d WHERE `id` = %d",
-					intval($accounttype),
-					intval($importer["id"])
-				);
+				dba::update('contact', array('contact-type' => $accounttype), array('id' => $importer["id"]));
 			}
 		}
 
@@ -2891,10 +2880,21 @@ class dfrn {
 		$forum = intval($xpath->evaluate("/atom:feed/dfrn:community/text()", $context)->item(0)->nodeValue);
 
 		if ($forum != $importer["forum"]) {
-			q("UPDATE `contact` SET `forum` = %d WHERE `forum` != %d AND `id` = %d",
-				intval($forum), intval($forum),
-				intval($importer["id"])
-			);
+			$condition = array('`forum` != ? AND `id` = ?', $forum, $importer["id"]);
+			dba::update('contact', array('forum' => $forum), $condition);
+		}
+
+		// We are processing relocations even if we are ignoring a contact
+		$relocations = $xpath->query("/atom:feed/dfrn:relocate");
+		foreach ($relocations AS $relocation) {
+			self::process_relocation($xpath, $relocation, $importer);
+		}
+
+		if ($importer["readonly"]) {
+			// We aren't receiving stuff from this person. But we will quietly ignore them
+			// rather than a blatant "go away" message.
+			logger('ignoring contact '.$importer["id"]);
+			return 403;
 		}
 
 		$mails = $xpath->query("/atom:feed/dfrn:mail");
@@ -2907,11 +2907,6 @@ class dfrn {
 			self::process_suggestion($xpath, $suggestion, $importer);
 		}
 
-		$relocations = $xpath->query("/atom:feed/dfrn:relocate");
-		foreach ($relocations AS $relocation) {
-			self::process_relocation($xpath, $relocation, $importer);
-		}
-
 		$deletions = $xpath->query("/atom:feed/at:deleted-entry");
 		foreach ($deletions AS $deletion) {
 			self::process_deletion($xpath, $deletion, $importer);