opml.phtml 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. /** @var FreshRSS_View $this */
  3. $opml_array = array(
  4. 'head' => array(
  5. 'title' => FreshRSS_Context::$system_conf->title,
  6. 'dateCreated' => date('D, d M Y H:i:s')
  7. ),
  8. 'body' => array()
  9. );
  10. foreach ($this->categories as $key => $cat) {
  11. $opml_array['body'][$key] = array(
  12. 'text' => $cat->name(),
  13. '@outlines' => array()
  14. );
  15. foreach ($cat->feeds() as $feed) {
  16. $outline = [
  17. 'text' => htmlspecialchars_decode($feed->name(), ENT_QUOTES),
  18. 'type' => FreshRSS_Export_Service::TYPE_RSS_ATOM,
  19. 'xmlUrl' => htmlspecialchars_decode($feed->url(), ENT_QUOTES),
  20. 'htmlUrl' => htmlspecialchars_decode($feed->website(), ENT_QUOTES),
  21. 'description' => htmlspecialchars_decode($feed->description(), ENT_QUOTES),
  22. ];
  23. if ($feed->kind() === FreshRSS_Feed::KIND_HTML_XPATH) {
  24. $outline['type'] = FreshRSS_Export_Service::TYPE_HTML_XPATH;
  25. /** @var array<string,string> */
  26. $xPathSettings = $feed->attributes('xpath');
  27. $outline['frss:xPathItem'] = ['namespace' => FreshRSS_Export_Service::FRSS_NAMESPACE, 'value' => $xPathSettings['item'] ?? null];
  28. $outline['frss:xPathItemTitle'] = ['namespace' => FreshRSS_Export_Service::FRSS_NAMESPACE, 'value' => $xPathSettings['itemTitle'] ?? null];
  29. $outline['frss:xPathItemContent'] = ['namespace' => FreshRSS_Export_Service::FRSS_NAMESPACE, 'value' => $xPathSettings['itemContent'] ?? null];
  30. $outline['frss:xPathItemUri'] = ['namespace' => FreshRSS_Export_Service::FRSS_NAMESPACE, 'value' => $xPathSettings['itemUri'] ?? null];
  31. $outline['frss:xPathItemAuthor'] = ['namespace' => FreshRSS_Export_Service::FRSS_NAMESPACE, 'value' => $xPathSettings['itemAuthor'] ?? null];
  32. $outline['frss:xPathItemTimestamp'] = ['namespace' => FreshRSS_Export_Service::FRSS_NAMESPACE, 'value' => $xPathSettings['itemTimestamp'] ?? null];
  33. $outline['frss:xPathItemThumbnail'] = ['namespace' => FreshRSS_Export_Service::FRSS_NAMESPACE, 'value' => $xPathSettings['itemThumbnail'] ?? null];
  34. $outline['frss:xPathItemCategories'] = ['namespace' => FreshRSS_Export_Service::FRSS_NAMESPACE, 'value' => $xPathSettings['itemCategories'] ?? null];
  35. }
  36. if (!empty($feed->filtersAction('read'))) {
  37. $filters = '';
  38. foreach ($feed->filtersAction('read') as $filterRead) {
  39. $filters .= $filterRead->getRawInput() . "\n";
  40. }
  41. $filters = trim($filters);
  42. $outline['frss:filtersActionRead'] = ['namespace' => FreshRSS_Export_Service::FRSS_NAMESPACE, 'value' => $filters];
  43. }
  44. if ($feed->pathEntries() != '') {
  45. $outline['frss:cssFullContent'] = ['namespace' => FreshRSS_Export_Service::FRSS_NAMESPACE, 'value' => $feed->pathEntries()];
  46. }
  47. $opml_array['body'][$key]['@outlines'][] = $outline;
  48. }
  49. }
  50. echo libopml_render($opml_array);