* * 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 ); } } }