<?php
/**
 * Základní třída pro formuláře
 *
 * @package    MyWebBlog
 * @author     Marian Böhmer
 */
class MyWeb_Form extends Zend_Form
{
    /**
     * Dekorátory pro formuláře
     * 
     * @var array
     */
    public $formDecorators = array(
        'FormElements',
        array('HtmlTag', array('tag' => 'div', 'class' => 'myform')),
        'Form',
    );

    /**
     * Dekorátory pro formulářové prvky
     * 
     * @var array
     */
    public $elementDecorators = array(
        'ViewHelper',
        'Errors',
        array(array('data' => 'HtmlTag'), array('tag' => 'div', 'class' => 'element')),
        array('Label', array('class' => 'left')),
        array(array('row' => 'HtmlTag'), array('tag' => 'div', 'class' => 'row')),
    );

    /**
     * Dekorátory pro tlačítka ve formulářích
     * 
     * @var array
     */
    public $buttonDecorators = array(
        'ViewHelper',
        array(array('data' => 'HtmlTag'), array('tag' => 'div', 'class' => 'element')),
        array(array('row' => 'HtmlTag'), array('tag' => 'div')),
    );
    
    /**
     * Dekorátory pro skryté formulářové prvky
     * 
     * @var array
     */
    public $hiddenDecorators = array(
        'ViewHelper',
    );
    
    /**
     * Model Objekt
     * @var MyWeb_Model_Abstract
     */
    protected $_model = null;
    
    /**
     * Konstruktor
     *
     * Nastaví instanci modelu
     * 
     * @param mixed $options 
     * @return void
     */
    public function __construct($options = null)
    {
        // otestuje předaný objekt
        if (is_subclass_of($options, 'MyWeb_Model_Abstract')) {
            $this->setModel($options);
        }
        
        // zavolá konstruktor z rodičovské třídy
        parent::__construct($options);
        
        // přidá adresář pro vlastní validátory
        $this->addElementPrefixPath(
            'MyWeb_Validate', 
            'MyWeb/Validate', 
            'validate'
        );
    }

    /**
     * Nastaví model
     *
     * @param MyWeb_Model_Abstract $model
     */
    public function setModel(MyWeb_Model_Abstract $model)
    {
        //nastaví model
        $this->_model = $model;
    }
    
    /**
     * Vrátí model
     *
     * @return MyWeb_Model_Abstract
     */
    public function getModel()
    {
        //vrátí model
        return $this->_model;
    }
    
    /**
     * Nastaví předvolené dekorátory
     *
     * @return void
     */
    public function loadDefaultDecorators()
    {
        if ($this->loadDefaultDecoratorsIsDisabled()) {
            return;
        }

        $decorators = $this->getDecorators();
        if (empty($decorators)) {
            $this->addDecorators($this->formDecorators);
        }
    }
    
	/**
     * funkce prevede pole ziskane selektem do tvaru
     * $pole[$id]=hodnota
     * takoveto pole j\obsahuje vstupni hodnoty pro prvek option
     * 
     * @param array $data
     */
    public function createDataOption($data,$nameColumnKey,$nameColumnValue,$search = FALSE){
    	//'nameState_name'
    	//'id_state'
    	$id=null;
        $value=null;
    	if ($search){
        	$data_option['none']=NULL;
        }
        foreach ($data as $key1 => $value1){
        	foreach ($value1 as $key2 => $value2){
        		if (0 === strcmp($key2,$nameColumnKey)){
        			$id = $value2;
        			//echo $value2;
        		}
        		if (0 === strcmp($key2,$nameColumnValue)){
        			$value = $value2;
        			//echo $value2;
        		}
        	}
        	$data_option[$id]=$value;
        }
        return $data_option;
    }
    
    
    
    /**
     * funkce ze vstupni promnene $url separuje cestu do index.php a 
     * k nemu doda cestu $controller/$action/$params
     * 
     * @param string $url
     * @param string $controller
     * @param string $action
     * @param array $params
     */
	public function createPath($url, $controller, $action, $params)
	{
        $pathString = "";
        $pathParamsRedirectString = "";
        $indexphp ='index.php';
        try {
        	if (strpos($url, $indexphp)){
        		$path = explode($indexphp, $url);
        		//z path[1] extrahovat parametry a pouzit je k presmerovani
        		if (substr_count($path[1],'/') > 1){
        			$pathParams = explode('/', $path[1]);
        			
        			//echo "<p>ggg".$pathParams[0]."</p>";
        			//echo "<p>ggg".$pathParams[1]."</p>";
        			//echo "<p>ggg".$pathParams[2]."</p>";
        			//echo "<p>ggg".$pathParams[3]."</p>";
        			//echo "<p>ggg".$pathParams[4]."</p>";
        			
        			unset($pathParams[0]);//odstrani prvni prvek protoze je prazdny
        			reset($pathParams);
        			
        			$keys[0] = 'pcontroller';
        			$keys[1] = 'paction';
        			
        			$index = 0;
        			foreach ($pathParams as $value){
        				$pathParamsRedirectString .= '/'.$keys[$index].'/'.$value;
        				$index++;
        				if ($index == 2){
        					break;
        				}
        					
        			}
        			//echo "<p>bbbb".$pathString."</p>";
        		}
        		
        		if (!is_null($params)){
        			if (is_array($params)){
        				foreach ($params as $key => $value){
        					$pathString .= '/'.$key.'/'.$value;
        				}
        			}else {
        				throw new Exception("params neni pole");
        			}
        		}
        	}else {
        		throw new Exception("url neobsahuje index.php");
        	}
        }catch (Exception $e){
        	echo "Error: ".$e->getMessage();
        }
        //echo "<p>kkkk".$pathParamsRedirectString."</p>";
        //echo "<p>kkkk".$path[0].$indexphp."/".$controller."/".$action.$pathParamsRedirectString.$pathString."</p>";
        return $path[0].$indexphp."/".$controller."/".$action.$pathParamsRedirectString.$pathString;
	}
}
