]> git.mxchange.org Git - friendica.git/commitdiff
OStatus: Better handling of changed nicknames
authorMichael <heluecht@pirati.ca>
Tue, 10 Oct 2017 09:13:37 +0000 (09:13 +0000)
committerMichael <heluecht@pirati.ca>
Tue, 10 Oct 2017 09:13:37 +0000 (09:13 +0000)
include/Contact.php
include/ostatus.php

index a0b9ec5e94e5b0c851ecf0b0fec164218e2c31e2..8b575bf122bfba5f8c8cc887e01eeeca65600823 100644 (file)
@@ -607,6 +607,10 @@ function get_contact($url, $uid = 0, $no_update = false) {
                $data = array_merge($data, $gcontacts);
        }
 
+       if (!$contact_id && ($data["alias"] != '') && ($data["alias"] != $url)) {
+               $contact_id = get_contact($data["alias"], $uid, true);
+       }
+
        $url = $data["url"];
        if (!$contact_id) {
                dba::insert('contact', array('uid' => $uid, 'created' => datetime_convert(), 'url' => $data["url"],
@@ -658,7 +662,7 @@ function get_contact($url, $uid = 0, $no_update = false) {
 
        update_contact_avatar($data["photo"], $uid, $contact_id);
 
-       $contact = dba::select('contact', array('addr', 'alias', 'name', 'nick', 'keywords', 'location', 'about', 'avatar-date'),
+       $contact = dba::select('contact', array('url', 'nurl', 'addr', 'alias', 'name', 'nick', 'keywords', 'location', 'about', 'avatar-date'),
                                array('id' => $contact_id), array('limit' => 1));
 
        // This condition should always be true
@@ -668,6 +672,8 @@ function get_contact($url, $uid = 0, $no_update = false) {
 
        $updated = array('addr' => $data['addr'],
                        'alias' => $data['alias'],
+                       'url' => $data['url'],
+                       'nurl' => normalise_link($data['url']),
                        'name' => $data['name'],
                        'nick' => $data['nick']);
 
index d1ad3f94cfbbe90f08c9d40c90589adb1524ddfd..0e2caa2156d8dc6f32db15dcb2a529630e966afa 100644 (file)
@@ -62,12 +62,26 @@ class ostatus {
                                }
                        }
                }
-
                $author["contact-id"] = $contact["id"];
 
                $found = false;
 
-               if ($author["author-link"] != "") {
+               if ($aliaslink != '') {
+                       $condition = array("`uid` = ? AND `alias` = ? AND `network` != ?",
+                                       $importer["uid"], $aliaslink, NETWORK_STATUSNET);
+                       $r = dba::select('contact', array(), $condition, array('limit' => 1));
+
+                       if (dbm::is_result($r)) {
+                               $found = true;
+                               if ($r['blocked']) {
+                                       $r['id'] = -1;
+                               }
+                               $contact = $r;
+                               $author["contact-id"] = $r["id"];
+                       }
+               }
+
+               if (!$found && ($author["author-link"] != "")) {
                        if ($aliaslink == "") {
                                $aliaslink = $author["author-link"];
                        }
@@ -83,7 +97,6 @@ class ostatus {
                                }
                                $contact = $r;
                                $author["contact-id"] = $r["id"];
-                               $author["author-link"] = $r["url"];
                        }
                }
 
@@ -93,12 +106,12 @@ class ostatus {
                        $r = dba::select('contact', array(), $condition, array('limit' => 1));
 
                        if (dbm::is_result($r)) {
+                               $found = true;
                                if ($r['blocked']) {
                                        $r['id'] = -1;
                                }
                                $contact = $r;
                                $author["contact-id"] = $r["id"];
-                               $author["author-link"] = $r["url"];
                        }
                }
 
@@ -138,6 +151,9 @@ class ostatus {
 
                        // Update contact data
 
+                       $current = $contact;
+                       unset($current['name-date']);
+
                        // This query doesn't seem to work
                        // $value = $xpath->query("atom:link[@rel='salmon']", $context)->item(0)->nodeValue;
                        // if ($value != "")
@@ -148,6 +164,9 @@ class ostatus {
                        // if ($value != "")
                        //      $contact["poll"] = $value;
 
+                       $contact['url'] = $author["author-link"];
+                       $contact['nurl'] = normalise_link($contact['url']);
+
                        $value = $xpath->evaluate('atom:author/atom:uri/text()', $context)->item(0)->nodeValue;
                        if ($value != "")
                                $contact["alias"] = $value;
@@ -168,32 +187,25 @@ class ostatus {
                        if ($value != "")
                                $contact["location"] = $value;
 
-                       if (($contact["name"] != $r[0]["name"]) || ($contact["nick"] != $r[0]["nick"]) || ($contact["about"] != $r[0]["about"]) ||
-                               ($contact["alias"] != $r[0]["alias"]) || ($contact["location"] != $r[0]["location"])) {
-
-                               logger("Update contact data for contact ".$contact["id"], LOGGER_DEBUG);
+                       $contact['name-date'] = datetime_convert();
 
-                               q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `alias` = '%s', `about` = '%s', `location` = '%s', `name-date` = '%s' WHERE `id` = %d",
-                                       dbesc($contact["name"]), dbesc($contact["nick"]), dbesc($contact["alias"]),
-                                       dbesc($contact["about"]), dbesc($contact["location"]),
-                                       dbesc(datetime_convert()), intval($contact["id"]));
-                       }
+                       dba::update('contact', $contact, array('id' => $contact["id"]), $current);
 
-                       if (isset($author["author-avatar"]) && ($author["author-avatar"] != $r[0]['avatar'])) {
+                       if (!empty($author["author-avatar"]) && ($author["author-avatar"] != $current['avatar'])) {
                                logger("Update profile picture for contact ".$contact["id"], LOGGER_DEBUG);
-
                                update_contact_avatar($author["author-avatar"], $importer["uid"], $contact["id"]);
                        }
 
                        // Ensure that we are having this contact (with uid=0)
-                       $cid = get_contact($author["author-link"], 0);
+                       $cid = get_contact($aliaslink, 0);
 
                        if ($cid) {
-                               $fields = array('url', 'name', 'nick', 'alias', 'about', 'location');
+                               $fields = array('url', 'nurl', 'name', 'nick', 'alias', 'about', 'location');
                                $old_contact = dba::select('contact', $fields, array('id' => $cid), array('limit' => 1));
 
                                // Update it with the current values
                                $fields = array('url' => $author["author-link"], 'name' => $contact["name"],
+                                               'nurl' => normalise_link($author["author-link"]),
                                                'nick' => $contact["nick"], 'alias' => $contact["alias"],
                                                'about' => $contact["about"], 'location' => $contact["location"],
                                                'success_update' => datetime_convert(), 'last-update' => datetime_convert());