]> git.mxchange.org Git - friendica.git/blobdiff - src/Core/NotificationsManager.php
Refactor namespaces
[friendica.git] / src / Core / NotificationsManager.php
index d256b9adc1b0f0ba52a6f9f54124d22fe5dab7d7..566b701748919525e18c4a450bb3669f58e06d63 100644 (file)
@@ -9,7 +9,6 @@ namespace Friendica\Core;
 use Friendica\BaseObject;
 use Friendica\Content\Text\BBCode;
 use Friendica\Content\Text\HTML;
-use Friendica\Core\Protocol;
 use Friendica\Database\DBA;
 use Friendica\Model\Contact;
 use Friendica\Model\Item;
@@ -18,8 +17,6 @@ use Friendica\Util\Proxy as ProxyUtils;
 use Friendica\Util\Temporal;
 use Friendica\Util\XML;
 
-require_once 'include/dba.php';
-
 /**
  * @brief Methods for read and write notifications from/to database
  *  or for formatting notifications
@@ -37,6 +34,7 @@ class NotificationsManager extends BaseObject
         *  - date_rel : relative date string
         *  - msg_html: message as html string
         *  - msg_plain: message as plain text string
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        private function _set_extra($notes)
        {
@@ -62,6 +60,7 @@ class NotificationsManager extends BaseObject
         * @param string $limit  optional Query limits
         *
         * @return array of results or false on errors
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        public function getAll($filter = [], $order = "-date", $limit = "")
        {
@@ -110,6 +109,7 @@ class NotificationsManager extends BaseObject
         *
         * @param int $id identity
         * @return array note values or null if not found
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        public function getByID($id)
        {
@@ -130,6 +130,7 @@ class NotificationsManager extends BaseObject
         * @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($note, $seen = true)
        {
@@ -148,6 +149,7 @@ class NotificationsManager extends BaseObject
         *
         * @param bool $seen optional true or false. default true
         * @return bool true on success, false on error
+        * @throws \Exception
         */
        public function setAllSeen($seen = true)
        {
@@ -162,6 +164,7 @@ class NotificationsManager extends BaseObject
         * @brief List of pages for the Notifications TabBar
         *
         * @return array with with notifications TabBar data
+        * @throws \Exception
         */
        public function getTabs()
        {
@@ -214,14 +217,15 @@ class NotificationsManager extends BaseObject
         * @param array  $notifs 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"
+        *                       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 \Friendica\Network\HTTPException\InternalServerErrorException
         */
        private function formatNotifs(array $notifs, $ident = "")
        {
@@ -345,8 +349,20 @@ class NotificationsManager extends BaseObject
 
                                        case ACTIVITY_FRIEND:
                                                if (!isset($it['object'])) {
-                                                       logger('Incomplete data: ' . json_encode($it) . ' - ' . System::callstack(20), LOGGER_DEBUG);
+                                                       $notif = [
+                                                               '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' => $it['seen']
+                                                       ];
+                                                       break;
                                                }
+                                               /// @todo Check if this part here is used at all
+                                               Logger::log('Complete data: ' . json_encode($it) . ' - ' . System::callstack(20), Logger::DEBUG);
 
                                                $xmlhead = "<" . "?xml version='1.0' encoding='UTF-8' ?" . ">";
                                                $obj = XML::parseString($xmlhead . $it['object']);
@@ -387,14 +403,15 @@ class NotificationsManager extends BaseObject
        /**
         * @brief Get network notifications
         *
-        * @param int|string $seen  If 0 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
+        * @param int|string $seen    If 0 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 with
-        *      string 'ident' => Notification identifier
-        *      array 'notifications' => Network notifications
+        *    string 'ident' => Notification identifier
+        *    array 'notifications' => Network notifications
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        public function networkNotifs($seen = 0, $start = 0, $limit = 80)
        {
@@ -428,14 +445,15 @@ class NotificationsManager extends BaseObject
        /**
         * @brief Get system notifications
         *
-        * @param int|string $seen  If 0 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
+        * @param int|string $seen    If 0 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 with
-        *      string 'ident' => Notification identifier
-        *      array 'notifications' => System notifications
+        *    string 'ident' => Notification identifier
+        *    array 'notifications' => System notifications
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        public function systemNotifs($seen = 0, $start = 0, $limit = 80)
        {
@@ -470,14 +488,15 @@ class NotificationsManager extends BaseObject
        /**
         * @brief Get personal notifications
         *
-        * @param int|string $seen  If 0 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
+        * @param int|string $seen    If 0 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 with
-        *      string 'ident' => Notification identifier
-        *      array 'notifications' => Personal notifications
+        *    string 'ident' => Notification identifier
+        *    array 'notifications' => Personal notifications
+        * @throws \Exception
         */
        public function personalNotifs($seen = 0, $start = 0, $limit = 80)
        {
@@ -515,14 +534,15 @@ class NotificationsManager extends BaseObject
        /**
         * @brief Get home notifications
         *
-        * @param int|string $seen  If 0 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
+        * @param int|string $seen    If 0 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 with
-        *      string 'ident' => Notification identifier
-        *      array 'notifications' => Home notifications
+        *    string 'ident' => Notification identifier
+        *    array 'notifications' => Home notifications
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        public function homeNotifs($seen = 0, $start = 0, $limit = 80)
        {
@@ -555,14 +575,16 @@ class NotificationsManager extends BaseObject
        /**
         * @brief 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 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
         *
         * @return array with
-        *      string 'ident' => Notification identifier
-        *      array 'notifications' => Introductions
+        *    string 'ident' => Notification identifier
+        *    array 'notifications' => Introductions
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+        * @throws \ImagickException
         */
        public function introNotifs($all = false, $start = 0, $limit = 80)
        {
@@ -609,6 +631,8 @@ class NotificationsManager extends BaseObject
         *
         * @param array $intros The array from the db query
         * @return array with the introductions
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+        * @throws \ImagickException
         */
        private function formatIntros($intros)
        {
@@ -619,7 +643,7 @@ class NotificationsManager extends BaseObject
                        // We have to distinguish between these two because they use different data.
                        // Contact suggestions
                        if ($it['fid']) {
-                               $return_addr = bin2hex(self::getApp()->user['nickname'] . '@' . self::getApp()->get_hostname() . ((self::getApp()->urlpath) ? '/' . self::getApp()->urlpath : ''));
+                               $return_addr = bin2hex(self::getApp()->user['nickname'] . '@' . self::getApp()->getHostName() . ((self::getApp()->getURLPath()) ? '/' . self::getApp()->getURLPath() : ''));
 
                                $intro = [
                                        'label' => 'friend_suggestion',
@@ -630,7 +654,7 @@ class NotificationsManager extends BaseObject
                                        'madeby_zrl' => Contact::magicLink($it['url']),
                                        'madeby_addr' => $it['addr'],
                                        'contact_id' => $it['contact-id'],
-                                       'photo' => ((x($it, 'fphoto')) ? ProxyUtils::proxifyUrl($it['fphoto'], false, ProxyUtils::SIZE_SMALL) : "images/person-175.jpg"),
+                                       'photo' => (!empty($it['fphoto']) ? ProxyUtils::proxifyUrl($it['fphoto'], false, ProxyUtils::SIZE_SMALL) : "images/person-300.jpg"),
                                        'name' => $it['fname'],
                                        'url' => $it['furl'],
                                        'zrl' => Contact::magicLink($it['furl']),
@@ -645,6 +669,10 @@ class NotificationsManager extends BaseObject
                        } else {
                                $it = $this->getMissingIntroData($it);
 
+                               if (empty($it['url'])) {
+                                       continue;
+                               }
+
                                // Don't show these data until you are connected. Diaspora is doing the same.
                                if ($it['gnetwork'] === Protocol::DIASPORA) {
                                        $it['glocation'] = "";
@@ -658,7 +686,7 @@ class NotificationsManager extends BaseObject
                                        'uid' => $_SESSION['uid'],
                                        'intro_id' => $it['intro_id'],
                                        'contact_id' => $it['contact-id'],
-                                       'photo' => ((x($it, 'photo')) ? ProxyUtils::proxifyUrl($it['photo'], false, ProxyUtils::SIZE_SMALL) : "images/person-175.jpg"),
+                                       'photo' => (!empty($it['photo']) ? ProxyUtils::proxifyUrl($it['photo'], false, ProxyUtils::SIZE_SMALL) : "images/person-300.jpg"),
                                        'name' => $it['name'],
                                        'location' => BBCode::convert($it['glocation'], false),
                                        'about' => BBCode::convert($it['gabout'], false),
@@ -688,27 +716,28 @@ class NotificationsManager extends BaseObject
         * @param array $arr The input array with the intro data
         *
         * @return array The array with the intro data
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        private function getMissingIntroData($arr)
        {
                // If the network and the addr isn't available from the gcontact
                // table entry, take the one of the contact table entry
-               if ($arr['gnetwork'] == "") {
+               if (empty($arr['gnetwork']) && !empty($arr['network'])) {
                        $arr['gnetwork'] = $arr['network'];
                }
-               if ($arr['gaddr'] == "") {
+               if (empty($arr['gaddr']) && !empty($arr['addr'])) {
                        $arr['gaddr'] = $arr['addr'];
                }
 
                // If the network and addr is still not available
                // get the missing data data from other sources
-               if ($arr['gnetwork'] == "" || $arr['gaddr'] == "") {
+               if (empty($arr['gnetwork']) || empty($arr['gaddr'])) {
                        $ret = Contact::getDetailsByURL($arr['url']);
 
-                       if ($arr['gnetwork'] == "" && $ret['network'] != "") {
+                       if (empty($arr['gnetwork']) && !empty($ret['network'])) {
                                $arr['gnetwork'] = $ret['network'];
                        }
-                       if ($arr['gaddr'] == "" && $ret['addr'] != "") {
+                       if (empty($arr['gaddr']) && !empty($ret['addr'])) {
                                $arr['gaddr'] = $ret['addr'];
                        }
                }