From 07f7585e40fdce7274dc1d1ebb9941d9f7dbbc6e Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 18 Dec 2022 22:49:18 -0500 Subject: [PATCH] Remove DI dependency in Profile\Profile module --- src/Module/Profile/Profile.php | 177 +++++++++++++++++++-------------- 1 file changed, 103 insertions(+), 74 deletions(-) diff --git a/src/Module/Profile/Profile.php b/src/Module/Profile/Profile.php index 2c680d446..bed5ffce7 100644 --- a/src/Module/Profile/Profile.php +++ b/src/Module/Profile/Profile.php @@ -21,35 +21,68 @@ namespace Friendica\Module\Profile; +use Friendica\App; use Friendica\Content\Feature; use Friendica\Content\ForumManager; use Friendica\Content\Nav; use Friendica\Content\Text\BBCode; use Friendica\Content\Text\HTML; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Hook; +use Friendica\Core\L10n; use Friendica\Core\Protocol; use Friendica\Core\Renderer; +use Friendica\Core\Session\Capability\IHandleUserSessions; use Friendica\Core\System; +use Friendica\Database\Database; use Friendica\Database\DBA; -use Friendica\DI; use Friendica\Model\Contact; use Friendica\Model\Profile as ProfileModel; use Friendica\Model\Tag; use Friendica\Model\User; use Friendica\Module\BaseProfile; +use Friendica\Module\Response; use Friendica\Module\Security\Login; use Friendica\Network\HTTPException; +use Friendica\Profile\ProfileField\Repository\ProfileField; use Friendica\Protocol\ActivityPub; use Friendica\Util\DateTimeFormat; +use Friendica\Util\Profiler; use Friendica\Util\Temporal; +use Psr\Log\LoggerInterface; class Profile extends BaseProfile { + /** @var Database */ + private $database; + /** @var App */ + private $app; + /** @var IHandleUserSessions */ + private $session; + /** @var IManageConfigValues */ + private $config; + /** @var App\Page */ + private $page; + /** @var ProfileField */ + private $profileField; + + public function __construct(ProfileField $profileField, App\Page $page, IManageConfigValues $config, IHandleUserSessions $session, App $app, Database $database, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) + { + parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); + + $this->database = $database; + $this->app = $app; + $this->session = $session; + $this->config = $config; + $this->page = $page; + $this->profileField = $profileField; + } + protected function rawContent(array $request = []) { if (ActivityPub::isRequest()) { - $user = DBA::selectFirst('user', ['uid'], ['nickname' => $this->parameters['nickname'], 'account_removed' => false]); - if (DBA::isResult($user)) { + $user = $this->database->selectFirst('user', ['uid'], ['nickname' => $this->parameters['nickname'] ?? '', 'account_removed' => false]); + if ($user) { try { $data = ActivityPub\Transmitter::getProfile($user['uid']); header('Access-Control-Allow-Origin: *'); @@ -60,7 +93,7 @@ class Profile extends BaseProfile } } - if (DBA::exists('userd', ['username' => $this->parameters['nickname']])) { + if ($this->database->exists('userd', ['username' => $this->parameters['nickname']])) { // Known deleted user $data = ActivityPub\Transmitter::getDeletedUser($this->parameters['nickname']); @@ -74,43 +107,41 @@ class Profile extends BaseProfile protected function content(array $request = []): string { - $a = DI::app(); - - $profile = ProfileModel::load($a, $this->parameters['nickname'] ?? ''); + $profile = ProfileModel::load($this->app, $this->parameters['nickname'] ?? ''); if (!$profile) { - throw new HTTPException\NotFoundException(DI::l10n()->t('Profile not found.')); + throw new HTTPException\NotFoundException($this->t('Profile not found.')); } - $remote_contact_id = DI::userSession()->getRemoteContactID($profile['uid']); + $remote_contact_id = $this->session->getRemoteContactID($profile['uid']); - if (DI::config()->get('system', 'block_public') && !DI::userSession()->isAuthenticated()) { + if ($this->config->get('system', 'block_public') && !$this->session->isAuthenticated()) { return Login::form(); } - if (!empty($profile['hidewall']) && !DI::userSession()->isAuthenticated()) { + if (!empty($profile['hidewall']) && !$this->session->isAuthenticated()) { $this->baseUrl->redirect('profile/' . $profile['nickname'] . '/restricted'); } if (!empty($profile['page-flags']) && $profile['page-flags'] == User::PAGE_FLAGS_COMMUNITY) { - DI::page()['htmlhead'] .= '' . "\n"; + $this->page['htmlhead'] .= '' . "\n"; } - DI::page()['htmlhead'] .= self::buildHtmlHead($profile, $this->parameters['nickname'], $remote_contact_id); + $this->page['htmlhead'] .= $this->buildHtmlHead($profile, $this->parameters['nickname']); Nav::setSelected('home'); - $is_owner = DI::userSession()->getLocalUserId() == $profile['uid']; - $o = self::getTabsHTML('profile', $is_owner, $profile['nickname'], $profile['hide-friends']); + $is_owner = $this->session->getLocalUserId() == $profile['uid']; + $o = self::getTabsHTML('profile', $is_owner, $profile['nickname'], $profile['hide-friends']); - $view_as_contacts = []; - $view_as_contact_id = 0; + $view_as_contacts = []; + $view_as_contact_id = 0; $view_as_contact_alert = ''; if ($is_owner) { - $view_as_contact_id = intval($_GET['viewas'] ?? 0); + $view_as_contact_id = intval($request['viewas'] ?? 0); $view_as_contacts = Contact::selectToArray(['id', 'name'], [ - 'uid' => DI::userSession()->getLocalUserId(), - 'rel' => [Contact::FOLLOWER, Contact::SHARING, Contact::FRIEND], + 'uid' => $this->session->getLocalUserId(), + 'rel' => [Contact::FOLLOWER, Contact::SHARING, Contact::FRIEND], 'network' => Protocol::DFRN, 'blocked' => false, ]); @@ -123,7 +154,7 @@ class Profile extends BaseProfile } if (($key = array_search($view_as_contact_id, $view_as_contact_ids)) !== false) { - $view_as_contact_alert = DI::l10n()->t( + $view_as_contact_alert = $this->t( 'You\'re currently viewing your profile as %s Cancel', htmlentities($view_as_contacts[$key]['name'], ENT_COMPAT, 'UTF-8'), 'profile/' . $this->parameters['nickname'] . '/profile' @@ -133,47 +164,47 @@ class Profile extends BaseProfile $basic_fields = []; - $basic_fields += self::buildField('fullname', DI::l10n()->t('Full Name:'), $profile['name']); + $basic_fields += self::buildField('fullname', $this->t('Full Name:'), $profile['name']); if (Feature::isEnabled($profile['uid'], 'profile_membersince')) { $basic_fields += self::buildField( 'membersince', - DI::l10n()->t('Member since:'), + $this->t('Member since:'), DateTimeFormat::local($profile['register_date']) ); } if (!empty($profile['dob']) && $profile['dob'] > DBA::NULL_DATE) { - $year_bd_format = DI::l10n()->t('j F, Y'); - $short_bd_format = DI::l10n()->t('j F'); + $year_bd_format = $this->t('j F, Y'); + $short_bd_format = $this->t('j F'); - $dob = DI::l10n()->getDay( + $dob = $this->l10n->getDay( intval($profile['dob']) ? DateTimeFormat::utc($profile['dob'] . ' 00:00 +00:00', $year_bd_format) : DateTimeFormat::utc('2001-' . substr($profile['dob'], 5) . ' 00:00 +00:00', $short_bd_format) ); - $basic_fields += self::buildField('dob', DI::l10n()->t('Birthday:'), $dob); + $basic_fields += self::buildField('dob', $this->t('Birthday:'), $dob); if ($age = Temporal::getAgeByTimezone($profile['dob'], $profile['timezone'])) { - $basic_fields += self::buildField('age', DI::l10n()->t('Age: '), DI::l10n()->tt('%d year old', '%d years old', $age)); + $basic_fields += self::buildField('age', $this->t('Age: '), $this->tt('%d year old', '%d years old', $age)); } } if ($profile['about']) { - $basic_fields += self::buildField('about', DI::l10n()->t('Description:'), BBCode::convertForUriId($profile['uri-id'], $profile['about'])); + $basic_fields += self::buildField('about', $this->t('Description:'), BBCode::convertForUriId($profile['uri-id'], $profile['about'])); } if ($profile['xmpp']) { - $basic_fields += self::buildField('xmpp', DI::l10n()->t('XMPP:'), $profile['xmpp']); + $basic_fields += self::buildField('xmpp', $this->t('XMPP:'), $profile['xmpp']); } if ($profile['matrix']) { - $basic_fields += self::buildField('matrix', DI::l10n()->t('Matrix:'), $profile['matrix']); + $basic_fields += self::buildField('matrix', $this->t('Matrix:'), $profile['matrix']); } if ($profile['homepage']) { - $basic_fields += self::buildField('homepage', DI::l10n()->t('Homepage:'), HTML::toLink($profile['homepage'])); + $basic_fields += self::buildField('homepage', $this->t('Homepage:'), HTML::toLink($profile['homepage'])); } if ( @@ -183,7 +214,7 @@ class Profile extends BaseProfile || $profile['region'] || $profile['country-name'] ) { - $basic_fields += self::buildField('location', DI::l10n()->t('Location:'), ProfileModel::formatLocation($profile)); + $basic_fields += self::buildField('location', $this->t('Location:'), ProfileModel::formatLocation($profile)); } if ($profile['pub_keywords']) { @@ -191,12 +222,12 @@ class Profile extends BaseProfile // Separator is defined in Module\Settings\Profile\Index::cleanKeywords foreach (explode(', ', $profile['pub_keywords']) as $tag_label) { $tags[] = [ - 'url' => '/search?tag=' . $tag_label, + 'url' => '/search?tag=' . $tag_label, 'label' => Tag::TAG_CHARACTER[Tag::HASHTAG] . $tag_label, ]; } - $basic_fields += self::buildField('pub_keywords', DI::l10n()->t('Tags:'), $tags); + $basic_fields += self::buildField('pub_keywords', $this->t('Tags:'), $tags); } $custom_fields = []; @@ -205,9 +236,9 @@ class Profile extends BaseProfile $contact_id = $view_as_contact_id ?: $remote_contact_id ?: 0; if ($is_owner && $contact_id === 0) { - $profile_fields = DI::profileField()->selectByUserId($profile['uid']); + $profile_fields = $this->profileField->selectByUserId($profile['uid']); } else { - $profile_fields = DI::profileField()->selectByContactId($contact_id, $profile['uid']); + $profile_fields = $this->profileField->selectByContactId($contact_id, $profile['uid']); } foreach ($profile_fields as $profile_field) { @@ -217,42 +248,42 @@ class Profile extends BaseProfile BBCode::convertForUriId($profile['uri-id'], $profile_field->value), 'aprofile custom' ); - }; + } //show subcribed forum if it is enabled in the usersettings if (Feature::isEnabled($profile['uid'], 'forumlist_profile')) { $custom_fields += self::buildField( 'forumlist', - DI::l10n()->t('Forums:'), + $this->t('Forums:'), ForumManager::profileAdvanced($profile['uid']) ); } $tpl = Renderer::getMarkupTemplate('profile/profile.tpl'); - $o .= Renderer::replaceMacros($tpl, [ - '$title' => DI::l10n()->t('Profile'), - '$yourself' => DI::l10n()->t('Yourself'), - '$view_as_contacts' => $view_as_contacts, - '$view_as_contact_id' => $view_as_contact_id, + $o .= Renderer::replaceMacros($tpl, [ + '$title' => $this->t('Profile'), + '$yourself' => $this->t('Yourself'), + '$view_as_contacts' => $view_as_contacts, + '$view_as_contact_id' => $view_as_contact_id, '$view_as_contact_alert' => $view_as_contact_alert, - '$view_as' => DI::l10n()->t('View profile as:'), - '$submit' => DI::l10n()->t('Submit'), - '$basic' => DI::l10n()->t('Basic'), - '$advanced' => DI::l10n()->t('Advanced'), - '$is_owner' => $profile['uid'] == DI::userSession()->getLocalUserId(), - '$query_string' => DI::args()->getQueryString(), - '$basic_fields' => $basic_fields, - '$custom_fields' => $custom_fields, - '$profile' => $profile, - '$edit_link' => [ - 'url' => DI::baseUrl() . '/settings/profile', DI::l10n()->t('Edit profile'), + '$view_as' => $this->t('View profile as:'), + '$submit' => $this->t('Submit'), + '$basic' => $this->t('Basic'), + '$advanced' => $this->t('Advanced'), + '$is_owner' => $profile['uid'] == $this->session->getLocalUserId(), + '$query_string' => $this->args->getQueryString(), + '$basic_fields' => $basic_fields, + '$custom_fields' => $custom_fields, + '$profile' => $profile, + '$edit_link' => [ + 'url' => 'settings/profile', $this->t('Edit profile'), 'title' => '', - 'label' => DI::l10n()->t('Edit profile') + 'label' => $this->t('Edit profile') ], - '$viewas_link' => [ - 'url' => DI::args()->getQueryString() . '#viewas', + '$viewas_link' => [ + 'url' => $this->args->getQueryString() . '#viewas', 'title' => '', - 'label' => DI::l10n()->t('View as') + 'label' => $this->t('View as') ], ]); @@ -270,20 +301,18 @@ class Profile extends BaseProfile * @param string $class Optional CSS class to apply to the field * @return array */ - private static function buildField(string $name, string $label, $value, string $class = 'aprofile') + private static function buildField(string $name, string $label, $value, string $class = 'aprofile'): array { return [$name => [ - 'id' => 'aprofile-' . $name, + 'id' => 'aprofile-' . $name, 'class' => $class, 'label' => $label, 'value' => $value, ]]; } - private static function buildHtmlHead(array $profile, string $nickname, int $remote_contact_id) + private function buildHtmlHead(array $profile, string $nickname): string { - $baseUrl = DI::baseUrl(); - $htmlhead = "\n"; if (!empty($profile['page-flags']) && $profile['page-flags'] == User::PAGE_FLAGS_COMMUNITY) { @@ -300,8 +329,8 @@ class Profile extends BaseProfile } // site block - $blocked = !DI::userSession()->isAuthenticated() && DI::config()->get('system', 'block_public'); - $userblock = !DI::userSession()->isAuthenticated() && $profile['hidewall']; + $blocked = !$this->session->isAuthenticated() && $this->config->get('system', 'block_public'); + $userblock = !$this->session->isAuthenticated() && $profile['hidewall']; if (!$blocked && !$userblock) { $keywords = str_replace(['#', ',', ' ', ',,'], ['', ' ', ',', ','], $profile['pub_keywords'] ?? ''); if (strlen($keywords)) { @@ -315,17 +344,17 @@ class Profile extends BaseProfile $htmlhead .= '' . "\n"; } - $htmlhead .= '' . "\n"; - $htmlhead .= '' . "\n"; - $htmlhead .= '' . "\n"; - $htmlhead .= '' . "\n"; - $uri = urlencode('acct:' . $profile['nickname'] . '@' . $baseUrl->getHostname() . ($baseUrl->getUrlPath() ? '/' . $baseUrl->getUrlPath() : '')); - $htmlhead .= '' . "\n"; - header('Link: <' . $baseUrl . '/xrd/?uri=' . $uri . '>; rel="lrdd"; type="application/xrd+xml"', false); + $htmlhead .= '' . "\n"; + $htmlhead .= '' . "\n"; + $htmlhead .= '' . "\n"; + $htmlhead .= '' . "\n"; + $uri = urlencode('acct:' . $profile['nickname'] . '@' . $this->baseUrl->getHostname() . ($this->baseUrl->getUrlPath() ? '/' . $this->baseUrl->getUrlPath() : '')); + $htmlhead .= '' . "\n"; + header('Link: <' . $this->baseUrl . '/xrd/?uri=' . $uri . '>; rel="lrdd"; type="application/xrd+xml"', false); $dfrn_pages = ['request', 'confirm', 'notify', 'poll']; foreach ($dfrn_pages as $dfrn) { - $htmlhead .= '' . "\n"; + $htmlhead .= '' . "\n"; } return $htmlhead;