X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModule%2FProfile.php;h=e1903b8c55f3ba985f3196a9849aaa4d570ad137;hb=6c36fd9e01510a14fea9de766b4afe6760912a2e;hp=fceea726b4cfe863d203673dbf11095810c0595b;hpb=2628da422a57f573466f08ca3eb5791bf2bc35cf;p=friendica.git diff --git a/src/Module/Profile.php b/src/Module/Profile.php index fceea726b4..e1903b8c55 100644 --- a/src/Module/Profile.php +++ b/src/Module/Profile.php @@ -9,17 +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; @@ -32,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) { @@ -47,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 { @@ -139,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) { @@ -160,30 +163,19 @@ 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 = false; - if (!empty($_GET['tab'])) { - $tab = Strings::escapeTags(trim($_GET['tab'])); - } + $tab = Strings::escapeTags(trim($_GET['tab'] ?? '')); - $o .= ProfileModel::getTabs($a, $is_owner, $a->profile['nickname']); + $o .= ProfileModel::getTabs($a, $tab, $is_owner, $a->profile['nickname']); if ($tab === 'profile') { $o .= ProfileModel::getAdvanced($a); @@ -196,9 +188,9 @@ class Profile extends BaseModule $commpage = $a->profile['page-flags'] == User::PAGE_FLAGS_COMMUNITY; $commvisitor = $commpage && $remote_contact; - $a->page['aside'] .= posted_date_widget(System::baseUrl(true) . '/profile/' . $a->profile['nickname'], $a->profile['profile_uid'], true); - $a->page['aside'] .= Widget::categories(System::baseUrl(true) . '/profile/' . $a->profile['nickname'], (!empty($category) ? 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 = [ @@ -212,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'], @@ -223,11 +215,13 @@ 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', []); + if ($update) { - $last_updated = (defaults($_SESSION['last_updated'], $last_updated_key, 0)); + $last_updated = $last_updated_array[$last_updated_key] ?? 0; // If the page user is the owner of the page we should query for unseen // items. Otherwise use a timestamp of the last succesful update request. @@ -252,7 +246,7 @@ class Profile extends BaseModule AND `item`.`wall` $sql_extra4 $sql_extra - ORDER BY `item`.`created` DESC", + ORDER BY `item`.`received` DESC", $a->profile['profile_uid'], GRAVITY_ACTIVITY ); @@ -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 = ""; @@ -276,10 +270,10 @@ class Profile extends BaseModule } if (!empty($datequery)) { - $sql_extra2 .= Strings::protectSprintf(sprintf(" AND `thread`.`created` <= '%s' ", DBA::escape(DateTimeFormat::convert($datequery, 'UTC', date_default_timezone_get())))); + $sql_extra2 .= Strings::protectSprintf(sprintf(" AND `thread`.`received` <= '%s' ", DBA::escape(DateTimeFormat::convert($datequery, 'UTC', date_default_timezone_get())))); } if (!empty($datequery2)) { - $sql_extra2 .= Strings::protectSprintf(sprintf(" AND `thread`.`created` >= '%s' ", DBA::escape(DateTimeFormat::convert($datequery2, 'UTC', date_default_timezone_get())))); + $sql_extra2 .= Strings::protectSprintf(sprintf(" AND `thread`.`received` >= '%s' ", DBA::escape(DateTimeFormat::convert($datequery2, 'UTC', date_default_timezone_get())))); } // Does the profile page belong to a forum? @@ -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()); @@ -326,7 +320,7 @@ class Profile extends BaseModule $sql_extra3 $sql_extra $sql_extra2 - ORDER BY `thread`.`created` DESC + ORDER BY `thread`.`received` DESC $pager_sql", $a->profile['profile_uid'] ); @@ -334,9 +328,10 @@ class Profile extends BaseModule // Set a time stamp for this page. We will make use of it when we // search for new items (update routine) - $_SESSION['last_updated'][$last_updated_key] = time(); + $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(); } @@ -350,7 +345,13 @@ class Profile extends BaseModule $items = DBA::toArray($items_stmt); - $o .= conversation($a, $items, $pager, 'profile', $update, false, 'created', $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));