estado == self::ESTADO_ACTIVO); } /** * Returns the static model of the specified AR class. * @param string $className active record class name. * @return Usuario 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 'tbl_usuarios'; } /** * @return array validation rules for model attributes. */ public function rules() { // NOTE: you should only define rules for those attributes that // will receive user inputs. return array( array('email, password', 'required'), array('email, nombre, apellidos, password, tipo, titulo, localidad', 'length', 'max' => 255), array('estado', 'length', 'max' => 1), array('email', 'email'), array('email', 'unique'), array('descripcion', 'safe'), array('telefono', 'length', 'max' => 13), array('telefono', 'match', 'pattern'=>'/^([+]?[0-9 ]+)$/'), array('tipo', 'default', 'value' => self::TIPO_USUARIO_COORDINADOR), array('ficheroFotografia', 'file', 'types' => 'jpg', 'maxSize' => 1024 * 1024 * 1, // 1MB como máximo 'tooLarge' => Yii::t('profind', 'La imagen es demasiado pesada. Elija otra fotografía más pequeña.'), 'wrongType' => Yii::t('profind', 'Sólo se permiten imágenes en formato JPG.'), 'allowEmpty' => 'true', ), array('id, id_empresa, estado, email, nombre, apellidos, tipo, titulo, localidad, telefono, descripcion', 'safe', 'on' => 'search'), ); } /** * @return array relational rules. */ public function relations() { // NOTE: you may need to adjust the relation name and the related // class name for the relations automatically generated below. return array( 'empresa' => array(self::BELONGS_TO, 'Empresa', 'id_empresa'), ); } public function scopes() { return array( 'equipo' => array( 'condition' => 'id_empresa = :id_empresa and id <> :id', 'params' => array( 'id_empresa' => Yii::app()->user->id_empresa, 'id' => Yii::app()->user->id ) ) ); } /** * @return array customized attribute labels (name=>label) */ public function attributeLabels() { return array( 'id' => 'ID', 'ficheroFotografia' => 'Fotografía', 'estado' => 'Estado', 'email' => 'Email', 'nombre' => 'Nombre', 'apellidos' => 'Apellidos', 'password' => 'Password', 'tipo' => 'Tipo', 'titulo' => 'Título', 'localidad' => 'Localidad', 'telefono' => 'Teléfono', 'descripcion' => 'Descripción', ); } /** * 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() { $criteria = new CDbCriteria; $criteria->compare('id', $this->id); $criteria->compare('id_empresa', $this->id_empresa); $criteria->compare('estado', $this->estado, true); $criteria->compare('email', $this->email, true); $criteria->compare('nombre', $this->nombre, true); $criteria->compare('apellidos', $this->apellidos, true); $criteria->compare('tipo', $this->tipo, true); $criteria->compare('titulo', $this->titulo, true); $criteria->compare('localidad', $this->localidad, true); $criteria->compare('telefono', $this->telefono, true); $criteria->compare('descripcion', $this->descripcion, true); return new CActiveDataProvider($this, array( 'criteria' => $criteria, )); } protected function beforeSave() { if ($this->isNewRecord) $this->created_time = date("Y-m-d H:i:s"); if (($this->estado === self::ESTADO_BORRADO) && ($this->deleted_time === NULL)) $this->deleted_time = date("Y-m-d H:i:s"); return parent::beforeSave(); } protected function afterFind() { parent::afterFind(); $this->fotografia = new FotografiaPerfil(); $this->fotografia->modelo = $this; } protected function afterConstruct() { parent::afterConstruct(); $this->fotografia = new FotografiaPerfil(); $this->fotografia->modelo = $this; } protected function afterSave() { parent::afterSave(); if ($this->isNewRecord) $this->createUploadDir(); } protected function afterDelete() { parent::afterDelete(); $this->deleteUploadDir(); } /** * Devuelve la ruta con los ficheros del usuario. * Incluye el separador de directorios al final de la ruta. * @return string ruta */ public function getUploadPath() { return Yii::getPathOfAlias('application.uploads.usuarios') . DIRECTORY_SEPARATOR . $this->id . DIRECTORY_SEPARATOR; } /** * Devuelve el nombre del fichero por defecto cuando no se tiene imagen * @return string ruta */ public function getImagenDefault() { return 'user_photo.jpg'; } /** * Crea un directorio para almacenar ficheros del usuario * @return boolean */ private function createUploadDir() { $upload = $this->getUploadPath(); if(!is_dir($upload)) { return mkdir($upload); } else return false; } /** * Elimina el directorio del usuario y todos sus ficheros * @return boolean */ private function deleteUploadDir() { $upload = $this->getUploadPath(); if(is_dir($upload)) return GHelper::recursiveRemoveDirectory($upload); else return false; } public function getNombreCompleto() { $cadena = $this->nombre; if ($this->apellidos) $cadena .= ' ' . $this->apellidos; return $cadena; } /** * Función para cifrar la contraseña del usuario * @return string contraseña cifrada */ public function encryptPassword($password) { $ph = new PasswordHash( Yii::app()->params['phpass']['iteration_count_log2'], Yii::app()->params['phpass']['portable_hashes'] ); return $ph->HashPassword($password); } /** * Función para cifrar la clave de seguridad del usuario * @return string clave de seguridad cifrada */ public function encryptSecureKey($key) { return md5($key); } }