From fc283ab92858238a5a55f24b1d1650bb72068b7d Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 8 Aug 2021 10:14:56 +0000 Subject: [PATCH] Remove direct calls to App->user --- boot.php | 2 +- include/api.php | 4 +- mod/api.php | 2 +- mod/cal.php | 2 +- mod/display.php | 10 +-- mod/editpost.php | 4 +- mod/events.php | 2 +- mod/fbrowser.php | 6 +- mod/message.php | 8 +- mod/notes.php | 8 +- mod/photos.php | 14 ++-- mod/ping.php | 2 +- mod/removeme.php | 2 +- mod/settings.php | 82 +++++++++++---------- mod/videos.php | 4 +- src/App.php | 62 ++++++++++++++++ src/App/Page.php | 4 +- src/BaseModule.php | 16 ++-- src/Content/Nav.php | 16 ++-- src/Core/ACL.php | 12 +++ src/Factory/Notification/Introduction.php | 2 +- src/Model/Mail.php | 2 +- src/Model/User.php | 2 + src/Module/BaseApi.php | 8 +- src/Module/BaseProfile.php | 6 +- src/Module/Bookmarklet.php | 8 +- src/Module/Contact/Poke.php | 9 ++- src/Module/Conversation/Community.php | 8 +- src/Module/Conversation/Network.php | 10 +-- src/Module/Delegation.php | 4 +- src/Module/HCard.php | 2 +- src/Module/Home.php | 2 +- src/Module/Invite.php | 4 +- src/Module/NoScrape.php | 2 +- src/Module/Profile/Common.php | 2 +- src/Module/Profile/Contacts.php | 2 +- src/Module/Profile/Profile.php | 2 +- src/Module/Profile/Schedule.php | 2 +- src/Module/Profile/Status.php | 11 +-- src/Module/Settings/Delegation.php | 2 +- src/Module/Settings/Display.php | 8 +- src/Module/Settings/Profile/Index.php | 12 +-- src/Module/Settings/Profile/Photo/Crop.php | 4 +- src/Module/Settings/Profile/Photo/Index.php | 2 +- src/Module/Settings/UserExport.php | 2 +- src/Object/EMail/ItemCCEMail.php | 10 +-- src/Object/Post.php | 2 +- src/Security/Authentication.php | 4 +- src/Security/BasicAuth.php | 2 +- view/theme/frio/theme.php | 4 +- view/theme/vier/theme.php | 2 +- 51 files changed, 238 insertions(+), 166 deletions(-) diff --git a/boot.php b/boot.php index ecf59eb2f..1a28aa8ce 100644 --- a/boot.php +++ b/boot.php @@ -379,7 +379,7 @@ function is_site_admin() $adminlist = explode(',', str_replace(' ', '', $admin_email)); - return local_user() && $admin_email && in_array($a->user['email'] ?? '', $adminlist); + return local_user() && $admin_email && in_array($a->getUserValue('email') ?? '', $adminlist); } /** diff --git a/include/api.php b/include/api.php index c6f67109a..e419e3ad2 100644 --- a/include/api.php +++ b/include/api.php @@ -258,7 +258,7 @@ function api_login(App $a) $_SESSION["allow_api"] = true; - Hook::callAll('logged_in', $a->user); + Hook::callAll('logged_in', $record); } /** @@ -322,7 +322,7 @@ function api_call(App $a, App\Arguments $args = null) if (!empty($info['auth']) && api_user() === false) { api_login($a); - Logger::info(API_LOG_PREFIX . 'username {username}', ['module' => 'api', 'action' => 'call', 'username' => $a->user['username']]); + Logger::info(API_LOG_PREFIX . 'nickname {nickname}', ['module' => 'api', 'action' => 'call', 'nickname' => $a->getNickname()]); } Logger::debug(API_LOG_PREFIX . 'parameters', ['module' => 'api', 'action' => 'call', 'parameters' => $_REQUEST]); diff --git a/mod/api.php b/mod/api.php index decbe40e9..0423dd454 100644 --- a/mod/api.php +++ b/mod/api.php @@ -31,7 +31,7 @@ function api_post(App $a) return; } - if (count($a->user) && !empty($a->user['uid']) && $a->user['uid'] != local_user()) { + if (empty($a->getUserId()) || $a->getUserId() != local_user()) { notice(DI::l10n()->t('Permission denied.')); return; } diff --git a/mod/cal.php b/mod/cal.php index 20488842a..ac12d69b9 100644 --- a/mod/cal.php +++ b/mod/cal.php @@ -127,7 +127,7 @@ function cal_content(App $a) $sql_extra = " AND `event`.`cid` = 0 " . $sql_perms; // get the tab navigation bar - $tabs = BaseProfile::getTabsHTML($a, 'cal', false, $owner); + $tabs = BaseProfile::getTabsHTML($a, 'cal', false, $owner['nickname'], $owner['hide-friends']); // The view mode part is similiar to /mod/events.php if ($mode == 'view') { diff --git a/mod/display.php b/mod/display.php index befef9753..199c89488 100644 --- a/mod/display.php +++ b/mod/display.php @@ -63,7 +63,7 @@ function display_init(App $a) if (local_user()) { $item = Post::selectFirstForUser(local_user(), $fields, ['guid' => DI::args()->getArgv()[1], 'uid' => local_user()]); if (DBA::isResult($item)) { - $nick = $a->user['nickname']; + $nick = $a->getNickname(); } } @@ -275,10 +275,10 @@ function display_content(App $a, $update = false, $update_uid = 0) if ($is_owner && !$update) { $x = [ 'is_owner' => true, - 'allow_location' => $a->user['allow_location'], - 'default_location' => $a->user['default-location'], - 'nickname' => $a->user['nickname'], - 'lockstate' => (is_array($a->user) && (strlen($a->user['allow_cid']) || strlen($a->user['allow_gid']) || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid'])) ? 'lock' : 'unlock'), + 'allow_location' => $a->getUserValue('allow_location'), + 'default_location' => $a->getUserValue('default-location'), + 'nickname' => $a->getNickname(), + 'lockstate' => ACL::getLockstateForUserId($a->getUserId()) ? 'lock' : 'unlock', 'acl' => ACL::getFullSelectorHTML(DI::page(), $a->user, true), 'bang' => '', 'visitor' => 'block', diff --git a/mod/editpost.php b/mod/editpost.php index 848e1ce86..9e7079543 100644 --- a/mod/editpost.php +++ b/mod/editpost.php @@ -65,7 +65,7 @@ function editpost_content(App $a) DI::page()['htmlhead'] .= Renderer::replaceMacros($tpl, [ '$ispublic' => ' ', // DI::l10n()->t('Visible to everybody'), '$geotag' => $geotag, - '$nickname' => $a->user['nickname'], + '$nickname' => $a->getNickname(), '$is_mobile' => DI::mode()->isMobile(), ]); @@ -107,7 +107,7 @@ function editpost_content(App $a) '$posttype' => $item['post-type'], '$content' => undo_post_tagging($item['body']), '$post_id' => $post_id, - '$defloc' => $a->user['default-location'], + '$defloc' => $a->getUserValue('default-location'), '$visitor' => 'none', '$pvisit' => 'none', '$emailcc' => DI::l10n()->t('CC: email addresses'), diff --git a/mod/events.php b/mod/events.php index f20d173dc..7409b83a7 100644 --- a/mod/events.php +++ b/mod/events.php @@ -280,7 +280,7 @@ function events_content(App $a) $tabs = ''; // tabs if ($a->getThemeInfoValue('events_in_profile')) { - $tabs = BaseProfile::getTabsHTML($a, 'events', true, $a->user); + $tabs = BaseProfile::getTabsHTML($a, 'events', true, $a->getNickname(), false); } $mode = 'view'; diff --git a/mod/fbrowser.php b/mod/fbrowser.php index e8b356d08..2f4b2eef5 100644 --- a/mod/fbrowser.php +++ b/mod/fbrowser.php @@ -88,7 +88,7 @@ function fbrowser_content(App $a) } return [ - DI::baseUrl() . '/photos/' . $a->user['nickname'] . '/image/' . $rr['resource-id'], + DI::baseUrl() . '/photos/' . $a->getNickname() . '/image/' . $rr['resource-id'], $filename_e, DI::baseUrl() . '/photo/' . $rr['resource-id'] . '-' . $scale . '.'. $ext ]; @@ -103,7 +103,7 @@ function fbrowser_content(App $a) '$folders' => $albums, '$files' => $files, '$cancel' => DI::l10n()->t('Cancel'), - '$nickname' => $a->user['nickname'], + '$nickname' => $a->getNickname(), '$upload' => DI::l10n()->t('Upload') ]); @@ -132,7 +132,7 @@ function fbrowser_content(App $a) '$folders' => false, '$files' => $files, '$cancel' => DI::l10n()->t('Cancel'), - '$nickname' => $a->user['nickname'], + '$nickname' => $a->getNickname(), '$upload' => DI::l10n()->t('Upload') ]); } diff --git a/mod/message.php b/mod/message.php index a18a5f9df..e862a469b 100644 --- a/mod/message.php +++ b/mod/message.php @@ -112,7 +112,7 @@ function message_content(App $a) return Login::form(); } - $myprofile = DI::baseUrl() . '/profile/' . $a->user['nickname']; + $myprofile = DI::baseUrl() . '/profile/' . $a->getNickname(); $tpl = Renderer::getMarkupTemplate('mail_head.tpl'); if (DI::args()->getArgc() > 1 && DI::args()->getArgv()[1] == 'new') { @@ -179,7 +179,7 @@ function message_content(App $a) $tpl = Renderer::getMarkupTemplate('msg-header.tpl'); DI::page()['htmlhead'] .= Renderer::replaceMacros($tpl, [ '$baseurl' => DI::baseUrl()->get(true), - '$nickname' => $a->user['nickname'], + '$nickname' => $a->getNickname(), '$linkurl' => DI::l10n()->t('Please enter a link URL:') ]); @@ -292,7 +292,7 @@ function message_content(App $a) $tpl = Renderer::getMarkupTemplate('msg-header.tpl'); DI::page()['htmlhead'] .= Renderer::replaceMacros($tpl, [ '$baseurl' => DI::baseUrl()->get(true), - '$nickname' => $a->user['nickname'], + '$nickname' => $a->getNickname(), '$linkurl' => DI::l10n()->t('Please enter a link URL:') ]); @@ -431,7 +431,7 @@ function render_messages(array $msg, $t) $tpl = Renderer::getMarkupTemplate($t); $rslt = ''; - $myprofile = DI::baseUrl() . '/profile/' . $a->user['nickname']; + $myprofile = DI::baseUrl() . '/profile/' . $a->getNickname(); foreach ($msg as $rr) { if ($rr['unknown']) { diff --git a/mod/notes.php b/mod/notes.php index 945d0c935..eccbdcc89 100644 --- a/mod/notes.php +++ b/mod/notes.php @@ -45,16 +45,16 @@ function notes_content(App $a, $update = false) return; } - $o = BaseProfile::getTabsHTML($a, 'notes', true, $a->user); + $o = BaseProfile::getTabsHTML($a, 'notes', true, $a->getNickname(), false); if (!$update) { $o .= '

' . DI::l10n()->t('Personal Notes') . '

'; $x = [ 'is_owner' => true, - 'allow_location' => (($a->user['allow_location']) ? true : false), - 'default_location' => $a->user['default-location'], - 'nickname' => $a->user['nickname'], + 'allow_location' => (($a->getUserValue('allow_location')) ? true : false), + 'default_location' => $a->getUserValue('default-location'), + 'nickname' => $a->getNickname(), 'lockstate' => 'lock', 'acl' => \Friendica\Core\ACL::getSelfOnlyHTML(local_user(), DI::l10n()->t('Personal notes are visible only by yourself.')), 'bang' => '', diff --git a/mod/photos.php b/mod/photos.php index 9e1fa9ced..10b8167db 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -38,6 +38,7 @@ use Friendica\Model\Contact; use Friendica\Model\Item; use Friendica\Model\Photo; use Friendica\Model\Post; +use Friendica\Model\Profile; use Friendica\Model\Tag; use Friendica\Model\User; use Friendica\Module\BaseProfile; @@ -223,7 +224,7 @@ function photos_post(App $a) // Update the photo albums cache Photo::clearAlbumCache($page_owner_uid); - DI::baseUrl()->redirect('photos/' . $a->user['nickname'] . '/album/' . bin2hex($newalbum)); + DI::baseUrl()->redirect('photos/' . $a->getNickname() . '/album/' . bin2hex($newalbum)); return; // NOTREACHED } @@ -830,6 +831,8 @@ function photos_content(App $a) return; } + $profile = Profile::getByUID($user['uid']); + $phototypes = Images::supportedTypes(); $_SESSION['photo_return'] = DI::args()->getCommand(); @@ -903,7 +906,7 @@ function photos_content(App $a) // tabs $is_owner = (local_user() && (local_user() == $owner_uid)); - $o .= BaseProfile::getTabsHTML($a, 'photos', $is_owner, $user); + $o .= BaseProfile::getTabsHTML($a, 'photos', $is_owner, $user['nickname'], $profile['hide-friends']); // Display upload form if ($datatype === 'upload') { @@ -958,12 +961,7 @@ function photos_content(App $a) '$albumselect' => $albumselect, '$permissions' => DI::l10n()->t('Permissions'), '$aclselect' => $aclselect_e, - '$lockstate' => is_array($a->user) - && (strlen($a->user['allow_cid']) - || strlen($a->user['allow_gid']) - || strlen($a->user['deny_cid']) - || strlen($a->user['deny_gid']) - ) ? 'lock' : 'unlock', + '$lockstate' => ACL::getLockstateForUserId($a->getUserId()) ? 'lock' : 'unlock', '$alt_uploader' => $ret['addon_text'], '$default_upload_box' => ($ret['default_upload'] ? $default_upload_box : ''), '$default_upload_submit' => ($ret['default_upload'] ? $default_upload_submit : ''), diff --git a/mod/ping.php b/mod/ping.php index 93c579e0a..61a12a012 100644 --- a/mod/ping.php +++ b/mod/ping.php @@ -193,7 +193,7 @@ function ping_init(App $a) $intro_count = count($intros1) + count($intros2); $intros = $intros1 + $intros2; - $myurl = DI::baseUrl() . '/profile/' . $a->user['nickname']; + $myurl = DI::baseUrl() . '/profile/' . $a->getNickname(); $mails = q( "SELECT `id`, `from-name`, `from-url`, `from-photo`, `created` FROM `mail` WHERE `uid` = %d AND `seen` = 0 AND `from-url` != '%s' ", diff --git a/mod/removeme.php b/mod/removeme.php index 3c53ba420..b7d37734c 100644 --- a/mod/removeme.php +++ b/mod/removeme.php @@ -70,7 +70,7 @@ function removeme_post(App $a) } if (User::getIdFromPasswordAuthentication($a->user, trim($_POST['qxz_password']))) { - User::remove($a->user['uid']); + User::remove($a->getUserId()); unset($_SESSION['authenticated']); unset($_SESSION['uid']); diff --git a/mod/settings.php b/mod/settings.php index 6d165cef0..87c56e0df 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -61,7 +61,7 @@ function settings_post(App $a) return; } - if (count($a->user) && !empty($a->user['uid']) && $a->user['uid'] != local_user()) { + if (empty($a->getUserId()) || $a->getUserId() != local_user()) { notice(DI::l10n()->t('Permission denied.')); return; } @@ -73,6 +73,8 @@ function settings_post(App $a) return; } + $user = User::getById($a->getUserId()); + if ((DI::args()->getArgc() > 1) && (DI::args()->getArgv()[1] == 'connectors')) { BaseModule::checkFormSecurityTokenRedirectOnError('/settings/connectors', 'settings_connectors'); @@ -108,7 +110,7 @@ function settings_post(App $a) } if (strlen($mail_pass)) { $pass = ''; - openssl_public_encrypt($mail_pass, $pass, $a->user['pubkey']); + openssl_public_encrypt($mail_pass, $pass, $user['pubkey']); DBA::update('mailacct', ['pass' => bin2hex($pass)], ['uid' => local_user()]); } $r = q("UPDATE `mailacct` SET `server` = '%s', `port` = %d, `ssltype` = '%s', `user` = '%s', @@ -134,7 +136,7 @@ function settings_post(App $a) if (strlen($eacct['server'])) { $dcrpass = ''; - openssl_private_decrypt(hex2bin($eacct['pass']), $dcrpass, $a->user['prvkey']); + openssl_private_decrypt(hex2bin($eacct['pass']), $dcrpass, $user['prvkey']); $mbox = Email::connect($mb, $mail_user, $dcrpass); unset($dcrpass); if (!$mbox) { @@ -309,7 +311,7 @@ function settings_post(App $a) $err = ''; - if ($username != $a->user['username']) { + if ($username != $user['username']) { if (strlen($username) > 40) { $err .= DI::l10n()->t('Please use a shorter name.'); } @@ -318,11 +320,11 @@ function settings_post(App $a) } } - if ($email != $a->user['email']) { + if ($email != $user['email']) { // check for the correct password if (!User::authenticate(intval(local_user()), $_POST['mpassword'])) { $err .= DI::l10n()->t('Wrong Password.'); - $email = $a->user['email']; + $email = $user['email']; } // check the email is valid if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { @@ -333,7 +335,7 @@ function settings_post(App $a) $adminlist = explode(",", str_replace(" ", "", strtolower(DI::config()->get('config', 'admin_email')))); if (in_array(strtolower($email), $adminlist)) { $err .= DI::l10n()->t('Cannot change to that email.'); - $email = $a->user['email']; + $email = $user['email']; } } } @@ -343,7 +345,7 @@ function settings_post(App $a) return; } - if (($timezone != $a->user['timezone']) && strlen($timezone)) { + if (($timezone != $user['timezone']) && strlen($timezone)) { date_default_timezone_set($timezone); } @@ -592,18 +594,20 @@ function settings_content(App $a) return; } - $username = $a->user['username']; - $email = $a->user['email']; - $nickname = $a->user['nickname']; - $timezone = $a->user['timezone']; - $language = $a->user['language']; - $notify = $a->user['notify-flags']; - $defloc = $a->user['default-location']; - $openid = $a->user['openid']; - $maxreq = $a->user['maxreq']; - $expire = ((intval($a->user['expire'])) ? $a->user['expire'] : ''); - $unkmail = $a->user['unkmail']; - $cntunkmail = $a->user['cntunkmail']; + $user = User::getById($a->getUserId()); + + $username = $user['username']; + $email = $user['email']; + $nickname = $a->getNickname(); + $timezone = $user['timezone']; + $language = $user['language']; + $notify = $user['notify-flags']; + $defloc = $user['default-location']; + $openid = $user['openid']; + $maxreq = $user['maxreq']; + $expire = ((intval($user['expire'])) ? $user['expire'] : ''); + $unkmail = $user['unkmail']; + $cntunkmail = $user['cntunkmail']; $expire_items = DI::pConfig()->get(local_user(), 'expire', 'items', true); $expire_notes = DI::pConfig()->get(local_user(), 'expire', 'notes', true); @@ -611,15 +615,15 @@ function settings_content(App $a) $expire_photos = DI::pConfig()->get(local_user(), 'expire', 'photos', false); $expire_network_only = DI::pConfig()->get(local_user(), 'expire', 'network_only', false); - if (!strlen($a->user['timezone'])) { + if (!strlen($user['timezone'])) { $timezone = date_default_timezone_get(); } // Set the account type to "Community" when the page is a community page but the account type doesn't fit // This is only happening on the first visit after the update - if (in_array($a->user['page-flags'], [User::PAGE_FLAGS_COMMUNITY, User::PAGE_FLAGS_PRVGROUP]) && - ($a->user['account-type'] != User::ACCOUNT_TYPE_COMMUNITY)) - $a->user['account-type'] = User::ACCOUNT_TYPE_COMMUNITY; + if (in_array($user['page-flags'], [User::PAGE_FLAGS_COMMUNITY, User::PAGE_FLAGS_PRVGROUP]) && + ($user['account-type'] != User::ACCOUNT_TYPE_COMMUNITY)) + $user['account-type'] = User::ACCOUNT_TYPE_COMMUNITY; $pageset_tpl = Renderer::getMarkupTemplate('settings/pagetypes.tpl'); @@ -627,7 +631,7 @@ function settings_content(App $a) '$account_types' => DI::l10n()->t("Account Types"), '$user' => DI::l10n()->t("Personal Page Subtypes"), '$community' => DI::l10n()->t("Community Forum Subtypes"), - '$account_type' => $a->user['account-type'], + '$account_type' => $user['account-type'], '$type_person' => User::ACCOUNT_TYPE_PERSON, '$type_organisation' => User::ACCOUNT_TYPE_ORGANISATION, '$type_news' => User::ACCOUNT_TYPE_NEWS, @@ -635,39 +639,39 @@ function settings_content(App $a) '$account_person' => ['account-type', DI::l10n()->t('Personal Page'), User::ACCOUNT_TYPE_PERSON, DI::l10n()->t('Account for a personal profile.'), - ($a->user['account-type'] == User::ACCOUNT_TYPE_PERSON)], + ($user['account-type'] == User::ACCOUNT_TYPE_PERSON)], '$account_organisation' => ['account-type', DI::l10n()->t('Organisation Page'), User::ACCOUNT_TYPE_ORGANISATION, DI::l10n()->t('Account for an organisation that automatically approves contact requests as "Followers".'), - ($a->user['account-type'] == User::ACCOUNT_TYPE_ORGANISATION)], + ($user['account-type'] == User::ACCOUNT_TYPE_ORGANISATION)], '$account_news' => ['account-type', DI::l10n()->t('News Page'), User::ACCOUNT_TYPE_NEWS, DI::l10n()->t('Account for a news reflector that automatically approves contact requests as "Followers".'), - ($a->user['account-type'] == User::ACCOUNT_TYPE_NEWS)], + ($user['account-type'] == User::ACCOUNT_TYPE_NEWS)], '$account_community' => ['account-type', DI::l10n()->t('Community Forum'), User::ACCOUNT_TYPE_COMMUNITY, DI::l10n()->t('Account for community discussions.'), - ($a->user['account-type'] == User::ACCOUNT_TYPE_COMMUNITY)], + ($user['account-type'] == User::ACCOUNT_TYPE_COMMUNITY)], '$page_normal' => ['page-flags', DI::l10n()->t('Normal Account Page'), User::PAGE_FLAGS_NORMAL, DI::l10n()->t('Account for a regular personal profile that requires manual approval of "Friends" and "Followers".'), - ($a->user['page-flags'] == User::PAGE_FLAGS_NORMAL)], + ($user['page-flags'] == User::PAGE_FLAGS_NORMAL)], '$page_soapbox' => ['page-flags', DI::l10n()->t('Soapbox Page'), User::PAGE_FLAGS_SOAPBOX, DI::l10n()->t('Account for a public profile that automatically approves contact requests as "Followers".'), - ($a->user['page-flags'] == User::PAGE_FLAGS_SOAPBOX)], + ($user['page-flags'] == User::PAGE_FLAGS_SOAPBOX)], '$page_community' => ['page-flags', DI::l10n()->t('Public Forum'), User::PAGE_FLAGS_COMMUNITY, DI::l10n()->t('Automatically approves all contact requests.'), - ($a->user['page-flags'] == User::PAGE_FLAGS_COMMUNITY)], + ($user['page-flags'] == User::PAGE_FLAGS_COMMUNITY)], '$page_freelove' => ['page-flags', DI::l10n()->t('Automatic Friend Page'), User::PAGE_FLAGS_FREELOVE, DI::l10n()->t('Account for a popular profile that automatically approves contact requests as "Friends".'), - ($a->user['page-flags'] == User::PAGE_FLAGS_FREELOVE)], + ($user['page-flags'] == User::PAGE_FLAGS_FREELOVE)], '$page_prvgroup' => ['page-flags', DI::l10n()->t('Private Forum [Experimental]'), User::PAGE_FLAGS_PRVGROUP, DI::l10n()->t('Requires manual approval of contact requests.'), - ($a->user['page-flags'] == User::PAGE_FLAGS_PRVGROUP)], + ($user['page-flags'] == User::PAGE_FLAGS_PRVGROUP)], ]); @@ -731,7 +735,7 @@ function settings_content(App $a) '$timezone' => ['timezone_select' , DI::l10n()->t('Your Timezone:'), Temporal::getTimezoneSelect($timezone), ''], '$language' => ['language', DI::l10n()->t('Your Language:'), $language, DI::l10n()->t('Set the language we use to show you friendica interface and to send you emails'), $lang_choices], '$defloc' => ['defloc', DI::l10n()->t('Default Post Location:'), $defloc, ''], - '$allowloc' => ['allow_location', DI::l10n()->t('Use Browser Location:'), ($a->user['allow_location'] == 1), ''], + '$allowloc' => ['allow_location', DI::l10n()->t('Use Browser Location:'), ($user['allow_location'] == 1), ''], '$h_prv' => DI::l10n()->t('Security and Privacy Settings'), '$visibility' => $profile['net-publish'], @@ -739,14 +743,14 @@ function settings_content(App $a) '$profile_in_dir' => $profile_in_dir, '$profile_in_net_dir' => ['profile_in_netdirectory', DI::l10n()->t('Allow your profile to be searchable globally?'), $profile['net-publish'], DI::l10n()->t("Activate this setting if you want others to easily find and follow you. Your profile will be searchable on remote systems. This setting also determines whether Friendica will inform search engines that your profile should be indexed or not.") . $net_pub_desc], '$hide_friends' => ['hide-friends', DI::l10n()->t('Hide your contact/friend list from viewers of your profile?'), $profile['hide-friends'], DI::l10n()->t('A list of your contacts is displayed on your profile page. Activate this option to disable the display of your contact list.')], - '$hide_wall' => ['hidewall', DI::l10n()->t('Hide your profile details from anonymous viewers?'), $a->user['hidewall'], DI::l10n()->t('Anonymous visitors will only see your profile picture, your display name and the nickname you are using on your profile page. Your public posts and replies will still be accessible by other means.')], + '$hide_wall' => ['hidewall', DI::l10n()->t('Hide your profile details from anonymous viewers?'), $user['hidewall'], DI::l10n()->t('Anonymous visitors will only see your profile picture, your display name and the nickname you are using on your profile page. Your public posts and replies will still be accessible by other means.')], '$unlisted' => ['unlisted', DI::l10n()->t('Make public posts unlisted'), DI::pConfig()->get(local_user(), 'system', 'unlisted'), DI::l10n()->t('Your public posts will not appear on the community pages or in search results, nor be sent to relay servers. However they can still appear on public feeds on remote servers.')], '$accessiblephotos' => ['accessible-photos', DI::l10n()->t('Make all posted pictures accessible'), DI::pConfig()->get(local_user(), 'system', 'accessible-photos'), DI::l10n()->t("This option makes every posted picture accessible via the direct link. This is a workaround for the problem that most other networks can't handle permissions on pictures. Non public pictures still won't be visible for the public on your photo albums though.")], - '$blockwall' => ['blockwall', DI::l10n()->t('Allow friends to post to your profile page?'), (intval($a->user['blockwall']) ? '0' : '1'), DI::l10n()->t('Your contacts may write posts on your profile wall. These posts will be distributed to your contacts')], // array('blockwall', DI::l10n()->t('Allow friends to post to your profile page:'), !$blockwall, ''), - '$blocktags' => ['blocktags', DI::l10n()->t('Allow friends to tag your posts?'), (intval($a->user['blocktags']) ? '0' : '1'), DI::l10n()->t('Your contacts can add additional tags to your posts.')], // array('blocktags', DI::l10n()->t('Allow friends to tag your posts:'), !$blocktags, ''), + '$blockwall' => ['blockwall', DI::l10n()->t('Allow friends to post to your profile page?'), (intval($user['blockwall']) ? '0' : '1'), DI::l10n()->t('Your contacts may write posts on your profile wall. These posts will be distributed to your contacts')], // array('blockwall', DI::l10n()->t('Allow friends to post to your profile page:'), !$blockwall, ''), + '$blocktags' => ['blocktags', DI::l10n()->t('Allow friends to tag your posts?'), (intval($user['blocktags']) ? '0' : '1'), DI::l10n()->t('Your contacts can add additional tags to your posts.')], // array('blocktags', DI::l10n()->t('Allow friends to tag your posts:'), !$blocktags, ''), '$unkmail' => ['unkmail', DI::l10n()->t('Permit unknown people to send you private mail?'), $unkmail, DI::l10n()->t('Friendica network users may send you private messages even if they are not in your contact list.')], '$cntunkmail' => ['cntunkmail', DI::l10n()->t('Maximum private messages per day from unknown people:'), $cntunkmail , DI::l10n()->t("\x28to prevent spam abuse\x29")], - '$group_select' => Group::displayGroupSelection(local_user(), $a->user['def_gid']), + '$group_select' => Group::displayGroupSelection(local_user(), $user['def_gid']), '$permissions' => DI::l10n()->t('Default Post Permissions'), '$aclselect' => ACL::getFullSelectorHTML(DI::page(), $a->user), diff --git a/mod/videos.php b/mod/videos.php index e02526969..2bd5eb8c9 100644 --- a/mod/videos.php +++ b/mod/videos.php @@ -29,6 +29,7 @@ use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Attach; use Friendica\Model\Item; +use Friendica\Model\Profile; use Friendica\Model\User; use Friendica\Module\BaseProfile; use Friendica\Security\Security; @@ -120,6 +121,7 @@ function videos_content(App $a) return; } + $profile = Profile::getByUID($user['uid']); //$phototypes = Photo::supportedTypes(); $_SESSION['video_return'] = DI::args()->getCommand(); @@ -171,7 +173,7 @@ function videos_content(App $a) // tabs $_is_owner = (local_user() && (local_user() == $user['uid'])); - $o .= BaseProfile::getTabsHTML($a, 'videos', $_is_owner, $user); + $o .= BaseProfile::getTabsHTML($a, 'videos', $_is_owner, $user['nickname'], $profile['hide-friends']); // // dispatch request diff --git a/src/App.php b/src/App.php index c9aafe14e..993045ac5 100644 --- a/src/App.php +++ b/src/App.php @@ -36,6 +36,7 @@ use Friendica\Core\Theme; use Friendica\Database\Database; use Friendica\Model\Contact; use Friendica\Model\Profile; +use Friendica\Model\User; use Friendica\Module\Special\HTTPException as ModuleHTTPException; use Friendica\Network\HTTPException; use Friendica\Util\ConfigFileLoader; @@ -66,6 +67,8 @@ class App 'events_in_profile' => true ]; + private $user_id = 0; + private $nickname = ''; private $timezone = ''; private $profile_owner = 0; private $contact_id = 0; @@ -126,6 +129,65 @@ class App */ private $pConfig; + /** + * Set the user ID + * + * @param int $user_id + * @return void + */ + public function setUserId(int $user_id) + { + $this->user_id = $user_id; + } + + /** + * Set the nickname + * + * @param int $user_id + * @return void + */ + public function setNickname(string $nickname) + { + $this->nickname = $nickname; + } + + /** + * Fetch the user id + * @return int + */ + public function getUserId() + { + return $this->user_id; + } + + /** + * Fetch the user nick name + * @return string + */ + public function getNickname() + { + return $this->nickname; + } + + /** + * Fetch a specific user field + * + * @param string $index + * @return mixed + */ + public function getUserValue(string $index) + { + if (empty($this->user_id)) { + return null; + } + + if (empty($this->user)) { + $this->user = User::getById($this->user_id); + } + + return $this->user[$index] ?? null; + } + /** * Set the profile owner ID * diff --git a/src/App/Page.php b/src/App/Page.php index c6e3e723c..97b70cf5c 100644 --- a/src/App/Page.php +++ b/src/App/Page.php @@ -277,8 +277,8 @@ class Page implements ArrayAccess // If you're just visiting, let javascript take you home if (!empty($_SESSION['visitor_home'])) { $homebase = $_SESSION['visitor_home']; - } elseif (!empty($app->user['nickname'])) { - $homebase = 'profile/' . $app->user['nickname']; + } elseif (!empty($app->getNickname())) { + $homebase = 'profile/' . $app->getNickname(); } if (isset($homebase)) { diff --git a/src/BaseModule.php b/src/BaseModule.php index cb8f8c790..f6dbedfa7 100644 --- a/src/BaseModule.php +++ b/src/BaseModule.php @@ -22,6 +22,7 @@ namespace Friendica; use Friendica\Core\Logger; +use Friendica\Model\User; /** * All modules in Friendica should extend BaseModule, although not all modules @@ -135,10 +136,9 @@ abstract class BaseModule */ public static function getFormSecurityToken($typename = '') { - $a = DI::app(); - + $user = User::getById(DI::app()->getUserId(), ['guid', 'prvkey']); $timestamp = time(); - $sec_hash = hash('whirlpool', ($a->user['guid'] ?? '') . ($a->user['prvkey'] ?? '') . session_id() . $timestamp . $typename); + $sec_hash = hash('whirlpool', ($user['guid'] ?? '') . ($user['prvkey'] ?? '') . session_id() . $timestamp . $typename); return $timestamp . '.' . $sec_hash; } @@ -163,14 +163,14 @@ abstract class BaseModule $max_livetime = 10800; // 3 hours - $a = DI::app(); + $user = User::getById(DI::app()->getUserId(), ['guid', 'prvkey']); $x = explode('.', $hash); if (time() > (intval($x[0]) + $max_livetime)) { return false; } - $sec_hash = hash('whirlpool', ($a->user['guid'] ?? '') . ($a->user['prvkey'] ?? '') . session_id() . $x[0] . $typename); + $sec_hash = hash('whirlpool', ($user['guid'] ?? '') . ($user['prvkey'] ?? '') . session_id() . $x[0] . $typename); return ($sec_hash == $x[1]); } @@ -183,8 +183,7 @@ abstract class BaseModule public static function checkFormSecurityTokenRedirectOnError($err_redirect, $typename = '', $formname = 'form_security_token') { if (!self::checkFormSecurityToken($typename, $formname)) { - $a = DI::app(); - Logger::log('checkFormSecurityToken failed: user ' . $a->user['guid'] . ' - form element ' . $typename); + Logger::log('checkFormSecurityToken failed: user ' . DI::app()->getNickname() . ' - form element ' . $typename); Logger::log('checkFormSecurityToken failed: _REQUEST data: ' . print_r($_REQUEST, true), Logger::DATA); notice(self::getFormSecurityStandardErrorMessage()); DI::baseUrl()->redirect($err_redirect); @@ -194,8 +193,7 @@ abstract class BaseModule public static function checkFormSecurityTokenForbiddenOnError($typename = '', $formname = 'form_security_token') { if (!self::checkFormSecurityToken($typename, $formname)) { - $a = DI::app(); - Logger::log('checkFormSecurityToken failed: user ' . $a->user['guid'] . ' - form element ' . $typename); + Logger::log('checkFormSecurityToken failed: user ' . DI::app()->getNickname() . ' - form element ' . $typename); Logger::log('checkFormSecurityToken failed: _REQUEST data: ' . print_r($_REQUEST, true), Logger::DATA); throw new \Friendica\Network\HTTPException\ForbiddenException(); diff --git a/src/Content/Nav.php b/src/Content/Nav.php index 20b3a9325..dbc6d17a3 100644 --- a/src/Content/Nav.php +++ b/src/Content/Nav.php @@ -154,7 +154,7 @@ class Nav * Display the current site location as a navigation aid. */ - $myident = ((is_array($a->user) && isset($a->user['nickname'])) ? $a->user['nickname'] . '@' : ''); + $myident = !empty($a->getNickname() ? $a->getNickname() . '@' : ''); $sitelocation = $myident . substr(DI::baseUrl()->get($ssl_state), strpos(DI::baseUrl()->get($ssl_state), '//') + 2); @@ -188,18 +188,18 @@ class Nav if (local_user()) { if (!empty($a->user)) { // user menu - $nav['usermenu'][] = ['profile/' . $a->user['nickname'], DI::l10n()->t('Status'), '', DI::l10n()->t('Your posts and conversations')]; - $nav['usermenu'][] = ['profile/' . $a->user['nickname'] . '/profile', DI::l10n()->t('Profile'), '', DI::l10n()->t('Your profile page')]; - $nav['usermenu'][] = ['photos/' . $a->user['nickname'], DI::l10n()->t('Photos'), '', DI::l10n()->t('Your photos')]; - $nav['usermenu'][] = ['videos/' . $a->user['nickname'], DI::l10n()->t('Videos'), '', DI::l10n()->t('Your videos')]; + $nav['usermenu'][] = ['profile/' . $a->getNickname(), DI::l10n()->t('Status'), '', DI::l10n()->t('Your posts and conversations')]; + $nav['usermenu'][] = ['profile/' . $a->getNickname() . '/profile', DI::l10n()->t('Profile'), '', DI::l10n()->t('Your profile page')]; + $nav['usermenu'][] = ['photos/' . $a->getNickname(), DI::l10n()->t('Photos'), '', DI::l10n()->t('Your photos')]; + $nav['usermenu'][] = ['videos/' . $a->getNickname(), DI::l10n()->t('Videos'), '', DI::l10n()->t('Your videos')]; $nav['usermenu'][] = ['events/', DI::l10n()->t('Events'), '', DI::l10n()->t('Your events')]; $nav['usermenu'][] = ['notes/', DI::l10n()->t('Personal notes'), '', DI::l10n()->t('Your personal notes')]; // user info - $contact = DBA::selectFirst('contact', ['micro'], ['uid' => $a->user['uid'], 'self' => true]); + $contact = DBA::selectFirst('contact', ['micro'], ['uid' => $a->getUserId(), 'self' => true]); $userinfo = [ 'icon' => (DBA::isResult($contact) ? DI::baseUrl()->remove($contact['micro']) : Contact::DEFAULT_AVATAR_MICRO), - 'name' => $a->user['username'], + 'name' => $a->getUserValue('username'), ]; } else { DI::logger()->warning('Empty $a->user for local user', ['local_user' => local_user(), '$a' => $a]); @@ -274,7 +274,7 @@ class Nav if (local_user() && !empty($a->user)) { $nav['network'] = ['network', DI::l10n()->t('Network'), '', DI::l10n()->t('Conversations from your friends')]; - $nav['home'] = ['profile/' . $a->user['nickname'], DI::l10n()->t('Home'), '', DI::l10n()->t('Your posts and conversations')]; + $nav['home'] = ['profile/' . $a->getNickname(), DI::l10n()->t('Home'), '', DI::l10n()->t('Your posts and conversations')]; // Don't show notifications for public communities if (Session::get('page_flags', '') != User::PAGE_FLAGS_COMMUNITY) { diff --git a/src/Core/ACL.php b/src/Core/ACL.php index 297ea6e74..48f87b7be 100644 --- a/src/Core/ACL.php +++ b/src/Core/ACL.php @@ -26,12 +26,24 @@ use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Contact; use Friendica\Model\Group; +use Friendica\Model\User; /** * Handle ACL management and display */ class ACL { + /** + * Returns the default lock state for the given user id + * @param int $uid + * @return bool "true" if the default settings are non public + */ + public static function getLockstateForUserId(int $uid) + { + $user = User::getById($uid, ['allow_cid', 'allow_gid', 'deny_cid', 'deny_gid']); + return !empty($user['allow_cid']) || !empty($user['allow_gid']) || !empty($user['deny_cid']) || !empty($user['deny_gid']); + } + /** * Returns a select input tag for private message recipient * diff --git a/src/Factory/Notification/Introduction.php b/src/Factory/Notification/Introduction.php index ff9c028af..5bbdbd2eb 100644 --- a/src/Factory/Notification/Introduction.php +++ b/src/Factory/Notification/Introduction.php @@ -68,7 +68,7 @@ class Introduction extends BaseFactory $this->l10n = $l10n; $this->pConfig = $pConfig; $this->session = $session; - $this->nick = $app->user['nickname'] ?? ''; + $this->nick = $app->getNickname() ?? ''; } /** diff --git a/src/Model/Mail.php b/src/Model/Mail.php index 307724a26..7afd95547 100644 --- a/src/Model/Mail.php +++ b/src/Model/Mail.php @@ -173,7 +173,7 @@ class Mail $recip_host = substr($recip_host, 0, strpos($recip_host, '/')); $recip_handle = (($contact['addr']) ? $contact['addr'] : $contact['nick'] . '@' . $recip_host); - $sender_handle = $a->user['nickname'] . '@' . substr(DI::baseUrl(), strpos(DI::baseUrl(), '://') + 3); + $sender_handle = $a->getNickname() . '@' . substr(DI::baseUrl(), strpos(DI::baseUrl(), '://') + 3); $conv_guid = System::createUUID(); $convuri = $recip_handle . ':' . $conv_guid; diff --git a/src/Model/User.php b/src/Model/User.php index 55bbb8b84..49423ce9e 100644 --- a/src/Model/User.php +++ b/src/Model/User.php @@ -155,6 +155,8 @@ class User $system['region'] = ''; $system['country-name'] = ''; $system['net-publish'] = false; + $system['picdate'] = ''; + $system['theme'] = ''; // Ensure that the user contains data $user = DBA::selectFirst('user', ['prvkey', 'guid'], ['uid' => 0]); diff --git a/src/Module/BaseApi.php b/src/Module/BaseApi.php index 9d5c36f42..3e6f8a2a2 100644 --- a/src/Module/BaseApi.php +++ b/src/Module/BaseApi.php @@ -77,7 +77,7 @@ class BaseApi extends BaseModule $a = DI::app(); - if (!empty($a->user['uid']) && $a->user['uid'] != self::getCurrentUserID()) { + if (empty($a->getUserId()) || $a->getUserId() != self::getCurrentUserID()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); } } @@ -88,7 +88,7 @@ class BaseApi extends BaseModule $a = DI::app(); - if (!empty($a->user['uid']) && $a->user['uid'] != self::getCurrentUserID()) { + if (empty($a->getUserId()) || $a->getUserId() != self::getCurrentUserID()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); } } @@ -99,7 +99,7 @@ class BaseApi extends BaseModule $a = DI::app(); - if (!empty($a->user['uid']) && $a->user['uid'] != self::getCurrentUserID()) { + if (empty($a->getUserId()) || $a->getUserId() != self::getCurrentUserID()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); } } @@ -110,7 +110,7 @@ class BaseApi extends BaseModule $a = DI::app(); - if (!empty($a->user['uid']) && $a->user['uid'] != self::getCurrentUserID()) { + if (empty($a->getUserId()) || $a->getUserId() != self::getCurrentUserID()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); } } diff --git a/src/Module/BaseProfile.php b/src/Module/BaseProfile.php index 832c8fd2f..7ab7b8b7c 100644 --- a/src/Module/BaseProfile.php +++ b/src/Module/BaseProfile.php @@ -39,10 +39,8 @@ class BaseProfile extends BaseModule * @return string * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function getTabsHTML(App $a, string $current, bool $is_owner, array $profile) + public static function getTabsHTML(App $a, string $current, bool $is_owner, string $nickname, bool $hide_friends) { - $nickname = $profile['nickname']; - $baseProfileUrl = DI::baseUrl() . '/profile/' . $nickname; $tabs = [ @@ -123,7 +121,7 @@ class BaseProfile extends BaseModule ]; } - if (empty($profile['hide-friends'])) { + if (!$hide_friends) { $tabs[] = [ 'label' => DI::l10n()->t('Contacts'), 'url' => $baseProfileUrl . '/contacts', diff --git a/src/Module/Bookmarklet.php b/src/Module/Bookmarklet.php index fab9dbc6c..9db1cc138 100644 --- a/src/Module/Bookmarklet.php +++ b/src/Module/Bookmarklet.php @@ -60,10 +60,10 @@ class Bookmarklet extends BaseModule $x = [ 'is_owner' => true, - 'allow_location' => $app->user['allow_location'], - 'default_location' => $app->user['default-location'], - 'nickname' => $app->user['nickname'], - 'lockstate' => ((is_array($app->user) && ((strlen($app->user['allow_cid'])) || (strlen($app->user['allow_gid'])) || (strlen($app->user['deny_cid'])) || (strlen($app->user['deny_gid'])))) ? 'lock' : 'unlock'), + 'allow_location' => $app->getUserValue('allow_location'), + 'default_location' => $app->getUserValue('default-location'), + 'nickname' => $app->getNickname(), + 'lockstate' => ACL::getLockstateForUserId($app->getUserId()) ? 'lock' : 'unlock', 'default_perms' => ACL::getDefaultUserPermissions($app->user), 'acl' => ACL::getFullSelectorHTML(DI::page(), $app->user, true), 'bang' => '', diff --git a/src/Module/Contact/Poke.php b/src/Module/Contact/Poke.php index 955d4bab0..01d3ec138 100644 --- a/src/Module/Contact/Poke.php +++ b/src/Module/Contact/Poke.php @@ -55,10 +55,11 @@ class Poke extends BaseModule $private = !empty($_POST['private']) ? Model\Item::PRIVATE : Model\Item::PUBLIC; - $allow_cid = ($private ? '<' . $contact['id']. '>' : $a->user['allow_cid']); - $allow_gid = ($private ? '' : $a->user['allow_gid']); - $deny_cid = ($private ? '' : $a->user['deny_cid']); - $deny_gid = ($private ? '' : $a->user['deny_gid']); + $user = Model\User::getById($a->getUserId()); + $allow_cid = ($private ? '<' . $contact['id']. '>' : $user['allow_cid']); + $allow_gid = ($private ? '' : $user['allow_gid']); + $deny_cid = ($private ? '' : $user['deny_cid']); + $deny_gid = ($private ? '' : $user['deny_gid']); $actor = Contact::getById($a->getContactId()); diff --git a/src/Module/Conversation/Community.php b/src/Module/Conversation/Community.php index 18332fe27..8482bd3c7 100644 --- a/src/Module/Conversation/Community.php +++ b/src/Module/Conversation/Community.php @@ -130,10 +130,10 @@ class Community extends BaseModule if (Session::isAuthenticated()) { $x = [ 'is_owner' => true, - 'allow_location' => DI::app()->user['allow_location'], - 'default_location' => DI::app()->user['default-location'], - 'nickname' => DI::app()->user['nickname'], - 'lockstate' => (is_array(DI::app()->user) && (strlen(DI::app()->user['allow_cid']) || strlen(DI::app()->user['allow_gid']) || strlen(DI::app()->user['deny_cid']) || strlen(DI::app()->user['deny_gid'])) ? 'lock' : 'unlock'), + 'allow_location' => DI::app()->getUserValue('allow_location'), + 'default_location' => DI::app()->getUserValue('default-location'), + 'nickname' => DI::app()->getNickname(), + 'lockstate' => ACL::getLockstateForUserId(DI::app()->getUserId()) ? 'lock' : 'unlock', 'acl' => ACL::getFullSelectorHTML(DI::page(), DI::app()->user, true), 'bang' => '', 'visitor' => 'block', diff --git a/src/Module/Conversation/Network.php b/src/Module/Conversation/Network.php index 046c6de8c..6d758ca50 100644 --- a/src/Module/Conversation/Network.php +++ b/src/Module/Conversation/Network.php @@ -140,12 +140,10 @@ class Network extends BaseModule $x = [ 'is_owner' => true, - 'allow_location' => $a->user['allow_location'], - 'default_location' => $a->user['default-location'], - 'nickname' => $a->user['nickname'], - 'lockstate' => (self::$groupId || self::$forumContactId || self::$network || (is_array($a->user) && - (strlen($a->user['allow_cid']) || strlen($a->user['allow_gid']) || - strlen($a->user['deny_cid']) || strlen($a->user['deny_gid']))) ? 'lock' : 'unlock'), + 'allow_location' => $a->getUserValue('allow_location'), + 'default_location' => $a->getUserValue('default-location'), + 'nickname' => $a->getNickname(), + 'lockstate' => self::$groupId || self::$forumContactId || self::$network || ACL::getLockstateForUserId($a->getUserId()) ? 'lock' : 'unlock', 'default_perms' => ACL::getDefaultUserPermissions($a->user), 'acl' => ACL::getFullSelectorHTML(DI::page(), $a->user, true, $default_permissions), 'bang' => ((self::$groupId || self::$forumContactId || self::$network) ? '!' : ''), diff --git a/src/Module/Delegation.php b/src/Module/Delegation.php index abcc5679e..788b40268 100644 --- a/src/Module/Delegation.php +++ b/src/Module/Delegation.php @@ -109,7 +109,7 @@ class Delegation extends BaseModule $ret = []; Hook::callAll('home_init', $ret); - DI::baseUrl()->redirect('profile/' . DI::app()->user['nickname']); + DI::baseUrl()->redirect('profile/' . DI::app()->getNickname()); // NOTREACHED } @@ -130,7 +130,7 @@ class Delegation extends BaseModule $identities[$key]['thumb'] = Contact::getAvatarUrlForId($self['id'], Proxy::SIZE_THUMB, $self['updated']); - $identities[$key]['selected'] = ($identity['nickname'] === DI::app()->user['nickname']); + $identities[$key]['selected'] = ($identity['nickname'] === DI::app()->getNickname()); $condition = ["`uid` = ? AND `msg` != '' AND NOT (`type` IN (?, ?)) AND NOT `seen`", $identity['uid'], Notification\Type::INTRO, Notification\Type::MAIL]; $params = ['distinct' => true, 'expression' => 'parent']; diff --git a/src/Module/HCard.php b/src/Module/HCard.php index b8df84436..e5547188b 100644 --- a/src/Module/HCard.php +++ b/src/Module/HCard.php @@ -40,7 +40,7 @@ class HCard extends BaseModule if ((local_user()) && ($parameters['action'] ?? '') === 'view') { // A logged in user views a profile of a user - $nickname = $a->user['nickname']; + $nickname = $a->getNickname(); } elseif (empty($parameters['action'])) { // Show the profile hCard $nickname = $parameters['profile']; diff --git a/src/Module/Home.php b/src/Module/Home.php index 21d92676c..38a881f29 100644 --- a/src/Module/Home.php +++ b/src/Module/Home.php @@ -42,7 +42,7 @@ class Home extends BaseModule Hook::callAll('home_init', $ret); - if (local_user() && ($app->user['nickname'])) { + if (local_user() && ($app->getNickname())) { DI::baseUrl()->redirect('network'); } diff --git a/src/Module/Invite.php b/src/Module/Invite.php index 2c32963d5..d68fd053c 100644 --- a/src/Module/Invite.php +++ b/src/Module/Invite.php @@ -95,7 +95,7 @@ class Invite extends BaseModule $nmessage = $message; } - $additional_headers = 'From: "' . $app->user['email'] . '" <' . DI::emailer()->getSiteEmailAddress() . ">\n" + $additional_headers = 'From: "' . $app->getUserValue('email') . '" <' . DI::emailer()->getSiteEmailAddress() . ">\n" . 'Content-type: text/plain; charset=UTF-8' . "\n" . 'Content-transfer-encoding: 8bit'; @@ -168,7 +168,7 @@ class Invite extends BaseModule DI::l10n()->t('You are cordially invited to join me and other close friends on Friendica - and help us to create a better social web.') . "\r\n" . "\r\n" . $linkTxt . "\r\n" . "\r\n" . (($inviteOnly) ? DI::l10n()->t('You will need to supply this invitation code: $invite_code') . "\r\n" . "\r\n" : '') . DI::l10n()->t('Once you have registered, please connect with me via my profile page at:') - . "\r\n" . "\r\n" . DI::baseUrl()->get() . '/profile/' . $app->user['nickname'] + . "\r\n" . "\r\n" . DI::baseUrl()->get() . '/profile/' . $app->getNickname() . "\r\n" . "\r\n" . DI::l10n()->t('For more information about the Friendica project and why we feel it is important, please visit http://friendi.ca') . "\r\n" . "\r\n", ], '$submit' => DI::l10n()->t('Submit') diff --git a/src/Module/NoScrape.php b/src/Module/NoScrape.php index 1b97d047f..b308ae14c 100644 --- a/src/Module/NoScrape.php +++ b/src/Module/NoScrape.php @@ -45,7 +45,7 @@ class NoScrape extends BaseModule $which = $parameters['nick']; } elseif (local_user() && isset($parameters['profile']) && DI::args()->get(2) == 'view') { // view infos about a known profile (needs a login) - $which = $a->user['nickname']; + $which = $a->getNickname(); } else { System::jsonError(403, 'Authentication required'); } diff --git a/src/Module/Profile/Common.php b/src/Module/Profile/Common.php index ad30ab4ac..7138ac73f 100644 --- a/src/Module/Profile/Common.php +++ b/src/Module/Profile/Common.php @@ -62,7 +62,7 @@ class Common extends BaseProfile $a->redirect('profile/' . $nickname . '/contacts'); }; - $o = self::getTabsHTML($a, 'contacts', false, $profile); + $o = self::getTabsHTML($a, 'contacts', false, $profile['nickname'], $profile['hide-friends']); $tabs = self::getContactFilterTabs('profile/' . $nickname, 'common', $displayCommonTab); diff --git a/src/Module/Profile/Contacts.php b/src/Module/Profile/Contacts.php index 3307694e7..8ccf1f736 100644 --- a/src/Module/Profile/Contacts.php +++ b/src/Module/Profile/Contacts.php @@ -59,7 +59,7 @@ class Contacts extends Module\BaseProfile Nav::setSelected('home'); - $o = self::getTabsHTML($a, 'contacts', $is_owner, $profile); + $o = self::getTabsHTML($a, 'contacts', $is_owner, $profile['nickname'], $profile['hide-friends']); $tabs = self::getContactFilterTabs('profile/' . $nickname, $type, Session::isAuthenticated() && $profile['uid'] != local_user()); diff --git a/src/Module/Profile/Profile.php b/src/Module/Profile/Profile.php index a4fc69685..9f056f874 100644 --- a/src/Module/Profile/Profile.php +++ b/src/Module/Profile/Profile.php @@ -104,7 +104,7 @@ class Profile extends BaseProfile Nav::setSelected('home'); $is_owner = local_user() == $profile['uid']; - $o = self::getTabsHTML($a, 'profile', $is_owner, $profile); + $o = self::getTabsHTML($a, 'profile', $is_owner, $profile['nickname'], $profile['hide-friends']); if (!empty($profile['hidewall']) && !$is_owner && !$remote_contact_id) { notice(DI::l10n()->t('Access to this profile has been restricted.')); diff --git a/src/Module/Profile/Schedule.php b/src/Module/Profile/Schedule.php index b27da00c8..5c5581d57 100644 --- a/src/Module/Profile/Schedule.php +++ b/src/Module/Profile/Schedule.php @@ -58,7 +58,7 @@ class Schedule extends BaseProfile $a = DI::app(); - $o = self::getTabsHTML($a, 'schedule', true, $a->user); + $o = self::getTabsHTML($a, 'schedule', true, $a->getNickname(), false); $schedule = []; $delayed = DBA::select('delayed-post', [], ['uid' => local_user()]); diff --git a/src/Module/Profile/Status.php b/src/Module/Profile/Status.php index 30ac5f06f..94e93209e 100644 --- a/src/Module/Profile/Status.php +++ b/src/Module/Profile/Status.php @@ -110,7 +110,7 @@ class Status extends BaseProfile return ''; } - $o .= self::getTabsHTML($a, 'status', $is_owner, $profile); + $o .= self::getTabsHTML($a, 'status', $is_owner, $profile['nickname'], $profile['hide-friends']); $o .= Widget::commonFriendsVisitor($profile['uid'], $profile['nickname']); @@ -125,14 +125,9 @@ class Status extends BaseProfile $x = [ 'is_owner' => $is_owner, 'allow_location' => ($is_owner || $commvisitor) && $profile['allow_location'], - 'default_location' => $is_owner ? $a->user['default-location'] : '', + 'default_location' => $is_owner ? $a->getUserValue('default-location') : '', 'nickname' => $profile['nickname'], - 'lockstate' => is_array($a->user) - && (strlen($a->user['allow_cid']) - || strlen($a->user['allow_gid']) - || strlen($a->user['deny_cid']) - || strlen($a->user['deny_gid']) - ) ? 'lock' : 'unlock', + 'lockstate' => ACL::getLockstateForUserId($a->getUserId()) ? 'lock' : 'unlock', 'acl' => $is_owner ? ACL::getFullSelectorHTML(DI::page(), $a->user, true) : '', 'bang' => '', 'visitor' => $is_owner || $commvisitor ? 'block' : 'none', diff --git a/src/Module/Settings/Delegation.php b/src/Module/Settings/Delegation.php index 745879ec5..89bc78b32 100644 --- a/src/Module/Settings/Delegation.php +++ b/src/Module/Settings/Delegation.php @@ -38,7 +38,7 @@ class Delegation extends BaseSettings { public static function post(array $parameters = []) { - if (!local_user() || !empty(DI::app()->user['uid']) && DI::app()->user['uid'] != local_user()) { + if (!local_user() || empty(DI::app()->getUserId()) || DI::app()->getUserId() != local_user()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); } diff --git a/src/Module/Settings/Display.php b/src/Module/Settings/Display.php index 8d3bf77db..a82c992c4 100644 --- a/src/Module/Settings/Display.php +++ b/src/Module/Settings/Display.php @@ -38,13 +38,13 @@ class Display extends BaseSettings { public static function post(array $parameters = []) { - if (!local_user() || !empty(DI::app()->user['uid']) && DI::app()->user['uid'] != local_user()) { + if (!local_user() || empty(DI::app()->getUserId()) || DI::app()->getUserId() != local_user()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); } self::checkFormSecurityTokenRedirectOnError('/settings/display', 'settings_display'); - $theme = !empty($_POST['theme']) ? Strings::escapeTags(trim($_POST['theme'])) : DI::app()->user['theme']; + $theme = !empty($_POST['theme']) ? Strings::escapeTags(trim($_POST['theme'])) : DI::app()->getUserValue('theme'); $mobile_theme = !empty($_POST['mobile_theme']) ? Strings::escapeTags(trim($_POST['mobile_theme'])) : ''; $nosmile = !empty($_POST['nosmile']) ? intval($_POST['nosmile']) : 0; $first_day_of_week = !empty($_POST['first_day_of_week']) ? intval($_POST['first_day_of_week']) : 0; @@ -92,7 +92,7 @@ class Display extends BaseSettings DI::pConfig()->set(local_user(), 'system', 'first_day_of_week' , $first_day_of_week); if (in_array($theme, Theme::getAllowedList())) { - if ($theme == DI::app()->user['theme']) { + if ($theme == DI::app()->getUserValue('theme')) { // call theme_post only if theme has not been changed if (($themeconfigfile = Theme::getConfigFile($theme)) !== null) { require_once $themeconfigfile; @@ -152,7 +152,7 @@ class Display extends BaseSettings } } - $theme_selected = DI::app()->user['theme'] ?: $default_theme; + $theme_selected = DI::app()->getUserValue('theme') ?: $default_theme; $mobile_theme_selected = Session::get('mobile-theme', $default_mobile_theme); $itemspage_network = intval(DI::pConfig()->get(local_user(), 'system', 'itemspage_network')); diff --git a/src/Module/Settings/Profile/Index.php b/src/Module/Settings/Profile/Index.php index 35740a0a7..86e23234d 100644 --- a/src/Module/Settings/Profile/Index.php +++ b/src/Module/Settings/Profile/Index.php @@ -207,7 +207,7 @@ class Index extends BaseSettings '$baseurl' => DI::baseUrl()->get(true), ]); - $personal_account = !in_array($a->user['page-flags'], [User::PAGE_FLAGS_COMMUNITY, User::PAGE_FLAGS_PRVGROUP]); + $personal_account = !in_array($profile['page-flags'], [User::PAGE_FLAGS_COMMUNITY, User::PAGE_FLAGS_PRVGROUP]); $tpl = Renderer::getMarkupTemplate('settings/profile/index.tpl'); $o .= Renderer::replaceMacros($tpl, [ @@ -220,7 +220,7 @@ class Index extends BaseSettings '$banner' => DI::l10n()->t('Edit Profile Details'), '$submit' => DI::l10n()->t('Submit'), '$profpic' => DI::l10n()->t('Change Profile Photo'), - '$profpiclink' => '/photos/' . $a->user['nickname'], + '$profpiclink' => '/photos/' . $profile['nickname'], '$viewprof' => DI::l10n()->t('View Profile'), '$lbl_personal_section' => DI::l10n()->t('Personal'), @@ -232,16 +232,16 @@ class Index extends BaseSettings '$lbl_profile_photo' => DI::l10n()->t('Upload Profile Photo'), '$baseurl' => DI::baseUrl()->get(true), - '$nickname' => $a->user['nickname'], + '$nickname' => $profile['nickname'], '$name' => ['name', DI::l10n()->t('Display name:'), $profile['name']], '$about' => ['about', DI::l10n()->t('Description:'), $profile['about']], - '$dob' => Temporal::getDateofBirthField($profile['dob'], $a->user['timezone']), + '$dob' => Temporal::getDateofBirthField($profile['dob'], $profile['timezone']), '$address' => ['address', DI::l10n()->t('Street Address:'), $profile['address']], '$locality' => ['locality', DI::l10n()->t('Locality/City:'), $profile['locality']], '$region' => ['region', DI::l10n()->t('Region/State:'), $profile['region']], '$postal_code' => ['postal_code', DI::l10n()->t('Postal/Zip Code:'), $profile['postal-code']], '$country_name' => ['country_name', DI::l10n()->t('Country:'), $profile['country-name']], - '$age' => ((intval($profile['dob'])) ? '(' . DI::l10n()->t('Age: ') . DI::l10n()->tt('%d year old', '%d years old', Temporal::getAgeByTimezone($profile['dob'], $a->user['timezone'])) . ')' : ''), + '$age' => ((intval($profile['dob'])) ? '(' . DI::l10n()->t('Age: ') . DI::l10n()->tt('%d year old', '%d years old', Temporal::getAgeByTimezone($profile['dob'], $profile['timezone'])) . ')' : ''), '$xmpp' => ['xmpp', DI::l10n()->t('XMPP (Jabber) address:'), $profile['xmpp'], DI::l10n()->t('The XMPP address will be propagated to your contacts so that they can follow you.')], '$homepage' => ['homepage', DI::l10n()->t('Homepage URL:'), $profile['homepage']], '$pub_keywords' => ['pub_keywords', DI::l10n()->t('Public Keywords:'), $profile['pub_keywords'], DI::l10n()->t('(Used for suggesting potential friends, can be seen by others)')], @@ -251,7 +251,7 @@ class Index extends BaseSettings

Reorder by dragging the field title.

Empty the label field to remove a custom field.

Non-public fields can only be seen by the selected Friendica contacts or the Friendica contacts in the selected groups.

", - 'profile/' . $a->user['nickname'] + 'profile/' . $profile['nickname'] ), '$custom_fields' => $custom_fields, ]); diff --git a/src/Module/Settings/Profile/Photo/Crop.php b/src/Module/Settings/Profile/Photo/Crop.php index adbf83311..0d78ae4c3 100644 --- a/src/Module/Settings/Profile/Photo/Crop.php +++ b/src/Module/Settings/Profile/Photo/Crop.php @@ -57,7 +57,7 @@ class Crop extends BaseSettings $selectionW = intval($_POST['width'] ?? 0); $selectionH = intval($_POST['height'] ?? 0); - $path = 'profile/' . DI::app()->user['nickname']; + $path = 'profile/' . DI::app()->getNickname(); $base_image = Photo::selectFirst([], ['resource-id' => $resource_id, 'uid' => local_user(), 'scale' => $scale]); if (DBA::isResult($base_image)) { @@ -185,7 +185,7 @@ class Crop extends BaseSettings info(DI::l10n()->t('Profile picture successfully updated.')); - DI::baseUrl()->redirect('profile/' . DI::app()->user['nickname']); + DI::baseUrl()->redirect('profile/' . DI::app()->getNickname()); } $Image = Photo::getImageForPhoto($photos[0]); diff --git a/src/Module/Settings/Profile/Photo/Index.php b/src/Module/Settings/Profile/Photo/Index.php index dee562e43..f53f3bd53 100644 --- a/src/Module/Settings/Profile/Photo/Index.php +++ b/src/Module/Settings/Profile/Photo/Index.php @@ -134,7 +134,7 @@ class Index extends BaseSettings DI::l10n()->t('or'), ($newuser) ? '' . DI::l10n()->t('skip this step') . '' - : '' + : '' . DI::l10n()->t('select a photo from your photo albums') . '' ), ]); diff --git a/src/Module/Settings/UserExport.php b/src/Module/Settings/UserExport.php index 740ec0ec0..e9f999536 100644 --- a/src/Module/Settings/UserExport.php +++ b/src/Module/Settings/UserExport.php @@ -90,7 +90,7 @@ class UserExport extends BaseSettings */ public static function rawContent(array $parameters = []) { - if (!local_user() || !empty(DI::app()->user['uid']) && DI::app()->user['uid'] != local_user()) { + if (!local_user() || empty(DI::app()->getUserId()) || DI::app()->getUserId() != local_user()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); } diff --git a/src/Object/EMail/ItemCCEMail.php b/src/Object/EMail/ItemCCEMail.php index 467cd09ab..7c3c3271a 100644 --- a/src/Object/EMail/ItemCCEMail.php +++ b/src/Object/EMail/ItemCCEMail.php @@ -36,20 +36,20 @@ class ItemCCEMail extends Email { public function __construct(App $a, L10n $l10n, BaseURL $baseUrl, array $item, string $toAddress, string $authorThumb) { - $disclaimer = '
' . $l10n->t('This message was sent to you by %s, a member of the Friendica social network.', $a->user['username']) + $disclaimer = '
' . $l10n->t('This message was sent to you by %s, a member of the Friendica social network.', $a->getUserValue('username')) . '
'; - $disclaimer .= $l10n->t('You may visit them online at %s', $baseUrl . '/profile/' . $a->user['nickname']) . EOL; + $disclaimer .= $l10n->t('You may visit them online at %s', $baseUrl . '/profile/' . $a->getNickname()) . EOL; $disclaimer .= $l10n->t('Please contact the sender by replying to this post if you do not wish to receive these messages.') . EOL; if (!$item['title'] == '') { $subject = EmailProtocol::encodeHeader($item['title'], 'UTF-8'); } else { - $subject = EmailProtocol::encodeHeader('[Friendica]' . ' ' . $l10n->t('%s posted an update.', $a->user['username']), 'UTF-8'); + $subject = EmailProtocol::encodeHeader('[Friendica]' . ' ' . $l10n->t('%s posted an update.', $a->getUserValue('username')), 'UTF-8'); } - $link = '' . $a->user['username'] . '

'; + $link = '' . $a->getUserValue('username') . '

'; $html = Item::prepareBody($item); $message = '' . $link . $html . $disclaimer . '';; - parent::__construct($a->user['username'], $a->user['email'], $a->user['email'], $toAddress, + parent::__construct($a->getUserValue('username'), $a->getUserValue('email'), $a->getUserValue('email'), $toAddress, $subject, $message, HTML::toPlaintext($html . $disclaimer)); } } diff --git a/src/Object/Post.php b/src/Object/Post.php index a7071ad79..8ffe4bbaf 100644 --- a/src/Object/Post.php +++ b/src/Object/Post.php @@ -870,7 +870,7 @@ class Post return ''; } - $owner = User::getOwnerDataById($a->user['uid']); + $owner = User::getOwnerDataById($a->getUserId()); if (!Feature::isEnabled(local_user(), 'explicit_mentions')) { return ''; diff --git a/src/Security/Authentication.php b/src/Security/Authentication.php index ebeadcc37..a0b927026 100644 --- a/src/Security/Authentication.php +++ b/src/Security/Authentication.php @@ -353,10 +353,12 @@ class Authentication } } + $a->setUserId($user_record['uid']); + $a->setNickname($user_record['nickname']); $a->user = $user_record; if ($login_initial) { - Hook::callAll('logged_in', $a->user); + Hook::callAll('logged_in', $user_record); if (DI::module()->getName() !== 'home' && $this->session->exists('return_path')) { $this->baseUrl->redirect($this->session->get('return_path')); diff --git a/src/Security/BasicAuth.php b/src/Security/BasicAuth.php index 070c6500d..f2154ae8a 100644 --- a/src/Security/BasicAuth.php +++ b/src/Security/BasicAuth.php @@ -184,7 +184,7 @@ class BasicAuth Session::set('allow_api', true); - Hook::callAll('logged_in', $a->user); + Hook::callAll('logged_in', $record); if (Session::get('allow_api')) { self::$current_user_id = local_user(); diff --git a/view/theme/frio/theme.php b/view/theme/frio/theme.php index 2f6542d30..bf0875e49 100644 --- a/view/theme/frio/theme.php +++ b/view/theme/frio/theme.php @@ -201,8 +201,8 @@ function frio_remote_nav(App $a, array &$nav_info) // since $userinfo isn't available for the hook we write it to the nav array // this isn't optimal because the contact query will be done now twice $fields = ['id', 'url', 'avatar', 'micro', 'name', 'nick', 'baseurl']; - if (local_user() && !empty($a->user['uid'])) { - $remoteUser = Contact::selectFirst($fields, ['uid' => $a->user['uid'], 'self' => true]); + if (local_user() && !empty($a->getUserId())) { + $remoteUser = Contact::selectFirst($fields, ['uid' => $a->getUserId(), 'self' => true]); } elseif (!local_user() && remote_user()) { $remoteUser = Contact::getById(remote_user(), $fields); $nav_info['nav']['remote'] = DI::l10n()->t('Guest'); diff --git a/view/theme/vier/theme.php b/view/theme/vier/theme.php index d28c8a325..14a744d5a 100644 --- a/view/theme/vier/theme.php +++ b/view/theme/vier/theme.php @@ -27,7 +27,7 @@ function vier_init(App $a) $args = DI::args(); - if ($args->get(0) === 'profile' && $args->get(1) === ($a->user['nickname'] ?? '') || $args->get(0) === 'network' && local_user() + if ($args->get(0) === 'profile' && $args->get(1) === ($a->getNickname() ?? '') || $args->get(0) === 'network' && local_user() ) { vier_community_info();