*
* @return object XML root object
*/
- private function add_header($doc, $owner, $authorelement, $alternatelink = "", $public = false) {
+ private static function add_header($doc, $owner, $authorelement, $alternatelink = "", $public = false) {
if ($alternatelink == "")
$alternatelink = $owner['url'];
*
* @return object XML author object
*/
- private function add_author($doc, $owner, $authorelement, $public) {
+ private static function add_author($doc, $owner, $authorelement, $public) {
// Is the profile hidden or shouldn't be published in the net? Then add the "hide" element
$r = q("SELECT `id` FROM `profile` INNER JOIN `user` ON `user`.`uid` = `profile`.`uid`
*
* @return object XML author object
*/
- private function add_entry_author($doc, $element, $contact_url, $item) {
+ private static function add_entry_author($doc, $element, $contact_url, $item) {
$contact = get_contact_details_by_url($contact_url, $item["uid"]);
*
* @return object XML activity object
*/
- private function create_activity($doc, $element, $activity) {
+ private static function create_activity($doc, $element, $activity) {
if($activity) {
$entry = $doc->createElement($element);
*
* @return object XML attachment object
*/
- private function get_attachment($doc, $root, $item) {
+ private static function get_attachment($doc, $root, $item) {
$arr = explode('[/attach],',$item['attach']);
if(count($arr)) {
foreach($arr as $r) {
*
* @return object XML entry object
*/
- private function entry($doc, $type, $item, $owner, $comment = false, $cid = 0) {
+ private static function entry($doc, $type, $item, $owner, $comment = false, $cid = 0) {
$mentioned = array();
* @param string $birthday Birthday of the contact
*
*/
- private function birthday_event($contact, $birthday) {
+ private static function birthday_event($contact, $birthday) {
// Check for duplicates
$r = q("SELECT `id` FROM `event` WHERE `uid` = %d AND `cid` = %d AND `start` = '%s' AND `type` = '%s' LIMIT 1",
*
* @return Returns an array with relevant data of the author
*/
- private function fetchauthor($xpath, $context, $importer, $element, $onlyfetch, $xml = "") {
+ private static function fetchauthor($xpath, $context, $importer, $element, $onlyfetch, $xml = "") {
$author = array();
$author["name"] = $xpath->evaluate($element."/atom:name/text()", $context)->item(0)->nodeValue;
*
* @return string XML string
*/
- private function transform_activity($xpath, $activity, $element) {
+ private static function transform_activity($xpath, $activity, $element) {
if (!is_object($activity))
return "";
* @param object $mail mail elements
* @param array $importer Record of the importer user mixed with contact of the content
*/
- private function process_mail($xpath, $mail, $importer) {
+ private static function process_mail($xpath, $mail, $importer) {
logger("Processing mails");
* @param object $suggestion suggestion elements
* @param array $importer Record of the importer user mixed with contact of the content
*/
- private function process_suggestion($xpath, $suggestion, $importer) {
+ private static function process_suggestion($xpath, $suggestion, $importer) {
$a = get_app();
logger("Processing suggestions");
* @param object $relocation relocation elements
* @param array $importer Record of the importer user mixed with contact of the content
*/
- private function process_relocation($xpath, $relocation, $importer) {
+ private static function process_relocation($xpath, $relocation, $importer) {
logger("Processing relocations");
* @param array $importer Record of the importer user mixed with contact of the content
* @param int $entrytype Is it a toplevel entry, a comment or a relayed comment?
*/
- private function update_content($current, $item, $importer, $entrytype) {
+ private static function update_content($current, $item, $importer, $entrytype) {
$changed = false;
if (edited_timestamp_is_newer($current, $item)) {
*
* @return int Is it a toplevel entry, a comment or a relayed comment?
*/
- private function get_entry_type($importer, $item) {
+ private static function get_entry_type($importer, $item) {
if ($item["parent-uri"] != $item["uri"]) {
$community = false;
* @param array $importer Record of the importer user mixed with contact of the content
* @param int $posted_id The record number of item record that was just posted
*/
- private function do_poke($item, $importer, $posted_id) {
+ private static function do_poke($item, $importer, $posted_id) {
$verb = urldecode(substr($item["verb"],strpos($item["verb"], "#")+1));
if(!$verb)
return;
*
* @return bool Should the processing of the entries be continued?
*/
- private function process_verbs($entrytype, $importer, &$item, &$is_like) {
+ private static function process_verbs($entrytype, $importer, &$item, &$is_like) {
logger("Process verb ".$item["verb"]." and object-type ".$item["object-type"]." for entrytype ".$entrytype, LOGGER_DEBUG);
* @param object $links link elements
* @param array $item the item record
*/
- private function parse_links($links, &$item) {
+ private static function parse_links($links, &$item) {
$rel = "";
$href = "";
$type = "";
* @param object $entry entry elements
* @param array $importer Record of the importer user mixed with contact of the content
*/
- private function process_entry($header, $xpath, $entry, $importer) {
+ private static function process_entry($header, $xpath, $entry, $importer) {
logger("Processing entries");
// Get the uri
$item["uri"] = $xpath->query("atom:id/text()", $entry)->item(0)->nodeValue;
+ $item["edited"] = $xpath->query("atom:updated/text()", $entry)->item(0)->nodeValue;
+
+ $current = q("SELECT `id`, `uid`, `last-child`, `edited`, `body` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
+ dbesc($item["uri"]),
+ intval($importer["importer_uid"])
+ );
+
+ // Is there an existing item?
+ if (dbm::is_result($current) AND edited_timestamp_is_newer($current[0], $item) AND
+ (datetime_convert("UTC","UTC",$item["edited"]) < $current[0]["edited"])) {
+ logger("Item ".$item["uri"]." already existed.", LOGGER_DEBUG);
+ return;
+ }
+
// Fetch the owner
$owner = self::fetchauthor($xpath, $entry, $importer, "dfrn:owner", true);
$item["title"] = $xpath->query("atom:title/text()", $entry)->item(0)->nodeValue;
$item["created"] = $xpath->query("atom:published/text()", $entry)->item(0)->nodeValue;
- $item["edited"] = $xpath->query("atom:updated/text()", $entry)->item(0)->nodeValue;
$item["body"] = $xpath->query("dfrn:env/text()", $entry)->item(0)->nodeValue;
$item["body"] = str_replace(array(' ',"\t","\r","\n"), array('','','',''),$item["body"]);
}
}
- $r = q("SELECT `id`, `uid`, `last-child`, `edited`, `body` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
- dbesc($item["uri"]),
- intval($importer["importer_uid"])
- );
-
if (!self::process_verbs($entrytype, $importer, $item, $is_like)) {
logger("Exiting because 'process_verbs' told us so", LOGGER_DEBUG);
return;
}
// Update content if 'updated' changes
- if (dbm::is_result($r)) {
+ if (dbm::is_result($current)) {
if (self::update_content($r[0], $item, $importer, $entrytype))
logger("Item ".$item["uri"]." was updated.", LOGGER_DEBUG);
else
* @param object $deletion deletion elements
* @param array $importer Record of the importer user mixed with contact of the content
*/
- private function process_deletion($xpath, $deletion, $importer) {
+ private static function process_deletion($xpath, $deletion, $importer) {
logger("Processing deletions");
foreach (array_reverse($entrylist) AS $entry) {
$item = array_merge($header, $author);
- $item["title"] = $xpath->evaluate('atom:title/text()', $entry)->item(0)->nodeValue;
-
- if ($item["title"] == "")
- $item["title"] = $xpath->evaluate('title/text()', $entry)->item(0)->nodeValue;
-
- if ($item["title"] == "")
- $item["title"] = $xpath->evaluate('rss:title/text()', $entry)->item(0)->nodeValue;
-
- $alternate = $xpath->query("atom:link[@rel='alternate']", $entry)->item(0)->attributes;
- if (!is_object($alternate))
- $alternate = $xpath->query("atom:link", $entry)->item(0)->attributes;
-
if (is_object($alternate))
foreach($alternate AS $attributes)
if ($attributes->name == "href")
$item["parent-uri"] = $item["uri"];
+ if (!$simulate) {
+ $r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s', '%s')",
+ intval($importer["uid"]), dbesc($item["uri"]), dbesc(NETWORK_FEED), dbesc(NETWORK_DFRN));
+ if ($r) {
+ logger("Item with uri ".$item["uri"]." for user ".$importer["uid"]." already existed under id ".$r[0]["id"], LOGGER_DEBUG);
+ continue;
+ }
+ }
+
+ $item["title"] = $xpath->evaluate('atom:title/text()', $entry)->item(0)->nodeValue;
+
+ if ($item["title"] == "")
+ $item["title"] = $xpath->evaluate('title/text()', $entry)->item(0)->nodeValue;
+
+ if ($item["title"] == "")
+ $item["title"] = $xpath->evaluate('rss:title/text()', $entry)->item(0)->nodeValue;
+
+ $alternate = $xpath->query("atom:link[@rel='alternate']", $entry)->item(0)->attributes;
+ if (!is_object($alternate))
+ $alternate = $xpath->query("atom:link", $entry)->item(0)->attributes;
+
$published = $xpath->query('atom:published/text()', $entry)->item(0)->nodeValue;
if ($published == "")
if ($creator != "")
$item["author-name"] = $creator;
- if (!$simulate) {
- $r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s', '%s')",
- intval($importer["uid"]), dbesc($item["uri"]), dbesc(NETWORK_FEED), dbesc(NETWORK_DFRN));
- if ($r) {
- logger("Item with uri ".$item["uri"]." for user ".$importer["uid"]." already existed under id ".$r[0]["id"], LOGGER_DEBUG);
- continue;
- }
- }
-
/// @TODO ?
// <category>Ausland</category>
// <media:thumbnail width="152" height="76" url="http://www.taz.de/picture/667875/192/14388767.jpg"/>