Actions

Source Code of This Project

/apps/frontend/modules/news/actions/actions.class.php

<?php
/*
 * This file is part of the pwp package.
 * (c) 2009-2010 Victor Rad' <victor.v.rad[at]gmail.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
*/

/**
 * List of news
 *
 * @package    pwp
 * @subpackage news
 * @author     Victor Rad'
 */
class newsActions extends sfActions
{
    /**
     * Forming of friendly URL from the POST query of news filtration
     */
    public function preExecute()
    {
        // prepare data
        $request = sfContext::getInstance()->getRequest();
        $this->form = new NewsForm();

        // forming friendly URL from filter query and redirect
        if ($request->hasParameter($this->form->getName())) {
            $this->form->bind($request->getParameter($this->form->getName()));
            if($this->form->isValid()){
                $this->redirect('@news_index_filter?'.http_build_query($this->form->getValues()));
            }
        }
    }

    /**
     * List of news
     *
     * @param sfWebRequest $request
     */
    public function executeIndex(sfWebRequest $request)
    {
        // prepare query
        $newsBuilder = DFactory::get('News')->getBuilder()
                ->reorganize($request) // order
                ->joinProvides();

        // form validation filter
        if ($request->hasParameter('news_providers') or $request->hasParameter('date_range')) {
            $this->form = new NewsForm();
            $this->form->bind(array(
                'news_providers' =>  $request->getParameter('news_providers'),
                'date_range' =>  $request->getParameter('date_range')
            ));
            if($this->form->isValid()) {
                // filter news
                $newsBuilder->filter->providers($request)
                            ->filter->dateRange($request);
            }
        }

        // pager
        $this->pager = new sfDoctrinePager('News', sfConfig::get('app_news_per_page'));
        $this->pager->setQuery($newsBuilder->getQuery());
        $this->pager->setPage($request->getParameter('page', 1));
        $this->pager->init();

        // get news
        $this->newsList = $newsBuilder->getQuery()->execute();
    }

    /**
     * First column on page
     */
    public function postExecute()
    {
        $this->getResponse()->setSlot('colOne', $this->getPartial('colOne'));
    }

}