]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/User.php
Merge pull request #9032 from annando/local-access
[friendica.git] / src / Model / User.php
index f7c683b62b848ea5cb3aed119f5e7fcceff7e997..990df65dbd30f585bf83625cff5eaa3efd35ffcb 100644 (file)
@@ -97,6 +97,8 @@ class User
         * @}
         */
 
+       private static $owner;
+
        /**
         * Returns true if a user record exists with the provided id
         *
@@ -160,14 +162,29 @@ class User
         * @return integer user id
         * @throws Exception
         */
-       public static function getIdForURL($url)
+       public static function getIdForURL(string $url)
        {
-               $self = DBA::selectFirst('contact', ['uid'], ['nurl' => Strings::normaliseLink($url), 'self' => true]);
-               if (!DBA::isResult($self)) {
-                       return false;
-               } else {
+               // Avoid any database requests when the hostname isn't even part of the url.
+               if (!strpos($url, DI::baseUrl()->getHostname())) {
+                       return 0;
+               }
+
+               $self = Contact::selectFirst(['uid'], ['self' => true, 'nurl' => Strings::normaliseLink($url)]);
+               if (!empty($self['uid'])) {
+                       return $self['uid'];
+               }
+
+               $self = Contact::selectFirst(['uid'], ['self' => true, 'addr' => $url]);
+               if (!empty($self['uid'])) {
+                       return $self['uid'];
+               }
+
+               $self = Contact::selectFirst(['uid'], ['self' => true, 'alias' => [$url, Strings::normaliseLink($url)]]);
+               if (!empty($self['uid'])) {
                        return $self['uid'];
                }
+
+               return 0;
        }
 
        /**
@@ -211,8 +228,12 @@ class User
         * @return boolean|array
         * @throws Exception
         */
-       public static function getOwnerDataById($uid, $check_valid = true)
+       public static function getOwnerDataById(int $uid, bool $check_valid = true)
        {
+               if (!empty(self::$owner[$uid])) {
+                       return self::$owner[$uid];
+               }
+
                $owner = DBA::selectFirst('owner-view', [], ['uid' => $uid]);
                if (!DBA::isResult($owner)) {
                        if (!DBA::exists('user', ['uid' => $uid]) || !$check_valid) {
@@ -256,6 +277,7 @@ class User
                        $owner = self::getOwnerDataById($uid, false);
                }
 
+               self::$owner[$uid] = $owner;
                return $owner;
        }