]> git.mxchange.org Git - friendica.git/commitdiff
Simplified the Contact update
authorMichael <heluecht@pirati.ca>
Thu, 4 Jul 2019 21:19:23 +0000 (21:19 +0000)
committerMichael <heluecht@pirati.ca>
Thu, 4 Jul 2019 21:19:23 +0000 (21:19 +0000)
src/Model/Contact.php
src/Protocol/DFRN.php

index bb0ba32c39958db2025f52c109dbc664b0d16e5f..3f37d4ec90f2cbbe1ff2b5160fa0e1fdf3fae1cc 100644 (file)
@@ -1468,10 +1468,12 @@ class Contact extends BaseObject
                        'url' => $data['url'],
                        'nurl' => Strings::normaliseLink($data['url']),
                        'name' => $data['name'],
-                       'nick' => $data['nick'],
-                       'baseurl' => $data['baseurl']
+                       'nick' => $data['nick']
                ];
 
+               if (!empty($data['baseurl'])) {
+                       $updated['baseurl'] = $data['baseurl'];
+               }
                if (!empty($data['keywords'])) {
                        $updated['keywords'] = $data['keywords'];
                }
@@ -1500,7 +1502,7 @@ class Contact extends BaseObject
                }
 
                // Only fill the pubkey if it had been empty before. We have to prevent identity theft.
-               if (empty($contact['pubkey'])) {
+               if (empty($contact['pubkey']) && !empty($data['pubkey'])) {
                        $updated['pubkey'] = $data['pubkey'];
                }
 
index 4c5f20c63eefb16d3c1ad971d535b0c6f8f8d318..31d363a118eb2091862751833542ab3c2472b22d 100644 (file)
@@ -1684,68 +1684,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"]);
-
-                       $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]);
-
-                               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;
-                               }
-                       }
+                       $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']),
+                               'uri-date' => DateTimeFormat::utc($contact['uri-date'])];
 
-                       if ($update) {
-                               Logger::log("Update contact data for contact " . $contact["id"] . " (" . $contact["nick"] . ")", Logger::DEBUG);
+                       DBA::update('contact', $fields, ['id' => $contact['id'], 'network' => $contact['network']], $contact_old);
 
-                               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"])
-                               );
-                       }
+                       // Update the public contact. Don't set the "hidden" value, this is used differently for public contacts
+                       unset($fields['hidden']);
+                       $fields['unsearchable'] = $hide;
+                       $condition = ['uid' => 0, 'nurl' => Strings::normaliseLink($contact_old['url'])];
+                       DBA::update('contact', $fields, $condition, true);
 
-                       Contact::updateAvatar(
-                               $author['avatar'],
-                               $importer['importer_uid'],
-                               $contact['id'],
-                               (strtotime($contact['avatar-date']) > strtotime($contact_old['avatar-date']) || ($author['avatar'] != $contact_old['avatar']))
-                       );
+                       Contact::updateAvatar($author['avatar'], $importer['importer_uid'], $contact['id']);
 
-                       // 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);
+                       $pcid = Contact::getIdForURL($contact_old['url']);
+                       if (!empty($pcid)) {
+                               Contact::updateAvatar($author['avatar'], 0, $pcid);
+                       }
 
                        /*
                         * The generation is a sign for the reliability of the provided data.