X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2FNotificationsManager.php;h=610acb93d58a09108fca6e9f65489f895da2ddc0;hb=125d2f24dd8a9946a4b57bbda000bf15f6b0a60c;hp=87c72536c4a72f9c9745279c3c04dfac51b4ac4e;hpb=8ad345c43431d222a61f4e6217cc7dbbd4fd6bd4;p=friendica.git diff --git a/include/NotificationsManager.php b/include/NotificationsManager.php index 87c72536c4..610acb93d5 100644 --- a/include/NotificationsManager.php +++ b/include/NotificationsManager.php @@ -7,7 +7,6 @@ require_once('include/html2plain.php'); require_once("include/datetime.php"); require_once("include/bbcode.php"); -require_once("include/dbm.php"); /** * @brief Methods for read and write notifications from/to database @@ -82,12 +81,16 @@ class NotificationsManager { } $order_sql = implode(", ", $asOrder); - if ($limit!="") $limit = " LIMIT ".$limit; + if($limit!="") + $limit = " LIMIT ".$limit; $r = q("SELECT * FROM `notify` WHERE `uid` = %d $filter_sql ORDER BY $order_sql $limit", intval(local_user()) ); - if ($r!==false && count($r)>0) return $this->_set_extra($r); + + if (dbm::is_result($r)) + return $this->_set_extra($r); + return false; } @@ -102,7 +105,7 @@ class NotificationsManager { intval($id), intval(local_user()) ); - if($r!==false && count($r)>0) { + if (dbm::is_result($r)) { return $this->_set_extra($r)[0]; } return null; @@ -195,6 +198,7 @@ class NotificationsManager { * 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' => Relative date of the notification * bool 'seen' => Is the notification marked as "seen" @@ -210,8 +214,9 @@ class NotificationsManager { // Because we use different db tables for the notification query // we have sometimes $it['unseen'] and sometimes $it['seen]. // So we will have to transform $it['unseen'] - if($it['unseen']) + if (array_key_exists('unseen', $it)) { $it['seen'] = ($it['unseen'] > 0 ? false : true); + } // Depending on the identifier of the notification we need to use different defaults switch ($ident) { @@ -219,40 +224,41 @@ class NotificationsManager { $default_item_label = 'notify'; $default_item_link = $this->a->get_baseurl(true).'/notify/view/'. $it['id']; $default_item_image = proxy_url($it['photo'], false, PROXY_SIZE_MICRO); + $default_item_url = $it['url']; $default_item_text = strip_tags(bbcode($it['msg'])); $default_item_when = relative_date($it['date']); - $default_tpl = $tpl_notify; break; case 'home': $default_item_label = 'comment'; $default_item_link = $this->a->get_baseurl(true).'/display/'.$it['pguid']; $default_item_image = proxy_url($it['author-avatar'], false, PROXY_SIZE_MICRO); - $default_item_text = sprintf( t("%s commented on %s's post"), $it['author-name'], $it['pname']); + $default_item_url = $it['author-link']; + $default_item_text = sprintf(t("%s commented on %s's post"), $it['author-name'], $it['pname']); $default_item_when = relative_date($it['created']); - $default_tpl = $tpl_item_comments; break; default: $default_item_label = (($it['id'] == $it['parent']) ? 'post' : 'comment'); $default_item_link = $this->a->get_baseurl(true).'/display/'.$it['pguid']; $default_item_image = proxy_url($it['author-avatar'], false, PROXY_SIZE_MICRO); + $default_item_url = $it['author-link']; $default_item_text = (($it['id'] == $it['parent']) - ? sprintf( t("%s created a new post"), $it['author-name']) - : sprintf( t("%s commented on %s's post"), $it['author-name'], $it['pname'])); + ? sprintf(t("%s created a new post"), $it['author-name']) + : sprintf(t("%s commented on %s's post"), $it['author-name'], $it['pname'])); $default_item_when = relative_date($it['created']); - $default_tpl = (($it['id'] == $it['parent']) ? $tpl_item_posts : $tpl_item_comments); } // Transform the different types of notification in an usable array - switch($it['verb']){ + switch ($it['verb']){ case ACTIVITY_LIKE: $notif = array( 'label' => 'like', 'link' => $this->a->get_baseurl(true).'/display/'.$it['pguid'], - '$image' => proxy_url($it['author-avatar'], false, PROXY_SIZE_MICRO), - 'text' => sprintf( t("%s liked %s's post"), $it['author-name'], $it['pname']), + 'image' => proxy_url($it['author-avatar'], false, PROXY_SIZE_MICRO), + 'url' => $it['author-link'], + 'text' => sprintf(t("%s liked %s's post"), $it['author-name'], $it['pname']), 'when' => relative_date($it['created']), 'seen' => $it['seen'] ); @@ -263,7 +269,8 @@ class NotificationsManager { 'label' => 'dislike', 'link' => $this->a->get_baseurl(true).'/display/'.$it['pguid'], 'image' => proxy_url($it['author-avatar'], false, PROXY_SIZE_MICRO), - 'text' => sprintf( t("%s disliked %s's post"), $it['author-name'], $it['pname']), + 'url' => $it['author-link'], + 'text' => sprintf(t("%s disliked %s's post"), $it['author-name'], $it['pname']), 'when' => relative_date($it['created']), 'seen' => $it['seen'] ); @@ -274,7 +281,8 @@ class NotificationsManager { 'label' => 'attend', 'link' => $this->a->get_baseurl(true).'/display/'.$it['pguid'], 'image' => proxy_url($it['author-avatar'], false, PROXY_SIZE_MICRO), - 'text' => sprintf( t("%s is attending %s's event"), $it['author-name'], $it['pname']), + 'url' => $it['author-link'], + 'text' => sprintf(t("%s is attending %s's event"), $it['author-name'], $it['pname']), 'when' => relative_date($it['created']), 'seen' => $it['seen'] ); @@ -285,6 +293,7 @@ class NotificationsManager { 'label' => 'attendno', 'link' => $this->a->get_baseurl(true).'/display/'.$it['pguid'], 'image' => proxy_url($it['author-avatar'], false, PROXY_SIZE_MICRO), + 'url' => $it['author-link'], 'text' => sprintf( t("%s is not attending %s's event"), $it['author-name'], $it['pname']), 'when' => relative_date($it['created']), 'seen' => $it['seen'] @@ -296,7 +305,8 @@ class NotificationsManager { 'label' => 'attendmaybe', 'link' => $this->a->get_baseurl(true).'/display/'.$it['pguid'], 'image' => proxy_url($it['author-avatar'], false, PROXY_SIZE_MICRO), - 'text' => sprintf( t("%s may attend %s's event"), $it['author-name'], $it['pname']), + 'url' => $it['author-link'], + 'text' => sprintf(t("%s may attend %s's event"), $it['author-name'], $it['pname']), 'when' => relative_date($it['created']), 'seen' => $it['seen'] ); @@ -311,7 +321,8 @@ class NotificationsManager { 'label' => 'friend', 'link' => $this->a->get_baseurl(true).'/display/'.$it['pguid'], 'image' => proxy_url($it['author-avatar'], false, PROXY_SIZE_MICRO), - 'text' => sprintf( t("%s is now friends with %s"), $it['author-name'], $it['fname']), + 'url' => $it['author-link'], + 'text' => sprintf(t("%s is now friends with %s"), $it['author-name'], $it['fname']), 'when' => relative_date($it['created']), 'seen' => $it['seen'] ); @@ -322,6 +333,7 @@ class NotificationsManager { 'label' => $default_item_label, 'link' => $default_item_link, 'image' => $default_item_image, + 'url' => $default_item_url, 'text' => $default_item_text, 'when' => $default_item_when, 'seen' => $it['seen'] @@ -344,6 +356,8 @@ class NotificationsManager { * @return int Number of network notifications */ private function networkTotal($seen = 0) { + $sql_seen = ""; + if($seen === 0) $sql_seen = " AND `item`.`unseen` = 1 "; @@ -355,7 +369,7 @@ class NotificationsManager { intval(local_user()) ); - if(dbm::is_result($r)) + if (dbm::is_result($r)) return $r[0]['total']; return 0; @@ -379,6 +393,7 @@ class NotificationsManager { $ident = 'network'; $total = $this->networkTotal($seen); $notifs = array(); + $sql_seen = ""; if($seen === 0) $sql_seen = " AND `item`.`unseen` = 1 "; @@ -397,7 +412,7 @@ class NotificationsManager { intval($limit) ); - if(dbm::is_result($r)) + if (dbm::is_result($r)) $notifs = $this->formatNotifs($r, $ident); $arr = array ( @@ -417,6 +432,8 @@ class NotificationsManager { * @return int Number of system notifications */ private function systemTotal($seen = 0) { + $sql_seen = ""; + if($seen === 0) $sql_seen = " AND `seen` = 0 "; @@ -424,7 +441,7 @@ class NotificationsManager { intval(local_user()) ); - if(dbm::is_result($r)) + if (dbm::is_result($r)) return $r[0]['total']; return 0; @@ -448,18 +465,19 @@ class NotificationsManager { $ident = 'system'; $total = $this->systemTotal($seen); $notifs = array(); + $sql_seen = ""; if($seen === 0) $sql_seen = " AND `seen` = 0 "; - $r = q("SELECT `id`, `photo`, `msg`, `date`, `seen` FROM `notify` + $r = q("SELECT `id`, `url`, `photo`, `msg`, `date`, `seen` FROM `notify` WHERE `uid` = %d $sql_seen ORDER BY `date` DESC LIMIT %d, %d ", intval(local_user()), intval($start), intval($limit) ); - if(dbm::is_result($r)) + if (dbm::is_result($r)) $notifs = $this->formatNotifs($r, $ident); $arr = array ( @@ -481,7 +499,7 @@ class NotificationsManager { $myurl = substr($myurl,strpos($myurl,'://')+3); $myurl = str_replace(array('www.','.'),array('','\\.'),$myurl); $diasp_url = str_replace('/profile/','/u/',$myurl); - $sql_extra .= sprintf(" AND ( `item`.`author-link` regexp '%s' or `item`.`tag` regexp '%s' or `item`.`tag` regexp '%s' ) ", + $sql_extra = sprintf(" AND ( `item`.`author-link` regexp '%s' or `item`.`tag` regexp '%s' or `item`.`tag` regexp '%s' ) ", dbesc($myurl . '$'), dbesc($myurl . '\\]'), dbesc($diasp_url . '\\]') @@ -498,7 +516,8 @@ class NotificationsManager { * @return int Number of personal notifications */ private function personalTotal($seen = 0) { - $sql_extra .= $this->_personal_sql_extra(); + $sql_seen = ""; + $sql_extra = $this->_personal_sql_extra(); if($seen === 0) $sql_seen = " AND `item`.`unseen` = 1 "; @@ -512,7 +531,7 @@ class NotificationsManager { intval(local_user()) ); - if(dbm::is_result($r)) + if (dbm::is_result($r)) return $r[0]['total']; return 0; @@ -535,15 +554,16 @@ class NotificationsManager { public function personalNotifs($seen = 0, $start = 0, $limit = 80) { $ident = 'personal'; $total = $this->personalTotal($seen); - $sql_extra .= $this->_personal_sql_extra(); + $sql_extra = $this->_personal_sql_extra(); $notifs = array(); + $sql_seen = ""; if($seen === 0) $sql_seen = " AND `item`.`unseen` = 1 "; $r = q("SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`author-name`, `item`.`unseen`, `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object` AS `object`, - `pitem`.`author-name` AS `pname`, `pitem`.`author-link` AS `plink`, `pitem`.`guid` AS `pguid`, + `pitem`.`author-name` AS `pname`, `pitem`.`author-link` AS `plink`, `pitem`.`guid` AS `pguid` FROM `item` INNER JOIN `item` AS `pitem` ON `pitem`.`id`=`item`.`parent` WHERE `item`.`visible` = 1 $sql_extra @@ -555,7 +575,7 @@ class NotificationsManager { intval($limit) ); - if(dbm::is_result($r)) + if (dbm::is_result($r)) $notifs = $this->formatNotifs($r, $ident); $arr = array ( @@ -575,6 +595,8 @@ class NotificationsManager { * @return int Number of home notifications */ private function homeTotal($seen = 0) { + $sql_seen = ""; + if($seen === 0) $sql_seen = " AND `item`.`unseen` = 1 "; @@ -585,7 +607,7 @@ class NotificationsManager { intval(local_user()) ); - if(dbm::is_result($r)) + if (dbm::is_result($r)) return $r[0]['total']; return 0; @@ -609,14 +631,15 @@ class NotificationsManager { $ident = 'home'; $total = $this->homeTotal($seen); $notifs = array(); + $sql_seen = ""; if($seen === 0) $sql_seen = " AND `item`.`unseen` = 1 "; $r = q("SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`author-name`, `item`.`unseen`, - `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object` as `object`, - `pitem`.`author-name` as `pname`, `pitem`.`author-link` as `plink`, `pitem`.`guid` as `pguid` - FROM `item` INNER JOIN `item` as `pitem` ON `pitem`.`id`=`item`.`parent` + `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object` AS `object`, + `pitem`.`author-name` AS `pname`, `pitem`.`author-link` AS `plink`, `pitem`.`guid` AS `pguid` + FROM `item` INNER JOIN `item` AS `pitem` ON `pitem`.`id`=`item`.`parent` WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 1 $sql_seen @@ -626,7 +649,7 @@ class NotificationsManager { intval($limit) ); - if(dbm::is_result($r)) + if (dbm::is_result($r)) $notifs = $this->formatNotifs($r, $ident); $arr = array ( @@ -640,13 +663,15 @@ class NotificationsManager { /** * @brief Total number of introductions - * @param int $all - * If 0 only include introductions into the query + * @param bool $all + * If false only include introductions into the query * which aren't marked as ignored * @return int Number of introductions */ - private function introTotal($all) { - if($all === 0) + private function introTotal($all = false) { + $sql_extra = ""; + + if(!$all) $sql_extra = " AND `ignore` = 0 "; $r = q("SELECT COUNT(*) AS `total` FROM `intro` @@ -654,7 +679,7 @@ class NotificationsManager { intval($_SESSION['uid']) ); - if(dbm::is_result($r)) + if (dbm::is_result($r)) return $r[0]['total']; return 0; @@ -663,8 +688,8 @@ class NotificationsManager { /** * @brief Get introductions * - * @param int $all - * If 0 only include introductions into the query + * @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 @@ -674,12 +699,13 @@ class NotificationsManager { * int 'total' => Total number of available introductions * array 'notifications' => Introductions */ - public function introNotifs($all = 0, $start = 0, $limit = 80) { + public function introNotifs($all = false, $start = 0, $limit = 80) { $ident = 'introductions'; $total = $this->introTotal($seen); $notifs = array(); + $sql_extra = ""; - if($all === 0) + if(!$all) $sql_extra = " AND `ignore` = 0 "; /// @todo Fetch contact details by "get_contact_details_by_url" instead of queries to contact, fcontact and gcontact @@ -698,7 +724,7 @@ class NotificationsManager { intval($limit) ); - if(dbm::is_result($r)) + if (dbm::is_result($r)) $notifs = $this->formatIntros($r); $arr = array (