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

class PHPView implements iView
{
    
    protected $path      = '';
    protected $variables = array();
    protected $extension = '.phtml';
    protected $template  = '';
    
    public function __construct($config)
    {
        if (!isset($config['path'])) {
            throw new Exception('Configuration must have a "host".');
        }
        $this->setPath($config['path']);
    }
    
    public function getPath()
    {
        return $this->path;
    }
    
    public function setPath($path)
    {
        $this->path = $path;
    }
    
    /**
     * @param ViewAction $object
     */
    public function assignObject($object)
    {
        foreach (get_object_vars($object) as $name => $value) {
            $this->assign($name, $value);
        }
    }
    
    public function assign($name, $value = null)
    {
        $this->variables[$name] = $value;
    }
    
    public function fetch($template)
    {
        $this->template = $this->getTemplatePath($template);
        unset($template);
        extract($this->variables);
        ob_start();
        if (!is_readable($this->template)) {
            ob_clean();
            throw new Exception('Template "' . $this->template .'" not found.');
        }
        include($this->template);
        return ob_get_clean();
    }
    
    public function escape($var)
    {
        return htmlentities($var, ENT_QUOTES, 'UTF-8');
    }
    
    protected function getTemplatePath($template)
    {
        return $this->path . $template . $this->extension;
    }
}