<?php

Goweb::loadClass('Goweb_Db_Model');

/**
 * Goweb Sitemanager 5 Framework
 * @version    5.1.1
 * @category   Frontoffice
 * @package    Catalogo
 * @subpackage Model
 * @author     I&D <dev@goweb.pt>, Pedro Pinto <ppinto@goweb.pt>
 * @copyright  2010 (c) Goweb (http://www.goweb.pt)
 */
class Goweb_Db_Model_Element extends Goweb_Db_Model {

    /**
     * Model da ficha
     *
     * @var string
     */
    protected $_modelFicha = '';

    /**
     * Nome da Tabela
     *
     * @var string
     */
    protected $_table = '';

    /**
     * Chave Primaria
     *
     * @var string
     */
    protected $_primary = '';

    /**
     * Campo que sera retornado se um
     * echo do objecto for chamado
     *
     * @var string
     */
    protected $_toString = '';

    /**
     * Elementos a serem usados no elemento
     *
     * @var array
     */
    protected $_elements = array('text'      => 'Texto',
                                 'textarea'  => '&Aacute;rea de texto',
                                 'radio'     => 'Radio',                                 
                                 'checkbox'  => 'Checkbox',
                                 'select'    => 'Select',
                                 'file'      => 'File',
                                 'image'     => 'Imagem',
                                 'separator' => 'Separador');

    /**
     * Validadores a serem usados no elemento
     *
     * @var array
     */
    protected $_validators = array('Email'   => 'Email',
                                   'Integer' => 'N&uacute;mero inteiro',
                                   'Date'    => 'Data');

    /**
     * Metodo obrigatorio. Informa a definicao da tabela
     * referente ao Model em questao.
     */
    protected function _setup() {
        $this->initLang();
        $this->setSyncCols(array('ficha_id', 'element', 'size', 'rows', 'cols', 'options', 'multiple', 'ordem', 'validators', 'required'));
        $this->ficha_id = $this->ForeignKey(array('model' => $this->_modelFicha, 'alias' => 'ficha', 'label' => translate('Ficha'), 'show' => false));
        $this->label = $this->Char(array('size' => '20', 'maxlength' => '200', 'notnull' => true, 'label' => translate('T&iacute;tulo')));
        $this->element = $this->Char(array('maxlength' => 20, 'notnull' => true, 'label' => translate('Tipo de Campo'), 'options' => $this->_elements));
        $this->size = $this->Char(array('size' => '3', 'maxlength' => '3', 'label' => translate('Tamanho em caractes')));
        $this->rows = $this->Char(array('size' => '2', 'maxlength' => '2', 'label' => translate('N&uacute;mero de linhas')));
        $this->cols = $this->Char(array('size' => '2', 'maxlength' => '2', 'label' => translate('N&uacute;mero de colunas')));
        $this->options = $this->Text(array('label' => translate('Op&ccedil;&otilde;es'), 'help' => translate('Lista das op&ccedil;&otilde;es, uma por linha')));
        $this->multiple = $this->Boolean(array('default' => '0', 'label' => translate('Escolha m&uacute;ltipla')));
        $this->ordem = $this->Integer(array('maxlength' => '2', 'default' => 0, 'label' => translate('N&uacute;mero de ordem')));
        $this->validators = $this->Text(array('label' => translate('Validadores')));
        $this->required = $this->Boolean(array('label' => translate('Campo obrigat&oacute;rio')));
        $this->actualizado = $this->Datetime(array('on_update' => '_currentDatetime', 'label' => translate('Actualizado em')));
        $this->criado = $this->Datetime(array('on_insert' => '_currentDatetime', 'label' => translate('Criado em')));
        $this->ip = $this->IpAddress(array('on_update' => '_remoteAddress', 'label' => translate('Endere&ccedil;o IP')));
    }

    /**
     * Devolve o tipo de elemento
     *
     * @return string
     */
    public function getElementsTypes() {
        return array_map(create_function('$string', 'return html_entity_decode(translate($string), ENT_QUOTES, CHARSET);'), $this->_elements);
    }

    /**
     * Devolve o tipo de validacao
     *
     * @return string
     */
    public function getValidators() {
        return array_map(create_function('$string', 'return html_entity_decode(translate($string), ENT_QUOTES, CHARSET);'), $this->_validators);
    }
}