<?php

Goweb::loadClass('Goweb_Db_Model');

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

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

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

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

    /**
     * Metodo obrigatorio. Informa a definicao da tabela
     * referente ao Model em questao.
     */
    protected function _setup() {
        $this->id = $this->Auto();

        $this->perfil_id = $this->ForeignKey(array('model' => 'Utilizadores_Model_Perfil',
                                                   'alias' => 'perfil',
                                                   'label' => translate('Perfil'),
                                                   'default' => '0' ));

        $this->nome         = $this->Char(array('maxlength' => 50, 'notnull' => true, 'label' => translate('Nome')));
        $this->apelido         = $this->Char(array('maxlength' => 50, 'notnull' => true, 'label' => translate('Apelido')));
        //$this->username     = $this->Char(array('maxlength' => 20, 'size'=> 20, 'notnull' => true, 'unique' => true, , 'label' => translate('Username')));
        $this->email        = $this->Email(array('label' => translate('E-Mail'), 'unique' => true, 'notnull' => true));
        $this->password     = $this->Password(array('notnull' => true));
        $this->codigo_reset = $this->Char(array('show' => false, 'on_insert' => '_generateCode'));


        $this->morada     = $this->Text(array('maxlength' => 800, 'cols' => 30, 'rows' => 3, 'notnull' => false, 'label' => translate('Morada')));
        $this->cod_postal = $this->Char(array('maxlength' => 20, 'size'=> 20, 'notnull' => false, 'label' => translate('C&oacute;digo Postal')));
        $this->localidade = $this->Char(array('maxlength' => 255, 'size'=> 30, 'notnull' => false, 'label' => translate('Localidade')));
        $this->pais_id    = $this->ForeignKey(array('model' => 'Utilizadores_Model_Pais',
                                                          'alias' => 'pais',
                                                          'label' => translate('Pais'),
                                                          'notnull' => true));
        $this->data_nasc         = $this->Date(array('notnull' => true, 'label' => translate('Data de Nascimento')));
        // bi
        // nib
        // tipo_id
        // desconto_id

        $this->activo = $this->Boolean(array('default' => 1, 'label' => translate('Activo')));
        $this->lang   = $this->Char(array('maxlength' => 10, 'notnull' => false));
        $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'));
        //$this->addTabCols('Informa&ccedil;&atilde;o Pessoal', array('perfil_id', 'nome', 'apelido'));
        //$this->addTabCols('Dados Pessoais', array('morada', 'cod_postal', 'localidade', 'pais_id'));
    }

    /**
     * Gera o codigo da password
     */
    protected function _generateCode() {
        $length = 6;
        $validChars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
        $code = '';
        while ($length > 0) {
            $code .= $validChars[rand(0,strlen($validChars)-1)];
            $length--;
        }
        return $code;
    }
}