]> git.mxchange.org Git - friendica.git/blobdiff - src/Protocol/PortableContact.php
Add missing non-empty data condition to Protocol\PortableContact
[friendica.git] / src / Protocol / PortableContact.php
index 2939f69e55c2cbe42727cd76e7b41952df811bda..7900ff540bfda7672d76416a6acba139c6b8d676 100644 (file)
@@ -14,20 +14,26 @@ use DOMXPath;
 use Exception;
 use Friendica\Content\Text\HTML;
 use Friendica\Core\Config;
+use Friendica\Core\Logger;
 use Friendica\Core\Protocol;
 use Friendica\Core\Worker;
 use Friendica\Database\DBA;
 use Friendica\Model\GContact;
 use Friendica\Model\Profile;
+use Friendica\Module\Register;
 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
 {
+       const DISABLED = 0;
+       const USERS = 1;
+       const USERS_GCONTACTS = 2;
+       const USERS_GCONTACTS_FALLBACK = 3;
+
        /**
         * @brief Fetch POCO data
         *
@@ -44,7 +50,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)
        {
@@ -59,12 +65,10 @@ 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();
-
                if ($cid) {
                        if (!$url || !$uid) {
                                $contact = DBA::selectFirst('contact', ['poco', 'uid'], ['id' => $cid]);
@@ -82,23 +86,24 @@ 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('load: ' . $url, LOGGER_DEBUG);
+               Logger::log('load: ' . $url, Logger::DEBUG);
 
-               $s = Network::fetchUrl($url);
+               $fetchresult = Network::fetchUrlFull($url);
+               $s = $fetchresult->getBody();
 
-               logger('load: returns ' . $s, LOGGER_DATA);
+               Logger::log('load: returns ' . $s, Logger::DATA);
 
-               logger('load: return code: ' . $a->get_curl_code(), LOGGER_DEBUG);
+               Logger::log('load: return code: ' . $fetchresult->getReturnCode(), Logger::DEBUG);
 
-               if (($a->get_curl_code() > 299) || (! $s)) {
+               if (($fetchresult->getReturnCode() > 299) || (! $s)) {
                        return;
                }
 
                $j = json_decode($s, true);
 
-               logger('load: json: ' . print_r($j, true), LOGGER_DATA);
+               Logger::log('load: json: ' . print_r($j, true), Logger::DATA);
 
                if (!isset($j['entry'])) {
                        return;
@@ -112,7 +117,7 @@ class PortableContact
                        $connect_url = '';
                        $name = '';
                        $network = '';
-                       $updated = NULL_DATE;
+                       $updated = DBA::NULL_DATETIME;
                        $location = '';
                        $about = '';
                        $keywords = '';
@@ -198,10 +203,10 @@ class PortableContact
 
                                GContact::link($gcid, $uid, $cid, $zcid);
                        } catch (Exception $e) {
-                               logger($e->getMessage(), LOGGER_DEBUG);
+                               Logger::log($e->getMessage(), Logger::DEBUG);
                        }
                }
-               logger("load: loaded $total entries", LOGGER_DEBUG);
+               Logger::log("load: loaded $total entries", Logger::DEBUG);
 
                $condition = ["`cid` = ? AND `uid` = ? AND `zcid` = ? AND `updated` < UTC_TIMESTAMP - INTERVAL 2 DAY", $cid, $uid, $zcid];
                DBA::delete('glink', $condition);
@@ -229,7 +234,6 @@ class PortableContact
                        $friendica = preg_replace("=(https?://)(.*)/profile/(.*)=ism", "$1$2", $profile);
                        if ($friendica != $profile) {
                                $server_url = $friendica;
-                               $network = Protocol::DFRN;
                        }
                }
 
@@ -237,7 +241,6 @@ class PortableContact
                        $diaspora = preg_replace("=(https?://)(.*)/u/(.*)=ism", "$1$2", $profile);
                        if ($diaspora != $profile) {
                                $server_url = $diaspora;
-                               $network = Protocol::DIASPORA;
                        }
                }
 
@@ -245,7 +248,6 @@ class PortableContact
                        $red = preg_replace("=(https?://)(.*)/channel/(.*)=ism", "$1$2", $profile);
                        if ($red != $profile) {
                                $server_url = $red;
-                               $network = Protocol::DIASPORA;
                        }
                }
 
@@ -254,7 +256,6 @@ class PortableContact
                        $mastodon = preg_replace("=(https?://)(.*)/users/(.*)=ism", "$1$2", $profile);
                        if ($mastodon != $profile) {
                                $server_url = $mastodon;
-                               $network = Protocol::OSTATUS;
                        }
                }
 
@@ -263,7 +264,6 @@ class PortableContact
                        $ostatus = preg_replace("=(https?://)(.*)/user/(.*)=ism", "$1$2", $profile);
                        if ($ostatus != $profile) {
                                $server_url = $ostatus;
-                               $network = Protocol::OSTATUS;
                        }
                }
 
@@ -272,7 +272,6 @@ class PortableContact
                        $base = preg_replace("=(https?://)(.*?)/(.*)=ism", "$1$2", $profile);
                        if ($base != $profile) {
                                $server_url = $base;
-                               $network = Protocol::PHANTOM;
                        }
                }
 
@@ -282,7 +281,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)) {
@@ -290,8 +289,8 @@ class PortableContact
                }
 
                // Fetch the host-meta to check if this really is a server
-               $serverret = Network::curl($server_url."/.well-known/host-meta");
-               if (!$serverret["success"]) {
+               $curlResult = Network::curl($server_url."/.well-known/host-meta");
+               if (!$curlResult->isSuccess()) {
                        return "";
                }
 
@@ -307,7 +306,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)) {
@@ -316,13 +315,13 @@ class PortableContact
 
                $contact = ["url" => $profile];
 
-               if ($gcontacts[0]["created"] <= NULL_DATE) {
+               if ($gcontacts[0]["created"] <= DBA::NULL_DATETIME) {
                        $contact['created'] = DateTimeFormat::utcNow();
                }
 
                $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"] != "")) {
@@ -330,11 +329,11 @@ 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::DFRN, Protocol::DIASPORA, Protocol::FEED, Protocol::OSTATUS, ""])) {
-                       logger("Profile ".$profile.": Network type ".$gcontacts[0]["network"]." can't be checked", LOGGER_DEBUG);
+                       Logger::log("Profile ".$profile.": Network type ".$gcontacts[0]["network"]." can't be checked", Logger::DEBUG);
                        return false;
                }
 
@@ -342,10 +341,10 @@ 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("Profile ".$profile.": Server ".$server_url." wasn't reachable.", LOGGER_DEBUG);
+                               Logger::log("Profile ".$profile.": Server ".$server_url." wasn't reachable.", Logger::DEBUG);
                                return false;
                        }
                        $contact['server_url'] = $server_url;
@@ -354,7 +353,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) {
@@ -367,13 +366,13 @@ 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) {
-                               $noscraperet = Network::curl($server[0]["noscrape"]."/".$gcontacts[0]["nick"]);
+                               $curlResult = Network::curl($server[0]["noscrape"]."/".$gcontacts[0]["nick"]);
 
-                               if ($noscraperet["success"] && ($noscraperet["body"] != "")) {
-                                       $noscrape = json_decode($noscraperet["body"], true);
+                               if ($curlResult->isSuccess() && ($curlResult->getBody() != "")) {
+                                       $noscrape = json_decode($curlResult->getBody(), true);
 
                                        if (is_array($noscrape)) {
                                                $contact["network"] = $server[0]["network"];
@@ -423,9 +422,9 @@ 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("Profile ".$profile." was last updated at ".$noscrape["updated"]." (noscrape)", LOGGER_DEBUG);
+                                                       Logger::log("Profile ".$profile." was last updated at ".$noscrape["updated"]." (noscrape)", Logger::DEBUG);
 
                                                        return $noscrape["updated"];
                                                }
@@ -436,7 +435,7 @@ class PortableContact
 
                // If we only can poll the feed, then we only do this once a while
                if (!$force && !self::updateNeeded($gcontacts[0]["created"], $gcontacts[0]["updated"], $gcontacts[0]["last_failure"], $gcontacts[0]["last_contact"])) {
-                       logger("Profile ".$profile." was last updated at ".$gcontacts[0]["updated"]." (cached)", LOGGER_DEBUG);
+                       Logger::log("Profile ".$profile." was last updated at ".$gcontacts[0]["updated"]." (cached)", Logger::DEBUG);
 
                        GContact::update($contact);
                        return $gcontacts[0]["updated"];
@@ -447,11 +446,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);
 
@@ -463,18 +462,18 @@ class PortableContact
 
                                self::lastUpdated($data["url"], $force);
                        } catch (Exception $e) {
-                               logger($e->getMessage(), LOGGER_DEBUG);
+                               Logger::log($e->getMessage(), Logger::DEBUG);
                        }
 
-                       logger("Profile ".$profile." was deleted", LOGGER_DEBUG);
+                       Logger::log("Profile ".$profile." was deleted", Logger::DEBUG);
                        return false;
                }
 
                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("Profile ".$profile." wasn't reachable (profile)", LOGGER_DEBUG);
+                       Logger::log("Profile ".$profile." wasn't reachable (profile)", Logger::DEBUG);
                        return false;
                }
 
@@ -484,19 +483,19 @@ class PortableContact
 
                GContact::update($contact);
 
-               $feedret = Network::curl($data["poll"]);
+               $curlResult = Network::curl($data["poll"]);
 
-               if (!$feedret["success"]) {
+               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("Profile ".$profile." wasn't reachable (no feed)", LOGGER_DEBUG);
+                       Logger::log("Profile ".$profile." wasn't reachable (no feed)", Logger::DEBUG);
                        return false;
                }
 
                $doc = new DOMDocument();
                /// @TODO Avoid error supression here
-               @$doc->loadXML($feedret["body"]);
+               @$doc->loadXML($curlResult->getBody());
 
                $xpath = new DOMXPath($doc);
                $xpath->registerNamespace('atom', "http://www.w3.org/2005/Atom");
@@ -521,7 +520,7 @@ class PortableContact
                // Maybe there aren't any entries. Then check if it is a valid feed
                if ($last_updated == "") {
                        if ($xpath->query('/atom:feed')->length > 0) {
-                               $last_updated = NULL_DATE;
+                               $last_updated = DBA::NULL_DATETIME;
                        }
                }
 
@@ -531,14 +530,14 @@ 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("Profile ".$profile." was last updated at ".$last_updated, LOGGER_DEBUG);
+               Logger::log("Profile ".$profile." was last updated at ".$last_updated, Logger::DEBUG);
 
                return $last_updated;
        }
@@ -608,8 +607,6 @@ class PortableContact
         */
        private static function detectPocoData(array $data)
        {
-               $server = false;
-
                if (!isset($data['entry'])) {
                        return false;
                }
@@ -642,15 +639,16 @@ 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)
        {
-               $serverret = Network::curl($server_url."/.well-known/nodeinfo");
-               if (!$serverret["success"]) {
+               $curlResult = Network::curl($server_url."/.well-known/nodeinfo");
+               if (!$curlResult->isSuccess()) {
                        return false;
                }
 
-               $nodeinfo = json_decode($serverret['body'], true);
+               $nodeinfo = json_decode($curlResult->getBody(), true);
 
                if (!is_array($nodeinfo) || !isset($nodeinfo['links'])) {
                        return false;
@@ -661,7 +659,7 @@ class PortableContact
 
                foreach ($nodeinfo['links'] as $link) {
                        if (!is_array($link) || empty($link['rel'])) {
-                               logger('Invalid nodeinfo format for ' . $server_url, LOGGER_DEBUG);
+                               Logger::log('Invalid nodeinfo format for ' . $server_url, Logger::DEBUG);
                                continue;
                        }
                        if ($link['rel'] == 'http://nodeinfo.diaspora.software/ns/schema/1.0') {
@@ -695,16 +693,17 @@ 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)
        {
-               $serverret = Network::curl($nodeinfo_url);
+               $curlResult = Network::curl($nodeinfo_url);
 
-               if (!$serverret["success"]) {
+               if (!$curlResult->isSuccess()) {
                        return false;
                }
 
-               $nodeinfo = json_decode($serverret['body'], true);
+               $nodeinfo = json_decode($curlResult->getBody(), true);
 
                if (!is_array($nodeinfo)) {
                        return false;
@@ -712,10 +711,10 @@ class PortableContact
 
                $server = [];
 
-               $server['register_policy'] = REGISTER_CLOSED;
+               $server['register_policy'] = Register::CLOSED;
 
                if (is_bool($nodeinfo['openRegistrations']) && $nodeinfo['openRegistrations']) {
-                       $server['register_policy'] = REGISTER_OPEN;
+                       $server['register_policy'] = Register::OPEN;
                }
 
                if (is_array($nodeinfo['software'])) {
@@ -731,7 +730,7 @@ class PortableContact
                        }
                }
 
-               if (is_array($nodeinfo['metadata']) && isset($nodeinfo['metadata']['nodeName'])) {
+               if (isset($nodeinfo['metadata']['nodeName'])) {
                        $server['site_name'] = $nodeinfo['metadata']['nodeName'];
                }
 
@@ -779,15 +778,16 @@ 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)
        {
-               $serverret = Network::curl($nodeinfo_url);
-               if (!$serverret["success"]) {
+               $curlResult = Network::curl($nodeinfo_url);
+               if (!$curlResult->isSuccess()) {
                        return false;
                }
 
-               $nodeinfo = json_decode($serverret['body'], true);
+               $nodeinfo = json_decode($curlResult->getBody(), true);
 
                if (!is_array($nodeinfo)) {
                        return false;
@@ -795,10 +795,10 @@ class PortableContact
 
                $server = [];
 
-               $server['register_policy'] = REGISTER_CLOSED;
+               $server['register_policy'] = Register::CLOSED;
 
                if (is_bool($nodeinfo['openRegistrations']) && $nodeinfo['openRegistrations']) {
-                       $server['register_policy'] = REGISTER_OPEN;
+                       $server['register_policy'] = Register::OPEN;
                }
 
                if (is_array($nodeinfo['software'])) {
@@ -814,7 +814,7 @@ class PortableContact
                        }
                }
 
-               if (is_array($nodeinfo['metadata']) && isset($nodeinfo['metadata']['nodeName'])) {
+               if (isset($nodeinfo['metadata']['nodeName'])) {
                        $server['site_name'] = $nodeinfo['metadata']['nodeName'];
                }
 
@@ -928,11 +928,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"] <= NULL_DATE) {
+                       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"];
@@ -953,16 +953,16 @@ class PortableContact
 
                        // See discussion under https://forum.friendi.ca/display/0b6b25a8135aabc37a5a0f5684081633
                        // It can happen that a zero date is in the database, but storing it again is forbidden.
-                       if ($last_contact < NULL_DATE) {
-                               $last_contact = NULL_DATE;
+                       if ($last_contact < DBA::NULL_DATETIME) {
+                               $last_contact = DBA::NULL_DATETIME;
                        }
 
-                       if ($last_failure < NULL_DATE) {
-                               $last_failure = NULL_DATE;
+                       if ($last_failure < DBA::NULL_DATETIME) {
+                               $last_failure = DBA::NULL_DATETIME;
                        }
 
                        if (!$force && !self::updateNeeded($gserver["created"], "", $last_failure, $last_contact)) {
-                               logger("Use cached data for server ".$server_url, LOGGER_DEBUG);
+                               Logger::log("Use cached data for server ".$server_url, Logger::DEBUG);
                                return ($last_contact >= $last_failure);
                        }
                } else {
@@ -975,10 +975,10 @@ class PortableContact
                        $register_policy = -1;
                        $registered_users = 0;
 
-                       $last_contact = NULL_DATE;
-                       $last_failure = NULL_DATE;
+                       $last_contact = DBA::NULL_DATETIME;
+                       $last_failure = DBA::NULL_DATETIME;
                }
-               logger("Server ".$server_url." is outdated or unknown. Start discovery. Force: ".$force." Created: ".$gserver["created"]." Failure: ".$last_failure." Contact: ".$last_contact, LOGGER_DEBUG);
+               Logger::log("Server ".$server_url." is outdated or unknown. Start discovery. Force: ".$force." Created: ".$gserver["created"]." Failure: ".$last_failure." Contact: ".$last_contact, Logger::DEBUG);
 
                $failure = false;
                $possible_failure = false;
@@ -988,7 +988,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;
                }
 
@@ -997,38 +997,38 @@ class PortableContact
                $server_url = str_replace("http://", "https://", $server_url);
 
                // We set the timeout to 20 seconds since this operation should be done in no time if the server was vital
-               $serverret = Network::curl($server_url."/.well-known/host-meta", false, $redirects, ['timeout' => 20]);
+               $curlResult = Network::curl($server_url."/.well-known/host-meta", false, $redirects, ['timeout' => 20]);
 
                // Quit if there is a timeout.
                // But we want to make sure to only quit if we are mostly sure that this server url fits.
                if (DBA::isResult($gserver) && ($orig_server_url == $server_url) &&
-                       (!empty($serverret["errno"]) && ($serverret['errno'] == CURLE_OPERATION_TIMEDOUT))) {
-                       logger("Connection to server ".$server_url." timed out.", LOGGER_DEBUG);
-                       DBA::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => normalise_link($server_url)]);
+                       ($curlResult->isTimeout())) {
+                       Logger::log("Connection to server ".$server_url." timed out.", Logger::DEBUG);
+                       DBA::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => Strings::normaliseLink($server_url)]);
                        return false;
                }
 
                // Maybe the page is unencrypted only?
-               $xmlobj = @simplexml_load_string($serverret["body"], 'SimpleXMLElement', 0, "http://docs.oasis-open.org/ns/xri/xrd-1.0");
-               if (!$serverret["success"] || ($serverret["body"] == "") || empty($xmlobj) || !is_object($xmlobj)) {
+               $xmlobj = @simplexml_load_string($curlResult->getBody(), 'SimpleXMLElement', 0, "http://docs.oasis-open.org/ns/xri/xrd-1.0");
+               if (!$curlResult->isSuccess() || ($curlResult->getBody() == "") || empty($xmlobj) || !is_object($xmlobj)) {
                        $server_url = str_replace("https://", "http://", $server_url);
 
                        // We set the timeout to 20 seconds since this operation should be done in no time if the server was vital
-                       $serverret = Network::curl($server_url."/.well-known/host-meta", false, $redirects, ['timeout' => 20]);
+                       $curlResult = Network::curl($server_url."/.well-known/host-meta", false, $redirects, ['timeout' => 20]);
 
                        // Quit if there is a timeout
-                       if (!empty($serverret["errno"]) && ($serverret['errno'] == CURLE_OPERATION_TIMEDOUT)) {
-                               logger("Connection to server ".$server_url." timed out.", LOGGER_DEBUG);
-                               DBA::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => normalise_link($server_url)]);
+                       if ($curlResult->isTimeout()) {
+                               Logger::log("Connection to server " . $server_url . " timed out.", Logger::DEBUG);
+                               DBA::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => Strings::normaliseLink($server_url)]);
                                return false;
                        }
 
-                       $xmlobj = @simplexml_load_string($serverret["body"], 'SimpleXMLElement', 0, "http://docs.oasis-open.org/ns/xri/xrd-1.0");
+                       $xmlobj = @simplexml_load_string($curlResult->getBody(), 'SimpleXMLElement', 0, "http://docs.oasis-open.org/ns/xri/xrd-1.0");
                }
 
-               if (!$serverret["success"] || ($serverret["body"] == "") || empty($xmlobj) || !is_object($xmlobj)) {
+               if (!$curlResult->isSuccess() || ($curlResult->getBody() == "") || empty($xmlobj) || !is_object($xmlobj)) {
                        // Workaround for bad configured servers (known nginx problem)
-                       if (!empty($serverret["debug"]) && !in_array($serverret["debug"]["http_code"], ["403", "404"])) {
+                       if (!empty($curlResult->getInfo()) && !in_array($curlResult->getInfo()["http_code"], ["403", "404"])) {
                                $failure = true;
                        }
 
@@ -1046,15 +1046,15 @@ 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
                if (!$failure) {
-                       $serverret = Network::curl($server_url."/poco");
+                       $curlResult = Network::curl($server_url."/poco");
 
-                       if ($serverret["success"]) {
-                               $data = json_decode($serverret["body"], true);
+                       if ($curlResult->isSuccess()) {
+                               $data = json_decode($curlResult->getBody(), true);
 
                                if (isset($data['totalResults'])) {
                                        $registered_users = $data['totalResults'];
@@ -1083,12 +1083,12 @@ class PortableContact
 
                if (!$failure) {
                        // Test for Diaspora, Hubzilla, Mastodon or older Friendica servers
-                       $serverret = Network::curl($server_url);
+                       $curlResult = Network::curl($server_url);
 
-                       if (!$serverret["success"] || ($serverret["body"] == "")) {
+                       if (!$curlResult->isSuccess() || ($curlResult->getBody() == "")) {
                                $failure = true;
                        } else {
-                               $server = self::detectServerType($serverret["body"]);
+                               $server = self::detectServerType($curlResult->getBody());
 
                                if (!empty($server)) {
                                        $platform = $server['platform'];
@@ -1097,7 +1097,7 @@ class PortableContact
                                        $site_name = $server['site_name'];
                                }
 
-                               $lines = explode("\n", $serverret["header"]);
+                               $lines = explode("\n", $curlResult->getHeader());
 
                                if (count($lines)) {
                                        foreach ($lines as $line) {
@@ -1125,35 +1125,35 @@ class PortableContact
                        // Test for Statusnet
                        // Will also return data for Friendica and GNU Social - but it will be overwritten later
                        // The "not implemented" is a special treatment for really, really old Friendica versions
-                       $serverret = Network::curl($server_url."/api/statusnet/version.json");
+                       $curlResult = Network::curl($server_url."/api/statusnet/version.json");
 
-                       if ($serverret["success"] && ($serverret["body"] != '{"error":"not implemented"}') &&
-                               ($serverret["body"] != '') && (strlen($serverret["body"]) < 30)) {
+                       if ($curlResult->isSuccess() && ($curlResult->getBody() != '{"error":"not implemented"}') &&
+                               ($curlResult->getBody() != '') && (strlen($curlResult->getBody()) < 30)) {
                                $platform = "StatusNet";
                                // Remove junk that some GNU Social servers return
-                               $version = str_replace(chr(239).chr(187).chr(191), "", $serverret["body"]);
+                               $version = str_replace(chr(239).chr(187).chr(191), "", $curlResult->getBody());
                                $version = trim($version, '"');
                                $network = Protocol::OSTATUS;
                        }
 
                        // Test for GNU Social
-                       $serverret = Network::curl($server_url."/api/gnusocial/version.json");
+                       $curlResult = Network::curl($server_url."/api/gnusocial/version.json");
 
-                       if ($serverret["success"] && ($serverret["body"] != '{"error":"not implemented"}') &&
-                               ($serverret["body"] != '') && (strlen($serverret["body"]) < 30)) {
+                       if ($curlResult->isSuccess() && ($curlResult->getBody() != '{"error":"not implemented"}') &&
+                               ($curlResult->getBody() != '') && (strlen($curlResult->getBody()) < 30)) {
                                $platform = "GNU Social";
                                // Remove junk that some GNU Social servers return
-                               $version = str_replace(chr(239) . chr(187) . chr(191), "", $serverret["body"]);
+                               $version = str_replace(chr(239) . chr(187) . chr(191), "", $curlResult->getBody());
                                $version = trim($version, '"');
                                $network = Protocol::OSTATUS;
                        }
 
                        // Test for Mastodon
                        $orig_version = $version;
-                       $serverret = Network::curl($server_url . "/api/v1/instance");
+                       $curlResult = Network::curl($server_url . "/api/v1/instance");
 
-                       if ($serverret["success"] && ($serverret["body"] != '')) {
-                               $data = json_decode($serverret["body"], true);
+                       if ($curlResult->isSuccess() && ($curlResult->getBody() != '')) {
+                               $data = json_decode($curlResult->getBody(), true);
 
                                if (isset($data['version'])) {
                                        $platform = "Mastodon";
@@ -1176,10 +1176,10 @@ class PortableContact
 
                if (!$failure) {
                        // Test for Hubzilla and Red
-                       $serverret = Network::curl($server_url . "/siteinfo.json");
+                       $curlResult = Network::curl($server_url . "/siteinfo.json");
 
-                       if ($serverret["success"]) {
-                               $data = json_decode($serverret["body"], true);
+                       if ($curlResult->isSuccess()) {
+                               $data = json_decode($curlResult->getBody(), true);
 
                                if (isset($data['url'])) {
                                        $platform = $data['platform'];
@@ -1198,25 +1198,25 @@ class PortableContact
                                if (!empty($data['register_policy'])) {
                                        switch ($data['register_policy']) {
                                                case "REGISTER_OPEN":
-                                                       $register_policy = REGISTER_OPEN;
+                                                       $register_policy = Register::OPEN;
                                                        break;
 
                                                case "REGISTER_APPROVE":
-                                                       $register_policy = REGISTER_APPROVE;
+                                                       $register_policy = Register::APPROVE;
                                                        break;
 
                                                case "REGISTER_CLOSED":
                                                default:
-                                                       $register_policy = REGISTER_CLOSED;
+                                                       $register_policy = Register::CLOSED;
                                                        break;
                                        }
                                }
                        } else {
                                // Test for Hubzilla, Redmatrix or Friendica
-                               $serverret = Network::curl($server_url."/api/statusnet/config.json");
+                               $curlResult = Network::curl($server_url."/api/statusnet/config.json");
 
-                               if ($serverret["success"]) {
-                                       $data = json_decode($serverret["body"], true);
+                               if ($curlResult->isSuccess()) {
+                                       $data = json_decode($curlResult->getBody(), true);
 
                                        if (isset($data['site']['server'])) {
                                                if (isset($data['site']['platform'])) {
@@ -1273,11 +1273,11 @@ class PortableContact
                                                }
 
                                                if (!$closed && !$private and $inviteonly) {
-                                                       $register_policy = REGISTER_APPROVE;
+                                                       $register_policy = Register::APPROVE;
                                                } elseif (!$closed && !$private) {
-                                                       $register_policy = REGISTER_OPEN;
+                                                       $register_policy = Register::OPEN;
                                                } else {
-                                                       $register_policy = REGISTER_CLOSED;
+                                                       $register_policy = Register::CLOSED;
                                                }
                                        }
                                }
@@ -1286,10 +1286,10 @@ class PortableContact
 
                // Query statistics.json. Optional package for Diaspora, Friendica and Redmatrix
                if (!$failure) {
-                       $serverret = Network::curl($server_url . "/statistics.json");
+                       $curlResult = Network::curl($server_url . "/statistics.json");
 
-                       if ($serverret["success"]) {
-                               $data = json_decode($serverret["body"], true);
+                       if ($curlResult->isSuccess()) {
+                               $data = json_decode($curlResult->getBody(), true);
 
                                if (isset($data['version'])) {
                                        $version = $data['version'];
@@ -1311,9 +1311,9 @@ class PortableContact
                                }
 
                                if (!empty($data['registrations_open']) && $data['registrations_open']) {
-                                       $register_policy = REGISTER_OPEN;
+                                       $register_policy = Register::OPEN;
                                } else {
-                                       $register_policy = REGISTER_CLOSED;
+                                       $register_policy = Register::CLOSED;
                                }
                        }
                }
@@ -1350,14 +1350,14 @@ class PortableContact
                // Check for noscrape
                // Friendica servers could be detected as OStatus servers
                if (!$failure && in_array($network, [Protocol::DFRN, Protocol::OSTATUS])) {
-                       $serverret = Network::curl($server_url . "/friendica/json");
+                       $curlResult = Network::curl($server_url . "/friendica/json");
 
-                       if (!$serverret["success"]) {
-                               $serverret = Network::curl($server_url . "/friendika/json");
+                       if (!$curlResult->isSuccess()) {
+                               $curlResult = Network::curl($server_url . "/friendika/json");
                        }
 
-                       if ($serverret["success"]) {
-                               $data = json_decode($serverret["body"], true);
+                       if ($curlResult->isSuccess()) {
+                               $data = json_decode($curlResult->getBody(), true);
 
                                if (isset($data['version'])) {
                                        $network = Protocol::DFRN;
@@ -1372,9 +1372,29 @@ class PortableContact
                                                $site_name = $data['site_name'];
                                        }
 
-                                       $info = $data['info'];
-                                       $register_policy = constant($data['register_policy']);
-                                       $platform = $data['platform'];
+                                       $info = defaults($data, 'info', '');
+
+                                       $register_policy = defaults($data, 'register_policy', 'REGISTER_CLOSED');
+                                       switch ($register_policy) {
+                                               case 'REGISTER_OPEN':
+                                                       $register_policy = Register::OPEN;
+                                                       break;
+
+                                               case 'REGISTER_APPROVE':
+                                                       $register_policy = Register::APPROVE;
+                                                       break;
+
+                                               default:
+                                                       Logger::log("Register policy '$register_policy' from $server_url is invalid.");
+                                                       // Defaulting to closed
+
+                                               case 'REGISTER_CLOSED':
+                                               case 'REGISTER_INVITATION':
+                                                       $register_policy = Register::CLOSED;
+                                                       break;
+                                       }
+
+                                       $platform = defaults($data, 'platform', '');
                                }
                        }
                }
@@ -1397,13 +1417,13 @@ class PortableContact
                }
 
                if (($last_contact <= $last_failure) && !$failure) {
-                       logger("Server ".$server_url." seems to be alive, but last contact wasn't set - could be a bug", LOGGER_DEBUG);
+                       Logger::log("Server ".$server_url." seems to be alive, but last contact wasn't set - could be a bug", Logger::DEBUG);
                } elseif (($last_contact >= $last_failure) && $failure) {
-                       logger("Server ".$server_url." seems to be dead, but last failure wasn't set - could be a bug", LOGGER_DEBUG);
+                       Logger::log("Server ".$server_url." seems to be dead, but last failure wasn't set - could be a bug", Logger::DEBUG);
                }
 
                // 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);
@@ -1417,9 +1437,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);
                }
@@ -1428,7 +1448,7 @@ class PortableContact
                        self::discoverRelay($server_url);
                }
 
-               logger("End discovery for server " . $server_url, LOGGER_DEBUG);
+               Logger::log("End discovery for server " . $server_url, Logger::DEBUG);
 
                return !$failure;
        }
@@ -1437,24 +1457,25 @@ 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)
        {
-               logger("Discover relay data for server " . $server_url, LOGGER_DEBUG);
+               Logger::log("Discover relay data for server " . $server_url, Logger::DEBUG);
 
-               $serverret = Network::curl($server_url . "/.well-known/x-social-relay");
+               $curlResult = Network::curl($server_url . "/.well-known/x-social-relay");
 
-               if (!$serverret["success"]) {
+               if (!$curlResult->isSuccess()) {
                        return;
                }
 
-               $data = json_decode($serverret['body'], true);
+               $data = json_decode($curlResult->getBody(), true);
 
                if (!is_array($data)) {
                        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;
@@ -1511,6 +1532,7 @@ class PortableContact
        /**
         * @brief Returns a list of all known servers
         * @return array List of server urls
+        * @throws Exception
         */
        public static function serverlist()
        {
@@ -1535,16 +1557,17 @@ 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)
        {
-               $serverret = Network::curl($poco . "/@server");
+               $curlResult = Network::curl($poco . "/@server");
 
-               if (!$serverret["success"]) {
+               if (!$curlResult->isSuccess()) {
                        return;
                }
 
-               $serverlist = json_decode($serverret['body'], true);
+               $serverlist = json_decode($curlResult->getBody(), true);
 
                if (!is_array($serverlist)) {
                        return;
@@ -1553,10 +1576,10 @@ 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("Call server check for server ".$server_url, LOGGER_DEBUG);
+                               Logger::log("Call server check for server ".$server_url, Logger::DEBUG);
                                Worker::add(PRIORITY_LOW, "DiscoverPoCo", "server", $server_url);
                        }
                }
@@ -1575,10 +1598,10 @@ class PortableContact
                }
 
                // Discover Friendica, Hubzilla and Diaspora servers
-               $serverdata = Network::fetchUrl("http://the-federation.info/pods.json");
+               $curlResult = Network::fetchUrl("http://the-federation.info/pods.json");
 
-               if (!empty($serverdata)) {
-                       $servers = json_decode($serverdata, true);
+               if (!empty($curlResult)) {
+                       $servers = json_decode($curlResult, true);
 
                        if (!empty($servers['pods'])) {
                                foreach ($servers['pods'] as $server) {
@@ -1594,10 +1617,10 @@ class PortableContact
                        if (!empty($accesstoken)) {
                                $api = 'https://instances.social/api/1.0/instances/list?count=0';
                                $header = ['Authorization: Bearer '.$accesstoken];
-                               $serverdata = Network::curl($api, false, $redirects, ['headers' => $header]);
+                               $curlResult = Network::curl($api, false, $redirects, ['headers' => $header]);
 
-                               if ($serverdata['success']) {
-                                       $servers = json_decode($serverdata['body'], true);
+                               if ($curlResult->isSuccess()) {
+                                       $servers = json_decode($curlResult->getBody(), true);
 
                                        foreach ($servers['instances'] as $server) {
                                                $url = (is_null($server['https_score']) ? 'http' : 'https') . '://' . $server['name'];
@@ -1613,9 +1636,9 @@ class PortableContact
                //if (!Config::get('system','ostatus_disabled')) {
                //      $serverdata = "http://gstools.org/api/get_open_instances/";
 
-               //      $result = Network::curl($serverdata);
-               //      if ($result["success"]) {
-               //              $servers = json_decode($result["body"], true);
+               //      $curlResult = Network::curl($serverdata);
+               //      if ($curlResult->isSuccess()) {
+               //              $servers = json_decode($result->getBody(), true);
 
                //              foreach($servers['data'] as $server)
                //                      self::checkServer($server['instance_address']);
@@ -1627,32 +1650,30 @@ class PortableContact
 
        public static function discoverSingleServer($id)
        {
-               $r = q("SELECT `poco`, `nurl`, `url`, `network` FROM `gserver` WHERE `id` = %d", intval($id));
+               $server = DBA::selectFirst('gserver', ['poco', 'nurl', 'url', 'network'], ['id' => $id]);
 
-               if (!DBA::isResult($r)) {
+               if (!DBA::isResult($server)) {
                        return false;
                }
 
-               $server = $r[0];
-
                // Discover new servers out there (Works from Friendica version 3.5.2)
                self::fetchServerlist($server["poco"]);
 
                // Fetch all users from the other server
                $url = $server["poco"] . "/?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation";
 
-               logger("Fetch all users from the server " . $server["url"], LOGGER_DEBUG);
+               Logger::info("Fetch all users from the server " . $server["url"]);
 
-               $retdata = Network::curl($url);
+               $curlResult = Network::curl($url);
 
-               if ($retdata["success"] && !empty($retdata["body"])) {
-                       $data = json_decode($retdata["body"], true);
+               if ($curlResult->isSuccess() && !empty($curlResult->getBody())) {
+                       $data = json_decode($curlResult->getBody(), true);
 
                        if (!empty($data)) {
                                self::discoverServer($data, 2);
                        }
 
-                       if (Config::get('system', 'poco_discovery') > 1) {
+                       if (Config::get('system', 'poco_discovery') >= self::USERS_GCONTACTS) {
                                $timeframe = Config::get('system', 'poco_discovery_since');
 
                                if ($timeframe == 0) {
@@ -1666,19 +1687,19 @@ class PortableContact
 
                                $success = false;
 
-                               $retdata = Network::curl($url);
+                               $curlResult = Network::curl($url);
 
-                               if ($retdata["success"] && !empty($retdata["body"])) {
-                                       logger("Fetch all global contacts from the server " . $server["nurl"], LOGGER_DEBUG);
-                                       $data = json_decode($retdata["body"], true);
+                               if ($curlResult->isSuccess() && !empty($curlResult->getBody())) {
+                                       Logger::info("Fetch all global contacts from the server " . $server["nurl"]);
+                                       $data = json_decode($curlResult->getBody(), true);
 
                                        if (!empty($data)) {
                                                $success = self::discoverServer($data);
                                        }
                                }
 
-                               if (!$success && (Config::get('system', 'poco_discovery') > 2)) {
-                                       logger("Fetch contacts from users of the server " . $server["nurl"], LOGGER_DEBUG);
+                               if (!$success && !empty($data) && Config::get('system', 'poco_discovery') >= self::USERS_GCONTACTS_FALLBACK) {
+                                       Logger::info("Fetch contacts from users of the server " . $server["nurl"]);
                                        self::discoverServerUsers($data, $server);
                                }
                        }
@@ -1731,7 +1752,7 @@ class PortableContact
                                        continue;
                                }
 
-                               logger('Update directory from server ' . $gserver['url'] . ' with ID ' . $gserver['id'], LOGGER_DEBUG);
+                               Logger::log('Update directory from server ' . $gserver['url'] . ' with ID ' . $gserver['id'], Logger::DEBUG);
                                Worker::add(PRIORITY_LOW, 'DiscoverPoCo', 'update_server_directory', (int) $gserver['id']);
 
                                if (!$complete && ( --$no_of_queries == 0)) {
@@ -1761,15 +1782,15 @@ class PortableContact
                        }
 
                        if ($username != '') {
-                               logger('Fetch contacts for the user ' . $username . ' from the server ' . $server['nurl'], LOGGER_DEBUG);
+                               Logger::log('Fetch contacts for the user ' . $username . ' from the server ' . $server['nurl'], Logger::DEBUG);
 
                                // Fetch all contacts from a given user from the other server
                                $url = $server['poco'] . '/' . $username . '/?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation';
 
-                               $retdata = Network::curl($url);
+                               $curlResult = Network::curl($url);
 
-                               if (!empty($retdata['success'])) {
-                                       $data = json_decode($retdata["body"], true);
+                               if ($curlResult->isSuccess()) {
+                                       $data = json_decode($curlResult->getBody(), true);
 
                                        if (!empty($data)) {
                                                self::discoverServer($data, 3);
@@ -1793,7 +1814,7 @@ class PortableContact
                        $connect_url = '';
                        $name = '';
                        $network = '';
-                       $updated = NULL_DATE;
+                       $updated = DBA::NULL_DATETIME;
                        $location = '';
                        $about = '';
                        $keywords = '';
@@ -1864,7 +1885,7 @@ class PortableContact
                        if ($generation > 0) {
                                $success = true;
 
-                               logger("Store profile ".$profile_url, LOGGER_DEBUG);
+                               Logger::log("Store profile ".$profile_url, Logger::DEBUG);
 
                                $gcontact = ["url" => $profile_url,
                                                "name" => $name,
@@ -1883,10 +1904,10 @@ class PortableContact
                                        $gcontact = GContact::sanitize($gcontact);
                                        GContact::update($gcontact);
                                } catch (Exception $e) {
-                                       logger($e->getMessage(), LOGGER_DEBUG);
+                                       Logger::log($e->getMessage(), Logger::DEBUG);
                                }
 
-                               logger("Done for profile ".$profile_url, LOGGER_DEBUG);
+                               Logger::log("Done for profile ".$profile_url, Logger::DEBUG);
                        }
                }
                return $success;