Differences fixed between old and new code

This commit is contained in:
Michael Vogel 2016-02-03 23:04:52 +01:00
parent d9b5d6d5f5
commit 2d0c2990ea
2 changed files with 65 additions and 45 deletions

View File

@ -18,12 +18,12 @@ require_once("include/items.php");
require_once("include/tags.php");
require_once("include/files.php");
define("DFRN_TOP_LEVEL", 0);
define("DFRN_REPLY", 1);
define("DFRN_REPLY_RC", 2);
class dfrn2 {
const DFRN_TOP_LEVEL = 0;
const DFRN_REPLY = 1;
const DFRN_REPLY_RC = 2;
/**
* @brief Add new birthday event for this person
*
@ -58,14 +58,13 @@ class dfrn2 {
*
* @param object $xpath XPath object
* @param object $context In which context should the data be searched
* @param array $importer Record of the importer contact
* @param array $importer Record of the importer user mixed with contact of the content
* @param string $element Element name from which the data is fetched
* @param array $contact The updated contact record of the author
* @param bool $onlyfetch Should the data only be fetched or should it update the contact record as well
*
* @return Returns an array with relevant data of the author
*/
private function fetchauthor($xpath, $context, $importer, $element, $contact, $onlyfetch) {
private function fetchauthor($xpath, $context, $importer, $element, $onlyfetch) {
$author = array();
$author["name"] = $xpath->evaluate($element."/atom:name/text()", $context)->item(0)->nodeValue;
@ -80,8 +79,8 @@ class dfrn2 {
$author["contact-id"] = $r[0]["id"];
$author["network"] = $r[0]["network"];
} else {
$author["contact-id"] = $contact["id"];
$author["network"] = $contact["network"];
$author["contact-id"] = $importer["id"];
$author["network"] = $importer["network"];
$onlyfetch = true;
}
@ -623,7 +622,7 @@ class dfrn2 {
}
}
private function process_entry($header, $xpath, $entry, $importer, $contact) {
private function process_entry($header, $xpath, $entry, $importer) {
logger("Processing entries");
@ -633,27 +632,29 @@ class dfrn2 {
$item["uri"] = $xpath->query("atom:id/text()", $entry)->item(0)->nodeValue;
// Fetch the owner
$owner = self::fetchauthor($xpath, $entry, $importer, "dfrn:owner", $contact, true);
$owner = self::fetchauthor($xpath, $entry, $importer, "dfrn:owner", true);
$item["owner-name"] = $owner["name"];
$item["owner-link"] = $owner["link"];
$item["owner-avatar"] = $owner["avatar"];
if ($header["contact-id"] != $owner["contact-id"])
$item["contact-id"] = $owner["contact-id"];
// At the moment we trust the importer array
//if ($header["contact-id"] != $owner["contact-id"])
// $item["contact-id"] = $owner["contact-id"];
if (($header["network"] != $owner["network"]) AND ($owner["network"] != ""))
$item["network"] = $owner["network"];
// fetch the author
$author = self::fetchauthor($xpath, $entry, $importer, "atom:author", $contact, true);
$author = self::fetchauthor($xpath, $entry, $importer, "atom:author", true);
$item["author-name"] = $author["name"];
$item["author-link"] = $author["link"];
$item["author-avatar"] = $author["avatar"];
if ($header["contact-id"] != $author["contact-id"])
$item["contact-id"] = $author["contact-id"];
// At the moment we trust the importer array
//if ($header["contact-id"] != $author["contact-id"])
// $item["contact-id"] = $author["contact-id"];
if (($header["network"] != $author["network"]) AND ($author["network"] != ""))
$item["network"] = $author["network"];
@ -948,7 +949,7 @@ class dfrn2 {
}
}
private function process_deletion($header, $xpath, $deletion, $importer, $contact_id) {
private function process_deletion($header, $xpath, $deletion, $importer) {
logger("Processing deletions");
@ -963,7 +964,7 @@ class dfrn2 {
else
$when = datetime_convert("UTC", "UTC", "now", "Y-m-d H:i:s");
if (!$uri OR !$contact_id)
if (!$uri OR !$importer["id"])
return false;
/// @todo Only select the used fields
@ -971,10 +972,10 @@ class dfrn2 {
WHERE `uri` = '%s' AND `item`.`uid` = %d AND `contact-id` = %d AND NOT `item`.`file` LIKE '%%[%%' LIMIT 1",
dbesc($uri),
intval($importer["uid"]),
intval($contact_id)
intval($importer["id"])
);
if(!count($r)) {
logger("Item with uri ".$uri." from contact ".$contact_id." for user ".$importer["uid"]." wasn't found.", LOGGER_DEBUG);
logger("Item with uri ".$uri." from contact ".$importer["id"]." for user ".$importer["uid"]." wasn't found.", LOGGER_DEBUG);
return;
} else {
@ -1079,11 +1080,25 @@ class dfrn2 {
}
}
function import($xml,$importer, &$contact) {
/**
* @brief Imports a DFRN message
*
* @param text $xml The DFRN message
* @param array $importer Record of the importer user mixed with contact of the content
* @param bool $sort_by_date Is used when feeds are polled
*/
function import($xml,$importer, $sort_by_date = false) {
if ($xml == "")
return;
if($importer["readonly"]) {
// We aren't receiving stuff from this person. But we will quietly ignore them
// rather than a blatant "go away" message.
logger('ignoring contact '.$importer["id"]);
return;
}
$doc = new DOMDocument();
@$doc->loadXML($xml);
@ -1099,12 +1114,6 @@ class dfrn2 {
$xpath->registerNamespace("ostatus", NAMESPACE_OSTATUS);
$xpath->registerNamespace("statusnet", NAMESPACE_STATUSNET);
/// @todo Do we need this?
if (!$contact) {
$r = q("SELECT * FROM `contact` WHERE `id` = %d AND `self`", intval($importer["uid"]));
$contact = $r[0];
}
$header = array();
$header["uid"] = $importer["uid"];
$header["network"] = NETWORK_DFRN;
@ -1115,22 +1124,17 @@ class dfrn2 {
// Update the contact table if the data has changed
// Only the "dfrn:owner" in the head section contains all data
$dfrn_owner = self::fetchauthor($xpath, $doc->firstChild, $importer, "dfrn:owner", $contact, false);
self::fetchauthor($xpath, $doc->firstChild, $importer, "dfrn:owner", false);
logger("Import DFRN message for user ".$importer["uid"]." from contact ".$contact["id"]." ".print_r($dfrn_owner, true)." - ".print_r($contact, true), LOGGER_DEBUG);
//if (!$dfrn_owner["found"]) {
// logger("Author doesn't seem to be known by us. UID: ".$importer["uid"]." Contact: ".$dfrn_owner["contact-id"]." - ".print_r($dfrn_owner, true));
// return;
//}
logger("Import DFRN message for user ".$importer["uid"]." from contact ".$importer["id"], LOGGER_DEBUG);
// is it a public forum? Private forums aren't supported by now with this method
$forum = intval($xpath->evaluate("/atom:feed/dfrn:community/text()", $context)->item(0)->nodeValue);
if ($forum AND ($dfrn_owner["contact-id"] != 0))
if ($forum)
q("UPDATE `contact` SET `forum` = %d WHERE `forum` != %d AND `id` = %d",
intval($forum), intval($forum),
intval($dfrn_owner["contact-id"])
intval($importer["id"])
);
$mails = $xpath->query("/atom:feed/dfrn:mail");
@ -1147,11 +1151,11 @@ class dfrn2 {
$deletions = $xpath->query("/atom:feed/at:deleted-entry");
foreach ($deletions AS $deletion)
self::process_deletion($header, $xpath, $deletion, $importer, $dfrn_owner["contact-id"]);
self::process_deletion($header, $xpath, $deletion, $importer);
$entries = $xpath->query("/atom:feed/atom:entry");
foreach ($entries AS $entry)
self::process_entry($header, $xpath, $entry, $importer, $contact);
self::process_entry($header, $xpath, $entry, $importer);
}
}
?>

View File

@ -1696,13 +1696,29 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
return;
}
// dfrn-test
// if ($contact['network'] === NETWORK_DFRN) {
// logger("Consume DFRN messages", LOGGER_DEBUG);
// logger("dfrn-test");
// dfrn2::import($xml,$importer, $contact);
// return;
// }
/*
if ($contact['network'] === NETWORK_DFRN) {
logger("Consume DFRN messages", LOGGER_DEBUG);
logger("dfrn-test");
$r = q("SELECT `contact`.*, `contact`.`uid` AS `importer_uid`,
`contact`.`pubkey` AS `cpubkey`,
`contact`.`prvkey` AS `cprvkey`,
`contact`.`thumb` AS `thumb`,
`contact`.`url` as `url`,
`contact`.`name` as `senderName`,
`user`.*
FROM `contact`
LEFT JOIN `user` ON `contact`.`uid` = `user`.`uid`
WHERE `contact`.`id` = %d AND `user`.`uid` = %d",
dbesc($contact["id"], $importer["uid"]);
);
if ($r) {
dfrn2::import($xml,$r[0], true);
return;
}
}
*/
// Test - remove before flight
//if ($pass < 2) {
// $tempfile = tempnam(get_temppath(), "dfrn-consume-");
@ -2408,7 +2424,7 @@ function item_is_remote_self($contact, &$datarray) {
function local_delivery($importer,$data) {
// dfrn-Test
//return dfrn2::import($data, $importer, $contact);
//return dfrn2::import($data, $importer);
require_once('library/simplepie/simplepie.inc');