| 
							- <?php
 - 
 - namespace dokuwiki\Feed;
 - 
 - use dokuwiki\Extension\Event;
 - 
 - /**
 -  * Hold the options for feed generation
 -  */
 - class FeedCreatorOptions
 - {
 -     /** @var array[] supported feed types */
 -     protected $types = [
 -         'rss' => [
 -             'name' => 'RSS0.91',
 -             'mime' => 'text/xml; charset=utf-8',
 -         ],
 -         'rss1' => [
 -             'name' => 'RSS1.0',
 -             'mime' => 'text/xml; charset=utf-8',
 -         ],
 -         'rss2' => [
 -             'name' => 'RSS2.0',
 -             'mime' => 'text/xml; charset=utf-8',
 -         ],
 -         'atom' => [
 -             'name' => 'ATOM0.3',
 -             'mime' => 'application/xml; charset=utf-8',
 -         ],
 -         'atom1' => [
 -             'name' => 'ATOM1.0',
 -             'mime' => 'application/atom+xml; charset=utf-8',
 -         ],
 -     ];
 - 
 -     /** @var array[] the set options */
 -     public $options = [
 -         'type' => 'rss',
 -         'feed_mode' => 'recent',
 -         'link_to' => 'page',
 -         'item_content' => 'diff',
 -         'namespace' => '',
 -         'items' => 15,
 -         'show_minor' => false,
 -         'show_deleted' => false,
 -         'show_summary' => false,
 -         'only_new' => false,
 -         'sort' => 'natural',
 -         'search_query' => '',
 -         'content_type' => 'pages',
 -         'guardmail' => 'none',
 -         'title' => '',
 -     ];
 - 
 -     /**
 -      * Initialize the options from the request, falling back to config defaults
 -      *
 -      * @triggers FEED_OPTS_POSTPROCESS
 -      * @param array $options additional options to set (for testing)
 -      */
 -     public function __construct($options = [])
 -     {
 -         global $conf;
 -         global $INPUT;
 - 
 -         $this->options['type'] = $INPUT->valid(
 -             'type',
 -             array_keys($this->types),
 -             $conf['rss_type']
 -         );
 -         // we only support 'list', 'search', 'recent' but accept anything so plugins can take over
 -         $this->options['feed_mode'] = $INPUT->str('mode', 'recent');
 -         $this->options['link_to'] = $INPUT->valid(
 -             'linkto',
 -             ['diff', 'page', 'rev', 'current'],
 -             $conf['rss_linkto']
 -         );
 -         $this->options['item_content'] = $INPUT->valid(
 -             'content',
 -             ['abstract', 'diff', 'htmldiff', 'html'],
 -             $conf['rss_content']
 -         );
 -         $this->options['namespace'] = $INPUT->filter('cleanID')->str('ns');
 -         $this->options['items'] = max(0, $INPUT->int('num', $conf['recent']));
 -         $this->options['show_minor'] = $INPUT->bool('minor');
 -         $this->options['show_deleted'] = $conf['rss_show_deleted'];
 -         $this->options['show_summary'] = $conf['rss_show_summary'];
 -         $this->options['only_new'] = $INPUT->bool('onlynewpages');
 -         $this->options['sort'] = $INPUT->valid(
 -             'sort',
 -             ['natural', 'date'],
 -             'natural'
 -         );
 -         $this->options['search_query'] = $INPUT->str('q');
 -         $this->options['content_type'] = $INPUT->valid(
 -             'view',
 -             ['pages', 'media', 'both'],
 -             $conf['rss_media']
 -         );
 -         $this->options['guardmail'] = $conf['mailguard'];
 -         $this->options['title'] = $conf['title'];
 -         if ($this->options['namespace']) {
 -             $this->options['title'] .= ' - ' . $this->options['namespace'];
 -         }
 -         $this->options['subtitle'] = $conf['tagline'];
 - 
 -         $this->options = array_merge($this->options, $options);
 - 
 -         // initialization finished, let plugins know
 -         $eventData = [
 -             'opt' => &$this->options,
 -         ];
 -         Event::createAndTrigger('FEED_OPTS_POSTPROCESS', $eventData);
 -     }
 - 
 -     /**
 -      * The cache key to use for a feed with these options
 -      *
 -      * Does not contain user or host specific information yet
 -      *
 -      * @return string
 -      */
 -     public function getCacheKey()
 -     {
 -         return implode('', array_values($this->options));
 -     }
 - 
 -     /**
 -      * Return a feed option by name
 -      *
 -      * @param string $option The name of the option
 -      * @param mixed $default default value if option is not set (should usually not happen)
 -      * @return mixed
 -      */
 -     public function get($option, $default = null)
 -     {
 -         return $this->options[$option] ?? $default;
 -     }
 - 
 -     /**
 -      * Return the feed type for UniversalFeedCreator
 -      *
 -      * This returns the apropriate type for UniversalFeedCreator
 -      *
 -      * @return string
 -      */
 -     public function getType()
 -     {
 -         return $this->types[$this->options['type']]['name'];
 -     }
 - 
 -     /**
 -      * Return the feed mime type
 -      *
 -      * @return string
 -      */
 -     public function getMimeType()
 -     {
 -         return $this->types[$this->options['type']]['mime'];
 -     }
 - }
 
 
  |