From 5f9e87ea5ae7f0aaa308120bc7933f3d22af9f9d Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Tue, 5 Dec 2017 07:08:20 +0000
Subject: [PATCH] Some cleanup for archiving/unarchiving contacts

---
 src/Protocol/Diaspora.php |  4 ----
 src/Protocol/OStatus.php  |  3 ---
 src/Worker/OnePoll.php    | 27 +++++++++++++++++++--------
 3 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php
index 26412e2704..cd4e5b6f0e 100644
--- a/src/Protocol/Diaspora.php
+++ b/src/Protocol/Diaspora.php
@@ -1339,10 +1339,6 @@ class Diaspora
 		if ($r) {
 			$cid = $r[0]["id"];
 			$network = $r[0]["network"];
-
-			// We are receiving content from a user that possibly is about to be terminated
-			// This means the user is vital, so we remove a possible termination date.
-			Contact::unmarkForArchival($r[0]);
 		} else {
 			$cid = $contact["id"];
 			$network = NETWORK_DIASPORA;
diff --git a/src/Protocol/OStatus.php b/src/Protocol/OStatus.php
index 47538faa83..9a2eaeb5b7 100644
--- a/src/Protocol/OStatus.php
+++ b/src/Protocol/OStatus.php
@@ -151,11 +151,8 @@ class OStatus
 
 		// Only update the contacts if it is an OStatus contact
 		if ($r && ($r['id'] > 0) && !$onlyfetch && ($contact["network"] == NETWORK_OSTATUS)) {
-			// This contact is vital, so we awake it from the dead
-			Contact::unmarkForArchival($contact);
 
 			// Update contact data
-
 			$current = $contact;
 			unset($current['name-date']);
 
diff --git a/src/Worker/OnePoll.php b/src/Worker/OnePoll.php
index 0cf261a6e4..9c8cdb81d3 100644
--- a/src/Worker/OnePoll.php
+++ b/src/Worker/OnePoll.php
@@ -77,10 +77,10 @@ Class OnePoll
 					}
 
 					$fields = array('last-item' => $last_updated, 'last-update' => $updated, 'success_update' => $updated);
-					dba::update('contact', $fields, array('id' => $contact['id']));
+					self::updateContact($contact, $fields);
 					Contact::unmarkForArchival($contact);
 				} else {
-					dba::update('contact', array('last-update' => $updated, 'failure_update' => $updated), array('id' => $contact['id']));
+					self::updateContact($contact, array('last-update' => $updated, 'failure_update' => $updated));
 					Contact::markForArchival($contact);
 					logger('Contact '.$contact['id'].' is marked for archival', LOGGER_DEBUG);
 				}
@@ -206,7 +206,7 @@ Class OnePoll
 
 				// set the last-update so we don't keep polling
 				$fields = array('last-update' => datetime_convert(), 'failure_update' => datetime_convert());
-				dba::update('contact', $fields, array('id' => $contact['id']));
+				self::updateContact($contact, $fields);
 				return;
 			}
 
@@ -216,7 +216,7 @@ Class OnePoll
 				Contact::markForArchival($contact);
 
 				$fields = array('last-update' => datetime_convert(), 'failure_update' => datetime_convert());
-				dba::update('contact', $fields, array('id' => $contact['id']));
+				self::updateContact($contact, $fields);
 				return;
 			}
 
@@ -229,7 +229,7 @@ Class OnePoll
 				// we may not be friends anymore. Will keep trying for one month.
 				// set the last-update so we don't keep polling
 				$fields = array('last-update' => datetime_convert(), 'failure_update' => datetime_convert());
-				dba::update('contact', $fields, array('id' => $contact['id']));
+				self::updateContact($contact, $fields);
 
 				Contact::markForArchival($contact);
 			} elseif ($contact['term-date'] > NULL_DATE) {
@@ -577,7 +577,7 @@ Class OnePoll
 				logger('post_handshake: response from ' . $url . ' did not contain XML.');
 
 				$fields = array('last-update' => datetime_convert(), 'failure_update' => datetime_convert());
-				dba::update('contact', $fields, array('id' => $contact['id']));
+				self::updateContact($contact, $fields);
 				Contact::markForArchival($contact);
 				return;
 			}
@@ -622,13 +622,13 @@ Class OnePoll
 
 			$updated = datetime_convert();
 
-			dba::update('contact', array('last-update' => $updated, 'success_update' => $updated), array('id' => $contact['id']));
+			self::updateContact($contact, array('last-update' => $updated, 'success_update' => $updated));
 			dba::update('gcontact', array('last_contact' => $updated), array('nurl' => $contact['nurl']));
 			Contact::unmarkForArchival($contact);
 		} elseif (in_array($contact["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS, NETWORK_FEED))) {
 			$updated = datetime_convert();
 
-			dba::update('contact', array('last-update' => $updated, 'failure_update' => $updated), array('id' => $contact['id']));
+			self::updateContact($contact, array('last-update' => $updated, 'failure_update' => $updated));
 			dba::update('gcontact', array('last_failure' => $updated), array('nurl' => $contact['nurl']));
 			Contact::markForArchival($contact);
 		} else {
@@ -645,4 +645,15 @@ Class OnePoll
 
 		return $subject;
 	}
+
+	/**
+	 * @brief Updates a personal contact entry and the public contact entry
+	 *
+	 * @param array $contact The personal contact entry
+	 * @param array $fields The fields that are updated
+	 */
+	private static function updateContact($contact, $fields) {
+			dba::update('contact', $fields, array('id' => $contact['id']));
+			dba::update('contact', $fields, array('uid' => 0, 'nurl' => $contact['nurl']));
+	}
 }
-- 
2.39.5