diff --git a/src/Content/Widget.php b/src/Content/Widget.php index b5f83a803e..e89245cd2b 100644 --- a/src/Content/Widget.php +++ b/src/Content/Widget.php @@ -121,17 +121,28 @@ class Widget } /** - * @param string $type + * Display a generic filter widget based on a list of options + * + * The options array must be the following format: + * [ + * [ + * 'ref' => {filter value}, + * 'name' => {option name} + * ], + * ... + * ] + * + * @param string $type The filter query string key * @param string $title * @param string $desc - * @param string $all - * @param string $baseUrl + * @param string $all The no filter label + * @param string $baseUrl The full page request URI * @param array $options - * @param string $selected + * @param string $selected The currently selected filter option value * @return string * @throws \Exception */ - public static function filter($type, $title, $desc, $all, $baseUrl, array $options, $selected = null) + private static function filter($type, $title, $desc, $all, $baseUrl, array $options, $selected = null) { $queryString = parse_url($baseUrl, PHP_URL_QUERY); $queryArray = []; @@ -160,6 +171,37 @@ class Widget ]); } + /** + * Return networks widget + * + * @param string $baseurl baseurl + * @param string $selected optional, default empty + * @return string + * @throws \Exception + */ + public static function contactRels($baseurl, $selected = '') + { + if (!local_user()) { + return ''; + } + + $options = [ + ['ref' => 'followers', 'name' => L10n::t('Followers')], + ['ref' => 'following', 'name' => L10n::t('Following')], + ['ref' => 'mutuals', 'name' => L10n::t('Mutual friends')], + ]; + + return self::filter( + 'rel', + L10n::t('Relationships'), + '', + L10n::t('All Contacts'), + $baseurl, + $options, + $selected + ); + } + /** * Return networks widget * diff --git a/src/Module/Contact.php b/src/Module/Contact.php index 4429573ab7..a7f0176e53 100644 --- a/src/Module/Contact.php +++ b/src/Module/Contact.php @@ -266,6 +266,7 @@ class Contact extends BaseModule $a = self::getApp(); $nets = defaults($_GET, 'nets', ''); + $rel = defaults($_GET, 'rel' , ''); if (empty($a->page['aside'])) { $a->page['aside'] = ''; @@ -321,6 +322,7 @@ class Contact extends BaseModule $findpeople_widget = ''; $follow_widget = ''; $networks_widget = ''; + $rel_widget = ''; } else { $vcard_widget = ''; $findpeople_widget = Widget::findPeople(); @@ -331,6 +333,7 @@ class Contact extends BaseModule } $networks_widget = Widget::networks($_SERVER['REQUEST_URI'], $nets); + $rel_widget = Widget::contactRels($_SERVER['REQUEST_URI'], $rel); } if ($contact['uid'] != 0) { @@ -339,7 +342,7 @@ class Contact extends BaseModule $groups_widget = null; } - $a->page['aside'] .= $vcard_widget . $findpeople_widget . $follow_widget . $groups_widget . $networks_widget; + $a->page['aside'] .= $vcard_widget . $findpeople_widget . $follow_widget . $groups_widget . $networks_widget . $rel_widget; $tpl = Renderer::getMarkupTemplate('contacts-head.tpl'); $a->page['htmlhead'] .= Renderer::replaceMacros($tpl, [ @@ -678,6 +681,7 @@ class Contact extends BaseModule $search = Strings::escapeTags(trim(defaults($_GET, 'search', ''))); $nets = Strings::escapeTags(trim(defaults($_GET, 'nets' , ''))); + $rel = Strings::escapeTags(trim(defaults($_GET, 'rel' , ''))); $tabs = [ [ @@ -747,6 +751,12 @@ class Contact extends BaseModule $sql_extra .= sprintf(" AND network = '%s' ", DBA::escape($nets)); } + switch ($rel) { + case 'followers': $sql_extra .= " AND `rel` IN (1, 3)"; break; + case 'following': $sql_extra .= " AND `rel` IN (2, 3)"; break; + case 'mutuals': $sql_extra .= " AND `rel` = 3"; break; + } + $sql_extra .= " AND NOT `deleted` "; $sql_extra2 = ((($sort_type > 0) && ($sort_type <= Model\Contact::FRIEND)) ? sprintf(" AND `rel` = %d ", intval($sort_type)) : ''); @@ -777,6 +787,13 @@ class Contact extends BaseModule } } + switch ($rel) { + case 'followers': $header = L10n::t('Followers'); break; + case 'following': $header = L10n::t('Following'); break; + case 'mutuals': $header = L10n::t('Mutual friends'); break; + default: $header = L10n::t('Contacts'); + } + switch ($type) { case 'blocked': $header .= ' - ' . L10n::t('Blocked'); break; case 'hidden': $header .= ' - ' . L10n::t('Hidden'); break;