use Friendica\Protocol\Activity;
use Friendica\Protocol\Relay;
use Friendica\Util\DateTimeFormat;
+use Friendica\Util\Strings;
// Channel
return;
}
- $parent = Post::selectFirst(['uri-id', 'created', 'owner-id', 'uid', 'private', 'contact-contact-type', 'language', 'title', 'content-warning', 'body'], ['uri-id' => $item['parent-uri-id']]);
+ $parent = Post::selectFirst(['uri-id', 'created', 'author-id', 'owner-id', 'uid', 'private', 'contact-contact-type', 'language', 'network',
+ 'title', 'content-warning', 'body', 'author-contact-type', 'author-nick', 'author-addr', 'owner-contact-type', 'owner-nick', 'owner-addr'],
+ ['uri-id' => $item['parent-uri-id']]);
- if ($parent['created'] < DateTimeFormat::utc('now - ' . DI::config()->get('channel', 'engagement_hours') . ' hour')) {
+ if ($parent['created'] < self::getCreationDateLimit(false)) {
Logger::debug('Post is too old', ['uri-id' => $item['uri-id'], 'parent-uri-id' => $item['parent-uri-id'], 'created' => $parent['created']]);
return;
}
private static function getSearchText(array $item): string
{
- $body = $item['title'] . "\n" . $item['content-warning'] . "\n" . $item['body'] . "\n";
- $body = Post\Media::addAttachmentsToBody($item['uri-id'], $body);
+ $body = '[nosmile]network:' . $item['network'];
+
+ switch ($item['private']) {
+ case Item::PUBLIC:
+ $body .= ' visibility:public';
+ break;
+ case Item::UNLISTED:
+ $body .= ' visibility:unlisted';
+ break;
+ case Item::PRIVATE:
+ $body .= ' visibility:private';
+ break;
+ }
+
+ if ($item['author-contact-type'] == Contact::TYPE_COMMUNITY) {
+ $body .= ' group:' . $item['author-nick'] . ' group:' . $item['author-addr'];
+ } elseif (in_array($item['author-contact-type'], [Contact::TYPE_PERSON, Contact::TYPE_NEWS, Contact::TYPE_ORGANISATION])) {
+ $body .= ' from:' . $item['author-nick'] . ' from:' . $item['author-addr'];
+ }
+
+ if ($item['author-id'] != $item['owner-id']) {
+ if ($item['owner-contact-type'] == Contact::TYPE_COMMUNITY) {
+ $body .= ' group:' . $item['owner-nick'] . ' group:' . $item['owner-addr'];
+ } elseif (in_array($item['owner-contact-type'], [Contact::TYPE_PERSON, Contact::TYPE_NEWS, Contact::TYPE_ORGANISATION])) {
+ $body .= ' from:' . $item['owner-nick'] . ' from:' . $item['owner-addr'];
+ }
+ }
+
+ foreach (Tag::getByURIId($item['uri-id'], [Tag::MENTION, Tag::IMPLICIT_MENTION, Tag::EXCLUSIVE_MENTION, Tag::AUDIENCE]) as $tag) {
+ $contact = Contact::getByURL($tag['name'], false, ['nick', 'addr', 'contact-type']);
+ if (empty($contact)) {
+ continue;
+ }
+
+ if (($contact['contact-type'] == Contact::TYPE_COMMUNITY) && !strpos($body, 'group:' . $contact['addr'])) {
+ $body .= ' group:' . $contact['nick'] . ' group:' . $contact['addr'];
+ } elseif (in_array($contact['contact-type'], [Contact::TYPE_PERSON, Contact::TYPE_NEWS, Contact::TYPE_ORGANISATION])) {
+ $body .= ' to:' . $contact['nick'] . ' to:' . $contact['addr'];
+ }
+ }
+
+ foreach (Tag::getByURIId($item['uri-id'], [Tag::HASHTAG]) as $tag) {
+ $body .= ' tag:' . $tag['name'];
+ }
+
+ $body .= ' ' . $item['title'] . ' ' . $item['content-warning'] . ' ' . $item['body'];
+
+ $body = preg_replace("~\[url\=.*\]https?:.*\[\/url\]~", '', $body);
+
+ $body = Post\Media::addAttachmentsToBody($item['uri-id'], $body, [Post\Media::IMAGE]);
$text = BBCode::toPlaintext($body, false);
+ $text = preg_replace(Strings::autoLinkRegEx(), '', $text);
do {
$oldtext = $text;
*/
public static function expire()
{
- DBA::delete('post-engagement', ["`created` < ?", DateTimeFormat::utc('now - ' . DI::config()->get('channel', 'engagement_hours') . ' hour')]);
- Logger::notice('Cleared expired engagements', ['rows' => DBA::affectedRows()]);
+ $limit = self::getCreationDateLimit(true);
+ if (empty($limit)) {
+ Logger::notice('Expiration limit not reached');
+ return;
+ }
+ DBA::delete('post-engagement', ["`created` < ?", $limit]);
+ Logger::notice('Cleared expired engagements', ['limit' => $limit, 'rows' => DBA::affectedRows()]);
+ }
+
+ private static function getCreationDateLimit(bool $forDeletion): string
+ {
+ $posts = DI::config()->get('channel', 'engagement_post_limit');
+ if (!empty($posts)) {
+ $limit = DBA::selectToArray('post-engagement', ['created'], [], ['limit' => [$posts, 1], 'order' => ['created' => true]]);
+ if (!empty($limit)) {
+ return $limit[0]['created'];
+ } elseif ($forDeletion) {
+ return '';
+ }
+ }
+
+ return DateTimeFormat::utc('now - ' . DI::config()->get('channel', 'engagement_hours') . ' hour');
}
}