From 32206cd6817095f92f2e64ce1efc2d7060789e84 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 5 Apr 2015 20:50:15 +0200 Subject: [PATCH] Diaspora uses this to fetch single public items. --- mod/p.php | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 mod/p.php diff --git a/mod/p.php b/mod/p.php new file mode 100644 index 000000000..6bae99256 --- /dev/null +++ b/mod/p.php @@ -0,0 +1,75 @@ +argc != 2) { + header($_SERVER["SERVER_PROTOCOL"].' 510 '.t('Not Extended')); + killme(); + } + + $guid = $a->argv[1]; + + if (strtolower(substr($guid, -4)) != ".xml") { + header($_SERVER["SERVER_PROTOCOL"].' 404 '.t('Not Found')); + killme(); + } + + $guid = strtolower(substr($guid, 0, -4)); + + $item = q("SELECT `body`, `guid`, `contact-id`, `private`, `created`, `app` FROM `item` WHERE `uid` = 0 AND `guid` = '%s' AND `network` IN ('%s', '%s') LIMIT 1", + dbesc($guid), NETWORK_DFRN, NETWORK_DIASPORA); + if (!$item) { + header($_SERVER["SERVER_PROTOCOL"].' 404 '.t('Not Found')); + killme(); + } + + $post = array(); + + $reshared = diaspora_is_reshare($item[0]["body"]); + + if ($reshared) { + $nodename = "reshare"; + $post["root_diaspora_id"] = $reshared["root_handle"]; + $post["root_guid"] = $reshared["root_guid"]; + $post["guid"] = $item[0]["guid"]; + $post["diaspora_handle"] = diaspora_handle_from_contact($item[0]["contact-id"]); + $post["public"] = (!$item[0]["private"] ? 'true':'false'); + $post["created_at"] = datetime_convert('UTC','UTC',$item[0]["created"]); + } else { + $nodename = "status_message"; + $post["raw_message"] = str_replace("&", "&", bb2diaspora($item[0]["body"])); + $post["guid"] = $item[0]["guid"]; + $post["diaspora_handle"] = diaspora_handle_from_contact($item[0]["contact-id"]); + $post["public"] = (!$item[0]["private"] ? 'true':'false'); + $post["created_at"] = datetime_convert('UTC','UTC',$item[0]["created"]); + $post["provider_display_name"] = $item[0]["app"]; + } + + $dom = new DOMDocument("1.0"); + $root = $dom->createElement("XML"); + $dom->appendChild($root); + $postelement = $dom->createElement("post"); + $root->appendChild($postelement); + $statuselement = $dom->createElement($nodename); + $postelement->appendChild($statuselement); + + foreach($post AS $index => $value) { + $postnode = $dom->createElement($index, $value); + $statuselement->appendChild($postnode); + } + + header("Content-Type: application/xml; charset=utf-8"); + $xml = $dom->saveXML(); + + // Diaspora doesn't send the XML header, so we remove them as well. + // So we avoid possible compatibility problems. + if (substr($xml, 0, 21) == '') + $xml = trim(substr($xml, 21)); + + echo $xml; + + killme(); +}