diff --git a/src/Model/Post/UserNotification.php b/src/Model/Post/UserNotification.php index f4e700f0bc..d16ec4936f 100644 --- a/src/Model/Post/UserNotification.php +++ b/src/Model/Post/UserNotification.php @@ -308,7 +308,7 @@ class UserNotification return; } - $notification = (new Notifications\Factory\Notification(DI::baseUrl(), DI::l10n(), DI::localRelationship(), DI::logger()))->createForUser( + $notification = DI::notificationFactory()->createForUser( $uid, $item['vid'], $type, @@ -336,7 +336,7 @@ class UserNotification */ public static function insertNotification(int $actor, string $verb, int $uid): bool { - $notification = (new Notifications\Factory\Notification(DI::baseUrl(), DI::l10n(), DI::localRelationship(), DI::logger()))->createForRelationship( + $notification = DI::notificationFactory()->createForRelationship( $uid, $actor, $verb diff --git a/src/Navigation/Notifications/Factory/Notification.php b/src/Navigation/Notifications/Factory/Notification.php index ea74357c03..b2132beaff 100644 --- a/src/Navigation/Notifications/Factory/Notification.php +++ b/src/Navigation/Notifications/Factory/Notification.php @@ -25,7 +25,10 @@ use Friendica\App\BaseURL; use Friendica\BaseFactory; use Friendica\Capabilities\ICanCreateFromTableRow; use Friendica\Contact\LocalRelationship\Repository\LocalRelationship; +use Friendica\Content\Text\BBCode; use Friendica\Content\Text\Plaintext; +use Friendica\Core\Cache\Enum\Duration; +use Friendica\Core\Cache\Capability\ICanCache; use Friendica\Core\L10n; use Friendica\Model\Contact; use Friendica\Model\Post; @@ -43,14 +46,17 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow private $l10n; /** @var LocalRelationship */ private $localRelationshipRepo; + /** @var ICanCache */ + private $cache; - public function __construct(\Friendica\App\BaseURL $baseUrl, \Friendica\Core\L10n $l10n, \Friendica\Contact\LocalRelationship\Repository\LocalRelationship $localRelationshipRepo, LoggerInterface $logger) + public function __construct(\Friendica\App\BaseURL $baseUrl, \Friendica\Core\L10n $l10n, \Friendica\Contact\LocalRelationship\Repository\LocalRelationship $localRelationshipRepo, LoggerInterface $logger, ICanCache $cache) { parent::__construct($logger); $this->baseUrl = $baseUrl; $this->l10n = $l10n; $this->localRelationshipRepo = $localRelationshipRepo; + $this->cache = $cache; } public function createFromTableRow(array $row): Entity\Notification @@ -107,6 +113,12 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow { $message = []; + $cachekey = 'Notification:' . $Notification->id; + $result = $this->cache->get($cachekey); + if (!is_null($result)) { + return $result; + } + $causer = $author = Contact::getById($Notification->actorId, ['id', 'name', 'url', 'contact-type', 'pending']); if (empty($causer)) { $this->logger->info('Causer not found', ['contact' => $Notification->actorId]); @@ -132,7 +144,7 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow $this->logger->info('Thread is ignored', ['parent-uri-id' => $Notification->parentUriId, 'type' => $Notification->type]); return $message; } - + if (in_array($Notification->type, [Post\UserNotification::TYPE_THREAD_COMMENT, Post\UserNotification::TYPE_COMMENT_PARTICIPATION, Post\UserNotification::TYPE_ACTIVITY_PARTICIPATION, Post\UserNotification::TYPE_EXPLICIT_TAGGED])) { $item = Post::selectFirst([], ['uri-id' => $Notification->parentUriId, 'uid' => [0, $Notification->uid]], ['order' => ['uid' => true]]); if (empty($item)) { @@ -170,11 +182,10 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow $link = $this->baseUrl . '/display/' . urlencode($link_item['guid']); - $content = Plaintext::getPost($item, 70); - if (!empty($content['text'])) { - $title = '"' . trim(str_replace("\n", " ", $content['text'])) . '"'; - } else { - $title = ''; + $body = BBCode::toPlaintext($item['body'], false); + $title = Plaintext::shorten($body, 70); + if (!empty($title)) { + $title = '"' . trim(str_replace("\n", " ", $title)) . '"'; } $this->logger->debug('Got verb and type', ['verb' => $Notification->verb, 'type' => $Notification->type, 'causer' => $causer['id'], 'author' => $author['id'], 'item' => $item['id'], 'uid' => $Notification->uid]); @@ -306,6 +317,7 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow '[url=' . $link . ']' . $title . '[/url]', '[url=' . $author['url'] . ']' . $author['name'] . '[/url]'); $message['link'] = $link; + $this->cache->set($cachekey, $message, Duration::HOUR); } else { $this->logger->debug('Unhandled notification', ['notification' => $Notification]); } diff --git a/src/Navigation/Notifications/Repository/Notify.php b/src/Navigation/Notifications/Repository/Notify.php index 9773b6446a..c114375be7 100644 --- a/src/Navigation/Notifications/Repository/Notify.php +++ b/src/Navigation/Notifications/Repository/Notify.php @@ -23,6 +23,7 @@ namespace Friendica\Navigation\Notifications\Repository; use Friendica\App\BaseURL; use Friendica\BaseRepository; +use Friendica\Content\Text\BBCode; use Friendica\Content\Text\Plaintext; use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Hook; @@ -301,11 +302,10 @@ class Notify extends BaseRepository $item_post_type = Model\Item::postType($item, $l10n); - $content = Plaintext::getPost($item, 70); - if (!empty($content['text'])) { - $title = '"' . trim(str_replace("\n", " ", $content['text'])) . '"'; - } else { - $title = ''; + $body = BBCode::toPlaintext($item['body'], false); + $title = Plaintext::shorten($body, 70); + if (!empty($title)) { + $title = '"' . trim(str_replace("\n", " ", $title)) . '"'; } // First go for the general message @@ -710,11 +710,10 @@ class Notify extends BaseRepository return false; } - $content = Plaintext::getPost($item, 70); - if (!empty($content['text'])) { - $title = '"' . trim(str_replace("\n", " ", $content['text'])) . '"'; - } else { - $title = $item['title']; + $body = BBCode::toPlaintext($item['body'], false); + $title = Plaintext::shorten($body, 70); + if (!empty($title)) { + $title = '"' . trim(str_replace("\n", " ", $title)) . '"'; } // Some mail software relies on subject field for threading.