diff --git a/include/items.php b/include/items.php index f334990d77..63c3218199 100644 --- a/include/items.php +++ b/include/items.php @@ -1157,6 +1157,14 @@ function item_set_last_item($arr) { Contact::unmarkForArchival($contact); } + // Unarchive the contact if it is a toplevel posting + if ($arr["parent-uri"] === $arr["uri"]) { + $contact = dba::select('contact', [], ['id' => $arr["contact-id"]], ['limit' => 1]); + if ($contact['term-date'] > NULL_DATE) { + Contact::unmarkForArchival($contact); + } + } + $update = (!$arr['private'] && (($arr["author-link"] === $arr["owner-link"]) || ($arr["parent-uri"] === $arr["uri"]))); // Is it a forum? Then we don't care about the rules from above diff --git a/src/Object/Contact.php b/src/Object/Contact.php index bd7cee7fbe..64e61b9ce2 100644 --- a/src/Object/Contact.php +++ b/src/Object/Contact.php @@ -141,8 +141,8 @@ class Contact extends BaseObject */ public static function markForArchival(array $contact) { - // Contact already archived, nothing to do - if ($contact['archive']) { + // Contact already archived or "self" contact? => nothing to do + if ($contact['archive'] || $contact['self']) { return; } @@ -150,7 +150,7 @@ class Contact extends BaseObject dba::update('contact', array('term-date' => datetime_convert()), array('id' => $contact['id'])); if ($contact['url'] != '') { - dba::update('contact', array('term-date' => datetime_convert()), array('`nurl` = ? AND `term-date` <= ?', normalise_link($contact['url']), NULL_DATE)); + dba::update('contact', array('term-date' => datetime_convert()), array('`nurl` = ? AND `term-date` <= ? AND NOT `self`', normalise_link($contact['url']), NULL_DATE)); } } else { /* @todo @@ -169,7 +169,7 @@ class Contact extends BaseObject dba::update('contact', array('archive' => 1), array('id' => $contact['id'])); if ($contact['url'] != '') { - dba::update('contact', array('archive' => 1), array('nurl' => normalise_link($contact['url']))); + dba::update('contact', array('archive' => 1), array('nurl' => normalise_link($contact['url']), 'self' => false)); } } }