mirror of
https://github.com/friendica/friendica
synced 2025-04-27 03:10:12 +00:00
Improvements how gcontact entries are updated
This commit is contained in:
parent
036311237f
commit
2ca6cdf6b6
7 changed files with 133 additions and 214 deletions
|
@ -1115,13 +1115,13 @@ class dfrn {
|
|||
*
|
||||
* @return Returns an array with relevant data of the author
|
||||
*/
|
||||
private function fetchauthor($xpath, $context, $importer, $element, $onlyfetch) {
|
||||
private function fetchauthor($xpath, $context, $importer, $element, $onlyfetch, $xml = "") {
|
||||
|
||||
$author = array();
|
||||
$author["name"] = $xpath->evaluate($element."/atom:name/text()", $context)->item(0)->nodeValue;
|
||||
$author["link"] = $xpath->evaluate($element."/atom:uri/text()", $context)->item(0)->nodeValue;
|
||||
|
||||
$r = q("SELECT `id`, `uid`, `network`, `avatar-date`, `name-date`, `uri-date`, `addr`,
|
||||
$r = q("SELECT `id`, `uid`, `url`, `network`, `avatar-date`, `name-date`, `uri-date`, `addr`,
|
||||
`name`, `nick`, `about`, `location`, `keywords`, `bdyear`, `bd`
|
||||
FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' AND `network` != '%s'",
|
||||
intval($importer["uid"]), dbesc(normalise_link($author["link"])), dbesc(NETWORK_STATUSNET));
|
||||
|
@ -1130,6 +1130,9 @@ class dfrn {
|
|||
$author["contact-id"] = $r[0]["id"];
|
||||
$author["network"] = $r[0]["network"];
|
||||
} else {
|
||||
if (!$onlyfetch)
|
||||
logger("Contact ".$author["link"]." wasn't found for user ".$importer["uid"]." XML: ".$xml, LOGGER_DEBUG);
|
||||
|
||||
$author["contact-id"] = $importer["id"];
|
||||
$author["network"] = $importer["network"];
|
||||
$onlyfetch = true;
|
||||
|
@ -1159,38 +1162,41 @@ class dfrn {
|
|||
}
|
||||
|
||||
if ($r AND !$onlyfetch) {
|
||||
logger("Check if contact details for contact ".$r[0]["id"]." (".$r[0]["nick"].") have to be updated.", LOGGER_DEBUG);
|
||||
|
||||
$poco = array("url" => $contact["url"]);
|
||||
|
||||
// When was the last change to name or uri?
|
||||
$name_element = $xpath->query($element."/atom:name", $context)->item(0);
|
||||
foreach($name_element->attributes AS $attributes)
|
||||
if ($attributes->name == "updated")
|
||||
$contact["name-date"] = $attributes->textContent;
|
||||
$poco["name-date"] = $attributes->textContent;
|
||||
|
||||
$link_element = $xpath->query($element."/atom:link", $context)->item(0);
|
||||
foreach($link_element->attributes AS $attributes)
|
||||
if ($attributes->name == "updated")
|
||||
$contact["uri-date"] = $attributes->textContent;
|
||||
$poco["uri-date"] = $attributes->textContent;
|
||||
|
||||
// Update contact data
|
||||
$value = $xpath->evaluate($element."/dfrn:handle/text()", $context)->item(0)->nodeValue;
|
||||
if ($value != "")
|
||||
$contact["addr"] = $value;
|
||||
$poco["addr"] = $value;
|
||||
|
||||
$value = $xpath->evaluate($element."/poco:displayName/text()", $context)->item(0)->nodeValue;
|
||||
if ($value != "")
|
||||
$contact["name"] = $value;
|
||||
$poco["name"] = $value;
|
||||
|
||||
$value = $xpath->evaluate($element."/poco:preferredUsername/text()", $context)->item(0)->nodeValue;
|
||||
if ($value != "")
|
||||
$contact["nick"] = $value;
|
||||
$poco["nick"] = $value;
|
||||
|
||||
$value = $xpath->evaluate($element."/poco:note/text()", $context)->item(0)->nodeValue;
|
||||
if ($value != "")
|
||||
$contact["about"] = $value;
|
||||
$poco["about"] = $value;
|
||||
|
||||
$value = $xpath->evaluate($element."/poco:address/poco:formatted/text()", $context)->item(0)->nodeValue;
|
||||
if ($value != "")
|
||||
$contact["location"] = $value;
|
||||
$poco["location"] = $value;
|
||||
|
||||
/// @todo Add support for the following fields that we don't support by now in the contact table:
|
||||
/// - poco:utcOffset
|
||||
|
@ -1207,7 +1213,7 @@ class dfrn {
|
|||
$tags[$tag->nodeValue] = $tag->nodeValue;
|
||||
|
||||
if (count($tags))
|
||||
$contact["keywords"] = implode(", ", $tags);
|
||||
$poco["keywords"] = implode(", ", $tags);
|
||||
|
||||
// "dfrn:birthday" contains the birthday converted to UTC
|
||||
$old_bdyear = $contact["bdyear"];
|
||||
|
@ -1217,7 +1223,7 @@ class dfrn {
|
|||
if (strtotime($birthday) > time()) {
|
||||
$bd_timestamp = strtotime($birthday);
|
||||
|
||||
$contact["bdyear"] = date("Y", $bd_timestamp);
|
||||
$poco["bdyear"] = date("Y", $bd_timestamp);
|
||||
}
|
||||
|
||||
// "poco:birthday" is the birthday in the format "yyyy-mm-dd"
|
||||
|
@ -1232,9 +1238,11 @@ class dfrn {
|
|||
$bdyear = $bdyear + 1;
|
||||
}
|
||||
|
||||
$contact["bd"] = $value;
|
||||
$poco["bd"] = $value;
|
||||
}
|
||||
|
||||
$contact = array_merge($contact, $poco);
|
||||
|
||||
if ($old_bdyear != $contact["bdyear"])
|
||||
self::birthday_event($contact, $birthday);
|
||||
|
||||
|
@ -1245,6 +1253,7 @@ class dfrn {
|
|||
|
||||
unset($fields["id"]);
|
||||
unset($fields["uid"]);
|
||||
unset($fields["url"]);
|
||||
unset($fields["avatar-date"]);
|
||||
unset($fields["name-date"]);
|
||||
unset($fields["uri-date"]);
|
||||
|
@ -1264,7 +1273,7 @@ class dfrn {
|
|||
}
|
||||
|
||||
if ($update) {
|
||||
logger("Update contact data for contact ".$contact["id"], LOGGER_DEBUG);
|
||||
logger("Update contact data for contact ".$contact["id"]." (".$contact["nick"].")", LOGGER_DEBUG);
|
||||
|
||||
q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `about` = '%s', `location` = '%s',
|
||||
`addr` = '%s', `keywords` = '%s', `bdyear` = '%s', `bd` = '%s',
|
||||
|
@ -1283,9 +1292,10 @@ class dfrn {
|
|||
// It is used in the socgraph.php to prevent that old contact data
|
||||
// that was relayed over several servers can overwrite contact
|
||||
// data that we received directly.
|
||||
$contact["generation"] = 2;
|
||||
$contact["photo"] = $author["avatar"];
|
||||
update_gcontact($contact);
|
||||
|
||||
$poco["generation"] = 2;
|
||||
$poco["photo"] = $author["avatar"];
|
||||
update_gcontact($poco);
|
||||
}
|
||||
|
||||
return($author);
|
||||
|
@ -2369,8 +2379,14 @@ class dfrn {
|
|||
$header["contact-id"] = $importer["id"];
|
||||
|
||||
// Update the contact table if the data has changed
|
||||
|
||||
// The "atom:author" is only present in feeds
|
||||
if ($xpath->query("/atom:feed/atom:author")->length > 0)
|
||||
self::fetchauthor($xpath, $doc->firstChild, $importer, "atom:author", false, $xml);
|
||||
|
||||
// Only the "dfrn:owner" in the head section contains all data
|
||||
self::fetchauthor($xpath, $doc->firstChild, $importer, "dfrn:owner", false);
|
||||
if ($xpath->query("/atom:feed/dfrn:owner")->length > 0)
|
||||
self::fetchauthor($xpath, $doc->firstChild, $importer, "dfrn:owner", false, $xml);
|
||||
|
||||
logger("Import DFRN message for user ".$importer["uid"]." from contact ".$importer["id"], LOGGER_DEBUG);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue