From 2502a9192d59ead8fc1131e6bb56e22ad39d5d22 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 24 Jul 2021 10:09:39 +0000 Subject: [PATCH] Many more app-variables removed --- boot.php | 15 ++-- include/conversation.php | 1 - mod/cal.php | 57 +++++---------- mod/display.php | 14 +++- mod/editpost.php | 1 - mod/events.php | 2 +- mod/notes.php | 2 +- mod/photos.php | 126 +++++++++++++++----------------- mod/videos.php | 87 +++++++++------------- src/App.php | 19 ++--- src/App/Page.php | 1 - src/Content/Text/HTML.php | 16 ---- src/Content/Widget.php | 13 ++-- src/Content/Widget/VCard.php | 6 ++ src/Core/Renderer.php | 1 - src/Model/Profile.php | 46 +++++------- src/Module/BaseProfile.php | 8 +- src/Module/Contact.php | 12 +-- src/Module/Debug/Localtime.php | 10 +-- src/Module/HCard.php | 20 ++--- src/Module/Item/Compose.php | 1 - src/Module/Profile/Common.php | 15 ++-- src/Module/Profile/Contacts.php | 18 ++--- src/Module/Profile/Profile.php | 80 ++++++++++---------- src/Module/Profile/Status.php | 72 +++++++++--------- src/Module/RemoteFollow.php | 28 +++---- src/Module/Update/Profile.php | 32 ++++---- src/Object/Post.php | 1 - src/Object/Thread.php | 4 +- src/Security/Authentication.php | 3 +- 30 files changed, 310 insertions(+), 401 deletions(-) diff --git a/boot.php b/boot.php index b3b560a096..ecf59eb2fc 100644 --- a/boot.php +++ b/boot.php @@ -297,13 +297,11 @@ function notice($s) return; } - $a = DI::app(); if (empty($_SESSION['sysmsg'])) { $_SESSION['sysmsg'] = []; } - if ($a->interactive) { - $_SESSION['sysmsg'][] = $s; - } + + $_SESSION['sysmsg'][] = $s; } /** @@ -315,14 +313,15 @@ function notice($s) */ function info($s) { - $a = DI::app(); + if (empty($_SESSION)) { + return; + } if (empty($_SESSION['sysmsg_info'])) { $_SESSION['sysmsg_info'] = []; } - if ($a->interactive) { - $_SESSION['sysmsg_info'][] = $s; - } + + $_SESSION['sysmsg_info'][] = $s; } function feed_birthday($uid, $tz) diff --git a/include/conversation.php b/include/conversation.php index c46aeff992..32e705290d 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -1134,7 +1134,6 @@ function status_editor(App $a, $x, $notes_cid = 0, $popup = false) '$preview' => DI::l10n()->t('Preview'), '$jotplugins' => $jotplugins, '$notes_cid' => $notes_cid, - '$sourceapp' => DI::l10n()->t($a->sourcename), '$cancel' => DI::l10n()->t('Cancel'), '$rand_num' => Crypto::randomDigits(12), diff --git a/mod/cal.php b/mod/cal.php index e1cf91aa68..d4830842bb 100644 --- a/mod/cal.php +++ b/mod/cal.php @@ -25,13 +25,11 @@ use Friendica\App; use Friendica\Content\Nav; -use Friendica\Content\Text\BBCode; use Friendica\Content\Widget; use Friendica\Core\Renderer; use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; -use Friendica\Model\Contact; use Friendica\Model\Event; use Friendica\Model\Item; use Friendica\Model\User; @@ -52,52 +50,34 @@ function cal_init(App $a) Nav::setSelected('events'); - $nick = $a->argv[1]; - $user = DBA::selectFirst('user', [], ['nickname' => $nick, 'blocked' => false]); - if (!DBA::isResult($user)) { - throw new HTTPException\NotFoundException(); - } - - $a->data['user'] = $user; - $a->profile_uid = $user['uid']; - // if it's a json request abort here becaus we don't // need the widget data if (!empty($a->argv[2]) && ($a->argv[2] === 'json')) { return; } - $a->profile = User::getOwnerDataByNick($nick); - if (empty($a->profile)) { + $owner = User::getOwnerDataByNick($a->argv[1]); + if (empty($owner)) { throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.')); } - $account_type = Contact::getAccountType($a->profile); - - $tpl = Renderer::getMarkupTemplate('widget/vcard.tpl'); - - $vcard_widget = Renderer::replaceMacros($tpl, [ - '$name' => $a->profile['name'], - '$photo' => $a->profile['photo'], - '$addr' => $a->profile['addr'] ?: '', - '$account_type' => $account_type, - '$about' => BBCode::convert($a->profile['about']), - ]); - - $cal_widget = Widget\CalendarExport::getHTML($user['uid']); - if (empty(DI::page()['aside'])) { DI::page()['aside'] = ''; } - DI::page()['aside'] .= $vcard_widget; - DI::page()['aside'] .= $cal_widget; + DI::page()['aside'] .= Widget\VCard::getHTML($owner); + DI::page()['aside'] .= Widget\CalendarExport::getHTML($owner['uid']); return; } function cal_content(App $a) { + $owner = User::getOwnerDataByNick($a->argv[1]); + if (empty($owner)) { + throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.')); + } + Nav::setSelected('events'); // get the translation strings for the callendar @@ -110,7 +90,7 @@ function cal_content(App $a) $htpl = Renderer::getMarkupTemplate('event_head.tpl'); DI::page()['htmlhead'] .= Renderer::replaceMacros($htpl, [ - '$module_url' => '/cal/' . $a->data['user']['nickname'], + '$module_url' => '/cal/' . $owner['nickname'], '$modparams' => 2, '$i18n' => $i18n, ]); @@ -127,19 +107,16 @@ function cal_content(App $a) } // Setup permissions structures - $owner_uid = intval($a->data['user']['uid']); - $nick = $a->data['user']['nickname']; - if (empty($a->profile)) { - throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.')); - } + $owner_uid = intval($owner['uid']); + $nick = $owner['nickname']; - $contact_id = Session::getRemoteContactID($a->profile['uid']); + $contact_id = Session::getRemoteContactID($owner['uid']); - $remote_contact = $contact_id && DBA::exists('contact', ['id' => $contact_id, 'uid' => $a->profile['uid']]); + $remote_contact = $contact_id && DBA::exists('contact', ['id' => $contact_id, 'uid' => $owner['uid']]); - $is_owner = local_user() == $a->profile['uid']; + $is_owner = local_user() == $owner['uid']; - if ($a->profile['hidewall'] && !$is_owner && !$remote_contact) { + if ($owner['hidewall'] && !$is_owner && !$remote_contact) { notice(DI::l10n()->t('Access to this profile has been restricted.')); return; } @@ -150,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, $a->data['user']['nickname']); + $tabs = BaseProfile::getTabsHTML($a, 'cal', false, $owner); // The view mode part is similiar to /mod/events.php if ($mode == 'view') { diff --git a/mod/display.php b/mod/display.php index b51768e800..fd7ef4ae85 100644 --- a/mod/display.php +++ b/mod/display.php @@ -32,6 +32,7 @@ use Friendica\DI; use Friendica\Model\Contact; use Friendica\Model\Item; use Friendica\Model\Post; +use Friendica\Model\User; use Friendica\Module\ActivityPub\Objects; use Friendica\Network\HTTPException; use Friendica\Protocol\ActivityPub; @@ -134,6 +135,7 @@ function display_fetchauthor($a, $item) $profiledata = []; $profiledata['uid'] = -1; + $profiledata['id'] = -1; $profiledata['nickname'] = $author['nick']; $profiledata['name'] = $author['name']; $profiledata['picdate'] = ''; @@ -189,9 +191,9 @@ function display_content(App $a, $update = false, $update_uid = 0) $item = Post::selectFirst(['uid', 'parent-uri-id'], ['uri-id' => $uri_id, 'uid' => $update_uid]); if (!empty($item)) { if ($item['uid'] != 0) { - $a->profile = ['uid' => intval($item['uid'])]; + $a->profile_owner = intval($item['uid']); } else { - $a->profile = ['uid' => intval($update_uid)]; + $a->profile_owner = intval($update_uid); } $parent_uri_id = $item['parent-uri-id']; } @@ -273,14 +275,18 @@ function display_content(App $a, $update = false, $update_uid = 0) $page_uid = $item['uid']; } - $page_contact = DBA::selectFirst('contact', [], ['self' => true, 'uid' => $page_uid]); + $page_contact = DBA::selectFirst('contact', ['id', 'url', 'network', 'name'], ['self' => true, 'uid' => $page_uid]); if (DBA::isResult($page_contact)) { + // "$a->page_contact" is only used in "checkWallToWall" in Post.php. + // It is used for the wall post feature that has its issues. + // It can't work with AP or Diaspora since the creator can't sign the post with their private key. $a->page_contact = $page_contact; + $page_user = User::getById($page_uid); } $is_owner = (local_user() && (in_array($page_uid, [local_user(), 0])) ? true : false); - if (!empty($a->profile['hidewall']) && !$is_owner && !$is_remote_contact) { + if (!empty($page_user['hidewall']) && !$is_owner && !$is_remote_contact) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Access to this profile has been restricted.')); } diff --git a/mod/editpost.php b/mod/editpost.php index 6f80bac0c1..ee72b1e64e 100644 --- a/mod/editpost.php +++ b/mod/editpost.php @@ -124,7 +124,6 @@ function editpost_content(App $a) '$profile_uid' => $_SESSION['uid'], '$preview' => DI::l10n()->t('Preview'), '$jotplugins' => $jotplugins, - '$sourceapp' => DI::l10n()->t($a->sourcename), '$cancel' => DI::l10n()->t('Cancel'), '$rand_num' => Crypto::randomDigits(12), diff --git a/mod/events.php b/mod/events.php index aabb608eb7..43c79dd9bc 100644 --- a/mod/events.php +++ b/mod/events.php @@ -280,7 +280,7 @@ function events_content(App $a) $tabs = ''; // tabs if ($a->theme_events_in_profile) { - $tabs = BaseProfile::getTabsHTML($a, 'events', true); + $tabs = BaseProfile::getTabsHTML($a, 'events', true, $a->user); } $mode = 'view'; diff --git a/mod/notes.php b/mod/notes.php index 2b8c20783a..8b9da39696 100644 --- a/mod/notes.php +++ b/mod/notes.php @@ -45,7 +45,7 @@ function notes_content(App $a, $update = false) return; } - $o = BaseProfile::getTabsHTML($a, 'notes', true); + $o = BaseProfile::getTabsHTML($a, 'notes', true, $a->user); if (!$update) { $o .= '

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

'; diff --git a/mod/photos.php b/mod/photos.php index dcea99991a..37d3c467b4 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -24,6 +24,7 @@ use Friendica\Content\Feature; use Friendica\Content\Nav; use Friendica\Content\Pager; use Friendica\Content\Text\BBCode; +use Friendica\Content\Widget; use Friendica\Core\ACL; use Friendica\Core\Addon; use Friendica\Core\Hook; @@ -51,6 +52,7 @@ use Friendica\Security\Security; use Friendica\Util\Strings; use Friendica\Util\Temporal; use Friendica\Util\XML; +use Friendica\Network\HTTPException; function photos_init(App $a) { @@ -61,34 +63,13 @@ function photos_init(App $a) { Nav::setSelected('home'); if ($a->argc > 1) { - $nick = $a->argv[1]; - $user = DBA::selectFirst('user', [], ['nickname' => $nick, 'blocked' => false]); + $owner = User::getOwnerDataByNick($a->argv[1]); - if (!DBA::isResult($user)) { - return; - } + $is_owner = (local_user() && (local_user() == $owner['uid'])); - $a->data['user'] = $user; - $a->profile_uid = $user['uid']; - $is_owner = (local_user() && (local_user() == $a->profile_uid)); + $albums = Photo::getAlbums($owner['uid']); - $profile = User::getOwnerDataByNick($nick); - - $account_type = Contact::getAccountType($profile); - - $tpl = Renderer::getMarkupTemplate('widget/vcard.tpl'); - - $vcard_widget = Renderer::replaceMacros($tpl, [ - '$name' => $profile['name'], - '$photo' => $profile['photo'], - '$addr' => $profile['addr'] ?? '', - '$account_type' => $account_type, - '$about' => BBCode::convert($profile['about']), - ]); - - $albums = Photo::getAlbums($a->data['user']['uid']); - - $albums_visible = ((intval($a->data['user']['hidewall']) && !Session::isAuthenticated()) ? false : true); + $albums_visible = ((intval($owner['hidewall']) && !Session::isAuthenticated()) ? false : true); // add various encodings to the array so we can just loop through and pick them out in a template $ret = ['success' => false]; @@ -103,12 +84,12 @@ function photos_init(App $a) { $ret['albums'] = []; foreach ($albums as $k => $album) { //hide profile photos to others - if (!$is_owner && !Session::getRemoteContactID($a->profile_uid) && ($album['album'] == DI::l10n()->t('Profile Photos'))) + if (!$is_owner && !Session::getRemoteContactID($owner['uid']) && ($album['album'] == DI::l10n()->t('Profile Photos'))) continue; $entry = [ 'text' => $album['album'], 'total' => $album['total'], - 'url' => 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album['album']), + 'url' => 'photos/' . $owner['nickname'] . '/album/' . bin2hex($album['album']), 'urlencode' => urlencode($album['album']), 'bin2hex' => bin2hex($album['album']) ]; @@ -116,7 +97,7 @@ function photos_init(App $a) { } } - if (local_user() && $a->data['user']['uid'] == local_user()) { + if (local_user() && $owner['uid'] == local_user()) { $can_post = true; } else { $can_post = false; @@ -124,11 +105,11 @@ function photos_init(App $a) { if ($ret['success']) { $photo_albums_widget = Renderer::replaceMacros(Renderer::getMarkupTemplate('photo_albums.tpl'), [ - '$nick' => $a->data['user']['nickname'], + '$nick' => $owner['nickname'], '$title' => DI::l10n()->t('Photo Albums'), '$recent' => DI::l10n()->t('Recent Photos'), '$albums' => $ret['albums'], - '$upload' => [DI::l10n()->t('Upload New Photos'), 'photos/' . $a->data['user']['nickname'] . '/upload'], + '$upload' => [DI::l10n()->t('Upload New Photos'), 'photos/' . $owner['nickname'] . '/upload'], '$can_post' => $can_post ]); } @@ -137,7 +118,7 @@ function photos_init(App $a) { DI::page()['aside'] = ''; } - DI::page()['aside'] .= $vcard_widget; + DI::page()['aside'] .= Widget\VCard::getHTML($owner); if (!empty($photo_albums_widget)) { DI::page()['aside'] .= $photo_albums_widget; @@ -155,13 +136,18 @@ function photos_init(App $a) { function photos_post(App $a) { + $user = User::getByNickname($a->argv[1]); + if (!DBA::isResult($user)) { + throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.')); + } + $phototypes = Images::supportedTypes(); $can_post = false; $visitor = 0; - $page_owner_uid = intval($a->data['user']['uid']); - $community_page = $a->data['user']['page-flags'] == User::PAGE_FLAGS_COMMUNITY; + $page_owner_uid = intval($user['uid']); + $community_page = $user['page-flags'] == User::PAGE_FLAGS_COMMUNITY; if (local_user() && (local_user() == $page_owner_uid)) { $can_post = true; @@ -203,7 +189,7 @@ function photos_post(App $a) if ($a->argc > 3 && $a->argv[2] === 'album') { if (!Strings::isHex($a->argv[3])) { - DI::baseUrl()->redirect('photos/' . $a->data['user']['nickname'] . '/album'); + DI::baseUrl()->redirect('photos/' . $user['nickname'] . '/album'); } $album = hex2bin($a->argv[3]); @@ -219,13 +205,13 @@ function photos_post(App $a) if (!DBA::isResult($r)) { notice(DI::l10n()->t('Album not found.')); - DI::baseUrl()->redirect('photos/' . $a->data['user']['nickname'] . '/album'); + DI::baseUrl()->redirect('photos/' . $user['nickname'] . '/album'); return; // NOTREACHED } // Check if the user has responded to a delete confirmation query if (!empty($_REQUEST['canceled'])) { - DI::baseUrl()->redirect('photos/' . $a->data['user']['nickname'] . '/album/' . $a->argv[3]); + DI::baseUrl()->redirect('photos/' . $user['nickname'] . '/album/' . $a->argv[3]); } // RENAME photo album @@ -282,7 +268,7 @@ function photos_post(App $a) } } - DI::baseUrl()->redirect('photos/' . $a->data['user']['nickname'] . '/album'); + DI::baseUrl()->redirect('photos/' . $user['nickname'] . '/album'); } if ($a->argc > 3 && $a->argv[2] === 'image') { @@ -419,7 +405,7 @@ function photos_post(App $a) $arr['visible'] = $visibility; $arr['origin'] = 1; - $arr['body'] = '[url=' . DI::baseUrl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $photo['resource-id'] . ']' + $arr['body'] = '[url=' . DI::baseUrl() . '/photos/' . $user['nickname'] . '/image/' . $photo['resource-id'] . ']' . '[img]' . DI::baseUrl() . '/photo/' . $photo['resource-id'] . '-' . $photo['scale'] . '.'. $ext . '[/img]' . '[/url]'; @@ -523,7 +509,7 @@ function photos_post(App $a) if (!empty($item['uri-id'])) { Tag::store($item['uri-id'], Tag::MENTION, $newname, $profile); - } + } } } elseif (strpos($tag, '#') === 0) { $tagname = substr($tag, 1); @@ -831,12 +817,17 @@ function photos_content(App $a) // photos/name/image/xxxxx/edit // photos/name/image/xxxxx/drop + $user = User::getByNickname($a->argv[1]); + if (!DBA::isResult($user)) { + throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.')); + } + if (DI::config()->get('system', 'block_public') && !Session::isAuthenticated()) { notice(DI::l10n()->t('Public access denied.')); return; } - if (empty($a->data['user'])) { + if (empty($user)) { notice(DI::l10n()->t('No photos selected')); return; } @@ -871,9 +862,9 @@ function photos_content(App $a) $edit = ''; $drop = ''; - $owner_uid = $a->data['user']['uid']; + $owner_uid = $user['uid']; - $community_page = (($a->data['user']['page-flags'] == User::PAGE_FLAGS_COMMUNITY) ? true : false); + $community_page = (($user['page-flags'] == User::PAGE_FLAGS_COMMUNITY) ? true : false); if (local_user() && (local_user() == $owner_uid)) { $can_post = true; @@ -902,7 +893,7 @@ function photos_content(App $a) $contact = $a->contact; } - if ($a->data['user']['hidewall'] && (local_user() != $owner_uid) && !$remote_contact) { + if ($user['hidewall'] && (local_user() != $owner_uid) && !$remote_contact) { notice(DI::l10n()->t('Access to this item is restricted.')); return; } @@ -913,7 +904,7 @@ function photos_content(App $a) // tabs $is_owner = (local_user() && (local_user() == $owner_uid)); - $o .= BaseProfile::getTabsHTML($a, 'photos', $is_owner, $a->data['user']['nickname']); + $o .= BaseProfile::getTabsHTML($a, 'photos', $is_owner, $user); // Display upload form if ($datatype === 'upload') { @@ -939,7 +930,7 @@ function photos_content(App $a) $uploader = ''; - $ret = ['post_url' => 'photos/' . $a->data['user']['nickname'], + $ret = ['post_url' => 'photos/' . $user['nickname'], 'addon_text' => $uploader, 'default_upload' => true]; @@ -960,7 +951,7 @@ function photos_content(App $a) '$pagename' => DI::l10n()->t('Upload Photos'), '$sessid' => session_id(), '$usage' => $usage_message, - '$nickname' => $a->data['user']['nickname'], + '$nickname' => $user['nickname'], '$newalbum' => DI::l10n()->t('New album name: '), '$existalbumtext' => DI::l10n()->t('or select existing album:'), '$nosharetext' => DI::l10n()->t('Do not show a status post for this upload'), @@ -989,7 +980,7 @@ function photos_content(App $a) if ($datatype === 'album') { // if $datum is not a valid hex, redirect to the default page if (!Strings::isHex($datum)) { - DI::baseUrl()->redirect('photos/' . $a->data['user']['nickname']. '/album'); + DI::baseUrl()->redirect('photos/' . $user['nickname']. '/album'); } $album = hex2bin($datum); @@ -1047,7 +1038,7 @@ function photos_content(App $a) $o .= Renderer::replaceMacros($edit_tpl,[ '$nametext' => DI::l10n()->t('New album name: '), - '$nickname' => $a->data['user']['nickname'], + '$nickname' => $user['nickname'], '$album' => $album_e, '$hexalbum' => bin2hex($album), '$submit' => DI::l10n()->t('Submit'), @@ -1057,15 +1048,15 @@ function photos_content(App $a) } } else { if (($album !== DI::l10n()->t('Profile Photos')) && ($album !== Photo::CONTACT_PHOTOS) && ($album !== DI::l10n()->t(Photo::CONTACT_PHOTOS)) && $can_post) { - $edit = [DI::l10n()->t('Edit Album'), 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album) . '/edit']; - $drop = [DI::l10n()->t('Drop Album'), 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album) . '/drop']; + $edit = [DI::l10n()->t('Edit Album'), 'photos/' . $user['nickname'] . '/album/' . bin2hex($album) . '/edit']; + $drop = [DI::l10n()->t('Drop Album'), 'photos/' . $user['nickname'] . '/album/' . bin2hex($album) . '/drop']; } } if ($order_field === 'posted') { - $order = [DI::l10n()->t('Show Newest First'), 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album), 'oldest']; + $order = [DI::l10n()->t('Show Newest First'), 'photos/' . $user['nickname'] . '/album/' . bin2hex($album), 'oldest']; } else { - $order = [DI::l10n()->t('Show Oldest First'), 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album) . '?order=posted', 'newest']; + $order = [DI::l10n()->t('Show Oldest First'), 'photos/' . $user['nickname'] . '/album/' . bin2hex($album) . '?order=posted', 'newest']; } $photos = []; @@ -1084,7 +1075,7 @@ function photos_content(App $a) $photos[] = [ 'id' => $rr['id'], 'twist' => ' ' . ($twist ? 'rotleft' : 'rotright') . rand(2,4), - 'link' => 'photos/' . $a->data['user']['nickname'] . '/image/' . $rr['resource-id'] + 'link' => 'photos/' . $user['nickname'] . '/image/' . $rr['resource-id'] . ($order_field === 'posted' ? '?order=posted' : ''), 'title' => DI::l10n()->t('View Photo'), 'src' => 'photo/' . $rr['resource-id'] . '-' . $rr['scale'] . '.' .$ext, @@ -1101,7 +1092,7 @@ function photos_content(App $a) '$photos' => $photos, '$album' => $album, '$can_post' => $can_post, - '$upload' => [DI::l10n()->t('Upload New Photos'), 'photos/' . $a->data['user']['nickname'] . '/upload/' . bin2hex($album)], + '$upload' => [DI::l10n()->t('Upload New Photos'), 'photos/' . $user['nickname'] . '/upload/' . bin2hex($album)], '$order' => $order, '$edit' => $edit, '$drop' => $drop, @@ -1184,10 +1175,10 @@ function photos_content(App $a) } if (!is_null($prv)) { - $prevlink = 'photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$prv]['resource-id'] . ($order_field === 'posted' ? '?order=posted' : ''); + $prevlink = 'photos/' . $user['nickname'] . '/image/' . $prvnxt[$prv]['resource-id'] . ($order_field === 'posted' ? '?order=posted' : ''); } if (!is_null($nxt)) { - $nextlink = 'photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$nxt]['resource-id'] . ($order_field === 'posted' ? '?order=posted' : ''); + $nextlink = 'photos/' . $user['nickname'] . '/image/' . $prvnxt[$nxt]['resource-id'] . ($order_field === 'posted' ? '?order=posted' : ''); } $tpl = Renderer::getMarkupTemplate('photo_edit_head.tpl'); @@ -1220,17 +1211,17 @@ function photos_content(App $a) } } - $album_link = 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($ph[0]['album']); + $album_link = 'photos/' . $user['nickname'] . '/album/' . bin2hex($ph[0]['album']); $tools = null; if ($can_post && ($ph[0]['uid'] == $owner_uid)) { $tools = []; if ($cmd === 'edit') { - $tools['view'] = ['photos/' . $a->data['user']['nickname'] . '/image/' . $datum, DI::l10n()->t('View photo')]; + $tools['view'] = ['photos/' . $user['nickname'] . '/image/' . $datum, DI::l10n()->t('View photo')]; } else { - $tools['edit'] = ['photos/' . $a->data['user']['nickname'] . '/image/' . $datum . '/edit', DI::l10n()->t('Edit photo')]; - $tools['delete'] = ['photos/' . $a->data['user']['nickname'] . '/image/' . $datum . '/drop', DI::l10n()->t('Delete photo')]; + $tools['edit'] = ['photos/' . $user['nickname'] . '/image/' . $datum . '/edit', DI::l10n()->t('Edit photo')]; + $tools['delete'] = ['photos/' . $user['nickname'] . '/image/' . $datum . '/drop', DI::l10n()->t('Delete photo')]; $tools['profile'] = ['settings/profile/photo/crop/' . $ph[0]['resource-id'], DI::l10n()->t('Use as profile photo')]; } @@ -1329,7 +1320,7 @@ function photos_content(App $a) '$rotate_cw' => ['rotate', DI::l10n()->t("Rotate CW \x28right\x29"),1,''], '$rotate_ccw' => ['rotate', DI::l10n()->t("Rotate CCW \x28left\x29"),2,''], - '$nickname' => $a->data['user']['nickname'], + '$nickname' => $user['nickname'], '$resource_id' => $ph[0]['resource-id'], '$permissions' => DI::l10n()->t('Permissions'), '$aclselect' => $aclselect_e, @@ -1379,7 +1370,6 @@ function photos_content(App $a) '$submit' => DI::l10n()->t('Submit'), '$preview' => DI::l10n()->t('Preview'), '$loading' => DI::l10n()->t('Loading...'), - '$sourceapp' => DI::l10n()->t($a->sourcename), '$qcomment' => $qcomment, '$rand_num' => Crypto::randomDigits(12) ]); @@ -1435,7 +1425,6 @@ function photos_content(App $a) '$comment' => DI::l10n()->t('Comment'), '$submit' => DI::l10n()->t('Submit'), '$preview' => DI::l10n()->t('Preview'), - '$sourceapp' => DI::l10n()->t($a->sourcename), '$qcomment' => $qcomment, '$rand_num' => Crypto::randomDigits(12) ]); @@ -1510,7 +1499,6 @@ function photos_content(App $a) '$comment' => DI::l10n()->t('Comment'), '$submit' => DI::l10n()->t('Submit'), '$preview' => DI::l10n()->t('Preview'), - '$sourceapp' => DI::l10n()->t($a->sourcename), '$qcomment' => $qcomment, '$rand_num' => Crypto::randomDigits(12) ]); @@ -1577,7 +1565,7 @@ function photos_content(App $a) $total = 0; $r = q("SELECT `resource-id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s' $sql_extra GROUP BY `resource-id`", - intval($a->data['user']['uid']), + intval($user['uid']), DBA::escape(Photo::CONTACT_PHOTOS), DBA::escape(DI::l10n()->t(Photo::CONTACT_PHOTOS)) ); @@ -1592,7 +1580,7 @@ function photos_content(App $a) ANY_VALUE(`created`) AS `created` FROM `photo` WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s' $sql_extra GROUP BY `resource-id` ORDER BY `created` DESC LIMIT %d , %d", - intval($a->data['user']['uid']), + intval($user['uid']), DBA::escape(Photo::CONTACT_PHOTOS), DBA::escape(DI::l10n()->t(Photo::CONTACT_PHOTOS)), $pager->getStart(), @@ -1618,12 +1606,12 @@ function photos_content(App $a) $photos[] = [ 'id' => $rr['id'], 'twist' => ' ' . ($twist ? 'rotleft' : 'rotright') . rand(2,4), - 'link' => 'photos/' . $a->data['user']['nickname'] . '/image/' . $rr['resource-id'], + 'link' => 'photos/' . $user['nickname'] . '/image/' . $rr['resource-id'], 'title' => DI::l10n()->t('View Photo'), 'src' => 'photo/' . $rr['resource-id'] . '-' . ((($rr['scale']) == 6) ? 4 : $rr['scale']) . '.' . $ext, 'alt' => $alt_e, 'album' => [ - 'link' => 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($rr['album']), + 'link' => 'photos/' . $user['nickname'] . '/album/' . bin2hex($rr['album']), 'name' => $name_e, 'alt' => DI::l10n()->t('View Album'), ], @@ -1636,7 +1624,7 @@ function photos_content(App $a) $o .= Renderer::replaceMacros($tpl, [ '$title' => DI::l10n()->t('Recent Photos'), '$can_post' => $can_post, - '$upload' => [DI::l10n()->t('Upload New Photos'), 'photos/'.$a->data['user']['nickname'].'/upload'], + '$upload' => [DI::l10n()->t('Upload New Photos'), 'photos/'.$user['nickname'].'/upload'], '$photos' => $photos, '$paginate' => $pager->renderFull($total), ]); diff --git a/mod/videos.php b/mod/videos.php index 89097f5cde..f678e13fc6 100644 --- a/mod/videos.php +++ b/mod/videos.php @@ -22,17 +22,17 @@ use Friendica\App; use Friendica\Content\Nav; use Friendica\Content\Pager; -use Friendica\Content\Text\BBCode; +use Friendica\Content\Widget; use Friendica\Core\Renderer; use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Attach; -use Friendica\Model\Contact; use Friendica\Model\Item; use Friendica\Model\User; use Friendica\Module\BaseProfile; use Friendica\Security\Security; +use Friendica\Network\HTTPException; function videos_init(App $a) { @@ -43,38 +43,17 @@ function videos_init(App $a) Nav::setSelected('home'); if ($a->argc > 1) { - $nick = $a->argv[1]; - $user = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `blocked` = 0 LIMIT 1", - DBA::escape($nick) - ); - - if (!DBA::isResult($user)) { - return; + $owner = User::getOwnerDataByNick($a->argv[1]); + if (empty($owner)) { + throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.')); } - $a->data['user'] = $user[0]; - $a->profile_uid = $user[0]['uid']; - - $profile = User::getOwnerDataByNick($nick); - - $account_type = Contact::getAccountType($profile); - - $tpl = Renderer::getMarkupTemplate('widget/vcard.tpl'); - - $vcard_widget = Renderer::replaceMacros($tpl, [ - '$name' => $profile['name'], - '$photo' => $profile['photo'], - '$addr' => $profile['addr'] ?? '', - '$account_type' => $account_type, - '$about' => BBCode::convert($profile['about']), - ]); - // If not there, create 'aside' empty if (!isset(DI::page()['aside'])) { DI::page()['aside'] = ''; } - DI::page()['aside'] .= $vcard_widget; + DI::page()['aside'] .= Widget\VCard::getHTML($owner); $tpl = Renderer::getMarkupTemplate("videos_head.tpl"); DI::page()['htmlhead'] .= Renderer::replaceMacros($tpl); @@ -85,10 +64,13 @@ function videos_init(App $a) function videos_post(App $a) { - $owner_uid = $a->data['user']['uid']; + $user = User::getByNickname($a->argv[1]); + if (!DBA::isResult($user)) { + throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.')); + } - if (local_user() != $owner_uid) { - DI::baseUrl()->redirect('videos/' . $a->data['user']['nickname']); + if (local_user() != $user['uid']) { + DI::baseUrl()->redirect('videos/' . $user['nickname']); } if (($a->argc == 2) && !empty($_POST['delete']) && !empty($_POST['id'])) { @@ -105,11 +87,11 @@ function videos_post(App $a) ], local_user()); } - DI::baseUrl()->redirect('videos/' . $a->data['user']['nickname']); + DI::baseUrl()->redirect('videos/' . $user['nickname']); return; // NOTREACHED } - DI::baseUrl()->redirect('videos/' . $a->data['user']['nickname']); + DI::baseUrl()->redirect('videos/' . $user['nickname']); } function videos_content(App $a) @@ -123,13 +105,17 @@ function videos_content(App $a) // videos/name/video/xxxxx // videos/name/video/xxxxx/edit + $user = User::getByNickname($a->argv[1]); + if (!DBA::isResult($user)) { + throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.')); + } if (DI::config()->get('system', 'block_public') && !Session::isAuthenticated()) { notice(DI::l10n()->t('Public access denied.')); return; } - if (empty($a->data['user'])) { + if (empty($user)) { notice(DI::l10n()->t('No videos selected') . EOL ); return; } @@ -154,41 +140,38 @@ function videos_content(App $a) // $can_post = false; $visitor = 0; - $contact = null; $remote_contact = false; $contact_id = 0; - $owner_uid = $a->data['user']['uid']; + $community_page = (($user['page-flags'] == User::PAGE_FLAGS_COMMUNITY) ? true : false); - $community_page = (($a->data['user']['page-flags'] == User::PAGE_FLAGS_COMMUNITY) ? true : false); - - if ((local_user()) && (local_user() == $owner_uid)) { + if ((local_user()) && (local_user() == $user['uid'])) { $can_post = true; - } elseif ($community_page && !empty(Session::getRemoteContactID($owner_uid))) { - $contact_id = Session::getRemoteContactID($owner_uid); + } elseif ($community_page && !empty(Session::getRemoteContactID($user['uid']))) { + $contact_id = Session::getRemoteContactID($user['uid']); $can_post = true; $remote_contact = true; $visitor = $contact_id; } // perhaps they're visiting - but not a community page, so they wouldn't have write access - if (!empty(Session::getRemoteContactID($owner_uid)) && !$visitor) { - $contact_id = Session::getRemoteContactID($owner_uid); + if (!empty(Session::getRemoteContactID($user['uid'])) && !$visitor) { + $contact_id = Session::getRemoteContactID($user['uid']); $remote_contact = true; } - if ($a->data['user']['hidewall'] && (local_user() != $owner_uid) && !$remote_contact) { + if ($user['hidewall'] && (local_user() != $user['uid']) && !$remote_contact) { notice(DI::l10n()->t('Access to this item is restricted.')); return; } - $sql_extra = Security::getPermissionsSQLByUserId($owner_uid); + $sql_extra = Security::getPermissionsSQLByUserId($user['uid']); $o = ""; // tabs - $_is_owner = (local_user() && (local_user() == $owner_uid)); - $o .= BaseProfile::getTabsHTML($a, 'videos', $_is_owner, $a->data['user']['nickname']); + $_is_owner = (local_user() && (local_user() == $user['uid'])); + $o .= BaseProfile::getTabsHTML($a, 'videos', $_is_owner, $user); // // dispatch request @@ -218,7 +201,7 @@ function videos_content(App $a) $total = 0; $r = q("SELECT hash FROM `attach` WHERE `uid` = %d AND filetype LIKE '%%video%%' $sql_extra GROUP BY hash", - intval($a->data['user']['uid']) + intval($user['uid']) ); if (DBA::isResult($r)) { $total = count($r); @@ -231,7 +214,7 @@ function videos_content(App $a) FROM `attach` WHERE `uid` = %d AND filetype LIKE '%%video%%' $sql_extra GROUP BY hash ORDER BY `created` DESC LIMIT %d , %d", - intval($a->data['user']['uid']), + intval($user['uid']), $pager->getStart(), $pager->getItemsPerPage() ); @@ -247,13 +230,13 @@ function videos_content(App $a) $videos[] = [ 'id' => $rr['id'], - 'link' => DI::baseUrl() . '/videos/' . $a->data['user']['nickname'] . '/video/' . $rr['hash'], + 'link' => DI::baseUrl() . '/videos/' . $user['nickname'] . '/video/' . $rr['hash'], 'title' => DI::l10n()->t('View Video'), 'src' => DI::baseUrl() . '/attach/' . $rr['id'] . '?attachment=0', 'alt' => $alt_e, 'mime' => $rr['filetype'], 'album' => [ - 'link' => DI::baseUrl() . '/videos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($rr['album']), + 'link' => DI::baseUrl() . '/videos/' . $user['nickname'] . '/album/' . bin2hex($rr['album']), 'name' => $name_e, 'alt' => DI::l10n()->t('View Album'), ], @@ -265,9 +248,9 @@ function videos_content(App $a) $o .= Renderer::replaceMacros($tpl, [ '$title' => DI::l10n()->t('Recent Videos'), '$can_post' => $can_post, - '$upload' => [DI::l10n()->t('Upload New Videos'), DI::baseUrl() . '/videos/' . $a->data['user']['nickname'] . '/upload'], + '$upload' => [DI::l10n()->t('Upload New Videos'), DI::baseUrl() . '/videos/' . $user['nickname'] . '/upload'], '$videos' => $videos, - '$delete_url' => (($can_post) ? DI::baseUrl() . '/videos/' . $a->data['user']['nickname'] : false) + '$delete_url' => (($can_post) ? DI::baseUrl() . '/videos/' . $user['nickname'] : false) ]); $o .= $pager->renderFull($total); diff --git a/src/App.php b/src/App.php index 5c74b1b539..47d70db64a 100644 --- a/src/App.php +++ b/src/App.php @@ -56,28 +56,21 @@ use Psr\Log\LoggerInterface; */ class App { - public $profile; - public $profile_uid; + public $profile_owner; public $user; - public $cid; public $contact; - public $contacts; public $page_contact; - public $content; public $data = []; /** @deprecated 2019.09 - use App\Arguments->getArgv() or Arguments->get() */ public $argv; /** @deprecated 2019.09 - use App\Arguments->getArgc() */ public $argc; public $timezone; - public $interactive = true; public $identities; public $theme_info = []; - public $category; // Allow themes to control internal parameters // by changing App values in theme.php - public $sourcename = ''; public $videowidth = 425; public $videoheight = 350; public $theme_events_in_profile = true; @@ -317,10 +310,10 @@ class App $page_theme = null; // Find the theme that belongs to the user whose stuff we are looking at - if ($this->profile_uid && ($this->profile_uid != local_user())) { + if (!empty($this->profile_owner) && ($this->profile_owner != local_user())) { // Allow folks to override user themes and always use their own on their own site. // This works only if the user is on the same server - $user = $this->database->selectFirst('user', ['theme'], ['uid' => $this->profile_uid]); + $user = $this->database->selectFirst('user', ['theme'], ['uid' => $this->profile_owner]); if ($this->database->isResult($user) && !$this->pConfig->get(local_user(), 'system', 'always_my_theme')) { $page_theme = $user['theme']; } @@ -350,11 +343,11 @@ class App $page_mobile_theme = null; // Find the theme that belongs to the user whose stuff we are looking at - if ($this->profile_uid && ($this->profile_uid != local_user())) { + if (!empty($this->profile_owner) && ($this->profile_owner != local_user())) { // Allow folks to override user themes and always use their own on their own site. // This works only if the user is on the same server if (!$this->pConfig->get(local_user(), 'system', 'always_my_theme')) { - $page_mobile_theme = $this->pConfig->get($this->profile_uid, 'system', 'mobile-theme'); + $page_mobile_theme = $this->pConfig->get($this->profile_owner, 'system', 'mobile-theme'); } } @@ -547,7 +540,7 @@ class App $this->baseURL->redirect('search'); } - // Initialize module that can set the current theme in the init() method, either directly or via App->profile_uid + // Initialize module that can set the current theme in the init() method, either directly or via App->profile_owner $page['page_title'] = $moduleName; if (!$this->mode->isInstall() && !$this->mode->has(App\Mode::MAINTENANCEDISABLED)) { diff --git a/src/App/Page.php b/src/App/Page.php index bf33ebfab1..c6e3e723ce 100644 --- a/src/App/Page.php +++ b/src/App/Page.php @@ -459,7 +459,6 @@ class Page implements ArrayAccess } $page = $this->page; - $profile = $app->profile; header("X-Friendica-Version: " . FRIENDICA_VERSION); header("Content-type: text/html; charset=utf-8"); diff --git a/src/Content/Text/HTML.php b/src/Content/Text/HTML.php index 51515137e5..e65c89523a 100644 --- a/src/Content/Text/HTML.php +++ b/src/Content/Text/HTML.php @@ -801,22 +801,6 @@ class HTML ]); } - /** - * Get html for contact block. - * - * @deprecated since version 2019.03 - * @see ContactBlock::getHTML() - * @return string - * @throws \Friendica\Network\HTTPException\InternalServerErrorException - * @throws \ImagickException - */ - public static function contactBlock() - { - $a = DI::app(); - - return ContactBlock::getHTML($a->profile); - } - /** * Format contacts as picture links or as text links * diff --git a/src/Content/Widget.php b/src/Content/Widget.php index 139fd8ebb6..88afbe9e52 100644 --- a/src/Content/Widget.php +++ b/src/Content/Widget.php @@ -334,7 +334,7 @@ class Widget { $a = DI::app(); - $uid = intval($a->profile['uid']); + $uid = intval($a->profile_owner); if (!Feature::isEnabled($uid, 'categories')) { return ''; @@ -416,23 +416,20 @@ class Widget /** * Insert a tag cloud widget for the present profile. * + * @param int $uid User ID * @param int $limit Max number of displayed tags. * @return string HTML formatted output. * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function tagCloud($limit = 50) + public static function tagCloud(int $uid, int $limit = 50) { - $a = DI::app(); - - $uid = intval($a->profile['uid']); - - if (!$uid || !$a->profile['url']) { + if (empty($uid)) { return ''; } if (Feature::isEnabled($uid, 'tagadelic')) { - $owner_id = Contact::getIdForURL($a->profile['url'], 0, false); + $owner_id = Contact::getPublicIdByUserId($uid); if (!$owner_id) { return ''; diff --git a/src/Content/Widget/VCard.php b/src/Content/Widget/VCard.php index 340fc0cf3a..e3550b28b8 100644 --- a/src/Content/Widget/VCard.php +++ b/src/Content/Widget/VCard.php @@ -22,8 +22,10 @@ namespace Friendica\Content\Widget; use Friendica\Content\Text\BBCode; +use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\Renderer; +use Friendica\Core\System; use Friendica\DI; use Friendica\Model\Contact; use Friendica\Util\Strings; @@ -43,6 +45,10 @@ class VCard */ public static function getHTML(array $contact) { + if (!isset($contact['network']) || !isset($contact['id'])) { + Logger::warning('Incomplete contact', ['contact' => $contact ?? [], 'callstack' => System::callstack(20)]); + } + if (($contact['network'] != '') && ($contact['network'] != Protocol::DFRN)) { $network_link = Strings::formatNetworkName($contact['network'], $contact['url']); } else { diff --git a/src/Core/Renderer.php b/src/Core/Renderer.php index 75a869a38b..bb404965ee 100644 --- a/src/Core/Renderer.php +++ b/src/Core/Renderer.php @@ -48,7 +48,6 @@ class Renderer * beyond are used. */ public static $theme = [ - 'sourcename' => '', 'videowidth' => 425, 'videoheight' => 350, 'stylesheet' => '', diff --git a/src/Model/Profile.php b/src/Model/Profile.php index 95fdc0ceae..d81ecc239e 100644 --- a/src/Model/Profile.php +++ b/src/Model/Profile.php @@ -205,31 +205,27 @@ class Profile * load a lot of theme-specific content * * @param App $a - * @param string $nickname string - * @param array $profiledata array - * @param boolean $show_connect Show connect link + * @param string $nickname string + * + * @return array Profile * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function load(App $a, $nickname) + public static function load(App $a, string $nickname, bool $show_contacts = true) { $profile = User::getOwnerDataByNick($nickname); if (empty($profile)) { Logger::log('profile error: ' . DI::args()->getQueryString(), Logger::DEBUG); - return; + return []; } - $a->profile = $profile; - $a->profile_uid = $profile['uid']; + $a->profile_owner = $profile['uid']; - $a->profile['mobile-theme'] = DI::pConfig()->get($a->profile['uid'], 'system', 'mobile_theme'); - $a->profile['network'] = Protocol::DFRN; - - DI::page()['title'] = $a->profile['name'] . ' @ ' . DI::config()->get('config', 'sitename'); + DI::page()['title'] = $profile['name'] . ' @ ' . DI::config()->get('config', 'sitename'); if (!DI::pConfig()->get(local_user(), 'system', 'always_my_theme')) { - $a->setCurrentTheme($a->profile['theme']); - $a->setCurrentMobileTheme($a->profile['mobile-theme']); + $a->setCurrentTheme($profile['theme']); + $a->setCurrentMobileTheme(DI::pConfig()->get($a->profile_owner, 'system', 'mobile_theme')); } /* @@ -250,9 +246,9 @@ class Profile * By now, the contact block isn't shown, when a different profile is given * But: When this profile was on the same server, then we could display the contacts */ - DI::page()['aside'] .= self::sidebar($a, $a->profile, $block); + DI::page()['aside'] .= self::sidebar($profile, $block, $show_contacts); - return; + return $profile; } /** @@ -261,9 +257,9 @@ class Profile * It is very difficult to templatise the HTML completely * because of all the conditional logic. * - * @param array $profile - * @param int $block - * @param boolean $show_connect Show connect link + * @param array $profile Profile array + * @param bool $block Block personal details + * @param bool $show_contacts Show contact block * * @return string HTML sidebar module * @@ -276,15 +272,11 @@ class Profile * @hooks 'profile_sidebar' * array $arr */ - private static function sidebar(App $a, array $profile, $block = 0) + private static function sidebar(array $profile, bool $block, bool $show_contacts) { $o = ''; $location = false; - // This function can also use contact information in $profile, but the 'cid' - // value is going to be coming from 'owner-view', which means it's the wrong - // contact ID for the user viewing this page. Use 'nurl' to look up the - // correct contact table entry for the logged-in user. $profile_contact = []; if (local_user() && ($profile['uid'] ?? 0) != local_user()) { @@ -403,10 +395,10 @@ class Profile $updated = date('c', strtotime($profile['last-item'])); } - if (!$block) { - $contact_block = ContactBlock::getHTML($a->profile); + if (!$block && $show_contacts) { + $contact_block = ContactBlock::getHTML($profile); - if (is_array($a->profile) && !$a->profile['hide-friends']) { + if (is_array($profile) && !$profile['hide-friends']) { $contact_count = DBA::count('contact', [ 'uid' => $profile['uid'], 'self' => false, @@ -879,7 +871,7 @@ class Profile */ public static function getThemeUid(App $a) { - $uid = !empty($a->profile_uid) ? intval($a->profile_uid) : 0; + $uid = !empty($a->profile_owner) ? intval($a->profile_owner) : 0; if (local_user() && (DI::pConfig()->get(local_user(), 'system', 'always_my_theme') || !$uid)) { return local_user(); } diff --git a/src/Module/BaseProfile.php b/src/Module/BaseProfile.php index c6b2973002..e84ebded10 100644 --- a/src/Module/BaseProfile.php +++ b/src/Module/BaseProfile.php @@ -39,11 +39,9 @@ class BaseProfile extends BaseModule * @return string * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function getTabsHTML(App $a, string $current, bool $is_owner, string $nickname = null) + public static function getTabsHTML(App $a, string $current, bool $is_owner, array $profile) { - if (is_null($nickname)) { - $nickname = $a->user['nickname']; - } + $nickname = $profile['nickname']; $baseProfileUrl = DI::baseUrl() . '/profile/' . $nickname; @@ -116,7 +114,7 @@ class BaseProfile extends BaseModule ]; } - if (empty($a->profile['hide-friends'])) { + if (empty($profile['hide-friends'])) { $tabs[] = [ 'label' => DI::l10n()->t('Contacts'), 'url' => $baseProfileUrl . '/contacts', diff --git a/src/Module/Contact.php b/src/Module/Contact.php index 89051f27dc..36cc11de41 100644 --- a/src/Module/Contact.php +++ b/src/Module/Contact.php @@ -156,12 +156,6 @@ class Contact extends BaseModule if (!DBA::isResult($r)) { notice(DI::l10n()->t('Failed to update contact record.')); } - - $contact = DBA::selectFirst('contact', [], ['id' => $contact_id, 'uid' => local_user(), 'deleted' => false]); - if (DBA::isResult($contact)) { - $a->data['contact'] = $contact; - } - return; } @@ -306,8 +300,6 @@ class Contact extends BaseModule } } - $a->data['contact'] = $contact; - $vcard_widget = Widget\VCard::getHTML($contact); $findpeople_widget = ''; @@ -453,9 +445,7 @@ class Contact extends BaseModule $_SESSION['return_path'] = DI::args()->getQueryString(); - if (!empty($a->data['contact']) && is_array($a->data['contact'])) { - $contact = $a->data['contact']; - + if (!empty($contact) && is_array($contact)) { DI::page()['htmlhead'] .= Renderer::replaceMacros(Renderer::getMarkupTemplate('contact_head.tpl'), [ '$baseurl' => DI::baseUrl()->get(true), ]); diff --git a/src/Module/Debug/Localtime.php b/src/Module/Debug/Localtime.php index 5030cb37ee..ff1466408e 100644 --- a/src/Module/Debug/Localtime.php +++ b/src/Module/Debug/Localtime.php @@ -29,6 +29,8 @@ use Friendica\Util\Temporal; class Localtime extends BaseModule { + static $mod_localtime = ''; + public static function post(array $parameters = []) { $time = ($_REQUEST['time'] ?? '') ?: 'now'; @@ -36,14 +38,12 @@ class Localtime extends BaseModule $bd_format = DI::l10n()->t('l F d, Y \@ g:i A'); if (!empty($_POST['timezone'])) { - DI::app()->data['mod-localtime'] = DateTimeFormat::convert($time, $_POST['timezone'], 'UTC', $bd_format); + self::$mod_localtime = DateTimeFormat::convert($time, $_POST['timezone'], 'UTC', $bd_format); } } public static function content(array $parameters = []) { - $app = DI::app(); - $time = ($_REQUEST['time'] ?? '') ?: 'now'; $output = '

' . DI::l10n()->t('Time Conversion') . '

'; @@ -54,8 +54,8 @@ class Localtime extends BaseModule $output .= '

' . DI::l10n()->t('Current timezone: %s', $_REQUEST['timezone']) . '

'; } - if (!empty($app->data['mod-localtime'])) { - $output .= '

' . DI::l10n()->t('Converted localtime: %s', $app->data['mod-localtime']) . '

'; + if (!empty(self::$mod_localtime)) { + $output .= '

' . DI::l10n()->t('Converted localtime: %s', self::$mod_localtime) . '

'; } $output .= '
'; diff --git a/src/Module/HCard.php b/src/Module/HCard.php index e348f2ff5b..b8df844367 100644 --- a/src/Module/HCard.php +++ b/src/Module/HCard.php @@ -48,28 +48,28 @@ class HCard extends BaseModule throw new HTTPException\NotFoundException(DI::l10n()->t('No profile')); } - Profile::load($a, $nickname); + $profile = Profile::load($a, $nickname, false); - if (empty($a->profile)) { + if (empty($profile)) { throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.')); } $page = DI::page(); - if (!empty($a->profile['page-flags']) && ($a->profile['page-flags'] == User::PAGE_FLAGS_COMMUNITY)) { + if (!empty($profile['page-flags']) && ($profile['page-flags'] == User::PAGE_FLAGS_COMMUNITY)) { $page['htmlhead'] .= ''; } - if (!empty($a->profile['openidserver'])) { - $page['htmlhead'] .= '' . "\r\n"; + if (!empty($profile['openidserver'])) { + $page['htmlhead'] .= '' . "\r\n"; } - if (!empty($a->profile['openid'])) { - $delegate = ((strstr($a->profile['openid'], '://')) ? $a->profile['openid'] : 'http://' . $a->profile['openid']); + if (!empty($profile['openid'])) { + $delegate = ((strstr($profile['openid'], '://')) ? $profile['openid'] : 'http://' . $profile['openid']); $page['htmlhead'] .= '' . "\r\n"; } // check if blocked if (DI::config()->get('system', 'block_public') && !Session::isAuthenticated()) { - $keywords = $a->profile['pub_keywords'] ?? ''; + $keywords = $profile['pub_keywords'] ?? ''; $keywords = str_replace([',', ' ', ',,'], [' ', ',', ','], $keywords); if (strlen($keywords)) { $page['htmlhead'] .= '' . "\r\n"; @@ -78,9 +78,9 @@ class HCard extends BaseModule $baseUrl = DI::baseUrl(); - $uri = urlencode('acct:' . $a->profile['nickname'] . '@' . $baseUrl->getHostname() . ($baseUrl->getUrlPath() ? '/' . $baseUrl->getUrlPath() : '')); + $uri = urlencode('acct:' . $profile['nickname'] . '@' . $baseUrl->getHostname() . ($baseUrl->getUrlPath() ? '/' . $baseUrl->getUrlPath() : '')); - $page['htmlhead'] .= '' . "\r\n"; + $page['htmlhead'] .= '' . "\r\n"; $page['htmlhead'] .= '' . "\r\n"; $page['htmlhead'] .= '' . "\r\n"; header('Link: <' . $baseUrl->get() . '/xrd/?uri=' . $uri . '>; rel="lrdd"; type="application/xrd+xml"', false); diff --git a/src/Module/Item/Compose.php b/src/Module/Item/Compose.php index 7ce16d02af..c2bfba2dc4 100644 --- a/src/Module/Item/Compose.php +++ b/src/Module/Item/Compose.php @@ -171,7 +171,6 @@ class Compose extends BaseModule '$group_deny' => implode(',', $group_deny_list), '$jotplugins' => $jotplugins, - '$sourceapp' => DI::l10n()->t($a->sourcename), '$rand_num' => Crypto::randomDigits(12), '$acl_selector' => ACL::getFullSelectorHTML(DI::page(), $a->user, $doesFederate, [ 'allow_cid' => $contact_allow_list, diff --git a/src/Module/Profile/Common.php b/src/Module/Profile/Common.php index 6e65ee22e2..ad30ab4ac3 100644 --- a/src/Module/Profile/Common.php +++ b/src/Module/Profile/Common.php @@ -47,28 +47,27 @@ class Common extends BaseProfile $nickname = $parameters['nickname']; - Profile::load($a, $nickname); - - if (empty($a->profile)) { + $profile = Profile::load($a, $nickname); + if (empty($profile)) { throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.')); } - if (!empty($a->profile['hide-friends'])) { + if (!empty($profile['hide-friends'])) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); } - $displayCommonTab = Session::isAuthenticated() && $a->profile['uid'] != local_user(); + $displayCommonTab = Session::isAuthenticated() && $profile['uid'] != local_user(); if (!$displayCommonTab) { $a->redirect('profile/' . $nickname . '/contacts'); }; - $o = self::getTabsHTML($a, 'contacts', false, $nickname); + $o = self::getTabsHTML($a, 'contacts', false, $profile); $tabs = self::getContactFilterTabs('profile/' . $nickname, 'common', $displayCommonTab); $sourceId = Contact::getIdForURL(Profile::getMyURL()); - $targetId = Contact::getPublicIdByUserId($a->profile['uid']); + $targetId = Contact::getPublicIdByUserId($profile['uid']); $condition = [ 'blocked' => false, @@ -87,7 +86,7 @@ class Common extends BaseProfile $title = DI::l10n()->tt('Common contact (%s)', 'Common contacts (%s)', $total); $desc = DI::l10n()->t( 'Both %s and yourself have publicly interacted with these contacts (follow, comment or likes on public posts).', - htmlentities($a->profile['name'], ENT_COMPAT, 'UTF-8') + htmlentities($profile['name'], ENT_COMPAT, 'UTF-8') ); $tpl = Renderer::getMarkupTemplate('profile/contacts.tpl'); diff --git a/src/Module/Profile/Contacts.php b/src/Module/Profile/Contacts.php index 61b79b241f..3307694e7f 100644 --- a/src/Module/Profile/Contacts.php +++ b/src/Module/Profile/Contacts.php @@ -23,6 +23,7 @@ namespace Friendica\Module\Profile; use Friendica\Content\Nav; use Friendica\Content\Pager; +use Friendica\Content\Widget; use Friendica\Core\Protocol; use Friendica\Core\Renderer; use Friendica\Core\Session; @@ -45,26 +46,25 @@ class Contacts extends Module\BaseProfile $nickname = $parameters['nickname']; $type = $parameters['type'] ?? 'all'; - Model\Profile::load($a, $nickname); - - if (empty($a->profile)) { + $profile = Model\Profile::load($a, $nickname); + if (empty($profile)) { throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.')); } - $is_owner = $a->profile['uid'] == local_user(); + $is_owner = $profile['uid'] == local_user(); - if (!empty($a->profile['hide-friends']) && !$is_owner) { + if (!empty($profile['hide-friends']) && !$is_owner) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); } Nav::setSelected('home'); - $o = self::getTabsHTML($a, 'contacts', $is_owner, $nickname); + $o = self::getTabsHTML($a, 'contacts', $is_owner, $profile); - $tabs = self::getContactFilterTabs('profile/' . $nickname, $type, Session::isAuthenticated() && $a->profile['uid'] != local_user()); + $tabs = self::getContactFilterTabs('profile/' . $nickname, $type, Session::isAuthenticated() && $profile['uid'] != local_user()); $condition = [ - 'uid' => $a->profile['uid'], + 'uid' => $profile['uid'], 'blocked' => false, 'pending' => false, 'hidden' => false, @@ -103,7 +103,7 @@ class Contacts extends Module\BaseProfile $title = DI::l10n()->tt('Mutual friend (%s)', 'Mutual friends (%s)', $total); $desc = DI::l10n()->t( 'These contacts both follow and are followed by %s.', - htmlentities($a->profile['name'], ENT_COMPAT, 'UTF-8') + htmlentities($profile['name'], ENT_COMPAT, 'UTF-8') ); break; case 'all': diff --git a/src/Module/Profile/Profile.php b/src/Module/Profile/Profile.php index 96545deaf9..4f083db260 100644 --- a/src/Module/Profile/Profile.php +++ b/src/Module/Profile/Profile.php @@ -26,6 +26,7 @@ use Friendica\Content\ForumManager; use Friendica\Content\Nav; use Friendica\Content\Text\BBCode; use Friendica\Content\Text\HTML; +use Friendica\Content\Widget; use Friendica\Core\Hook; use Friendica\Core\Protocol; use Friendica\Core\Renderer; @@ -76,36 +77,35 @@ class Profile extends BaseProfile { $a = DI::app(); - ProfileModel::load($a, $parameters['nickname']); - - if (!$a->profile) { + $profile = ProfileModel::load($a, $parameters['nickname']); + if (!$profile) { throw new HTTPException\NotFoundException(DI::l10n()->t('Profile not found.')); } - $remote_contact_id = Session::getRemoteContactID($a->profile_uid); + $remote_contact_id = Session::getRemoteContactID($profile['uid']); if (DI::config()->get('system', 'block_public') && !local_user() && !$remote_contact_id) { return Login::form(); } - $is_owner = local_user() == $a->profile_uid; + $is_owner = local_user() == $profile['uid']; - if (!empty($a->profile['hidewall']) && !$is_owner && !$remote_contact_id) { + if (!empty($profile['hidewall']) && !$is_owner && !$remote_contact_id) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Access to this profile has been restricted.')); } - if (!empty($a->profile['page-flags']) && $a->profile['page-flags'] == User::PAGE_FLAGS_COMMUNITY) { + if (!empty($profile['page-flags']) && $profile['page-flags'] == User::PAGE_FLAGS_COMMUNITY) { DI::page()['htmlhead'] .= '' . "\n"; } - DI::page()['htmlhead'] .= self::buildHtmlHead($a->profile, $parameters['nickname'], $remote_contact_id); + DI::page()['htmlhead'] .= self::buildHtmlHead($profile, $parameters['nickname'], $remote_contact_id); Nav::setSelected('home'); - $is_owner = local_user() == $a->profile['uid']; - $o = self::getTabsHTML($a, 'profile', $is_owner, $a->profile['nickname']); + $is_owner = local_user() == $profile['uid']; + $o = self::getTabsHTML($a, 'profile', $is_owner, $profile); - if (!empty($a->profile['hidewall']) && !$is_owner && !$remote_contact_id) { + if (!empty($profile['hidewall']) && !$is_owner && !$remote_contact_id) { notice(DI::l10n()->t('Access to this profile has been restricted.')); return ''; } @@ -141,59 +141,59 @@ class Profile extends BaseProfile $basic_fields = []; - $basic_fields += self::buildField('fullname', DI::l10n()->t('Full Name:'), $a->profile['name']); + $basic_fields += self::buildField('fullname', DI::l10n()->t('Full Name:'), $profile['name']); - if (Feature::isEnabled($a->profile_uid, 'profile_membersince')) { + if (Feature::isEnabled($profile['uid'], 'profile_membersince')) { $basic_fields += self::buildField( 'membersince', DI::l10n()->t('Member since:'), - DateTimeFormat::local($a->profile['register_date']) + DateTimeFormat::local($profile['register_date']) ); } - if (!empty($a->profile['dob']) && $a->profile['dob'] > DBA::NULL_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'); $dob = DI::l10n()->getDay( - intval($a->profile['dob']) ? - DateTimeFormat::utc($a->profile['dob'] . ' 00:00 +00:00', $year_bd_format) - : DateTimeFormat::utc('2001-' . substr($a->profile['dob'], 5) . ' 00:00 +00:00', $short_bd_format) + 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); - if ($age = Temporal::getAgeByTimezone($a->profile['dob'], $a->profile['timezone'])) { + 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)); } } - if ($a->profile['about']) { - $basic_fields += self::buildField('about', DI::l10n()->t('Description:'), BBCode::convertForUriId($a->profile['uri-id'], $a->profile['about'])); + if ($profile['about']) { + $basic_fields += self::buildField('about', DI::l10n()->t('Description:'), BBCode::convertForUriId($profile['uri-id'], $profile['about'])); } - if ($a->profile['xmpp']) { - $basic_fields += self::buildField('xmpp', DI::l10n()->t('XMPP:'), $a->profile['xmpp']); + if ($profile['xmpp']) { + $basic_fields += self::buildField('xmpp', DI::l10n()->t('XMPP:'), $profile['xmpp']); } - if ($a->profile['homepage']) { - $basic_fields += self::buildField('homepage', DI::l10n()->t('Homepage:'), HTML::toLink($a->profile['homepage'])); + if ($profile['homepage']) { + $basic_fields += self::buildField('homepage', DI::l10n()->t('Homepage:'), HTML::toLink($profile['homepage'])); } if ( - $a->profile['address'] - || $a->profile['locality'] - || $a->profile['postal-code'] - || $a->profile['region'] - || $a->profile['country-name'] + $profile['address'] + || $profile['locality'] + || $profile['postal-code'] + || $profile['region'] + || $profile['country-name'] ) { - $basic_fields += self::buildField('location', DI::l10n()->t('Location:'), ProfileModel::formatLocation($a->profile)); + $basic_fields += self::buildField('location', DI::l10n()->t('Location:'), ProfileModel::formatLocation($profile)); } - if ($a->profile['pub_keywords']) { + if ($profile['pub_keywords']) { $tags = []; // Separator is defined in Module\Settings\Profile\Index::cleanKeywords - foreach (explode(', ', $a->profile['pub_keywords']) as $tag_label) { + foreach (explode(', ', $profile['pub_keywords']) as $tag_label) { $tags[] = [ 'url' => '/search?tag=' . $tag_label, 'label' => Tag::TAG_CHARACTER[Tag::HASHTAG] . $tag_label, @@ -209,26 +209,26 @@ 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($a->profile_uid); + $profile_fields = DI::profileField()->selectByUserId($profile['uid']); } else { - $profile_fields = DI::profileField()->selectByContactId($contact_id, $a->profile_uid); + $profile_fields = DI::profileField()->selectByContactId($contact_id, $profile['uid']); } foreach ($profile_fields as $profile_field) { $custom_fields += self::buildField( 'custom_' . $profile_field->order, $profile_field->label, - BBCode::convertForUriId($a->profile['uri-id'], $profile_field->value), + BBCode::convertForUriId($profile['uri-id'], $profile_field->value), 'aprofile custom' ); }; //show subcribed forum if it is enabled in the usersettings - if (Feature::isEnabled($a->profile_uid, 'forumlist_profile')) { + if (Feature::isEnabled($profile['uid'], 'forumlist_profile')) { $custom_fields += self::buildField( 'forumlist', DI::l10n()->t('Forums:'), - ForumManager::profileAdvanced($a->profile_uid) + ForumManager::profileAdvanced($profile['uid']) ); } @@ -243,11 +243,11 @@ class Profile extends BaseProfile '$submit' => DI::l10n()->t('Submit'), '$basic' => DI::l10n()->t('Basic'), '$advanced' => DI::l10n()->t('Advanced'), - '$is_owner' => $a->profile_uid == local_user(), + '$is_owner' => $profile['uid'] == local_user(), '$query_string' => DI::args()->getQueryString(), '$basic_fields' => $basic_fields, '$custom_fields' => $custom_fields, - '$profile' => $a->profile, + '$profile' => $profile, '$edit_link' => [ 'url' => DI::baseUrl() . '/settings/profile', DI::l10n()->t('Edit profile'), 'title' => '', diff --git a/src/Module/Profile/Status.php b/src/Module/Profile/Status.php index b181ec4336..30ac5f06ff 100644 --- a/src/Module/Profile/Status.php +++ b/src/Module/Profile/Status.php @@ -52,20 +52,20 @@ class Status extends BaseProfile $a = DI::app(); - ProfileModel::load($a, $parameters['nickname']); + $profile = ProfileModel::load($a, $parameters['nickname']); - if (empty($a->profile)) { + if (empty($profile)) { throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.')); } - if (!$a->profile['net-publish']) { + if (!$profile['net-publish']) { DI::page()['htmlhead'] .= '' . "\n"; } - DI::page()['htmlhead'] .= '' . "\n"; - DI::page()['htmlhead'] .= '' . "\n"; - DI::page()['htmlhead'] .= '' . "\n"; - DI::page()['htmlhead'] .= '' . "\n"; + DI::page()['htmlhead'] .= '' . "\n"; + DI::page()['htmlhead'] .= '' . "\n"; + DI::page()['htmlhead'] .= '' . "\n"; + DI::page()['htmlhead'] .= '' . "\n"; $category = $datequery = $datequery2 = ''; @@ -91,42 +91,42 @@ class Status extends BaseProfile $hashtags = $_GET['tag'] ?? ''; - if (DI::config()->get('system', 'block_public') && !local_user() && !Session::getRemoteContactID($a->profile['uid'])) { + if (DI::config()->get('system', 'block_public') && !local_user() && !Session::getRemoteContactID($profile['uid'])) { return Login::form(); } $o = ''; - if ($a->profile['uid'] == local_user()) { + if ($profile['uid'] == local_user()) { Nav::setSelected('home'); } - $remote_contact = Session::getRemoteContactID($a->profile['uid']); - $is_owner = local_user() == $a->profile['uid']; - $last_updated_key = "profile:" . $a->profile['uid'] . ":" . local_user() . ":" . $remote_contact; + $remote_contact = Session::getRemoteContactID($profile['uid']); + $is_owner = local_user() == $profile['uid']; + $last_updated_key = "profile:" . $profile['uid'] . ":" . local_user() . ":" . $remote_contact; - if (!empty($a->profile['hidewall']) && !$is_owner && !$remote_contact) { + if (!empty($profile['hidewall']) && !$is_owner && !$remote_contact) { notice(DI::l10n()->t('Access to this profile has been restricted.')); return ''; } - $o .= self::getTabsHTML($a, 'status', $is_owner, $a->profile['nickname']); + $o .= self::getTabsHTML($a, 'status', $is_owner, $profile); - $o .= Widget::commonFriendsVisitor($a->profile['uid'], $a->profile['nickname']); + $o .= Widget::commonFriendsVisitor($profile['uid'], $profile['nickname']); - $commpage = $a->profile['page-flags'] == User::PAGE_FLAGS_COMMUNITY; + $commpage = $profile['page-flags'] == User::PAGE_FLAGS_COMMUNITY; $commvisitor = $commpage && $remote_contact; - DI::page()['aside'] .= Widget::postedByYear(DI::baseUrl() . '/profile/' . $a->profile['nickname'] . '/status', $a->profile['profile_uid'] ?? 0, true); - DI::page()['aside'] .= Widget::categories(DI::baseUrl() . '/profile/' . $a->profile['nickname'] . '/status', XML::escape($category)); - DI::page()['aside'] .= Widget::tagCloud(); + DI::page()['aside'] .= Widget::postedByYear(DI::baseUrl() . '/profile/' . $profile['nickname'] . '/status', $profile['profile_uid'] ?? 0, true); + DI::page()['aside'] .= Widget::categories(DI::baseUrl() . '/profile/' . $profile['nickname'] . '/status', XML::escape($category)); + DI::page()['aside'] .= Widget::tagCloud($profile['uid']); - if (Security::canWriteToUserWall($a->profile['uid'])) { + if (Security::canWriteToUserWall($profile['uid'])) { $x = [ 'is_owner' => $is_owner, - 'allow_location' => ($is_owner || $commvisitor) && $a->profile['allow_location'], + 'allow_location' => ($is_owner || $commvisitor) && $profile['allow_location'], 'default_location' => $is_owner ? $a->user['default-location'] : '', - 'nickname' => $a->profile['nickname'], + 'nickname' => $profile['nickname'], 'lockstate' => is_array($a->user) && (strlen($a->user['allow_cid']) || strlen($a->user['allow_gid']) @@ -136,25 +136,25 @@ class Status extends BaseProfile 'acl' => $is_owner ? ACL::getFullSelectorHTML(DI::page(), $a->user, true) : '', 'bang' => '', 'visitor' => $is_owner || $commvisitor ? 'block' : 'none', - 'profile_uid' => $a->profile['uid'], + 'profile_uid' => $profile['uid'], ]; $o .= status_editor($a, $x); } // Get permissions SQL - if $remote_contact is true, our remote user has been pre-verified and we already have fetched his/her groups - $condition = Item::getPermissionsConditionArrayByUserId($a->profile['uid']); + $condition = Item::getPermissionsConditionArrayByUserId($profile['uid']); $last_updated_array = Session::get('last_updated', []); if (!empty($category)) { $condition = DBA::mergeConditions($condition, ["`uri-id` IN (SELECT `uri-id` FROM `category-view` WHERE `name` = ? AND `type` = ? AND `uid` = ?)", - $category, Category::CATEGORY, $a->profile['uid']]); + $category, Category::CATEGORY, $profile['uid']]); } if (!empty($hashtags)) { $condition = DBA::mergeConditions($condition, ["`uri-id` IN (SELECT `uri-id` FROM `tag-search-view` WHERE `name` = ? AND `uid` = ?)", - $hashtags, $a->profile['uid']]); + $hashtags, $profile['uid']]); } if (!empty($datequery)) { @@ -166,9 +166,9 @@ class Status extends BaseProfile // Does the profile page belong to a forum? // If not then we can improve the performance with an additional condition - $condition2 = ['uid' => $a->profile['uid'], 'page-flags' => [User::PAGE_FLAGS_COMMUNITY, User::PAGE_FLAGS_PRVGROUP]]; + $condition2 = ['uid' => $profile['uid'], 'page-flags' => [User::PAGE_FLAGS_COMMUNITY, User::PAGE_FLAGS_PRVGROUP]]; if (!DBA::exists('user', $condition2)) { - $condition = DBA::mergeConditions($condition, ['contact-id' => $a->profile['id']]); + $condition = DBA::mergeConditions($condition, ['contact-id' => $profile['id']]); } if (DI::mode()->isMobile()) { @@ -186,7 +186,7 @@ class Status extends BaseProfile GRAVITY_PARENT, GRAVITY_ACTIVITY, Verb::getID(Activity::ANNOUNCE), GRAVITY_PARENT, Protocol::DFRN, Protocol::ACTIVITYPUB, Protocol::DIASPORA, Protocol::OSTATUS]); - $condition = DBA::mergeConditions($condition, ['uid' => $a->profile['uid'], 'network' => Protocol::FEDERATED, + $condition = DBA::mergeConditions($condition, ['uid' => $profile['uid'], 'network' => Protocol::FEDERATED, 'visible' => true, 'deleted' => false]); $pager = new Pager(DI::l10n(), $args->getQueryString(), $itemspage_network); @@ -213,25 +213,25 @@ class Status extends BaseProfile $items = Post::toArray($items_stmt); - if ($pager->getStart() == 0 && !empty($a->profile['uid'])) { + if ($pager->getStart() == 0 && !empty($profile['uid'])) { $condition = ['private' => [Item::PUBLIC, Item::UNLISTED]]; - $remote_user = Session::getRemoteContactID($a->profile['uid']); + $remote_user = Session::getRemoteContactID($profile['uid']); if (!empty($remote_user)) { - $permissionSets = DI::permissionSet()->selectByContactId($remote_user, $a->profile['uid']); + $permissionSets = DI::permissionSet()->selectByContactId($remote_user, $profile['uid']); if (!empty($permissionSets)) { $condition = ['psid' => array_merge($permissionSets->column('id'), - [DI::permissionSet()->getIdFromACL($a->profile['uid'], '', '', '', '')])]; + [DI::permissionSet()->getIdFromACL($profile['uid'], '', '', '', '')])]; } - } elseif ($a->profile['uid'] == local_user()) { + } elseif ($profile['uid'] == local_user()) { $condition = []; } - $pinned_items = Post::selectPinned($a->profile['uid'], ['uri-id', 'pinned'], $condition); + $pinned_items = Post::selectPinned($profile['uid'], ['uri-id', 'pinned'], $condition); $pinned = Post::toArray($pinned_items); $items = array_merge($items, $pinned); } - $o .= conversation($a, $items, 'profile', false, false, 'pinned_received', $a->profile['uid']); + $o .= conversation($a, $items, 'profile', false, false, 'pinned_received', $profile['uid']); $o .= $pager->renderMinimal(count($items)); diff --git a/src/Module/RemoteFollow.php b/src/Module/RemoteFollow.php index ee13ce0651..0950a057a5 100644 --- a/src/Module/RemoteFollow.php +++ b/src/Module/RemoteFollow.php @@ -22,6 +22,7 @@ namespace Friendica\Module; use Friendica\BaseModule; +use Friendica\Content\Widget; use Friendica\DI; use Friendica\Core\Logger; use Friendica\Core\Protocol; @@ -30,6 +31,7 @@ use Friendica\Core\Search; use Friendica\Core\System; use Friendica\Model\Contact; use Friendica\Model\Profile; +use Friendica\Model\User; use Friendica\Network\Probe; /** @@ -37,20 +39,22 @@ use Friendica\Network\Probe; */ class RemoteFollow extends BaseModule { + static $owner; + public static function init(array $parameters = []) { - Profile::load(DI::app(), $parameters['profile']); + self::$owner = User::getOwnerDataByNick($parameters['profile']); + + DI::page()['aside'] = Widget\VCard::getHTML(self::$owner); } public static function post(array $parameters = []) { - $a = DI::app(); - if (!empty($_POST['cancel']) || empty($_POST['dfrn_url'])) { DI::baseUrl()->redirect(); } - if (empty($a->profile['uid'])) { + if (empty(self::$owner)) { notice(DI::l10n()->t('Profile unavailable.')); return; } @@ -73,15 +77,15 @@ class RemoteFollow extends BaseModule return; } - Logger::notice('Remote request', ['url' => $url, 'follow' => $a->profile['url'], 'remote' => $data['subscribe']]); + Logger::notice('Remote request', ['url' => $url, 'follow' => self::$owner['url'], 'remote' => $data['subscribe']]); // Substitute our user's feed URL into $data['subscribe'] // Send the subscriber home to subscribe // Diaspora needs the uri in the format user@domain.tld if ($data['network'] == Protocol::DIASPORA) { - $uri = urlencode($a->profile['addr']); + $uri = urlencode(self::$owner['addr']); } else { - $uri = urlencode($a->profile['url']); + $uri = urlencode(self::$owner['url']); } $follow_link = str_replace('{uri}', $uri, $data['subscribe']); @@ -90,14 +94,12 @@ class RemoteFollow extends BaseModule public static function content(array $parameters = []) { - $a = DI::app(); - - if (empty($a->profile)) { + if (empty(self::$owner)) { return ''; } - $target_addr = $a->profile['addr']; - $target_url = $a->profile['url']; + $target_addr = self::$owner['addr']; + $target_url = self::$owner['url']; $tpl = Renderer::getMarkupTemplate('auto_request.tpl'); $o = Renderer::replaceMacros($tpl, [ @@ -110,7 +112,7 @@ class RemoteFollow extends BaseModule '$cancel' => DI::l10n()->t('Cancel'), '$request' => 'remote_follow/' . $parameters['profile'], - '$name' => $a->profile['name'], + '$name' => self::$owner['name'], '$myaddr' => Profile::getMyURL(), ]); return $o; diff --git a/src/Module/Update/Profile.php b/src/Module/Update/Profile.php index b22e607d40..4ec6a977b2 100644 --- a/src/Module/Update/Profile.php +++ b/src/Module/Update/Profile.php @@ -29,6 +29,7 @@ use Friendica\DI; use Friendica\Model\Item; use Friendica\Model\Post; use Friendica\Model\Profile as ProfileModel; +use Friendica\Model\User; use Friendica\Network\HTTPException\ForbiddenException; use Friendica\Util\DateTimeFormat; @@ -38,21 +39,22 @@ class Profile extends BaseModule { $a = DI::app(); - if (DI::config()->get('system', 'block_public') && !local_user() && !Session::getRemoteContactID($a->profile['uid'])) { + // Ensure we've got a profile owner if updating. + $a->profile_owner = intval($_GET['p'] ?? 0); + + if (DI::config()->get('system', 'block_public') && !local_user() && !Session::getRemoteContactID($a->profile_owner)) { throw new ForbiddenException(); } - $profile_uid = intval($_GET['p'] ?? 0); + $remote_contact = Session::getRemoteContactID($a->profile_owner); + $is_owner = local_user() == $a->profile_owner; + $last_updated_key = "profile:" . $a->profile_owner . ":" . local_user() . ":" . $remote_contact; - // Ensure we've got a profile owner if updating. - $a->profile['uid'] = $profile_uid; - - $remote_contact = Session::getRemoteContactID($a->profile['uid']); - $is_owner = local_user() == $a->profile['uid']; - $last_updated_key = "profile:" . $a->profile['uid'] . ":" . local_user() . ":" . $remote_contact; - - if (!empty($a->profile['hidewall']) && !$is_owner && !$remote_contact) { - throw new ForbiddenException(DI::l10n()->t('Access to this profile has been restricted.')); + if (!$is_owner && !$remote_contact) { + $user = User::getById($a->profile_owner, ['hidewall']); + if ($user['hidewall']) { + throw new ForbiddenException(DI::l10n()->t('Access to this profile has been restricted.')); + } } $o = ''; @@ -62,7 +64,7 @@ class Profile extends BaseModule } // Get permissions SQL - if $remote_contact is true, our remote user has been pre-verified and we already have fetched his/her groups - $sql_extra = Item::getPermissionsSQLByUserId($a->profile['uid']); + $sql_extra = Item::getPermissionsSQLByUserId($a->profile_owner); $last_updated_array = Session::get('last_updated', []); @@ -86,7 +88,7 @@ class Profile extends BaseModule AND `visible` AND (NOT `deleted` OR `gravity` = ?) AND `wall` $sql_extra4 $sql_extra GROUP BY `parent-uri-id` ORDER BY `received` DESC", - $a->profile['uid'], + $a->profile_owner, GRAVITY_ACTIVITY ); @@ -99,7 +101,7 @@ class Profile extends BaseModule $last_updated_array[$last_updated_key] = time(); Session::set('last_updated', $last_updated_array); - if ($is_owner && !$profile_uid && !DI::config()->get('theme', 'hide_eventlist')) { + if ($is_owner && !$a->profile_owner && !DI::config()->get('theme', 'hide_eventlist')) { $o .= ProfileModel::getBirthdays(); $o .= ProfileModel::getEventsReminderHTML(); } @@ -113,7 +115,7 @@ class Profile extends BaseModule $items = DBA::toArray($items_stmt); - $o .= conversation($a, $items, 'profile', $profile_uid, false, 'received', $a->profile['uid']); + $o .= conversation($a, $items, 'profile', $a->profile_owner, false, 'received', $a->profile_owner); System::htmlUpdateExit($o); } diff --git a/src/Object/Post.php b/src/Object/Post.php index 089556a1fa..bd6e2299e3 100644 --- a/src/Object/Post.php +++ b/src/Object/Post.php @@ -970,7 +970,6 @@ class Post '$prompttext' => DI::l10n()->t('Please enter a image/video/audio/webpage URL:'), '$preview' => DI::l10n()->t('Preview'), '$indent' => $indent, - '$sourceapp' => DI::l10n()->t($a->sourcename), '$rand_num' => Crypto::randomDigits(12) ]); } diff --git a/src/Object/Thread.php b/src/Object/Thread.php index c23e723b7d..a73803b525 100644 --- a/src/Object/Thread.php +++ b/src/Object/Thread.php @@ -79,11 +79,11 @@ class Thread $this->writable = true; break; case 'profile': - $this->profile_owner = $a->profile['uid']; + $this->profile_owner = $a->profile_owner; $this->writable = Security::canWriteToUserWall($this->profile_owner); break; case 'display': - $this->profile_owner = $a->profile['uid']; + $this->profile_owner = $a->profile_owner; $this->writable = Security::canWriteToUserWall($this->profile_owner) || $writable; break; case 'community': diff --git a/src/Security/Authentication.php b/src/Security/Authentication.php index ce101477e0..3945ac8fdb 100644 --- a/src/Security/Authentication.php +++ b/src/Security/Authentication.php @@ -332,8 +332,7 @@ class Authentication $contact = $this->dba->selectFirst('contact', [], ['uid' => $user_record['uid'], 'self' => true]); if ($this->dba->isResult($contact)) { $a->contact = $contact; - $a->cid = $contact['id']; - $this->session->set('cid', $a->cid); + $this->session->set('cid', $contact['id']); } header('X-Account-Management-Status: active; name="' . $user_record['username'] . '"; id="' . $user_record['nickname'] . '"');