X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=mod%2Fnotifications.php;h=b113be030d8337cc95f19d744e4f9a57f2671443;hb=c8d3067d0a284c1e0b3ac40629f28ae95a63e7f5;hp=f3e7c564abdfbf5ca88d253d57c05d5244132d4f;hpb=a684a1c5193726999f11233e80891c4432883263;p=friendica.git diff --git a/mod/notifications.php b/mod/notifications.php index f3e7c564ab..b113be030d 100644 --- a/mod/notifications.php +++ b/mod/notifications.php @@ -1,564 +1,331 @@ argc > 1) ? $a->argv[1] : 0); - if($request_id === "all") + if ($request_id === "all") { return; + } - if($request_id) { - - $r = q("SELECT * FROM `intro` WHERE `id` = %d AND `uid` = %d LIMIT 1", - intval($request_id), - intval(local_user()) - ); + if ($request_id) { + $intro = dba::selectFirst('intro', ['id', 'contact-id', 'fid'], ['id' => $request_id, 'uid' => local_user()]); - if(count($r)) { - $intro_id = $r[0]['id']; - $contact_id = $r[0]['contact-id']; - } - else { - notice( t('Invalid request identifier.') . EOL); + if (DBM::is_result($intro)) { + $intro_id = $intro['id']; + $contact_id = $intro['contact-id']; + } else { + notice(L10n::t('Invalid request identifier.') . EOL); return; } // If it is a friend suggestion, the contact is not a new friend but an existing friend // that should not be deleted. - $fid = $r[0]['fid']; + $fid = $intro['fid']; - if($_POST['submit'] == t('Discard')) { - $r = q("DELETE FROM `intro` WHERE `id` = %d", - intval($intro_id) - ); - if(! $fid) { + if ($_POST['submit'] == L10n::t('Discard')) { + dba::delete('intro', ['id' => $intro_id]); + if (!$fid) { // The check for blocked and pending is in case the friendship was already approved // and we just want to get rid of the now pointless notification - - $r = q("DELETE FROM `contact` WHERE `id` = %d AND `uid` = %d AND `self` = 0 AND `blocked` = 1 AND `pending` = 1", - intval($contact_id), - intval(local_user()) - ); + $condition = ['id' => $contact_id, 'uid' => local_user(), + 'self' => false, 'blocked' => true, 'pending' => true]; + dba::delete('contact', $condition); } goaway('notifications/intros'); } - if($_POST['submit'] == t('Ignore')) { - $r = q("UPDATE `intro` SET `ignore` = 1 WHERE `id` = %d", - intval($intro_id)); + + if ($_POST['submit'] == L10n::t('Ignore')) { + dba::update('intro', ['ignore' => true], ['id' => $intro_id]); goaway('notifications/intros'); } } } -function notifications_content(&$a) { - - if(! local_user()) { - notice( t('Permission denied.') . EOL); +function notifications_content(App $a) +{ + if (!local_user()) { + notice(L10n::t('Permission denied.') . EOL); return; } - nav_set_selected('notifications'); + $page = (x($_REQUEST,'page') ? $_REQUEST['page'] : 1); + $show = (x($_REQUEST,'show') ? $_REQUEST['show'] : 0); + + Nav::setSelected('notifications'); $json = (($a->argc > 1 && $a->argv[$a->argc - 1] === 'json') ? true : false); + $nm = new NotificationsManager(); $o = ''; - // get the nav tabs for the notification pages - $tabs = notifications_tabs($a); - $notif_content = array(); - - if( (($a->argc > 1) && ($a->argv[1] == 'intros')) || (($a->argc == 1))) { - nav_set_selected('introductions'); - - if(($a->argc > 2) && ($a->argv[2] == 'all')) - $sql_extra = ''; - else - $sql_extra = " AND `ignore` = 0 "; - - $notif_header = t('Notifications'); - $notif_tpl = get_markup_template('notifications.tpl'); - - $notif_ignored_lnk .= '' - . ((strlen($sql_extra)) ? t('Show Ignored Requests') : t('Hide Ignored Requests')) . '' . "\r\n"; - - $r = q("SELECT COUNT(*) AS `total` FROM `intro` - WHERE `intro`.`uid` = %d $sql_extra AND `intro`.`blocked` = 0 ", - intval($_SESSION['uid']) - ); - if($r && count($r)) { - $a->set_pager_total($r[0]['total']); - $a->set_pager_itemspage(20); - } + // Get the nav tabs for the notification pages + $tabs = $nm->getTabs(); + $notif_content = []; + $notif_nocontent = ''; - /// @todo Fetch contact details by "get_contact_details_by_url" instead of queries to contact, fcontact and gcontact + // Notification results per page + $perpage = 20; + $startrec = ($page * $perpage) - $perpage; - $r = q("SELECT `intro`.`id` AS `intro_id`, `intro`.*, `contact`.*, `fcontact`.`name` AS `fname`,`fcontact`.`url` AS `furl`,`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` - 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` = %d $sql_extra AND `intro`.`blocked` = 0 ", - intval($_SESSION['uid'])); + // Get introductions + if ((($a->argc > 1) && ($a->argv[1] == 'intros')) || (($a->argc == 1))) { + Nav::setSelected('introductions'); + $notif_header = L10n::t('Notifications'); - if(($r !== false) && (count($r))) { + $all = (($a->argc > 2) && ($a->argv[2] == 'all')); - $sugg = get_markup_template('suggestions.tpl'); - $tpl = get_markup_template("intros.tpl"); + $notifs = $nm->introNotifs($all, $startrec, $perpage); - foreach($r as $rr) { + // Get the network notifications + } elseif (($a->argc > 1) && ($a->argv[1] == 'network')) { + $notif_header = L10n::t('Network Notifications'); + $notifs = $nm->networkNotifs($show, $startrec, $perpage); - if($rr['fid']) { + // Get the system notifications + } elseif (($a->argc > 1) && ($a->argv[1] == 'system')) { + $notif_header = L10n::t('System Notifications'); + $notifs = $nm->systemNotifs($show, $startrec, $perpage); - $return_addr = bin2hex($a->user['nickname'] . '@' . $a->get_hostname() . (($a->path) ? '/' . $a->path : '')); + // Get the personal notifications + } elseif (($a->argc > 1) && ($a->argv[1] == 'personal')) { + $notif_header = L10n::t('Personal Notifications'); + $notifs = $nm->personalNotifs($show, $startrec, $perpage); - $notif_content[] = replace_macros($sugg, array( - '$str_notifytype' => t('Notification type: '), - '$notify_type' => t('Friend Suggestion'), - '$intro_id' => $rr['intro_id'], - '$madeby' => sprintf( t('suggested by %s'),$rr['name']), - '$contact_id' => $rr['contact-id'], - '$photo' => ((x($rr,'fphoto')) ? proxy_url($rr['fphoto'], false, PROXY_SIZE_SMALL) : "images/person-175.jpg"), - '$fullname' => $rr['fname'], - '$url' => zrl($rr['furl']), - '$hidden' => array('hidden', t('Hide this contact from others'), ($rr['hidden'] == 1), ''), - '$activity' => array('activity', t('Post a new friend activity'), (intval(get_pconfig(local_user(),'system','post_newfriend')) ? '1' : 0), t('if applicable')), + // Get the home notifications + } elseif (($a->argc > 1) && ($a->argv[1] == 'home')) { + $notif_header = L10n::t('Home Notifications'); + $notifs = $nm->homeNotifs($show, $startrec, $perpage); - '$knowyou' => $knowyou, - '$approve' => t('Approve'), - '$note' => $rr['note'], - '$request' => $rr['frequest'] . '?addr=' . $return_addr, - '$ignore' => t('Ignore'), - '$discard' => t('Discard'), + } - )); - continue; + // Set the pager + $a->set_pager_itemspage($perpage); - } - $friend_selected = (($rr['network'] !== NETWORK_OSTATUS) ? ' checked="checked" ' : ' disabled '); - $fan_selected = (($rr['network'] === NETWORK_OSTATUS) ? ' checked="checked" disabled ' : ''); - $dfrn_tpl = get_markup_template('netfriend.tpl'); + // Add additional informations (needed for json output) + $notifs['items_page'] = $a->pager['itemspage']; + $notifs['page'] = $a->pager['page']; - $knowyou = ''; - $dfrn_text = ''; + // Json output + if (intval($json) === 1) { + System::jsonExit($notifs); + } - if($rr['network'] === NETWORK_DFRN || $rr['network'] === NETWORK_DIASPORA) { - if($rr['network'] === NETWORK_DFRN) { - $lbl_knowyou = t('Claims to be known to you: '); - $knowyou = (($rr['knowyou']) ? t('yes') : t('no')); - $helptext = t('Shall your connection be bidirectional or not? "Friend" implies that you allow to read and you subscribe to their posts. "Fan/Admirer" means that you allow to read but you do not want to read theirs. Approve as: '); - } else { - $knowyou = ''; - $helptext = t('Shall your connection be bidirectional or not? "Friend" implies that you allow to read and you subscribe to their posts. "Sharer" means that you allow to read but you do not want to read theirs. Approve as: '); + $notif_tpl = get_markup_template('notifications.tpl'); + + // Process the data for template creation + if ($notifs['ident'] === 'introductions') { + $sugg = get_markup_template('suggestions.tpl'); + $tpl = get_markup_template("intros.tpl"); + + // The link to switch between ignored and normal connection requests + $notif_show_lnk = [ + 'href' => (!$all ? 'notifications/intros/all' : 'notifications/intros' ), + 'text' => (!$all ? L10n::t('Show Ignored Requests') : 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 $it) { + + // 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 ($it['label']) { + case 'friend_suggestion': + $notif_content[] = replace_macros($sugg, [ + '$type' => $it['label'], + '$str_notifytype' => L10n::t('Notification type:'), + '$notify_type' => $it['notify_type'], + '$intro_id' => $it['intro_id'], + '$lbl_madeby' => L10n::t('Suggested by:'), + '$madeby' => $it['madeby'], + '$madeby_url' => $it['madeby_url'], + '$madeby_zrl' => $it['madeby_zrl'], + '$madeby_addr' => $it['madeby_addr'], + '$contact_id' => $it['contact_id'], + '$photo' => $it['photo'], + '$fullname' => $it['name'], + '$url' => $it['url'], + '$zrl' => $it['zrl'], + '$lbl_url' => L10n::t('Profile URL'), + '$addr' => $it['addr'], + '$hidden' => ['hidden', L10n::t('Hide this contact from others'), ($it['hidden'] == 1), ''], + + '$knowyou' => $it['knowyou'], + '$approve' => L10n::t('Approve'), + '$note' => $it['note'], + '$request' => $it['request'], + '$ignore' => L10n::t('Ignore'), + '$discard' => L10n::t('Discard'), + ]); + break; + + // Normal connection requests + default: + $friend_selected = (($it['network'] !== NETWORK_OSTATUS) ? ' checked="checked" ' : ' disabled '); + $fan_selected = (($it['network'] === NETWORK_OSTATUS) ? ' checked="checked" disabled ' : ''); + $dfrn_tpl = get_markup_template('netfriend.tpl'); + + $knowyou = ''; + $lbl_knowyou = ''; + $dfrn_text = ''; + $helptext = ''; + $helptext2 = ''; + $helptext3 = ''; + + if ($it['network'] === NETWORK_DFRN || $it['network'] === NETWORK_DIASPORA) { + if ($it['network'] === NETWORK_DFRN) { + $lbl_knowyou = L10n::t('Claims to be known to you: '); + $knowyou = (($it['knowyou']) ? L10n::t('yes') : L10n::t('no')); + $helptext = L10n::t('Shall your connection be bidirectional or not?'); + $helptext2 = 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.', $it['name'], $it['name']); + $helptext3 = 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.', $it['name']); + } else { + $knowyou = ''; + $helptext = L10n::t('Shall your connection be bidirectional or not?'); + $helptext2 = 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.', $it['name'], $it['name']); + $helptext3 = 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.', $it['name']); + } } - $dfrn_text = replace_macros($dfrn_tpl,array( - '$intro_id' => $rr['intro_id'], + $dfrn_text = replace_macros($dfrn_tpl,[ + '$intro_id' => $it['intro_id'], '$friend_selected' => $friend_selected, '$fan_selected' => $fan_selected, - '$approve_as' => $helptext, - '$as_friend' => t('Friend'), - '$as_fan' => (($rr['network'] == NETWORK_DIASPORA) ? t('Sharer') : t('Fan/Admirer')) - )); - } - - $header = $rr["name"]; - - $ret = probe_url($rr["url"]); - - if ($rr['gnetwork'] == "") - $rr['gnetwork'] = $ret["network"]; - - if ($ret["addr"] != "") - $header .= " <".$ret["addr"].">"; - - $header .= " (".network_to_name($rr['gnetwork'], $rr['url']).")"; - - // Don't show these data until you are connected. Diaspora is doing the same. - if($rr['gnetwork'] === NETWORK_DIASPORA) { - $rr['glocation'] = ""; - $rr['gabout'] = ""; - $rr['ggender'] = ""; - } - - $notif_content[] = replace_macros($tpl, array( - '$header' => htmlentities($header), - '$str_notifytype' => t('Notification type: '), - '$notify_type' => (($rr['network'] !== NETWORK_OSTATUS) ? t('Friend/Connect Request') : t('New Follower')), - '$dfrn_text' => $dfrn_text, - '$dfrn_id' => $rr['issued-id'], - '$uid' => $_SESSION['uid'], - '$intro_id' => $rr['intro_id'], - '$contact_id' => $rr['contact-id'], - '$photo' => ((x($rr,'photo')) ? proxy_url($rr['photo'], false, PROXY_SIZE_SMALL) : "images/person-175.jpg"), - '$fullname' => $rr['name'], - '$location' => bbcode($rr['glocation'], false, false), - '$lbl_location' => t('Location:'), - '$about' => bbcode($rr['gabout'], false, false), - '$lbl_about' => t('About:'), - '$keywords' => $rr['gkeywords'], - '$lbl_keywords' => t('Tags:'), - '$gender' => $rr['ggender'], - '$lbl_gender' => t('Gender:'), - '$hidden' => array('hidden', t('Hide this contact from others'), ($rr['hidden'] == 1), ''), - '$activity' => array('activity', t('Post a new friend activity'), (intval(get_pconfig(local_user(),'system','post_newfriend')) ? '1' : 0), t('if applicable')), - '$url' => $rr['url'], - '$zrl' => zrl($rr['url']), - '$lbl_url' => t('Profile URL'), - '$addr' => $rr['addr'], - '$lbl_knowyou' => $lbl_knowyou, - '$lbl_network' => t('Network:'), - '$network' => network_to_name($rr['gnetwork'], $rr['url']), - '$knowyou' => $knowyou, - '$approve' => t('Approve'), - '$note' => $rr['note'], - '$ignore' => t('Ignore'), - '$discard' => t('Discard'), - - )); - } - } - else - info( t('No introductions.') . EOL); - - } else if (($a->argc > 1) && ($a->argv[1] == 'network')) { - - $notif_header = t('Network Notifications'); - $notif_tpl = get_markup_template('notifications.tpl'); - - $r = q("SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`author-name`, - `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`.`unseen` = 1 AND `item`.`visible` = 1 AND `pitem`.`parent` != 0 AND - `item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 0 ORDER BY `item`.`created` DESC" , - intval(local_user()) - ); - - $tpl_item_likes = get_markup_template('notifications_likes_item.tpl'); - $tpl_item_dislikes = get_markup_template('notifications_dislikes_item.tpl'); - $tpl_item_friends = get_markup_template('notifications_friends_item.tpl'); - $tpl_item_comments = get_markup_template('notifications_comments_item.tpl'); - $tpl_item_posts = get_markup_template('notifications_posts_item.tpl'); - - if ($r) { - - foreach ($r as $it) { - switch($it['verb']){ - case ACTIVITY_LIKE: - $notif_content[] = replace_macros($tpl_item_likes,array( - //'$item_link' => $a->get_baseurl(true).'/display/'.$a->user['nickname']."/".$it['parent'], - '$item_link' => $a->get_baseurl(true).'/display/'.$it['pguid'], - '$item_image' => proxy_url($it['author-avatar'], false, PROXY_SIZE_MICRO), - '$item_text' => sprintf( t("%s liked %s's post"), $it['author-name'], $it['pname']), - '$item_when' => relative_date($it['created']) - )); - break; - - case ACTIVITY_DISLIKE: - $notif_content[] = replace_macros($tpl_item_dislikes,array( - //'$item_link' => $a->get_baseurl(true).'/display/'.$a->user['nickname']."/".$it['parent'], - '$item_link' => $a->get_baseurl(true).'/display/'.$it['pguid'], - '$item_image' => proxy_url($it['author-avatar'], false, PROXY_SIZE_MICRO), - '$item_text' => sprintf( t("%s disliked %s's post"), $it['author-name'], $it['pname']), - '$item_when' => relative_date($it['created']) - )); - break; - - case ACTIVITY_FRIEND: - - $xmlhead="<"."?xml version='1.0' encoding='UTF-8' ?".">"; - $obj = parse_xml_string($xmlhead.$it['object']); - $it['fname'] = $obj->title; - - $notif_content[] = replace_macros($tpl_item_friends,array( - //'$item_link' => $a->get_baseurl(true).'/display/'.$a->user['nickname']."/".$it['parent'], - '$item_link' => $a->get_baseurl(true).'/display/'.$it['pguid'], - '$item_image' => proxy_url($it['author-avatar'], false, PROXY_SIZE_MICRO), - '$item_text' => sprintf( t("%s is now friends with %s"), $it['author-name'], $it['fname']), - '$item_when' => relative_date($it['created']) - )); - break; - - 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'])); - $tpl = (($it['id'] == $it['parent']) ? $tpl_item_posts : $tpl_item_comments); - - $notif_content[] = replace_macros($tpl,array( - //'$item_link' => $a->get_baseurl(true).'/display/'.$a->user['nickname']."/".$it['parent'], - '$item_link' => $a->get_baseurl(true).'/display/'.$it['pguid'], - '$item_image' => proxy_url($it['author-avatar'], false, PROXY_SIZE_MICRO), - '$item_text' => $item_text, - '$item_when' => relative_date($it['created']) - )); - } - } + '$approve_as1' => $helptext, + '$approve_as2' => $helptext2, + '$approve_as3' => $helptext3, + '$as_friend' => L10n::t('Friend'), + '$as_fan' => (($it['network'] == NETWORK_DIASPORA) ? L10n::t('Sharer') : L10n::t('Subscriber')) + ]); - } else { + $header = $it["name"]; - $notif_nocontent = t('No more network notifications.'); - } - - } else if (($a->argc > 1) && ($a->argv[1] == 'system')) { + if ($it["addr"] != "") { + $header .= " <".$it["addr"].">"; + } - $notif_header = t('System Notifications'); - $notif_tpl = get_markup_template('notifications.tpl'); + $header .= " (".ContactSelector::networkToName($it['network'], $it['url']).")"; - $not_tpl = get_markup_template('notify.tpl'); - require_once('include/bbcode.php'); + if ($it['network'] != NETWORK_DIASPORA) { + $discard = L10n::t('Discard'); + } else { + $discard = ''; + } - $r = q("SELECT * from notify where uid = %d and seen = 0 order by date desc", - intval(local_user()) - ); + $notif_content[] = replace_macros($tpl, [ + '$type' => $it['label'], + '$header' => htmlentities($header), + '$str_notifytype' => L10n::t('Notification type:'), + '$notify_type' => $it['notify_type'], + '$dfrn_text' => $dfrn_text, + '$dfrn_id' => $it['dfrn_id'], + '$uid' => $it['uid'], + '$intro_id' => $it['intro_id'], + '$contact_id' => $it['contact_id'], + '$photo' => $it['photo'], + '$fullname' => $it['name'], + '$location' => $it['location'], + '$lbl_location' => L10n::t('Location:'), + '$about' => $it['about'], + '$lbl_about' => L10n::t('About:'), + '$keywords' => $it['keywords'], + '$lbl_keywords' => L10n::t('Tags:'), + '$gender' => $it['gender'], + '$lbl_gender' => L10n::t('Gender:'), + '$hidden' => ['hidden', L10n::t('Hide this contact from others'), ($it['hidden'] == 1), ''], + '$url' => $it['url'], + '$zrl' => $it['zrl'], + '$lbl_url' => L10n::t('Profile URL'), + '$addr' => $it['addr'], + '$lbl_knowyou' => $lbl_knowyou, + '$lbl_network' => L10n::t('Network:'), + '$network' => ContactSelector::networkToName($it['network'], $it['url']), + '$knowyou' => $knowyou, + '$approve' => L10n::t('Approve'), + '$note' => $it['note'], + '$ignore' => L10n::t('Ignore'), + '$discard' => $discard, - if (count($r) > 0) { - foreach ($r as $it) { - $notif_content[] = replace_macros($not_tpl,array( - '$item_link' => $a->get_baseurl(true).'/notify/view/'. $it['id'], - '$item_image' => proxy_url($it['photo'], false, PROXY_SIZE_MICRO), - '$item_text' => strip_tags(bbcode($it['msg'])), - '$item_when' => relative_date($it['date']) - )); + ]); + break; } - } else { - $notif_nocontent = t('No more system notifications.'); } - } else if (($a->argc > 1) && ($a->argv[1] == 'personal')) { - - $notif_header = t('Personal Notifications'); - $notif_tpl = get_markup_template('notifications.tpl'); - - $myurl = $a->get_baseurl(true) . '/profile/'. $a->user['nickname']; - $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' ) ", - dbesc($myurl . '$'), - dbesc($myurl . '\\]'), - dbesc($diasp_url . '\\]') - ); - - - $r = q("SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`author-name`, - `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`.`unseen` = 1 AND `item`.`visible` = 1 - $sql_extra - AND `item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 0 ORDER BY `item`.`created` DESC" , - intval(local_user()) - ); - - $tpl_item_likes = get_markup_template('notifications_likes_item.tpl'); - $tpl_item_dislikes = get_markup_template('notifications_dislikes_item.tpl'); - $tpl_item_friends = get_markup_template('notifications_friends_item.tpl'); - $tpl_item_comments = get_markup_template('notifications_comments_item.tpl'); - $tpl_item_posts = get_markup_template('notifications_posts_item.tpl'); - - if (count($r) > 0) { - - foreach ($r as $it) { - switch($it['verb']){ - case ACTIVITY_LIKE: - $notif_content[] = replace_macros($tpl_item_likes,array( - //'$item_link' => $a->get_baseurl(true).'/display/'.$a->user['nickname']."/".$it['parent'], - '$item_link' => $a->get_baseurl(true).'/display/'.$it['pguid'], - '$item_image' => $it['author-avatar'], - '$item_text' => sprintf( t("%s liked %s's post"), $it['author-name'], $it['pname']), - '$item_when' => relative_date($it['created']) - )); - break; - - case ACTIVITY_DISLIKE: - $notif_content[] = replace_macros($tpl_item_dislikes,array( - //'$item_link' => $a->get_baseurl(true).'/display/'.$a->user['nickname']."/".$it['parent'], - '$item_link' => $a->get_baseurl(true).'/display/'.$it['pguid'], - '$item_image' => $it['author-avatar'], - '$item_text' => sprintf( t("%s disliked %s's post"), $it['author-name'], $it['pname']), - '$item_when' => relative_date($it['created']) - )); - break; - - case ACTIVITY_FRIEND: - - $xmlhead="<"."?xml version='1.0' encoding='UTF-8' ?".">"; - $obj = parse_xml_string($xmlhead.$it['object']); - $it['fname'] = $obj->title; - - $notif_content[] = replace_macros($tpl_item_friends,array( - //'$item_link' => $a->get_baseurl(true).'/display/'.$a->user['nickname']."/".$it['parent'], - '$item_link' => $a->get_baseurl(true).'/display/'.$it['pguid'], - '$item_image' => $it['author-avatar'], - '$item_text' => sprintf( t("%s is now friends with %s"), $it['author-name'], $it['fname']), - '$item_when' => relative_date($it['created']) - )); - break; - - 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'])); - $tpl = (($it['id'] == $it['parent']) ? $tpl_item_posts : $tpl_item_comments); - - $notif_content[] = replace_macros($tpl,array( - //'$item_link' => $a->get_baseurl(true).'/display/'.$a->user['nickname']."/".$it['parent'], - '$item_link' => $a->get_baseurl(true).'/display/'.$it['pguid'], - '$item_image' => $it['author-avatar'], - '$item_text' => $item_text, - '$item_when' => relative_date($it['created']) - )); - } - } - - } else { + if (count($notifs['notifications']) == 0) { + info(L10n::t('No introductions.') . EOL); + } - $notif_nocontent = t('No more personal notifications.'); + // Normal notifications (no introductions) + } else { + // The template files we need in different cases for formatting the content + $tpl_item_like = 'notifications_likes_item.tpl'; + $tpl_item_dislike = 'notifications_dislikes_item.tpl'; + $tpl_item_attend = 'notifications_attend_item.tpl'; + $tpl_item_attendno = 'notifications_attend_item.tpl'; + $tpl_item_attendmaybe = 'notifications_attend_item.tpl'; + $tpl_item_friend = 'notifications_friends_item.tpl'; + $tpl_item_comment = 'notifications_comments_item.tpl'; + $tpl_item_post = 'notifications_posts_item.tpl'; + $tpl_item_notify = 'notify.tpl'; + + // 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 $it) { + + // We use the notification label to get the correct template file + $tpl_var_name = 'tpl_item_'.$it['label']; + $tpl_notif = get_markup_template($$tpl_var_name); + + $notif_content[] = replace_macros($tpl_notif,[ + '$item_label' => $it['label'], + '$item_link' => $it['link'], + '$item_image' => $it['image'], + '$item_url' => $it['url'], + '$item_text' => $it['text'], + '$item_when' => $it['when'], + '$item_ago' => $it['ago'], + '$item_seen' => $it['seen'], + ]); } - } else if (($a->argc > 1) && ($a->argv[1] == 'home')) { - - $notif_header = t('Home Notifications'); - $notif_tpl = get_markup_template('notifications.tpl'); - - $r = q("SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`author-name`, - `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`.`unseen` = 1 AND `item`.`visible` = 1 AND - `item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 1 ORDER BY `item`.`created` DESC", - intval(local_user()) - ); - - $tpl_item_likes = get_markup_template('notifications_likes_item.tpl'); - $tpl_item_dislikes = get_markup_template('notifications_dislikes_item.tpl'); - $tpl_item_friends = get_markup_template('notifications_friends_item.tpl'); - $tpl_item_comments = get_markup_template('notifications_comments_item.tpl'); - - if (count($r) > 0) { - - foreach ($r as $it) { - switch($it['verb']){ - case ACTIVITY_LIKE: - $notif_content[] = replace_macros($tpl_item_likes,array( - //'$item_link' => $a->get_baseurl(true).'/display/'.$a->user['nickname']."/".$it['parent'], - '$item_link' => $a->get_baseurl(true).'/display/'.$it['pguid'], - '$item_image' => $it['author-avatar'], - '$item_text' => sprintf( t("%s liked %s's post"), $it['author-name'], $it['pname']), - '$item_when' => relative_date($it['created']) - )); - - break; - case ACTIVITY_DISLIKE: - $notif_content[] = replace_macros($tpl_item_dislikes,array( - //'$item_link' => $a->get_baseurl(true).'/display/'.$a->user['nickname']."/".$it['parent'], - '$item_link' => $a->get_baseurl(true).'/display/'.$it['pguid'], - '$item_image' => $it['author-avatar'], - '$item_text' => sprintf( t("%s disliked %s's post"), $it['author-name'], $it['pname']), - '$item_when' => relative_date($it['created']) - )); - - break; - case ACTIVITY_FRIEND: - - $xmlhead="<"."?xml version='1.0' encoding='UTF-8' ?".">"; - $obj = parse_xml_string($xmlhead.$it['object']); - $it['fname'] = $obj->title; - - $notif_content[] = replace_macros($tpl_item_friends,array( - //'$item_link' => $a->get_baseurl(true).'/display/'.$a->user['nickname']."/".$it['parent'], - '$item_link' => $a->get_baseurl(true).'/display/'.$it['pguid'], - '$item_image' => $it['author-avatar'], - '$item_text' => sprintf( t("%s is now friends with %s"), $it['author-name'], $it['fname']), - '$item_when' => relative_date($it['created']) - )); - - break; - default: - $notif_content[] = replace_macros($tpl_item_comments,array( - //'$item_link' => $a->get_baseurl(true).'/display/'.$a->user['nickname']."/".$it['parent'], - '$item_link' => $a->get_baseurl(true).'/display/'.$it['pguid'], - '$item_image' => $it['author-avatar'], - '$item_text' => sprintf( t("%s commented on %s's post"), $it['author-name'], $it['pname']), - '$item_when' => relative_date($it['created']) - )); - } - } + $notif_show_lnk = [ + 'href' => ($show ? 'notifications/'.$notifs['ident'] : 'notifications/'.$notifs['ident'].'?show=all' ), + 'text' => ($show ? L10n::t('Show unread') : L10n::t('Show all')), + ]; - } else { - $notif_nocontent = t('No more home notifications.'); + // Output if there aren't any notifications available + if (count($notifs['notifications']) == 0) { + $notif_nocontent = L10n::t('No more %s notifications.', $notifs['ident']); } - } - $o .= replace_macros($notif_tpl, array( + $o .= replace_macros($notif_tpl, [ '$notif_header' => $notif_header, '$tabs' => $tabs, '$notif_content' => $notif_content, '$notif_nocontent' => $notif_nocontent, - '$notif_ignored_lnk' => $notif_ignored_lnk, - )); - $o .= paginate($a); + '$notif_show_lnk' => $notif_show_lnk, + '$notif_paginate' => alt_pager($a, count($notif_content)) + ]); + return $o; } -/** - * @brief List of pages for the Notifications TabBar - * - * @param app $a The - * @return array with with notifications TabBar data - */ -function notifications_tabs($a) { - $tabs = array( - array( - 'label' => t('System'), - 'url'=>'notifications/system', - 'sel'=> (($a->argv[1] == 'system') ? 'active' : ''), - 'accesskey' => 'y', - ), - array( - 'label' => t('Network'), - 'url'=>'notifications/network', - 'sel'=> (($a->argv[1] == 'network') ? 'active' : ''), - 'accesskey' => 'w', - ), - array( - 'label' => t('Personal'), - 'url'=>'notifications/personal', - 'sel'=> (($a->argv[1] == 'personal') ? 'active' : ''), - 'accesskey' => 'r', - ), - array( - 'label' => t('Home'), - 'url' => 'notifications/home', - 'sel'=> (($a->argv[1] == 'home') ? 'active' : ''), - 'accesskey' => 'h', - ), - array( - 'label' => t('Introductions'), - 'url' => 'notifications/intros', - 'sel'=> (($a->argv[1] == 'intros') ? 'active' : ''), - 'accesskey' => 'i', - ), - /*array( - 'label' => t('Messages'), - 'url' => 'message', - 'sel'=> '', - ),*/ /*while I can have notifications for messages, this tablist is not place for message page link */ - ); - - return $tabs; -} \ No newline at end of file