use Friendica\Util\Strings;
use Friendica\Util\Temporal;
use Friendica\Worker\Delivery;
+use GuzzleHttp\Psr7\Uri;
use LanguageDetection\Language;
class Item
const PR_GLOBAL = 73;
const PR_RELAY = 74;
const PR_FETCHED = 75;
+ const PR_COMPLETION = 76;
+ const PR_DIRECT = 77;
+ const PR_ACTIVITY = 78;
+ const PR_DISTRIBUTE = 79;
+ const PR_PUSHED = 80;
+ const PR_LOCAL = 81;
// system.accept_only_sharer setting values
const COMPLETION_NONE = 1;
$parent = Post::selectFirst($fields, $condition, $params);
if (!DBA::isResult($parent) && Post::exists(['uri-id' => [$item['thr-parent-id'], $item['parent-uri-id']], 'uid' => 0])) {
- $stored = Item::storeForUserByUriId($item['thr-parent-id'], $item['uid']);
+ $stored = Item::storeForUserByUriId($item['thr-parent-id'], $item['uid'], ['post-reason' => Item::PR_COMPLETION]);
if (!$stored && ($item['thr-parent-id'] != $item['parent-uri-id'])) {
- $stored = Item::storeForUserByUriId($item['parent-uri-id'], $item['uid']);
+ $stored = Item::storeForUserByUriId($item['parent-uri-id'], $item['uid'], ['post-reason' => Item::PR_COMPLETION]);
}
if ($stored) {
Logger::info('Stored thread parent item for user', ['uri-id' => $item['thr-parent-id'], 'uid' => $item['uid'], 'stored' => $stored]);
$toplevel_parent = Post::selectFirst($fields, $condition, $params);
if (!DBA::isResult($toplevel_parent) && $item['origin']) {
- $stored = Item::storeForUserByUriId($item['parent-uri-id'], $item['uid']);
+ $stored = Item::storeForUserByUriId($item['parent-uri-id'], $item['uid'], ['post-reason' => Item::PR_COMPLETION]);
Logger::info('Stored parent item for user', ['uri-id' => $item['parent-uri-id'], 'uid' => $item['uid'], 'stored' => $stored]);
$toplevel_parent = Post::selectFirst($fields, $condition, $params);
}
$item['parent-uri-id'] = ItemURI::getIdByURI($item['parent-uri']);
// Store conversation data
- $item = Conversation::insert($item);
+ $source = $item['source'] ?? '';
+ unset($item['conversation-uri']);
+ unset($item['conversation-href']);
+ unset($item['source']);
/*
* Do we already have this item?
$item['post-reason'] = self::PR_FOLLOWER;
}
+ if ($item['origin'] && empty($item['post-reason'])) {
+ $item['post-reason'] = self::PR_LOCAL;
+ }
+
// Ensure that there is an avatar cache
Contact::checkAvatarCache($item['author-id']);
Contact::checkAvatarCache($item['owner-id']);
}
if ($transmit) {
+ if (!empty($source)) {
+ Post\Activity::insert($item['uri-id'], $source);
+ }
Worker::add(['priority' => $priority, 'dont_fork' => true], 'Notifier', $notify_type, (int)$posted_item['uri-id'], (int)$posted_item['uid']);
}
$uids = Tag::getUIDListByURIId($item['uri-id']);
foreach ($uids as $uid) {
- if (Contact::isSharing($item['author-id'], $uid)) {
- $fields = [];
- } else {
- $fields = ['post-reason' => self::PR_TAG];
- }
-
- $stored = self::storeForUserByUriId($item['uri-id'], $uid, $fields);
- Logger::info('Stored item for users', ['uri-id' => $item['uri-id'], 'uid' => $uid, 'fields' => $fields, 'stored' => $stored]);
+ $stored = self::storeForUserByUriId($item['uri-id'], $uid, ['post-reason' => self::PR_TAG]);
+ Logger::info('Stored item for users', ['uri-id' => $item['uri-id'], 'uid' => $uid, 'stored' => $stored]);
}
}
$condition = ['id' => $itemid, 'uid' => 0,
'network' => array_merge(Protocol::FEDERATED ,['']),
'visible' => true, 'deleted' => false, 'private' => [self::PUBLIC, self::UNLISTED]];
- $item = Post::selectFirst(self::ITEM_FIELDLIST, $condition);
+ $item = Post::selectFirst(array_merge(self::ITEM_FIELDLIST, ['protocol']), $condition);
if (!DBA::isResult($item)) {
Logger::warning('Item not found', ['condition' => $condition]);
return;
if ($origin_uid == $uid) {
$item['diaspora_signed_text'] = $signed_text;
}
+ $item['post-reason'] = self::PR_DISTRIBUTE;
self::storeForUser($item, $uid);
}
}
return 0;
}
- $item = Post::selectFirst(self::ITEM_FIELDLIST, ['uri-id' => $uri_id, 'uid' => $source_uid]);
+ $item = Post::selectFirst(array_merge(self::ITEM_FIELDLIST, ['protocol']), ['uri-id' => $uri_id, 'uid' => $source_uid]);
if (!DBA::isResult($item)) {
Logger::warning('Item could not be fetched', ['uri-id' => $uri_id, 'uid' => $source_uid]);
return 0;
unset($item['event-id']);
unset($item['hidden']);
unset($item['notification-type']);
- unset($item['post-reason']);
// Data from the "post-delivery-data" table
unset($item['postopts']);
return;
}
- $item = Post::selectFirst(self::ITEM_FIELDLIST, ['id' => $itemid]);
+ $item = Post::selectFirst(array_merge(self::ITEM_FIELDLIST, ['protocol']), ['id' => $itemid]);
if (DBA::isResult($item)) {
// Preparing public shadow (removing user specific data)
*/
private static function addShadowPost(int $itemid)
{
- $item = Post::selectFirst(self::ITEM_FIELDLIST, ['id' => $itemid]);
+ $item = Post::selectFirst(array_merge(self::ITEM_FIELDLIST, ['protocol']), ['id' => $itemid]);
if (!DBA::isResult($item)) {
return;
}
}
if (!Post::exists(['uri-id' => $item['parent-uri-id'], 'uid' => $uid])) {
- $stored = self::storeForUserByUriId($item['parent-uri-id'], $uid);
+ $stored = self::storeForUserByUriId($item['parent-uri-id'], $uid, ['post-reason' => Item::PR_ACTIVITY]);
if (($item['parent-uri-id'] == $item['uri-id']) && !empty($stored)) {
$item = Post::selectFirst(self::ITEM_FIELDLIST, ['id' => $stored]);
if (!DBA::isResult($item)) {
{
// Make sure that for example site parameters aren't used when testing if the link is contained in the body
$urlparts = parse_url($url);
- unset($urlparts['query']);
- unset($urlparts['fragment']);
- $url = Network::unparseURL($urlparts);
+ if (!empty($urlparts)) {
+ unset($urlparts['query']);
+ unset($urlparts['fragment']);
+ $url = (string)Uri::fromParts($urlparts);
+ } else {
+ return false;
+ }
// Remove media links to only search in embedded content
// @todo Check images for image link, audio for audio links, ...