View file PF.Base/module/forum/include/component/controller/rss.class.php

File size: 2.67Kb
<?php
/**
 * [PHPFOX_HEADER]
 */

defined('PHPFOX') or exit('NO DICE!');

/**
 * 
 * 
 * @copyright		[PHPFOX_COPYRIGHT]
 * @author  		Raymond Benc
 * @package 		Phpfox_Component
 * @version 		$Id: rss.class.php 3990 2012-03-09 15:28:08Z Raymond_Benc $
 */
class Forum_Component_Controller_Rss extends Phpfox_Component
{
	/**
	 * Controller
	 */
	public function process()
	{
		if ($this->request()->getInt('forum'))
		{
			if (!Phpfox::getParam('forum.rss_feed_on_each_forum'))
			{
				return Phpfox_Error::set(_p('rss_feeds_are_disabled_for_threads'));
			}		
			
			if (!Forum_Service_Forum::instance()->hasAccess($this->request()->getInt('forum'), 'can_view_forum'))
			{
				return Phpfox_Error::set(_p('rss_feeds_are_disabled_for_threads'));
			}
			
			$aRss = Forum_Service_Forum::instance()->getForRss($this->request()->getInt('forum'));
		}
		elseif ($this->request()->getInt('thread'))
		{
			if (!Phpfox::getParam('forum.enable_rss_on_threads'))
			{
				return Phpfox_Error::set(_p('rss_feeds_are_disabled_for_threads'));
			}		
			
			if (!Forum_Service_Forum::instance()->hasAccess($this->request()->getInt('thread'), 'can_view_thread_content'))
			{
				return Phpfox_Error::set(_p('rss_feeds_are_disabled_for_threads'));
			}			
			
			$aRss = Forum_Service_Post_Post::instance()->getForRss($this->request()->getInt('thread'));
			
			if (isset($aRss['items']) && is_array($aRss['items']) && count($aRss['items']))	
			{
				if (!Forum_Service_Forum::instance()->hasAccess($aRss['items'][0]['forum_id'], 'can_view_forum'))
				{
					return Phpfox_Error::set(_p('rss_feeds_are_disabled_for_threads'));
				}
			}
		}
		elseif ($this->request()->getInt('pages'))
		{
			if (!Phpfox::getParam('forum.rss_feed_on_each_forum'))
			{
				return Phpfox_Error::set(_p('rss_feeds_are_disabled_for_threads'));
			}		
			
			$aGroup = Pages_Service_Pages::instance()->getPage($this->request()->getInt('pages'));
			
			if (!isset($aGroup['page_id']))
			{
				return Phpfox_Error::set(_p('not_a_valid_group'));
			}

			$aItems = Forum_Service_Thread_Thread::instance()->getForRss(Phpfox::getParam('rss.total_rss_display'), null, $aGroup['page_id']);
			
			$aRss = array(
				'href' => '',
				'title' => _p('latest_threads_in_group_forum') . ': ' . $aGroup['title'],
				'description' => _p('latest_threads_on') . ': ' . $aGroup['title'],
				'items' => $aItems
			);	
		}
		
		isset($aRss) && Rss_Service_Rss::instance()->output($aRss);
        return null;
	}
	
	/**
	 * Garbage collector. Is executed after this class has completed
	 * its job and the template has also been displayed.
	 */
	public function clean()
	{
		(($sPlugin = Phpfox_Plugin::get('forum.component_controller_rss_clean')) ? eval($sPlugin) : false);
	}
}