From 43b1eccbcd5cd35dfd04cd5746bac874b70aa989 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 14 Feb 2018 21:18:16 +0000 Subject: [PATCH] Bugfix and improvements for unmarking potentially archived contacts --- src/Model/Item.php | 16 +++++++--------- src/Protocol/DFRN.php | 9 ++++----- src/Protocol/Diaspora.php | 23 ++++++++++------------- 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/src/Model/Item.php b/src/Model/Item.php index fae3394bc3..6f471ba4e9 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -1080,17 +1080,15 @@ class Item extends BaseObject private static function updateContact($arr) { // Unarchive the author - $contact = dba::selectFirst('contact', [], ['id' => $arr["author-link"]]); - if ($contact['term-date'] > NULL_DATE) { - Contact::unmarkForArchival($contact); + $contact = dba::selectFirst('contact', [], ['id' => $arr["author-id"]]); + if (DBM::is_result($contact)) { + Contact::unmarkForArchival($contact); } - // Unarchive the contact if it is a toplevel posting - if ($arr["parent-uri"] === $arr["uri"]) { - $contact = dba::selectFirst('contact', [], ['id' => $arr["contact-id"]]); - if ($contact['term-date'] > NULL_DATE) { - Contact::unmarkForArchival($contact); - } + // Unarchive the contact if it's not our own contact + $contact = dba::selectFirst('contact', [], ['id' => $arr["contact-id"], 'self' => false]); + if (DBM::is_result($contact)) { + Contact::unmarkForArchival($contact); } $update = (!$arr['private'] && (($arr["author-link"] === $arr["owner-link"]) || ($arr["parent-uri"] === $arr["uri"]))); diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index fd95576dbe..6f05ff3f97 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -1353,11 +1353,6 @@ class DFRN return 3; } - if ($contact['term-date'] > NULL_DATE) { - logger("dfrn_deliver: $url back from the dead - removing mark for death"); - Contact::unmarkForArchival($contact); - } - $res = XML::parseString($xml); if (!isset($res->status)) { @@ -1368,6 +1363,10 @@ class DFRN logger('Delivery returned status '.$res->status.' - '.$res->message, LOGGER_DEBUG); } + if ($res->status == 200) { + Contact::unmarkForArchival($contact); + } + return intval($res->status); } diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index a23ae2adf5..307b52f785 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -1376,26 +1376,23 @@ class Diaspora /** * @brief returns contact details * - * @param array $contact The default contact if the person isn't found - * @param array $person The record of the person - * @param int $uid The user id + * @param array $def_contact The default contact if the person isn't found + * @param array $person The record of the person + * @param int $uid The user id * * @return array * 'cid' => contact id * 'network' => network type */ - private static function authorContactByUrl($contact, $person, $uid) + private static function authorContactByUrl($def_contact, $person, $uid) { - $r = q( - "SELECT `id`, `network`, `url` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d LIMIT 1", - dbesc(normalise_link($person["url"])), - intval($uid) - ); - if ($r) { - $cid = $r[0]["id"]; - $network = $r[0]["network"]; - } else { + $condition = ['nurl' => normalise_link($person["url"]), 'uid' => $uid]; + $contact = dba::selectFirst('contact', ['id', 'network'], $condition); + if (DBM::is_result($contact)) { $cid = $contact["id"]; + $network = $contact["network"]; + } else { + $cid = $def_contact["id"]; $network = NETWORK_DIASPORA; }