1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-05-19 17:28:23 +03:00

Документация классов

This commit is contained in:
Mzhelskiy Maxim 2012-06-27 17:18:38 +04:00
parent 318e26fae4
commit 0a7c5a53c1
10 changed files with 823 additions and 368 deletions

View file

@ -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);
}
/**
* Возвращет заметку по автору и пользователю
*

View file

@ -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

View file

@ -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);
}
}
?>

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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);
}
}
}
?>

View file

@ -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 стены
*

View file

@ -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();

View file

@ -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;
}
}
}
?>

View file

@ -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);
}
}