<?php
/**
 * @copyright NetMonsters <team@netmonsters.ru>
 * @link http://netmonsters.ru
 * @package Majestic
 * @subpackage app
 * @since 2010-02-25
 * @version SVN: $Id$
 * @filesource $URL$
 */

abstract class Action
{
    
    protected $template;
    
    /**
     * @var PHPView
     */
    protected $view;
    
    public function __construct()
    {
        $this->view = FrontController::getInstance()->getView();
        $this->extractParams();
        $this->execute();
    }
    
    protected function extractParams()
    {
        foreach (Env::getParam() as $name => $value) {
            if (is_string($name)) {
                $this->$name = $value;
            }
        }
    }
    
    abstract protected function execute();
    
    /**
     * Redirect
     * 
     * @param mixed $url
     */
    protected function redirect($url = null)
    {
        header('Location: ' . (($url) ? $url : Env::getRequestUri()));
        exit();
    }
    
    protected function getTemplate()
    {
        $class = get_class($this);
        $template = ($this->template) ? $this->template : substr($class, 0, -6/*strlen('Action')*/);
        $dir = array_slice(explode('/', Load::getFilePath($class)), -2, 1);
        return '/actions/' . array_pop($dir) . '/' . $template;
    }
    
    public function fetch()
    {
        $this->view->assignObject($this);
        return $this->view->fetch($this->getTemplate());
    }
}