X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCore%2FSession.php;h=aaead868a0377cdff2999e7788a63e05c628d292;hb=0447bb2769648eadd718e3dd9560ce2f480af8d8;hp=9927fca189336f539bfc339f0e1b6222fa5326f3;hpb=d41399496ed6d8f8a77f485aa0642e2b7ad779e9;p=friendica.git diff --git a/src/Core/Session.php b/src/Core/Session.php index 9927fca189..aaead868a0 100644 --- a/src/Core/Session.php +++ b/src/Core/Session.php @@ -53,7 +53,7 @@ class Session /** * Retrieves a key from the session super global or the defaults if the key is missing or the value is falsy. - * + * * Handle the case where session_start() hasn't been called and the super global isn't available. * * @param string $name @@ -99,6 +99,14 @@ class Session unset($_SESSION[$name]); } + /** + * Clears the current session array + */ + public static function clear() + { + $_SESSION = []; + } + /** * @brief Sets the provided user's authenticated session * @@ -107,6 +115,7 @@ class Session * @param bool $login_initial * @param bool $interactive * @param bool $login_refresh + * @throws \Friendica\Network\HTTPException\ForbiddenException * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ public static function setAuthenticatedForUser(App $a, array $user_record, $login_initial = false, $interactive = false, $login_refresh = false) @@ -119,21 +128,10 @@ class Session 'page_flags' => $user_record['page-flags'], 'my_url' => $a->getBaseURL() . '/profile/' . $user_record['nickname'], 'my_address' => $user_record['nickname'] . '@' . substr($a->getBaseURL(), strpos($a->getBaseURL(), '://') + 3), - 'addr' => defaults($_SERVER, 'REMOTE_ADDR', '0.0.0.0'), - 'remote' => [] + 'addr' => ($_SERVER['REMOTE_ADDR'] ?? '') ?: '0.0.0.0' ]); - $remote_contacts = DBA::select('contact', ['id', 'uid'], ['nurl' => Strings::normaliseLink($_SESSION['my_url']), 'rel' => [Contact::FOLLOWER, Contact::FRIEND], 'self' => false]); - while ($contact = DBA::fetch($remote_contacts)) { - if (($contact['uid'] == 0) || Contact::isBlockedByUser($contact['id'], $contact['uid'])) { - continue; - } - - /// @todo Change it to this format to save space - // $_SESSION['remote'][$contact['uid']] = $contact['id']; - $_SESSION['remote'][$contact['uid']] = ['cid' => $contact['id'], 'uid' => $contact['uid']]; - } - DBA::close($remote_contacts); + self::setVisitorsContacts(); $member_since = strtotime($user_record['register_date']); self::set('new_member', time() < ($member_since + ( 60 * 60 * 24 * 14))); @@ -216,4 +214,68 @@ class Session } } } + + /** + * Returns contact ID for given user ID + * + * @param integer $uid User ID + * @return integer Contact ID of visitor for given user ID + */ + public static function getRemoteContactID($uid) + { + if (empty($_SESSION['remote'][$uid])) { + return false; + } + + return $_SESSION['remote'][$uid]; + } + + /** + * Returns User ID for given contact ID of the visitor + * + * @param integer $cid Contact ID + * @return integer User ID for given contact ID of the visitor + */ + public static function getUserIDForVisitorContactID($cid) + { + if (empty($_SESSION['remote'])) { + return false; + } + + return array_search($cid, $_SESSION['remote']); + } + + /** + * Set the session variable that contains the contact IDs for the visitor's contact URL + * + * @param string $url Contact URL + */ + public static function setVisitorsContacts() + { + $_SESSION['remote'] = []; + + $remote_contacts = DBA::select('contact', ['id', 'uid'], ['nurl' => Strings::normaliseLink($_SESSION['my_url']), 'rel' => [Contact::FOLLOWER, Contact::FRIEND], 'self' => false]); + while ($contact = DBA::fetch($remote_contacts)) { + if (($contact['uid'] == 0) || Contact::isBlockedByUser($contact['id'], $contact['uid'])) { + continue; + } + + $_SESSION['remote'][$contact['uid']] = $contact['id']; + } + DBA::close($remote_contacts); + } + + /** + * Returns if the current visitor is authenticated + * + * @return boolean "true" when visitor is either a local or remote user + */ + public static function isAuthenticated() + { + if (empty($_SESSION['authenticated'])) { + return false; + } + + return $_SESSION['authenticated']; + } }