mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-05-19 17:28:23 +03:00
Документация классов
This commit is contained in:
parent
318e26fae4
commit
0a7c5a53c1
|
@ -80,8 +80,6 @@ class ModuleUser extends Module {
|
|||
* В куках стоит время на сколько запоминать юзера
|
||||
*/
|
||||
$this->AutoLogin();
|
||||
|
||||
$this->oMapper->SetUserCurrent($this->oUserCurrent);
|
||||
/**
|
||||
* Обновляем сессию
|
||||
*/
|
||||
|
@ -1371,7 +1369,6 @@ class ModuleUser extends Module {
|
|||
public function GetCountUserNotesByUserId($iUserId) {
|
||||
return $this->oMapper->GetCountUserNotesByUserId($iUserId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращет заметку по автору и пользователю
|
||||
*
|
||||
|
|
|
@ -15,13 +15,19 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Маппер для работы с БД
|
||||
*
|
||||
* @package modules.user
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleUser_MapperUser extends Mapper {
|
||||
protected $oUserCurrent=null;
|
||||
|
||||
public function SetUserCurrent($oUserCurrent) {
|
||||
$this->oUserCurrent=$oUserCurrent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет юзера
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя
|
||||
* @return int|bool
|
||||
*/
|
||||
public function Add(ModuleUser_EntityUser $oUser) {
|
||||
$sql = "INSERT INTO ".Config::Get('db.table.user')."
|
||||
(user_login,
|
||||
|
@ -39,7 +45,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновляет юзера
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя
|
||||
* @return bool
|
||||
*/
|
||||
public function Update(ModuleUser_EntityUser $oUser) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.user')."
|
||||
SET
|
||||
|
@ -70,36 +81,40 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
WHERE user_id = ?
|
||||
";
|
||||
if ($this->oDb->query($sql,$oUser->getPassword(),
|
||||
$oUser->getMail(),
|
||||
$oUser->getSkill(),
|
||||
$oUser->getDateActivate(),
|
||||
$oUser->getDateCommentLast(),
|
||||
$oUser->getRating(),
|
||||
$oUser->getCountVote(),
|
||||
$oUser->getActivate(),
|
||||
$oUser->getActivateKey(),
|
||||
$oUser->getProfileName(),
|
||||
$oUser->getProfileSex(),
|
||||
$oUser->getProfileCountry(),
|
||||
$oUser->getProfileRegion(),
|
||||
$oUser->getProfileCity(),
|
||||
$oUser->getProfileBirthday(),
|
||||
$oUser->getProfileAbout(),
|
||||
$oUser->getProfileDate(),
|
||||
$oUser->getProfileAvatar(),
|
||||
$oUser->getProfileFoto(),
|
||||
$oUser->getSettingsNoticeNewTopic(),
|
||||
$oUser->getSettingsNoticeNewComment(),
|
||||
$oUser->getSettingsNoticeNewTalk(),
|
||||
$oUser->getSettingsNoticeReplyComment(),
|
||||
$oUser->getSettingsNoticeNewFriend(),
|
||||
$oUser->getId())) {
|
||||
$oUser->getMail(),
|
||||
$oUser->getSkill(),
|
||||
$oUser->getDateActivate(),
|
||||
$oUser->getDateCommentLast(),
|
||||
$oUser->getRating(),
|
||||
$oUser->getCountVote(),
|
||||
$oUser->getActivate(),
|
||||
$oUser->getActivateKey(),
|
||||
$oUser->getProfileName(),
|
||||
$oUser->getProfileSex(),
|
||||
$oUser->getProfileCountry(),
|
||||
$oUser->getProfileRegion(),
|
||||
$oUser->getProfileCity(),
|
||||
$oUser->getProfileBirthday(),
|
||||
$oUser->getProfileAbout(),
|
||||
$oUser->getProfileDate(),
|
||||
$oUser->getProfileAvatar(),
|
||||
$oUser->getProfileFoto(),
|
||||
$oUser->getSettingsNoticeNewTopic(),
|
||||
$oUser->getSettingsNoticeNewComment(),
|
||||
$oUser->getSettingsNoticeNewTalk(),
|
||||
$oUser->getSettingsNoticeReplyComment(),
|
||||
$oUser->getSettingsNoticeNewFriend(),
|
||||
$oUser->getId())) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получить юзера по ключу сессии
|
||||
*
|
||||
* @param string $sKey Сессионный ключ
|
||||
* @return int|null
|
||||
*/
|
||||
public function GetUserBySessionKey($sKey) {
|
||||
$sql = "SELECT
|
||||
s.user_id
|
||||
|
@ -113,7 +128,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Создание пользовательской сессии
|
||||
*
|
||||
* @param ModuleUser_EntitySession $oSession
|
||||
* @return bool
|
||||
*/
|
||||
public function CreateSession(ModuleUser_EntitySession $oSession) {
|
||||
$sql = "REPLACE INTO ".Config::Get('db.table.session')."
|
||||
SET
|
||||
|
@ -126,7 +146,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
";
|
||||
return $this->oDb->query($sql,$oSession->getKey(), $oSession->getUserId(), $oSession->getIpCreate(), $oSession->getIpLast(), $oSession->getDateCreate(), $oSession->getDateLast());
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновление данных сессии
|
||||
*
|
||||
* @param ModuleUser_EntitySession $oSession
|
||||
* @return int|bool
|
||||
*/
|
||||
public function UpdateSession(ModuleUser_EntitySession $oSession) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.session')."
|
||||
SET
|
||||
|
@ -136,7 +161,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
";
|
||||
return $this->oDb->query($sql,$oSession->getIpLast(), $oSession->getDateLast(), $oSession->getUserId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Список сессий юзеров по ID
|
||||
*
|
||||
* @param array $aArrayId Список ID пользователей
|
||||
* @return array
|
||||
*/
|
||||
public function GetSessionsByArrayId($aArrayId) {
|
||||
if (!is_array($aArrayId) or count($aArrayId)==0) {
|
||||
return array();
|
||||
|
@ -156,7 +186,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aRes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Список юзеров по ID
|
||||
*
|
||||
* @param array $aArrayId Список ID пользователей
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersByArrayId($aArrayId) {
|
||||
if (!is_array($aArrayId) or count($aArrayId)==0) {
|
||||
return array();
|
||||
|
@ -179,7 +214,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aUsers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить юзера по ключу активации
|
||||
*
|
||||
* @param string $sKey Ключ активации
|
||||
* @return int|null
|
||||
*/
|
||||
public function GetUserByActivateKey($sKey) {
|
||||
$sql = "SELECT
|
||||
u.user_id
|
||||
|
@ -191,8 +231,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получить юзера по мылу
|
||||
*
|
||||
* @param string $sMail Емайл
|
||||
* @return int|null
|
||||
*/
|
||||
public function GetUserByMail($sMail) {
|
||||
$sql = "SELECT
|
||||
u.user_id
|
||||
|
@ -204,7 +248,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить юзера по логину
|
||||
*
|
||||
* @param string $sLogin Логин пользователя
|
||||
* @return int|null
|
||||
*/
|
||||
public function GetUserByLogin($sLogin) {
|
||||
$sql = "SELECT
|
||||
u.user_id
|
||||
|
@ -217,8 +266,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получить список юзеров по дате последнего визита
|
||||
*
|
||||
* @param int $iLimit Количество
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersByDateLast($iLimit) {
|
||||
$sql = "SELECT
|
||||
user_id
|
||||
|
@ -236,7 +289,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aReturn;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить список юзеров по дате регистрации
|
||||
*
|
||||
* @param int $iLimit Количество
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersByDateRegister($iLimit) {
|
||||
$sql = "SELECT
|
||||
user_id
|
||||
|
@ -256,28 +314,44 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aReturn;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает количество пользователй
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountUsers() {
|
||||
$sql = "SELECT count(*) as count FROM ".Config::Get('db.table.user')." WHERE user_activate = 1";
|
||||
$result=$this->oDb->selectRow($sql);
|
||||
return $result['count'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает количество активных пользователей
|
||||
*
|
||||
* @param string $sDateActive Дата
|
||||
* @return mixed
|
||||
*/
|
||||
public function GetCountUsersActive($sDateActive) {
|
||||
$sql = "SELECT count(*) as count FROM ".Config::Get('db.table.session')." WHERE session_date_last >= ? ";
|
||||
$result=$this->oDb->selectRow($sql,$sDateActive);
|
||||
return $result['count'];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает количество пользователей в разрезе полов
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function GetCountUsersSex() {
|
||||
$sql = "SELECT user_profile_sex AS ARRAY_KEY, count(*) as count FROM ".Config::Get('db.table.user')." WHERE user_activate = 1 GROUP BY user_profile_sex ";
|
||||
$result=$this->oDb->select($sql);
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получить список юзеров по первым буквам логина
|
||||
*
|
||||
* @param string $sUserLogin Логин
|
||||
* @param int $iLimit Количество
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersByLoginLike($sUserLogin,$iLimit) {
|
||||
$sql = "SELECT
|
||||
user_id
|
||||
|
@ -297,11 +371,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aReturn;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Добавляет друга
|
||||
*
|
||||
* @param ModuleUser_EntityFriend $oFriend Объект дружбы(связи пользователей)
|
||||
* @return bool
|
||||
*/
|
||||
public function AddFriend(ModuleUser_EntityFriend $oFriend) {
|
||||
$sql = "INSERT INTO ".Config::Get('db.table.friend')."
|
||||
(user_from,
|
||||
|
@ -324,7 +399,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет информацию о дружбе из базы данных
|
||||
*
|
||||
* @param ModuleUser_EntityFriend $oFriend Объект дружбы(связи пользователей)
|
||||
* @return bool
|
||||
*/
|
||||
public function EraseFriend(ModuleUser_EntityFriend $oFriend) {
|
||||
$sql = "DELETE FROM ".Config::Get('db.table.friend')."
|
||||
WHERE
|
||||
|
@ -338,7 +418,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновляет информацию о друге
|
||||
*
|
||||
* @param ModuleUser_EntityFriend $oFriend Объект дружбы(связи пользователей)
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateFriend(ModuleUser_EntityFriend $oFriend) {
|
||||
$sql = "
|
||||
UPDATE ".Config::Get('db.table.friend')."
|
||||
|
@ -363,13 +448,11 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить отношей дружбы по массиву идентификаторов
|
||||
* Получить список отношений друзей
|
||||
*
|
||||
* @param array $aArrayId
|
||||
* @param string $sUserId
|
||||
* @param int $iStatus
|
||||
* @param array $aArrayId Список ID пользователей проверяемых на дружбу
|
||||
* @param int $sUserId ID пользователя у которого проверяем друзей
|
||||
* @return array
|
||||
*/
|
||||
public function GetFriendsByArrayId($aArrayId,$sUserId) {
|
||||
|
@ -400,12 +483,13 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aRes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить список друзей указанного пользователя
|
||||
* Получает список друзей
|
||||
*
|
||||
* @param string $sUserId
|
||||
* @param int $iStatus
|
||||
* @param int $sUserId ID пользователя
|
||||
* @param int $iCount Возвращает общее количество элементов
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersFriend($sUserId,&$iCount,$iCurrPage,$iPerPage) {
|
||||
|
@ -426,26 +510,31 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
LIMIT ?d, ?d ;";
|
||||
$aUsers=array();
|
||||
if ($aRows=$this->oDb->selectPage(
|
||||
$iCount,
|
||||
$sql,
|
||||
$sUserId,
|
||||
$sUserId,
|
||||
ModuleUser::USER_FRIEND_ACCEPT+ModuleUser::USER_FRIEND_OFFER,
|
||||
ModuleUser::USER_FRIEND_ACCEPT,
|
||||
ModuleUser::USER_FRIEND_ACCEPT,
|
||||
($iCurrPage-1)*$iPerPage, $iPerPage
|
||||
)
|
||||
$iCount,
|
||||
$sql,
|
||||
$sUserId,
|
||||
$sUserId,
|
||||
ModuleUser::USER_FRIEND_ACCEPT+ModuleUser::USER_FRIEND_OFFER,
|
||||
ModuleUser::USER_FRIEND_ACCEPT,
|
||||
ModuleUser::USER_FRIEND_ACCEPT,
|
||||
($iCurrPage-1)*$iPerPage, $iPerPage
|
||||
)
|
||||
) {
|
||||
foreach ($aRows as $aUser) {
|
||||
$aUsers[]=($aUser['user_from']==$sUserId)
|
||||
? $aUser['user_to']
|
||||
: $aUser['user_from'];
|
||||
? $aUser['user_to']
|
||||
: $aUser['user_from'];
|
||||
}
|
||||
}
|
||||
rsort($aUsers,SORT_NUMERIC);
|
||||
return array_unique($aUsers);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает количество друзей
|
||||
*
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountUsersFriend($sUserId) {
|
||||
$sql = "SELECT
|
||||
count(*) as c
|
||||
|
@ -473,7 +562,6 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить список заявок на добавление в друзья от указанного пользователя
|
||||
*
|
||||
|
@ -495,11 +583,11 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
;";
|
||||
$aUsers=array();
|
||||
if ($aRows=$this->oDb->select(
|
||||
$sql,
|
||||
$sUserId,
|
||||
ModuleUser::USER_FRIEND_OFFER,
|
||||
$iStatus
|
||||
)
|
||||
$sql,
|
||||
$sUserId,
|
||||
ModuleUser::USER_FRIEND_OFFER,
|
||||
$iStatus
|
||||
)
|
||||
) {
|
||||
foreach ($aRows as $aUser) {
|
||||
$aUsers[]=$aUser['user_to'];
|
||||
|
@ -507,7 +595,6 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aUsers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить список заявок на добавление в друзья от указанного пользователя
|
||||
*
|
||||
|
@ -529,11 +616,11 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
;";
|
||||
$aUsers=array();
|
||||
if ($aRows=$this->oDb->select(
|
||||
$sql,
|
||||
$sUserId,
|
||||
ModuleUser::USER_FRIEND_OFFER,
|
||||
$iStatus
|
||||
)
|
||||
$sql,
|
||||
$sUserId,
|
||||
ModuleUser::USER_FRIEND_OFFER,
|
||||
$iStatus
|
||||
)
|
||||
) {
|
||||
foreach ($aRows as $aUser) {
|
||||
$aUsers[]=$aUser['user_from'];
|
||||
|
@ -541,12 +628,13 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aUsers;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Получает инвайт по его коду
|
||||
*
|
||||
* @param string $sCode Код инвайта
|
||||
* @param int $iUsed Флаг испольщования инвайта
|
||||
* @return ModuleUser_EntityInvite|null
|
||||
*/
|
||||
public function GetInviteByCode($sCode,$iUsed=0) {
|
||||
$sql = "SELECT * FROM ".Config::Get('db.table.invite')." WHERE invite_code = ? and invite_used = ?d ";
|
||||
if ($aRow=$this->oDb->selectRow($sql,$sCode,$iUsed)) {
|
||||
|
@ -554,7 +642,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет новый инвайт
|
||||
*
|
||||
* @param ModuleUser_EntityInvite $oInvite Объект инвайта
|
||||
* @return int|bool
|
||||
*/
|
||||
public function AddInvite(ModuleUser_EntityInvite $oInvite) {
|
||||
$sql = "INSERT INTO ".Config::Get('db.table.invite')."
|
||||
(invite_code,
|
||||
|
@ -568,7 +661,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновляет инвайт
|
||||
*
|
||||
* @param ModuleUser_EntityInvite $oInvite бъект инвайта
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateInvite(ModuleUser_EntityInvite $oInvite) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.invite')."
|
||||
SET
|
||||
|
@ -582,7 +680,13 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает число использованых приглашений юзером за определенную дату
|
||||
*
|
||||
* @param int $sUserIdFrom ID пользователя
|
||||
* @param string $sDate Дата
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountInviteUsedByDate($sUserIdFrom,$sDate) {
|
||||
$sql = "SELECT count(invite_id) as count FROM ".Config::Get('db.table.invite')." WHERE user_from_id = ?d and invite_date_add >= ? ";
|
||||
if ($aRow=$this->oDb->selectRow($sql,$sUserIdFrom,$sDate)) {
|
||||
|
@ -590,7 +694,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает полное число использованных приглашений юзера
|
||||
*
|
||||
* @param int $sUserIdFrom ID пользователя
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountInviteUsed($sUserIdFrom) {
|
||||
$sql = "SELECT count(invite_id) as count FROM ".Config::Get('db.table.invite')." WHERE user_from_id = ?d";
|
||||
if ($aRow=$this->oDb->selectRow($sql,$sUserIdFrom)) {
|
||||
|
@ -598,7 +707,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает список приглашенных юзеров
|
||||
*
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersInvite($sUserId) {
|
||||
$sql = "SELECT
|
||||
i.user_to_id
|
||||
|
@ -614,7 +728,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aUsers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает юзера который пригласил
|
||||
*
|
||||
* @param int $sUserIdTo ID пользователя
|
||||
* @return int|null
|
||||
*/
|
||||
public function GetUserInviteFrom($sUserIdTo) {
|
||||
$sql = "SELECT
|
||||
i.user_from_id
|
||||
|
@ -629,7 +748,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляем воспоминание(восстановление) пароля
|
||||
*
|
||||
* @param ModuleUser_EntityReminder $oReminder Объект восстановления пароля
|
||||
* @return bool
|
||||
*/
|
||||
public function AddReminder(ModuleUser_EntityReminder $oReminder) {
|
||||
$sql = "REPLACE ".Config::Get('db.table.reminder')."
|
||||
SET
|
||||
|
@ -642,11 +766,21 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
";
|
||||
return $this->oDb->query($sql,$oReminder->getCode(),$oReminder->getUserId(),$oReminder->getDateAdd(),$oReminder->getDateUsed(),$oReminder->getDateExpire(),$oReminder->getIsUsed());
|
||||
}
|
||||
|
||||
/**
|
||||
* Сохраняем воспомнинание(восстановление) пароля
|
||||
*
|
||||
* @param ModuleUser_EntityReminder $oReminder Объект восстановления пароля
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateReminder(ModuleUser_EntityReminder $oReminder) {
|
||||
return $this->AddReminder($oReminder);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получаем запись восстановления пароля по коду
|
||||
*
|
||||
* @param string $sCode Код восстановления пароля
|
||||
* @return ModuleUser_EntityReminder|null
|
||||
*/
|
||||
public function GetReminderByCode($sCode) {
|
||||
$sql = "SELECT
|
||||
*
|
||||
|
@ -659,7 +793,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить дополнительные поля профиля пользователя
|
||||
*
|
||||
* @param array|null $aType Типы полей, null - все типы
|
||||
* @return array
|
||||
*/
|
||||
public function getUserFields($aType) {
|
||||
if (!is_null($aType) and !is_array($aType)) {
|
||||
$aType=array($aType);
|
||||
|
@ -675,7 +814,13 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить по имени поля его значение дял определённого пользователя
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param string $sName Имя поля
|
||||
* @return string
|
||||
*/
|
||||
public function getUserFieldValueByName($iUserId, $sName) {
|
||||
$sql = 'SELECT value FROM '.Config::Get('db.table.user_field_value').' WHERE
|
||||
user_id = ?d
|
||||
|
@ -684,7 +829,14 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
$ret = $this->oDb->selectCol($sql, $iUserId, $sName);
|
||||
return $ret[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить значения дополнительных полей профиля пользователя
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param bool $bOnlyNoEmpty Загружать только непустые поля
|
||||
* @param array $aType Типы полей, null - все типы
|
||||
* @return array
|
||||
*/
|
||||
public function getUserFieldsValues($iUserId, $bOnlyNoEmpty, $aType) {
|
||||
if (!is_null($aType) and !is_array($aType)) {
|
||||
$aType=array($aType);
|
||||
|
@ -712,7 +864,14 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* Установить значения дополнительных полей профиля пользователя
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param array $aFields Ассоциативный массив полей id => value
|
||||
* @param int $iCountMax Максимальное количество одинаковых полей
|
||||
* @return bool
|
||||
*/
|
||||
public function setUserFieldsValues($iUserId, $aFields, $iCountMax) {
|
||||
if (!count($aFields)) return;
|
||||
foreach ($aFields as $iId =>$sValue) {
|
||||
|
@ -729,38 +888,72 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
$this->oDb->query($sql, $sValue, $iUserId, $iId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавить поле
|
||||
*
|
||||
* @param ModuleUser_EntityField $oField Объект пользовательского поля
|
||||
* @return bool
|
||||
*/
|
||||
public function addUserField($oField) {
|
||||
$sql = 'INSERT INTO '.Config::Get('db.table.user_field').' SET
|
||||
name = ?, title = ?, pattern = ?, type = ?';
|
||||
return $this->oDb->query($sql, $oField->getName(), $oField->getTitle(), $oField->getPattern(), $oField->getType());
|
||||
}
|
||||
|
||||
/**
|
||||
* Удалить поле
|
||||
*
|
||||
* @param int $iId ID пользовательского поля
|
||||
* @return bool
|
||||
*/
|
||||
public function deleteUserField($iId) {
|
||||
$sql = 'DELETE FROM '.Config::Get('db.table.user_field_value').' WHERE field_id = ?d';
|
||||
$this->oDb->query($sql, $iId);
|
||||
$sql = 'DELETE FROM '.Config::Get('db.table.user_field').' WHERE
|
||||
id = ?d';
|
||||
$this->oDb->query($sql, $iId);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Изменить поле
|
||||
*
|
||||
* @param ModuleUser_EntityField $oField Объект пользовательского поля
|
||||
* @return bool
|
||||
*/
|
||||
public function updateUserField($oField) {
|
||||
$sql = 'UPDATE '.Config::Get('db.table.user_field').' SET
|
||||
name = ?, title = ?, pattern = ?, type = ?
|
||||
WHERE id = ?d';
|
||||
$this->oDb->query($sql, $oField->getName(), $oField->getTitle(), $oField->getPattern(), $oField->getType(), $oField->getId());
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет существует ли поле с таким именем
|
||||
*
|
||||
* @param string $sName Имя поля
|
||||
* @param int|null $iId ID поля
|
||||
* @return bool
|
||||
*/
|
||||
public function userFieldExistsByName($sName, $iId) {
|
||||
$sql = 'SELECT id FROM '.Config::Get('db.table.user_field').' WHERE name = ? {AND id != ?d}';
|
||||
return $this->oDb->select($sql, $sName, $iId ? $iId : DBSIMPLE_SKIP);
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет существует ли поле с таким ID
|
||||
*
|
||||
* @param int $iId ID поля
|
||||
* @return bool
|
||||
*/
|
||||
public function userFieldExistsById($iId) {
|
||||
$sql = 'SELECT id FROM '.Config::Get('db.table.user_field').' WHERE id = ?d';
|
||||
return $this->oDb->select($sql, $iId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет у пользователя значения полей
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param array|null $aType Список типов для удаления
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteUserFieldValues($iUserId,$aType) {
|
||||
if (!is_null($aType) and !is_array($aType)) {
|
||||
$aType=array($aType);
|
||||
|
@ -771,8 +964,15 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
)';
|
||||
return $this->oDb->query($sql,$iUserId,(is_null($aType) or !count($aType)) ? DBSIMPLE_SKIP : $aType);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает список заметок пользователя
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param int $iCount Возвращает общее количество элементов
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetUserNotesByUserId($iUserId,&$iCount,$iCurrPage,$iPerPage) {
|
||||
$sql = "
|
||||
SELECT *
|
||||
|
@ -790,7 +990,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aReturn;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает количество заметок у пользователя
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountUserNotesByUserId($iUserId) {
|
||||
$sql = "
|
||||
SELECT count(*) as c
|
||||
|
@ -804,7 +1009,13 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращет заметку по автору и пользователю
|
||||
*
|
||||
* @param int $iTargetUserId ID пользователя о ком заметка
|
||||
* @param int $iUserId ID пользователя автора заметки
|
||||
* @return ModuleUser_EntityNote|null
|
||||
*/
|
||||
public function GetUserNote($iTargetUserId,$iUserId) {
|
||||
$sql = "SELECT * FROM ".Config::Get('db.table.user_note')." WHERE target_user_id = ?d and user_id = ?d ";
|
||||
if ($aRow=$this->oDb->selectRow($sql,$iTargetUserId,$iUserId)) {
|
||||
|
@ -812,7 +1023,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает заметку по ID
|
||||
*
|
||||
* @param int $iId ID заметки
|
||||
* @return ModuleUser_EntityNote|null
|
||||
*/
|
||||
public function GetUserNoteById($iId) {
|
||||
$sql = "SELECT * FROM ".Config::Get('db.table.user_note')." WHERE id = ?d ";
|
||||
if ($aRow=$this->oDb->selectRow($sql,$iId)) {
|
||||
|
@ -820,12 +1036,22 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет заметку по ID
|
||||
*
|
||||
* @param int $iId ID заметки
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteUserNoteById($iId) {
|
||||
$sql = "DELETE FROM ".Config::Get('db.table.user_note')." WHERE id = ?d ";
|
||||
return $this->oDb->query($sql,$iId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет заметку
|
||||
*
|
||||
* @param ModuleUser_EntityNote $oNote Объект заметки
|
||||
* @return int|null
|
||||
*/
|
||||
public function AddUserNote($oNote) {
|
||||
$sql = "INSERT INTO ".Config::Get('db.table.user_note')." SET ?a ";
|
||||
if ($iId=$this->oDb->query($sql,$oNote->_getData())) {
|
||||
|
@ -833,8 +1059,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Обновляет заметку
|
||||
*
|
||||
* @param ModuleUser_EntityNote $oNote Объект заметки
|
||||
* @return int
|
||||
*/
|
||||
public function UpdateUserNote($oNote) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.user_note')."
|
||||
SET
|
||||
|
@ -844,7 +1074,16 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
return $this->oDb->query($sql,$oNote->getText(),
|
||||
$oNote->getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список пользователей по фильтру
|
||||
*
|
||||
* @param array $aFilter Фильтр
|
||||
* @param array $aOrder Сортировка
|
||||
* @param int $iCount Возвращает общее количество элементов
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элментов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersByFilter($aFilter,$aOrder,&$iCount,$iCurrPage,$iPerPage) {
|
||||
$aOrderAllow=array('user_id','user_login','user_date_register','user_rating','user_skill','user_profile_name');
|
||||
$sOrder='';
|
||||
|
@ -897,8 +1136,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aResult;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает список префиксов логинов пользователей (для алфавитного указателя)
|
||||
*
|
||||
* @param int $iPrefixLength Длина префикса
|
||||
* @return array
|
||||
*/
|
||||
public function GetGroupPrefixUser($iPrefixLength=1) {
|
||||
$sql = "
|
||||
SELECT SUBSTRING(`user_login` FROM 1 FOR ?d ) as prefix
|
||||
|
|
|
@ -18,23 +18,29 @@
|
|||
/**
|
||||
* Модуль для работы с голосованиями
|
||||
*
|
||||
* @package modules.vote
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleVote extends Module {
|
||||
protected $oMapper;
|
||||
|
||||
class ModuleVote extends Module {
|
||||
/**
|
||||
* Объект маппера
|
||||
*
|
||||
* @var ModuleVote_MapperVote
|
||||
*/
|
||||
protected $oMapper;
|
||||
|
||||
/**
|
||||
* Инициализация
|
||||
*
|
||||
*/
|
||||
public function Init() {
|
||||
public function Init() {
|
||||
$this->oMapper=Engine::GetMapper(__CLASS__);
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет голосование
|
||||
*
|
||||
* @param ModuleVote_EntityVote $oVote
|
||||
* @return unknown
|
||||
* @param ModuleVote_EntityVote $oVote Объект голосования
|
||||
* @return bool
|
||||
*/
|
||||
public function AddVote(ModuleVote_EntityVote $oVote) {
|
||||
if (!$oVote->getIp()) {
|
||||
|
@ -47,14 +53,13 @@ class ModuleVote extends Module {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает голосование
|
||||
*
|
||||
* @param unknown_type $sTargetId
|
||||
* @param unknown_type $sTargetType
|
||||
* @param unknown_type $sUserId
|
||||
* @return unknown
|
||||
* @param int $sTargetId ID владельца
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return ModuleVote_EntityVote|null
|
||||
*/
|
||||
public function GetVote($sTargetId,$sTargetType,$sUserId) {
|
||||
$data=$this->GetVoteByArray($sTargetId,$sTargetType,$sUserId);
|
||||
|
@ -63,12 +68,13 @@ class ModuleVote extends Module {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить список голосований по списку айдишников
|
||||
*
|
||||
* @param unknown_type $sTargetId
|
||||
* @param unknown_type $sTargetType
|
||||
* @param array $aTargetId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetVoteByArray($aTargetId,$sTargetType,$sUserId) {
|
||||
if (!$aTargetId) {
|
||||
|
@ -87,25 +93,25 @@ class ModuleVote extends Module {
|
|||
* Делаем мульти-запрос к кешу
|
||||
*/
|
||||
$aCacheKeys=func_build_cache_keys($aTargetId,"vote_{$sTargetType}_",'_'.$sUserId);
|
||||
if (false !== ($data = $this->Cache_Get($aCacheKeys))) {
|
||||
if (false !== ($data = $this->Cache_Get($aCacheKeys))) {
|
||||
/**
|
||||
* проверяем что досталось из кеша
|
||||
*/
|
||||
foreach ($aCacheKeys as $sValue => $sKey ) {
|
||||
if (array_key_exists($sKey,$data)) {
|
||||
if (array_key_exists($sKey,$data)) {
|
||||
if ($data[$sKey]) {
|
||||
$aVote[$data[$sKey]->getTargetId()]=$data[$sKey];
|
||||
} else {
|
||||
$aIdNotNeedQuery[]=$sValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Смотрим каких топиков не было в кеше и делаем запрос в БД
|
||||
*/
|
||||
$aIdNeedQuery=array_diff($aTargetId,array_keys($aVote));
|
||||
$aIdNeedQuery=array_diff($aIdNeedQuery,$aIdNotNeedQuery);
|
||||
*/
|
||||
$aIdNeedQuery=array_diff($aTargetId,array_keys($aVote));
|
||||
$aIdNeedQuery=array_diff($aIdNeedQuery,$aIdNotNeedQuery);
|
||||
$aIdNeedStore=$aIdNeedQuery;
|
||||
if ($data = $this->oMapper->GetVoteByArray($aIdNeedQuery,$sTargetType,$sUserId)) {
|
||||
foreach ($data as $oVote) {
|
||||
|
@ -122,59 +128,57 @@ class ModuleVote extends Module {
|
|||
*/
|
||||
foreach ($aIdNeedStore as $sId) {
|
||||
$this->Cache_Set(null, "vote_{$sTargetType}_{$sId}_{$sUserId}", array(), 60*60*24*7);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Сортируем результат согласно входящему массиву
|
||||
*/
|
||||
$aVote=func_array_sort_by_keys($aVote,$aTargetId);
|
||||
return $aVote;
|
||||
return $aVote;
|
||||
}
|
||||
/**
|
||||
* Получить список голосований по списку айдишников, но используя единый кеш
|
||||
*
|
||||
* @param unknown_type $aTargetId
|
||||
* @param unknown_type $sTargetType
|
||||
* @param unknown_type $sUserId
|
||||
* @return unknown
|
||||
* @param array $aTargetId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetVoteByArraySolid($aTargetId,$sTargetType,$sUserId) {
|
||||
if (!is_array($aTargetId)) {
|
||||
$aTargetId=array($aTargetId);
|
||||
}
|
||||
$aTargetId=array_unique($aTargetId);
|
||||
$aVote=array();
|
||||
$aTargetId=array_unique($aTargetId);
|
||||
$aVote=array();
|
||||
$s=join(',',$aTargetId);
|
||||
if (false === ($data = $this->Cache_Get("vote_{$sTargetType}_{$sUserId}_id_{$s}"))) {
|
||||
if (false === ($data = $this->Cache_Get("vote_{$sTargetType}_{$sUserId}_id_{$s}"))) {
|
||||
$data = $this->oMapper->GetVoteByArray($aTargetId,$sTargetType,$sUserId);
|
||||
foreach ($data as $oVote) {
|
||||
$aVote[$oVote->getTargetId()]=$oVote;
|
||||
}
|
||||
$this->Cache_Set(
|
||||
$aVote, "vote_{$sTargetType}_{$sUserId}_id_{$s}",
|
||||
array("vote_update_{$sTargetType}_{$sUserId}","vote_update_{$sTargetType}"),
|
||||
$aVote, "vote_{$sTargetType}_{$sUserId}_id_{$s}",
|
||||
array("vote_update_{$sTargetType}_{$sUserId}","vote_update_{$sTargetType}"),
|
||||
60*60*24*1
|
||||
);
|
||||
return $aVote;
|
||||
}
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет голосование из базы по списку идентификаторов таргета
|
||||
*
|
||||
* @param array|int $aTargetId
|
||||
* @param string $sTargetType
|
||||
* @param array|int $aTargetId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteVoteByTarget($aTargetId, $sTargetType) {
|
||||
if (!is_array($aTargetId)) $aTargetId=array($aTargetId);
|
||||
$aTargetId=array_unique($aTargetId);
|
||||
|
||||
/**
|
||||
* Чистим зависимые кеши
|
||||
*/
|
||||
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("vote_update_{$sTargetType}"));
|
||||
return $this->oMapper->DeleteVoteByTarget($aTargetId,$sTargetType);
|
||||
return $this->oMapper->DeleteVoteByTarget($aTargetId,$sTargetType);
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -15,50 +15,124 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleVote_EntityVote extends Entity
|
||||
{
|
||||
public function getTargetId() {
|
||||
return $this->_getDataOne('target_id');
|
||||
}
|
||||
public function getTargetType() {
|
||||
return $this->_getDataOne('target_type');
|
||||
}
|
||||
public function getVoterId() {
|
||||
return $this->_getDataOne('user_voter_id');
|
||||
}
|
||||
public function getDirection() {
|
||||
return $this->_getDataOne('vote_direction');
|
||||
}
|
||||
public function getValue() {
|
||||
return $this->_getDataOne('vote_value');
|
||||
}
|
||||
public function getDate() {
|
||||
/**
|
||||
* Сущность голосования
|
||||
*
|
||||
* @package modules.vote
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleVote_EntityVote extends Entity {
|
||||
/**
|
||||
* Возвращает ID владельца
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getTargetId() {
|
||||
return $this->_getDataOne('target_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает тип владельца
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getTargetType() {
|
||||
return $this->_getDataOne('target_type');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID проголосовавшего пользователя
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getVoterId() {
|
||||
return $this->_getDataOne('user_voter_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает направление голоса: 0, 1, -1
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getDirection() {
|
||||
return $this->_getDataOne('vote_direction');
|
||||
}
|
||||
/**
|
||||
* Возвращает значение при голосовании
|
||||
*
|
||||
* @return float|null
|
||||
*/
|
||||
public function getValue() {
|
||||
return $this->_getDataOne('vote_value');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату голосования
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDate() {
|
||||
return $this->_getDataOne('vote_date');
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Возвращает IP голосовавшего
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getIp() {
|
||||
return $this->_getDataOne('vote_ip');
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Устанавливает ID владельца
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setTargetId($data) {
|
||||
$this->_aData['target_id']=$data;
|
||||
}
|
||||
public function setTargetType($data) {
|
||||
$this->_aData['target_type']=$data;
|
||||
}
|
||||
public function setVoterId($data) {
|
||||
$this->_aData['user_voter_id']=$data;
|
||||
}
|
||||
public function setDirection($data) {
|
||||
$this->_aData['vote_direction']=$data;
|
||||
}
|
||||
public function setValue($data) {
|
||||
$this->_aData['vote_value']=$data;
|
||||
}
|
||||
public function setDate($data) {
|
||||
$this->_aData['vote_date']=$data;
|
||||
}
|
||||
$this->_aData['target_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает тип владельца
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setTargetType($data) {
|
||||
$this->_aData['target_type']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID проголосовавшего пользователя
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setVoterId($data) {
|
||||
$this->_aData['user_voter_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает направление голоса: 0, 1, -1
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setDirection($data) {
|
||||
$this->_aData['vote_direction']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает значение при голосовании
|
||||
*
|
||||
* @param float $data
|
||||
*/
|
||||
public function setValue($data) {
|
||||
$this->_aData['vote_value']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату голосования
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDate($data) {
|
||||
$this->_aData['vote_date']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает IP голосовавшего
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setIp($data) {
|
||||
$this->_aData['vote_ip']=$data;
|
||||
}
|
||||
|
|
|
@ -15,9 +15,19 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleVote_MapperVote extends Mapper {
|
||||
|
||||
|
||||
/**
|
||||
* Маппер для работы с БД
|
||||
*
|
||||
* @package modules.vote
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleVote_MapperVote extends Mapper {
|
||||
/**
|
||||
* Добавляет голосование
|
||||
*
|
||||
* @param ModuleVote_EntityVote $oVote Объект голосования
|
||||
* @return bool
|
||||
*/
|
||||
public function AddVote(ModuleVote_EntityVote $oVote) {
|
||||
$sql = "INSERT INTO ".Config::Get('db.table.vote')."
|
||||
(target_id,
|
||||
|
@ -29,19 +39,25 @@ class ModuleVote_MapperVote extends Mapper {
|
|||
vote_ip
|
||||
)
|
||||
VALUES(?d, ?, ?d, ?d, ?f, ?, ?)
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$oVote->getTargetId(),$oVote->getTargetType(),$oVote->getVoterId(),$oVote->getDirection(),$oVote->getValue(),$oVote->getDate(),$oVote->getIp())===0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получить список голосований по списку айдишников
|
||||
*
|
||||
* @param array $aArrayId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetVoteByArray($aArrayId,$sTargetType,$sUserId) {
|
||||
if (!is_array($aArrayId) or count($aArrayId)==0) {
|
||||
return array();
|
||||
}
|
||||
}
|
||||
$sql = "SELECT
|
||||
*
|
||||
FROM
|
||||
|
@ -57,10 +73,16 @@ class ModuleVote_MapperVote extends Mapper {
|
|||
foreach ($aRows as $aRow) {
|
||||
$aVotes[]=Engine::GetEntity('Vote',$aRow);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $aVotes;
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* Удаляет голосование из базы по списку идентификаторов таргета
|
||||
*
|
||||
* @param array|int $aTargetId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteVoteByTarget($aTargetId,$sTargetType) {
|
||||
$sql = "
|
||||
DELETE FROM ".Config::Get('db.table.vote')."
|
||||
|
@ -68,7 +90,7 @@ class ModuleVote_MapperVote extends Mapper {
|
|||
target_id IN(?a)
|
||||
AND
|
||||
target_type = ?
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$aTargetId,$sTargetType)) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -18,28 +18,36 @@
|
|||
/**
|
||||
* Модуль Wall - записи на стене профиля пользователя
|
||||
*
|
||||
* @package modules.wall
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleWall extends Module {
|
||||
|
||||
/**
|
||||
* Объект маппера
|
||||
*
|
||||
* @var ModuleWall_MapperWall
|
||||
*/
|
||||
protected $oMapper;
|
||||
/**
|
||||
* Объект текущего пользователя
|
||||
*
|
||||
* @var ModuleUser_EntityUser|null
|
||||
*/
|
||||
protected $oUserCurrent;
|
||||
|
||||
|
||||
/**
|
||||
* Инициализация
|
||||
*
|
||||
*/
|
||||
public function Init() {
|
||||
public function Init() {
|
||||
$this->oMapper=Engine::GetMapper(__CLASS__);
|
||||
$this->oUserCurrent=$this->User_GetUserCurrent();
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавление записи на стену
|
||||
*
|
||||
* @param ModuleWall_EntityWall $oWall
|
||||
*
|
||||
* @return bool | ModuleWall_EntityWall
|
||||
* @param ModuleWall_EntityWall $oWall Объект записи на стене
|
||||
* @return bool|ModuleWall_EntityWall
|
||||
*/
|
||||
public function AddWall($oWall) {
|
||||
if (!$oWall->getDateAdd()) {
|
||||
|
@ -60,27 +68,23 @@ class ModuleWall extends Module {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновление записи
|
||||
*
|
||||
* @param ModuleWall_EntityWall $oWall
|
||||
*
|
||||
* @param ModuleWall_EntityWall $oWall Объект записи на стене
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateWall($oWall) {
|
||||
return $this->oMapper->UpdateWall($oWall);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получение списка записей по фильтру
|
||||
*
|
||||
* @param $aFilter
|
||||
* @param $aOrder
|
||||
* @param int $iCurrPage
|
||||
* @param int $iPerPage
|
||||
* @param array $aAllowData
|
||||
*
|
||||
* @param array $aFilter Фильтр
|
||||
* @param array $aOrder Сортировка
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @param array $aAllowData Список типов дополнительных данных для подгрузки в сообщения стены
|
||||
* @return array('collection'=>array,'count'=>int)
|
||||
*/
|
||||
public function GetWall($aFilter,$aOrder,$iCurrPage=1,$iPerPage=10,$aAllowData=null) {
|
||||
|
@ -94,19 +98,16 @@ class ModuleWall extends Module {
|
|||
/**
|
||||
* Возвращает число сообщений на стене по фильтру
|
||||
*
|
||||
* @param $aFilter
|
||||
*
|
||||
* @param array $aFilter Фильтр
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountWall($aFilter) {
|
||||
return $this->oMapper->GetCountWall($aFilter);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получение записей по ID, без дополнительных данных
|
||||
*
|
||||
* @param array $aWallId
|
||||
*
|
||||
* @param array $aWallId Список ID сообщений
|
||||
* @return array
|
||||
*/
|
||||
public function GetWallsByArrayId($aWallId) {
|
||||
|
@ -121,13 +122,11 @@ class ModuleWall extends Module {
|
|||
}
|
||||
return $aWalls;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получение записей по ID с дополнительные связаными данными
|
||||
*
|
||||
* @param $aWallId
|
||||
* @param array $aAllowData
|
||||
*
|
||||
* @param array $aWallId Список ID сообщений
|
||||
* @param array $aAllowData Список типов дополнительных данных для подгрузки в сообщения стены
|
||||
* @return array
|
||||
*/
|
||||
public function GetWallAdditionalData($aWallId,$aAllowData=null) {
|
||||
|
@ -197,12 +196,10 @@ class ModuleWall extends Module {
|
|||
}
|
||||
return $aWalls;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получение записи по ID
|
||||
*
|
||||
* @param int $iId
|
||||
*
|
||||
* @param int $iId ID сообщения/записи
|
||||
* @return ModuleWall_EntityWall
|
||||
*/
|
||||
public function GetWallById($iId) {
|
||||
|
@ -212,12 +209,10 @@ class ModuleWall extends Module {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновляет родительские данные у записи - количество ответов и ID последних ответов
|
||||
*
|
||||
* @param ModuleWall_EntityWall $oWall
|
||||
*
|
||||
* @param ModuleWall_EntityWall $oWall Объект записи на стене
|
||||
* @param null|int $iLimit
|
||||
*/
|
||||
public function UpdatePidWall($oWall,$iLimit=null) {
|
||||
|
@ -237,11 +232,10 @@ class ModuleWall extends Module {
|
|||
}
|
||||
$this->UpdateWall($oWall);
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаление сообщения
|
||||
*
|
||||
* @param $oWall
|
||||
* @param ModuleWall_EntityWall $oWall Объект записи на стене
|
||||
*/
|
||||
public function DeleteWall($oWall) {
|
||||
$this->oMapper->DeleteWallsByPid($oWall->getId());
|
||||
|
@ -250,6 +244,5 @@ class ModuleWall extends Module {
|
|||
$this->UpdatePidWall($oWallParent);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
|
@ -15,16 +15,26 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Сущность записи на стене
|
||||
*
|
||||
* @package modules.wall
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleWall_EntityWall extends Entity {
|
||||
|
||||
/**
|
||||
* Определяем правила валидации
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $aValidateRules=array(
|
||||
array('pid','pid','on'=>array('','add')),
|
||||
array('user_id','time_limit','on'=>array('add')),
|
||||
);
|
||||
|
||||
/**
|
||||
* Инициализация
|
||||
*/
|
||||
public function Init() {
|
||||
parent::Init();
|
||||
$this->aValidateRules[]=array('text','string','max'=>Config::Get('module.wall.text_max'),'min'=>Config::Get('module.wall.text_min'),'allowEmpty'=>false,'on'=>array('','add'));
|
||||
|
@ -32,10 +42,9 @@ class ModuleWall_EntityWall extends Entity {
|
|||
/**
|
||||
* Проверка на ограничение по времени
|
||||
*
|
||||
* @param $sValue
|
||||
* @param $aParams
|
||||
*
|
||||
* @return bool
|
||||
* @param string $sValue Проверяемое значение
|
||||
* @param array $aParams Параметры
|
||||
* @return bool|string
|
||||
*/
|
||||
public function ValidateTimeLimit($sValue,$aParams) {
|
||||
if ($oUser=$this->User_GetUserById($this->getUserId())) {
|
||||
|
@ -48,10 +57,9 @@ class ModuleWall_EntityWall extends Entity {
|
|||
/**
|
||||
* Валидация родительского сообщения
|
||||
*
|
||||
* @param $sValue
|
||||
* @param $aParams
|
||||
*
|
||||
* @return bool
|
||||
* @param string $sValue Проверяемое значение
|
||||
* @param array $aParams Параметры
|
||||
* @return bool|string
|
||||
*/
|
||||
public function ValidatePid($sValue,$aParams) {
|
||||
if (!$sValue) {
|
||||
|
@ -67,11 +75,10 @@ class ModuleWall_EntityWall extends Entity {
|
|||
}
|
||||
return $this->Lang_Get('wall_add_pid_error');
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает родительскую запись
|
||||
*
|
||||
* @return ModuleWall_EntityWall
|
||||
* @return ModuleWall_EntityWall|null
|
||||
*/
|
||||
public function GetPidWall() {
|
||||
if ($this->getPid()) {
|
||||
|
@ -79,7 +86,6 @@ class ModuleWall_EntityWall extends Entity {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверка на возможность удаления сообщения
|
||||
*
|
||||
|
@ -93,11 +99,10 @@ class ModuleWall_EntityWall extends Entity {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает пользователя, которому принадлежит стена
|
||||
*
|
||||
* @return mixed
|
||||
* @return ModuleUser_EntityUser|null
|
||||
*/
|
||||
public function getWallUser() {
|
||||
if (!$this->_getDataOne('wall_user')) {
|
||||
|
@ -105,7 +110,6 @@ class ModuleWall_EntityWall extends Entity {
|
|||
}
|
||||
return $this->_getDataOne('wall_user');
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает URL стены
|
||||
*
|
||||
|
|
|
@ -15,39 +15,71 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Маппер для работы с БД
|
||||
*
|
||||
* @package modules.wall
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleWall_MapperWall extends Mapper {
|
||||
|
||||
/**
|
||||
* Добавление записи на стену
|
||||
*
|
||||
* @param ModuleWall_EntityWall $oWall Объект записи на стене
|
||||
* @return bool|int
|
||||
*/
|
||||
public function AddWall($oWall) {
|
||||
$sql = "INSERT INTO ".Config::Get('db.table.wall')." SET ?a ";
|
||||
if ($iId=$this->oDb->query($sql,$oWall->_getData())) {
|
||||
return $iId;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Обновление записи
|
||||
*
|
||||
* @param ModuleWall_EntityWall $oWall Объект записи на стене
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateWall($oWall) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.wall')."
|
||||
SET
|
||||
count_reply = ?d,
|
||||
last_reply = ?
|
||||
WHERE id = ?d
|
||||
";
|
||||
";
|
||||
return $this->oDb->query($sql,$oWall->getCountReply(),
|
||||
$oWall->getLastReply(),
|
||||
$oWall->getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаление записи
|
||||
*
|
||||
* @param int $iId ID записи
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteWallById($iId) {
|
||||
$sql = "DELETE FROM ".Config::Get('db.table.wall')." WHERE id = ?d ";
|
||||
return $this->oDb->query($sql,$iId);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $iPid ID родительской записи
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteWallsByPid($iPid) {
|
||||
$sql = "DELETE FROM ".Config::Get('db.table.wall')." WHERE pid = ?d ";
|
||||
return $this->oDb->query($sql,$iPid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получение списка записей по фильтру
|
||||
*
|
||||
* @param array $aFilter Фильтр
|
||||
* @param array $aOrder Сортировка
|
||||
* @param int $iCount Возвращает общее количество элементов
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetWall($aFilter,$aOrder,&$iCount,$iCurrPage,$iPerPage) {
|
||||
$aOrderAllow=array('id','date_add');
|
||||
$sOrder='';
|
||||
|
@ -99,8 +131,12 @@ class ModuleWall_MapperWall extends Mapper {
|
|||
}
|
||||
return $aResult;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает число сообщений на стене по фильтру
|
||||
*
|
||||
* @param array $aFilter Фильтр
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountWall($aFilter) {
|
||||
$sql = "SELECT
|
||||
count(*) as c
|
||||
|
@ -117,19 +153,24 @@ class ModuleWall_MapperWall extends Mapper {
|
|||
{ AND id > ?d };
|
||||
";
|
||||
if ($aRow=$this->oDb->selectRow($sql,
|
||||
(isset($aFilter['pid']) and !is_null($aFilter['pid'])) ? $aFilter['pid'] : DBSIMPLE_SKIP,
|
||||
(array_key_exists('pid',$aFilter) and is_null($aFilter['pid'])) ? 1 : DBSIMPLE_SKIP,
|
||||
isset($aFilter['wall_user_id']) ? $aFilter['wall_user_id'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['ip']) ? $aFilter['ip'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['id']) ? $aFilter['id'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['id_less']) ? $aFilter['id_less'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['id_more']) ? $aFilter['id_more'] : DBSIMPLE_SKIP
|
||||
(isset($aFilter['pid']) and !is_null($aFilter['pid'])) ? $aFilter['pid'] : DBSIMPLE_SKIP,
|
||||
(array_key_exists('pid',$aFilter) and is_null($aFilter['pid'])) ? 1 : DBSIMPLE_SKIP,
|
||||
isset($aFilter['wall_user_id']) ? $aFilter['wall_user_id'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['ip']) ? $aFilter['ip'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['id']) ? $aFilter['id'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['id_less']) ? $aFilter['id_less'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['id_more']) ? $aFilter['id_more'] : DBSIMPLE_SKIP
|
||||
)) {
|
||||
return $aRow['c'];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получение записей по ID, без дополнительных данных
|
||||
*
|
||||
* @param array $aArrayId Список ID сообщений
|
||||
* @return array
|
||||
*/
|
||||
public function GetWallsByArrayId($aArrayId) {
|
||||
if (!is_array($aArrayId) or count($aArrayId)==0) {
|
||||
return array();
|
||||
|
|
|
@ -16,49 +16,50 @@
|
|||
*/
|
||||
/**
|
||||
* Управление простым конфигом в виде массива
|
||||
*
|
||||
* @package engine.lib
|
||||
* @since 1.0
|
||||
*/
|
||||
class Config {
|
||||
|
||||
/**
|
||||
* Default instance to operate with
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const DEFAULT_CONFIG_INSTANCE = 'general';
|
||||
|
||||
/**
|
||||
* Mapper rules for Config Path <-> Constant Name relations
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
static protected $aMapper = array(
|
||||
|
||||
|
||||
);
|
||||
|
||||
/**
|
||||
* Массив сущностей класса
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
static protected $aInstance=array();
|
||||
|
||||
/**
|
||||
* Store for configuration entries for current instance
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $aConfig=array();
|
||||
|
||||
|
||||
/**
|
||||
* Disabled constract process
|
||||
*/
|
||||
protected function __construct() {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Ограничиваем объект только одним экземпляром
|
||||
*
|
||||
* @static
|
||||
* @param string $sName Название инстанции конфига
|
||||
* @return Config
|
||||
*/
|
||||
static public function getInstance($sName=self::DEFAULT_CONFIG_INSTANCE) {
|
||||
|
@ -69,13 +70,14 @@ class Config {
|
|||
return self::$aInstance[$sName];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load configuration array from file
|
||||
*
|
||||
* @param string $sFile
|
||||
* @param bool $bRewrite
|
||||
* @return Config
|
||||
* @static
|
||||
* @param string $sFile Путь до файла конфига
|
||||
* @param bool $bRewrite Перезаписывать значения
|
||||
* @param string $sInstance Название инстанции конфига
|
||||
* @return bool|Config
|
||||
*/
|
||||
static public function LoadFromFile($sFile,$bRewrite=true,$sInstance=self::DEFAULT_CONFIG_INSTANCE) {
|
||||
// Check if file exists
|
||||
|
@ -86,13 +88,14 @@ class Config {
|
|||
$aConfig=include($sFile);
|
||||
return self::Load($aConfig,$bRewrite,$sInstance);
|
||||
}
|
||||
|
||||
/**
|
||||
* Load configuration array from given array
|
||||
*
|
||||
* @param string $aConfig
|
||||
* @param bool $bRewrite
|
||||
* @return Config
|
||||
* @static
|
||||
* @param array $aConfig Массив конфига
|
||||
* @param bool $bRewrite Перезаписывать значения
|
||||
* @param string $sInstance Название инстанции конфига
|
||||
* @return bool|Config
|
||||
*/
|
||||
static public function Load($aConfig,$bRewrite=true,$sInstance=self::DEFAULT_CONFIG_INSTANCE) {
|
||||
// Check if it`s array
|
||||
|
@ -100,14 +103,24 @@ class Config {
|
|||
return false;
|
||||
}
|
||||
// Set config to current or handle instance
|
||||
self::getInstance($sInstance)->SetConfig($aConfig,$bRewrite);
|
||||
self::getInstance($sInstance)->SetConfig($aConfig,$bRewrite);
|
||||
return self::getInstance($sInstance);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает текущий полный конфиг
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function GetConfig() {
|
||||
return $this->aConfig;
|
||||
}
|
||||
|
||||
/**
|
||||
* Устанавливает значения конфига
|
||||
*
|
||||
* @param array $aConfig Массив конфига
|
||||
* @param bool $bRewrite Перезаписывать значения
|
||||
* @return bool
|
||||
*/
|
||||
public function SetConfig($aConfig=array(),$bRewrite=true) {
|
||||
if (is_array($aConfig)) {
|
||||
if ($bRewrite) {
|
||||
|
@ -120,12 +133,11 @@ class Config {
|
|||
$this->aConfig=array();
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrive information from configuration array
|
||||
*
|
||||
* @param string $sKey Path to needed value
|
||||
* @param string $sInstance Name of needed instance
|
||||
* @param string $sKey Ключ
|
||||
* @param string $sInstance Название инстанции конфига
|
||||
* @return mixed
|
||||
*/
|
||||
static public function Get($sKey='', $sInstance=self::DEFAULT_CONFIG_INSTANCE) {
|
||||
|
@ -136,18 +148,17 @@ class Config {
|
|||
|
||||
return self::getInstance($sInstance)->GetValue($sKey,$sInstance);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает значение из конфигурации по переданному ключу
|
||||
*
|
||||
* @param string $sKey
|
||||
* @param string $sInstance
|
||||
* @param string $sKey Ключ
|
||||
* @param string $sInstance Название инстанции конфига
|
||||
* @return mixed
|
||||
*/
|
||||
public function GetValue($sKey, $sInstance=self::DEFAULT_CONFIG_INSTANCE) {
|
||||
// Return config by path (separator=".")
|
||||
$aKeys=explode('.',$sKey);
|
||||
|
||||
|
||||
$cfg=$this->GetConfig();
|
||||
foreach ((array)$aKeys as $sK) {
|
||||
if(isset($cfg[$sK])) {
|
||||
|
@ -156,11 +167,18 @@ class Config {
|
|||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$cfg = self::KeyReplace($cfg,$sInstance);
|
||||
return $cfg;
|
||||
return $cfg;
|
||||
}
|
||||
|
||||
/**
|
||||
* Заменяет плейсхолдеры ключей в значениях конфига
|
||||
*
|
||||
* @static
|
||||
* @param string|array $cfg Значения конфига
|
||||
* @param string $sInstance Название инстанции конфига
|
||||
* @return array|mixed
|
||||
*/
|
||||
static public function KeyReplace($cfg,$sInstance=self::DEFAULT_CONFIG_INSTANCE) {
|
||||
if(is_array($cfg)) {
|
||||
foreach($cfg as $k=>$v) {
|
||||
|
@ -172,7 +190,7 @@ class Config {
|
|||
unset($cfg[$k]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
} else {
|
||||
if(preg_match('~___([\S|\.|]+)___~Ui',$cfg))
|
||||
$cfg = preg_replace_callback(
|
||||
'~___([\S|\.]+)___~Ui',
|
||||
|
@ -182,17 +200,16 @@ class Config {
|
|||
}
|
||||
return $cfg;
|
||||
}
|
||||
|
||||
/**
|
||||
* Try to find element by given key
|
||||
* Using function ARRAY_KEY_EXISTS (like in SPL)
|
||||
*
|
||||
*
|
||||
* Workaround for http://bugs.php.net/bug.php?id=40442
|
||||
*
|
||||
*
|
||||
* @param string $sKey Path to needed value
|
||||
* @param string $sInstance Name of needed instance
|
||||
* @return bool
|
||||
*/
|
||||
*/
|
||||
static public function isExist($sKey, $sInstance=self::DEFAULT_CONFIG_INSTANCE) {
|
||||
// Return all config array
|
||||
if($sKey=='') {
|
||||
|
@ -201,27 +218,26 @@ class Config {
|
|||
// Analyze config by path (separator=".")
|
||||
$aKeys=explode('.',$sKey);
|
||||
$cfg=self::getInstance($sInstance)->GetConfig();
|
||||
foreach ((array)$aKeys as $sK) {
|
||||
foreach ((array)$aKeys as $sK) {
|
||||
if (array_key_exists($sK, $cfg)) {
|
||||
$cfg=$cfg[$sK];
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add information in config array by handle path
|
||||
*
|
||||
* @param string $sKey
|
||||
* @param mixed $value
|
||||
* @param string $sInstance
|
||||
* @param string $sKey Ключ
|
||||
* @param mixed $value Значение
|
||||
* @param string $sInstance Название инстанции конфига
|
||||
* @return bool
|
||||
*/
|
||||
static public function Set($sKey,$value,$sInstance=self::DEFAULT_CONFIG_INSTANCE) {
|
||||
$aKeys=explode('.',$sKey);
|
||||
|
||||
|
||||
if(isset($value['$root$']) && is_array($value['$root$'])){
|
||||
$aRoot = $value['$root$'];
|
||||
unset($value['$root$']);
|
||||
|
@ -243,9 +259,8 @@ class Config {
|
|||
}
|
||||
$sEval.='=$value;';
|
||||
eval($sEval);
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find all keys recursivly in config array
|
||||
*
|
||||
|
@ -260,12 +275,11 @@ class Config {
|
|||
// If it`s array, get array_keys recursive
|
||||
return $this->func_array_keys_recursive($cfg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define constants using config-constant mapping
|
||||
*
|
||||
* @param string $sKey
|
||||
* @param string $sInstance
|
||||
* @param string $sKey Ключ
|
||||
* @param string $sInstance Название инстанции конфига
|
||||
* @return bool
|
||||
*/
|
||||
static public function DefineConstant($sKey='',$sInstance=self::DEFAULT_CONFIG_INSTANCE) {
|
||||
|
@ -275,28 +289,33 @@ class Config {
|
|||
$sName = isset(self::$aMapper[$key])
|
||||
? self::$aMapper[$key]
|
||||
: strtoupper(str_replace('.','_',$key));
|
||||
if( (substr($key,0,strlen($sKey))==strtoupper($sKey))
|
||||
&& !defined($sName)
|
||||
&& (self::isExist($key,$sInstance)) )
|
||||
if( (substr($key,0,strlen($sKey))==strtoupper($sKey))
|
||||
&& !defined($sName)
|
||||
&& (self::isExist($key,$sInstance)) )
|
||||
{
|
||||
$cfg=self::Get($key,$sInstance);
|
||||
// Define constant, if founded value is scalar or NULL
|
||||
if(is_scalar($cfg)||$cfg===NULL)define(strtoupper($sName),$cfg);
|
||||
if(is_scalar($cfg)||$cfg===NULL)define(strtoupper($sName),$cfg);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Сливает ассоциативные массивы
|
||||
*
|
||||
* @param array $aArr1 Массив
|
||||
* @param array $aArr2 Массив
|
||||
* @return array
|
||||
*/
|
||||
protected function ArrayEmerge($aArr1,$aArr2) {
|
||||
return $this->func_array_merge_assoc($aArr1,$aArr2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Рекурсивный вариант array_keys
|
||||
*
|
||||
* @param array $array
|
||||
* @param array $array Массив
|
||||
* @return array
|
||||
*/
|
||||
protected function func_array_keys_recursive($array) {
|
||||
|
@ -314,18 +333,17 @@ class Config {
|
|||
}
|
||||
return $keys;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* Сливает два ассоциативных массива
|
||||
*
|
||||
* @param unknown_type $aArr1
|
||||
* @param unknown_type $aArr2
|
||||
* @return unknown
|
||||
* @param array $aArr1 Массив
|
||||
* @param array $aArr2 Массив
|
||||
* @return array
|
||||
*/
|
||||
protected function func_array_merge_assoc($aArr1,$aArr2) {
|
||||
$aRes=$aArr1;
|
||||
foreach ($aArr2 as $k2 => $v2) {
|
||||
foreach ($aArr2 as $k2 => $v2) {
|
||||
$bIsKeyInt=false;
|
||||
if (is_array($v2)) {
|
||||
foreach ($v2 as $k => $v) {
|
||||
|
@ -334,14 +352,14 @@ class Config {
|
|||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (is_array($v2) and !$bIsKeyInt and isset($aArr1[$k2])) {
|
||||
$aRes[$k2]=$this->func_array_merge_assoc($aArr1[$k2],$v2);
|
||||
} else {
|
||||
$aRes[$k2]=$v2;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $aRes;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -17,28 +17,71 @@
|
|||
/**
|
||||
* Ведение профайлинга
|
||||
*
|
||||
* @package engine.lib
|
||||
* @since 1.0
|
||||
*/
|
||||
class ProfilerSimple {
|
||||
|
||||
/**
|
||||
* Инстанция профайлера
|
||||
*
|
||||
* @var ProfilerSimple
|
||||
*/
|
||||
static protected $oInstance=null;
|
||||
/**
|
||||
* Массив данных
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $aTimes;
|
||||
/**
|
||||
* Уникальный номер
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $sRequestId;
|
||||
/**
|
||||
* Счетчик
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $iTimeId;
|
||||
/**
|
||||
* Текущий родитель
|
||||
*
|
||||
* @var int|null
|
||||
*/
|
||||
protected $iTimePidCurrent=null;
|
||||
/**
|
||||
* Статус активности профайлера
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $bEnable;
|
||||
/**
|
||||
* Путь до файла лога профайлера
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
protected $sFileName=null;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Инициализация
|
||||
*
|
||||
* @param string $sFileName Путь до файла лога профайлера
|
||||
* @param bool $bEnable Статус активности
|
||||
*/
|
||||
protected function __construct($sFileName,$bEnable) {
|
||||
$this->bEnable=$bEnable;
|
||||
$this->sFileName=$sFileName;
|
||||
$this->sRequestId=func_generator(32);
|
||||
$this->iTimeId=0;
|
||||
}
|
||||
$this->iTimeId=0;
|
||||
}
|
||||
/**
|
||||
* Ограничиваем объект только одним экземпляром
|
||||
*
|
||||
* @static
|
||||
* @param null $sFileName Путь до файла лога профайлера
|
||||
* @param bool $bEnable Статус активности
|
||||
* @return ProfilerSimple
|
||||
*/
|
||||
static public function getInstance($sFileName=null,$bEnable=true) {
|
||||
|
@ -49,7 +92,13 @@ class ProfilerSimple {
|
|||
return self::$oInstance;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Запуск подсчета времени выполнения операции
|
||||
*
|
||||
* @param string $sName Название операции
|
||||
* @param string $sComment Описание
|
||||
* @return bool|int
|
||||
*/
|
||||
public function Start($sName,$sComment='') {
|
||||
if (!$this->bEnable) {
|
||||
return false;
|
||||
|
@ -62,24 +111,33 @@ class ProfilerSimple {
|
|||
'time_name' => $sName,
|
||||
'time_comment' => $sComment,
|
||||
'time_start' => microtime(),
|
||||
);
|
||||
);
|
||||
$this->iTimePidCurrent=$this->iTimeId;
|
||||
return $this->iTimeId;
|
||||
}
|
||||
|
||||
public function Stop($iTimeId) {
|
||||
/**
|
||||
* Завершение подсчета времени выполнения операции
|
||||
*
|
||||
* @param int $iTimeId Номер операции
|
||||
* @return bool
|
||||
*/
|
||||
public function Stop($iTimeId) {
|
||||
if (!$this->bEnable or !$iTimeId or !isset($this->aTimes[$this->sRequestId.$iTimeId])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
$this->aTimes[$this->sRequestId.$iTimeId]['time_stop']=microtime();
|
||||
$this->aTimes[$this->sRequestId.$iTimeId]['time_full']=$this->GetTimeFull($iTimeId);
|
||||
$this->aTimes[$this->sRequestId.$iTimeId]['time_full']=$this->GetTimeFull($iTimeId);
|
||||
$this->iTimePidCurrent=$this->aTimes[$this->sRequestId.$iTimeId]['time_pid'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Сохранение лога в файл
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function Save() {
|
||||
if (!$this->bEnable or !$this->sFileName) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if ($fp=fopen($this->sFileName,"a")) {
|
||||
foreach ($this->aTimes as $aTime) {
|
||||
/**
|
||||
|
@ -89,7 +147,7 @@ class ProfilerSimple {
|
|||
$this->Stop($aTime['time_id']);
|
||||
$aTime=$this->aTimes[$aTime['request_id'].$aTime['time_id']];
|
||||
}
|
||||
|
||||
|
||||
if(!isset($aTime['time_pid'])) $aTime['time_pid']=0;
|
||||
if(isset($aTime['time_comment']) and $aTime['time_comment']!='') {
|
||||
$aTime['time_comment'] = preg_replace('/\s{1,}/',' ',$aTime['time_comment']);
|
||||
|
@ -100,21 +158,22 @@ class ProfilerSimple {
|
|||
fclose($fp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Сохраняем лог при завершении работы
|
||||
*/
|
||||
public function __destruct() {
|
||||
$this->Save();
|
||||
}
|
||||
|
||||
/**
|
||||
* Вычисляет полное время замера
|
||||
*
|
||||
* @param int $iTimeId
|
||||
* @param int $iTimeId Номер операции
|
||||
* @return float
|
||||
*/
|
||||
protected function GetTimeFull($iTimeId) {
|
||||
list($iStartSeconds,$iStartGeneral)=explode(' ',$this->aTimes[$this->sRequestId.$iTimeId]['time_start'],2);
|
||||
list($iStopSeconds,$iStopGeneral)=explode(' ',$this->aTimes[$this->sRequestId.$iTimeId]['time_stop'],2);
|
||||
|
||||
|
||||
return ($iStopSeconds-$iStartSeconds)+($iStopGeneral-$iStartGeneral);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue