X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FModule%2FProfile.php;h=e1903b8c55f3ba985f3196a9849aaa4d570ad137;hb=6c36fd9e01510a14fea9de766b4afe6760912a2e;hp=8e5bedd847ae367252973e0375f449858048d572;hpb=4c4ed63dca13cc0382af9020e69980c63f988b47;p=friendica.git diff --git a/src/Module/Profile.php b/src/Module/Profile.php index 8e5bedd847..e1903b8c55 100644 --- a/src/Module/Profile.php +++ b/src/Module/Profile.php @@ -9,18 +9,15 @@ use Friendica\Content\Widget; use Friendica\Core\ACL; use Friendica\Core\Config; use Friendica\Core\Hook; -use Friendica\Core\L10n; -use Friendica\Core\PConfig; use Friendica\Core\Session; use Friendica\Core\System; use Friendica\Database\DBA; -use Friendica\Model\Contact as ContactModel; -use Friendica\Model\Group; +use Friendica\DI; use Friendica\Model\Item; use Friendica\Model\Profile as ProfileModel; use Friendica\Model\User; +use Friendica\Module\Security\Login; use Friendica\Protocol\ActivityPub; -use Friendica\Protocol\DFRN; use Friendica\Util\DateTimeFormat; use Friendica\Util\Security; use Friendica\Util\Strings; @@ -33,9 +30,9 @@ class Profile extends BaseModule public static $which = ''; public static $profile = 0; - public static function init() + public static function init(array $parameters = []) { - $a = self::getApp(); + $a = DI::app(); // @TODO: Replace with parameter from router if ($a->argc < 2) { @@ -48,86 +45,94 @@ class Profile extends BaseModule if (local_user() && $a->argc > 2 && $a->argv[2] === 'view') { self::$which = $a->user['nickname']; self::$profile = filter_var($a->argv[1], FILTER_SANITIZE_NUMBER_INT); - } else { - DFRN::autoRedir($a, self::$which); } } - public static function rawContent() + public static function rawContent(array $parameters = []) { if (ActivityPub::isRequest()) { $user = DBA::selectFirst('user', ['uid'], ['nickname' => self::$which]); - $data = []; if (DBA::isResult($user)) { + // The function returns an empty array when the account is removed, expired or blocked $data = ActivityPub\Transmitter::getProfile($user['uid']); + if (!empty($data)) { + System::jsonExit($data, 'application/activity+json'); + } } - if (!empty($data)) { - System::jsonExit($data, 'application/activity+json'); - } elseif (DBA::exists('userd', ['username' => self::$which])) { + if (DBA::exists('userd', ['username' => self::$which])) { // Known deleted user $data = ActivityPub\Transmitter::getDeletedUser(self::$which); System::jsonError(410, $data); } else { // Any other case (unknown, blocked, unverified, expired, no profile, no self contact) - System::jsonError(404, $data); + System::jsonError(404, []); } } } - public static function content($update = 0) + public static function content(array $parameters = [], $update = 0) { - $a = self::getApp(); + $a = DI::app(); if (!$update) { ProfileModel::load($a, self::$which, self::$profile); - $blocked = !local_user() && !remote_user() && Config::get('system', 'block_public'); - $userblock = !local_user() && !remote_user() && $a->profile['hidewall']; + $page = DI::page(); + + $page['htmlhead'] .= "\n"; + + $blocked = !local_user() && !Session::getRemoteContactID($a->profile['profile_uid']) && DI::config()->get('system', 'block_public'); + $userblock = !local_user() && !Session::getRemoteContactID($a->profile['profile_uid']) && $a->profile['hidewall']; if (!empty($a->profile['page-flags']) && $a->profile['page-flags'] == User::PAGE_FLAGS_COMMUNITY) { - $a->page['htmlhead'] .= ''; + $page['htmlhead'] .= '' . "\n"; } if (!empty($a->profile['openidserver'])) { - $a->page['htmlhead'] .= '' . "\n"; + $page['htmlhead'] .= '' . "\n"; } if (!empty($a->profile['openid'])) { $delegate = strstr($a->profile['openid'], '://') ? $a->profile['openid'] : 'https://' . $a->profile['openid']; - $a->page['htmlhead'] .= '' . "\n"; + $page['htmlhead'] .= '' . "\n"; } // site block if (!$blocked && !$userblock) { - $keywords = str_replace(['#', ',', ' ', ',,'], ['', ' ', ',', ','], defaults($a->profile, 'pub_keywords', '')); + $keywords = str_replace(['#', ',', ' ', ',,'], ['', ' ', ',', ','], $a->profile['pub_keywords'] ?? ''); if (strlen($keywords)) { - $a->page['htmlhead'] .= '' . "\n"; + $page['htmlhead'] .= '' . "\n"; } } - $a->page['htmlhead'] .= '' . "\n"; - $a->page['htmlhead'] .= '' . "\n"; - $a->page['htmlhead'] .= '' . "\n"; - $a->page['htmlhead'] .= '' . "\n"; - $a->page['htmlhead'] .= '' . "\n"; - $uri = urlencode('acct:' . $a->profile['nickname'] . '@' . $a->getHostName() . ($a->getURLPath() ? '/' . $a->getURLPath() : '')); - $a->page['htmlhead'] .= '' . "\n"; - header('Link: <' . System::baseUrl() . '/xrd/?uri=' . $uri . '>; rel="lrdd"; type="application/xrd+xml"', false); + $page['htmlhead'] .= '' . "\n"; + + if (!$a->profile['net-publish'] || $a->profile['hidewall']) { + $page['htmlhead'] .= '' . "\n"; + } + + $page['htmlhead'] .= '' . "\n"; + $page['htmlhead'] .= '' . "\n"; + $page['htmlhead'] .= '' . "\n"; + $page['htmlhead'] .= '' . "\n"; + $uri = urlencode('acct:' . $a->profile['nickname'] . '@' . DI::baseUrl()->getHostname() . (DI::baseUrl()->getUrlPath() ? '/' . DI::baseUrl()->getUrlPath() : '')); + $page['htmlhead'] .= '' . "\n"; + header('Link: <' . DI::baseUrl() . '/xrd/?uri=' . $uri . '>; rel="lrdd"; type="application/xrd+xml"', false); $dfrn_pages = ['request', 'confirm', 'notify', 'poll']; foreach ($dfrn_pages as $dfrn) { - $a->page['htmlhead'] .= '' . "\n"; + $page['htmlhead'] .= '' . "\n"; } - $a->page['htmlhead'] .= '' . "\n"; + $page['htmlhead'] .= '' . "\n"; } $category = $datequery = $datequery2 = ''; if ($a->argc > 2) { for ($x = 2; $x < $a->argc; $x ++) { - if (is_a_date_arg($a->argv[$x])) { + if (DI::dtFormat()->isYearMonth($a->argv[$x])) { if ($datequery) { $datequery2 = Strings::escapeHtml($a->argv[$x]); } else { @@ -140,18 +145,15 @@ class Profile extends BaseModule } if (empty($category)) { - $category = defaults($_GET, 'category', ''); + $category = $_GET['category'] ?? ''; } - $hashtags = defaults($_GET, 'tag', ''); + $hashtags = $_GET['tag'] ?? ''; - if (Config::get('system', 'block_public') && !local_user() && !remote_user()) { + if (DI::config()->get('system', 'block_public') && !local_user() && !Session::getRemoteContactID($a->profile['profile_uid'])) { return Login::form(); } - $groups = []; - $remote_cid = null; - $o = ''; if ($update) { @@ -161,25 +163,17 @@ class Profile extends BaseModule Nav::setSelected('home'); } - $remote_contact = ContactModel::isFollower(remote_user(), $a->profile['profile_uid']); + $remote_contact = Session::getRemoteContactID($a->profile['profile_uid']); $is_owner = local_user() == $a->profile['profile_uid']; - $last_updated_key = "profile:" . $a->profile['profile_uid'] . ":" . local_user() . ":" . remote_user(); - - if ($remote_contact) { - $cdata = ContactModel::getPublicAndUserContacID(remote_user(), $a->profile['profile_uid']); - if (!empty($cdata['user'])) { - $groups = Group::getIdsByContactId($cdata['user']); - $remote_cid = $cdata['user']; - } - } + $last_updated_key = "profile:" . $a->profile['profile_uid'] . ":" . local_user() . ":" . $remote_contact; if (!empty($a->profile['hidewall']) && !$is_owner && !$remote_contact) { - notice(L10n::t('Access to this profile has been restricted.') . EOL); + notice(DI::l10n()->t('Access to this profile has been restricted.') . EOL); return ''; } if (!$update) { - $tab = Strings::escapeTags(trim(defaults($_GET, 'tab', ''))); + $tab = Strings::escapeTags(trim($_GET['tab'] ?? '')); $o .= ProfileModel::getTabs($a, $tab, $is_owner, $a->profile['nickname']); @@ -194,9 +188,9 @@ class Profile extends BaseModule $commpage = $a->profile['page-flags'] == User::PAGE_FLAGS_COMMUNITY; $commvisitor = $commpage && $remote_contact; - $a->page['aside'] .= Widget::postedByYear(System::baseUrl(true) . '/profile/' . $a->profile['nickname'], $a->profile['profile_uid'] ?? 0, true); - $a->page['aside'] .= Widget::categories(System::baseUrl(true) . '/profile/' . $a->profile['nickname'], XML::escape($category)); - $a->page['aside'] .= Widget::tagCloud(); + DI::page()['aside'] .= Widget::postedByYear(DI::baseUrl()->get(true) . '/profile/' . $a->profile['nickname'], $a->profile['profile_uid'] ?? 0, true); + DI::page()['aside'] .= Widget::categories(DI::baseUrl()->get(true) . '/profile/' . $a->profile['nickname'], XML::escape($category)); + DI::page()['aside'] .= Widget::tagCloud(); if (Security::canWriteToUserWall($a->profile['profile_uid'])) { $x = [ @@ -210,7 +204,7 @@ class Profile extends BaseModule || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid']) ) ? 'lock' : 'unlock', - 'acl' => $is_owner ? ACL::getFullSelectorHTML($a->user, true) : '', + 'acl' => $is_owner ? ACL::getFullSelectorHTML(DI::page(), $a->user, true) : '', 'bang' => '', 'visitor' => $is_owner || $commvisitor ? 'block' : 'none', 'profile_uid' => $a->profile['profile_uid'], @@ -221,7 +215,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['profile_uid'], $remote_contact, $groups, $remote_cid); + $sql_extra = Item::getPermissionsSQLByUserId($a->profile['profile_uid']); $sql_extra2 = ''; $last_updated_array = Session::get('last_updated', []); @@ -261,7 +255,7 @@ class Profile extends BaseModule return ''; } - $pager = new Pager($a->query_string); + $pager = new Pager(DI::args()->getQueryString()); } else { $sql_post_table = ""; @@ -293,10 +287,10 @@ class Profile extends BaseModule // check if we serve a mobile device and get the user settings // accordingly - if ($a->is_mobile) { - $itemspage_network = PConfig::get(local_user(), 'system', 'itemspage_mobile_network', 10); + if (DI::mode()->isMobile()) { + $itemspage_network = DI::pConfig()->get(local_user(), 'system', 'itemspage_mobile_network', 10); } else { - $itemspage_network = PConfig::get(local_user(), 'system', 'itemspage_network', 20); + $itemspage_network = DI::pConfig()->get(local_user(), 'system', 'itemspage_network', 20); } // now that we have the user settings, see if the theme forces @@ -305,7 +299,7 @@ class Profile extends BaseModule $itemspage_network = $a->force_max_items; } - $pager = new Pager($a->query_string, $itemspage_network); + $pager = new Pager(DI::args()->getQueryString(), $itemspage_network); $pager_sql = sprintf(" LIMIT %d, %d ", $pager->getStart(), $pager->getItemsPerPage()); @@ -337,7 +331,7 @@ class Profile extends BaseModule $last_updated_array[$last_updated_key] = time(); Session::set('last_updated', $last_updated_array); - if ($is_owner && !$update && !Config::get('theme', 'hide_eventlist')) { + if ($is_owner && !$update && !DI::config()->get('theme', 'hide_eventlist')) { $o .= ProfileModel::getBirthdays(); $o .= ProfileModel::getEventsReminderHTML(); } @@ -351,7 +345,13 @@ class Profile extends BaseModule $items = DBA::toArray($items_stmt); - $o .= conversation($a, $items, $pager, 'profile', $update, false, 'received', $a->profile['profile_uid']); + if ($pager->getStart() == 0 && !empty($a->profile['profile_uid'])) { + $pinned_items = Item::selectPinned($a->profile['profile_uid'], ['uri', 'pinned'], ['true' . $sql_extra]); + $pinned = Item::inArray($pinned_items); + $items = array_merge($items, $pinned); + } + + $o .= conversation($a, $items, $pager, 'profile', $update, false, 'pinned_received', $a->profile['profile_uid']); if (!$update) { $o .= $pager->renderMinimal(count($items));