]> git.mxchange.org Git - friendica.git/commitdiff
Add Module\Profile\Common class
authorHypolite Petovan <hypolite@mrpetovan.com>
Wed, 5 Aug 2020 03:03:54 +0000 (23:03 -0400)
committerHypolite Petovan <hypolite@mrpetovan.com>
Wed, 5 Aug 2020 03:03:54 +0000 (23:03 -0400)
- Add Common tab in profile contacts templates
- Add routing to new module

src/Module/Profile/Common.php [new file with mode: 0644]
src/Module/Profile/Contacts.php
static/routes.config.php
view/templates/profile/contacts.tpl
view/theme/frio/templates/profile/contacts.tpl

diff --git a/src/Module/Profile/Common.php b/src/Module/Profile/Common.php
new file mode 100644 (file)
index 0000000..0b08d32
--- /dev/null
@@ -0,0 +1,112 @@
+<?php
+/**
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Friendica\Module\Profile;
+
+use Friendica\Content\Nav;
+use Friendica\Content\Pager;
+use Friendica\Core\Protocol;
+use Friendica\Core\Renderer;
+use Friendica\Core\Session;
+use Friendica\Module;
+use Friendica\DI;
+use Friendica\Model\Contact;
+use Friendica\Model\Profile;
+use Friendica\Module\BaseProfile;
+use Friendica\Network\HTTPException;
+
+class Common extends BaseProfile
+{
+       public static function content(array $parameters = [])
+       {
+               if (DI::config()->get('system', 'block_public') && !Session::isAuthenticated()) {
+                       throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.'));
+               }
+
+               $a = DI::app();
+
+               Nav::setSelected('home');
+
+               $nickname = $parameters['nickname'];
+
+               Profile::load($a, $nickname);
+
+               if (empty($a->profile)) {
+                       throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.'));
+               }
+
+               $o = self::getTabsHTML($a, 'contacts', false, $nickname);
+
+               if (!empty($a->profile['hide-friends'])) {
+                       throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.'));
+               }
+
+               $displayCommonTab = Session::isAuthenticated() && $a->profile['uid'] != local_user();
+
+               if (!$displayCommonTab) {
+                       $a->redirect('profile/' . $nickname . '/contacts');
+               };
+
+               $sourceId = Contact::getIdForURL(Profile::getMyURL());
+               $targetId = Contact::getPublicIdByUserId($a->profile['uid']);
+
+               $condition = [
+                       'blocked' => false,
+                       'deleted' => false,
+                       'network' => [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, Protocol::FEED],
+               ];
+
+               $total = Contact\Relation::countCommon($sourceId, $targetId, $condition);
+
+               $pager = new Pager(DI::l10n(), DI::args()->getQueryString());
+
+               $commonFollows = Contact\Relation::listCommon($sourceId, $targetId, $condition, $pager->getItemsPerPage(), $pager->getStart());
+
+               $contacts = array_map([Module\Contact::class, 'getContactTemplateVars'], $commonFollows);
+
+               $title = DI::l10n()->tt('Common contact (%s)', 'Common contacts (%s)', $total);
+               $desc = DI::l10n()->t(
+                       'Both <strong>%s</strong> and yourself have publicly interacted with these contacts (follow, comment or likes on public posts).',
+                       htmlentities($a->profile['name'], ENT_COMPAT, 'UTF-8')
+               );
+
+               $tpl = Renderer::getMarkupTemplate('profile/contacts.tpl');
+               $o .= Renderer::replaceMacros($tpl, [
+                       '$title'    => $title,
+                       '$desc'     => $desc,
+                       '$nickname' => $nickname,
+                       '$type'     => 'common',
+                       '$displayCommonTab' => $displayCommonTab,
+
+                       '$all_label'       => DI::l10n()->t('All contacts'),
+                       '$followers_label' => DI::l10n()->t('Followers'),
+                       '$following_label' => DI::l10n()->t('Following'),
+                       '$mutuals_label'   => DI::l10n()->t('Mutual friends'),
+                       '$common_label'    => DI::l10n()->t('Common'),
+                       '$noresult_label'  => DI::l10n()->t('No common contacts.'),
+
+                       '$contacts' => $contacts,
+                       '$paginate' => $pager->renderFull($total),
+               ]);
+
+               return $o;
+       }
+}
index b1d8fa6c2fa812c674771d5b425d2350f5a2297d..938dbd3d05ec943d2bf7a28679ae3d2d0a38ae07 100644 (file)
@@ -115,11 +115,13 @@ class Contacts extends Module\BaseProfile
                        '$desc'     => $desc,
                        '$nickname' => $nickname,
                        '$type'     => $type,
+                       '$displayCommonTab' => Session::isAuthenticated() && $a->profile['uid'] != local_user(),
 
                        '$all_label'       => DI::l10n()->t('All contacts'),
                        '$followers_label' => DI::l10n()->t('Followers'),
                        '$following_label' => DI::l10n()->t('Following'),
                        '$mutuals_label'   => DI::l10n()->t('Mutual friends'),
+                       '$common_label'    => DI::l10n()->t('Common'),
                        '$noresult_label'  => DI::l10n()->t('No contacts.'),
 
                        '$contacts' => $contacts,
index ddfabd77801dc3a813b91da3a6b8432cd178b3cf..15eec298e932f77d9147393168ade6f985418a85 100644 (file)
@@ -252,6 +252,7 @@ return [
        '/profile' => [
                '/{nickname}'                                         => [Module\Profile\Index::class,    [R::GET]],
                '/{nickname}/profile'                                 => [Module\Profile\Profile::class,  [R::GET]],
+               '/{nickname}/contacts/common'                         => [Module\Profile\Common::class,   [R::GET]],
                '/{nickname}/contacts[/{type}]'                       => [Module\Profile\Contacts::class, [R::GET]],
                '/{nickname}/status[/{category}[/{date1}[/{date2}]]]' => [Module\Profile\Status::class,   [R::GET]],
        ],
index 90ef867c7754092442bf4636454d09e723431354..4a1379f17b67608b88779e60eb70eaea1b14a19d 100644 (file)
@@ -10,6 +10,9 @@
                <li role="menuitem"><a href="profile/{{$nickname}}/contacts/followers" class="tab button{{if $type == 'followers'}} active{{/if}}">{{$followers_label}}</a></li>
                <li role="menuitem"><a href="profile/{{$nickname}}/contacts/following" class="tab button{{if $type == 'following'}} active{{/if}}">{{$following_label}}</a></li>
                <li role="menuitem"><a href="profile/{{$nickname}}/contacts/mutuals" class="tab button{{if $type == 'mutuals'}} active{{/if}}">{{$mutuals_label}}</a></li>
+       {{if $displayCommonTab}}
+               <li role="menuitem"><a href="profile/{{$nickname}}/contacts/common" class="tab button{{if $type == 'common'}} active{{/if}}{{if !$common_count}} disabled{{/if}}">{{$common_label}}</a></li>
+       {{/if}}
        </ul>
 {{if $contacts}}
        <div id="viewcontact_wrapper-{{$id}}">
index 40c0fb6e33315354edc2b7c16e0e655ab6a8c9cb..000b9767743f722d6f5b8a84a01eeea6a5f20579 100644 (file)
                <li role="presentation"{{if $type == 'mutuals'}} class="active"{{/if}}>
                        <a href="profile/{{$nickname}}/contacts/mutuals">{{$mutuals_label}}</a>
                </li>
+       {{if $displayCommonTab}}
+               <li role="presentation"{{if $type == 'common'}} class="active"{{/if}}>
+                       <a href="profile/{{$nickname}}/contacts/common" class="tab button">{{$common_label}}</a>
+               </li>
+       {{/if}}
        </ul>
 {{if $contacts}}
        <ul id="viewcontact_wrapper{{if $id}}-{{$id}}{{/if}}" class="viewcontact_wrapper media-list">