]> git.mxchange.org Git - friendica.git/blobdiff - src/Worker/DiscoverPoCo.php
wrapping up 2019.12
[friendica.git] / src / Worker / DiscoverPoCo.php
index f0335bc8e443334aa0ac5866775219d812825cb8..d495b4c2a6a8db94c6a7e070eb09f94afad25931 100644 (file)
@@ -6,16 +6,21 @@ namespace Friendica\Worker;
 
 use Friendica\Core\Cache;
 use Friendica\Core\Config;
+use Friendica\Core\Logger;
+use Friendica\Core\Protocol;
 use Friendica\Core\Worker;
-use Friendica\Database\DBM;
+use Friendica\Database\DBA;
 use Friendica\Model\GContact;
+use Friendica\Model\Contact;
+use Friendica\Model\GServer;
 use Friendica\Network\Probe;
 use Friendica\Protocol\PortableContact;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
-use dba;
+use Friendica\Util\Strings;
 
-class DiscoverPoCo {
+class DiscoverPoCo
+{
        /// @todo Clean up this mess of a parameter hell and split it in several classes
        public static function execute($command = '', $param1 = '', $param2 = '', $param3 = '', $param4 = '')
        {
@@ -51,15 +56,15 @@ class DiscoverPoCo {
                } elseif ($command == "check_profile") {
                        $mode = 8;
                } elseif ($command !== "") {
-                       logger("Unknown or missing parameter ".$command."\n");
+                       Logger::log("Unknown or missing parameter ".$command."\n");
                        return;
                }
 
-               logger('start '.$search);
+               Logger::log('start '.$search);
 
                if ($mode == 8) {
                        if ($param1 != "") {
-                               PortableContact::lastUpdated($param1, true);
+                               GContact::updateFromProbe($param1, true);
                        }
                } elseif ($mode == 7) {
                        if (!empty($param4)) {
@@ -78,17 +83,17 @@ class DiscoverPoCo {
                                return;
                        }
                        $server_url = filter_var($server_url, FILTER_SANITIZE_URL);
-                       if (substr(normalise_link($server_url), 0, 7) != "http://") {
+                       if (substr(Strings::normaliseLink($server_url), 0, 7) != "http://") {
                                return;
                        }
                        $result = "Checking server ".$server_url." - ";
-                       $ret = PortableContact::checkServer($server_url);
+                       $ret = GServer::check($server_url);
                        if ($ret) {
                                $result .= "success";
                        } else {
                                $result .= "failed";
                        }
-                       logger($result, LOGGER_DEBUG);
+                       Logger::log($result, Logger::DEBUG);
                } elseif ($mode == 3) {
                        GContact::updateSuggestions();
                } elseif (($mode == 2) && Config::get('system', 'poco_completion')) {
@@ -96,7 +101,7 @@ class DiscoverPoCo {
                } elseif (($mode == 1) && ($search != "") && Config::get('system', 'poco_local_search')) {
                        self::discoverDirectory($search);
                        self::gsSearchUser($search);
-               } elseif (($mode == 0) && ($search == "") && (Config::get('system', 'poco_discovery') > 0)) {
+               } elseif (($mode == 0) && ($search == "") && (Config::get('system', 'poco_discovery') != PortableContact::DISABLED)) {
                        // Query Friendica and Hubzilla servers for their users
                        PortableContact::discover();
 
@@ -106,7 +111,7 @@ class DiscoverPoCo {
                        }
                }
 
-               logger('end '.$search);
+               Logger::log('end '.$search);
 
                return;
        }
@@ -118,7 +123,7 @@ class DiscoverPoCo {
        private static function updateServer() {
                $r = q("SELECT `url`, `created`, `last_failure`, `last_contact` FROM `gserver` ORDER BY rand()");
 
-               if (!DBM::is_result($r)) {
+               if (!DBA::isResult($r)) {
                        return;
                }
 
@@ -128,7 +133,7 @@ class DiscoverPoCo {
                        if (!PortableContact::updateNeeded($server["created"], "", $server["last_failure"], $server["last_contact"])) {
                                continue;
                        }
-                       logger('Update server status for server '.$server["url"], LOGGER_DEBUG);
+                       Logger::log('Update server status for server '.$server["url"], Logger::DEBUG);
 
                        Worker::add(PRIORITY_LOW, "DiscoverPoCo", "server", $server["url"]);
 
@@ -139,7 +144,7 @@ class DiscoverPoCo {
        }
 
        private static function discoverUsers() {
-               logger("Discover users", LOGGER_DEBUG);
+               Logger::log("Discover users", Logger::DEBUG);
 
                $starttime = time();
 
@@ -147,8 +152,8 @@ class DiscoverPoCo {
                                WHERE `last_contact` < UTC_TIMESTAMP - INTERVAL 1 MONTH AND
                                        `last_failure` < UTC_TIMESTAMP - INTERVAL 1 MONTH AND
                                        `network` IN ('%s', '%s', '%s', '%s', '') ORDER BY rand()",
-                               dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA),
-                               dbesc(NETWORK_OSTATUS), dbesc(NETWORK_FEED));
+                               DBA::escape(Protocol::DFRN), DBA::escape(Protocol::DIASPORA),
+                               DBA::escape(Protocol::OSTATUS), DBA::escape(Protocol::FEED));
 
                if (!$users) {
                        return;
@@ -159,44 +164,39 @@ class DiscoverPoCo {
 
                        $urlparts = parse_url($user["url"]);
                        if (!isset($urlparts["scheme"])) {
-                               dba::update('gcontact', ['network' => NETWORK_PHANTOM],
-                                       ['nurl' => normalise_link($user["url"])]);
+                               DBA::update('gcontact', ['network' => Protocol::PHANTOM],
+                                       ['nurl' => Strings::normaliseLink($user["url"])]);
                                continue;
                         }
 
-                       if (in_array($urlparts["host"], ["www.facebook.com", "facebook.com", "twitter.com",
-                                                               "identi.ca", "alpha.app.net"])) {
-                               $networks = ["www.facebook.com" => NETWORK_FACEBOOK,
-                                               "facebook.com" => NETWORK_FACEBOOK,
-                                               "twitter.com" => NETWORK_TWITTER,
-                                               "identi.ca" => NETWORK_PUMPIO,
-                                               "alpha.app.net" => NETWORK_APPNET];
+                       if (in_array($urlparts["host"], ["twitter.com", "identi.ca"])) {
+                               $networks = ["twitter.com" => Protocol::TWITTER, "identi.ca" => Protocol::PUMPIO];
 
-                               dba::update('gcontact', ['network' => $networks[$urlparts["host"]]],
-                                       ['nurl' => normalise_link($user["url"])]);
+                               DBA::update('gcontact', ['network' => $networks[$urlparts["host"]]],
+                                       ['nurl' => Strings::normaliseLink($user["url"])]);
                                continue;
                        }
 
-                       $server_url = PortableContact::detectServer($user["url"]);
+                       $server_url = Contact::getBasepath($user["url"]);
                        $force_update = false;
 
                        if ($user["server_url"] != "") {
 
-                               $force_update = (normalise_link($user["server_url"]) != normalise_link($server_url));
+                               $force_update = (Strings::normaliseLink($user["server_url"]) != Strings::normaliseLink($server_url));
 
                                $server_url = $user["server_url"];
                        }
 
-                       if ((($server_url == "") && ($user["network"] == NETWORK_FEED)) || $force_update || PortableContact::checkServer($server_url, $user["network"])) {
-                               logger('Check profile '.$user["url"]);
+                       if ((($server_url == "") && ($user["network"] == Protocol::FEED)) || $force_update || GServer::check($server_url, $user["network"])) {
+                               Logger::log('Check profile '.$user["url"]);
                                Worker::add(PRIORITY_LOW, "DiscoverPoCo", "check_profile", $user["url"]);
 
                                if (++$checked > 100) {
                                        return;
                                }
                        } else {
-                               dba::update('gcontact', ['last_failure' => DateTimeFormat::utcNow()],
-                                       ['nurl' => normalise_link($user["url"])]);
+                               DBA::update('gcontact', ['last_failure' => DateTimeFormat::utcNow()],
+                                       ['nurl' => Strings::normaliseLink($user["url"])]);
                        }
 
                        // Quit the loop after 3 minutes
@@ -212,7 +212,7 @@ class DiscoverPoCo {
                if (!is_null($data)) {
                        // Only search for the same item every 24 hours
                        if (time() < $data + (60 * 60 * 24)) {
-                               logger("Already searched for ".$search." in the last 24 hours", LOGGER_DEBUG);
+                               Logger::log("Already searched for ".$search." in the last 24 hours", Logger::DEBUG);
                                return;
                        }
                }
@@ -220,35 +220,35 @@ class DiscoverPoCo {
                $x = Network::fetchUrl(get_server()."/lsearch?p=1&n=500&search=".urlencode($search));
                $j = json_decode($x);
 
-               if (count($j->results)) {
+               if (!empty($j->results)) {
                        foreach ($j->results as $jj) {
                                // Check if the contact already exists
-                               $exists = q("SELECT `id`, `last_contact`, `last_failure`, `updated` FROM `gcontact` WHERE `nurl` = '%s'", normalise_link($jj->url));
-                               if (DBM::is_result($exists)) {
-                                       logger("Profile ".$jj->url." already exists (".$search.")", LOGGER_DEBUG);
+                               $exists = q("SELECT `id`, `last_contact`, `last_failure`, `updated` FROM `gcontact` WHERE `nurl` = '%s'", Strings::normaliseLink($jj->url));
+                               if (DBA::isResult($exists)) {
+                                       Logger::log("Profile ".$jj->url." already exists (".$search.")", Logger::DEBUG);
 
                                        if (($exists[0]["last_contact"] < $exists[0]["last_failure"]) &&
                                                ($exists[0]["updated"] < $exists[0]["last_failure"])) {
                                                continue;
                                        }
                                        // Update the contact
-                                       PortableContact::lastUpdated($jj->url);
+                                       GContact::updateFromProbe($jj->url);
                                        continue;
                                }
 
-                               $server_url = PortableContact::detectServer($jj->url);
+                               $server_url = Contact::getBasepath($jj->url);
                                if ($server_url != '') {
-                                       if (!PortableContact::checkServer($server_url)) {
-                                               logger("Friendica server ".$server_url." doesn't answer.", LOGGER_DEBUG);
+                                       if (!GServer::check($server_url)) {
+                                               Logger::log("Friendica server ".$server_url." doesn't answer.", Logger::DEBUG);
                                                continue;
                                        }
-                                       logger("Friendica server ".$server_url." seems to be okay.", LOGGER_DEBUG);
+                                       Logger::log("Friendica server ".$server_url." seems to be okay.", Logger::DEBUG);
                                }
 
                                $data = Probe::uri($jj->url);
-                               if ($data["network"] == NETWORK_DFRN) {
-                                       logger("Profile ".$jj->url." is reachable (".$search.")", LOGGER_DEBUG);
-                                       logger("Add profile ".$jj->url." to local directory (".$search.")", LOGGER_DEBUG);
+                               if ($data["network"] == Protocol::DFRN) {
+                                       Logger::log("Profile ".$jj->url." is reachable (".$search.")", Logger::DEBUG);
+                                       Logger::log("Add profile ".$jj->url." to local directory (".$search.")", Logger::DEBUG);
 
                                        if ($jj->tags != "") {
                                                $data["keywords"] = $jj->tags;
@@ -258,17 +258,20 @@ class DiscoverPoCo {
 
                                        GContact::update($data);
                                } else {
-                                       logger("Profile ".$jj->url." is not responding or no Friendica contact - but network ".$data["network"], LOGGER_DEBUG);
+                                       Logger::log("Profile ".$jj->url." is not responding or no Friendica contact - but network ".$data["network"], Logger::DEBUG);
                                }
                        }
                }
-               Cache::set("dirsearch:".$search, time(), CACHE_DAY);
+               Cache::set("dirsearch:".$search, time(), Cache::DAY);
        }
 
        /**
         * @brief Search for GNU Social user with gstools.org
         *
         * @param string $search User name
+        * @return bool
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+        * @throws \ImagickException
         */
        private static function gsSearchUser($search) {
 
@@ -276,16 +279,14 @@ class DiscoverPoCo {
                // It is not removed since I hope that there will be a successor.
                return false;
 
-               $a = get_app();
-
                $url = "http://gstools.org/api/users_search/".urlencode($search);
 
-               $result = Network::curl($url);
-               if (!$result["success"]) {
+               $curlResult = Network::curl($url);
+               if (!$curlResult->isSuccess()) {
                        return false;
                }
 
-               $contacts = json_decode($result["body"]);
+               $contacts = json_decode($curlResult->getBody());
 
                if ($contacts->status == 'ERROR') {
                        return false;
@@ -295,7 +296,7 @@ class DiscoverPoCo {
                /// @TODO find all those and convert to all lower-case which is a keyword then
                foreach ($contacts->data AS $user) {
                        $contact = Probe::uri($user->site_address."/".$user->name);
-                       if ($contact["network"] != NETWORK_PHANTOM) {
+                       if ($contact["network"] != Protocol::PHANTOM) {
                                $contact["about"] = $user->description;
                                GContact::update($contact);
                        }