<?php
/**
* @file include/NotificationsManager.php
+ * @brief Methods for read and write notifications from/to database
+ * or for formatting notifications
*/
require_once('include/html2plain.php');
require_once("include/datetime.php");
require_once("include/dbm.php");
/**
- * @brief Read and write notifications from/to database
+ * @brief Methods for read and write notifications from/to database
+ * or for formatting notifications
*/
class NotificationsManager {
private $a;
/**
- * @brief get all notifications for local_user()
+ * @brief Get all notifications for local_user()
*
* @param array $filter optional Array "column name"=>value: filter query by columns values
* @param string $order optional Space separated list of column to sort by. prepend name with "+" to sort ASC, "-" to sort DESC. Default to "-date"
}
/**
- * @brief get one note for local_user() by $id value
+ * @brief Get one note for local_user() by $id value
*
* @param int $id
* @return array note values or null if not found
* string 'when' => Relative date of the notification
* bool 'seen' => Is the notification marked as "seen"
*/
- private function format($notifs, $ident = "") {
+ private function formatNotifs($notifs, $ident = "") {
$notif = array();
$arr = array();
/**
* @brief Total number of network notifications
- * @param int $seen
+ * @param int|string $seen
* If 0 only include notifications into the query
- * which arn't marked as "seen" into
+ * which aren't marked as "seen"
* @return int Number of network notifications
*/
private function networkTotal($seen = 0) {
/**
* @brief Get network notifications
*
- * @param type $seen
+ * @param int|string $seen
* If 0 only include notifications into the query
- * which arn't marked as "seen" into
+ * 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 Query output
+ * @return array with
+ * string 'ident' => Notification identifier
+ * int 'total' => Total number of available network notifications
+ * array 'notifications' => Network notifications
*/
- public function networkNotifs($seen = 0, $start = 0, $limit = 20) {
+ public function networkNotifs($seen = 0, $start = 0, $limit = 80) {
$ident = 'network';
$total = $this->networkTotal($seen);
+ $notifs = array();
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`
- WHERE `item`.`visible` = 1 AND `pitem`.`parent` != 0 AND
+ FROM `item` INNER JOIN `item` AS `pitem` ON `pitem`.`id`=`item`.`parent`
+ WHERE `item`.`visible` = 1 AND `pitem`.`parent` != 0 AND
`item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 0
$sql_seen
- ORDER BY `item`.`created` DESC LIMIT %d, %d ",
- intval(local_user()),
- intval($start),
- intval($limit)
+ ORDER BY `item`.`created` DESC LIMIT %d, %d ",
+ intval(local_user()),
+ intval($start),
+ intval($limit)
);
- if(dbm::is_result($r)) {
- $notifs = $this->format($r, $ident);
- $arr = array (
- 'notifications' => $notifs,
- 'ident' => $ident,
- 'total' => $total,
- );
+ if(dbm::is_result($r))
+ $notifs = $this->formatNotifs($r, $ident);
- return $arr;
- }
+ $arr = array (
+ 'notifications' => $notifs,
+ 'ident' => $ident,
+ 'total' => $total,
+ );
+
+ return $arr;
}
/**
* @brief Total number of system notifications
- * @param int $seen
+ * @param int|string $seen
* If 0 only include notifications into the query
- * which arn't marked as "seen" into
+ * which aren't marked as "seen"
* @return int Number of system notifications
*/
private function systemTotal($seen = 0) {
/**
* @brief Get system notifications
*
- * @param type $seen
+ * @param int|string $seen
* If 0 only include notifications into the query
- * which arn't marked as "seen" into
+ * 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 Query output
+ * @return array with
+ * string 'ident' => Notification identifier
+ * int 'total' => Total number of available system notifications
+ * array 'notifications' => System notifications
*/
- public function systemNotifs($seen = 0, $start = 0, $limit = 20) {
+ public function systemNotifs($seen = 0, $start = 0, $limit = 80) {
$ident = 'system';
$total = $this->systemTotal($seen);
+ $notifs = array();
if($seen === 0)
$sql_seen = " AND `seen` = 0 ";
intval($limit)
);
- if(dbm::is_result($r)) {
- $notifs = $this->format($r, $ident);
- $arr = array (
- 'notifications' => $notifs,
- 'ident' => $ident,
- 'total' => $total,
- );
+ if(dbm::is_result($r))
+ $notifs = $this->formatNotifs($r, $ident);
- return $arr;
- }
+ $arr = array (
+ 'notifications' => $notifs,
+ 'ident' => $ident,
+ 'total' => $total,
+ );
+
+ return $arr;
}
/**
/**
* @brief Total number of personal notifications
- * @param int $seen
+ * @param int|string $seen
* If 0 only include notifications into the query
- * which arn't marked as "seen" into
+ * which aren't marked as "seen"
* @return int Number of personal notifications
*/
private function personalTotal($seen = 0) {
/**
* @brief Get personal notifications
*
- * @param type $seen
+ * @param int|string $seen
* If 0 only include notifications into the query
- * which arn't marked as "seen" into
+ * 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 Query output
+ * @return array with
+ * string 'ident' => Notification identifier
+ * int 'total' => Total number of available personal notifications
+ * array 'notifications' => Personal notifications
*/
- public function personalNotifs($seen = 0, $start = 0, $limit = 20) {
+ public function personalNotifs($seen = 0, $start = 0, $limit = 80) {
$ident = 'personal';
- $total = 0;
+ $total = $this->personalTotal($seen);
$sql_extra .= $this->_personal_sql_extra();
+ $notifs = array();
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`
- WHERE `item`.`visible` = 1
+ FROM `item` INNER JOIN `item` AS `pitem` ON `pitem`.`id`=`item`.`parent`
+ WHERE `item`.`visible` = 1
$sql_extra
$sql_seen
AND `item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 0
- ORDER BY `item`.`created` DESC LIMIT %d, %d " ,
- intval(local_user()),
- intval($start),
- intval($limit)
+ ORDER BY `item`.`created` DESC LIMIT %d, %d " ,
+ intval(local_user()),
+ intval($start),
+ intval($limit)
);
- if(dbm::is_result($r)) {
- $notifs = $this->format($r, $ident);
- $arr = array (
- 'notifications' => $notifs,
- 'ident' => $ident,
- 'total' => $total,
- );
+ if(dbm::is_result($r))
+ $notifs = $this->formatNotifs($r, $ident);
+
+ $arr = array (
+ 'notifications' => $notifs,
+ 'ident' => $ident,
+ 'total' => $total,
+ );
- return $arr;
- }
+ return $arr;
}
/**
* @brief Total number of home notifications
- * @param int $seen
+ * @param int|string $seen
* If 0 only include notifications into the query
- * which arn't marked as "seen" into
+ * which aren't marked as "seen"
* @return int Number of home notifications
*/
private function homeTotal($seen = 0) {
/**
* @brief Get home notifications
*
- * @param type $seen
+ * @param int|string $seen
* If 0 only include notifications into the query
- * which arn't marked as "seen" into
+ * 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 Query output
+ * @return array with
+ * string 'ident' => Notification identifier
+ * int 'total' => Total number of available home notifications
+ * array 'notifications' => Home notifications
*/
- public function homeNotifs($seen = 0, $start = 0, $limit = 20) {
+ public function homeNotifs($seen = 0, $start = 0, $limit = 80) {
$ident = 'home';
$total = $this->homeTotal($seen);
+ $notifs = array();
if($seen === 0)
$sql_seen = " AND `item`.`unseen` = 1 ";
- $total = $this->homeTotal($seen);
-
$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`
- WHERE `item`.`visible` = 1 AND
+ 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
- ORDER BY `item`.`created` DESC LIMIT %d, %d ",
- intval(local_user()),
- intval($start),
- intval($limit)
+ ORDER BY `item`.`created` DESC LIMIT %d, %d ",
+ intval(local_user()),
+ intval($start),
+ intval($limit)
);
- if(dbm::is_result($r)) {
- $notifs = $this->format($r, $ident);
- $arr = array (
- 'notifications' => $notifs,
- 'ident' => $ident,
- 'total' => $total,
- );
+ if(dbm::is_result($r))
+ $notifs = $this->formatNotifs($r, $ident);
+
+ $arr = array (
+ 'notifications' => $notifs,
+ 'ident' => $ident,
+ 'total' => $total,
+ );
- return $arr;
+ return $arr;
+ }
+
+ /**
+ * @brief Total number of introductions
+ * @param int $all
+ * If 0 only include introductions into the query
+ * which aren't marked as ignored
+ * @return int Number of introductions
+ */
+ private function introTotal($all) {
+ if($all === 0)
+ $sql_extra = " AND `ignore` = 0 ";
+
+ $r = q("SELECT COUNT(*) AS `total` FROM `intro`
+ WHERE `intro`.`uid` = %d $sql_extra AND `intro`.`blocked` = 0 ",
+ intval($_SESSION['uid'])
+ );
+
+ if(dbm::is_result($r))
+ return $r[0]['total'];
+
+ return 0;
+ }
+
+ /**
+ * @brief Get introductions
+ *
+ * @param int $all
+ * If 0 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
+ * int 'total' => Total number of available introductions
+ * array 'notifications' => Introductions
+ */
+ public function introNotifs($all = 0, $start = 0, $limit = 80) {
+ $ident = 'introductions';
+ $total = $this->introTotal($seen);
+ $notifs = array();
+
+ if($all === 0)
+ $sql_extra = " AND `ignore` = 0 ";
+
+ /// @todo Fetch contact details by "get_contact_details_by_url" instead of queries to contact, fcontact and gcontact
+ $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
+ LIMIT %d, %d",
+ intval($_SESSION['uid']),
+ intval($start),
+ intval($limit)
+ );
+
+ if(dbm::is_result($r))
+ $notifs = $this->formatIntros($r);
+
+ $arr = array (
+ 'ident' => $ident,
+ 'total' => $total,
+ 'notifications' => $notifs,
+ );
+
+ return $arr;
+ }
+
+ /**
+ * @brief Format the notification query in an usable array
+ *
+ * @param array $intros The array from the db query
+ * @return array with the introductions
+ */
+ private function formatIntros($intros) {
+ $knowyou = '';
+
+ foreach($intros 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.
+
+ // Contact suggestions
+ if($it['fid']) {
+
+ $return_addr = bin2hex($this->a->user['nickname'] . '@' . $this->a->get_hostname() . (($this->a->path) ? '/' . $this->a->path : ''));
+
+ $intro = array(
+ 'label' => 'friend_suggestion',
+ 'notify_type' => t('Friend Suggestion'),
+ 'intro_id' => $it['intro_id'],
+ 'madeby' => $it['name'],
+ 'contact_id' => $it['contact-id'],
+ 'photo' => ((x($it,'fphoto')) ? proxy_url($it['fphoto'], false, PROXY_SIZE_SMALL) : "images/person-175.jpg"),
+ 'name' => $it['fname'],
+ 'url' => zrl($it['furl']),
+ 'hidden' => $it['hidden'] == 1,
+ 'post_newfriend' => (intval(get_pconfig(local_user(),'system','post_newfriend')) ? '1' : 0),
+
+ 'knowyou' => $knowyou,
+ 'note' => $it['note'],
+ 'request' => $it['frequest'] . '?addr=' . $return_addr,
+
+ );
+
+ // Normal connection requests
+ } else {
+
+ // Probe the contact url to get missing data
+ $ret = probe_url($it["url"]);
+
+ if ($it['gnetwork'] == "")
+ $it['gnetwork'] = $ret["network"];
+
+ // Don't show these data until you are connected. Diaspora is doing the same.
+ if($it['gnetwork'] === NETWORK_DIASPORA) {
+ $it['glocation'] = "";
+ $it['gabout'] = "";
+ $it['ggender'] = "";
+ }
+ $intro = array(
+ 'label' => (($it['network'] !== NETWORK_OSTATUS) ? 'friend_request' : 'follower'),
+ 'notify_type' => (($it['network'] !== NETWORK_OSTATUS) ? t('Friend/Connect Request') : t('New Follower')),
+ 'dfrn_id' => $it['issued-id'],
+ 'uid' => $_SESSION['uid'],
+ 'intro_id' => $it['intro_id'],
+ 'contact_id' => $it['contact-id'],
+ 'photo' => ((x($it,'photo')) ? proxy_url($it['photo'], false, PROXY_SIZE_SMALL) : "images/person-175.jpg"),
+ 'name' => $it['name'],
+ 'location' => bbcode($it['glocation'], false, false),
+ 'about' => bbcode($it['gabout'], false, false),
+ 'keywords' => $it['gkeywords'],
+ 'gender' => $it['ggender'],
+ 'hidden' => $it['hidden'] == 1,
+ 'post_newfriend' => (intval(get_pconfig(local_user(),'system','post_newfriend')) ? '1' : 0),
+ 'url' => $it['url'],
+ 'zrl' => zrl($it['url']),
+ 'addr' => $ret['addr'],
+ 'network' => $it['gnetwork'],
+ 'knowyou' => $it['knowyou'],
+ 'note' => $it['note'],
+ );
+ }
+
+ $arr[] = $intro;
}
+
+ return $arr;
}
}
<?php
-include_once("include/NotificationsManager.php");
-include_once("include/bbcode.php");
-include_once("include/contact_selectors.php");
-include_once("include/Scrape.php");
+
+/**
+ * @file mod/notifications.php
+ * @brief The notifications module
+ */
+
+require_once("include/NotificationsManager.php");
+require_once("include/contact_selectors.php");
+require_once("include/network.php");
function notifications_post(&$a) {
$nm = new NotificationsManager();
$o = '';
- // get the nav tabs for the notification pages
+ // Get the nav tabs for the notification pages
$tabs = $nm->getTabs();
$notif_content = array();
+
+ // Notification results per page
$perpage = 20;
$startrec = ($page * $perpage) - $perpage;
+ // Get introductions
if( (($a->argc > 1) && ($a->argv[1] == 'intros')) || (($a->argc == 1))) {
nav_set_selected('introductions');
+ $notif_header = t('Notifications');
if(($a->argc > 2) && ($a->argv[2] == 'all'))
- $sql_extra = '';
+ $all = 1;
else
- $sql_extra = " AND `ignore` = 0 ";
+ $all = 0;
- $notif_header = t('Notifications');
- $notif_tpl = get_markup_template('notifications.tpl');
+ $notifs = $nm->introNotifs($all, $startrec, $perpage);
+ // Get the network notifications
+ } else if (($a->argc > 1) && ($a->argv[1] == 'network')) {
- $notif_show_lnk = array(
- 'href' => ((strlen($sql_extra)) ? 'notifications/intros/all' : 'notifications/intros' ),
- 'text' => ((strlen($sql_extra)) ? t('Show Ignored Requests') : t('Hide Ignored Requests')),
- 'id' => "notifications-show-hide-link",
- );
+ $notif_header = t('Network Notifications');
+ $notifs = $nm->networkNotifs($show, $startrec, $perpage);
- $r = q("SELECT COUNT(*) AS `total` FROM `intro`
- WHERE `intro`.`uid` = %d $sql_extra AND `intro`.`blocked` = 0 ",
- intval($_SESSION['uid'])
- );
- if(dbm::is_result($r)) {
- $a->set_pager_total($r[0]['total']);
- $a->set_pager_itemspage($perpage);
- }
+ // Get the system notifications
+ } else if (($a->argc > 1) && ($a->argv[1] == 'system')) {
- /// @todo Fetch contact details by "get_contact_details_by_url" instead of queries to contact, fcontact and gcontact
+ $notif_header = t('System Notifications');
+ $notifs = $nm->systemNotifs($show, $startrec, $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 the personal notifications
+ } else if (($a->argc > 1) && ($a->argv[1] == 'personal')) {
- if(dbm::is_result($r)) {
+ $notif_header = t('Personal Notifications');
+ $notifs = $nm->personalNotifs($show, $startrec, $perpage);
- $sugg = get_markup_template('suggestions.tpl');
- $tpl = get_markup_template("intros.tpl");
+ // Get the home notifications
+ } else if (($a->argc > 1) && ($a->argv[1] == 'home')) {
- foreach($r as $rr) {
+ $notif_header = t('Home Notifications');
+ $notifs = $nm->homeNotifs($show, $startrec, $perpage);
- if($rr['fid']) {
+ }
- $return_addr = bin2hex($a->user['nickname'] . '@' . $a->get_hostname() . (($a->path) ? '/' . $a->path : ''));
- $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')),
+ // Set the pager
+ $a->set_pager_total($notifs['total']);
+ $a->set_pager_itemspage($perpage);
- '$knowyou' => $knowyou,
- '$approve' => t('Approve'),
- '$note' => $rr['note'],
- '$request' => $rr['frequest'] . '?addr=' . $return_addr,
- '$ignore' => t('Ignore'),
- '$discard' => t('Discard'),
+ // Add additional informations (needed for json output)
+ $notifs['items_page'] = $a->pager['itemspage'];
+ $notifs['page'] = $a->pager['page'];
- ));
+ // Json output
+ if(intval($json) === 1)
+ json_return_and_die($notifs);
- continue;
+ $notif_tpl = get_markup_template('notifications.tpl');
- }
- $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');
+ // Process the data for template creation
+ if($notifs['ident'] === 'introductions') {
- $knowyou = '';
- $dfrn_text = '';
+ $sugg = get_markup_template('suggestions.tpl');
+ $tpl = get_markup_template("intros.tpl");
- 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: ');
+ // The link to switch between ignored and normal connection requests
+ $notif_show_lnk = array(
+ 'href' => ($all === 0 ? 'notifications/intros/all' : 'notifications/intros' ),
+ 'text' => ($all === 0 ? t('Show Ignored Requests') : 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, array(
+ '$str_notifytype' => t('Notification type: '),
+ '$notify_type' => $it['notify_type'],
+ '$intro_id' => $it['intro_id'],
+ '$madeby' => sprintf( t('suggested by %s'),$it['madeby']),
+ '$contact_id' => $it['contact-id'],
+ '$photo' => $it['photo'],
+ '$fullname' => $it['name'],
+ '$url' => $it['url'],
+ '$hidden' => array('hidden', t('Hide this contact from others'), ($it['hidden'] == 1), ''),
+ '$activity' => array('activity', t('Post a new friend activity'), $it['post_newfriend'], t('if applicable')),
+
+ '$knowyou' => $it['knowyou'],
+ '$approve' => t('Approve'),
+ '$note' => $it['note'],
+ '$request' => $it['request'],
+ '$ignore' => t('Ignore'),
+ '$discard' => 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 = '';
+ $dfrn_text = '';
+
+ if($it['network'] === NETWORK_DFRN || $it['network'] === NETWORK_DIASPORA) {
+ if($it['network'] === NETWORK_DFRN) {
+ $lbl_knowyou = t('Claims to be known to you: ');
+ $knowyou = (($it['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: ');
+ }
}
$dfrn_text = replace_macros($dfrn_tpl,array(
- '$intro_id' => $rr['intro_id'],
+ '$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'))
+ '$as_fan' => (($it['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),
- '$location_label' => t('Location:'),
- '$about' => bbcode($rr['gabout'], false, false),
- '$about_label' => t('About:'),
- '$keywords' => $rr['gkeywords'],
- '$keywords_label' => t('Tags:'),
- '$gender' => $rr['ggender'],
- '$gender_label' => 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']),
- '$url_label' => 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');
- $notifs = $nm->networkNotifs($show, $startrec, $perpage);
+ $header = $it["name"];
- $notif_show_lnk = array(
- 'href' => ($show ? 'notifications/network' : 'notifications/network?show=all' ),
- 'text' => ($show ? t('Show unread') : t('Show all')),
- );
+ if ($it["addr"] != "")
+ $header .= " <".$it["addr"].">";
- if(!dbm::is_result($notifs)) {
- if($show)
- $notif_show_lnk = array();
+ $header .= " (".network_to_name($it['network'], $it['url']).")";
- $notif_nocontent = t('No more network notifications.');
- }
-
- } else if (($a->argc > 1) && ($a->argv[1] == 'system')) {
-
- $notif_header = t('System Notifications');
- $notif_tpl = get_markup_template('notifications.tpl');
-
- $notifs = $nm->systemNotifs($show, $startrec, $perpage);
-
- $notif_show_lnk = array(
- 'href' => ($show ? 'notifications/system' : 'notifications/system?show=all' ),
- 'text' => ($show ? t('Show unread') : t('Show all')),
- );
-
- if(!dbm::is_result($notifs)) {
- if($show)
- $notif_show_lnk = array();
-
- $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');
-
- $notifs = $nm->personalNotifs($show, $startrec, $perpage);
-
- $notif_show_lnk = array(
- 'href' => ($show ? 'notifications/personal' : 'notifications/personal?show=all' ),
- 'text' => ($show ? t('Show unread') : t('Show all')),
- );
-
- if(!dbm::is_result($notifs)) {
- if($show)
- $notif_show_lnk = array();
-
- $notif_nocontent = t('No more personal notifications.');
- }
-
- } else if (($a->argc > 1) && ($a->argv[1] == 'home')) {
-
- $notif_header = t('Home Notifications');
- $notif_tpl = get_markup_template('notifications.tpl');
-
- $notifs = $nm->homeNotifs($show, $startrec, $perpage);
-
- $notif_show_lnk = array(
- 'href' => ($show ? 'notifications/home' : 'notifications/home?show=all' ),
- 'text' => ($show ? t('Show unread') : t('Show all')),
- );
-
- if(!dbm::is_result($notifs)) {
- if($show)
- $notif_show_lnk = array();
+ $notif_content[] = replace_macros($tpl, array(
+ '$header' => htmlentities($header),
+ '$str_notifytype' => 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' => t('Location:'),
+ '$about' => $it['about'],
+ '$lbl_about' => t('About:'),
+ '$keywords' => $it['keywords'],
+ '$lbl_keywords' => t('Tags:'),
+ '$gender' => $it['gender'],
+ '$lbl_gender' => t('Gender:'),
+ '$hidden' => array('hidden', t('Hide this contact from others'), ($it['hidden'] == 1), ''),
+ '$activity' => array('activity', t('Post a new friend activity'), $it['post_newfriend'], t('if applicable')),
+ '$url' => $it['url'],
+ '$zrl' => $it['zrl'],
+ '$lbl_url' => t('Profile URL'),
+ '$addr' => $it['addr'],
+ '$lbl_knowyou' => $lbl_knowyou,
+ '$lbl_network' => t('Network:'),
+ '$network' => network_to_name($it['network'], $it['url']),
+ '$knowyou' => $knowyou,
+ '$approve' => t('Approve'),
+ '$note' => $it['note'],
+ '$ignore' => t('Ignore'),
+ '$discard' => t('Discard'),
- $notif_nocontent = t('No more home notifications.');
+ ));
+ break;
+ }
}
- }
-
- if(count($notifs['notifications']) > 0 ) {
- // set the pager
- $a->set_pager_total($notifs['total']);
- $a->set_pager_itemspage($perpage);
+ if($notifs['total'] == 0)
+ info( t('No introductions.') . EOL);
- // add additional informations (needed for json output)
- $notifs['items_page'] = $a->pager['itemspage'];
- $notifs['page'] = $a->pager['page'];
+ // 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_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) {
- $tplname = 'tpl_item_'.$it['label'];
- $templ = get_markup_template($$tplname);
- $notif_content[] = replace_macros($templ,array(
+ // 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,array(
'$item_label' => $it['label'],
'$item_link' => $it['link'],
'$item_image' => $it['image'],
));
}
+ // It doesn't make sense to show the Show unread / Show all link visible if the user is on the
+ // "Show all" page and there are no notifications. So we will hide it.
+ if($show == 0 || intval($show) && $notifs['total'] > 0) {
+ $notif_show_lnk = array(
+ 'href' => ($show ? 'notifications/'.$notifs['ident'] : 'notifications/'.$notifs['ident'].'?show=all' ),
+ 'text' => ($show ? t('Show unread') : t('Show all')),
+ );
+ }
+
+ // Output if there aren't any notifications available
+ if($notifs['total'] == 0)
+ $notif_nocontent = sprintf( t('No more %s notifications.'), $notifs['ident']);
}
+
$o .= replace_macros($notif_tpl, array(
'$notif_header' => $notif_header,
'$tabs' => $tabs,