use Friendica\Core\Worker;
use Friendica\Database\DBA;
use Friendica\DI;
-use Friendica\Model\Post;
use Friendica\Protocol\Activity;
use Friendica\Protocol\ActivityPub;
use Friendica\Protocol\Diaspora;
if ($item['uid'] == $uid) {
self::markForDeletionById($item['id'], PRIORITY_HIGH);
} elseif ($item['uid'] != 0) {
- Logger::notice('Wrong ownership. Not deleting item', ['id' => $item['id']]);
+ Logger::warning('Wrong ownership. Not deleting item', ['id' => $item['id']]);
}
}
DBA::close($items);
*/
private static function contactId(array $item): int
{
- if (!empty($item['contact-id']) && DBA::exists('contact', ['self' => true, 'id' => $item['contact-id']])) {
- return $item['contact-id'];
- } elseif (($item['gravity'] == GRAVITY_PARENT) && !empty($item['uid']) && !empty($item['contact-id']) && Contact::isSharing($item['contact-id'], $item['uid'])) {
- return $item['contact-id'];
- } elseif (!empty($item['uid']) && !Contact::isSharing($item['author-id'], $item['uid'])) {
+ if ($item['uid'] == 0) {
return $item['author-id'];
- } elseif (!empty($item['contact-id'])) {
- return $item['contact-id'];
- } else {
- $contact_id = Contact::getIdForURL($item['author-link'], $item['uid']);
+ }
+
+ if ($item['origin']) {
+ $owner = User::getOwnerDataById($item['uid']);
+ return $owner['id'];
+ }
+
+ if (!empty($item['causer-id']) && Contact::isSharing($item['causer-id'], $item['uid'], true)) {
+ $cdata = Contact::getPublicAndUserContactID($item['causer-id'], $item['uid']);
+ if (!empty($cdata['user'])) {
+ return $cdata['user'];
+ }
+ }
+
+ if ($item['gravity'] == GRAVITY_PARENT) {
+ if (Contact::isSharingByURL($item['owner-link'], $item['uid'], true)) {
+ $contact_id = Contact::getIdForURL($item['owner-link'], $item['uid']);
+ } else {
+ $contact_id = Contact::getIdForURL($item['owner-link']);
+ }
if (!empty($contact_id)) {
return $contact_id;
}
}
- return $item['author-id'];
+
+ if (Contact::isSharingByURL($item['author-link'], $item['uid'], true)) {
+ $contact_id = Contact::getIdForURL($item['author-link'], $item['uid']);
+ } else {
+ $contact_id = Contact::getIdForURL($item['author-link']);
+ }
+
+ if (!empty($contact_id)) {
+ return $contact_id;
+ }
+
+ Logger::warning('contact-id could not be fetched, using self contact instead.', ['uid' => $item['uid'], 'item' => $item]);
+ $self = Contact::selectFirst(['id'], ['self' => true, 'uid' => $item['uid']]);
+ return $self['id'];
}
/**
if (!empty($item['uid'])) {
$owner = User::getOwnerDataById($item['uid'], false);
if (!$owner) {
- Logger::notice('Missing item user owner data', ['uid' => $item['uid']]);
+ Logger::warning('Missing item user owner data', ['uid' => $item['uid']]);
return false;
}
Contact::checkAvatarCache($item['author-id']);
Contact::checkAvatarCache($item['owner-id']);
- // The contact-id should be set before "self::insert" was called - but there seems to be issues sometimes
$item['contact-id'] = self::contactId($item);
if (!empty($item['direction']) && in_array($item['direction'], [Conversation::PUSH, Conversation::RELAY]) &&
$causer = $item['causer-id'] ?: $item['author-id'];
- if (($uri_id != $item['parent-uri-id']) && (($item['gravity'] == GRAVITY_COMMENT) || $is_reshare) && !Post::exists(['uri-id' => $item['parent-uri-id'], 'uid' => $uid])) {
+ if (($uri_id != $item['parent-uri-id']) && ($item['gravity'] == GRAVITY_COMMENT) && !Post::exists(['uri-id' => $item['parent-uri-id'], 'uid' => $uid])) {
if (!self::fetchParent($item['parent-uri-id'], $uid, $causer)) {
Logger::info('Parent post had not been added', ['uri-id' => $item['parent-uri-id'], 'uid' => $uid, 'causer' => $causer]);
return 0;
}
Logger::info('Fetched parent post', ['uri-id' => $item['parent-uri-id'], 'uid' => $uid, 'causer' => $causer]);
- }
-
- if (($item['thr-parent-id'] != $item['parent-uri-id']) && ($uri_id != $item['thr-parent-id']) && (($item['gravity'] == GRAVITY_COMMENT) || $is_reshare) && !Post::exists(['uri-id' => $item['thr-parent-id'], 'uid' => $uid])) {
- if (!self::fetchParent($item['parent-uri-id'], $uid, $causer)) {
- Logger::info('Thread parent had not been added', ['uri-id' => $item['parent-uri-id'], 'uid' => $uid, 'causer' => $causer]);
+ } elseif (($uri_id != $item['thr-parent-id']) && $is_reshare && !Post::exists(['uri-id' => $item['thr-parent-id'], 'uid' => $uid])) {
+ if (!self::fetchParent($item['thr-parent-id'], $uid, $causer)) {
+ Logger::info('Thread parent had not been added', ['uri-id' => $item['thr-parent-id'], 'uid' => $uid, 'causer' => $causer]);
return 0;
}
- Logger::info('Fetched thread parent', ['uri-id' => $item['parent-uri-id'], 'uid' => $uid, 'causer' => $causer]);
+ Logger::info('Fetched thread parent', ['uri-id' => $item['thr-parent-id'], 'uid' => $uid, 'causer' => $causer]);
}
$stored = self::storeForUser($item, $uid);
$post = Post::selectFirst(['id'], ['uri-id' => $item['uri-id'], 'uid' => $uid]);
if (!empty($post['id'])) {
if (!empty($item['event-id'])) {
- $post = Post::selectFirst(['event-id'], ['uri-id' => $item['uri-id'], 'uid' => $uid]);
- if (!empty($post['event-id'])) {
+ $event_post = Post::selectFirst(['event-id'], ['uri-id' => $item['uri-id'], 'uid' => $uid]);
+ if (!empty($event_post['event-id'])) {
$event = DBA::selectFirst('event', ['edited', 'start', 'finish', 'summary', 'desc', 'location', 'nofinish', 'adjust'], ['id' => $item['event-id']]);
if (!empty($event)) {
// We aren't using "Event::store" here, since we don't want to trigger any further action
- $ret = DBA::update('event', $event, ['id' => $post['event-id']]);
- Logger::info('Event updated', ['uid' => $uid, 'source-event' => $item['event-id'], 'target-event' => $post['event-id'], 'ret' => $ret]);
+ $ret = DBA::update('event', $event, ['id' => $event_post['event-id']]);
+ Logger::info('Event updated', ['uid' => $uid, 'source-event' => $item['event-id'], 'target-event' => $event_post['event-id'], 'ret' => $ret]);
}
}
}
$item['origin'] = 0;
$item['wall'] = 0;
- if ($item['gravity'] == GRAVITY_PARENT) {
- $contact = Contact::getByURLForUser($item['owner-link'], $uid, false, ['id']);
- } else {
- $contact = Contact::getByURLForUser($item['author-link'], $uid, false, ['id']);
- }
-
- if (!empty($contact['id'])) {
- $item['contact-id'] = $contact['id'];
- } else {
- // Shouldn't happen at all
- Logger::warning('contact-id could not be fetched', ['uid' => $uid, 'item' => $item]);
- $self = DBA::selectFirst('contact', ['id'], ['self' => true, 'uid' => $uid]);
- if (!DBA::isResult($self)) {
- // Shouldn't happen even less
- Logger::warning('self contact could not be fetched', ['uid' => $uid, 'item' => $item]);
- return 0;
- }
- $item['contact-id'] = $self['id'];
- }
+ $item['contact-id'] = self::contactId($item);
$notify = false;
if ($item['gravity'] == GRAVITY_PARENT) {
$item = Post::selectFirst(self::ITEM_FIELDLIST, ['id' => $item_id]);
if (!DBA::isResult($item)) {
- Logger::notice('like: unknown item', ['id' => $item_id]);
+ Logger::warning('Post had not been fetched', ['id' => $item_id]);
return false;
}
}
// Retrieve the current logged in user's public contact
- $author_id = Contact::getIdForURL($owner['url']);
+ $author_id = Contact::getPublicIdByUserId($uid);
if (empty($author_id)) {
Logger::info('Empty public contact');
return false;
$activity = Activity::ANNOUNCE;
break;
default:
- Logger::notice('unknown verb', ['verb' => $verb, 'item' => $item_id]);
+ Logger::warning('unknown verb', ['verb' => $verb, 'item' => $item_id]);
return false;
}
$new_item = [
'guid' => System::createUUID(),
'uri' => self::newURI(),
- 'uid' => $item['uid'],
+ 'uid' => $uid,
'contact-id' => $owner['id'],
'wall' => $item['wall'],
'origin' => 1,
'unseen' => 1,
];
- $signed = Diaspora::createLikeSignature($uid, $new_item);
- if (!empty($signed)) {
- $new_item['diaspora_signed_text'] = json_encode($signed);
+ if (in_array($activity, [Activity::LIKE, Activity::DISLIKE])) {
+ $signed = Diaspora::createLikeSignature($uid, $new_item);
+ if (!empty($signed)) {
+ $new_item['diaspora_signed_text'] = json_encode($signed);
+ }
}
- $new_item_id = self::insert($new_item);
+ self::insert($new_item, true);
// If the parent item isn't visible then set it to visible
+ // @todo Check if this is still needed
if (!$item['visible']) {
self::update(['visible' => true], ['id' => $item['id']]);
}
-
- $new_item['id'] = $new_item_id;
-
- Hook::callAll('post_local_end', $new_item);
-
return true;
}