]> git.mxchange.org Git - friendica.git/blobdiff - src/Protocol/DFRN.php
Preparation for quoted reshares on AP
[friendica.git] / src / Protocol / DFRN.php
index 4c5f20c63eefb16d3c1ad971d535b0c6f8f8d318..5fceab3264d7ab9cc70056c7db2486db4c991124 100644 (file)
@@ -257,7 +257,7 @@ class DFRN
                        STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
                        WHERE `item`.`uid` = %d AND `item`.`wall` AND `item`.`changed` > '%s'
                        AND `item`.`visible` $sql_extra
-                       ORDER BY `item`.`parent` ".$sort.", `item`.`created` ASC LIMIT 0, 300",
+                       ORDER BY `item`.`parent` ".$sort.", `item`.`received` ASC LIMIT 0, 300",
                        intval($owner_id),
                        DBA::escape($check_date),
                        DBA::escape($sort)
@@ -1455,6 +1455,11 @@ class DFRN
 
                $dest_url = ($public_batch ? $contact["batch"] : $contact["notify"]);
 
+               if (empty($dest_url)) {
+                       Logger::info('Empty destination', ['public' => $public_batch, 'contact' => $contact]);
+                       return -24;
+               }
+
                $content_type = ($public_batch ? "application/magic-envelope+xml" : "application/json");
 
                $postResult = Network::post($dest_url, $envelope, ["Content-Type: ".$content_type]);
@@ -1684,69 +1689,26 @@ class DFRN
                                Event::createBirthday($contact, $birthday);
                        }
 
-                       // Get all field names
-                       $fields = [];
-                       foreach ($contact_old as $field => $data) {
-                               $fields[$field] = $data;
-                       }
-
-                       unset($fields["id"]);
-                       unset($fields["uid"]);
-                       unset($fields["url"]);
-                       unset($fields["avatar-date"]);
-                       unset($fields["avatar"]);
-                       unset($fields["name-date"]);
-                       unset($fields["uri-date"]);
+                       $fields = ['name' => $contact['name'], 'nick' => $contact['nick'], 'about' => $contact['about'],
+                               'location' => $contact['location'], 'addr' => $contact['addr'], 'keywords' => $contact['keywords'],
+                               'bdyear' => $contact['bdyear'], 'bd' => $contact['bd'], 'hidden' => $contact['hidden'],
+                               'xmpp' => $contact['xmpp'], 'name-date' => DateTimeFormat::utc($contact['name-date']),
+                               'unsearchable' => $contact['hidden'], 'uri-date' => DateTimeFormat::utc($contact['uri-date'])];
 
-                       $update = false;
-                       // Update check for this field has to be done differently
-                       $datefields = ["name-date", "uri-date"];
-                       foreach ($datefields as $field) {
-                               // The date fields arrives as '2018-07-17T10:44:45Z' - the database return '2018-07-17 10:44:45'
-                               // The fields have to be in the same format to be comparable, since strtotime does add timezones.
-                               $contact[$field] = DateTimeFormat::utc($contact[$field]);
+                       DBA::update('contact', $fields, ['id' => $contact['id'], 'network' => $contact['network']], $contact_old);
 
-                               if (strtotime($contact[$field]) > strtotime($contact_old[$field])) {
-                                       Logger::log("Difference for contact " . $contact["id"] . " in field '" . $field . "'. New value: '" . $contact[$field] . "', old value '" . $contact_old[$field] . "'", Logger::DEBUG);
-                                       $update = true;
-                               }
-                       }
-
-                       foreach ($fields as $field => $data) {
-                               if ($contact[$field] != $contact_old[$field]) {
-                                       Logger::log("Difference for contact " . $contact["id"] . " in field '" . $field . "'. New value: '" . $contact[$field] . "', old value '" . $contact_old[$field] . "'", Logger::DEBUG);
-                                       $update = true;
-                               }
-                       }
+                       // Update the public contact. Don't set the "hidden" value, this is used differently for public contacts
+                       unset($fields['hidden']);
+                       $condition = ['uid' => 0, 'nurl' => Strings::normaliseLink($contact_old['url'])];
+                       DBA::update('contact', $fields, $condition, true);
 
-                       if ($update) {
-                               Logger::log("Update contact data for contact " . $contact["id"] . " (" . $contact["nick"] . ")", Logger::DEBUG);
+                       Contact::updateAvatar($author['avatar'], $importer['importer_uid'], $contact['id']);
 
-                               q(
-                                       "UPDATE `contact` SET `name` = '%s', `nick` = '%s', `about` = '%s', `location` = '%s',
-                                       `addr` = '%s', `keywords` = '%s', `bdyear` = '%s', `bd` = '%s', `hidden` = %d,
-                                       `xmpp` = '%s', `name-date`  = '%s', `uri-date` = '%s'
-                                       WHERE `id` = %d AND `network` = '%s'",
-                                       DBA::escape($contact["name"]), DBA::escape($contact["nick"]), DBA::escape($contact["about"]),   DBA::escape($contact["location"]),
-                                       DBA::escape($contact["addr"]), DBA::escape($contact["keywords"]), DBA::escape($contact["bdyear"]),
-                                       DBA::escape($contact["bd"]), intval($contact["hidden"]), DBA::escape($contact["xmpp"]),
-                                       DBA::escape(DateTimeFormat::utc($contact["name-date"])), DBA::escape(DateTimeFormat::utc($contact["uri-date"])),
-                                       intval($contact["id"]), DBA::escape($contact["network"])
-                               );
+                       $pcid = Contact::getIdForURL($contact_old['url']);
+                       if (!empty($pcid)) {
+                               Contact::updateAvatar($author['avatar'], 0, $pcid);
                        }
 
-                       Contact::updateAvatar(
-                               $author['avatar'],
-                               $importer['importer_uid'],
-                               $contact['id'],
-                               (strtotime($contact['avatar-date']) > strtotime($contact_old['avatar-date']) || ($author['avatar'] != $contact_old['avatar']))
-                       );
-
-                       // Update the "hidden" status in the public contact
-                       // @todo Updating the contact with all fields and update the gcontact from that
-                       $condition = ['uid' => 0, 'nurl' => Strings::normaliseLink($contact_old['url'])];
-                       DBA::update('contact', ['unsearchable' => $hide], $condition, true);
-
                        /*
                         * The generation is a sign for the reliability of the provided data.
                         * It is used in the socgraph.php to prevent that old contact data