]> git.mxchange.org Git - friendica-addons.git/commitdiff
OPML Export
authorfabrixxm <fabrix.xm@gmail.com>
Tue, 27 Apr 2021 07:54:42 +0000 (09:54 +0200)
committerfabrixxm <fabrix.xm@gmail.com>
Tue, 27 Apr 2021 07:54:42 +0000 (09:54 +0200)
Export user's active RSS/Atom contacts as OPML.

opmlexport/README.md [new file with mode: 0644]
opmlexport/opmlexport.php [new file with mode: 0644]
opmlexport/templates/settings.tpl [new file with mode: 0644]

diff --git a/opmlexport/README.md b/opmlexport/README.md
new file mode 100644 (file)
index 0000000..6d944de
--- /dev/null
@@ -0,0 +1,5 @@
+# OPML Export
+
+Export user's active RSS/Atom contacts as OPML.
+
+Launch from `Settings` -> `Addons` -> `OPML Export`
\ No newline at end of file
diff --git a/opmlexport/opmlexport.php b/opmlexport/opmlexport.php
new file mode 100644 (file)
index 0000000..0c53fec
--- /dev/null
@@ -0,0 +1,89 @@
+<?php
+/**
+ * Name: OPML Export
+ * Description: Export user's RSS/Atom contacts as OPML
+ * Version: 1.0
+ * Author: Fabio Comuni <https://social.gl-como.it/profile/fabrixxm>
+ * 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);
+}
+
+
diff --git a/opmlexport/templates/settings.tpl b/opmlexport/templates/settings.tpl
new file mode 100644 (file)
index 0000000..9f26c51
--- /dev/null
@@ -0,0 +1,12 @@
+<span id="settings_opmlexport_inflated" class="settings-block fakelink" style="display: block;" onclick="openClose('settings_opmlexport_expanded'); openClose('settings_opmlexport_inflated');">
+       <h3>{{$title}}</h3>
+</span>
+<div id="settings_opmlexport_expanded" class="settings-block" style="display: none;">
+       <span class="fakelink" onclick="openClose('settings_opmlexport_expanded'); openClose('settings_opmlexport_inflated');">
+               <h3>{{$title}}</h3>
+       </span>
+
+       <div class="settings-submit-wrapper" >
+               <input type="submit" id="opmlexport-submit" name="opmlexport-submit" class="settings-submit" value="{{$submit}}" />
+       </div>
+</div>