<?php

Goweb::loadClass('Goweb_Db_Model');

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

    /**
     * Nome da Tabela
     *
     * @var string
     */
    protected $_table = 'sistema_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' => 'Sistema_Model_Perfil', 'alias' => 'perfil', 'notnull' => true, 'label' => 'Perfil' ));
        $this->nome = $this->Char(array('maxlength' => 50, 'notnull' => true));
        $this->username = $this->Char(array('maxlength' => 20, 'size'=> 20, 'notnull' => true, 'unique' => true));
        $this->email = $this->Email();
        $this->password = $this->Password(array('notnull' => true));
        $this->codigo_reset = $this->Char(array('show' => false, 'on_insert' => '_generateCode'));
        $this->lingua_id= $this->ForeignKey(array('model' => 'Sistema_Model_Lingua', 'alias' => 'lingua', 'notnull' => true, 'label' => 'Lingua' ));
        $this->activo = $this->Boolean(array('default' => '1'));
        $this->actualizado = $this->Datetime(array('on_update' => '_currentDatetime', 'label' => 'Actualizado em'));
        $this->criado = $this->Datetime(array('on_insert' => '_currentDatetime', 'label' => 'Criado em'));
        $this->ip = $this->IpAddress(array('on_update' => '_remoteAddress'));
    }

    /**
     * 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;
    }

    /**
     * Devolve todos os utilizadores com excepcao do superuser.
     *
     * @param string
     *
     * @return Goweb_Db_Model_Rowset
     */
    public function fetchAll($cols = null) {
        if (Goweb::registry('session')->utilizador['perfil']['superuser'] == '0') {
            $this->where('perfil.superuser<>?', '1');
        }
        return parent::fetchAll($cols);
    }

    /**
     * Verifica se o perfil existe na bd
     *
     * @param integer
     *
     * @return boolean
     */
    public function find($id) {
        $this->loadForeigns(true);
        if (parent::find($id)) {
            if ($this->perfil->superuser == '1' && Goweb::registry('session')->utilizador['perfil']['superuser'] == '0') {
                return false;
            }
            return true;
        }
        return false;
    }
}
