]> git.mxchange.org Git - friendica.git/blobdiff - src/Protocol/PortableContact.php
Merge branch 'master' into develop
[friendica.git] / src / Protocol / PortableContact.php
index e66cb4687cf92044b81caba62af56497d07f72ce..4eaf5bbb6c74c76e4eda74763a6478f42f16831f 100644 (file)
@@ -18,6 +18,7 @@ use Friendica\Model\Profile;
 use Friendica\Network\Probe;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
+use Friendica\Protocol\Diaspora;
 use dba;
 use DOMDocument;
 use DOMXPath;
@@ -521,7 +522,12 @@ class PortableContact
                        }
                }
 
-               $fields = ['updated' => $last_updated, 'last_contact' => DateTimeFormat::utcNow()];
+               $fields = ['last_contact' => DateTimeFormat::utcNow()];
+
+               if (!empty($last_updated)) {
+                       $fields['updated'] = $last_updated;
+               }
+
                dba::update('gcontact', $fields, ['nurl' => normalise_link($profile)]);
 
                if (($gcontacts[0]["generation"] == 0)) {
@@ -1315,20 +1321,8 @@ class PortableContact
                                        $version = $data->version;
                                        $site_name = $data->site_name;
                                        $info = $data->info;
-                                       $register_policy_str = $data->register_policy;
+                                       $register_policy = constant($data->register_policy);
                                        $platform = $data->platform;
-
-                                       switch ($register_policy_str) {
-                                               case "REGISTER_CLOSED":
-                                                       $register_policy = REGISTER_CLOSED;
-                                                       break;
-                                               case "REGISTER_APPROVE":
-                                                       $register_policy = REGISTER_APPROVE;
-                                                       break;
-                                               case "REGISTER_OPEN":
-                                                       $register_policy = REGISTER_OPEN;
-                                                       break;
-                                       }
                                }
                        }
                }
@@ -1387,6 +1381,11 @@ class PortableContact
                return !$failure;
        }
 
+       /**
+        * @brief Fetch relay data from a given server url
+        *
+        * @param string $server_url address of the server
+        */
        private static function discoverRelay($server_url)
        {
                logger("Discover relay data for server " . $server_url, LOGGER_DEBUG);
@@ -1413,10 +1412,39 @@ class PortableContact
 
                dba::delete('gserver-tag', ['gserver-id' => $gserver['id']]);
                if ($data->scope == 'tags') {
+                       // Avoid duplicates
+                       $tags = [];
                        foreach ($data->tags as $tag) {
-                               dba::insert('gserver-tag', ['gserver-id' => $gserver['id'], 'tag' => $tag]);
+                               $tag = mb_strtolower($tag);
+                               $tags[$tag] = $tag;
+                       }
+
+                       foreach ($tags as $tag) {
+                               dba::insert('gserver-tag', ['gserver-id' => $gserver['id'], 'tag' => $tag], true);
+                       }
+               }
+
+               // Create or update the relay contact
+               $fields = [];
+               if (isset($data->protocols)) {
+                       if (isset($data->protocols->diaspora)) {
+                               $fields['network'] = NETWORK_DIASPORA;
+                               if (isset($data->protocols->diaspora->receive)) {
+                                       $fields['batch'] = $data->protocols->diaspora->receive;
+                               } elseif (is_string($data->protocols->diaspora)) {
+                                       $fields['batch'] = $data->protocols->diaspora;
+                               }
+                       }
+                       if (isset($data->protocols->dfrn)) {
+                               $fields['network'] = NETWORK_DFRN;
+                               if (isset($data->protocols->dfrn->receive)) {
+                                       $fields['batch'] = $data->protocols->dfrn->receive;
+                               } elseif (is_string($data->protocols->dfrn)) {
+                                       $fields['batch'] = $data->protocols->dfrn;
+                               }
                        }
                }
+               Diaspora::setRelayContact($server_url, $fields);
        }
 
        /**
@@ -1487,8 +1515,10 @@ class PortableContact
                if ($serverdata) {
                        $servers = json_decode($serverdata);
 
-                       foreach ($servers->pods as $server) {
-                               Worker::add(PRIORITY_LOW, "DiscoverPoCo", "server", "https://".$server->host);
+                       if (is_array($servers->pods)) {
+                               foreach ($servers->pods as $server) {
+                                       Worker::add(PRIORITY_LOW, "DiscoverPoCo", "server", "https://".$server->host);
+                               }
                        }
                }