diff options
Diffstat (limited to 'utility/opmlexporter.php')
-rw-r--r-- | utility/opmlexporter.php | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/utility/opmlexporter.php b/utility/opmlexporter.php new file mode 100644 index 000000000..d9d404ff1 --- /dev/null +++ b/utility/opmlexporter.php @@ -0,0 +1,84 @@ +<?php + +/** +* ownCloud - News app +* +* @author Alessandro Cosentino +* Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com> +* +* This file is licensed under the Affero General Public License version 3 or later. +* See the COPYING-README file +* +*/ + +namespace OCA\News; + +/** +* Exports the OPML +*/ +class OPMLExporter { + + private $api; + private $trans; + + public function __construct($api){ + $this->api = $api; + $this->trans = $api->getTrans(); + } + + + /** + * Generates the OPML for the active user + * @return the OPML as string + */ + public function buildOPML($feeds){ + $dom = new \DomDocument('1.0', 'UTF-8'); + $dom->formatOutput = true; + + $opml_el = $dom->createElement('opml'); + $opml_el->setAttribute('version', '2.0'); + + $head_el = $dom->createElement('head'); + + $title = $this->api->getUserId() . ' ' . + $this->trans->t('subscriptions in ownCloud - News'); + $title_el = $dom->createElement('title', $title); + + $head_el->appendChild( $title_el ); + $opml_el->appendChild( $head_el ); + $body_el = $dom->createElement('body'); + + $this->feedsToXML($feeds, $body_el, $dom); + + $opml_el->appendChild( $body_el ); + $dom->appendChild( $opml_el ); + + return $dom->saveXML(); + } + + + /** + * Creates the OPML content recursively + */ + protected function feedsToXML($data, $xml_el, $dom) { + + foreach($data as $collection) { + $outline_el = $dom->createElement('outline'); + if ($collection instanceOf Folder) { + $outline_el->setAttribute('title', $collection->getName()); + $outline_el->setAttribute('text', $collection->getName()); + $this->feedsToXML($collection->getChildren(), $outline_el, $dom); + } + elseif ($collection instanceOf Feed) { + $outline_el->setAttribute('title', $collection->getTitle()); + $outline_el->setAttribute('text', $collection->getTitle()); + $outline_el->setAttribute('type', 'rss'); + $outline_el->setAttribute('xmlUrl', $collection->getUrl()); + } + $xml_el->appendChild( $outline_el ); + } + } + + +} + |