X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FProtocol%2FOStatus.php;h=c6f840a66e0b60150f9d57b0574e26df51b88527;hb=41678ec3cd24fadb5fa0649694f29b4dced0e75a;hp=b3c85f377e2de1be105924b14af0813b0a255e54;hpb=b85490515016aad50e0fe73c1174949a1f72d3c3;p=friendica.git diff --git a/src/Protocol/OStatus.php b/src/Protocol/OStatus.php index b3c85f377e..c6f840a66e 100644 --- a/src/Protocol/OStatus.php +++ b/src/Protocol/OStatus.php @@ -16,18 +16,16 @@ use Friendica\Model\GContact; use Friendica\Model\Item; use Friendica\Network\Probe; use Friendica\Object\Image; +use Friendica\Util\DateTimeFormat; use Friendica\Util\Lock; use Friendica\Util\Network; -use Friendica\Util\Temporal; use Friendica\Util\XML; use dba; use DOMDocument; use DOMXPath; require_once 'include/dba.php'; -require_once 'include/threads.php'; require_once 'include/html2bbcode.php'; -require_once 'include/bbcode.php'; require_once 'include/items.php'; require_once 'mod/share.php'; require_once 'include/enotify.php'; @@ -72,55 +70,34 @@ class OStatus } $author["contact-id"] = $contact["id"]; - $found = false; - + $contact = null; if ($aliaslink != '') { $condition = ["`uid` = ? AND `alias` = ? AND `network` != ?", $importer["uid"], $aliaslink, NETWORK_STATUSNET]; - $r = dba::selectFirst('contact', [], $condition); - - if (DBM::is_result($r)) { - $found = true; - if ($r['blocked']) { - $r['id'] = -1; - } - $contact = $r; - $author["contact-id"] = $r["id"]; - } + $contact = dba::selectFirst('contact', [], $condition); } - if (!$found && ($author["author-link"] != "")) { + if (!DBM::is_result($contact) && $author["author-link"] != '') { if ($aliaslink == "") { $aliaslink = $author["author-link"]; } $condition = ["`uid` = ? AND `nurl` IN (?, ?) AND `network` != ?", $importer["uid"], normalise_link($author["author-link"]), normalise_link($aliaslink), NETWORK_STATUSNET]; - $r = dba::selectFirst('contact', [], $condition); - - if (DBM::is_result($r)) { - $found = true; - if ($r['blocked']) { - $r['id'] = -1; - } - $contact = $r; - $author["contact-id"] = $r["id"]; - } + $contact = dba::selectFirst('contact', [], $condition); } - if (!$found && ($addr != "")) { + if (!DBM::is_result($contact) && ($addr != '')) { $condition = ["`uid` = ? AND `addr` = ? AND `network` != ?", $importer["uid"], $addr, NETWORK_STATUSNET]; - $r = dba::selectFirst('contact', [], $condition); + $contact = dba::selectFirst('contact', [], $condition); + } - if (DBM::is_result($r)) { - $found = true; - if ($r['blocked']) { - $r['id'] = -1; - } - $contact = $r; - $author["contact-id"] = $r["id"]; + if (DBM::is_result($contact)) { + if ($contact['blocked']) { + $contact['id'] = -1; } + $author["contact-id"] = $contact["id"]; } $avatarlist = []; @@ -155,7 +132,7 @@ class OStatus $author["owner-avatar"] = $author["author-avatar"]; // Only update the contacts if it is an OStatus contact - if ($r && ($r['id'] > 0) && !$onlyfetch && ($contact["network"] == NETWORK_OSTATUS)) { + if (DBM::is_result($contact) && ($contact['id'] > 0) && !$onlyfetch && ($contact["network"] == NETWORK_OSTATUS)) { // Update contact data $current = $contact; @@ -199,7 +176,7 @@ class OStatus $contact["location"] = $value; } - $contact['name-date'] = Temporal::convert(); + $contact['name-date'] = DateTimeFormat::utcNow(); dba::update('contact', $contact, ['id' => $contact["id"]], $current); @@ -209,7 +186,7 @@ class OStatus } // Ensure that we are having this contact (with uid=0) - $cid = Contact::getIdForURL($aliaslink, 0); + $cid = Contact::getIdForURL($aliaslink, 0, true); if ($cid) { $fields = ['url', 'nurl', 'name', 'nick', 'alias', 'about', 'location']; @@ -220,7 +197,7 @@ class OStatus 'nurl' => normalise_link($author["author-link"]), 'nick' => $contact["nick"], 'alias' => $contact["alias"], 'about' => $contact["about"], 'location' => $contact["location"], - 'success_update' => Temporal::convert(), 'last-update' => Temporal::convert()]; + 'success_update' => DateTimeFormat::utcNow(), 'last-update' => DateTimeFormat::utcNow()]; dba::update('contact', $fields, ['id' => $cid], $old_contact); @@ -488,6 +465,11 @@ class OStatus if (!$valid) { // If not, then it depends on this setting $valid = !Config::get('system', 'ostatus_full_threads'); + if ($valid) { + logger("Item with uri ".self::$itemlist[0]['uri']." will be imported due to the system settings.", LOGGER_DEBUG); + } + } else { + logger("Item with uri ".self::$itemlist[0]['uri']." belongs to a contact (".self::$itemlist[0]['contact-id']."). It will be imported.", LOGGER_DEBUG); } if ($valid) { // Never post a thread when the only interaction by our contact was a like @@ -498,10 +480,16 @@ class OStatus $valid = true; } } + if ($valid) { + logger("Item with uri ".self::$itemlist[0]['uri']." will be imported since the thread contains posts or shares.", LOGGER_DEBUG); + } } } else { // But we will only import complete threads $valid = dba::exists('item', ['uid' => $importer["uid"], 'uri' => self::$itemlist[0]['parent-uri']]); + if ($valid) { + logger("Item with uri ".self::$itemlist[0]["uri"]." belongs to parent ".self::$itemlist[0]['parent-uri']." of user ".$importer["uid"].". It will be imported.", LOGGER_DEBUG); + } } if ($valid) { @@ -553,16 +541,7 @@ class OStatus return; } - // Currently we don't have a central deletion function that we could use in this case - // The function "item_drop" doesn't work for that case - dba::update( - 'item', - ['deleted' => true, 'title' => '', 'body' => '', - 'edited' => Temporal::convert(), 'changed' => Temporal::convert()], - ['id' => $deleted["id"]] - ); - - delete_thread($deleted["id"], $deleted["parent-uri"]); + Item::deleteById($deleted["id"]); logger('Deleted item with uri '.$item['uri'].' for user '.$item['uid']); } @@ -748,6 +727,7 @@ class OStatus $links = $xpath->query('//link'); if ($links) { + $file = ''; foreach ($links as $link) { $attribute = self::readAttributes($link); if (($attribute['rel'] == 'alternate') && ($attribute['type'] == 'application/atom+xml')) { @@ -1261,6 +1241,7 @@ class OStatus $root->setAttribute("xmlns:statusnet", NAMESPACE_STATUSNET); $root->setAttribute("xmlns:mastodon", NAMESPACE_MASTODON); + $title = ''; switch ($filter) { case 'activity': $title = L10n::t('%s\'s timeline', $owner['name']); break; case 'posts' : $title = L10n::t('%s\'s posts' , $owner['name']); break; @@ -1273,7 +1254,7 @@ class OStatus XML::addElement($doc, $root, "title", $title); XML::addElement($doc, $root, "subtitle", sprintf("Updates from %s on %s", $owner["name"], $a->config["sitename"])); XML::addElement($doc, $root, "logo", $owner["photo"]); - XML::addElement($doc, $root, "updated", Temporal::convert("now", "UTC", "UTC", Temporal::ATOM)); + XML::addElement($doc, $root, "updated", DateTimeFormat::utcNow(DateTimeFormat::ATOM)); $author = self::addAuthor($doc, $owner); $root->appendChild($author); @@ -1395,17 +1376,14 @@ class OStatus */ private static function addAuthor($doc, $owner) { - $r = q("SELECT `homepage`, `publish` FROM `profile` WHERE `uid` = %d AND `is-default` LIMIT 1", intval($owner["uid"])); - if (DBM::is_result($r)) { - $profile = $r[0]; - } + $profile = dba::selectFirst('profile', ['homepage', 'publish'], ['uid' => $owner['uid'], 'is-default' => true]); $author = $doc->createElement("author"); XML::addElement($doc, $author, "id", $owner["url"]); XML::addElement($doc, $author, "activity:object-type", ACTIVITY_OBJ_PERSON); XML::addElement($doc, $author, "uri", $owner["url"]); XML::addElement($doc, $author, "name", $owner["nick"]); XML::addElement($doc, $author, "email", $owner["addr"]); - XML::addElement($doc, $author, "summary", bbcode($owner["about"], false, false, 7)); + XML::addElement($doc, $author, "summary", BBCode::convert($owner["about"], false, 7)); $attributes = ["rel" => "alternate", "type" => "text/html", "href" => $owner["url"]]; XML::addElement($doc, $author, "link", "", $attributes); @@ -1430,7 +1408,7 @@ class OStatus XML::addElement($doc, $author, "poco:preferredUsername", $owner["nick"]); XML::addElement($doc, $author, "poco:displayName", $owner["name"]); - XML::addElement($doc, $author, "poco:note", bbcode($owner["about"], false, false, 7)); + XML::addElement($doc, $author, "poco:note", BBCode::convert($owner["about"], false, 7)); if (trim($owner["location"]) != "") { $element = $doc->createElement("poco:address"); @@ -1438,15 +1416,15 @@ class OStatus $author->appendChild($element); } - if (trim($profile["homepage"]) != "") { - $urls = $doc->createElement("poco:urls"); - XML::addElement($doc, $urls, "poco:type", "homepage"); - XML::addElement($doc, $urls, "poco:value", $profile["homepage"]); - XML::addElement($doc, $urls, "poco:primary", "true"); - $author->appendChild($urls); - } + if (DBM::is_result($profile)) { + if (trim($profile["homepage"]) != "") { + $urls = $doc->createElement("poco:urls"); + XML::addElement($doc, $urls, "poco:type", "homepage"); + XML::addElement($doc, $urls, "poco:value", $profile["homepage"]); + XML::addElement($doc, $urls, "poco:primary", "true"); + $author->appendChild($urls); + } - if (count($profile)) { XML::addElement($doc, $author, "followers", "", ["url" => System::baseUrl()."/viewcontacts/".$owner["nick"]]); XML::addElement($doc, $author, "statusnet:profile_info", "", ["local_id" => $owner["uid"]]); } @@ -1505,6 +1483,8 @@ class OStatus */ private static function entry($doc, $item, $owner, $toplevel = false) { + $xml = null; + $repeated_guid = self::getResharedGuid($item); if ($repeated_guid != "") { $xml = self::reshareEntry($doc, $item, $owner, $repeated_guid, $toplevel); @@ -1539,7 +1519,7 @@ class OStatus XML::addElement($doc, $source, "link", "", ["rel" => "alternate", "type" => "text/html", "href" => $contact["alias"]]); XML::addElement($doc, $source, "link", "", ["rel" => "self", "type" => "application/atom+xml", "href" => $contact["poll"]]); XML::addElement($doc, $source, "icon", $contact["photo"]); - XML::addElement($doc, $source, "updated", Temporal::convert($contact["success_update"]."+00:00", "UTC", "UTC", Temporal::ATOM)); + XML::addElement($doc, $source, "updated", DateTimeFormat::utc($contact["success_update"]."+00:00", DateTimeFormat::ATOM)); return $source; } @@ -1909,7 +1889,7 @@ class OStatus $body = "[b]".$item['title']."[/b]\n\n".$body; } - $body = bbcode($body, false, false, 7); + $body = BBCode::convert($body, false, 7); XML::addElement($doc, $entry, "content", $body, ["type" => "html"]); @@ -1923,8 +1903,8 @@ class OStatus XML::addElement($doc, $entry, "activity:verb", $verb); - XML::addElement($doc, $entry, "published", Temporal::convert($item["created"]."+00:00", "UTC", "UTC", Temporal::ATOM)); - XML::addElement($doc, $entry, "updated", Temporal::convert($item["edited"]."+00:00", "UTC", "UTC", Temporal::ATOM)); + XML::addElement($doc, $entry, "published", DateTimeFormat::utc($item["created"]."+00:00", DateTimeFormat::ATOM)); + XML::addElement($doc, $entry, "updated", DateTimeFormat::utc($item["edited"]."+00:00", DateTimeFormat::ATOM)); } /** @@ -2127,8 +2107,8 @@ class OStatus $last_update = 'now -30 days'; } - $check_date = Temporal::convert($last_update); - $authorid = Contact::getIdForURL($owner["url"], 0); + $check_date = DateTimeFormat::utc($last_update); + $authorid = Contact::getIdForURL($owner["url"], 0, true); $sql_extra = ''; if ($filter === 'posts') { @@ -2148,6 +2128,7 @@ class OStatus AND `item`.`created` > '%s' AND NOT `item`.`deleted` AND NOT `item`.`private` + AND `item`.`visible` AND `thread`.`network` IN ('%s', '%s') $sql_extra ORDER BY `item`.`created` DESC LIMIT %d",