3 * @copyright Copyright (C) 2020, Friendica
5 * @license GNU AGPL version 3 or any later version
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU Affero General Public License as
9 * published by the Free Software Foundation, either version 3 of the
10 * License, or (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU Affero General Public License for more details.
17 * You should have received a copy of the GNU Affero General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22 namespace Friendica\Module;
24 use Friendica\BaseModule;
25 use Friendica\Content\ContactSelector;
26 use Friendica\Content\Pager;
27 use Friendica\Core\Renderer;
30 use Friendica\Network\HTTPException;
31 use Friendica\Util\Proxy as ProxyUtils;
34 * This module shows all public friends of the selected contact
36 class AllFriends extends BaseModule
38 public static function content(array $parameters = [])
43 throw new HTTPException\ForbiddenException();
48 // @TODO: Replace with parameter from router
50 $cid = intval($app->argv[1]);
54 throw new HTTPException\BadRequestException(DI::l10n()->t('Invalid contact.'));
57 $uid = $app->user['uid'];
59 $contact = Model\Contact::getContactForUser($cid, local_user(), ['name', 'url', 'photo', 'uid', 'id']);
61 if (empty($contact)) {
62 throw new HTTPException\BadRequestException(DI::l10n()->t('Invalid contact.'));
65 DI::page()['aside'] = "";
66 Model\Profile::load($app, "", Model\Contact::getByURL($contact["url"], 0, [], false));
68 $total = Model\GContact::countAllFriends(local_user(), $cid);
70 $pager = new Pager(DI::l10n(), DI::args()->getQueryString());
72 $friends = Model\GContact::allFriends(local_user(), $cid, $pager->getStart(), $pager->getItemsPerPage());
73 if (empty($friends)) {
74 return DI::l10n()->t('No friends to display.');
80 foreach ($friends as $friend) {
81 //get further details of the contact
82 $contactDetails = array_merge($friend, Model\Contact::getByURLForUser($friend['url'], $uid, [], false));
85 // $friend[cid] is only available for common contacts. So if the contact is a common one, use contact_photo_menu to generate the photoMenu
86 // If the contact is not common to the user, Connect/Follow' will be added to the photo menu
88 $friend['id'] = $friend['cid'];
89 $photoMenu = Model\Contact::photoMenu($friend);
91 $connlnk = DI::baseUrl()->get() . '/follow/?url=' . $friend['url'];
93 'profile' => [DI::l10n()->t('View Profile'), Model\Contact::magicLinkbyId($friend['id'], $friend['url'])],
94 'follow' => [DI::l10n()->t('Connect/Follow'), $connlnk]
99 'url' => Model\Contact::magicLinkbyId($friend['id'], $friend['url']),
100 'itemurl' => ($contactDetails['addr'] ?? '') ?: $friend['url'],
101 'name' => $contactDetails['name'],
102 'thumb' => ProxyUtils::proxifyUrl($contactDetails['thumb'], false, ProxyUtils::SIZE_THUMB),
103 'img_hover' => $contactDetails['name'],
104 'details' => $contactDetails['location'],
105 'tags' => $contactDetails['keywords'],
106 'about' => $contactDetails['about'],
107 'account_type' => Model\Contact::getAccountType($contactDetails),
108 'network' => ContactSelector::networkToName($contactDetails['network'], $contactDetails['url']),
109 'photoMenu' => $photoMenu,
110 'conntxt' => DI::l10n()->t('Connect'),
111 'connlnk' => $connlnk,
117 $tab_str = Contact::getTabsHTML($app, $contact, 4);
119 $tpl = Renderer::getMarkupTemplate('viewcontact_template.tpl');
120 return Renderer::replaceMacros($tpl, [
121 '$tab_str' => $tab_str,
122 '$contacts' => $entries,
123 '$paginate' => $pager->renderFull($total),