Contact::unmarkForArchival($contact);
}
- $update = (($arr['private'] != self::PRIVATE) && ((($arr['author-link'] ?? '') === ($arr['owner-link'] ?? '')) || ($arr["parent-uri"] === $arr["uri"])));
+ /// @todo On private posts we could obfuscate the date
+ $update = ($arr['private'] != self::PRIVATE);
// Is it a forum? Then we don't care about the rules from above
if (!$update && in_array($arr["network"], [Protocol::ACTIVITYPUB, Protocol::DFRN]) && ($arr["parent-uri"] === $arr["uri"])) {
}
if ($update) {
- DBA::update('contact', ['success_update' => $arr['received'], 'last-item' => $arr['received']],
- ['id' => $arr['contact-id']]);
+ // The "self" contact id is used (for example in the connectors) when the contact is unknown
+ // So we have to ensure to only update the last item when it had been our own post,
+ // or it had been done by a "regular" contact.
+ if (!empty($arr['wall'])) {
+ $condition = ['id' => $arr['contact-id']];
+ } else {
+ $condition = ['id' => $arr['contact-id'], 'self' => false];
+ }
+ DBA::update('contact', ['success_update' => $arr['received'], 'last-item' => $arr['received']], $condition);
}
// Now do the same for the system wide contacts with uid=0
if ($arr['private'] != self::PRIVATE) {
$contact_block = '';
$updated = '';
$contact_count = 0;
+
+ if (!empty($profile['last-item'])) {
+ $updated = date('c', strtotime($profile['last-item']));
+ }
+
if (!$block) {
$contact_block = ContactBlock::getHTML($a->profile);
if (is_array($a->profile) && !$a->profile['hide-friends']) {
- $r = q(
- "SELECT `gcontact`.`updated` FROM `contact` INNER JOIN `gcontact` WHERE `gcontact`.`nurl` = `contact`.`nurl` AND `self` AND `uid` = %d LIMIT 1",
- intval($a->profile['uid'])
- );
- if (DBA::isResult($r)) {
- $updated = date('c', strtotime($r[0]['updated']));
- }
-
$contact_count = DBA::count('contact', [
'uid' => $profile['uid'],
'self' => false,
$json_info['tags'] = $keywords;
$json_info['language'] = $a->profile['language'];
- if (!($a->profile['hide-friends'] ?? false)) {
- $stmt = DBA::p(
- "SELECT `gcontact`.`updated`
- FROM `contact`
- INNER JOIN `gcontact`
- WHERE `gcontact`.`nurl` = `contact`.`nurl`
- AND `self`
- AND `uid` = ?
- LIMIT 1",
- intval($a->profile['uid'])
- );
- if ($gcontact = DBA::fetch($stmt)) {
- $json_info["updated"] = date("c", strtotime($gcontact['updated']));
- }
- DBA::close($stmt);
+ if (!empty($a->profile['last-item'])) {
+ $json_info['updated'] = date("c", strtotime($a->profile['last-item']));
+ }
+ if (!($a->profile['hide-friends'] ?? false)) {
$json_info['contacts'] = DBA::count('contact',
[
'uid' => $a->profile['uid'],