* License: 3-clause BSD license */ use Friendica\DI; use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Network\HTTPException; use Friendica\Database\DBA; use Friendica\Core\Renderer; function opmlexport_install() { Hook::register("addon_settings", __FILE__, "opmlexport_addon_settings"); Hook::register("addon_settings_post", __FILE__, "opmlexport_addon_settings_post"); Logger::log("installed opmlexport Addon"); } function opmlexport(App $a) { $stmt = DBA::p("SELECT * FROM `contact` WHERE `uid` = ? AND `self` = 0 AND NOT `deleted` AND NOT `archive` AND NOT `blocked` AND NOT `pending` AND network = ? ORDER BY `name` ASC", [local_user(), "feed"] ); $xml = new \DOMDocument( "1.0", "utf-8" ); $opml = $xml->createElement("opml"); $head = $xml->createElement("head"); $body = $xml->createElement("body"); $outline = $xml->createElement("outline"); $outline->setAttribute("title", $a->user['username'] . "'s RSS/Atom contacts"); $outline->setAttribute("text", $a->user['username'] . "'s RSS/Atom contacts"); while ($c = DBA::fetch($stmt)) { $entry = $xml->createElement("outline"); $entry->setAttribute("title", $c["name"]); $entry->setAttribute("text", $c["name"]); $entry->setAttribute("xmlUrl", $c["url"]); // $entry->setAttribute("htmlUrl", $c[""]); $outline->appendChild($entry); } DBA::close($stmt); $body->appendChild($outline); $opml->appendChild($head); $opml->appendChild($body); $xml->appendChild($opml); header("Content-Type: text/x-opml"); header("Content-Disposition: attachment; filename=feeds.opml"); $xml->formatOutput = true; echo $xml->saveXML(); die(); } function opmlexport_addon_settings(App $a, &$s) { if (!local_user()) { return; } $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/opmlexport/'); $s .= Renderer::replaceMacros($t, [ '$title' => DI::l10n()->t('OPML Export'), '$submit' => DI::l10n()->t('Export RSS/Atom contacts'), ]); } function opmlexport_addon_settings_post(App $a, &$b) { if (!local_user() || empty($_POST['opmlexport-submit'])) { return; } opmlexport($a); }