From f2d917114f949b3f76c04f99247092a16b1e3e9e Mon Sep 17 00:00:00 2001
From: Hypolite Petovan <hypolite@mrpetovan.com>
Date: Sun, 26 Jan 2020 09:49:11 -0500
Subject: [PATCH] Move Model\Profile::getTabs to new Module\BaseProfile class

---
 mod/cal.php                     |   3 +-
 mod/events.php                  |   4 +-
 mod/notes.php                   |   4 +-
 mod/photos.php                  |   3 +-
 mod/videos.php                  |   3 +-
 src/Model/Profile.php           | 115 ----------------------------
 src/Module/BaseProfile.php      | 129 ++++++++++++++++++++++++++++++++
 src/Module/Profile/Contacts.php |   7 +-
 src/Module/Profile/Index.php    |   6 +-
 src/Module/Profile/Status.php   |   6 +-
 10 files changed, 148 insertions(+), 132 deletions(-)
 create mode 100644 src/Module/BaseProfile.php

diff --git a/mod/cal.php b/mod/cal.php
index e6570018b..9e32b87d6 100644
--- a/mod/cal.php
+++ b/mod/cal.php
@@ -19,6 +19,7 @@ use Friendica\Model\Contact;
 use Friendica\Model\Event;
 use Friendica\Model\Item;
 use Friendica\Model\Profile;
+use Friendica\Module\BaseProfile;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Temporal;
 
@@ -121,7 +122,7 @@ function cal_content(App $a)
 	$sql_extra = " AND `event`.`cid` = 0 " . $sql_perms;
 
 	// get the tab navigation bar
-	$tabs = Profile::getTabs($a, 'cal', false, $a->data['user']['nickname']);
+	$tabs = BaseProfile::getTabsHTML($a, 'cal', false, $a->data['user']['nickname']);
 
 	// The view mode part is similiar to /mod/events.php
 	if ($mode == 'view') {
diff --git a/mod/events.php b/mod/events.php
index 5601c4449..ffe67f67f 100644
--- a/mod/events.php
+++ b/mod/events.php
@@ -16,8 +16,8 @@ use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Model\Event;
 use Friendica\Model\Item;
-use Friendica\Model\Profile;
 use Friendica\Model\User;
+use Friendica\Module\BaseProfile;
 use Friendica\Module\Security\Login;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Strings;
@@ -251,7 +251,7 @@ function events_content(App $a)
 	$tabs = '';
 	// tabs
 	if ($a->theme_events_in_profile) {
-		$tabs = Profile::getTabs($a, 'events', true);
+		$tabs = BaseProfile::getTabsHTML($a, 'events', true);
 	}
 
 	$mode = 'view';
diff --git a/mod/notes.php b/mod/notes.php
index 536029338..38a72a741 100644
--- a/mod/notes.php
+++ b/mod/notes.php
@@ -9,7 +9,7 @@ use Friendica\Content\Pager;
 use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Model\Item;
-use Friendica\Model\Profile;
+use Friendica\Module\BaseProfile;
 
 function notes_init(App $a)
 {
@@ -28,7 +28,7 @@ function notes_content(App $a, $update = false)
 		return;
 	}
 
-	$o = Profile::getTabs($a, 'notes', true);
+	$o = BaseProfile::getTabsHTML($a, 'notes', true);
 
 	if (!$update) {
 		$o .= '<h3>' . DI::l10n()->t('Personal Notes') . '</h3>';
diff --git a/mod/photos.php b/mod/photos.php
index 5b8d22b65..0733bbc96 100644
--- a/mod/photos.php
+++ b/mod/photos.php
@@ -21,6 +21,7 @@ use Friendica\Model\Item;
 use Friendica\Model\Photo;
 use Friendica\Model\Profile;
 use Friendica\Model\User;
+use Friendica\Module\BaseProfile;
 use Friendica\Network\Probe;
 use Friendica\Object\Image;
 use Friendica\Protocol\Activity;
@@ -914,7 +915,7 @@ function photos_content(App $a)
 
 	// tabs
 	$is_owner = (local_user() && (local_user() == $owner_uid));
-	$o .= Profile::getTabs($a, 'photos', $is_owner, $a->data['user']['nickname']);
+	$o .= BaseProfile::getTabsHTML($a, 'photos', $is_owner, $a->data['user']['nickname']);
 
 	// Display upload form
 	if ($datatype === 'upload') {
diff --git a/mod/videos.php b/mod/videos.php
index a7181d4e7..36ddef681 100644
--- a/mod/videos.php
+++ b/mod/videos.php
@@ -15,6 +15,7 @@ use Friendica\Model\Contact;
 use Friendica\Model\Item;
 use Friendica\Model\Profile;
 use Friendica\Model\User;
+use Friendica\Module\BaseProfile;
 use Friendica\Util\Security;
 
 function videos_init(App $a)
@@ -171,7 +172,7 @@ function videos_content(App $a)
 
 	// tabs
 	$_is_owner = (local_user() && (local_user() == $owner_uid));
-	$o .= Profile::getTabs($a, 'videos', $_is_owner, $a->data['user']['nickname']);
+	$o .= BaseProfile::getTabsHTML($a, 'videos', $_is_owner, $a->data['user']['nickname']);
 
 	//
 	// dispatch request
diff --git a/src/Model/Profile.php b/src/Model/Profile.php
index 86fb1a94c..18b09225e 100644
--- a/src/Model/Profile.php
+++ b/src/Model/Profile.php
@@ -675,121 +675,6 @@ class Profile
 		]);
 	}
 
-    /**
-     * @param App    $a
-     * @param string $current
-     * @param bool   $is_owner
-     * @param string $nickname
-     * @return string
-     * @throws \Friendica\Network\HTTPException\InternalServerErrorException
-     */
-	public static function getTabs(App $a, string $current, bool $is_owner, string $nickname = null)
-	{
-		if (is_null($nickname)) {
-			$nickname = $a->user['nickname'];
-		}
-
-		$baseProfileUrl = DI::baseUrl() . '/profile/' . $nickname;
-
-		$tabs = [
-			[
-				'label' => DI::l10n()->t('Profile'),
-				'url'   => $baseProfileUrl,
-				'sel'   => $current == 'profile' ? 'active' : '',
-				'title' => DI::l10n()->t('Profile Details'),
-				'id'    => 'profile-tab',
-				'accesskey' => 'r',
-			],
-			[
-				'label' => DI::l10n()->t('Status'),
-				'url'   => $baseProfileUrl . '/status',
-				'sel'   => $current == 'status' ? 'active' : '',
-				'title' => DI::l10n()->t('Status Messages and Posts'),
-				'id'    => 'status-tab',
-				'accesskey' => 'm',
-			],
-			[
-				'label' => DI::l10n()->t('Photos'),
-				'url'   => DI::baseUrl() . '/photos/' . $nickname,
-				'sel'   => $current == 'photos' ? 'active' : '',
-				'title' => DI::l10n()->t('Photo Albums'),
-				'id'    => 'photo-tab',
-				'accesskey' => 'h',
-			],
-			[
-				'label' => DI::l10n()->t('Videos'),
-				'url'   => DI::baseUrl() . '/videos/' . $nickname,
-				'sel'   => $current == 'videos' ? 'active' : '',
-				'title' => DI::l10n()->t('Videos'),
-				'id'    => 'video-tab',
-				'accesskey' => 'v',
-			],
-		];
-
-		// the calendar link for the full featured events calendar
-		if ($is_owner && $a->theme_events_in_profile) {
-			$tabs[] = [
-				'label' => DI::l10n()->t('Events'),
-				'url'   => DI::baseUrl() . '/events',
-				'sel'   => $current == 'events' ? 'active' : '',
-				'title' => DI::l10n()->t('Events and Calendar'),
-				'id'    => 'events-tab',
-				'accesskey' => 'e',
-			];
-			// if the user is not the owner of the calendar we only show a calendar
-			// with the public events of the calendar owner
-		} elseif (!$is_owner) {
-			$tabs[] = [
-				'label' => DI::l10n()->t('Events'),
-				'url'   => DI::baseUrl() . '/cal/' . $nickname,
-				'sel'   => $current == 'cal' ? 'active' : '',
-				'title' => DI::l10n()->t('Events and Calendar'),
-				'id'    => 'events-tab',
-				'accesskey' => 'e',
-			];
-		}
-
-		if ($is_owner) {
-			$tabs[] = [
-				'label' => DI::l10n()->t('Personal Notes'),
-				'url'   => DI::baseUrl() . '/notes',
-				'sel'   => $current == 'notes' ? 'active' : '',
-				'title' => DI::l10n()->t('Only You Can See This'),
-				'id'    => 'notes-tab',
-				'accesskey' => 't',
-			];
-		}
-
-		if (empty($a->profile['hide-friends'])) {
-			$tabs[] = [
-				'label' => DI::l10n()->t('Contacts'),
-				'url'   => $baseProfileUrl . '/contacts',
-				'sel'   => $current == 'contacts' ? 'active' : '',
-				'title' => DI::l10n()->t('Contacts'),
-				'id'    => 'viewcontacts-tab',
-				'accesskey' => 'k',
-			];
-		}
-
-		if (!empty($_SESSION['new_member']) && $is_owner) {
-			$tabs[] = [
-				'label' => DI::l10n()->t('Tips for New Members'),
-				'url'   => DI::baseUrl() . '/newmember',
-				'sel'   => false,
-				'title' => DI::l10n()->t('Tips for New Members'),
-				'id'    => 'newmember-tab',
-			];
-		}
-
-		$arr = ['is_owner' => $is_owner, 'nickname' => $nickname, 'tab' => $current, 'tabs' => $tabs];
-
-		Hook::callAll('profile_tabs', $arr);
-
-		$tpl = Renderer::getMarkupTemplate('common_tabs.tpl');
-
-		return Renderer::replaceMacros($tpl, ['$tabs' => $arr['tabs']]);
-	}
-
 	/**
 	 * Retrieves the my_url session variable
 	 *
diff --git a/src/Module/BaseProfile.php b/src/Module/BaseProfile.php
new file mode 100644
index 000000000..c6ef1c354
--- /dev/null
+++ b/src/Module/BaseProfile.php
@@ -0,0 +1,129 @@
+<?php
+
+namespace Friendica\Module;
+
+use Friendica\App;
+use Friendica\BaseModule;
+use Friendica\Core\Hook;
+use Friendica\Core\Renderer;
+use Friendica\DI;
+
+class BaseProfile extends BaseModule
+{
+	/**
+	 * Returns the HTML for the profile pages tabs
+	 *
+	 * @param App    $a
+	 * @param string $current
+	 * @param bool   $is_owner
+	 * @param string $nickname
+	 * @return string
+	 * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+	 */
+	public static function getTabsHTML(App $a, string $current, bool $is_owner, string $nickname = null)
+	{
+		if (is_null($nickname)) {
+			$nickname = $a->user['nickname'];
+		}
+
+		$baseProfileUrl = DI::baseUrl() . '/profile/' . $nickname;
+
+		$tabs = [
+			[
+				'label' => DI::l10n()->t('Profile'),
+				'url'   => $baseProfileUrl,
+				'sel'   => $current == 'profile' ? 'active' : '',
+				'title' => DI::l10n()->t('Profile Details'),
+				'id'    => 'profile-tab',
+				'accesskey' => 'r',
+			],
+			[
+				'label' => DI::l10n()->t('Status'),
+				'url'   => $baseProfileUrl . '/status',
+				'sel'   => $current == 'status' ? 'active' : '',
+				'title' => DI::l10n()->t('Status Messages and Posts'),
+				'id'    => 'status-tab',
+				'accesskey' => 'm',
+			],
+			[
+				'label' => DI::l10n()->t('Photos'),
+				'url'   => DI::baseUrl() . '/photos/' . $nickname,
+				'sel'   => $current == 'photos' ? 'active' : '',
+				'title' => DI::l10n()->t('Photo Albums'),
+				'id'    => 'photo-tab',
+				'accesskey' => 'h',
+			],
+			[
+				'label' => DI::l10n()->t('Videos'),
+				'url'   => DI::baseUrl() . '/videos/' . $nickname,
+				'sel'   => $current == 'videos' ? 'active' : '',
+				'title' => DI::l10n()->t('Videos'),
+				'id'    => 'video-tab',
+				'accesskey' => 'v',
+			],
+		];
+
+		// the calendar link for the full featured events calendar
+		if ($is_owner && $a->theme_events_in_profile) {
+			$tabs[] = [
+				'label' => DI::l10n()->t('Events'),
+				'url'   => DI::baseUrl() . '/events',
+				'sel'   => $current == 'events' ? 'active' : '',
+				'title' => DI::l10n()->t('Events and Calendar'),
+				'id'    => 'events-tab',
+				'accesskey' => 'e',
+			];
+			// if the user is not the owner of the calendar we only show a calendar
+			// with the public events of the calendar owner
+		} elseif (!$is_owner) {
+			$tabs[] = [
+				'label' => DI::l10n()->t('Events'),
+				'url'   => DI::baseUrl() . '/cal/' . $nickname,
+				'sel'   => $current == 'cal' ? 'active' : '',
+				'title' => DI::l10n()->t('Events and Calendar'),
+				'id'    => 'events-tab',
+				'accesskey' => 'e',
+			];
+		}
+
+		if ($is_owner) {
+			$tabs[] = [
+				'label' => DI::l10n()->t('Personal Notes'),
+				'url'   => DI::baseUrl() . '/notes',
+				'sel'   => $current == 'notes' ? 'active' : '',
+				'title' => DI::l10n()->t('Only You Can See This'),
+				'id'    => 'notes-tab',
+				'accesskey' => 't',
+			];
+		}
+
+		if (empty($a->profile['hide-friends'])) {
+			$tabs[] = [
+				'label' => DI::l10n()->t('Contacts'),
+				'url'   => $baseProfileUrl . '/contacts',
+				'sel'   => $current == 'contacts' ? 'active' : '',
+				'title' => DI::l10n()->t('Contacts'),
+				'id'    => 'viewcontacts-tab',
+				'accesskey' => 'k',
+			];
+		}
+
+		if (DI::session()->get('new_member') && $is_owner) {
+			$tabs[] = [
+				'label' => DI::l10n()->t('Tips for New Members'),
+				'url'   => DI::baseUrl() . '/newmember',
+				'sel'   => false,
+				'title' => DI::l10n()->t('Tips for New Members'),
+				'id'    => 'newmember-tab',
+			];
+		}
+
+		$arr = ['is_owner' => $is_owner, 'nickname' => $nickname, 'tab' => $current, 'tabs' => $tabs];
+
+		Hook::callAll('profile_tabs', $arr);
+
+		$tpl = Renderer::getMarkupTemplate('common_tabs.tpl');
+
+		return Renderer::replaceMacros($tpl, ['$tabs' => $arr['tabs']]);
+	}
+}
diff --git a/src/Module/Profile/Contacts.php b/src/Module/Profile/Contacts.php
index 1a21df0ec..122681c17 100644
--- a/src/Module/Profile/Contacts.php
+++ b/src/Module/Profile/Contacts.php
@@ -2,7 +2,6 @@
 
 namespace Friendica\Module\Profile;
 
-use Friendica\BaseModule;
 use Friendica\Content\ContactSelector;
 use Friendica\Content\Nav;
 use Friendica\Content\Pager;
@@ -13,9 +12,10 @@ use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Model\Contact;
 use Friendica\Model\Profile;
+use Friendica\Module\BaseProfile;
 use Friendica\Util\Proxy as ProxyUtils;
 
-class Contacts extends BaseModule
+class Contacts extends BaseProfile
 {
 	public static function content(array $parameters = [])
 	{
@@ -42,8 +42,7 @@ class Contacts extends BaseModule
 
 		$is_owner = $a->profile['uid'] == local_user();
 
-		// tabs
-		$o = Profile::getTabs($a, 'contacts', $is_owner, $nickname);
+		$o = self::getTabsHTML($a, 'contacts', $is_owner, $nickname);
 
 		if (!count($a->profile) || $a->profile['hide-friends']) {
 			notice(DI::l10n()->t('Permission denied.') . EOL);
diff --git a/src/Module/Profile/Index.php b/src/Module/Profile/Index.php
index 521a682dc..176bc84e2 100644
--- a/src/Module/Profile/Index.php
+++ b/src/Module/Profile/Index.php
@@ -2,7 +2,6 @@
 
 namespace Friendica\Module\Profile;
 
-use Friendica\BaseModule;
 use Friendica\Content\Feature;
 use Friendica\Content\ForumManager;
 use Friendica\Content\Nav;
@@ -19,13 +18,14 @@ use Friendica\Model\Contact;
 use Friendica\Model\Profile;
 use Friendica\Model\Term;
 use Friendica\Model\User;
+use Friendica\Module\BaseProfile;
 use Friendica\Module\Security\Login;
 use Friendica\Network\HTTPException;
 use Friendica\Protocol\ActivityPub;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Temporal;
 
-class Index extends BaseModule
+class Index extends BaseProfile
 {
 	public static function rawContent(array $parameters = [])
 	{
@@ -82,7 +82,7 @@ class Index extends BaseModule
 		Nav::setSelected('home');
 
 		$is_owner = local_user() == $a->profile['uid'];
-		$o = Profile::getTabs($a, 'profile', $is_owner, $a->profile['nickname']);
+		$o = self::getTabsHTML($a, 'profile', $is_owner, $a->profile['nickname']);
 
 		if (!empty($a->profile['hidewall']) && !$is_owner && !$remote_contact_id) {
 			notice(DI::l10n()->t('Access to this profile has been restricted.'));
diff --git a/src/Module/Profile/Status.php b/src/Module/Profile/Status.php
index 0047f27ed..5e1ec2538 100644
--- a/src/Module/Profile/Status.php
+++ b/src/Module/Profile/Status.php
@@ -2,7 +2,6 @@
 
 namespace Friendica\Module\Profile;
 
-use Friendica\BaseModule;
 use Friendica\Content\Nav;
 use Friendica\Content\Pager;
 use Friendica\Content\Widget;
@@ -13,13 +12,14 @@ use Friendica\DI;
 use Friendica\Model\Item;
 use Friendica\Model\Profile as ProfileModel;
 use Friendica\Model\User;
+use Friendica\Module\BaseProfile;
 use Friendica\Module\Security\Login;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Security;
 use Friendica\Util\Strings;
 use Friendica\Util\XML;
 
-class Status extends BaseModule
+class Status extends BaseProfile
 {
 	public static function content(array $parameters = [])
 	{
@@ -81,7 +81,7 @@ class Status extends BaseModule
 			return '';
 		}
 
-		$o .= ProfileModel::getTabs($a, 'status', $is_owner, $a->profile['nickname']);
+		$o .= self::getTabsHTML($a, 'status', $is_owner, $a->profile['nickname']);
 
 		$o .= Widget::commonFriendsVisitor($a->profile['uid']);