272 lines
7.8 KiB
PHP
272 lines
7.8 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Yii-User module
|
||
|
|
*
|
||
|
|
* @author Mikhail Mangushev <mishamx@gmail.com>
|
||
|
|
* @link http://yii-user.2mx.org/
|
||
|
|
* @license http://www.opensource.org/licenses/bsd-license.php
|
||
|
|
* @version $Id: UserModule.php 132 2011-10-30 10:45:01Z mishamx $
|
||
|
|
*/
|
||
|
|
class UsuarioModule extends CWebModule {
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @var int
|
||
|
|
* @desc items on page
|
||
|
|
*/
|
||
|
|
public $user_page_size = 10;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @var int
|
||
|
|
* @desc items on page
|
||
|
|
*/
|
||
|
|
public $fields_page_size = 10;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @var string
|
||
|
|
* @desc hash method (md5,sha1 or algo hash function http://www.php.net/manual/en/function.hash.php)
|
||
|
|
*/
|
||
|
|
public $hash = 'md5';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @var boolean
|
||
|
|
* @desc use email for activation user account
|
||
|
|
*/
|
||
|
|
public $enviarMailActivacion = true;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @var boolean
|
||
|
|
* @desc allow auth for is not active user
|
||
|
|
*/
|
||
|
|
public $loginNotActiv = false;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @var boolean
|
||
|
|
* @desc activate user on registration (only $sendActivationMail = false)
|
||
|
|
*/
|
||
|
|
public $activeAfterRegister = false;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @var boolean
|
||
|
|
* @desc login after registration (need loginNotActiv or activeAfterRegister = true)
|
||
|
|
*/
|
||
|
|
public $autoLogin = true;
|
||
|
|
public $urlRegistro = array("/usuario/registro");
|
||
|
|
public $urlRecuperar = array("/usuario/recuperar/recuperar");
|
||
|
|
public $urlLogin = array("/usuario/login");
|
||
|
|
public $urlLogout = array("/usuario/logout");
|
||
|
|
public $urlPerfil = array("/usuario/perfil");
|
||
|
|
public $returnUrl = array("/usuario/perfil");
|
||
|
|
public $returnLogoutUrl = array("/usuario/login");
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @var int
|
||
|
|
* @desc Remember Me Time (seconds), defalt = 2592000 (30 days)
|
||
|
|
*/
|
||
|
|
public $rememberMeTime = 2592000; // 30 days
|
||
|
|
public $fieldsMessage = '';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @var array
|
||
|
|
* @desc User model relation from other models
|
||
|
|
* @see http://www.yiiframework.com/doc/guide/database.arr
|
||
|
|
*/
|
||
|
|
public $relations = array();
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @var array
|
||
|
|
* @desc Profile model relation from other models
|
||
|
|
*/
|
||
|
|
public $profileRelations = array();
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @var boolean
|
||
|
|
*/
|
||
|
|
public $captcha = array('registration' => true);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @var boolean
|
||
|
|
*/
|
||
|
|
//public $cacheEnable = false;
|
||
|
|
|
||
|
|
public $tablaUsuarios = '{{usuarios}}';
|
||
|
|
public $tablaPerfiles = '{{perfiles}}';
|
||
|
|
public $tablaCamposPerfiles = '{{campos_perfiles}}';
|
||
|
|
|
||
|
|
public $defaultScope = array(
|
||
|
|
'with' => array('perfil'),
|
||
|
|
);
|
||
|
|
|
||
|
|
static private $_usuario;
|
||
|
|
static private $_usuarios = array();
|
||
|
|
static private $_userByName = array();
|
||
|
|
static private $_admin;
|
||
|
|
static private $_admins;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @var array
|
||
|
|
* @desc Behaviors for models
|
||
|
|
*/
|
||
|
|
public $componentBehaviors = array();
|
||
|
|
|
||
|
|
public function init() {
|
||
|
|
// this method is called when the module is being created
|
||
|
|
// you may place code here to customize the module or the application
|
||
|
|
// import the module-level models and components
|
||
|
|
$this->setImport(array(
|
||
|
|
'usuario.models.*',
|
||
|
|
'usuario.components.*',
|
||
|
|
));
|
||
|
|
}
|
||
|
|
|
||
|
|
public function getBehaviorsFor($componentName) {
|
||
|
|
if (isset($this->componentBehaviors[$componentName])) {
|
||
|
|
return $this->componentBehaviors[$componentName];
|
||
|
|
} else {
|
||
|
|
return array();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public function beforeControllerAction($controller, $action) {
|
||
|
|
if (parent::beforeControllerAction($controller, $action)) {
|
||
|
|
// this method is called before any module controller action is performed
|
||
|
|
// you may place customized code here
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @param $str
|
||
|
|
* @param $params
|
||
|
|
* @param $dic
|
||
|
|
* @return string
|
||
|
|
*/
|
||
|
|
public static function t($str = '', $params = array(), $dic = 'usuario') {
|
||
|
|
if (Yii::t("UsuarioModule", $str) == $str)
|
||
|
|
return Yii::t("UsuarioModule." . $dic, $str, $params);
|
||
|
|
else
|
||
|
|
return Yii::t("UsuarioModule", $str, $params);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @return hash string.
|
||
|
|
*/
|
||
|
|
public static function encrypting($string = "") {
|
||
|
|
$hash = Yii::app()->getModule('usuario')->hash;
|
||
|
|
if ($hash == "md5")
|
||
|
|
return md5($string);
|
||
|
|
if ($hash == "sha1")
|
||
|
|
return sha1($string);
|
||
|
|
else
|
||
|
|
return hash($hash, $string);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @param $place
|
||
|
|
* @return boolean
|
||
|
|
*/
|
||
|
|
public static function doCaptcha($place = '') {
|
||
|
|
if (!extension_loaded('gd'))
|
||
|
|
return false;
|
||
|
|
if (in_array($place, Yii::app()->getModule('usuario')->captcha))
|
||
|
|
return Yii::app()->getModule('usuario')->captcha[$place];
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Return admin status.
|
||
|
|
* @return boolean
|
||
|
|
*/
|
||
|
|
public static function isAdmin() {
|
||
|
|
if (Yii::app()->user->isGuest)
|
||
|
|
return false;
|
||
|
|
else {
|
||
|
|
if (!isset(self::$_admin)) {
|
||
|
|
if (self::usuario()->superusuario)
|
||
|
|
self::$_admin = true;
|
||
|
|
else
|
||
|
|
self::$_admin = false;
|
||
|
|
}
|
||
|
|
return self::$_admin;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Return admins.
|
||
|
|
* @return array syperusers names
|
||
|
|
*/
|
||
|
|
public static function getAdmins() {
|
||
|
|
if (!self::$_admins) {
|
||
|
|
$admins = Usuario::model()->activo()->superusuario()->findAll();
|
||
|
|
$return_name = array();
|
||
|
|
foreach ($admins as $admin)
|
||
|
|
array_push($return_name, $admin->username);
|
||
|
|
self::$_admins = ($return_name) ? $return_name : array('');
|
||
|
|
}
|
||
|
|
return self::$_admins;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Send to user mail
|
||
|
|
*/
|
||
|
|
public static function sendMail($email, $subject, $message) {
|
||
|
|
$adminEmail = Yii::app()->params['adminEmail'];
|
||
|
|
$headers = "MIME-Version: 1.0\r\nFrom: $adminEmail\r\nReply-To: $adminEmail\r\nContent-Type: text/html; charset=utf-8";
|
||
|
|
$message = wordwrap($message, 70);
|
||
|
|
$message = str_replace("\n.", "\n..", $message);
|
||
|
|
return mail($email, '=?UTF-8?B?' . base64_encode($subject) . '?=', $message, $headers);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Send to user mail
|
||
|
|
*/
|
||
|
|
public function sendMailToUser($user_id, $subject, $message, $from = '') {
|
||
|
|
$user = Usuario::model()->findbyPk($user_id);
|
||
|
|
if (!$from)
|
||
|
|
$from = Yii::app()->params['adminEmail'];
|
||
|
|
$headers = "From: " . $from . "\r\nReply-To: " . Yii::app()->params['adminEmail'];
|
||
|
|
return mail($user->email, '=?UTF-8?B?' . base64_encode($subject) . '?=', $message, $headers);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Return safe user data.
|
||
|
|
* @param user id not required
|
||
|
|
* @return user object or false
|
||
|
|
*/
|
||
|
|
public static function usuario($id = 0, $clearCache = false) {
|
||
|
|
if (!$id && !Yii::app()->user->isGuest)
|
||
|
|
$id = Yii::app()->user->id;
|
||
|
|
if ($id) {
|
||
|
|
if (!isset(self::$_usuarios[$id]) || $clearCache)
|
||
|
|
self::$_usuarios[$id] = Usuario::model()->with(array('perfil'))->findbyPk($id);
|
||
|
|
return self::$_usuarios[$id];
|
||
|
|
}
|
||
|
|
else
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Return safe user data.
|
||
|
|
* @param user name
|
||
|
|
* @return user object or false
|
||
|
|
*/
|
||
|
|
public static function getUserByName($username) {
|
||
|
|
if (!isset(self::$_userByName[$username])) {
|
||
|
|
$_userByName[$username] = Usuario::model()->findByAttributes(array('username' => $username));
|
||
|
|
}
|
||
|
|
return $_userByName[$username];
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Return safe user data.
|
||
|
|
* @param user id not required
|
||
|
|
* @return user object or false
|
||
|
|
*/
|
||
|
|
public function users() {
|
||
|
|
return User;
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|