]> git.mxchange.org Git - friendica.git/commitdiff
Notify => Notification
authornupplaPhil <admin@philipp.info>
Fri, 24 Jan 2020 17:32:38 +0000 (18:32 +0100)
committernupplaPhil <admin@philipp.info>
Fri, 24 Jan 2020 17:32:38 +0000 (18:32 +0100)
Notifs => Notifications

22 files changed:
include/api.php
include/enotify.php
mod/ping.php
src/DI.php
src/Model/Notification.php [new file with mode: 0644]
src/Model/Notify.php [deleted file]
src/Module/BaseNotifications.php
src/Module/Notifications/Introductions.php
src/Module/Notifications/Notification.php [new file with mode: 0644]
src/Module/Notifications/Notifications.php
src/Module/Notifications/Notify.php [deleted file]
static/routes.config.php
view/js/main.js
view/templates/notifications/notification.tpl [new file with mode: 0644]
view/templates/notifications/notify.tpl [deleted file]
view/theme/frio/templates/notifications/attend_item.tpl
view/theme/frio/templates/notifications/comments_item.tpl
view/theme/frio/templates/notifications/dislikes_item.tpl
view/theme/frio/templates/notifications/friends_item.tpl
view/theme/frio/templates/notifications/likes_item.tpl
view/theme/frio/templates/notifications/network_item.tpl
view/theme/frio/templates/notifications/posts_item.tpl

index 92b4e4b218548ae72ef04ca610e3bab14b245a53..3836caa19d7d72229496d0095b3d21e71ab187ab 100644 (file)
@@ -5905,7 +5905,7 @@ function api_friendica_notification($type)
        if ($a->argc!==3) {
                throw new BadRequestException("Invalid argument count");
        }
-       $notes = DI::notify()->getAll([], ['seen' => 'ASC', 'date' => 'DESC'], 50);
+       $notes = DI::notification()->getAll([], ['seen' => 'ASC', 'date' => 'DESC'], 50);
 
        if ($type == "xml") {
                $xmlnotes = [];
@@ -5947,7 +5947,7 @@ function api_friendica_notification_seen($type)
 
        $id = (!empty($_REQUEST['id']) ? intval($_REQUEST['id']) : 0);
 
-       $nm = DI::notify();
+       $nm = DI::notification();
        $note = $nm->getByID($id);
        if (is_null($note)) {
                throw new BadRequestException("Invalid argument");
index 4bd9eb6967e1a51fcb476e386f0ae185bc951ef0..403688af6d2831cbac97c8039580f2f118d0ae49 100644 (file)
@@ -516,7 +516,7 @@ function notification($params)
 
                $notify_id = DBA::lastInsertId();
 
-               $itemlink = DI::baseUrl().'/notify/view/'.$notify_id;
+               $itemlink = DI::baseUrl().'/notification/view/'.$notify_id;
                $msg = Renderer::replaceMacros($epreamble, ['$itemlink' => $itemlink]);
                $msg_cache = format_notification_message($datarray['name_cache'], strip_tags(BBCode::convert($msg)));
 
index 4890197074ca93ecc780364d5d10310aa07bd1d3..f9dd7faf279d60893075f8a0413cf52d57b0777f 100644 (file)
@@ -443,7 +443,7 @@ function ping_get_notifications($uid)
                                );
                        }
 
-                       $notification["href"] = DI::baseUrl() . "/notify/view/" . $notification["id"];
+                       $notification["href"] = DI::baseUrl() . "/notification/view/" . $notification["id"];
 
                        if ($notification["visible"]
                                && !$notification["deleted"]
index e6d9c341b7ed42a826734686df9c550611b652c7..67e0b17315d78c4fb42138f76dbef5a7e9cc1153 100644 (file)
@@ -257,11 +257,11 @@ abstract class DI
        }
 
        /**
-        * @return Model\Notify
+        * @return Model\Notification
         */
-       public static function notify()
+       public static function notification()
        {
-               return self::$dice->create(Model\Notify::class);
+               return self::$dice->create(Model\Notification::class);
        }
 
        /**
diff --git a/src/Model/Notification.php b/src/Model/Notification.php
new file mode 100644 (file)
index 0000000..b31014a
--- /dev/null
@@ -0,0 +1,723 @@
+<?php
+
+namespace Friendica\Model;
+
+use Exception;
+use Friendica\App;
+use Friendica\Content\Text\BBCode;
+use Friendica\Content\Text\HTML;
+use Friendica\Core\PConfig\IPConfig;
+use Friendica\Core\L10n;
+use Friendica\Core\Protocol;
+use Friendica\Core\System;
+use Friendica\Database\Database;
+use Friendica\DI;
+use Friendica\Protocol\Activity;
+use Friendica\Util\DateTimeFormat;
+use Friendica\Util\Proxy as ProxyUtils;
+use Friendica\Util\Temporal;
+use Friendica\Util\XML;
+use ImagickException;
+use Psr\Log\LoggerInterface;
+use Friendica\Network\HTTPException;
+
+/**
+ * Methods for read and write notifications from/to database
+ *  or for formatting notifications
+ */
+final class Notification
+{
+       /** @var int The default limit of notifies per page */
+       const DEFAULT_PAGE_LIMIT = 80;
+
+       const NETWORK  = 'network';
+       const SYSTEM   = 'system';
+       const PERSONAL = 'personal';
+       const HOME     = 'home';
+       const INTRO    = 'intro';
+
+       /** @var Database */
+       private $dba;
+       /** @var L10n */
+       private $l10n;
+       /** @var App\Arguments */
+       private $args;
+       /** @var App\BaseURL */
+       private $baseUrl;
+       /** @var IPConfig */
+       private $pConfig;
+       /** @var LoggerInterface */
+       private $logger;
+
+       public function __construct(Database $dba, L10n $l10n, App\Arguments $args, App\BaseURL $baseUrl,
+                                   IPConfig $pConfig, LoggerInterface $logger)
+       {
+               $this->dba     = $dba;
+               $this->l10n    = $l10n;
+               $this->args    = $args;
+               $this->baseUrl = $baseUrl;
+               $this->pConfig = $pConfig;
+               $this->logger  = $logger;
+       }
+
+       /**
+        * Set some extra properties to note array from db:
+        *  - timestamp as int in default TZ
+        *  - date_rel : relative date string
+        *  - msg_html: message as html string
+        *  - msg_plain: message as plain text string
+        *
+        * @param array $notes array of note arrays from db
+        *
+        * @return array Copy of input array with added properties
+        *
+        * @throws Exception
+        */
+       private function setExtra(array $notes)
+       {
+               $retNotes = [];
+               foreach ($notes as $note) {
+                       $local_time        = DateTimeFormat::local($note['date']);
+                       $note['timestamp'] = strtotime($local_time);
+                       $note['date_rel']  = Temporal::getRelativeDate($note['date']);
+                       $note['msg_html']  = BBCode::convert($note['msg'], false);
+                       $note['msg_plain'] = explode("\n", trim(HTML::toPlaintext($note['msg_html'], 0)))[0];
+
+                       $retNotes[] = $note;
+               }
+               return $retNotes;
+       }
+
+       /**
+        * Get all notifications for local_user()
+        *
+        * @param array  $filter optional Array "column name"=>value: filter query by columns values
+        * @param array  $order  optional Array to order by
+        * @param string $limit  optional Query limits
+        *
+        * @return array|bool of results or false on errors
+        * @throws Exception
+        */
+       public function getAll(array $filter = [], array $order = ['date' => 'DESC'], string $limit = "")
+       {
+               $params = [];
+
+               $params['order'] = $order;
+
+               if (!empty($limit)) {
+                       $params['limit'] = $limit;
+               }
+
+               $dbFilter = array_merge($filter, ['uid' => local_user()]);
+
+               $stmtNotifies = $this->dba->select('notify', [], $dbFilter, $params);
+
+               if ($this->dba->isResult($stmtNotifies)) {
+                       return $this->setExtra($this->dba->toArray($stmtNotifies));
+               }
+
+               return false;
+       }
+
+       /**
+        * Get one note for local_user() by $id value
+        *
+        * @param int $id identity
+        *
+        * @return array note values or null if not found
+        * @throws Exception
+        */
+       public function getByID(int $id)
+       {
+               $stmtNotify = $this->dba->selectFirst('notify', [], ['id' => $id, 'uid' => local_user()]);
+               if ($this->dba->isResult($stmtNotify)) {
+                       return $this->setExtra([$stmtNotify])[0];
+               }
+               return null;
+       }
+
+       /**
+        * set seen state of $note of local_user()
+        *
+        * @param array $note note array
+        * @param bool  $seen optional true or false, default true
+        *
+        * @return bool true on success, false on errors
+        * @throws Exception
+        */
+       public function setSeen(array $note, bool $seen = true)
+       {
+               return $this->dba->update('notify', ['seen' => $seen], [
+                       '(`link` = ? OR (`parent` != 0 AND `parent` = ? AND `otype` = ?)) AND `uid` = ?',
+                       $note['link'],
+                       $note['parent'],
+                       $note['otype'],
+                       local_user()
+               ]);
+       }
+
+       /**
+        * Set seen state of all notifications of local_user()
+        *
+        * @param bool $seen optional true or false. default true
+        *
+        * @return bool true on success, false on error
+        * @throws Exception
+        */
+       public function setAllSeen(bool $seen = true)
+       {
+               return $this->dba->update('notify', ['seen' => $seen], ['uid' => local_user()]);
+       }
+
+       /**
+        * Format the notification query in an usable array
+        *
+        * @param array  $notifications The array from the db query
+        * @param string $ident         The notifications identifier (e.g. network)
+        *
+        * @return array
+        *                       string 'label' => The type of the notification
+        *                       string 'link' => URL to the source
+        *                       string 'image' => The avatar image
+        *                       string 'url' => The profile url of the contact
+        *                       string 'text' => The notification text
+        *                       string 'when' => The date of the notification
+        *                       string 'ago' => T relative date of the notification
+        *                       bool 'seen' => Is the notification marked as "seen"
+        * @throws Exception
+        */
+       private function formatList(array $notifications, string $ident = "")
+       {
+               $formattedNotifies = [];
+
+               foreach ($notifications as $notification) {
+                       // Because we use different db tables for the notification query
+                       // we have sometimes $notification['unseen'] and sometimes $notification['seen].
+                       // So we will have to transform $notification['unseen']
+                       if (array_key_exists('unseen', $notification)) {
+                               $notification['seen'] = ($notification['unseen'] > 0 ? false : true);
+                       }
+
+                       // For feed items we use the user's contact, since the avatar is mostly self choosen.
+                       if (!empty($notification['network']) && $notification['network'] == Protocol::FEED) {
+                               $notification['author-avatar'] = $notification['contact-avatar'];
+                       }
+
+                       // Depending on the identifier of the notification we need to use different defaults
+                       switch ($ident) {
+                               case self::SYSTEM:
+                                       $default_item_label = 'notification';
+                                       $default_item_link  = $this->baseUrl->get(true) . '/notification/view/' . $notification['id'];
+                                       $default_item_image = ProxyUtils::proxifyUrl($notification['photo'], false, ProxyUtils::SIZE_MICRO);
+                                       $default_item_url   = $notification['url'];
+                                       $default_item_text  = strip_tags(BBCode::convert($notification['msg']));
+                                       $default_item_when  = DateTimeFormat::local($notification['date'], 'r');
+                                       $default_item_ago   = Temporal::getRelativeDate($notification['date']);
+                                       break;
+
+                               case self::HOME:
+                                       $default_item_label = 'comment';
+                                       $default_item_link  = $this->baseUrl->get(true) . '/display/' . $notification['parent-guid'];
+                                       $default_item_image = ProxyUtils::proxifyUrl($notification['author-avatar'], false, ProxyUtils::SIZE_MICRO);
+                                       $default_item_url   = $notification['author-link'];
+                                       $default_item_text  = $this->l10n->t("%s commented on %s's post", $notification['author-name'], $notification['parent-author-name']);
+                                       $default_item_when  = DateTimeFormat::local($notification['created'], 'r');
+                                       $default_item_ago   = Temporal::getRelativeDate($notification['created']);
+                                       break;
+
+                               default:
+                                       $default_item_label = (($notification['id'] == $notification['parent']) ? 'post' : 'comment');
+                                       $default_item_link  = $this->baseUrl->get(true) . '/display/' . $notification['parent-guid'];
+                                       $default_item_image = ProxyUtils::proxifyUrl($notification['author-avatar'], false, ProxyUtils::SIZE_MICRO);
+                                       $default_item_url   = $notification['author-link'];
+                                       $default_item_text  = (($notification['id'] == $notification['parent'])
+                                               ? $this->l10n->t("%s created a new post", $notification['author-name'])
+                                               : $this->l10n->t("%s commented on %s's post", $notification['author-name'], $notification['parent-author-name']));
+                                       $default_item_when  = DateTimeFormat::local($notification['created'], 'r');
+                                       $default_item_ago   = Temporal::getRelativeDate($notification['created']);
+                       }
+
+                       // Transform the different types of notification in an usable array
+                       switch ($notification['verb']) {
+                               case Activity::LIKE:
+                                       $formattedNotify = [
+                                               'label' => 'like',
+                                               'link'  => $this->baseUrl->get(true) . '/display/' . $notification['parent-guid'],
+                                               'image' => ProxyUtils::proxifyUrl($notification['author-avatar'], false, ProxyUtils::SIZE_MICRO),
+                                               'url'   => $notification['author-link'],
+                                               'text'  => $this->l10n->t("%s liked %s's post", $notification['author-name'], $notification['parent-author-name']),
+                                               'when'  => $default_item_when,
+                                               'ago'   => $default_item_ago,
+                                               'seen'  => $notification['seen']
+                                       ];
+                                       break;
+
+                               case Activity::DISLIKE:
+                                       $formattedNotify = [
+                                               'label' => 'dislike',
+                                               'link'  => $this->baseUrl->get(true) . '/display/' . $notification['parent-guid'],
+                                               'image' => ProxyUtils::proxifyUrl($notification['author-avatar'], false, ProxyUtils::SIZE_MICRO),
+                                               'url'   => $notification['author-link'],
+                                               'text'  => $this->l10n->t("%s disliked %s's post", $notification['author-name'], $notification['parent-author-name']),
+                                               'when'  => $default_item_when,
+                                               'ago'   => $default_item_ago,
+                                               'seen'  => $notification['seen']
+                                       ];
+                                       break;
+
+                               case Activity::ATTEND:
+                                       $formattedNotify = [
+                                               'label' => 'attend',
+                                               'link'  => $this->baseUrl->get(true) . '/display/' . $notification['parent-guid'],
+                                               'image' => ProxyUtils::proxifyUrl($notification['author-avatar'], false, ProxyUtils::SIZE_MICRO),
+                                               'url'   => $notification['author-link'],
+                                               'text'  => $this->l10n->t("%s is attending %s's event", $notification['author-name'], $notification['parent-author-name']),
+                                               'when'  => $default_item_when,
+                                               'ago'   => $default_item_ago,
+                                               'seen'  => $notification['seen']
+                                       ];
+                                       break;
+
+                               case Activity::ATTENDNO:
+                                       $formattedNotify = [
+                                               'label' => 'attendno',
+                                               'link'  => $this->baseUrl->get(true) . '/display/' . $notification['parent-guid'],
+                                               'image' => ProxyUtils::proxifyUrl($notification['author-avatar'], false, ProxyUtils::SIZE_MICRO),
+                                               'url'   => $notification['author-link'],
+                                               'text'  => $this->l10n->t("%s is not attending %s's event", $notification['author-name'], $notification['parent-author-name']),
+                                               'when'  => $default_item_when,
+                                               'ago'   => $default_item_ago,
+                                               'seen'  => $notification['seen']
+                                       ];
+                                       break;
+
+                               case Activity::ATTENDMAYBE:
+                                       $formattedNotify = [
+                                               'label' => 'attendmaybe',
+                                               'link'  => $this->baseUrl->get(true) . '/display/' . $notification['parent-guid'],
+                                               'image' => ProxyUtils::proxifyUrl($notification['author-avatar'], false, ProxyUtils::SIZE_MICRO),
+                                               'url'   => $notification['author-link'],
+                                               'text'  => $this->l10n->t("%s may attend %s's event", $notification['author-name'], $notification['parent-author-name']),
+                                               'when'  => $default_item_when,
+                                               'ago'   => $default_item_ago,
+                                               'seen'  => $notification['seen']
+                                       ];
+                                       break;
+
+                               case Activity::FRIEND:
+                                       if (!isset($notification['object'])) {
+                                               $formattedNotify = [
+                                                       'label' => 'friend',
+                                                       'link'  => $default_item_link,
+                                                       'image' => $default_item_image,
+                                                       'url'   => $default_item_url,
+                                                       'text'  => $default_item_text,
+                                                       'when'  => $default_item_when,
+                                                       'ago'   => $default_item_ago,
+                                                       'seen'  => $notification['seen']
+                                               ];
+                                               break;
+                                       }
+                                       /// @todo Check if this part here is used at all
+                                       $this->logger->info('Complete data.', ['notification' => $notification, 'callStack' => System::callstack(20)]);
+
+                                       $xmlHead               = "<" . "?xml version='1.0' encoding='UTF-8' ?" . ">";
+                                       $obj                   = XML::parseString($xmlHead . $notification['object']);
+                                       $notification['fname'] = $obj->title;
+
+                                       $formattedNotify = [
+                                               'label' => 'friend',
+                                               'link'  => $this->baseUrl->get(true) . '/display/' . $notification['parent-guid'],
+                                               'image' => ProxyUtils::proxifyUrl($notification['author-avatar'], false, ProxyUtils::SIZE_MICRO),
+                                               'url'   => $notification['author-link'],
+                                               'text'  => $this->l10n->t("%s is now friends with %s", $notification['author-name'], $notification['fname']),
+                                               'when'  => $default_item_when,
+                                               'ago'   => $default_item_ago,
+                                               'seen'  => $notification['seen']
+                                       ];
+                                       break;
+
+                               default:
+                                       $formattedNotify = [
+                                               'label' => $default_item_label,
+                                               'link'  => $default_item_link,
+                                               'image' => $default_item_image,
+                                               'url'   => $default_item_url,
+                                               'text'  => $default_item_text,
+                                               'when'  => $default_item_when,
+                                               'ago'   => $default_item_ago,
+                                               'seen'  => $notification['seen']
+                                       ];
+                       }
+
+                       $formattedNotifies[] = $formattedNotify;
+               }
+
+               return $formattedNotifies;
+       }
+
+       /**
+        * Get network notifications
+        *
+        * @param bool $seen          False => only include notifications into the query
+        *                            which aren't marked as "seen"
+        * @param int  $start         Start the query at this point
+        * @param int  $limit         Maximum number of query results
+        *
+        * @return array [string, array]
+        *    string 'ident' => Notification identifier
+        *    array 'notifications' => Network notifications
+        *
+        * @throws Exception
+        */
+       public function getNetworkList(bool $seen = false, int $start = 0, int $limit = self::DEFAULT_PAGE_LIMIT)
+       {
+               $ident    = self::NETWORK;
+               $notifies = [];
+
+               $condition = ['wall' => false, 'uid' => local_user()];
+
+               if (!$seen) {
+                       $condition['unseen'] = true;
+               }
+
+               $fields = ['id', 'parent', 'verb', 'author-name', 'unseen', 'author-link', 'author-avatar', 'contact-avatar',
+                       'network', 'created', 'object', 'parent-author-name', 'parent-author-link', 'parent-guid'];
+               $params = ['order' => ['received' => true], 'limit' => [$start, $limit]];
+
+               $items = Item::selectForUser(local_user(), $fields, $condition, $params);
+
+               if ($this->dba->isResult($items)) {
+                       $notifies = $this->formatList(Item::inArray($items), $ident);
+               }
+
+               $arr = [
+                       'notifications' => $notifies,
+                       'ident'         => $ident,
+               ];
+
+               return $arr;
+       }
+
+       /**
+        * Get system notifications
+        *
+        * @param bool $seen          False => only include notifications into the query
+        *                            which aren't marked as "seen"
+        * @param int  $start         Start the query at this point
+        * @param int  $limit         Maximum number of query results
+        *
+        * @return array [string, array]
+        *    string 'ident' => Notification identifier
+        *    array 'notifications' => System notifications
+        *
+        * @throws Exception
+        */
+       public function getSystemList(bool $seen = false, int $start = 0, int $limit = self::DEFAULT_PAGE_LIMIT)
+       {
+               $ident    = self::SYSTEM;
+               $notifies = [];
+
+               $filter = ['uid' => local_user()];
+               if (!$seen) {
+                       $filter['seen'] = false;
+               }
+
+               $params          = [];
+               $params['order'] = ['date' => 'DESC'];
+               $params['limit'] = [$start, $limit];
+
+               $stmtNotifies = $this->dba->select('notify',
+                       ['id', 'url', 'photo', 'msg', 'date', 'seen', 'verb'],
+                       $filter,
+                       $params);
+
+               if ($this->dba->isResult($stmtNotifies)) {
+                       $notifies = $this->formatList($this->dba->toArray($stmtNotifies), $ident);
+               }
+
+               $arr = [
+                       'notifications' => $notifies,
+                       'ident'         => $ident,
+               ];
+
+               return $arr;
+       }
+
+       /**
+        * Get personal notifications
+        *
+        * @param bool $seen          False => only include notifications into the query
+        *                            which aren't marked as "seen"
+        * @param int  $start         Start the query at this point
+        * @param int  $limit         Maximum number of query results
+        *
+        * @return array [string, array]
+        *    string 'ident' => Notification identifier
+        *    array 'notifications' => Personal notifications
+        *
+        * @throws Exception
+        */
+       public function getPersonalList(bool $seen = false, int $start = 0, int $limit = self::DEFAULT_PAGE_LIMIT)
+       {
+               $ident    = self::PERSONAL;
+               $notifies = [];
+
+               $myurl     = str_replace('http://', '', DI::app()->contact['nurl']);
+               $diasp_url = str_replace('/profile/', '/u/', $myurl);
+
+               $condition = ["NOT `wall` AND `uid` = ? AND (`item`.`author-id` = ? OR `item`.`tag` REGEXP ? OR `item`.`tag` REGEXP ?)",
+                       local_user(), public_contact(), $myurl . '\\]', $diasp_url . '\\]'];
+
+               if (!$seen) {
+                       $condition[0] .= " AND `unseen`";
+               }
+
+               $fields = ['id', 'parent', 'verb', 'author-name', 'unseen', 'author-link', 'author-avatar', 'contact-avatar',
+                       'network', 'created', 'object', 'parent-author-name', 'parent-author-link', 'parent-guid'];
+               $params = ['order' => ['received' => true], 'limit' => [$start, $limit]];
+
+               $items = Item::selectForUser(local_user(), $fields, $condition, $params);
+
+               if ($this->dba->isResult($items)) {
+                       $notifies = $this->formatList(Item::inArray($items), $ident);
+               }
+
+               $arr = [
+                       'notifications' => $notifies,
+                       'ident'         => $ident,
+               ];
+
+               return $arr;
+       }
+
+       /**
+        * Get home notifications
+        *
+        * @param bool $seen          False => only include notifications into the query
+        *                            which aren't marked as "seen"
+        * @param int  $start         Start the query at this point
+        * @param int  $limit         Maximum number of query results
+        *
+        * @return array [string, array]
+        *    string 'ident' => Notification identifier
+        *    array 'notifications' => Home notifications
+        *
+        * @throws Exception
+        */
+       public function getHomeList(bool $seen = false, int $start = 0, int $limit = self::DEFAULT_PAGE_LIMIT)
+       {
+               $ident    = self::HOME;
+               $notifies = [];
+
+               $condition = ['wall' => true, 'uid' => local_user()];
+
+               if (!$seen) {
+                       $condition['unseen'] = true;
+               }
+
+               $fields = ['id', 'parent', 'verb', 'author-name', 'unseen', 'author-link', 'author-avatar', 'contact-avatar',
+                       'network', 'created', 'object', 'parent-author-name', 'parent-author-link', 'parent-guid'];
+               $params = ['order' => ['received' => true], 'limit' => [$start, $limit]];
+
+               $items = Item::selectForUser(local_user(), $fields, $condition, $params);
+
+               if ($this->dba->isResult($items)) {
+                       $notifies = $this->formatList(Item::inArray($items), $ident);
+               }
+
+               $arr = [
+                       'notifications' => $notifies,
+                       'ident'         => $ident,
+               ];
+
+               return $arr;
+       }
+
+       /**
+        * Get introductions
+        *
+        * @param bool $all     If false only include introductions into the query
+        *                      which aren't marked as ignored
+        * @param int  $start   Start the query at this point
+        * @param int  $limit   Maximum number of query results
+        * @param int  $id      When set, only the introduction with this id is displayed
+        *
+        * @return array [string, array]
+        *    string 'ident' => Notification identifier
+        *    array 'notifications' => Introductions
+        *
+        * @throws ImagickException
+        * @throws Exception
+        */
+       public function getIntroList(bool $all = false, int $start = 0, int $limit = self::DEFAULT_PAGE_LIMIT, int $id = 0)
+       {
+               /// @todo sanitize wording according to SELF::INTRO
+               $ident     = 'introductions';
+               $notifies  = [];
+               $sql_extra = "";
+
+               if (empty($id)) {
+                       if (!$all) {
+                               $sql_extra = " AND NOT `ignore` ";
+                       }
+
+                       $sql_extra .= " AND NOT `intro`.`blocked` ";
+               } else {
+                       $sql_extra = sprintf(" AND `intro`.`id` = %d ", intval($id));
+               }
+
+               /// @todo Fetch contact details by "Contact::getDetailsByUrl" instead of queries to contact, fcontact and gcontact
+               $stmtNotifies = $this->dba->p(
+                       "SELECT `intro`.`id` AS `intro_id`, `intro`.*, `contact`.*,
+                               `fcontact`.`name` AS `fname`, `fcontact`.`url` AS `furl`, `fcontact`.`addr` AS `faddr`,
+                               `fcontact`.`photo` AS `fphoto`, `fcontact`.`request` AS `frequest`,
+                               `gcontact`.`location` AS `glocation`, `gcontact`.`about` AS `gabout`,
+                               `gcontact`.`keywords` AS `gkeywords`, `gcontact`.`gender` AS `ggender`,
+                               `gcontact`.`network` AS `gnetwork`, `gcontact`.`addr` AS `gaddr`
+                       FROM `intro`
+                               LEFT JOIN `contact` ON `contact`.`id` = `intro`.`contact-id`
+                               LEFT JOIN `gcontact` ON `gcontact`.`nurl` = `contact`.`nurl`
+                               LEFT JOIN `fcontact` ON `intro`.`fid` = `fcontact`.`id`
+                       WHERE `intro`.`uid` = ? $sql_extra
+                       LIMIT ?, ?",
+                       $_SESSION['uid'],
+                       $start,
+                       $limit
+               );
+               if ($this->dba->isResult($stmtNotifies)) {
+                       $notifies = $this->formatIntroList($this->dba->toArray($stmtNotifies));
+               }
+
+               $arr = [
+                       'ident'         => $ident,
+                       'notifications' => $notifies,
+               ];
+
+               return $arr;
+       }
+
+       /**
+        * Format the notification query in an usable array
+        *
+        * @param array $intros The array from the db query
+        *
+        * @return array with the introductions
+        * @throws HTTPException\InternalServerErrorException
+        * @throws ImagickException
+        */
+       private function formatIntroList(array $intros)
+       {
+               $knowyou = '';
+
+               $formattedIntros = [];
+
+               foreach ($intros as $intro) {
+                       // There are two kind of introduction. Contacts suggested by other contacts and normal connection requests.
+                       // We have to distinguish between these two because they use different data.
+                       // Contact suggestions
+                       if ($intro['fid']) {
+                               $return_addr = bin2hex(DI::app()->user['nickname'] . '@' .
+                                                      $this->baseUrl->getHostName() .
+                                                      (($this->baseUrl->getURLPath()) ? '/' . $this->baseUrl->getURLPath() : ''));
+
+                               $intro = [
+                                       'label'          => 'friend_suggestion',
+                                       'notify_type'    => $this->l10n->t('Friend Suggestion'),
+                                       'intro_id'       => $intro['intro_id'],
+                                       'madeby'         => $intro['name'],
+                                       'madeby_url'     => $intro['url'],
+                                       'madeby_zrl'     => Contact::magicLink($intro['url']),
+                                       'madeby_addr'    => $intro['addr'],
+                                       'contact_id'     => $intro['contact-id'],
+                                       'photo'          => (!empty($intro['fphoto']) ? ProxyUtils::proxifyUrl($intro['fphoto'], false, ProxyUtils::SIZE_SMALL) : "images/person-300.jpg"),
+                                       'name'           => $intro['fname'],
+                                       'url'            => $intro['furl'],
+                                       'zrl'            => Contact::magicLink($intro['furl']),
+                                       'hidden'         => $intro['hidden'] == 1,
+                                       'post_newfriend' => (intval($this->pConfig->get(local_user(), 'system', 'post_newfriend')) ? '1' : 0),
+                                       'knowyou'        => $knowyou,
+                                       'note'           => $intro['note'],
+                                       'request'        => $intro['frequest'] . '?addr=' . $return_addr,
+                               ];
+
+                               // Normal connection requests
+                       } else {
+                               $intro = $this->getMissingIntroData($intro);
+
+                               if (empty($intro['url'])) {
+                                       continue;
+                               }
+
+                               // Don't show these data until you are connected. Diaspora is doing the same.
+                               if ($intro['gnetwork'] === Protocol::DIASPORA) {
+                                       $intro['glocation'] = "";
+                                       $intro['gabout']    = "";
+                                       $intro['ggender']   = "";
+                               }
+                               $intro = [
+                                       'label'          => (($intro['network'] !== Protocol::OSTATUS) ? 'friend_request' : 'follower'),
+                                       'notify_type'    => (($intro['network'] !== Protocol::OSTATUS) ? $this->l10n->t('Friend/Connect Request') : $this->l10n->t('New Follower')),
+                                       'dfrn_id'        => $intro['issued-id'],
+                                       'uid'            => $_SESSION['uid'],
+                                       'intro_id'       => $intro['intro_id'],
+                                       'contact_id'     => $intro['contact-id'],
+                                       'photo'          => (!empty($intro['photo']) ? ProxyUtils::proxifyUrl($intro['photo'], false, ProxyUtils::SIZE_SMALL) : "images/person-300.jpg"),
+                                       'name'           => $intro['name'],
+                                       'location'       => BBCode::convert($intro['glocation'], false),
+                                       'about'          => BBCode::convert($intro['gabout'], false),
+                                       'keywords'       => $intro['gkeywords'],
+                                       'gender'         => $intro['ggender'],
+                                       'hidden'         => $intro['hidden'] == 1,
+                                       'post_newfriend' => (intval($this->pConfig->get(local_user(), 'system', 'post_newfriend')) ? '1' : 0),
+                                       'url'            => $intro['url'],
+                                       'zrl'            => Contact::magicLink($intro['url']),
+                                       'addr'           => $intro['gaddr'],
+                                       'network'        => $intro['gnetwork'],
+                                       'knowyou'        => $intro['knowyou'],
+                                       'note'           => $intro['note'],
+                               ];
+                       }
+
+                       $formattedIntros[] = $intro;
+               }
+
+               return $formattedIntros;
+       }
+
+       /**
+        * Check for missing contact data and try to fetch the data from
+        * from other sources
+        *
+        * @param array $intro The input array with the intro data
+        *
+        * @return array The array with the intro data
+        * @throws HTTPException\InternalServerErrorException
+        */
+       private function getMissingIntroData(array $intro)
+       {
+               // If the network and the addr isn't available from the gcontact
+               // table entry, take the one of the contact table entry
+               if (empty($intro['gnetwork']) && !empty($intro['network'])) {
+                       $intro['gnetwork'] = $intro['network'];
+               }
+               if (empty($intro['gaddr']) && !empty($intro['addr'])) {
+                       $intro['gaddr'] = $intro['addr'];
+               }
+
+               // If the network and addr is still not available
+               // get the missing data data from other sources
+               if (empty($intro['gnetwork']) || empty($intro['gaddr'])) {
+                       $ret = Contact::getDetailsByURL($intro['url']);
+
+                       if (empty($intro['gnetwork']) && !empty($ret['network'])) {
+                               $intro['gnetwork'] = $ret['network'];
+                       }
+                       if (empty($intro['gaddr']) && !empty($ret['addr'])) {
+                               $intro['gaddr'] = $ret['addr'];
+                       }
+               }
+
+               return $intro;
+       }
+}
diff --git a/src/Model/Notify.php b/src/Model/Notify.php
deleted file mode 100644 (file)
index 7e8a71c..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-<?php
-
-namespace Friendica\Model;
-
-use Exception;
-use Friendica\App;
-use Friendica\Content\Text\BBCode;
-use Friendica\Content\Text\HTML;
-use Friendica\Core\PConfig\IPConfig;
-use Friendica\Core\L10n;
-use Friendica\Core\Protocol;
-use Friendica\Core\System;
-use Friendica\Database\Database;
-use Friendica\DI;
-use Friendica\Protocol\Activity;
-use Friendica\Util\DateTimeFormat;
-use Friendica\Util\Proxy as ProxyUtils;
-use Friendica\Util\Temporal;
-use Friendica\Util\XML;
-use ImagickException;
-use Psr\Log\LoggerInterface;
-use Friendica\Network\HTTPException;
-
-/**
- * Methods for read and write notifications from/to database
- *  or for formatting notifications
- */
-final class Notify
-{
-       /** @var int The default limit of notifies per page */
-       const DEFAULT_PAGE_LIMIT = 80;
-
-       const NETWORK  = 'network';
-       const SYSTEM   = 'system';
-       const PERSONAL = 'personal';
-       const HOME     = 'home';
-       const INTRO    = 'intro';
-
-       /** @var Database */
-       private $dba;
-       /** @var L10n */
-       private $l10n;
-       /** @var App\Arguments */
-       private $args;
-       /** @var App\BaseURL */
-       private $baseUrl;
-       /** @var IPConfig */
-       private $pConfig;
-       /** @var LoggerInterface */
-       private $logger;
-
-       public function __construct(Database $dba, L10n $l10n, App\Arguments $args, App\BaseURL $baseUrl,
-                                   IPConfig $pConfig, LoggerInterface $logger)
-       {
-               $this->dba     = $dba;
-               $this->l10n    = $l10n;
-               $this->args    = $args;
-               $this->baseUrl = $baseUrl;
-               $this->pConfig = $pConfig;
-               $this->logger  = $logger;
-       }
-
-       /**
-        * Set some extra properties to note array from db:
-        *  - timestamp as int in default TZ
-        *  - date_rel : relative date string
-        *  - msg_html: message as html string
-        *  - msg_plain: message as plain text string
-        *
-        * @param array $notes array of note arrays from db
-        *
-        * @return array Copy of input array with added properties
-        *
-        * @throws Exception
-        */
-       private function setExtra(array $notes)
-       {
-               $retNotes = [];
-               foreach ($notes as $note) {
-                       $local_time        = DateTimeFormat::local($note['date']);
-                       $note['timestamp'] = strtotime($local_time);
-                       $note['date_rel']  = Temporal::getRelativeDate($note['date']);
-                       $note['msg_html']  = BBCode::convert($note['msg'], false);
-                       $note['msg_plain'] = explode("\n", trim(HTML::toPlaintext($note['msg_html'], 0)))[0];
-
-                       $retNotes[] = $note;
-               }
-               return $retNotes;
-       }
-
-       /**
-        * Get all notifications for local_user()
-        *
-        * @param array  $filter optional Array "column name"=>value: filter query by columns values
-        * @param array  $order  optional Array to order by
-        * @param string $limit  optional Query limits
-        *
-        * @return array|bool of results or false on errors
-        * @throws Exception
-        */
-       public function getAll(array $filter = [], array $order = ['date' => 'DESC'], string $limit = "")
-       {
-               $params = [];
-
-               $params['order'] = $order;
-
-               if (!empty($limit)) {
-                       $params['limit'] = $limit;
-               }
-
-               $dbFilter = array_merge($filter, ['uid' => local_user()]);
-
-               $stmtNotifies = $this->dba->select('notify', [], $dbFilter, $params);
-
-               if ($this->dba->isResult($stmtNotifies)) {
-                       return $this->setExtra($this->dba->toArray($stmtNotifies));
-               }
-
-               return false;
-       }
-
-       /**
-        * Get one note for local_user() by $id value
-        *
-        * @param int $id identity
-        *
-        * @return array note values or null if not found
-        * @throws Exception
-        */
-       public function getByID(int $id)
-       {
-               $stmtNotify = $this->dba->selectFirst('notify', [], ['id' => $id, 'uid' => local_user()]);
-               if ($this->dba->isResult($stmtNotify)) {
-                       return $this->setExtra([$stmtNotify])[0];
-               }
-               return null;
-       }
-
-       /**
-        * set seen state of $note of local_user()
-        *
-        * @param array $note note array
-        * @param bool  $seen optional true or false, default true
-        *
-        * @return bool true on success, false on errors
-        * @throws Exception
-        */
-       public function setSeen(array $note, bool $seen = true)
-       {
-               return $this->dba->update('notify', ['seen' => $seen], [
-                       '(`link` = ? OR (`parent` != 0 AND `parent` = ? AND `otype` = ?)) AND `uid` = ?',
-                       $note['link'],
-                       $note['parent'],
-                       $note['otype'],
-                       local_user()
-               ]);
-       }
-
-       /**
-        * Set seen state of all notifications of local_user()
-        *
-        * @param bool $seen optional true or false. default true
-        *
-        * @return bool true on success, false on error
-        * @throws Exception
-        */
-       public function setAllSeen(bool $seen = true)
-       {
-               return $this->dba->update('notify', ['seen' => $seen], ['uid' => local_user()]);
-       }
-
-       /**
-        * Format the notification query in an usable array
-        *
-        * @param array  $notifies The array from the db query
-        * @param string $ident    The notifications identifier (e.g. network)
-        *
-        * @return array
-        *                       string 'label' => The type of the notification
-        *                       string 'link' => URL to the source
-        *                       string 'image' => The avatar image
-        *                       string 'url' => The profile url of the contact
-        *                       string 'text' => The notification text
-        *                       string 'when' => The date of the notification
-        *                       string 'ago' => T relative date of the notification
-        *                       bool 'seen' => Is the notification marked as "seen"
-        * @throws Exception
-        */
-       private function formatList(array $notifies, string $ident = "")
-       {
-               $formattedNotifies = [];
-
-               foreach ($notifies as $notify) {
-                       // Because we use different db tables for the notification query
-                       // we have sometimes $notify['unseen'] and sometimes $notify['seen].
-                       // So we will have to transform $notify['unseen']
-                       if (array_key_exists('unseen', $notify)) {
-                               $notify['seen'] = ($notify['unseen'] > 0 ? false : true);
-                       }
-
-                       // For feed items we use the user's contact, since the avatar is mostly self choosen.
-                       if (!empty($notify['network']) && $notify['network'] == Protocol::FEED) {
-                               $notify['author-avatar'] = $notify['contact-avatar'];
-                       }
-
-                       // Depending on the identifier of the notification we need to use different defaults
-                       switch ($ident) {
-                               case self::SYSTEM:
-                                       $default_item_label = 'notify';
-                                       $default_item_link  = $this->baseUrl->get(true) . '/notify/view/' . $notify['id'];
-                                       $default_item_image = ProxyUtils::proxifyUrl($notify['photo'], false, ProxyUtils::SIZE_MICRO);
-                                       $default_item_url   = $notify['url'];
-                                       $default_item_text  = strip_tags(BBCode::convert($notify['msg']));
-                                       $default_item_when  = DateTimeFormat::local($notify['date'], 'r');
-                                       $default_item_ago   = Temporal::getRelativeDate($notify['date']);
-                                       break;
-
-                               case self::HOME:
-                                       $default_item_label = 'comment';
-                                       $default_item_link  = $this->baseUrl->get(true) . '/display/' . $notify['parent-guid'];
-                                       $default_item_image = ProxyUtils::proxifyUrl($notify['author-avatar'], false, ProxyUtils::SIZE_MICRO);
-                                       $default_item_url   = $notify['author-link'];
-                                       $default_item_text  = $this->l10n->t("%s commented on %s's post", $notify['author-name'], $notify['parent-author-name']);
-                                       $default_item_when  = DateTimeFormat::local($notify['created'], 'r');
-                                       $default_item_ago   = Temporal::getRelativeDate($notify['created']);
-                                       break;
-
-                               default:
-                                       $default_item_label = (($notify['id'] == $notify['parent']) ? 'post' : 'comment');
-                                       $default_item_link  = $this->baseUrl->get(true) . '/display/' . $notify['parent-guid'];
-                                       $default_item_image = ProxyUtils::proxifyUrl($notify['author-avatar'], false, ProxyUtils::SIZE_MICRO);
-                                       $default_item_url   = $notify['author-link'];
-                                       $default_item_text  = (($notify['id'] == $notify['parent'])
-                                               ? $this->l10n->t("%s created a new post", $notify['author-name'])
-                                               : $this->l10n->t("%s commented on %s's post", $notify['author-name'], $notify['parent-author-name']));
-                                       $default_item_when  = DateTimeFormat::local($notify['created'], 'r');
-                                       $default_item_ago   = Temporal::getRelativeDate($notify['created']);
-                       }
-
-                       // Transform the different types of notification in an usable array
-                       switch ($notify['verb']) {
-                               case Activity::LIKE:
-                                       $formattedNotify = [
-                                               'label' => 'like',
-                                               'link'  => $this->baseUrl->get(true) . '/display/' . $notify['parent-guid'],
-                                               'image' => ProxyUtils::proxifyUrl($notify['author-avatar'], false, ProxyUtils::SIZE_MICRO),
-                                               'url'   => $notify['author-link'],
-                                               'text'  => $this->l10n->t("%s liked %s's post", $notify['author-name'], $notify['parent-author-name']),
-                                               'when'  => $default_item_when,
-                                               'ago'   => $default_item_ago,
-                                               'seen'  => $notify['seen']
-                                       ];
-                                       break;
-
-                               case Activity::DISLIKE:
-                                       $formattedNotify = [
-                                               'label' => 'dislike',
-                                               'link'  => $this->baseUrl->get(true) . '/display/' . $notify['parent-guid'],
-                                               'image' => ProxyUtils::proxifyUrl($notify['author-avatar'], false, ProxyUtils::SIZE_MICRO),
-                                               'url'   => $notify['author-link'],
-                                               'text'  => $this->l10n->t("%s disliked %s's post", $notify['author-name'], $notify['parent-author-name']),
-                                               'when'  => $default_item_when,
-                                               'ago'   => $default_item_ago,
-                                               'seen'  => $notify['seen']
-                                       ];
-                                       break;
-
-                               case Activity::ATTEND:
-                                       $formattedNotify = [
-                                               'label' => 'attend',
-                                               'link'  => $this->baseUrl->get(true) . '/display/' . $notify['parent-guid'],
-                                               'image' => ProxyUtils::proxifyUrl($notify['author-avatar'], false, ProxyUtils::SIZE_MICRO),
-                                               'url'   => $notify['author-link'],
-                                               'text'  => $this->l10n->t("%s is attending %s's event", $notify['author-name'], $notify['parent-author-name']),
-                                               'when'  => $default_item_when,
-                                               'ago'   => $default_item_ago,
-                                               'seen'  => $notify['seen']
-                                       ];
-                                       break;
-
-                               case Activity::ATTENDNO:
-                                       $formattedNotify = [
-                                               'label' => 'attendno',
-                                               'link'  => $this->baseUrl->get(true) . '/display/' . $notify['parent-guid'],
-                                               'image' => ProxyUtils::proxifyUrl($notify['author-avatar'], false, ProxyUtils::SIZE_MICRO),
-                                               'url'   => $notify['author-link'],
-                                               'text'  => $this->l10n->t("%s is not attending %s's event", $notify['author-name'], $notify['parent-author-name']),
-                                               'when'  => $default_item_when,
-                                               'ago'   => $default_item_ago,
-                                               'seen'  => $notify['seen']
-                                       ];
-                                       break;
-
-                               case Activity::ATTENDMAYBE:
-                                       $formattedNotify = [
-                                               'label' => 'attendmaybe',
-                                               'link'  => $this->baseUrl->get(true) . '/display/' . $notify['parent-guid'],
-                                               'image' => ProxyUtils::proxifyUrl($notify['author-avatar'], false, ProxyUtils::SIZE_MICRO),
-                                               'url'   => $notify['author-link'],
-                                               'text'  => $this->l10n->t("%s may attend %s's event", $notify['author-name'], $notify['parent-author-name']),
-                                               'when'  => $default_item_when,
-                                               'ago'   => $default_item_ago,
-                                               'seen'  => $notify['seen']
-                                       ];
-                                       break;
-
-                               case Activity::FRIEND:
-                                       if (!isset($notify['object'])) {
-                                               $formattedNotify = [
-                                                       'label' => 'friend',
-                                                       'link'  => $default_item_link,
-                                                       'image' => $default_item_image,
-                                                       'url'   => $default_item_url,
-                                                       'text'  => $default_item_text,
-                                                       'when'  => $default_item_when,
-                                                       'ago'   => $default_item_ago,
-                                                       'seen'  => $notify['seen']
-                                               ];
-                                               break;
-                                       }
-                                       /// @todo Check if this part here is used at all
-                                       $this->logger->info('Complete data.', ['notify' => $notify, 'callStack' => System::callstack(20)]);
-
-                                       $xmlHead         = "<" . "?xml version='1.0' encoding='UTF-8' ?" . ">";
-                                       $obj             = XML::parseString($xmlHead . $notify['object']);
-                                       $notify['fname'] = $obj->title;
-
-                                       $formattedNotify = [
-                                               'label' => 'friend',
-                                               'link'  => $this->baseUrl->get(true) . '/display/' . $notify['parent-guid'],
-                                               'image' => ProxyUtils::proxifyUrl($notify['author-avatar'], false, ProxyUtils::SIZE_MICRO),
-                                               'url'   => $notify['author-link'],
-                                               'text'  => $this->l10n->t("%s is now friends with %s", $notify['author-name'], $notify['fname']),
-                                               'when'  => $default_item_when,
-                                               'ago'   => $default_item_ago,
-                                               'seen'  => $notify['seen']
-                                       ];
-                                       break;
-
-                               default:
-                                       $formattedNotify = [
-                                               'label' => $default_item_label,
-                                               'link'  => $default_item_link,
-                                               'image' => $default_item_image,
-                                               'url'   => $default_item_url,
-                                               'text'  => $default_item_text,
-                                               'when'  => $default_item_when,
-                                               'ago'   => $default_item_ago,
-                                               'seen'  => $notify['seen']
-                                       ];
-                       }
-
-                       $formattedNotifies[] = $formattedNotify;
-               }
-
-               return $formattedNotifies;
-       }
-
-       /**
-        * Get network notifications
-        *
-        * @param bool $seen    False => only include notifications into the query
-        *                            which aren't marked as "seen"
-        * @param int        $start   Start the query at this point
-        * @param int        $limit   Maximum number of query results
-        *
-        * @return array [string, array]
-        *    string 'ident' => Notification identifier
-        *    array 'notifications' => Network notifications
-        *
-        * @throws Exception
-        */
-       public function getNetworkList(bool $seen = false, int $start = 0, int $limit = self::DEFAULT_PAGE_LIMIT)
-       {
-               $ident    = self::NETWORK;
-               $notifies = [];
-
-               $condition = ['wall' => false, 'uid' => local_user()];
-
-               if (!$seen) {
-                       $condition['unseen'] = true;
-               }
-
-               $fields = ['id', 'parent', 'verb', 'author-name', 'unseen', 'author-link', 'author-avatar', 'contact-avatar',
-                       'network', 'created', 'object', 'parent-author-name', 'parent-author-link', 'parent-guid'];
-               $params = ['order' => ['received' => true], 'limit' => [$start, $limit]];
-
-               $items = Item::selectForUser(local_user(), $fields, $condition, $params);
-
-               if ($this->dba->isResult($items)) {
-                       $notifies = $this->formatList(Item::inArray($items), $ident);
-               }
-
-               $arr = [
-                       'notifications' => $notifies,
-                       'ident'         => $ident,
-               ];
-
-               return $arr;
-       }
-
-       /**
-        * Get system notifications
-        *
-        * @param bool $seen    False => only include notifications into the query
-        *                            which aren't marked as "seen"
-        * @param int        $start   Start the query at this point
-        * @param int        $limit   Maximum number of query results
-        *
-        * @return array [string, array]
-        *    string 'ident' => Notification identifier
-        *    array 'notifications' => System notifications
-        *
-        * @throws Exception
-        */
-       public function getSystemList(bool $seen = false, int $start = 0, int $limit = self::DEFAULT_PAGE_LIMIT)
-       {
-               $ident    = self::SYSTEM;
-               $notifies = [];
-
-               $filter = ['uid' => local_user()];
-               if (!$seen) {
-                       $filter['seen'] = false;
-               }
-
-               $params          = [];
-               $params['order'] = ['date' => 'DESC'];
-               $params['limit'] = [$start, $limit];
-
-               $stmtNotifies = $this->dba->select('notify',
-                       ['id', 'url', 'photo', 'msg', 'date', 'seen', 'verb'],
-                       $filter,
-                       $params);
-
-               if ($this->dba->isResult($stmtNotifies)) {
-                       $notifies = $this->formatList($this->dba->toArray($stmtNotifies), $ident);
-               }
-
-               $arr = [
-                       'notifications' => $notifies,
-                       'ident'         => $ident,
-               ];
-
-               return $arr;
-       }
-
-       /**
-        * Get personal notifications
-        *
-        * @param bool $seen    False => only include notifications into the query
-        *                            which aren't marked as "seen"
-        * @param int        $start   Start the query at this point
-        * @param int        $limit   Maximum number of query results
-        *
-        * @return array [string, array]
-        *    string 'ident' => Notification identifier
-        *    array 'notifications' => Personal notifications
-        *
-        * @throws Exception
-        */
-       public function getPersonalList(bool $seen = false, int $start = 0, int $limit = self::DEFAULT_PAGE_LIMIT)
-       {
-               $ident    = self::PERSONAL;
-               $notifies = [];
-
-               $myurl     = str_replace('http://', '', DI::app()->contact['nurl']);
-               $diasp_url = str_replace('/profile/', '/u/', $myurl);
-
-               $condition = ["NOT `wall` AND `uid` = ? AND (`item`.`author-id` = ? OR `item`.`tag` REGEXP ? OR `item`.`tag` REGEXP ?)",
-                       local_user(), public_contact(), $myurl . '\\]', $diasp_url . '\\]'];
-
-               if (!$seen) {
-                       $condition[0] .= " AND `unseen`";
-               }
-
-               $fields = ['id', 'parent', 'verb', 'author-name', 'unseen', 'author-link', 'author-avatar', 'contact-avatar',
-                       'network', 'created', 'object', 'parent-author-name', 'parent-author-link', 'parent-guid'];
-               $params = ['order' => ['received' => true], 'limit' => [$start, $limit]];
-
-               $items = Item::selectForUser(local_user(), $fields, $condition, $params);
-
-               if ($this->dba->isResult($items)) {
-                       $notifies = $this->formatList(Item::inArray($items), $ident);
-               }
-
-               $arr = [
-                       'notifications' => $notifies,
-                       'ident'         => $ident,
-               ];
-
-               return $arr;
-       }
-
-       /**
-        * Get home notifications
-        *
-        * @param bool $seen    False => only include notifications into the query
-        *                            which aren't marked as "seen"
-        * @param int        $start   Start the query at this point
-        * @param int        $limit   Maximum number of query results
-        *
-        * @return array [string, array]
-        *    string 'ident' => Notification identifier
-        *    array 'notifications' => Home notifications
-        *
-        * @throws Exception
-        */
-       public function getHomeList(bool $seen = false, int $start = 0, int $limit = self::DEFAULT_PAGE_LIMIT)
-       {
-               $ident    = self::HOME;
-               $notifies = [];
-
-               $condition = ['wall' => true, 'uid' => local_user()];
-
-               if (!$seen) {
-                       $condition['unseen'] = true;
-               }
-
-               $fields = ['id', 'parent', 'verb', 'author-name', 'unseen', 'author-link', 'author-avatar', 'contact-avatar',
-                       'network', 'created', 'object', 'parent-author-name', 'parent-author-link', 'parent-guid'];
-               $params = ['order' => ['received' => true], 'limit' => [$start, $limit]];
-
-               $items = Item::selectForUser(local_user(), $fields, $condition, $params);
-
-               if ($this->dba->isResult($items)) {
-                       $notifies = $this->formatList(Item::inArray($items), $ident);
-               }
-
-               $arr = [
-                       'notifications' => $notifies,
-                       'ident'         => $ident,
-               ];
-
-               return $arr;
-       }
-
-       /**
-        * Get introductions
-        *
-        * @param bool $all     If false only include introductions into the query
-        *                      which aren't marked as ignored
-        * @param int  $start   Start the query at this point
-        * @param int  $limit   Maximum number of query results
-        * @param int  $id      When set, only the introduction with this id is displayed
-        *
-        * @return array [string, array]
-        *    string 'ident' => Notification identifier
-        *    array 'notifications' => Introductions
-        *
-        * @throws ImagickException
-        * @throws Exception
-        */
-       public function getIntroList(bool $all = false, int $start = 0, int $limit = self::DEFAULT_PAGE_LIMIT, int $id = 0)
-       {
-               /// @todo sanitize wording according to SELF::INTRO
-               $ident     = 'introductions';
-               $notifies  = [];
-               $sql_extra = "";
-
-               if (empty($id)) {
-                       if (!$all) {
-                               $sql_extra = " AND NOT `ignore` ";
-                       }
-
-                       $sql_extra .= " AND NOT `intro`.`blocked` ";
-               } else {
-                       $sql_extra = sprintf(" AND `intro`.`id` = %d ", intval($id));
-               }
-
-               /// @todo Fetch contact details by "Contact::getDetailsByUrl" instead of queries to contact, fcontact and gcontact
-               $stmtNotifies = $this->dba->p(
-                       "SELECT `intro`.`id` AS `intro_id`, `intro`.*, `contact`.*,
-                               `fcontact`.`name` AS `fname`, `fcontact`.`url` AS `furl`, `fcontact`.`addr` AS `faddr`,
-                               `fcontact`.`photo` AS `fphoto`, `fcontact`.`request` AS `frequest`,
-                               `gcontact`.`location` AS `glocation`, `gcontact`.`about` AS `gabout`,
-                               `gcontact`.`keywords` AS `gkeywords`, `gcontact`.`gender` AS `ggender`,
-                               `gcontact`.`network` AS `gnetwork`, `gcontact`.`addr` AS `gaddr`
-                       FROM `intro`
-                               LEFT JOIN `contact` ON `contact`.`id` = `intro`.`contact-id`
-                               LEFT JOIN `gcontact` ON `gcontact`.`nurl` = `contact`.`nurl`
-                               LEFT JOIN `fcontact` ON `intro`.`fid` = `fcontact`.`id`
-                       WHERE `intro`.`uid` = ? $sql_extra
-                       LIMIT ?, ?",
-                       $_SESSION['uid'],
-                       $start,
-                       $limit
-               );
-               if ($this->dba->isResult($stmtNotifies)) {
-                       $notifies = $this->formatIntroList($this->dba->toArray($stmtNotifies));
-               }
-
-               $arr = [
-                       'ident'         => $ident,
-                       'notifications' => $notifies,
-               ];
-
-               return $arr;
-       }
-
-       /**
-        * Format the notification query in an usable array
-        *
-        * @param array $intros The array from the db query
-        *
-        * @return array with the introductions
-        * @throws HTTPException\InternalServerErrorException
-        * @throws ImagickException
-        */
-       private function formatIntroList(array $intros)
-       {
-               $knowyou = '';
-
-               $formattedIntros = [];
-
-               foreach ($intros as $intro) {
-                       // There are two kind of introduction. Contacts suggested by other contacts and normal connection requests.
-                       // We have to distinguish between these two because they use different data.
-                       // Contact suggestions
-                       if ($intro['fid']) {
-                               $return_addr = bin2hex(DI::app()->user['nickname'] . '@' .
-                                                      $this->baseUrl->getHostName() .
-                                                      (($this->baseUrl->getURLPath()) ? '/' . $this->baseUrl->getURLPath() : ''));
-
-                               $intro = [
-                                       'label'          => 'friend_suggestion',
-                                       'notify_type'    => $this->l10n->t('Friend Suggestion'),
-                                       'intro_id'       => $intro['intro_id'],
-                                       'madeby'         => $intro['name'],
-                                       'madeby_url'     => $intro['url'],
-                                       'madeby_zrl'     => Contact::magicLink($intro['url']),
-                                       'madeby_addr'    => $intro['addr'],
-                                       'contact_id'     => $intro['contact-id'],
-                                       'photo'          => (!empty($intro['fphoto']) ? ProxyUtils::proxifyUrl($intro['fphoto'], false, ProxyUtils::SIZE_SMALL) : "images/person-300.jpg"),
-                                       'name'           => $intro['fname'],
-                                       'url'            => $intro['furl'],
-                                       'zrl'            => Contact::magicLink($intro['furl']),
-                                       'hidden'         => $intro['hidden'] == 1,
-                                       'post_newfriend' => (intval($this->pConfig->get(local_user(), 'system', 'post_newfriend')) ? '1' : 0),
-                                       'knowyou'        => $knowyou,
-                                       'note'           => $intro['note'],
-                                       'request'        => $intro['frequest'] . '?addr=' . $return_addr,
-                               ];
-
-                               // Normal connection requests
-                       } else {
-                               $intro = $this->getMissingIntroData($intro);
-
-                               if (empty($intro['url'])) {
-                                       continue;
-                               }
-
-                               // Don't show these data until you are connected. Diaspora is doing the same.
-                               if ($intro['gnetwork'] === Protocol::DIASPORA) {
-                                       $intro['glocation'] = "";
-                                       $intro['gabout']    = "";
-                                       $intro['ggender']   = "";
-                               }
-                               $intro = [
-                                       'label'          => (($intro['network'] !== Protocol::OSTATUS) ? 'friend_request' : 'follower'),
-                                       'notify_type'    => (($intro['network'] !== Protocol::OSTATUS) ? $this->l10n->t('Friend/Connect Request') : $this->l10n->t('New Follower')),
-                                       'dfrn_id'        => $intro['issued-id'],
-                                       'uid'            => $_SESSION['uid'],
-                                       'intro_id'       => $intro['intro_id'],
-                                       'contact_id'     => $intro['contact-id'],
-                                       'photo'          => (!empty($intro['photo']) ? ProxyUtils::proxifyUrl($intro['photo'], false, ProxyUtils::SIZE_SMALL) : "images/person-300.jpg"),
-                                       'name'           => $intro['name'],
-                                       'location'       => BBCode::convert($intro['glocation'], false),
-                                       'about'          => BBCode::convert($intro['gabout'], false),
-                                       'keywords'       => $intro['gkeywords'],
-                                       'gender'         => $intro['ggender'],
-                                       'hidden'         => $intro['hidden'] == 1,
-                                       'post_newfriend' => (intval($this->pConfig->get(local_user(), 'system', 'post_newfriend')) ? '1' : 0),
-                                       'url'            => $intro['url'],
-                                       'zrl'            => Contact::magicLink($intro['url']),
-                                       'addr'           => $intro['gaddr'],
-                                       'network'        => $intro['gnetwork'],
-                                       'knowyou'        => $intro['knowyou'],
-                                       'note'           => $intro['note'],
-                               ];
-                       }
-
-                       $formattedIntros[] = $intro;
-               }
-
-               return $formattedIntros;
-       }
-
-       /**
-        * Check for missing contact data and try to fetch the data from
-        * from other sources
-        *
-        * @param array $intro The input array with the intro data
-        *
-        * @return array The array with the intro data
-        * @throws HTTPException\InternalServerErrorException
-        */
-       private function getMissingIntroData(array $intro)
-       {
-               // If the network and the addr isn't available from the gcontact
-               // table entry, take the one of the contact table entry
-               if (empty($intro['gnetwork']) && !empty($intro['network'])) {
-                       $intro['gnetwork'] = $intro['network'];
-               }
-               if (empty($intro['gaddr']) && !empty($intro['addr'])) {
-                       $intro['gaddr'] = $intro['addr'];
-               }
-
-               // If the network and addr is still not available
-               // get the missing data data from other sources
-               if (empty($intro['gnetwork']) || empty($intro['gaddr'])) {
-                       $ret = Contact::getDetailsByURL($intro['url']);
-
-                       if (empty($intro['gnetwork']) && !empty($ret['network'])) {
-                               $intro['gnetwork'] = $ret['network'];
-                       }
-                       if (empty($intro['gaddr']) && !empty($ret['addr'])) {
-                               $intro['gaddr'] = $ret['addr'];
-                       }
-               }
-
-               return $intro;
-       }
-}
index fde4828e278efbe8663ddc93589c071d71774912..2133a3b880701b8337563f4cc62b574e6c384eb3 100644 (file)
@@ -8,7 +8,7 @@ use Friendica\Content\Pager;
 use Friendica\Core\Renderer;
 use Friendica\Core\System;
 use Friendica\DI;
-use Friendica\Model\Notify;
+use Friendica\Model\Notification;
 use Friendica\Network\HTTPException\ForbiddenException;
 
 /**
@@ -20,29 +20,29 @@ abstract class BaseNotifications extends BaseModule
 {
        /** @var array Array of URL parameters */
        const URL_TYPES = [
-               Notify::NETWORK  => 'network',
-               Notify::SYSTEM   => 'system',
-               Notify::HOME     => 'home',
-               Notify::PERSONAL => 'personal',
-               Notify::INTRO    => 'intros',
+               Notification::NETWORK  => 'network',
+               Notification::SYSTEM   => 'system',
+               Notification::HOME     => 'home',
+               Notification::PERSONAL => 'personal',
+               Notification::INTRO    => 'intros',
        ];
 
        /** @var array Array of the allowed notifies and their printable name */
        const PRINT_TYPES = [
-               Notify::NETWORK  => 'Network',
-               Notify::SYSTEM   => 'System',
-               Notify::HOME     => 'Home',
-               Notify::PERSONAL => 'Personal',
-               Notify::INTRO    => 'Introductions',
+               Notification::NETWORK  => 'Network',
+               Notification::SYSTEM   => 'System',
+               Notification::HOME     => 'Home',
+               Notification::PERSONAL => 'Personal',
+               Notification::INTRO    => 'Introductions',
        ];
 
-       /** @var array The array of access keys for notify pages */
+       /** @var array The array of access keys for notification pages */
        const ACCESS_KEYS = [
-               Notify::NETWORK  => 'w',
-               Notify::SYSTEM   => 'y',
-               Notify::HOME     => 'h',
-               Notify::PERSONAL => 'r',
-               Notify::INTRO    => 'i',
+               Notification::NETWORK  => 'w',
+               Notification::SYSTEM   => 'y',
+               Notification::HOME     => 'h',
+               Notification::PERSONAL => 'r',
+               Notification::INTRO    => 'i',
        ];
 
        /** @var int The default count of items per page */
@@ -54,12 +54,12 @@ abstract class BaseNotifications extends BaseModule
        protected static $firstItemNum;
 
        /**
-        * Collects all notifies from the backend
+        * Collects all notifications from the backend
         *
         * @return array The determined notification array
-        *               ['header', 'notifs']
+        *               ['header', 'notifications']
         */
-       abstract public static function getNotifies();
+       abstract public static function getNotifications();
 
        public static function init(array $parameters = [])
        {
@@ -104,22 +104,22 @@ abstract class BaseNotifications extends BaseModule
                        return;
                }
 
-               System::jsonExit(static::getNotifies()['notifs'] ?? []);
+               System::jsonExit(static::getNotifications()['notifs'] ?? []);
        }
 
        /**
         * Shows the printable result of notifications for a specific tab
         *
-        * @param string $notif_header    The notification header
-        * @param array  $notif_content   The array with the notifications
-        * @param string $notif_nocontent The string in case there are no notifications
-        * @param array  $notif_show_lnk  The possible links at the top
+        * @param string $header    The notification header
+        * @param array  $content   The array with the notifications
+        * @param string $noContent The string in case there are no notifications
+        * @param array  $showLink  The possible links at the top
         *
         * @return string The rendered output
         *
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
-       protected static function printContent(string $notif_header, array $notif_content, string $notif_nocontent, array $notif_show_lnk)
+       protected static function printContent(string $header, array $content, string $noContent, array $showLink)
        {
                // Get the nav tabs for the notification pages
                $tabs = self::getTabs();
@@ -129,12 +129,12 @@ abstract class BaseNotifications extends BaseModule
 
                $notif_tpl = Renderer::getMarkupTemplate('notifications/notifications.tpl');
                return Renderer::replaceMacros($notif_tpl, [
-                       '$notif_header'    => $notif_header ?? DI::l10n()->t('Notifications'),
+                       '$notif_header'    => $header ?? DI::l10n()->t('Notifications'),
                        '$tabs'            => $tabs,
-                       '$notif_content'   => $notif_content,
-                       '$notif_nocontent' => $notif_nocontent,
-                       '$notif_show_lnk'  => $notif_show_lnk,
-                       '$notif_paginate'  => $pager->renderMinimal(count($notif_content))
+                       '$notif_content'   => $content,
+                       '$notif_nocontent' => $noContent,
+                       '$notif_show_lnk'  => $showLink,
+                       '$notif_paginate'  => $pager->renderMinimal(count($content))
                ]);
        }
 
index 3a7499a1e58525dada5d5a8afbc9c699e18dd627..9b64e7691166423e1d51a9bcd9bc3a20ab20a486 100644 (file)
@@ -18,16 +18,16 @@ class Introductions extends BaseNotifications
        /**
         * @inheritDoc
         */
-       public static function getNotifies()
+       public static function getNotifications()
        {
                $id  = (int)DI::args()->get(2, 0);
                $all = DI::args()->get(2) == 'all';
 
-               $notifs = DI::notify()->getIntroList($all, self::$firstItemNum, self::ITEMS_PER_PAGE, $id);
+               $notifications = DI::notification()->getIntroList($all, self::$firstItemNum, self::ITEMS_PER_PAGE, $id);
 
                return [
-                       'header' => DI::l10n()->t('Notifications'),
-                       'notifs' => $notifs,
+                       'header'        => DI::l10n()->t('Notifications'),
+                       'notifications' => $notifications,
                ];
        }
 
@@ -37,52 +37,52 @@ class Introductions extends BaseNotifications
 
                $all = DI::args()->get(2) == 'all';
 
-               $notif_content   = [];
-               $notif_nocontent = '';
+               $notificationContent   = [];
+               $notificationNoContent = '';
 
-               $notif_result = self::getNotifies();
-               $notifs       = $notif_result['notifs'] ?? [];
-               $notif_header = $notif_result['header'] ?? '';
+               $notificationResult = self::getNotifications();
+               $notifications      = $notificationResult['notifications'] ?? [];
+               $notificationHeader = $notificationResult['header'] ?? '';
 
-               $sugg = Renderer::getMarkupTemplate('notifications/suggestions.tpl');
-               $tpl  = Renderer::getMarkupTemplate('notifications/intros.tpl');
+               $notificationSuggestions = Renderer::getMarkupTemplate('notifications/suggestions.tpl');
+               $notificationTemplate    = Renderer::getMarkupTemplate('notifications/intros.tpl');
 
                // The link to switch between ignored and normal connection requests
-               $notif_show_lnk = [
+               $notificationShowLink = [
                        'href' => (!$all ? 'notifications/intros/all' : 'notifications/intros'),
                        'text' => (!$all ? DI::l10n()->t('Show Ignored Requests') : DI::l10n()->t('Hide Ignored Requests'))
                ];
 
                // Loop through all introduction notifications.This creates an array with the output html for each
                // introduction
-               foreach ($notifs['notifications'] as $notif) {
+               foreach ($notifications['notifications'] as $notification) {
 
                        // There are two kind of introduction. Contacts suggested by other contacts and normal connection requests.
                        // We have to distinguish between these two because they use different data.
-                       switch ($notif['label']) {
+                       switch ($notification['label']) {
                                case 'friend_suggestion':
-                                       $notif_content[] = Renderer::replaceMacros($sugg, [
-                                               '$type'           => $notif['label'],
+                                       $notificationContent[] = Renderer::replaceMacros($notificationSuggestions, [
+                                               '$type'           => $notification['label'],
                                                '$str_notifytype' => DI::l10n()->t('Notification type:'),
-                                               '$notify_type'    => $notif['notify_type'],
-                                               '$intro_id'       => $notif['intro_id'],
+                                               '$notify_type'    => $notification['notify_type'],
+                                               '$intro_id'       => $notification['intro_id'],
                                                '$lbl_madeby'     => DI::l10n()->t('Suggested by:'),
-                                               '$madeby'         => $notif['madeby'],
-                                               '$madeby_url'     => $notif['madeby_url'],
-                                               '$madeby_zrl'     => $notif['madeby_zrl'],
-                                               '$madeby_addr'    => $notif['madeby_addr'],
-                                               '$contact_id'     => $notif['contact_id'],
-                                               '$photo'          => $notif['photo'],
-                                               '$fullname'       => $notif['name'],
-                                               '$url'            => $notif['url'],
-                                               '$zrl'            => $notif['zrl'],
+                                               '$madeby'         => $notification['madeby'],
+                                               '$madeby_url'     => $notification['madeby_url'],
+                                               '$madeby_zrl'     => $notification['madeby_zrl'],
+                                               '$madeby_addr'    => $notification['madeby_addr'],
+                                               '$contact_id'     => $notification['contact_id'],
+                                               '$photo'          => $notification['photo'],
+                                               '$fullname'       => $notification['name'],
+                                               '$url'            => $notification['url'],
+                                               '$zrl'            => $notification['zrl'],
                                                '$lbl_url'        => DI::l10n()->t('Profile URL'),
-                                               '$addr'           => $notif['addr'],
-                                               '$hidden'         => ['hidden', DI::l10n()->t('Hide this contact from others'), ($notif['hidden'] == 1), ''],
-                                               '$knowyou'        => $notif['knowyou'],
+                                               '$addr'           => $notification['addr'],
+                                               '$hidden'         => ['hidden', DI::l10n()->t('Hide this contact from others'), ($notification['hidden'] == 1), ''],
+                                               '$knowyou'        => $notification['knowyou'],
                                                '$approve'        => DI::l10n()->t('Approve'),
-                                               '$note'           => $notif['note'],
-                                               '$request'        => $notif['request'],
+                                               '$note'           => $notification['note'],
+                                               '$request'        => $notification['request'],
                                                '$ignore'         => DI::l10n()->t('Ignore'),
                                                '$discard'        => DI::l10n()->t('Discard'),
                                        ]);
@@ -90,8 +90,8 @@ class Introductions extends BaseNotifications
 
                                // Normal connection requests
                                default:
-                                       $friend_selected = (($notif['network'] !== Protocol::OSTATUS) ? ' checked="checked" ' : ' disabled ');
-                                       $fan_selected    = (($notif['network'] === Protocol::OSTATUS) ? ' checked="checked" disabled ' : '');
+                                       $friend_selected = (($notification['network'] !== Protocol::OSTATUS) ? ' checked="checked" ' : ' disabled ');
+                                       $fan_selected    = (($notification['network'] === Protocol::OSTATUS) ? ' checked="checked" disabled ' : '');
 
                                        $lbl_knowyou = '';
                                        $knowyou     = '';
@@ -99,31 +99,31 @@ class Introductions extends BaseNotifications
                                        $helptext2   = '';
                                        $helptext3   = '';
 
-                                       if ($notif['network'] === Protocol::DFRN) {
+                                       if ($notification['network'] === Protocol::DFRN) {
                                                $lbl_knowyou = DI::l10n()->t('Claims to be known to you: ');
-                                               $knowyou     = (($notif['knowyou']) ? DI::l10n()->t('yes') : DI::l10n()->t('no'));
+                                               $knowyou     = (($notification['knowyou']) ? DI::l10n()->t('yes') : DI::l10n()->t('no'));
                                                $helptext    = DI::l10n()->t('Shall your connection be bidirectional or not?');
-                                               $helptext2   = DI::l10n()->t('Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed.', $notif['name'], $notif['name']);
-                                               $helptext3   = DI::l10n()->t('Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed.', $notif['name']);
-                                       } elseif ($notif['network'] === Protocol::DIASPORA) {
+                                               $helptext2   = DI::l10n()->t('Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed.', $notification['name'], $notification['name']);
+                                               $helptext3   = DI::l10n()->t('Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed.', $notification['name']);
+                                       } elseif ($notification['network'] === Protocol::DIASPORA) {
                                                $helptext  = DI::l10n()->t('Shall your connection be bidirectional or not?');
-                                               $helptext2 = DI::l10n()->t('Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed.', $notif['name'], $notif['name']);
-                                               $helptext3 = DI::l10n()->t('Accepting %s as a sharer allows them to subscribe to your posts, but you will not receive updates from them in your news feed.', $notif['name']);
+                                               $helptext2 = DI::l10n()->t('Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed.', $notification['name'], $notification['name']);
+                                               $helptext3 = DI::l10n()->t('Accepting %s as a sharer allows them to subscribe to your posts, but you will not receive updates from them in your news feed.', $notification['name']);
                                        }
 
                                        $dfrn_tpl  = Renderer::getMarkupTemplate('notifications/netfriend.tpl');
                                        $dfrn_text = Renderer::replaceMacros($dfrn_tpl, [
-                                               '$intro_id'        => $notif['intro_id'],
+                                               '$intro_id'        => $notification['intro_id'],
                                                '$friend_selected' => $friend_selected,
                                                '$fan_selected'    => $fan_selected,
                                                '$approve_as1'     => $helptext,
                                                '$approve_as2'     => $helptext2,
                                                '$approve_as3'     => $helptext3,
                                                '$as_friend'       => DI::l10n()->t('Friend'),
-                                               '$as_fan'          => (($notif['network'] == Protocol::DIASPORA) ? DI::l10n()->t('Sharer') : DI::l10n()->t('Subscriber'))
+                                               '$as_fan'          => (($notification['network'] == Protocol::DIASPORA) ? DI::l10n()->t('Sharer') : DI::l10n()->t('Subscriber'))
                                        ]);
 
-                                       $contact = DBA::selectFirst('contact', ['network', 'protocol'], ['id' => $notif['contact_id']]);
+                                       $contact = DBA::selectFirst('contact', ['network', 'protocol'], ['id' => $notification['contact_id']]);
 
                                        if (($contact['network'] != Protocol::DFRN) || ($contact['protocol'] == Protocol::ACTIVITYPUB)) {
                                                $action = 'follow_confirm';
@@ -131,51 +131,51 @@ class Introductions extends BaseNotifications
                                                $action = 'dfrn_confirm';
                                        }
 
-                                       $header = $notif['name'];
+                                       $header = $notification['name'];
 
-                                       if ($notif['addr'] != '') {
-                                               $header .= ' <' . $notif['addr'] . '>';
+                                       if ($notification['addr'] != '') {
+                                               $header .= ' <' . $notification['addr'] . '>';
                                        }
 
-                                       $header .= ' (' . ContactSelector::networkToName($notif['network'], $notif['url']) . ')';
+                                       $header .= ' (' . ContactSelector::networkToName($notification['network'], $notification['url']) . ')';
 
-                                       if ($notif['network'] != Protocol::DIASPORA) {
+                                       if ($notification['network'] != Protocol::DIASPORA) {
                                                $discard = DI::l10n()->t('Discard');
                                        } else {
                                                $discard = '';
                                        }
 
-                                       $notif_content[] = Renderer::replaceMacros($tpl, [
-                                               '$type'           => $notif['label'],
+                                       $notificationContent[] = Renderer::replaceMacros($notificationTemplate, [
+                                               '$type'           => $notification['label'],
                                                '$header'         => $header,
                                                '$str_notifytype' => DI::l10n()->t('Notification type:'),
-                                               '$notify_type'    => $notif['notify_type'],
+                                               '$notify_type'    => $notification['notify_type'],
                                                '$dfrn_text'      => $dfrn_text,
-                                               '$dfrn_id'        => $notif['dfrn_id'],
-                                               '$uid'            => $notif['uid'],
-                                               '$intro_id'       => $notif['intro_id'],
-                                               '$contact_id'     => $notif['contact_id'],
-                                               '$photo'          => $notif['photo'],
-                                               '$fullname'       => $notif['name'],
-                                               '$location'       => $notif['location'],
+                                               '$dfrn_id'        => $notification['dfrn_id'],
+                                               '$uid'            => $notification['uid'],
+                                               '$intro_id'       => $notification['intro_id'],
+                                               '$contact_id'     => $notification['contact_id'],
+                                               '$photo'          => $notification['photo'],
+                                               '$fullname'       => $notification['name'],
+                                               '$location'       => $notification['location'],
                                                '$lbl_location'   => DI::l10n()->t('Location:'),
-                                               '$about'          => $notif['about'],
+                                               '$about'          => $notification['about'],
                                                '$lbl_about'      => DI::l10n()->t('About:'),
-                                               '$keywords'       => $notif['keywords'],
+                                               '$keywords'       => $notification['keywords'],
                                                '$lbl_keywords'   => DI::l10n()->t('Tags:'),
-                                               '$gender'         => $notif['gender'],
+                                               '$gender'         => $notification['gender'],
                                                '$lbl_gender'     => DI::l10n()->t('Gender:'),
-                                               '$hidden'         => ['hidden', DI::l10n()->t('Hide this contact from others'), ($notif['hidden'] == 1), ''],
-                                               '$url'            => $notif['url'],
-                                               '$zrl'            => $notif['zrl'],
+                                               '$hidden'         => ['hidden', DI::l10n()->t('Hide this contact from others'), ($notification['hidden'] == 1), ''],
+                                               '$url'            => $notification['url'],
+                                               '$zrl'            => $notification['zrl'],
                                                '$lbl_url'        => DI::l10n()->t('Profile URL'),
-                                               '$addr'           => $notif['addr'],
+                                               '$addr'           => $notification['addr'],
                                                '$lbl_knowyou'    => $lbl_knowyou,
                                                '$lbl_network'    => DI::l10n()->t('Network:'),
-                                               '$network'        => ContactSelector::networkToName($notif['network'], $notif['url']),
+                                               '$network'        => ContactSelector::networkToName($notification['network'], $notification['url']),
                                                '$knowyou'        => $knowyou,
                                                '$approve'        => DI::l10n()->t('Approve'),
-                                               '$note'           => $notif['note'],
+                                               '$note'           => $notification['note'],
                                                '$ignore'         => DI::l10n()->t('Ignore'),
                                                '$discard'        => $discard,
                                                '$action'         => $action,
@@ -184,11 +184,11 @@ class Introductions extends BaseNotifications
                        }
                }
 
-               if (count($notifs['notifications']) == 0) {
+               if (count($notifications['notifications']) == 0) {
                        info(DI::l10n()->t('No introductions.') . EOL);
-                       $notif_nocontent = DI::l10n()->t('No more %s notifications.', $notifs['ident']);
+                       $notificationNoContent = DI::l10n()->t('No more %s notifications.', $notifications['ident']);
                }
 
-               return self::printContent($notif_header, $notif_content, $notif_nocontent, $notif_show_lnk);
+               return self::printContent($notificationHeader, $notificationContent, $notificationNoContent, $notificationShowLink);
        }
 }
diff --git a/src/Module/Notifications/Notification.php b/src/Module/Notifications/Notification.php
new file mode 100644 (file)
index 0000000..2f3f927
--- /dev/null
@@ -0,0 +1,62 @@
+<?php
+
+namespace Friendica\Module\Notifications;
+
+use Friendica\BaseModule;
+use Friendica\Core\System;
+use Friendica\DI;
+use Friendica\Network\HTTPException;
+
+/**
+ * Interacting with the /notification command
+ */
+class Notification extends BaseModule
+{
+       public static function init(array $parameters = [])
+       {
+               if (!local_user()) {
+                       throw new HTTPException\UnauthorizedException(DI::l10n()->t('Permission denied.'));
+               }
+       }
+
+       public static function rawContent(array $parameters = [])
+       {
+               // @TODO: Replace with parameter from router
+               if (DI::args()->get(1) === 'mark' && DI::args()->get(2) === 'all') {
+                       $success = DI::notification()->setAllSeen();
+
+                       header('Content-type: application/json; charset=utf-8');
+                       echo json_encode([
+                               'result' => ($success) ? 'success' : 'fail',
+                       ]);
+                       exit();
+               }
+       }
+
+       /**
+        * Redirect to the notifications main page or to the url for the chosen notifications
+        *
+        * @return string|void
+        * @throws HTTPException\InternalServerErrorException
+        */
+       public static function content(array $parameters = [])
+       {
+               // @TODO: Replace with parameter from router
+               if (DI::args()->getArgc() > 2 && DI::args()->get(1) === 'view' && intval(DI::args()->get(2))) {
+                       $notificationManager = DI::notification();
+                       // @TODO: Replace with parameter from router
+                       $note = $notificationManager->getByID(DI::args()->get(2));
+                       if (!empty($note)) {
+                               $notificationManager->setSeen($note);
+                               if (!empty($note['link'])) {
+                                       System::externalRedirect($note['link']);
+                               }
+                       }
+
+                       DI::baseUrl()->redirect();
+               }
+
+               // @TODO: Replace with parameter from router
+               DI::baseUrl()->redirect('notifications/system');
+       }
+}
index bfccbd4e70ea1e624d8b4922059c2dffdfefcafe..432ae93aeacb4e1b5eade6a526c7e6b3eae000ab 100644 (file)
@@ -20,31 +20,31 @@ class Notifications extends BaseNotifications
        /**
         * {@inheritDoc}
         */
-       public static function getNotifies()
+       public static function getNotifications()
        {
-               $nm = DI::notify();
+               $nm = DI::notification();
 
-               $notif_header = '';
+               $notificationHeader = '';
 
                // Get the network notifications
                if ((DI::args()->get(1) == 'network')) {
-                       $notif_header = DI::l10n()->t('Network Notifications');
-                       $notif      = $nm->getNetworkList(self::$showAll, self::$firstItemNum, self::ITEMS_PER_PAGE);
+                       $notificationHeader = DI::l10n()->t('Network Notifications');
+                       $notifications      = $nm->getNetworkList(self::$showAll, self::$firstItemNum, self::ITEMS_PER_PAGE);
 
                        // Get the system notifications
                } elseif ((DI::args()->get(1) == 'system')) {
-                       $notif_header = DI::l10n()->t('System Notifications');
-                       $notif      = $nm->getSystemList(self::$showAll, self::$firstItemNum, self::ITEMS_PER_PAGE);
+                       $notificationHeader = DI::l10n()->t('System Notifications');
+                       $notifications      = $nm->getSystemList(self::$showAll, self::$firstItemNum, self::ITEMS_PER_PAGE);
 
                        // Get the personal notifications
                } elseif ((DI::args()->get(1) == 'personal')) {
-                       $notif_header = DI::l10n()->t('Personal Notifications');
-                       $notif      = $nm->getPersonalList(self::$showAll, self::$firstItemNum, self::ITEMS_PER_PAGE);
+                       $notificationHeader = DI::l10n()->t('Personal Notifications');
+                       $notifications      = $nm->getPersonalList(self::$showAll, self::$firstItemNum, self::ITEMS_PER_PAGE);
 
                        // Get the home notifications
                } elseif ((DI::args()->get(1) == 'home')) {
-                       $notif_header = DI::l10n()->t('Home Notifications');
-                       $notif      = $nm->getHomeList(self::$showAll, self::$firstItemNum, self::ITEMS_PER_PAGE);
+                       $notificationHeader = DI::l10n()->t('Home Notifications');
+                       $notifications      = $nm->getHomeList(self::$showAll, self::$firstItemNum, self::ITEMS_PER_PAGE);
                        // fallback - redirect to main page
                } else {
                        DI::baseUrl()->redirect('notifications');
@@ -54,12 +54,12 @@ class Notifications extends BaseNotifications
                $pager = new Pager(DI::args()->getQueryString(), self::ITEMS_PER_PAGE);
 
                // Add additional informations (needed for json output)
-               $notifs['items_page'] = $pager->getItemsPerPage();
-               $notifs['page']       = $pager->getPage();
+               $notifications['items_page'] = $pager->getItemsPerPage();
+               $notifications['page']       = $pager->getPage();
 
                return [
-                       'header' => $notif_header,
-                       'notifs' => $notifs,
+                       'header'        => $notificationHeader,
+                       'notifications' => $notifications,
                ];
        }
 
@@ -67,18 +67,18 @@ class Notifications extends BaseNotifications
        {
                Nav::setSelected('notifications');
 
-               $notif_content   = [];
-               $notif_nocontent = '';
+               $notificationContent   = [];
+               $notificationNoContent = '';
 
-               $notif_result = self::getNotifies();
-               $notifs       = $notif_result['notifs'] ?? [];
-               $notif_header = $notif_result['header'] ?? '';
+               $notificationResult = self::getNotifications();
+               $notifications      = $notificationResult['notifications'] ?? [];
+               $notificationHeader = $notificationResult['header'] ?? '';
 
 
-               if (!empty($notifs['notifications'])) {
+               if (!empty($notifications['notifications'])) {
                        // Loop trough ever notification This creates an array with the output html for each
                        // notification and apply the correct template according to the notificationtype (label).
-                       foreach ($notifs['notifications'] as $notif) {
+                       foreach ($notifications['notifications'] as $notification) {
                                $notification_templates = [
                                        'like'        => 'notifications/likes_item.tpl',
                                        'dislike'     => 'notifications/dislikes_item.tpl',
@@ -88,31 +88,31 @@ class Notifications extends BaseNotifications
                                        'friend'      => 'notifications/friends_item.tpl',
                                        'comment'     => 'notifications/comments_item.tpl',
                                        'post'        => 'notifications/posts_item.tpl',
-                                       'notify'      => 'notifications/notify.tpl',
+                                       'notification'      => 'notifications/notification.tpl',
                                ];
 
-                               $tpl_notif = Renderer::getMarkupTemplate($notification_templates[$notif['label']]);
-
-                               $notif_content[] = Renderer::replaceMacros($tpl_notif, [
-                                       '$item_label' => $notif['label'],
-                                       '$item_link'  => $notif['link'],
-                                       '$item_image' => $notif['image'],
-                                       '$item_url'   => $notif['url'],
-                                       '$item_text'  => $notif['text'],
-                                       '$item_when'  => $notif['when'],
-                                       '$item_ago'   => $notif['ago'],
-                                       '$item_seen'  => $notif['seen'],
+                               $notificationTemplate = Renderer::getMarkupTemplate($notification_templates[$notification['label']]);
+
+                               $notificationContent[] = Renderer::replaceMacros($notificationTemplate, [
+                                       '$item_label' => $notification['label'],
+                                       '$item_link'  => $notification['link'],
+                                       '$item_image' => $notification['image'],
+                                       '$item_url'   => $notification['url'],
+                                       '$item_text'  => $notification['text'],
+                                       '$item_when'  => $notification['when'],
+                                       '$item_ago'   => $notification['ago'],
+                                       '$item_seen'  => $notification['seen'],
                                ]);
                        }
                } else {
-                       $notif_nocontent = DI::l10n()->t('No more %s notifications.', $notifs['ident']);
+                       $notificationNoContent = DI::l10n()->t('No more %s notifications.', $notifications['ident']);
                }
 
-               $notif_show_lnk = [
-                       'href' => (self::$showAll ? 'notifications/' . $notifs['ident'] : 'notifications/' . $notifs['ident'] . '?show=all'),
+               $notificationShowLink = [
+                       'href' => (self::$showAll ? 'notifications/' . $notifications['ident'] : 'notifications/' . $notifications['ident'] . '?show=all'),
                        'text' => (self::$showAll ? DI::l10n()->t('Show unread') : DI::l10n()->t('Show all')),
                ];
 
-               return self::printContent($notif_header, $notif_content, $notif_nocontent, $notif_show_lnk);
+               return self::printContent($notificationHeader, $notificationContent, $notificationNoContent, $notificationShowLink);
        }
 }
diff --git a/src/Module/Notifications/Notify.php b/src/Module/Notifications/Notify.php
deleted file mode 100644 (file)
index 3c1b6a0..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-
-namespace Friendica\Module\Notifications;
-
-use Friendica\BaseModule;
-use Friendica\Core\System;
-use Friendica\DI;
-use Friendica\Network\HTTPException;
-
-/**
- * Interacting with the /notify command
- */
-class Notify extends BaseModule
-{
-       public static function init(array $parameters = [])
-       {
-               if (!local_user()) {
-                       throw new HTTPException\UnauthorizedException(DI::l10n()->t('Permission denied.'));
-               }
-       }
-
-       public static function rawContent(array $parameters = [])
-       {
-               $a = DI::app();
-
-               // @TODO: Replace with parameter from router
-               if ($a->argc > 2 && $a->argv[1] === 'mark' && $a->argv[2] === 'all') {
-                       $success              = DI::notify()->setAllSeen();
-
-                       header('Content-type: application/json; charset=utf-8');
-                       echo json_encode([
-                               'result' => ($success) ? 'success' : 'fail',
-                       ]);
-                       exit();
-               }
-       }
-
-       /**
-        * Redirect to the notifications main page or to the url for the chosen notify
-        *
-        * @return string|void
-        * @throws HTTPException\InternalServerErrorException
-        */
-       public static function content(array $parameters = [])
-       {
-               $a = DI::app();
-
-               // @TODO: Replace with parameter from router
-               if ($a->argc > 2 && $a->argv[1] === 'view' && intval($a->argv[2])) {
-                       $notificationsManager = DI::notify();
-                       // @TODO: Replace with parameter from router
-                       $note = $notificationsManager->getByID($a->argv[2]);
-                       if (!empty($note)) {
-                               $notificationsManager->setSeen($note);
-                               if (!empty($note['link'])) {
-                                       System::externalRedirect($note['link']);
-                               }
-                       }
-
-                       DI::baseUrl()->redirect();
-               }
-
-               // @TODO: Replace with parameter from router
-               DI::baseUrl()->redirect('notifications/system');
-       }
-}
index 44502cdfb2c36be95edb00dea4ffc2411e193e81..f453856581c16558850d9d650a585d6816aa2b0a 100644 (file)
@@ -177,10 +177,10 @@ return [
                '/intros/{contact:\d+}[/json]' => [Module\Notifications\Introductions::class, [R::GET, R::POST]],
        ],
 
-       '/notify'         => [
-               '[/]'            => [Module\Notifications\Notify::class, [R::GET]],
-               '/view/{id:\d+}' => [Module\Notifications\Notify::class, [R::GET]],
-               '/mark/all'      => [Module\Notifications\Notify::class, [R::GET]],
+       '/notification'         => [
+               '[/]'            => [Module\Notifications\Notification::class, [R::GET]],
+               '/view/{id:\d+}' => [Module\Notifications\Notification::class, [R::GET]],
+               '/mark/all'      => [Module\Notifications\Notification::class, [R::GET]],
        ],
        '/objects/{guid}' => [Module\Objects::class, [R::GET]],
 
index 81d26120e7c849922c6411db893e1f4caca731f9..c12156e4f8162aadeee3615fc74ff365a8430ad9 100644 (file)
@@ -949,7 +949,7 @@ function checkboxhighlight(box) {
 }
 
 function notifyMarkAll() {
-       $.get('notify/mark/all', function(data) {
+       $.get('notification/mark/all', function(data) {
                if (timer) {
                        clearTimeout(timer);
                }
diff --git a/view/templates/notifications/notification.tpl b/view/templates/notifications/notification.tpl
new file mode 100644 (file)
index 0000000..9df1554
--- /dev/null
@@ -0,0 +1,4 @@
+
+<div class="notif-item {{if !$item_seen}}unseen{{/if}}">
+       <a href="{{$item_link}}" target="friendica-notifications"><img src="{{$item_image}}" class="notif-image">{{$item_text nofilter}} <span class="notif-when">{{$item_ago}}</span></a>
+</div>
\ No newline at end of file
diff --git a/view/templates/notifications/notify.tpl b/view/templates/notifications/notify.tpl
deleted file mode 100644 (file)
index 9df1554..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-
-<div class="notif-item {{if !$item_seen}}unseen{{/if}}">
-       <a href="{{$item_link}}" target="friendica-notifications"><img src="{{$item_image}}" class="notif-image">{{$item_text nofilter}} <span class="notif-when">{{$item_ago}}</span></a>
-</div>
\ No newline at end of file
index 252b61c77619d040c381e868d85af3fd5e135f43..bb88e87adab6e0f0c33ecd45bb3768c41062dbbd 100644 (file)
@@ -1,2 +1,2 @@
 
-{{include file="notifications/notify.tpl"}}
+{{include file="notifications/notification.tpl"}}
index 252b61c77619d040c381e868d85af3fd5e135f43..bb88e87adab6e0f0c33ecd45bb3768c41062dbbd 100644 (file)
@@ -1,2 +1,2 @@
 
-{{include file="notifications/notify.tpl"}}
+{{include file="notifications/notification.tpl"}}
index 252b61c77619d040c381e868d85af3fd5e135f43..bb88e87adab6e0f0c33ecd45bb3768c41062dbbd 100644 (file)
@@ -1,2 +1,2 @@
 
-{{include file="notifications/notify.tpl"}}
+{{include file="notifications/notification.tpl"}}
index 252b61c77619d040c381e868d85af3fd5e135f43..bb88e87adab6e0f0c33ecd45bb3768c41062dbbd 100644 (file)
@@ -1,2 +1,2 @@
 
-{{include file="notifications/notify.tpl"}}
+{{include file="notifications/notification.tpl"}}
index 252b61c77619d040c381e868d85af3fd5e135f43..bb88e87adab6e0f0c33ecd45bb3768c41062dbbd 100644 (file)
@@ -1,2 +1,2 @@
 
-{{include file="notifications/notify.tpl"}}
+{{include file="notifications/notification.tpl"}}
index 252b61c77619d040c381e868d85af3fd5e135f43..bb88e87adab6e0f0c33ecd45bb3768c41062dbbd 100644 (file)
@@ -1,2 +1,2 @@
 
-{{include file="notifications/notify.tpl"}}
+{{include file="notifications/notification.tpl"}}
index 252b61c77619d040c381e868d85af3fd5e135f43..bb88e87adab6e0f0c33ecd45bb3768c41062dbbd 100644 (file)
@@ -1,2 +1,2 @@
 
-{{include file="notifications/notify.tpl"}}
+{{include file="notifications/notification.tpl"}}