<?php

/**
 * Modelo del usuario
 *
 * Propiedades
 *
 * The followings are the available columns in table 'tbl_usuario':
 * @property integer $id
 * @property string $username
 * @property string $password
 * @property string $email
 * @property string $clave_activacion
 * @property integer $fecha_registro
 * @property integer $ultima_visita
 * @property integer $superusuario
 * @property integer $estado
 */
class Usuario extends CActiveRecord {

    const ESTADO_NOACTIVO = 0;
    const ESTADO_ACTIVO = 1;
    const ESTADO_BLOQUEADO = -1;

    /**
     * Returns the static model of the specified AR class.
     * @return CActiveRecord the static model class
     */
    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    /**
     * @return string the associated database table name
     */
    public function tableName() {
        return Yii::app()->getModule('usuario')->tablaUsuarios;
    }

    /**
     * @return array validation rules for model attributes.
     */
    public function rules() {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.CConsoleApplication
        return ((get_class(Yii::app()) == 'CConsoleApplication' || (get_class(Yii::app()) != 'CConsoleApplication' && Yii::app()->getModule('usuario')->isAdmin())) ? array(
                    array('username, password, email, superusuario, estado', 'required'),            
                    array('username', 'length', 'max' => 20, 'min' => 3, 'message' => UsuarioModule::t("Incorrect username (length between 3 and 20 characters).")),
                    array('password', 'length', 'max' => 128, 'min' => 4, 'message' => UsuarioModule::t("Incorrect password (minimal length 4 symbols).")),
                    array('email', 'email'),
                    array('username', 'unique', 'message' => UsuarioModule::t("This user's name already exists.")),
                    array('email', 'unique', 'message' => UsuarioModule::t("This user's email address already exists.")),
                    array('username', 'match', 'pattern' => '/^[A-Za-z0-9_]+$/u', 'message' => UsuarioModule::t("Incorrect symbols (A-z0-9).")),
                    array('estado', 'in', 'range' => array(self::ESTADO_NOACTIVO, self::ESTADO_ACTIVO, self::ESTADO_BLOQUEADO)),
                    array('superusuario', 'in', 'range' => array(0, 1)),
                    array('fecha_registro', 'default', 'value' => date('Y-m-d H:i:s'), 'setOnEmpty' => true, 'on' => 'insert'),
                    array('ultima_visita', 'default', 'value' => '0000-00-00 00:00:00', 'setOnEmpty' => true, 'on' => 'insert'),
                    array('superusuario, estado', 'numerical', 'integerOnly' => true),
                    array('id, username, password, email, clave_activacion, fecha_registro, ultima_visita, superusuario, estado', 'safe', 'on' => 'search'),
                ) : ((Yii::app()->user->id == $this->id) ? array(
                    array('username, password, email', 'required'),
                    array('username', 'length', 'max' => 20, 'min' => 3, 'message' => UsuarioModule::t("Incorrect username (length between 3 and 20 characters).")),
                    array('email', 'email'),
                    array('username', 'unique', 'message' => UsuarioModule::t("This user's name already exists.")),
                    array('username', 'match', 'pattern' => '/^[A-Za-z0-9_]+$/u', 'message' => UsuarioModule::t("Incorrect symbols (A-z0-9).")),
                    array('email', 'unique', 'message' => UsuarioModule::t("This user's email address already exists.")),
                ) : array()));
    }

    /**
     * @return array relational rules.
     */
    public function relations() {
        $relations = Yii::app()->getModule('usuario')->relations;
        if (!isset($relations['perfil']))
            $relations['perfil'] = array(self::HAS_ONE, 'Perfil', 'usuario_id');
        return $relations;
    }

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels() {
        return array(
            'id' => UsuarioModule::t("Id"),
            'username' => UsuarioModule::t("Usuario"),
            'password' => UsuarioModule::t("Contraseña"),
            'confirmacion_password' => UsuarioModule::t("Confirmación de contraseña"),
            'email' => UsuarioModule::t("E-mail"),
            'codigo_verificacion' => UsuarioModule::t("Código de verificación"),
            'clave_activacion' => UsuarioModule::t("Clave de activación"),
            'fecha_registro' => UsuarioModule::t("Fecha de registro"),
            'ultima_visita' => UsuarioModule::t("Última visita"),
            'superusuario' => UsuarioModule::t("Superusuario"),
            'estado' => UsuarioModule::t("Estado"),
        );
    }

    public function scopes() {
        return array(
            'activo' => array(
                'condition' => 'estado=' . self::ESTADO_ACTIVO,
            ),
            'inactivo' => array(
                'condition' => 'estado=' . self::ESTADO_NOACTIVO,
            ),
            'bloqueado' => array(
                'condition' => 'estado=' . self::ESTADO_BLOQUEADO,
            ),
            'superusuario' => array(
                'condition' => 'superusuario=1',
            ),
            'notsafe' => array(
                'select' => 'id, username, password, email, clave_activacion, fecha_registro, ultima_visita, superusuario, estado',
            ),
        );
    }

    public function defaultScope() {
        return CMap::mergeArray(Yii::app()->getModule('usuario')->defaultScope, array(
                    'alias' => 'usuario',
                    'select' => 'usuario.id, usuario.username, usuario.email, usuario.fecha_registro, usuario.ultima_visita, usuario.superusuario, usuario.estado',
        ));
    }

    public static function itemAlias($type, $code = NULL) {
        $_items = array(
            'UserStatus' => array(
                self::ESTADO_NOACTIVO => UsuarioModule::t('Inactivo'),
                self::ESTADO_ACTIVO => UsuarioModule::t('Activo'),
                self::ESTADO_BLOQUEADO => UsuarioModule::t('Bloqueado'),
            ),
            'AdminStatus' => array(
                '0' => UsuarioModule::t('No'),
                '1' => UsuarioModule::t('Sí'),
            ),
        );
        if (isset($code))
            return isset($_items[$type][$code]) ? $_items[$type][$code] : false;
        else
            return isset($_items[$type]) ? $_items[$type] : false;
    }

    /**
     * Retrieves a list of models based on the current search/filter conditions.
     * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
     */
    public function search() {
        // Warning: Please modify the following code to remove attributes that
        // should not be searched.

        $criteria = new CDbCriteria;

        $criteria->compare('id', $this->id);
        $criteria->compare('username', $this->username, true);
        $criteria->compare('password', $this->password);
        $criteria->compare('email', $this->email, true);
        $criteria->compare('clave_activacion', $this->clave_activacion);
        $criteria->compare('fecha_registro', $this->create_at);
        $criteria->compare('ultima_visita', $this->lastvisit_at);
        $criteria->compare('superusuario', $this->superusuario);
        $criteria->compare('estado', $this->estado);

        return new CActiveDataProvider(get_class($this), array(
            'criteria' => $criteria,
            'pagination' => array(
            'pageSize' => Yii::app()->getModule('usuario')->user_page_size,
            ),
        ));
    }

    public function getCreatetime() {
        return strtotime($this->fecha_registro);
    }

    public function setCreatetime($value) {
        $this->fecha_registro = date('Y-m-d H:i:s', $value);
    }

    public function getLastVisit() {
        return strtotime($this->ultima_visita);
    }

    public function setLastvisit($value) {
        $this->ultima_visita = date('Y-m-d H:i:s', $value);
    }

    public function afterSave() {
        if (get_class(Yii::app()) == 'CWebApplication' && Perfil::$regMode == false) {
            Yii::app()->user->updateSession();
        }
        return parent::afterSave();
    }

}