ModuleUser
Package | modules.user |
---|---|
Inheritance | class ModuleUser » Module » LsObject |
Since | 1.0 |
Source Code | /classes/modules/user/User.class.php |
Protected Properties
Property | Type | Description | Defined By |
---|---|---|---|
aUserFieldTypes | array | Список типов пользовательских полей | ModuleUser |
bIsInit | bool | Указывает на то, была ли проведенна инициализация модуля | Module |
oEngine | Engine | Объект ядра | Module |
oMapper | ModuleUser_MapperUser | Объект маппера | ModuleUser |
oSession | ModuleUser_EntitySession|null | Объект сессии текущего пользователя | ModuleUser |
oUserCurrent | ModuleUser_EntityUser|null | Объект текущего пользователя | ModuleUser |
Public Methods
Method | Description | Defined By |
---|---|---|
Add() | Добавляет юзера | ModuleUser |
AddFriend() | Добавляет друга | ModuleUser |
AddInvite() | Добавляет новый инвайт | ModuleUser |
AddReminder() | Добавляем воспоминание(восстановление) пароля | ModuleUser |
AddUserChangemail() | Добавляет запись о смене емайла | ModuleUser |
AddUserFieldTypes() | Добавляет новый тип с пользовательские поля | ModuleUser |
Authorization() | Авторизовывает юзера | ModuleUser |
CheckLogin() | Проверяет логин на корректность | ModuleUser |
DeleteAvatar() | Удаляет аватар пользователя | ModuleUser |
DeleteFoto() | Удаляет фото пользователя | ModuleUser |
DeleteFriend() | Удаляет друга | ModuleUser |
DeleteUserFieldValues() | Удаляет у пользователя значения полей | ModuleUser |
DeleteUserNoteById() | Удаляет заметку по ID | ModuleUser |
EraseFriend() | Удаляет информацию о дружбе из базы данных | ModuleUser |
GenerateInvite() | Генерирует новый инвайт | ModuleUser |
GetCountInviteAvailable() | Получаем число доступных приглашений для юзера | ModuleUser |
GetCountInviteUsed() | Получает полное число использованных приглашений юзера | ModuleUser |
GetCountInviteUsedByDate() | Получает число использованых приглашений юзером за определенную дату | ModuleUser |
GetCountUserNotesByUserId() | Возвращает количество заметок у пользователя | ModuleUser |
GetCountUsersFriend() | Получает количество друзей | ModuleUser |
GetFriend() | Получаем привязку друга к юзеру(есть ли у юзера данный друг) | ModuleUser |
GetFriendsByArray() | Получить список отношений друзей | ModuleUser |
GetFriendsByArraySolid() | Получить список отношений друзей используя единый кеш | ModuleUser |
GetGroupPrefixUser() | Возвращает список префиксов логинов пользователей (для алфавитного указателя) | ModuleUser |
GetInviteByCode() | Получает инвайт по его коду | ModuleUser |
GetReminderByCode() | Получаем запись восстановления пароля по коду | ModuleUser |
GetSessionByUserId() | Получает сессию юзера | ModuleUser |
GetSessionsByArrayId() | Список сессий юзеров по ID | ModuleUser |
GetSessionsByArrayIdSolid() | Получить список сессий по списку айдишников, но используя единый кеш | ModuleUser |
GetStatUsers() | Получить статистику по юзерам | ModuleUser |
GetUserByActivateKey() | Получить юзера по ключу активации | ModuleUser |
GetUserById() | Получить юзера по айдишнику | ModuleUser |
GetUserByLogin() | Получить юзера по логину | ModuleUser |
GetUserByMail() | Получить юзера по мылу | ModuleUser |
GetUserBySessionKey() | Получить юзера по ключу сессии | ModuleUser |
GetUserChangemailByCodeFrom() | Возвращает объект смены емайла по коду подтверждения | ModuleUser |
GetUserChangemailByCodeTo() | Возвращает объект смены емайла по коду подтверждения | ModuleUser |
GetUserCurrent() | Получить текущего юзера | ModuleUser |
GetUserFieldTypes() | Возвращает список типов полей | ModuleUser |
GetUserInviteFrom() | Получает юзера который пригласил | ModuleUser |
GetUserItemsByArrayId() | Алиас для корректной работы ORM | ModuleUser |
GetUserNote() | Возвращет заметку по автору и пользователю | ModuleUser |
GetUserNoteById() | Возвращает заметку по ID | ModuleUser |
GetUserNotesByArray() | Возвращает список заметок пользователя по ID целевых юзеров | ModuleUser |
GetUserNotesByUserId() | Возвращает список заметок пользователя | ModuleUser |
GetUsersAdditionalData() | Получает дополнительные данные(объекты) для юзеров по их ID | ModuleUser |
GetUsersByArrayId() | Список юзеров по ID | ModuleUser |
GetUsersByArrayIdSolid() | Получение пользователей по списку ID используя общий кеш | ModuleUser |
GetUsersByDateLast() | Получить список юзеров по дате последнего визита | ModuleUser |
GetUsersByDateRegister() | Получить список юзеров по дате регистрации | ModuleUser |
GetUsersByFilter() | Возвращает список пользователей по фильтру | ModuleUser |
GetUsersByLoginLike() | Получить список юзеров по первым буквам логина | ModuleUser |
GetUsersFriend() | Получает список друзей | ModuleUser |
GetUsersInvite() | Получает список приглашенных юзеров | ModuleUser |
Init() | Инициализация | ModuleUser |
IsAuthorization() | Авторизован ли юзер | ModuleUser |
Logout() | Разлогинивание | ModuleUser |
MakeUserChangemail() | Формирование процесса смены емайла в профиле пользователя | ModuleUser |
SaveNote() | Сохраняет заметку в БД, если ее нет то создает новую | ModuleUser |
SetInit() | Помечает модуль как инициализированный | Module |
Shutdown() | При завершенни модуля загружаем в шалон объект текущего юзера | ModuleUser |
Update() | Обновляет юзера | ModuleUser |
UpdateFriend() | Обновляет информацию о друге | ModuleUser |
UpdateInvite() | Обновляет инвайт | ModuleUser |
UpdateReminder() | Сохраняем воспомнинание(восстановление) пароля | ModuleUser |
UpdateUserChangemail() | Обновляет запись о смене емайла | ModuleUser |
UploadAvatar() | Загрузка аватара пользователя | ModuleUser |
UploadFoto() | загрузка фотографии пользователя | ModuleUser |
__call() | Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля | Module |
__construct() | При создании модуля передаем объект ядра | Module |
addUserField() | Добавить поле | ModuleUser |
deleteUserField() | Удалить поле | ModuleUser |
getUserFieldValueByName() | Получить по имени поля его значение дял определённого пользователя | ModuleUser |
getUserFields() | Получить дополнительные поля профиля пользователя | ModuleUser |
getUserFieldsValues() | Получить значения дополнительных полей профиля пользователя | ModuleUser |
isInit() | Возвращает значение флага инициализации модуля | Module |
setUserFieldsValues() | Установить значения дополнительных полей профиля пользователя | ModuleUser |
updateUserField() | Изменить поле | ModuleUser |
userFieldExistsById() | Проверяет существует ли поле с таким ID | ModuleUser |
userFieldExistsByName() | Проверяет существует ли поле с таким именем | ModuleUser |
Protected Methods
Method | Description | Defined By |
---|---|---|
AutoLogin() | Автоматическое заллогинивание по ключу из куков | ModuleUser |
CreateSession() | Создание пользовательской сессии | ModuleUser |
UpdateSession() | Обновление данных сессии | ModuleUser |
__clone() | Блокируем копирование/клонирование объекта | Module |
Property Details
Список типов пользовательских полей
Объект маппера
Объект сессии текущего пользователя
Объект текущего пользователя
Method Details
public ModuleUser_EntityUser|bool Add(ModuleUser_EntityUser $oUser)
| ||
$oUser | ModuleUser_EntityUser | Объект пользователя |
{return} | ModuleUser_EntityUser|bool |
public function Add(ModuleUser_EntityUser $oUser) {
if ($sId=$this->oMapper->Add($oUser)) {
$oUser->setId($sId);
//чистим зависимые кеши
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array('user_new'));
/**
* Создаем персональный блог
*/
$this->Blog_CreatePersonalBlog($oUser);
return $oUser;
}
return false;
}
Добавляет юзера
public bool AddFriend(ModuleUser_EntityFriend $oFriend)
| ||
$oFriend | ModuleUser_EntityFriend | Объект дружбы(связи пользователей) |
{return} | bool |
public function AddFriend(ModuleUser_EntityFriend $oFriend) {
//чистим зависимые кеши
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("friend_change_user_{$oFriend->getUserFrom()}","friend_change_user_{$oFriend->getUserTo()}"));
$this->Cache_Delete("user_friend_{$oFriend->getUserFrom()}_{$oFriend->getUserTo()}");
$this->Cache_Delete("user_friend_{$oFriend->getUserTo()}_{$oFriend->getUserFrom()}");
return $this->oMapper->AddFriend($oFriend);
}
Добавляет друга
public ModuleUser_EntityInvite|bool AddInvite(ModuleUser_EntityInvite $oInvite)
| ||
$oInvite | ModuleUser_EntityInvite | Объект инвайта |
{return} | ModuleUser_EntityInvite|bool |
public function AddInvite(ModuleUser_EntityInvite $oInvite) {
if ($sId=$this->oMapper->AddInvite($oInvite)) {
$oInvite->setId($sId);
return $oInvite;
}
return false;
}
Добавляет новый инвайт
public bool AddReminder(ModuleUser_EntityReminder $oReminder)
| ||
$oReminder | ModuleUser_EntityReminder | Объект восстановления пароля |
{return} | bool |
public function AddReminder(ModuleUser_EntityReminder $oReminder) {
return $this->oMapper->AddReminder($oReminder);
}
Добавляем воспоминание(восстановление) пароля
public bool|ModuleUser_EntityChangemail AddUserChangemail(ModuleUser_EntityChangemail $oChangemail)
| ||
$oChangemail | ModuleUser_EntityChangemail | Объект смены емайла |
{return} | bool|ModuleUser_EntityChangemail |
public function AddUserChangemail($oChangemail) {
if ($sId=$this->oMapper->AddUserChangemail($oChangemail)) {
$oChangemail->setId($sId);
return $oChangemail;
}
return false;
}
Добавляет запись о смене емайла
public bool AddUserFieldTypes(string $sType)
| ||
$sType | string | Тип |
{return} | bool |
public function AddUserFieldTypes($sType) {
if (!in_array($sType,$this->aUserFieldTypes)) {
$this->aUserFieldTypes[]=$sType;
return true;
}
return false;
}
Добавляет новый тип с пользовательские поля
public bool Authorization(ModuleUser_EntityUser $oUser, bool $bRemember=true, string $sKey=NULL)
| ||
$oUser | ModuleUser_EntityUser | Объект пользователя |
$bRemember | bool | Запоминать пользователя или нет |
$sKey | string | Ключ авторизации для куков |
{return} | bool |
public function Authorization(ModuleUser_EntityUser $oUser,$bRemember=true,$sKey=null) {
if (!$oUser->getId() or !$oUser->getActivate()) {
return false;
}
/**
* Генерим новый ключ авторизаии для куков
*/
if(is_null($sKey)){
$sKey=md5(func_generator().time().$oUser->getLogin());
}
/**
* Создаём новую сессию
*/
if (!$this->CreateSession($oUser,$sKey)) {
return false;
}
/**
* Запоминаем в сесси юзера
*/
$this->Session_Set('user_id',$oUser->getId());
$this->oUserCurrent=$oUser;
/**
* Ставим куку
*/
if ($bRemember) {
setcookie('key',$sKey,time()+Config::Get('sys.cookie.time'),Config::Get('sys.cookie.path'),Config::Get('sys.cookie.host'));
}
return true;
}
Авторизовывает юзера
protected void AutoLogin()
|
protected function AutoLogin() {
if ($this->oUserCurrent) {
return;
}
if (isset($_COOKIE['key']) and is_string($_COOKIE['key']) and $sKey=$_COOKIE['key']) {
if ($oUser=$this->GetUserBySessionKey($sKey)) {
$this->Authorization($oUser);
} else {
$this->Logout();
}
}
}
Автоматическое заллогинивание по ключу из куков
public bool CheckLogin(string $sLogin)
| ||
$sLogin | string | Логин пользователя |
{return} | bool |
public function CheckLogin($sLogin) {
if (preg_match("/^[\da-z\_\-]{".Config::Get('module.user.login.min_size').','.Config::Get('module.user.login.max_size')."}$/i",$sLogin)){
return true;
}
return false;
}
Проверяет логин на корректность
protected bool CreateSession(ModuleUser_EntityUser $oUser, string $sKey)
| ||
$oUser | ModuleUser_EntityUser | Объект пользователя |
$sKey | string | Сессионный ключ |
{return} | bool |
protected function CreateSession(ModuleUser_EntityUser $oUser,$sKey) {
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array('user_session_update'));
$this->Cache_Delete("user_session_{$oUser->getId()}");
$oSession=Engine::GetEntity('User_Session');
$oSession->setUserId($oUser->getId());
$oSession->setKey($sKey);
$oSession->setIpLast(func_getIp());
$oSession->setIpCreate(func_getIp());
$oSession->setDateLast(date("Y-m-d H:i:s"));
$oSession->setDateCreate(date("Y-m-d H:i:s"));
if ($this->oMapper->CreateSession($oSession)) {
$this->oSession=$oSession;
return true;
}
return false;
}
Создание пользовательской сессии
public void DeleteAvatar(ModuleUser_EntityUser $oUser)
| ||
$oUser | ModuleUser_EntityUser | Объект пользователя |
public function DeleteAvatar($oUser) {
/**
* Если аватар есть, удаляем его и его рейсайзы
*/
if($oUser->getProfileAvatar()) {
$aSize=array_merge(Config::Get('module.user.avatar_size'),array(100));
foreach ($aSize as $iSize) {
$this->Image_RemoveFile($this->Image_GetServerPath($oUser->getProfileAvatarPath($iSize)));
}
}
}
Удаляет аватар пользователя
public void DeleteFoto(ModuleUser_EntityUser $oUser)
| ||
$oUser | ModuleUser_EntityUser |
public function DeleteFoto($oUser) {
$this->Image_RemoveFile($this->Image_GetServerPath($oUser->getProfileFoto()));
}
Удаляет фото пользователя
public bool DeleteFriend(ModuleUser_EntityFriend $oFriend)
| ||
$oFriend | ModuleUser_EntityFriend | Объект дружбы(связи пользователей) |
{return} | bool |
public function DeleteFriend(ModuleUser_EntityFriend $oFriend) {
//чистим зависимые кеши
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("friend_change_user_{$oFriend->getUserFrom()}","friend_change_user_{$oFriend->getUserTo()}"));
$this->Cache_Delete("user_friend_{$oFriend->getUserFrom()}_{$oFriend->getUserTo()}");
$this->Cache_Delete("user_friend_{$oFriend->getUserTo()}_{$oFriend->getUserFrom()}");
// устанавливаем статус дружбы "удалено"
$oFriend->setStatusByUserId(ModuleUser::USER_FRIEND_DELETE,$oFriend->getUserId());
return $this->oMapper->UpdateFriend($oFriend);
}
Удаляет друга
public bool DeleteUserFieldValues(int $iUserId, array|null $aType=NULL)
| ||
$iUserId | int | ID пользователя |
$aType | array|null | Список типов для удаления |
{return} | bool |
public function DeleteUserFieldValues($iUserId,$aType=null) {
return $this->oMapper->DeleteUserFieldValues($iUserId,$aType);
}
Удаляет у пользователя значения полей
public bool DeleteUserNoteById(int $iId)
| ||
$iId | int | ID заметки |
{return} | bool |
public function DeleteUserNoteById($iId) {
if ($oNote=$this->GetUserNoteById($iId)) {
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("user_note_change_by_user_{$oNote->getUserId()}"));
}
return $this->oMapper->DeleteUserNoteById($iId);
}
Удаляет заметку по ID
public bool EraseFriend(ModuleUser_EntityFriend $oFriend)
| ||
$oFriend | ModuleUser_EntityFriend | Объект дружбы(связи пользователей) |
{return} | bool |
public function EraseFriend(ModuleUser_EntityFriend $oFriend) {
//чистим зависимые кеши
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("friend_change_user_{$oFriend->getUserFrom()}","friend_change_user_{$oFriend->getUserTo()}"));
$this->Cache_Delete("user_friend_{$oFriend->getUserFrom()}_{$oFriend->getUserTo()}");
$this->Cache_Delete("user_friend_{$oFriend->getUserTo()}_{$oFriend->getUserFrom()}");
return $this->oMapper->EraseFriend($oFriend);
}
Удаляет информацию о дружбе из базы данных
public ModuleUser_EntityInvite|bool GenerateInvite(ModuleUser_EntityUser $oUser)
| ||
$oUser | ModuleUser_EntityUser | Объект пользователя |
{return} | ModuleUser_EntityInvite|bool |
public function GenerateInvite($oUser) {
$oInvite=Engine::GetEntity('User_Invite');
$oInvite->setCode(func_generator(32));
$oInvite->setDateAdd(date("Y-m-d H:i:s"));
$oInvite->setUserFromId($oUser->getId());
return $this->AddInvite($oInvite);
}
Генерирует новый инвайт
public int GetCountInviteAvailable(ModuleUser_EntityUser $oUserFrom)
| ||
$oUserFrom | ModuleUser_EntityUser | Объект пользователя |
{return} | int |
public function GetCountInviteAvailable(ModuleUser_EntityUser $oUserFrom) {
$sDay=7;
$iCountUsed=$this->GetCountInviteUsedByDate($oUserFrom->getId(),date("Y-m-d 00:00:00",mktime(0,0,0,date("m"),date("d")-$sDay,date("Y"))));
$iCountAllAvailable=round($oUserFrom->getRating()+$oUserFrom->getSkill());
$iCountAllAvailable = $iCountAllAvailable<0 ? 0 : $iCountAllAvailable;
$iCountAvailable=$iCountAllAvailable-$iCountUsed;
$iCountAvailable = $iCountAvailable<0 ? 0 : $iCountAvailable;
return $iCountAvailable;
}
Получаем число доступных приглашений для юзера
public int GetCountInviteUsed(int $sUserIdFrom)
| ||
$sUserIdFrom | int | ID пользователя |
{return} | int |
public function GetCountInviteUsed($sUserIdFrom) {
return $this->oMapper->GetCountInviteUsed($sUserIdFrom);
}
Получает полное число использованных приглашений юзера
public int GetCountInviteUsedByDate(int $sUserIdFrom, string $sDate)
| ||
$sUserIdFrom | int | ID пользователя |
$sDate | string | Дата |
{return} | int |
public function GetCountInviteUsedByDate($sUserIdFrom,$sDate) {
return $this->oMapper->GetCountInviteUsedByDate($sUserIdFrom,$sDate);
}
Получает число использованых приглашений юзером за определенную дату
public int GetCountUserNotesByUserId(int $iUserId)
| ||
$iUserId | int | ID пользователя |
{return} | int |
public function GetCountUserNotesByUserId($iUserId) {
return $this->oMapper->GetCountUserNotesByUserId($iUserId);
}
Возвращает количество заметок у пользователя
public int GetCountUsersFriend(int $sUserId)
| ||
$sUserId | int | ID пользователя |
{return} | int |
public function GetCountUsersFriend($sUserId) {
$sKey="count_user_friend_{$sUserId}";
if (false === ($data = $this->Cache_Get($sKey))) {
$data = $this->oMapper->GetCountUsersFriend($sUserId);
$this->Cache_Set($data, $sKey, array("friend_change_user_{$sUserId}"), 60*60*24*2);
}
return $data;
}
Получает количество друзей
public ModuleUser_EntityFriend|null GetFriend(int $sFriendId, int $sUserId)
| ||
$sFriendId | int | ID пользователя друга |
$sUserId | int | ID пользователя |
{return} | ModuleUser_EntityFriend|null |
public function GetFriend($sFriendId,$sUserId) {
$data=$this->GetFriendsByArray($sFriendId,$sUserId);
if (isset($data[$sFriendId])) {
return $data[$sFriendId];
}
return null;
}
Получаем привязку друга к юзеру(есть ли у юзера данный друг)
public array GetFriendsByArray(array $aUserId, int $sUserId)
| ||
$aUserId | array | Список ID пользователей проверяемых на дружбу |
$sUserId | int | ID пользователя у которого проверяем друзей |
{return} | array |
public function GetFriendsByArray($aUserId,$sUserId) {
if (!$aUserId) {
return array();
}
if (Config::Get('sys.cache.solid')) {
return $this->GetFriendsByArraySolid($aUserId,$sUserId);
}
if (!is_array($aUserId)) {
$aUserId=array($aUserId);
}
$aUserId=array_unique($aUserId);
$aFriends=array();
$aUserIdNotNeedQuery=array();
/**
* Делаем мульти-запрос к кешу
*/
$aCacheKeys=func_build_cache_keys($aUserId,'user_friend_','_'.$sUserId);
if (false !== ($data = $this->Cache_Get($aCacheKeys))) {
/**
* проверяем что досталось из кеша
*/
foreach ($aCacheKeys as $sValue => $sKey ) {
if (array_key_exists($sKey,$data)) {
if ($data[$sKey]) {
$aFriends[$data[$sKey]->getFriendId()]=$data[$sKey];
} else {
$aUserIdNotNeedQuery[]=$sValue;
}
}
}
}
/**
* Смотрим каких френдов не было в кеше и делаем запрос в БД
*/
$aUserIdNeedQuery=array_diff($aUserId,array_keys($aFriends));
$aUserIdNeedQuery=array_diff($aUserIdNeedQuery,$aUserIdNotNeedQuery);
$aUserIdNeedStore=$aUserIdNeedQuery;
if ($data = $this->oMapper->GetFriendsByArrayId($aUserIdNeedQuery,$sUserId)) {
foreach ($data as $oFriend) {
/**
* Добавляем к результату и сохраняем в кеш
*/
$aFriends[$oFriend->getFriendId($sUserId)]=$oFriend;
/**
* Тут кеш нужно будет продумать как-то по другому.
* Пока не трогаю, ибо этот код все равно не выполняется.
* by Kachaev
*/
$this->Cache_Set($oFriend, "user_friend_{$oFriend->getFriendId()}_{$oFriend->getUserId()}", array(), 60*60*24*4);
$aUserIdNeedStore=array_diff($aUserIdNeedStore,array($oFriend->getFriendId()));
}
}
/**
* Сохраняем в кеш запросы не вернувшие результата
*/
foreach ($aUserIdNeedStore as $sId) {
$this->Cache_Set(null, "user_friend_{$sId}_{$sUserId}", array(), 60*60*24*4);
}
/**
* Сортируем результат согласно входящему массиву
*/
$aFriends=func_array_sort_by_keys($aFriends,$aUserId);
return $aFriends;
}
Получить список отношений друзей
public array GetFriendsByArraySolid(array $aUserId, int $sUserId)
| ||
$aUserId | array | Список ID пользователей проверяемых на дружбу |
$sUserId | int | ID пользователя у которого проверяем друзей |
{return} | array |
public function GetFriendsByArraySolid($aUserId,$sUserId) {
if (!is_array($aUserId)) {
$aUserId=array($aUserId);
}
$aUserId=array_unique($aUserId);
$aFriends=array();
$s=join(',',$aUserId);
if (false === ($data = $this->Cache_Get("user_friend_{$sUserId}_id_{$s}"))) {
$data = $this->oMapper->GetFriendsByArrayId($aUserId,$sUserId);
foreach ($data as $oFriend) {
$aFriends[$oFriend->getFriendId($sUserId)]=$oFriend;
}
$this->Cache_Set($aFriends, "user_friend_{$sUserId}_id_{$s}", array("friend_change_user_{$sUserId}"), 60*60*24*1);
return $aFriends;
}
return $data;
}
Получить список отношений друзей используя единый кеш
public array GetGroupPrefixUser(int $iPrefixLength=1)
| ||
$iPrefixLength | int | Длина префикса |
{return} | array |
public function GetGroupPrefixUser($iPrefixLength=1) {
if (false === ($data = $this->Cache_Get("group_prefix_user_{$iPrefixLength}"))) {
$data = $this->oMapper->GetGroupPrefixUser($iPrefixLength);
$this->Cache_Set($data, "group_prefix_user_{$iPrefixLength}", array("user_new"), 60*60*24*1);
}
return $data;
}
Возвращает список префиксов логинов пользователей (для алфавитного указателя)
public ModuleUser_EntityInvite|null GetInviteByCode(string $sCode, int $iUsed=0)
| ||
$sCode | string | Код инвайта |
$iUsed | int | Флаг испольщования инвайта |
{return} | ModuleUser_EntityInvite|null |
public function GetInviteByCode($sCode,$iUsed=0) {
return $this->oMapper->GetInviteByCode($sCode,$iUsed);
}
Получает инвайт по его коду
public ModuleUser_EntityReminder|null GetReminderByCode(string $sCode)
| ||
$sCode | string | Код восстановления пароля |
{return} | ModuleUser_EntityReminder|null |
public function GetReminderByCode($sCode) {
return $this->oMapper->GetReminderByCode($sCode);
}
Получаем запись восстановления пароля по коду
public ModuleUser_EntitySession|null GetSessionByUserId(int $sUserId)
| ||
$sUserId | int | ID пользователя |
{return} | ModuleUser_EntitySession|null |
public function GetSessionByUserId($sUserId) {
$aSessions=$this->GetSessionsByArrayId($sUserId);
if (isset($aSessions[$sUserId])) {
return $aSessions[$sUserId];
}
return null;
}
Получает сессию юзера
public array GetSessionsByArrayId(array $aUserId)
| ||
$aUserId | array | Список ID пользователей |
{return} | array |
public function GetSessionsByArrayId($aUserId) {
if (!$aUserId) {
return array();
}
if (Config::Get('sys.cache.solid')) {
return $this->GetSessionsByArrayIdSolid($aUserId);
}
if (!is_array($aUserId)) {
$aUserId=array($aUserId);
}
$aUserId=array_unique($aUserId);
$aSessions=array();
$aUserIdNotNeedQuery=array();
/**
* Делаем мульти-запрос к кешу
*/
$aCacheKeys=func_build_cache_keys($aUserId,'user_session_');
if (false !== ($data = $this->Cache_Get($aCacheKeys))) {
/**
* проверяем что досталось из кеша
*/
foreach ($aCacheKeys as $sValue => $sKey ) {
if (array_key_exists($sKey,$data)) {
if ($data[$sKey] and $data[$sKey]['session']) {
$aSessions[$data[$sKey]['session']->getUserId()]=$data[$sKey]['session'];
} else {
$aUserIdNotNeedQuery[]=$sValue;
}
}
}
}
/**
* Смотрим каких юзеров не было в кеше и делаем запрос в БД
*/
$aUserIdNeedQuery=array_diff($aUserId,array_keys($aSessions));
$aUserIdNeedQuery=array_diff($aUserIdNeedQuery,$aUserIdNotNeedQuery);
$aUserIdNeedStore=$aUserIdNeedQuery;
if ($data = $this->oMapper->GetSessionsByArrayId($aUserIdNeedQuery)) {
foreach ($data as $oSession) {
/**
* Добавляем к результату и сохраняем в кеш
*/
$aSessions[$oSession->getUserId()]=$oSession;
$this->Cache_Set(array('time'=>time(),'session'=>$oSession), "user_session_{$oSession->getUserId()}", array(), 60*60*24*4);
$aUserIdNeedStore=array_diff($aUserIdNeedStore,array($oSession->getUserId()));
}
}
/**
* Сохраняем в кеш запросы не вернувшие результата
*/
foreach ($aUserIdNeedStore as $sId) {
$this->Cache_Set(array('time'=>time(),'session'=>null), "user_session_{$sId}", array(), 60*60*24*4);
}
/**
* Сортируем результат согласно входящему массиву
*/
$aSessions=func_array_sort_by_keys($aSessions,$aUserId);
return $aSessions;
}
Список сессий юзеров по ID
public array GetSessionsByArrayIdSolid(array $aUserId)
| ||
$aUserId | array | Список ID пользователей |
{return} | array |
public function GetSessionsByArrayIdSolid($aUserId) {
if (!is_array($aUserId)) {
$aUserId=array($aUserId);
}
$aUserId=array_unique($aUserId);
$aSessions=array();
$s=join(',',$aUserId);
if (false === ($data = $this->Cache_Get("user_session_id_{$s}"))) {
$data = $this->oMapper->GetSessionsByArrayId($aUserId);
foreach ($data as $oSession) {
$aSessions[$oSession->getUserId()]=$oSession;
}
$this->Cache_Set($aSessions, "user_session_id_{$s}", array("user_session_update"), 60*60*24*1);
return $aSessions;
}
return $data;
}
Получить список сессий по списку айдишников, но используя единый кеш
public array GetStatUsers()
| ||
{return} | array |
public function GetStatUsers() {
if (false === ($aStat = $this->Cache_Get("user_stats"))) {
$aStat['count_all']=$this->oMapper->GetCountUsers();
$sDate=date("Y-m-d H:i:s",time()-Config::Get('module.user.time_active'));
$aStat['count_active']=$this->oMapper->GetCountUsersActive($sDate);
$aStat['count_inactive']=$aStat['count_all']-$aStat['count_active'];
$aSex=$this->oMapper->GetCountUsersSex();
$aStat['count_sex_man']=(isset($aSex['man']) ? $aSex['man']['count'] : 0);
$aStat['count_sex_woman']=(isset($aSex['woman']) ? $aSex['woman']['count'] : 0);
$aStat['count_sex_other']=(isset($aSex['other']) ? $aSex['other']['count'] : 0);
$this->Cache_Set($aStat, "user_stats", array("user_update","user_new"), 60*60*24*4);
}
return $aStat;
}
Получить статистику по юзерам
public ModuleUser_EntityUser|null GetUserByActivateKey(string $sKey)
| ||
$sKey | string | Ключ активации |
{return} | ModuleUser_EntityUser|null |
public function GetUserByActivateKey($sKey) {
$id=$this->oMapper->GetUserByActivateKey($sKey);
return $this->GetUserById($id);
}
Получить юзера по ключу активации
public ModuleUser_EntityUser|null GetUserById(int $sId)
| ||
$sId | int | ID пользователя |
{return} | ModuleUser_EntityUser|null |
public function GetUserById($sId) {
if (!is_numeric($sId)) {
return null;
}
$aUsers=$this->GetUsersAdditionalData($sId);
if (isset($aUsers[$sId])) {
return $aUsers[$sId];
}
return null;
}
Получить юзера по айдишнику
public ModuleUser_EntityUser|null GetUserByLogin(string $sLogin)
| ||
$sLogin | string | Логин пользователя |
{return} | ModuleUser_EntityUser|null |
public function GetUserByLogin($sLogin) {
$s=strtolower($sLogin);
if (false === ($id = $this->Cache_Get("user_login_{$s}"))) {
if ($id = $this->oMapper->GetUserByLogin($sLogin)) {
$this->Cache_Set($id, "user_login_{$s}", array(), 60*60*24*1);
}
}
return $this->GetUserById($id);
}
Получить юзера по логину
public ModuleUser_EntityUser|null GetUserByMail(string $sMail)
| ||
$sMail | string | Емайл |
{return} | ModuleUser_EntityUser|null |
public function GetUserByMail($sMail) {
$id=$this->oMapper->GetUserByMail($sMail);
return $this->GetUserById($id);
}
Получить юзера по мылу
public ModuleUser_EntityUser|null GetUserBySessionKey(string $sKey)
| ||
$sKey | string | Сессионный ключ |
{return} | ModuleUser_EntityUser|null |
public function GetUserBySessionKey($sKey) {
$id=$this->oMapper->GetUserBySessionKey($sKey);
return $this->GetUserById($id);
}
Получить юзера по ключу сессии
public ModuleUser_EntityChangemail|null GetUserChangemailByCodeFrom(string $sCode)
| ||
$sCode | string | Код подтверждения |
{return} | ModuleUser_EntityChangemail|null |
public function GetUserChangemailByCodeFrom($sCode) {
return $this->oMapper->GetUserChangemailByCodeFrom($sCode);
}
Возвращает объект смены емайла по коду подтверждения
public ModuleUser_EntityChangemail|null GetUserChangemailByCodeTo(string $sCode)
| ||
$sCode | string | Код подтверждения |
{return} | ModuleUser_EntityChangemail|null |
public function GetUserChangemailByCodeTo($sCode) {
return $this->oMapper->GetUserChangemailByCodeTo($sCode);
}
Возвращает объект смены емайла по коду подтверждения
public ModuleUser_EntityUser|null GetUserCurrent()
| ||
{return} | ModuleUser_EntityUser|null |
public function GetUserCurrent() {
return $this->oUserCurrent;
}
Получить текущего юзера
public array GetUserFieldTypes()
| ||
{return} | array |
public function GetUserFieldTypes() {
return $this->aUserFieldTypes;
}
Возвращает список типов полей
public ModuleUser_EntityUser|null GetUserInviteFrom(int $sUserIdTo)
| ||
$sUserIdTo | int | ID пользователя |
{return} | ModuleUser_EntityUser|null |
public function GetUserInviteFrom($sUserIdTo) {
if (false === ($id = $this->Cache_Get("user_invite_from_{$sUserIdTo}"))) {
$id = $this->oMapper->GetUserInviteFrom($sUserIdTo);
$this->Cache_Set($id, "user_invite_from_{$sUserIdTo}", array("invate_new_to_{$sUserIdTo}"), 60*60*24*1);
}
return $this->GetUserById($id);
}
Получает юзера который пригласил
public array GetUserItemsByArrayId(array $aUserId)
| ||
$aUserId | array | Список ID пользователей |
{return} | array |
public function GetUserItemsByArrayId($aUserId) {
return $this->GetUsersByArrayId($aUserId);
}
Алиас для корректной работы ORM
public ModuleUser_EntityNote GetUserNote(int $iTargetUserId, int $iUserId)
| ||
$iTargetUserId | int | ID пользователя о ком заметка |
$iUserId | int | ID пользователя автора заметки |
{return} | ModuleUser_EntityNote |
public function GetUserNote($iTargetUserId,$iUserId) {
return $this->oMapper->GetUserNote($iTargetUserId,$iUserId);
}
Возвращет заметку по автору и пользователю
public ModuleUser_EntityNote GetUserNoteById(int $iId)
| ||
$iId | int | ID заметки |
{return} | ModuleUser_EntityNote |
public function GetUserNoteById($iId) {
return $this->oMapper->GetUserNoteById($iId);
}
Возвращает заметку по ID
public array GetUserNotesByArray(array $aUserId, int $sUserId)
| ||
$aUserId | array | Список ID целевых пользователей |
$sUserId | int | ID пользователя, кто оставлял заметки |
{return} | array |
public function GetUserNotesByArray($aUserId,$sUserId) {
if (!$aUserId) {
return array();
}
if (!is_array($aUserId)) {
$aUserId=array($aUserId);
}
$aUserId=array_unique($aUserId);
$aNotes=array();
$s=join(',',$aUserId);
if (false === ($data = $this->Cache_Get("user_notes_{$sUserId}_id_{$s}"))) {
$data = $this->oMapper->GetUserNotesByArrayUserId($aUserId,$sUserId);
foreach ($data as $oNote) {
$aNotes[$oNote->getTargetUserId()]=$oNote;
}
$this->Cache_Set($aNotes, "user_notes_{$sUserId}_id_{$s}", array("user_note_change_by_user_{$sUserId}"), 60*60*24*1);
return $aNotes;
}
return $data;
}
Возвращает список заметок пользователя по ID целевых юзеров
public array('collection'=>array,'count'=>int) GetUserNotesByUserId(int $iUserId, int $iCurrPage, int $iPerPage)
| ||
$iUserId | int | ID пользователя |
$iCurrPage | int | Номер страницы |
$iPerPage | int | Количество элементов на страницу |
{return} | array('collection'=>array,'count'=>int) |
public function GetUserNotesByUserId($iUserId,$iCurrPage,$iPerPage) {
$aResult=$this->oMapper->GetUserNotesByUserId($iUserId,$iCount,$iCurrPage,$iPerPage);
/**
* Цепляем пользователей
*/
$aUserId=array();
foreach($aResult as $oNote) {
$aUserId[]=$oNote->getTargetUserId();
}
$aUsers=$this->GetUsersAdditionalData($aUserId,array());
foreach($aResult as $oNote) {
if (isset($aUsers[$oNote->getTargetUserId()])) {
$oNote->setTargetUser($aUsers[$oNote->getTargetUserId()]);
} else {
$oNote->setTargetUser(Engine::GetEntity('User')); // пустого пользователя во избеания ошибок, т.к. пользователь всегда должен быть
}
}
return array('collection'=>$aResult,'count'=>$iCount);
}
Возвращает список заметок пользователя
public array GetUsersAdditionalData(array $aUserId, array|null $aAllowData=NULL)
| ||
$aUserId | array | Список ID пользователей |
$aAllowData | array|null | Список типод дополнительных данных для подгрузки у пользователей |
{return} | array |
public function GetUsersAdditionalData($aUserId,$aAllowData=null) {
if (is_null($aAllowData)) {
$aAllowData=array('vote','session','friend','geo_target','note');
}
func_array_simpleflip($aAllowData);
if (!is_array($aUserId)) {
$aUserId=array($aUserId);
}
/**
* Получаем юзеров
*/
$aUsers=$this->GetUsersByArrayId($aUserId);
/**
* Получаем дополнительные данные
*/
$aSessions=array();
$aFriends=array();
$aVote=array();
$aGeoTargets=array();
$aNotes=array();
if (isset($aAllowData['session'])) {
$aSessions=$this->GetSessionsByArrayId($aUserId);
}
if (isset($aAllowData['friend']) and $this->oUserCurrent) {
$aFriends=$this->GetFriendsByArray($aUserId,$this->oUserCurrent->getId());
}
if (isset($aAllowData['vote']) and $this->oUserCurrent) {
$aVote=$this->Vote_GetVoteByArray($aUserId,'user',$this->oUserCurrent->getId());
}
if (isset($aAllowData['geo_target'])) {
$aGeoTargets=$this->Geo_GetTargetsByTargetArray('user',$aUserId);
}
if (isset($aAllowData['note']) and $this->oUserCurrent) {
$aNotes=$this->GetUserNotesByArray($aUserId,$this->oUserCurrent->getId());
}
/**
* Добавляем данные к результату
*/
foreach ($aUsers as $oUser) {
if (isset($aSessions[$oUser->getId()])) {
$oUser->setSession($aSessions[$oUser->getId()]);
} else {
$oUser->setSession(null); // или $oUser->setSession(new ModuleUser_EntitySession());
}
if ($aFriends&&isset($aFriends[$oUser->getId()])) {
$oUser->setUserFriend($aFriends[$oUser->getId()]);
} else {
$oUser->setUserFriend(null);
}
if (isset($aVote[$oUser->getId()])) {
$oUser->setVote($aVote[$oUser->getId()]);
} else {
$oUser->setVote(null);
}
if (isset($aGeoTargets[$oUser->getId()])) {
$aTargets=$aGeoTargets[$oUser->getId()];
$oUser->setGeoTarget(isset($aTargets[0]) ? $aTargets[0] : null);
} else {
$oUser->setGeoTarget(null);
}
if (isset($aAllowData['note'])) {
if (isset($aNotes[$oUser->getId()])) {
$oUser->setUserNote($aNotes[$oUser->getId()]);
} else {
$oUser->setUserNote(false);
}
}
}
return $aUsers;
}
Получает дополнительные данные(объекты) для юзеров по их ID
public array GetUsersByArrayId(array $aUserId)
| ||
$aUserId | array | Список ID пользователей |
{return} | array |
public function GetUsersByArrayId($aUserId) {
if (!$aUserId) {
return array();
}
if (Config::Get('sys.cache.solid')) {
return $this->GetUsersByArrayIdSolid($aUserId);
}
if (!is_array($aUserId)) {
$aUserId=array($aUserId);
}
$aUserId=array_unique($aUserId);
$aUsers=array();
$aUserIdNotNeedQuery=array();
/**
* Делаем мульти-запрос к кешу
*/
$aCacheKeys=func_build_cache_keys($aUserId,'user_');
if (false !== ($data = $this->Cache_Get($aCacheKeys))) {
/**
* проверяем что досталось из кеша
*/
foreach ($aCacheKeys as $sValue => $sKey ) {
if (array_key_exists($sKey,$data)) {
if ($data[$sKey]) {
$aUsers[$data[$sKey]->getId()]=$data[$sKey];
} else {
$aUserIdNotNeedQuery[]=$sValue;
}
}
}
}
/**
* Смотрим каких юзеров не было в кеше и делаем запрос в БД
*/
$aUserIdNeedQuery=array_diff($aUserId,array_keys($aUsers));
$aUserIdNeedQuery=array_diff($aUserIdNeedQuery,$aUserIdNotNeedQuery);
$aUserIdNeedStore=$aUserIdNeedQuery;
if ($data = $this->oMapper->GetUsersByArrayId($aUserIdNeedQuery)) {
foreach ($data as $oUser) {
/**
* Добавляем к результату и сохраняем в кеш
*/
$aUsers[$oUser->getId()]=$oUser;
$this->Cache_Set($oUser, "user_{$oUser->getId()}", array(), 60*60*24*4);
$aUserIdNeedStore=array_diff($aUserIdNeedStore,array($oUser->getId()));
}
}
/**
* Сохраняем в кеш запросы не вернувшие результата
*/
foreach ($aUserIdNeedStore as $sId) {
$this->Cache_Set(null, "user_{$sId}", array(), 60*60*24*4);
}
/**
* Сортируем результат согласно входящему массиву
*/
$aUsers=func_array_sort_by_keys($aUsers,$aUserId);
return $aUsers;
}
Список юзеров по ID
public array GetUsersByArrayIdSolid(array $aUserId)
| ||
$aUserId | array | Список ID пользователей |
{return} | array |
public function GetUsersByArrayIdSolid($aUserId) {
if (!is_array($aUserId)) {
$aUserId=array($aUserId);
}
$aUserId=array_unique($aUserId);
$aUsers=array();
$s=join(',',$aUserId);
if (false === ($data = $this->Cache_Get("user_id_{$s}"))) {
$data = $this->oMapper->GetUsersByArrayId($aUserId);
foreach ($data as $oUser) {
$aUsers[$oUser->getId()]=$oUser;
}
$this->Cache_Set($aUsers, "user_id_{$s}", array("user_update","user_new"), 60*60*24*1);
return $aUsers;
}
return $data;
}
Получение пользователей по списку ID используя общий кеш
public array GetUsersByDateLast(int $iLimit=20)
| ||
$iLimit | int | Количество |
{return} | array |
public function GetUsersByDateLast($iLimit=20) {
if ($this->IsAuthorization()) {
$data=$this->oMapper->GetUsersByDateLast($iLimit);
} elseif (false === ($data = $this->Cache_Get("user_date_last_{$iLimit}"))) {
$data = $this->oMapper->GetUsersByDateLast($iLimit);
$this->Cache_Set($data, "user_date_last_{$iLimit}", array("user_session_update"), 60*60*24*2);
}
$data=$this->GetUsersAdditionalData($data);
return $data;
}
Получить список юзеров по дате последнего визита
public array GetUsersByDateRegister(int $iLimit=20)
| ||
$iLimit | int | Количество |
{return} | array |
public function GetUsersByDateRegister($iLimit=20) {
$aResult=$this->GetUsersByFilter(array('activate'=>1),array('id'=>'desc'),1,$iLimit);
return $aResult['collection'];
}
Получить список юзеров по дате регистрации
public array('collection'=>array,'count'=>int) GetUsersByFilter(array $aFilter, array $aOrder, int $iCurrPage, int $iPerPage, array $aAllowData=NULL)
| ||
$aFilter | array | Фильтр |
$aOrder | array | Сортировка |
$iCurrPage | int | Номер страницы |
$iPerPage | int | Количество элментов на страницу |
$aAllowData | array | Список типо данных для подгрузки к пользователям |
{return} | array('collection'=>array,'count'=>int) |
public function GetUsersByFilter($aFilter,$aOrder,$iCurrPage,$iPerPage,$aAllowData=null) {
$sKey="user_filter_".serialize($aFilter).serialize($aOrder)."_{$iCurrPage}_{$iPerPage}";
if (false === ($data = $this->Cache_Get($sKey))) {
$data = array('collection'=>$this->oMapper->GetUsersByFilter($aFilter,$aOrder,$iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
$this->Cache_Set($data, $sKey, array("user_update","user_new"), 60*60*24*2);
}
$data['collection']=$this->GetUsersAdditionalData($data['collection'],$aAllowData);
return $data;
}
Возвращает список пользователей по фильтру
public array GetUsersByLoginLike(string $sUserLogin, int $iLimit)
| ||
$sUserLogin | string | Логин |
$iLimit | int | Количество |
{return} | array |
public function GetUsersByLoginLike($sUserLogin,$iLimit) {
if (false === ($data = $this->Cache_Get("user_like_{$sUserLogin}_{$iLimit}"))) {
$data = $this->oMapper->GetUsersByLoginLike($sUserLogin,$iLimit);
$this->Cache_Set($data, "user_like_{$sUserLogin}_{$iLimit}", array("user_new"), 60*60*24*2);
}
$data=$this->GetUsersAdditionalData($data);
return $data;
}
Получить список юзеров по первым буквам логина
public array GetUsersFriend(int $sUserId, int $iPage=1, int $iPerPage=10)
| ||
$sUserId | int | ID пользователя |
$iPage | int | Номер страницы |
$iPerPage | int | Количество элементов на страницу |
{return} | array |
public function GetUsersFriend($sUserId,$iPage=1,$iPerPage=10) {
$sKey="user_friend_{$sUserId}_{$iPage}_{$iPerPage}";
if (false === ($data = $this->Cache_Get($sKey))) {
$data = array('collection'=>$this->oMapper->GetUsersFriend($sUserId,$iCount,$iPage,$iPerPage),'count'=>$iCount);
$this->Cache_Set($data, $sKey, array("friend_change_user_{$sUserId}"), 60*60*24*2);
}
$data['collection']=$this->GetUsersAdditionalData($data['collection']);
return $data;
}
Получает список друзей
public array GetUsersInvite(int $sUserId)
| ||
$sUserId | int | ID пользователя |
{return} | array |
public function GetUsersInvite($sUserId) {
if (false === ($data = $this->Cache_Get("users_invite_{$sUserId}"))) {
$data = $this->oMapper->GetUsersInvite($sUserId);
$this->Cache_Set($data, "users_invite_{$sUserId}", array("invate_new_from_{$sUserId}"), 60*60*24*1);
}
$data=$this->GetUsersAdditionalData($data);
return $data;
}
Получает список приглашенных юзеров
public void Init()
|
public function Init() {
$this->oMapper=Engine::GetMapper(__CLASS__);
/**
* Проверяем есть ли у юзера сессия, т.е. залогинен или нет
*/
$sUserId=$this->Session_Get('user_id');
if ($sUserId and $oUser=$this->GetUserById($sUserId) and $oUser->getActivate()) {
if ($this->oSession=$oUser->getSession()) {
/**
* Сюда можно вставить условие на проверку айпишника сессии
*/
$this->oUserCurrent=$oUser;
}
}
/**
* Запускаем автозалогинивание
* В куках стоит время на сколько запоминать юзера
*/
$this->AutoLogin();
/**
* Обновляем сессию
*/
if (isset($this->oSession)) {
$this->UpdateSession();
}
}
Инициализация
public bool IsAuthorization()
| ||
{return} | bool |
public function IsAuthorization() {
if ($this->oUserCurrent) {
return true;
} else {
return false;
}
}
Авторизован ли юзер
public void Logout()
|
public function Logout() {
$this->oUserCurrent=null;
$this->oSession=null;
/**
* Дропаем из сессии
*/
$this->Session_Drop('user_id');
/**
* Дропаем куку
*/
setcookie('key','',1,Config::Get('sys.cookie.path'),Config::Get('sys.cookie.host'));
}
Разлогинивание
public bool|ModuleUser_EntityChangemail MakeUserChangemail(ModuleUser_EntityUser $oUser, string $sMailNew)
| ||
$oUser | ModuleUser_EntityUser | Объект пользователя |
$sMailNew | string | Новый емайл |
{return} | bool|ModuleUser_EntityChangemail |
public function MakeUserChangemail($oUser,$sMailNew) {
$oChangemail=Engine::GetEntity('ModuleUser_EntityChangemail');
$oChangemail->setUserId($oUser->getId());
$oChangemail->setDateAdd(date("Y-m-d H:i:s"));
$oChangemail->setDateExpired(date("Y-m-d H:i:s",time()+3*24*60*60)); // 3 дня для смены емайла
$oChangemail->setMailFrom($oUser->getMail() ? $oUser->getMail() : '');
$oChangemail->setMailTo($sMailNew);
$oChangemail->setCodeFrom(func_generator(32));
$oChangemail->setCodeTo(func_generator(32));
if ($this->AddUserChangemail($oChangemail)) {
/**
* Если у пользователя раньше не было емайла, то сразу шлем подтверждение на новый емайл
*/
if (!$oChangemail->getMailFrom()) {
$oChangemail->setConfirmFrom(1);
$this->User_UpdateUserChangemail($oChangemail);
/**
* Отправляем уведомление на новый емайл
*/
$this->Notify_Send($oChangemail->getMailTo(),
'notify.user_changemail_to.tpl',
$this->Lang_Get('notify_subject_user_changemail'),
array(
'oUser' => $oUser,
'oChangemail' => $oChangemail,
));
} else {
/**
* Отправляем уведомление на старый емайл
*/
$this->Notify_Send($oUser,
'notify.user_changemail_from.tpl',
$this->Lang_Get('notify_subject_user_changemail'),
array(
'oUser' => $oUser,
'oChangemail' => $oChangemail,
));
}
return $oChangemail;
}
return false;
}
Формирование процесса смены емайла в профиле пользователя
public bool|ModuleUser_EntityNote SaveNote(ModuleUser_EntityNote $oNote)
| ||
$oNote | ModuleUser_EntityNote | Объект заметки |
{return} | bool|ModuleUser_EntityNote |
public function SaveNote($oNote) {
if (!$oNote->getDateAdd()) {
$oNote->setDateAdd(date("Y-m-d H:i:s"));
}
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("user_note_change_by_user_{$oNote->getUserId()}"));
if ($oNoteOld=$this->GetUserNote($oNote->getTargetUserId(),$oNote->getUserId()) ) {
$oNoteOld->setText($oNote->getText());
$this->oMapper->UpdateUserNote($oNoteOld);
return $oNoteOld;
} else {
if ($iId=$this->oMapper->AddUserNote($oNote)) {
$oNote->setId($iId);
return $oNote;
}
}
return false;
}
Сохраняет заметку в БД, если ее нет то создает новую
public void Shutdown()
|
public function Shutdown() {
if ($this->oUserCurrent) {
$this->Viewer_Assign('iUserCurrentCountTalkNew',$this->Talk_GetCountTalkNew($this->oUserCurrent->getId()));
$this->Viewer_Assign('iUserCurrentCountTopicDraft',$this->Topic_GetCountDraftTopicsByUserId($this->oUserCurrent->getId()));
}
$this->Viewer_Assign('oUserCurrent',$this->oUserCurrent);
}
При завершенни модуля загружаем в шалон объект текущего юзера
public bool Update(ModuleUser_EntityUser $oUser)
| ||
$oUser | ModuleUser_EntityUser | Объект пользователя |
{return} | bool |
public function Update(ModuleUser_EntityUser $oUser) {
//чистим зависимые кеши
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array('user_update'));
$this->Cache_Delete("user_{$oUser->getId()}");
return $this->oMapper->Update($oUser);
}
Обновляет юзера
public bool UpdateFriend(ModuleUser_EntityFriend $oFriend)
| ||
$oFriend | ModuleUser_EntityFriend | Объект дружбы(связи пользователей) |
{return} | bool |
public function UpdateFriend(ModuleUser_EntityFriend $oFriend) {
//чистим зависимые кеши
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("friend_change_user_{$oFriend->getUserFrom()}","friend_change_user_{$oFriend->getUserTo()}"));
$this->Cache_Delete("user_friend_{$oFriend->getUserFrom()}_{$oFriend->getUserTo()}");
$this->Cache_Delete("user_friend_{$oFriend->getUserTo()}_{$oFriend->getUserFrom()}");
return $this->oMapper->UpdateFriend($oFriend);
}
Обновляет информацию о друге
public bool UpdateInvite(ModuleUser_EntityInvite $oInvite)
| ||
$oInvite | ModuleUser_EntityInvite | бъект инвайта |
{return} | bool |
public function UpdateInvite(ModuleUser_EntityInvite $oInvite) {
//чистим зависимые кеши
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("invate_new_to_{$oInvite->getUserToId()}","invate_new_from_{$oInvite->getUserFromId()}"));
return $this->oMapper->UpdateInvite($oInvite);
}
Обновляет инвайт
public bool UpdateReminder(ModuleUser_EntityReminder $oReminder)
| ||
$oReminder | ModuleUser_EntityReminder | Объект восстановления пароля |
{return} | bool |
public function UpdateReminder(ModuleUser_EntityReminder $oReminder) {
return $this->oMapper->UpdateReminder($oReminder);
}
Сохраняем воспомнинание(восстановление) пароля
protected void UpdateSession()
|
protected function UpdateSession() {
$this->oSession->setDateLast(date("Y-m-d H:i:s"));
$this->oSession->setIpLast(func_getIp());
if (false === ($data = $this->Cache_Get("user_session_{$this->oSession->getUserId()}"))) {
$data=array(
'time'=>time(),
'session'=>$this->oSession
);
} else {
$data['session']=$this->oSession;
}
if (!Config::Get('sys.cache.use') or $data['time']<time()-60*10) {
$data['time']=time();
$this->oMapper->UpdateSession($this->oSession);
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array('user_session_update'));
}
$this->Cache_Set($data, "user_session_{$this->oSession->getUserId()}", array(), 60*60*24*4);
}
Обновление данных сессии Важный момент: сессию обновляем в кеше и раз в 10 минут скидываем в БД
public int UpdateUserChangemail(ModuleUser_EntityChangemail $oChangemail)
| ||
$oChangemail | ModuleUser_EntityChangemail | Объект смены емайла |
{return} | int |
public function UpdateUserChangemail($oChangemail) {
return $this->oMapper->UpdateUserChangemail($oChangemail);
}
Обновляет запись о смене емайла
public string|bool UploadAvatar(string $sFileTmp, ModuleUser_EntityUser $oUser, array $aSize=array (
))
| ||
$sFileTmp | string | Серверный путь до временного аватара |
$oUser | ModuleUser_EntityUser | Объект пользователя |
$aSize | array | Размер области из которой нужно вырезать картинку - array('x1'=>0,'y1'=>0,'x2'=>100,'y2'=>100) |
{return} | string|bool |
public function UploadAvatar($sFileTmp,$oUser,$aSize=array()) {
if (!file_exists($sFileTmp)) {
return false;
}
$sPath = $this->Image_GetIdDir($oUser->getId());
$aParams=$this->Image_BuildParams('avatar');
/**
* Срезаем квадрат
*/
$oImage = $this->Image_CreateImageObject($sFileTmp);
/**
* Если объект изображения не создан,
* возвращаем ошибку
*/
if($sError=$oImage->get_last_error()) {
// Вывод сообщения об ошибки, произошедшей при создании объекта изображения
// $this->Message_AddError($sError,$this->Lang_Get('error'));
@unlink($sFileTmp);
return false;
}
if (!$aSize) {
$oImage = $this->Image_CropSquare($oImage);
$oImage->set_jpg_quality($aParams['jpg_quality']);
$oImage->output(null,$sFileTmp);
} else {
$iWSource=$oImage->get_image_params('width');
$iHSource=$oImage->get_image_params('height');
/**
* Достаем переменные x1 и т.п. из $aSize
*/
extract($aSize,EXTR_PREFIX_SAME,'ops');
if ($x1>$x2) {
// меняем значения переменных
$x1 = $x1 + $x2;
$x2 = $x1 - $x2;
$x1 = $x1 - $x2;
}
if ($y1>$y2) {
$y1 = $y1 + $y2;
$y2 = $y1 - $y2;
$y1 = $y1 - $y2;
}
if ($x1<0) {
$x1=0;
}
if ($y1<0) {
$y1=0;
}
if ($x2>$iWSource) {
$x2=$iWSource;
}
if ($y2>$iHSource) {
$y2=$iHSource;
}
$iW=$x2-$x1;
// Допускаем минимальный клип в 32px (исключая маленькие изображения)
if ($iW<32 && $x1+32<=$iWSource) {
$iW=32;
}
$iH=$iW;
if ($iH+$y1>$iHSource) {
$iH=$iHSource-$y1;
}
$oImage->crop($iW,$iH,$x1,$y1);
$oImage->output(null,$sFileTmp);
}
if ($sFileAvatar=$this->Image_Resize($sFileTmp,$sPath,'avatar_100x100',Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),100,100,false,$aParams)) {
$aSize=Config::Get('module.user.avatar_size');
foreach ($aSize as $iSize) {
if ($iSize==0) {
$this->Image_Resize($sFileTmp,$sPath,'avatar',Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),null,null,false,$aParams);
} else {
$this->Image_Resize($sFileTmp,$sPath,"avatar_{$iSize}x{$iSize}",Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),$iSize,$iSize,false,$aParams);
}
}
@unlink($sFileTmp);
/**
* Если все нормально, возвращаем расширение загруженного аватара
*/
return $this->Image_GetWebPath($sFileAvatar);
}
@unlink($sFileTmp);
/**
* В случае ошибки, возвращаем false
*/
return false;
}
Загрузка аватара пользователя
public string|bool UploadFoto(string $sFileTmp, ModuleUser_EntityUser $oUser, array $aSize=array (
))
| ||
$sFileTmp | string | Серверный путь до временной фотографии |
$oUser | ModuleUser_EntityUser | Объект пользователя |
$aSize | array | Размер области из которой нужно вырезать картинку - array('x1'=>0,'y1'=>0,'x2'=>100,'y2'=>100) |
{return} | string|bool |
public function UploadFoto($sFileTmp,$oUser,$aSize=array()) {
if (!file_exists($sFileTmp)) {
return false;
}
$sDirUpload=$this->Image_GetIdDir($oUser->getId());
$aParams=$this->Image_BuildParams('foto');
if ($aSize) {
$oImage = $this->Image_CreateImageObject($sFileTmp);
/**
* Если объект изображения не создан,
* возвращаем ошибку
*/
if($sError=$oImage->get_last_error()) {
// Вывод сообщения об ошибки, произошедшей при создании объекта изображения
// $this->Message_AddError($sError,$this->Lang_Get('error'));
@unlink($sFileTmp);
return false;
}
$iWSource=$oImage->get_image_params('width');
$iHSource=$oImage->get_image_params('height');
/**
* Достаем переменные x1 и т.п. из $aSize
*/
extract($aSize,EXTR_PREFIX_SAME,'ops');
if ($x1>$x2) {
// меняем значения переменных
$x1 = $x1 + $x2;
$x2 = $x1 - $x2;
$x1 = $x1 - $x2;
}
if ($y1>$y2) {
$y1 = $y1 + $y2;
$y2 = $y1 - $y2;
$y1 = $y1 - $y2;
}
if ($x1<0) {
$x1=0;
}
if ($y1<0) {
$y1=0;
}
if ($x2>$iWSource) {
$x2=$iWSource;
}
if ($y2>$iHSource) {
$y2=$iHSource;
}
$iW=$x2-$x1;
// Допускаем минимальный клип в 32px (исключая маленькие изображения)
if ($iW<32 && $x1+32<=$iWSource) {
$iW=32;
}
$iH=$y2-$y1;
$oImage->crop($iW,$iH,$x1,$y1);
$oImage->output(null,$sFileTmp);
}
if ($sFileFoto=$this->Image_Resize($sFileTmp,$sDirUpload,func_generator(6),Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),Config::Get('module.user.profile_photo_width'),null,true,$aParams)) {
@unlink($sFileTmp);
/**
* удаляем старое фото
*/
$this->DeleteFoto($oUser);
return $this->Image_GetWebPath($sFileFoto);
}
@unlink($sFileTmp);
return false;
}
загрузка фотографии пользователя
public bool addUserField(ModuleUser_EntityField $oField)
| ||
$oField | ModuleUser_EntityField | Объект пользовательского поля |
{return} | bool |
public function addUserField($oField) {
return $this->oMapper->addUserField($oField);
}
Добавить поле
public bool deleteUserField(int $iId)
| ||
$iId | int | ID пользовательского поля |
{return} | bool |
public function deleteUserField($iId) {
return $this->oMapper->deleteUserField($iId);
}
Удалить поле
public string getUserFieldValueByName(int $iUserId, string $sName)
| ||
$iUserId | int | ID пользователя |
$sName | string | Имя поля |
{return} | string |
public function getUserFieldValueByName($iUserId, $sName) {
return $this->oMapper->getUserFieldValueByName($iUserId, $sName);
}
Получить по имени поля его значение дял определённого пользователя
public array getUserFields(array|null $aType=NULL)
| ||
$aType | array|null | Типы полей, null - все типы |
{return} | array |
public function getUserFields($aType=null) {
return $this->oMapper->getUserFields($aType);
}
Получить дополнительные поля профиля пользователя
public array getUserFieldsValues(int $iUserId, bool $bOnlyNoEmpty=true, array $aType=array (
0 => '',
))
| ||
$iUserId | int | ID пользователя |
$bOnlyNoEmpty | bool | Загружать только непустые поля |
$aType | array | Типы полей, null - все типы |
{return} | array |
public function getUserFieldsValues($iUserId, $bOnlyNoEmpty = true, $aType=array('')) {
return $this->oMapper->getUserFieldsValues($iUserId, $bOnlyNoEmpty, $aType);
}
Получить значения дополнительных полей профиля пользователя
public bool setUserFieldsValues(int $iUserId, array $aFields, int $iCountMax=1)
| ||
$iUserId | int | ID пользователя |
$aFields | array | Ассоциативный массив полей id => value |
$iCountMax | int | Максимальное количество одинаковых полей |
{return} | bool |
public function setUserFieldsValues($iUserId, $aFields, $iCountMax=1) {
return $this->oMapper->setUserFieldsValues($iUserId, $aFields, $iCountMax);
}
Установить значения дополнительных полей профиля пользователя
public bool updateUserField(ModuleUser_EntityField $oField)
| ||
$oField | ModuleUser_EntityField | Объект пользовательского поля |
{return} | bool |
public function updateUserField($oField) {
return $this->oMapper->updateUserField($oField);
}
Изменить поле
public bool userFieldExistsById(int $iId)
| ||
$iId | int | ID поля |
{return} | bool |
public function userFieldExistsById($iId) {
return $this->oMapper->userFieldExistsById($iId);
}
Проверяет существует ли поле с таким ID
public bool userFieldExistsByName(string $sName, int|null $iId=NULL)
| ||
$sName | string | Имя поля |
$iId | int|null | ID поля |
{return} | bool |
public function userFieldExistsByName($sName, $iId = null) {
return $this->oMapper->userFieldExistsByName($sName, $iId);
}
Проверяет существует ли поле с таким именем