<?php

Goweb::loadClass('Goweb_Form');

/**
 * Goweb Sitemanager 5 Framework
 * @version    5.0.0
 * @category   Backoffice
 * @package    Cms
 * @subpackage Form
 * @author     I&D <dev@goweb.pt>, Pedro Pinto <ppinto@goweb.pt>
 * @copyright  2009 (c) Goweb (http://www.goweb.pt)
*/
class Form_PaginaSistema extends Goweb_Form {
    
    /**
     * Objecto Goweb_Db_Model
     *
     * @var Goweb_Db_Model
    */
    protected $_model;
    
    /**
     * Atribui um valor a propriedade $_model
     *
     * @param Goweb_Db_Model
    */
    public function setModel(Goweb_Db_Model $model) {
        $this->_model = $model;
    }
    
    /**
     * Metodo obrigatorio as classes herdeiras do Goweb_Form
    */
    public function setup() {
        // titulo
        $this->titulo = $this->Text();
        $this->titulo->size = '30';
        $this->titulo->maxlength = $this->_model->getColParam('titulo', 'maxlength');
        $this->titulo->label = $this->_model->getColParam('titulo', 'label');        
        $this->titulo->error_class = 'error';
        $this->titulo->focus_class = 'focus';
        $this->titulo->help = $this->_model->getColParam('titulo', 'help');
        $this->titulo->validators->Required(translateAdmin('O campo <b>{{campo}}</b> &eacute; de preenchimento obrigat&oacute;rio.', $this->titulo->label));
        
        // redireccionar
        $this->redireccionar = $this->Text();
        $this->redireccionar->size = '30';
        $this->redireccionar->maxlength = $this->_model->getColParam('redireccionar', 'maxlength');
        $this->redireccionar->label = $this->_model->getColParam('redireccionar', 'label');
        $this->redireccionar->error_class = 'error';
        $this->redireccionar->focus_class = 'focus';
        $this->redireccionar->help = $this->_model->getColParam('redireccionar', 'help');
        
        // canal
        $this->canal = $this->Select();
        $this->canal->options = $this->_getChannelViews();
        $this->canal->label = $this->_model->getColParam('canal', 'label');
        $this->canal->error_class = 'error';
        $this->canal->focus_class = 'focus';
        $this->canal->help = $this->_model->getColParam('canal', 'help');
        
        // texto
        $this->texto = $this->Rte();
        $this->texto->theme = $this->_model->getColParam('texto', 'theme');
        $this->texto->css = $this->_model->getColParam('texto', 'css');
        $this->texto->width = '100%';
        $this->texto->height = '500px';
        $this->texto->help = $this->_model->getColParam('texto', 'help');
        
        // submit
        $this->submit = $this->Submit();
        $this->submit->value = translateAdmin('Gravar');
        $this->submit->class = 'form_submit';
        $this->submit_and_new = $this->Submit();
        $this->submit_and_new->value = translateAdmin('Gravar e adicionar novo');
        $this->submit_and_new->class = 'form_submit_and_new';
        $this->submit_and_continue = $this->Submit();
        $this->submit_and_continue->value = translateAdmin('Gravar e continuar a editar');
        $this->submit_and_continue->class = 'form_submit_and_continue';
    }
    
    /**
     * Metodo auxiliar que retorna o canal da view
     *
     * @return string
    */
    protected function _getChannelViews() {
        $channels = array();
        if (is_dir(VIEWS_PATH)) {            
            if ($handle = opendir(VIEWS_PATH)) {
                while (($file = readdir($handle)) !== false) {
                    if (is_file(VIEWS_PATH . DIRECTORY_SEPARATOR . $file)) {
                        $channels[$file] = $this->_formatViewName($file);
                    }
                }
                closedir($handle);
            }
        }
        return $channels;
    }

    /**
     * Metodo auxiliar para formatacao do nome da view
     *
     * @param string
     *
     * @return string
    */
    protected function _formatViewName($unformatted) {
        $unformatted = substr($unformatted, 0, strlen($unformatted) - 4);
        $unformatted = str_replace(array('-', '_', '.'), ' ', strtolower($unformatted));
        $unformatted = preg_replace('[^a-z0-9 ]', '', $unformatted);
        return ucwords($unformatted);
    }
}