]> git.mxchange.org Git - friendica.git/blobdiff - src/Protocol/PortableContact.php
Update more PHPDoc, including in include/
[friendica.git] / src / Protocol / PortableContact.php
index 9c22a216319ff3d5095bb3dc2df9e95e58edd22c..da42a057edcc4b1951e9b49e8d4fa2c53198c77d 100644 (file)
@@ -23,10 +23,9 @@ use Friendica\Model\Profile;
 use Friendica\Network\Probe;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
+use Friendica\Util\Strings;
 use Friendica\Util\XML;
 
-require_once 'include/dba.php';
-
 class PortableContact
 {
        /**
@@ -45,7 +44,7 @@ class PortableContact
         * Once the global contact is stored add (if necessary) the contact linkage which associates
         * the given uid, cid to the global contact entry. There can be many uid/cid combinations
         * pointing to the same global contact id.
-        *
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        public static function loadWorker($cid, $uid = 0, $zcid = 0, $url = null)
        {
@@ -60,11 +59,11 @@ class PortableContact
         * @param integer $uid  User ID
         * @param integer $zcid Global Contact ID
         * @param integer $url  POCO address that should be polled
-        *
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        public static function load($cid, $uid, $zcid, $url)
        {
-               $a = get_app();
+               $a = \get_app();
 
                if ($cid) {
                        if (!$url || !$uid) {
@@ -83,7 +82,7 @@ class PortableContact
                        return;
                }
 
-               $url = $url . (($uid) ? '/@me/@all?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation' : '?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation') ;
+               $url = $url . (($uid) ? '/@me/@all?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation' : '?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation');
 
                Logger::log('load: ' . $url, Logger::DEBUG);
 
@@ -284,7 +283,7 @@ class PortableContact
 
                $r = q(
                        "SELECT `id` FROM `gserver` WHERE `nurl` = '%s' AND `last_contact` > `last_failure`",
-                       DBA::escape(normalise_link($server_url))
+                       DBA::escape(Strings::normaliseLink($server_url))
                );
 
                if (DBA::isResult($r)) {
@@ -309,7 +308,7 @@ class PortableContact
        {
                $gcontacts = q(
                        "SELECT * FROM `gcontact` WHERE `nurl` = '%s'",
-                       DBA::escape(normalise_link($profile))
+                       DBA::escape(Strings::normaliseLink($profile))
                );
 
                if (!DBA::isResult($gcontacts)) {
@@ -324,7 +323,7 @@ class PortableContact
 
                $server_url = '';
                if ($force) {
-                       $server_url = normalise_link(self::detectServer($profile));
+                       $server_url = Strings::normaliseLink(self::detectServer($profile));
                }
 
                if (($server_url == '') && ($gcontacts[0]["server_url"] != "")) {
@@ -332,10 +331,10 @@ class PortableContact
                }
 
                if (!$force && (($server_url == '') || ($gcontacts[0]["server_url"] == $gcontacts[0]["nurl"]))) {
-                       $server_url = normalise_link(self::detectServer($profile));
+                       $server_url = Strings::normaliseLink(self::detectServer($profile));
                }
 
-               if (!in_array($gcontacts[0]["network"], [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::FEED, Protocol::OSTATUS, ""])) {
+               if (!in_array($gcontacts[0]["network"], [Protocol::DFRN, Protocol::DIASPORA, Protocol::FEED, Protocol::OSTATUS, ""])) {
                        Logger::log("Profile ".$profile.": Network type ".$gcontacts[0]["network"]." can't be checked", Logger::DEBUG);
                        return false;
                }
@@ -344,7 +343,7 @@ class PortableContact
                        if (!self::checkServer($server_url, $gcontacts[0]["network"], $force)) {
                                if ($force) {
                                        $fields = ['last_failure' => DateTimeFormat::utcNow()];
-                                       DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]);
+                                       DBA::update('gcontact', $fields, ['nurl' => Strings::normaliseLink($profile)]);
                                }
 
                                Logger::log("Profile ".$profile.": Server ".$server_url." wasn't reachable.", Logger::DEBUG);
@@ -356,7 +355,7 @@ class PortableContact
                if (in_array($gcontacts[0]["network"], ["", Protocol::FEED])) {
                        $server = q(
                                "SELECT `network` FROM `gserver` WHERE `nurl` = '%s' AND `network` != ''",
-                               DBA::escape(normalise_link($server_url))
+                               DBA::escape(Strings::normaliseLink($server_url))
                        );
 
                        if ($server) {
@@ -369,7 +368,7 @@ class PortableContact
                // noscrape is really fast so we don't cache the call.
                if (($server_url != "") && ($gcontacts[0]["nick"] != "")) {
                        //  Use noscrape if possible
-                       $server = q("SELECT `noscrape`, `network` FROM `gserver` WHERE `nurl` = '%s' AND `noscrape` != ''", DBA::escape(normalise_link($server_url)));
+                       $server = q("SELECT `noscrape`, `network` FROM `gserver` WHERE `nurl` = '%s' AND `noscrape` != ''", DBA::escape(Strings::normaliseLink($server_url)));
 
                        if ($server) {
                                $curlResult = Network::curl($server[0]["noscrape"]."/".$gcontacts[0]["nick"]);
@@ -425,7 +424,7 @@ class PortableContact
 
                                                if (!empty($noscrape["updated"])) {
                                                        $fields = ['last_contact' => DateTimeFormat::utcNow()];
-                                                       DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]);
+                                                       DBA::update('gcontact', $fields, ['nurl' => Strings::normaliseLink($profile)]);
 
                                                        Logger::log("Profile ".$profile." was last updated at ".$noscrape["updated"]." (noscrape)", Logger::DEBUG);
 
@@ -449,11 +448,11 @@ class PortableContact
                // Is the profile link the alternate OStatus link notation? (http://domain.tld/user/4711)
                // Then check the other link and delete this one
                if (($data["network"] == Protocol::OSTATUS) && self::alternateOStatusUrl($profile)
-                       && (normalise_link($profile) == normalise_link($data["alias"]))
-                       && (normalise_link($profile) != normalise_link($data["url"]))
+                       && (Strings::normaliseLink($profile) == Strings::normaliseLink($data["alias"]))
+                       && (Strings::normaliseLink($profile) != Strings::normaliseLink($data["url"]))
                ) {
                        // Delete the old entry
-                       DBA::delete('gcontact', ['nurl' => normalise_link($profile)]);
+                       DBA::delete('gcontact', ['nurl' => Strings::normaliseLink($profile)]);
 
                        $gcontact = array_merge($gcontacts[0], $data);
 
@@ -474,7 +473,7 @@ class PortableContact
 
                if (($data["poll"] == "") || (in_array($data["network"], [Protocol::FEED, Protocol::PHANTOM]))) {
                        $fields = ['last_failure' => DateTimeFormat::utcNow()];
-                       DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]);
+                       DBA::update('gcontact', $fields, ['nurl' => Strings::normaliseLink($profile)]);
 
                        Logger::log("Profile ".$profile." wasn't reachable (profile)", Logger::DEBUG);
                        return false;
@@ -490,7 +489,7 @@ class PortableContact
 
                if (!$curlResult->isSuccess()) {
                        $fields = ['last_failure' => DateTimeFormat::utcNow()];
-                       DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]);
+                       DBA::update('gcontact', $fields, ['nurl' => Strings::normaliseLink($profile)]);
 
                        Logger::log("Profile ".$profile." wasn't reachable (no feed)", Logger::DEBUG);
                        return false;
@@ -533,11 +532,11 @@ class PortableContact
                        $fields['updated'] = $last_updated;
                }
 
-               DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]);
+               DBA::update('gcontact', $fields, ['nurl' => Strings::normaliseLink($profile)]);
 
                if (($gcontacts[0]["generation"] == 0)) {
                        $fields = ['generation' => 9];
-                       DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]);
+                       DBA::update('gcontact', $fields, ['nurl' => Strings::normaliseLink($profile)]);
                }
 
                Logger::log("Profile ".$profile." was last updated at ".$last_updated, Logger::DEBUG);
@@ -644,6 +643,7 @@ class PortableContact
         *
         * @param string $server_url address of the server
         * @return array Server data
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        private static function fetchNodeinfo($server_url)
        {
@@ -697,6 +697,7 @@ class PortableContact
         *
         * @param string $nodeinfo_url address of the nodeinfo path
         * @return array Server data
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        private static function parseNodeinfo1($nodeinfo_url)
        {
@@ -733,7 +734,7 @@ class PortableContact
                        }
                }
 
-               if (is_array($nodeinfo['metadata']) && isset($nodeinfo['metadata']['nodeName'])) {
+               if (isset($nodeinfo['metadata']['nodeName'])) {
                        $server['site_name'] = $nodeinfo['metadata']['nodeName'];
                }
 
@@ -781,6 +782,7 @@ class PortableContact
         *
         * @param string $nodeinfo_url address of the nodeinfo path
         * @return array Server data
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        private static function parseNodeinfo2($nodeinfo_url)
        {
@@ -816,7 +818,7 @@ class PortableContact
                        }
                }
 
-               if (is_array($nodeinfo['metadata']) && isset($nodeinfo['metadata']['nodeName'])) {
+               if (isset($nodeinfo['metadata']['nodeName'])) {
                        $server['site_name'] = $nodeinfo['metadata']['nodeName'];
                }
 
@@ -930,11 +932,11 @@ class PortableContact
                        return false;
                }
 
-               $gserver = DBA::selectFirst('gserver', [], ['nurl' => normalise_link($server_url)]);
+               $gserver = DBA::selectFirst('gserver', [], ['nurl' => Strings::normaliseLink($server_url)]);
                if (DBA::isResult($gserver)) {
                        if ($gserver["created"] <= DBA::NULL_DATETIME) {
                                $fields = ['created' => DateTimeFormat::utcNow()];
-                               $condition = ['nurl' => normalise_link($server_url)];
+                               $condition = ['nurl' => Strings::normaliseLink($server_url)];
                                DBA::update('gserver', $fields, $condition);
                        }
                        $poco = $gserver["poco"];
@@ -990,7 +992,7 @@ class PortableContact
                // Mastodon uses the "@" for user profiles.
                // But this can be misunderstood.
                if (parse_url($server_url, PHP_URL_USER) != '') {
-                       DBA::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => normalise_link($server_url)]);
+                       DBA::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => Strings::normaliseLink($server_url)]);
                        return false;
                }
 
@@ -1006,7 +1008,7 @@ class PortableContact
                if (DBA::isResult($gserver) && ($orig_server_url == $server_url) &&
                        ($curlResult->isTimeout())) {
                        Logger::log("Connection to server ".$server_url." timed out.", Logger::DEBUG);
-                       DBA::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => normalise_link($server_url)]);
+                       DBA::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => Strings::normaliseLink($server_url)]);
                        return false;
                }
 
@@ -1021,7 +1023,7 @@ class PortableContact
                        // Quit if there is a timeout
                        if ($curlResult->isTimeout()) {
                                Logger::log("Connection to server " . $server_url . " timed out.", Logger::DEBUG);
-                               DBA::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => normalise_link($server_url)]);
+                               DBA::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => Strings::normaliseLink($server_url)]);
                                return false;
                        }
 
@@ -1048,7 +1050,7 @@ class PortableContact
 
                if (!$failure) {
                        // This will be too low, but better than no value at all.
-                       $registered_users = DBA::count('gcontact', ['server_url' => normalise_link($server_url)]);
+                       $registered_users = DBA::count('gcontact', ['server_url' => Strings::normaliseLink($server_url)]);
                }
 
                // Look for poco
@@ -1374,14 +1376,15 @@ class PortableContact
                                                $site_name = $data['site_name'];
                                        }
 
-                                       $info = $data['info'];
-                                       if (in_array($data['register_policy'], ['REGISTER_CLOSED', 'REGISTER_APPROVE', 'REGISTER_OPEN'])) {
-                                               $register_policy = constant($data['register_policy']);
+                                       $info = defaults($data, 'info', '');
+                                       $register_policy = defaults($data, 'register_policy', REGISTER_CLOSED);
+                                       if (in_array($register_policy, ['REGISTER_CLOSED', 'REGISTER_APPROVE', 'REGISTER_OPEN'])) {
+                                               $register_policy = constant($register_policy);
                                        } else {
-                                               Logger::log("Register policy '{$data['register_policy']}' from $server_url is invalid.");
+                                               Logger::log("Register policy '$register_policy' from $server_url is invalid.");
                                                $register_policy = REGISTER_CLOSED; // set a default value
                                        }
-                                       $platform = $data['platform'];
+                                       $platform = defaults($data, 'platform', '');
                                }
                        }
                }
@@ -1410,7 +1413,7 @@ class PortableContact
                }
 
                // Check again if the server exists
-               $found = DBA::exists('gserver', ['nurl' => normalise_link($server_url)]);
+               $found = DBA::exists('gserver', ['nurl' => Strings::normaliseLink($server_url)]);
 
                $version = strip_tags($version);
                $site_name = strip_tags($site_name);
@@ -1424,9 +1427,9 @@ class PortableContact
                                'last_contact' => $last_contact, 'last_failure' => $last_failure];
 
                if ($found) {
-                       DBA::update('gserver', $fields, ['nurl' => normalise_link($server_url)]);
+                       DBA::update('gserver', $fields, ['nurl' => Strings::normaliseLink($server_url)]);
                } elseif (!$failure) {
-                       $fields['nurl'] = normalise_link($server_url);
+                       $fields['nurl'] = Strings::normaliseLink($server_url);
                        $fields['created'] = DateTimeFormat::utcNow();
                        DBA::insert('gserver', $fields);
                }
@@ -1444,6 +1447,7 @@ class PortableContact
         * @brief Fetch relay data from a given server url
         *
         * @param string $server_url address of the server
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        private static function discoverRelay($server_url)
        {
@@ -1461,7 +1465,7 @@ class PortableContact
                        return;
                }
 
-               $gserver = DBA::selectFirst('gserver', ['id', 'relay-subscribe', 'relay-scope'], ['nurl' => normalise_link($server_url)]);
+               $gserver = DBA::selectFirst('gserver', ['id', 'relay-subscribe', 'relay-scope'], ['nurl' => Strings::normaliseLink($server_url)]);
 
                if (!DBA::isResult($gserver)) {
                        return;
@@ -1518,6 +1522,7 @@ class PortableContact
        /**
         * @brief Returns a list of all known servers
         * @return array List of server urls
+        * @throws Exception
         */
        public static function serverlist()
        {
@@ -1542,6 +1547,7 @@ class PortableContact
         * @brief Fetch server list from remote servers and adds them when they are new.
         *
         * @param string $poco URL to the POCO endpoint
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        private static function fetchServerlist($poco)
        {
@@ -1560,7 +1566,7 @@ class PortableContact
                foreach ($serverlist as $server) {
                        $server_url = str_replace("/index.php", "", $server['url']);
 
-                       $r = q("SELECT `nurl` FROM `gserver` WHERE `nurl` = '%s'", DBA::escape(normalise_link($server_url)));
+                       $r = q("SELECT `nurl` FROM `gserver` WHERE `nurl` = '%s'", DBA::escape(Strings::normaliseLink($server_url)));
 
                        if (!DBA::isResult($r)) {
                                Logger::log("Call server check for server ".$server_url, Logger::DEBUG);
@@ -1776,7 +1782,7 @@ class PortableContact
                                $curlResult = Network::curl($url);
 
                                if ($curlResult->isSuccess()) {
-                                       $data = json_decode($curlResult["body"], true);
+                                       $data = json_decode($curlResult->getBody(), true);
 
                                        if (!empty($data)) {
                                                self::discoverServer($data, 3);