X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FProtocol%2FDFRN.php;h=e83732ffe2b57c219362995cee2b58136be3aa2a;hb=ce3b1210640ce653ef91cbf033788474c1f88b0c;hp=5e6c733e211068c5be3bb85b6257226bfe5c3072;hpb=08da1ed038c9b193ded0ca70b3b1c1085bb7e90a;p=friendica.git diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index 5e6c733e21..e83732ffe2 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -25,10 +25,12 @@ use Friendica\Model\Conversation; use Friendica\Model\Event; use Friendica\Model\GContact; use Friendica\Model\Item; +use Friendica\Model\Mail; use Friendica\Model\PermissionSet; use Friendica\Model\Profile; use Friendica\Model\User; use Friendica\Object\Image; +use Friendica\Util\BaseURL; use Friendica\Util\Crypto; use Friendica\Util\DateTimeFormat; use Friendica\Util\Network; @@ -119,7 +121,9 @@ class DFRN $item["entry:cid"] = defaults($item, "entry:cid", 0); $entry = self::entry($doc, "text", $item, $owner, $item["entry:comment-allow"], $item["entry:cid"]); - $root->appendChild($entry); + if (isset($entry)) { + $root->appendChild($entry); + } } return trim($doc->saveXML()); @@ -252,7 +256,7 @@ class DFRN FROM `item` USE INDEX (`uid_wall_changed`) $sql_post_table STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id` WHERE `item`.`uid` = %d AND `item`.`wall` AND `item`.`changed` > '%s' - $sql_extra + AND `item`.`visible` $sql_extra ORDER BY `item`.`parent` ".$sort.", `item`.`created` ASC LIMIT 0, 300", intval($owner_id), DBA::escape($check_date), @@ -323,7 +327,9 @@ class DFRN } $entry = self::entry($doc, $type, $item, $owner, true); - $root->appendChild($entry); + if (isset($entry)) { + $root->appendChild($entry); + } } $atom = trim($doc->saveXML()); @@ -354,7 +360,7 @@ class DFRN $ret = Item::select(Item::DELIVER_FIELDLIST, $condition); $items = Item::inArray($ret); if (!DBA::isResult($items)) { - exit(); + return ''; } $item = $items[0]; @@ -362,7 +368,7 @@ class DFRN if ($item['uid'] != 0) { $owner = User::getOwnerDataById($item['uid']); if (!$owner) { - exit(); + return ''; } } else { $owner = ['uid' => 0, 'nick' => 'feed-item']; @@ -390,10 +396,12 @@ class DFRN foreach ($items as $item) { $entry = self::entry($doc, $type, $item, $owner, true, 0); - $root->appendChild($entry); + if (isset($entry)) { + $root->appendChild($entry); + } } } else { - $root = self::entry($doc, $type, $item, $owner, true, 0, true); + self::entry($doc, $type, $item, $owner, true, 0, true); } $atom = trim($doc->saveXML()); @@ -763,31 +771,33 @@ class DFRN */ private static function addEntryAuthor(DOMDocument $doc, $element, $contact_url, $item) { - $contact = Contact::getDetailsByURL($contact_url, $item["uid"]); - $author = $doc->createElement($element); - XML::addElement($doc, $author, "name", $contact["name"]); - XML::addElement($doc, $author, "uri", $contact["url"]); - XML::addElement($doc, $author, "dfrn:handle", $contact["addr"]); - /// @Todo - /// - Check real image type and image size - /// - Check which of these boths elements we should use - $attributes = [ + $contact = Contact::getDetailsByURL($contact_url, $item["uid"]); + if (!empty($contact)) { + XML::addElement($doc, $author, "name", $contact["name"]); + XML::addElement($doc, $author, "uri", $contact["url"]); + XML::addElement($doc, $author, "dfrn:handle", $contact["addr"]); + + /// @Todo + /// - Check real image type and image size + /// - Check which of these boths elements we should use + $attributes = [ "rel" => "photo", "type" => "image/jpeg", "media:width" => 80, "media:height" => 80, "href" => $contact["photo"]]; - XML::addElement($doc, $author, "link", "", $attributes); + XML::addElement($doc, $author, "link", "", $attributes); - $attributes = [ + $attributes = [ "rel" => "avatar", "type" => "image/jpeg", "media:width" => 80, "media:height" => 80, "href" => $contact["photo"]]; - XML::addElement($doc, $author, "link", "", $attributes); + XML::addElement($doc, $author, "link", "", $attributes); + } return $author; } @@ -906,7 +916,7 @@ class DFRN * @param int $cid Contact ID of the recipient * @param bool $single If set, the entry is created as an XML document with a single "entry" element * - * @return \DOMElement XML entry object + * @return null|\DOMElement XML entry object * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException * @todo Find proper type-hints @@ -916,7 +926,8 @@ class DFRN $mentioned = []; if (!$item['parent']) { - return; + Logger::notice('Item without parent found.', ['type' => $type, 'item' => $item]); + return null; } if ($item['deleted']) { @@ -977,7 +988,7 @@ class DFRN } // Add conversation data. This is used for OStatus - $conversation_href = System::baseUrl()."/display/".$owner["nick"]."/".$item["parent"]; + $conversation_href = System::baseUrl()."/display/".$item["parent-guid"]; $conversation_uri = $conversation_href; if (isset($parent_item)) { @@ -1199,13 +1210,13 @@ class DFRN $ssl_val = intval(Config::get('system', 'ssl_policy')); switch ($ssl_val) { - case SSL_POLICY_FULL: + case BaseURL::SSL_POLICY_FULL: $ssl_policy = 'full'; break; - case SSL_POLICY_SELFSIGN: + case BaseURL::SSL_POLICY_SELFSIGN: $ssl_policy = 'self'; break; - case SSL_POLICY_NONE: + case BaseURL::SSL_POLICY_NONE: default: $ssl_policy = 'none'; break; @@ -1546,7 +1557,7 @@ class DFRN $author["network"] = $contact_old["network"]; } else { if (!$onlyfetch) { - Logger::log("Contact ".$author["link"]." wasn't found for user ".$importer["importer_uid"]." XML: ".$xml, Logger::DEBUG); + Logger::debug("Contact ".$author["link"]." wasn't found for user ".$importer["importer_uid"]." XML: ".$xml); } $author["contact-unknown"] = true; @@ -1596,6 +1607,7 @@ class DFRN if (empty($author['avatar'])) { Logger::log('Empty author: ' . $xml); + $author['avatar'] = ''; } if (DBA::isResult($contact_old) && !$onlyfetch) { @@ -1854,7 +1866,6 @@ class DFRN { Logger::log("Processing mails"); - /// @TODO Rewrite this to one statement $msg = []; $msg["uid"] = $importer["importer_uid"]; $msg["from-name"] = $xpath->query("dfrn:sender/dfrn:name/text()", $mail)->item(0)->nodeValue; @@ -1866,34 +1877,8 @@ class DFRN $msg["created"] = DateTimeFormat::utc($xpath->query("dfrn:sentdate/text()", $mail)->item(0)->nodeValue); $msg["title"] = $xpath->query("dfrn:subject/text()", $mail)->item(0)->nodeValue; $msg["body"] = $xpath->query("dfrn:content/text()", $mail)->item(0)->nodeValue; - $msg["seen"] = 0; - $msg["replied"] = 0; - - DBA::insert('mail', $msg); - - $msg["id"] = DBA::lastInsertId(); - - // send notifications. - /// @TODO Arange this mess - $notif_params = [ - "type" => NOTIFY_MAIL, - "notify_flags" => $importer["notify-flags"], - "language" => $importer["language"], - "to_name" => $importer["username"], - "to_email" => $importer["email"], - "uid" => $importer["importer_uid"], - "item" => $msg, - "parent" => $msg["parent-uri"], - "source_name" => $msg["from-name"], - "source_link" => $importer["url"], - "source_photo" => $importer["thumb"], - "verb" => ACTIVITY_POST, - "otype" => "mail" - ]; - - notification($notif_params); - - Logger::log("Mail is processed, notification was sent."); + + Mail::insert($msg); } /** @@ -2201,14 +2186,13 @@ class DFRN /** * @brief Send a "poke" * - * @param array $item the new item record + * @param array $item The new item record * @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 * @return void * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @todo set proper type-hints (array?) */ - private static function doPoke($item, $importer, $posted_id) + private static function doPoke(array $item, array $importer) { $verb = urldecode(substr($item["verb"], strpos($item["verb"], "#")+1)); if (!$verb) { @@ -2233,8 +2217,6 @@ class DFRN if ($Blink && Strings::compareLink($Blink, System::baseUrl() . "/profile/" . $importer["nickname"])) { $author = DBA::selectFirst('contact', ['name', 'thumb', 'url'], ['id' => $item['author-id']]); - $item['id'] = $posted_id; - $parent = Item::selectFirst(['id'], ['uri' => $item['parent-uri'], 'uid' => $importer["importer_uid"]]); $item["parent"] = $parent['id']; @@ -2248,7 +2230,7 @@ class DFRN "to_email" => $importer["email"], "uid" => $importer["importer_uid"], "item" => $item, - "link" => System::baseUrl()."/display/".urlencode(Item::getGuidById($posted_id)), + "link" => System::baseUrl()."/display/".urlencode($item['guid']), "source_name" => $author["name"], "source_link" => $author["url"], "source_photo" => $author["thumb"], @@ -2513,7 +2495,7 @@ class DFRN $notice_info = $xpath->query("statusnet:notice_info", $entry); if ($notice_info && ($notice_info->length > 0)) { - foreach ($notice_info->item[0]->attributes as $attributes) { + foreach ($notice_info->item(0)->attributes as $attributes) { if ($attributes->name == "source") { $item["app"] = strip_tags($attributes->textContent); } @@ -2588,8 +2570,8 @@ class DFRN $item['conversation-uri'] = XML::getFirstNodeValue($xpath, 'ostatus:conversation/text()', $entry); $conv = $xpath->query('ostatus:conversation', $entry); - if (is_object($conv->item[0])) { - foreach ($conv->item[0]->attributes as $attributes) { + if (is_object($conv->item(0))) { + foreach ($conv->item(0)->attributes as $attributes) { if ($attributes->name == "ref") { $item['conversation-uri'] = $attributes->textContent; } @@ -2603,8 +2585,8 @@ class DFRN $item["parent-uri"] = $item["uri"]; $inreplyto = $xpath->query("thr:in-reply-to", $entry); - if (is_object($inreplyto->item[0])) { - foreach ($inreplyto->item[0]->attributes as $attributes) { + if (is_object($inreplyto->item(0))) { + foreach ($inreplyto->item(0)->attributes as $attributes) { if ($attributes->name == "ref") { $item["parent-uri"] = $attributes->textContent; } @@ -2743,7 +2725,8 @@ class DFRN } if (stristr($item["verb"], ACTIVITY_POKE)) { - self::doPoke($item, $importer, $posted_id); + $item['id'] = $posted_id; + self::doPoke($item, $importer); } } }