+
+/**
+ * @brief Returns posts from a given gcontact
+ *
+ * @param App $a argv application class
+ * @param int $gcontact_id Global contact
+ *
+ * @return string posts in HTML
+ */
+function posts_from_gcontact($a, $gcontact_id) {
+
+ require_once('include/conversation.php');
+
+ // There are no posts with "uid = 0" with connector networks
+ // This speeds up the query a lot
+ $r = q("SELECT `network` FROM `gcontact` WHERE `id` = %d", dbesc($gcontact_id));
+ if (in_array($r[0]["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS, "")))
+ $sql = "(`item`.`uid` = 0 OR (`item`.`uid` = %d AND `item`.`private`))";
+ else
+ $sql = "`item`.`uid` = %d";
+
+ if(get_config('system', 'old_pager')) {
+ $r = q("SELECT COUNT(*) AS `total` FROM `item`
+ WHERE `gcontact-id` = %d and $sql",
+ intval($gcontact_id),
+ intval(local_user()));
+
+ $a->set_pager_total($r[0]['total']);
+ }
+
+ $r = q("SELECT `item`.`uri`, `item`.*, `item`.`id` AS `item_id`,
+ `author-name` AS `name`, `owner-avatar` AS `photo`,
+ `owner-link` AS `url`, `owner-avatar` AS `thumb`
+ FROM `item` FORCE INDEX (`gcontactid_uid_created`)
+ WHERE `gcontact-id` = %d AND $sql AND
+ NOT `deleted` AND NOT `moderated` AND `visible`
+ ORDER BY `item`.`created` DESC LIMIT %d, %d",
+ intval($gcontact_id),
+ intval(local_user()),
+ intval($a->pager['start']),
+ intval($a->pager['itemspage'])
+ );
+
+ $o = conversation($a,$r,'community',false);
+
+ if(!get_config('system', 'old_pager')) {
+ $o .= alt_pager($a,count($r));
+ } else {
+ $o .= paginate($a);
+ }
+
+ return $o;
+}
+
+/**
+ * @brief Returns posts from a given contact
+ *
+ * @param App $a argv application class
+ * @param int $contact_id contact
+ *
+ * @return string posts in HTML
+ */
+function posts_from_contact($a, $contact_id) {
+
+ require_once('include/conversation.php');
+
+ $r = q("SELECT `url` FROM `contact` WHERE `id` = %d", intval($contact_id));
+ if (!$r)
+ return false;
+
+ $contact = $r[0];
+
+ if(get_config('system', 'old_pager')) {
+ $r = q("SELECT COUNT(*) AS `total` FROM `item`
+ WHERE `item`.`uid` = %d AND `author-link` IN ('%s', '%s')",
+ intval(local_user()),
+ dbesc(str_replace("https://", "http://", $contact["url"])),
+ dbesc(str_replace("http://", "https://", $contact["url"])));
+
+ $a->set_pager_total($r[0]['total']);
+ }
+
+ $r = q("SELECT `item`.`uri`, `item`.*, `item`.`id` AS `item_id`,
+ `author-name` AS `name`, `owner-avatar` AS `photo`,
+ `owner-link` AS `url`, `owner-avatar` AS `thumb`
+ FROM `item` FORCE INDEX (`uid_contactid_id`)
+ WHERE `item`.`uid` = %d AND `contact-id` = %d
+ AND `author-link` IN ('%s', '%s')
+ AND NOT `deleted` AND NOT `moderated` AND `visible`
+ ORDER BY `item`.`id` DESC LIMIT %d, %d",
+ intval(local_user()),
+ intval($contact_id),
+ dbesc(str_replace("https://", "http://", $contact["url"])),
+ dbesc(str_replace("http://", "https://", $contact["url"])),
+ intval($a->pager['start']),
+ intval($a->pager['itemspage'])
+ );
+
+ $o .= conversation($a,$r,'community',false);
+
+ if(!get_config('system', 'old_pager'))
+ $o .= alt_pager($a,count($r));
+ else
+ $o .= paginate($a);
+
+ return $o;
+}
+
+/**
+ * @brief Returns a formatted location string from the given profile array
+ *
+ * @param array $profile Profile array (Generated from the "profile" table)
+ *
+ * @return string Location string
+ */
+function formatted_location($profile) {
+ $location = '';
+
+ if($profile['locality'])
+ $location .= $profile['locality'];
+
+ if($profile['region'] AND ($profile['locality'] != $profile['region'])) {
+ if($location)
+ $location .= ', ';
+
+ $location .= $profile['region'];
+ }
+
+ if($profile['country-name']) {
+ if($location)
+ $location .= ', ';
+
+ $location .= $profile['country-name'];
+ }
+
+ return $location;
+}
+
+/**
+ * @brief Returns the account type name
+ *
+ * The function can be called with either the user or the contact array
+ *
+ * @param array $contact contact or user array
+ */
+function account_type($contact) {
+
+ // There are several fields that indicate that the contact or user is a forum
+ // "page-flags" is a field in the user table,
+ // "forum" and "prv" are used in the contact table. They stand for PAGE_COMMUNITY and PAGE_PRVGROUP.
+ // "community" is used in the gcontact table and is true if the contact is PAGE_COMMUNITY or PAGE_PRVGROUP.
+ if((isset($contact['page-flags']) && (intval($contact['page-flags']) == PAGE_COMMUNITY))
+ || (isset($contact['page-flags']) && (intval($contact['page-flags']) == PAGE_PRVGROUP))
+ || (isset($contact['forum']) && intval($contact['forum']))
+ || (isset($contact['prv']) && intval($contact['prv']))
+ || (isset($contact['community']) && intval($contact['community'])))
+ $type = ACCOUNT_TYPE_COMMUNITY;
+ else
+ $type = ACCOUNT_TYPE_PERSON;
+
+ // The "contact-type" (contact table) and "account-type" (user table) are more general then the chaos from above.
+ if (isset($contact["contact-type"]))
+ $type = $contact["contact-type"];
+ if (isset($contact["account-type"]))
+ $type = $contact["account-type"];
+
+ switch($type) {
+ case ACCOUNT_TYPE_ORGANISATION:
+ $account_type = t("Organisation");
+ break;
+ case ACCOUNT_TYPE_NEWS:
+ $account_type = t('News');
+ break;
+ case ACCOUNT_TYPE_COMMUNITY:
+ $account_type = t("Forum");
+ break;
+ default:
+ $account_type = "";
+ break;
+ }
+
+ return $account_type;
+}
+?>