1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-06-26 03:30:48 +03:00

Ограничение по времени на постинг на стене

This commit is contained in:
Mzhelskiy Maxim 2012-04-13 18:24:53 +04:00
parent ca8ff71d49
commit b035b10962
7 changed files with 63 additions and 3 deletions

View file

@ -404,6 +404,7 @@ class ActionProfile extends Action {
}
$oWall=Engine::GetEntity('Wall');
$oWall->_setValidateScenario('add');
$oWall->setWallUserId($this->oUserProfile->getId());
$oWall->setUserId($this->oUserCurrent->getId());
$oWall->setText(getRequest('sText'));

View file

@ -475,7 +475,43 @@ class ModuleACL extends Module {
}
return false;
}
}
/**
* Проверка на ограничение по времени на постинг на стене
*
* @param $oUser
* @param $oWall
* @return bool
*/
public function CanAddWallTime($oUser,$oWall) {
// Для администраторов ограничение по времени не действует
if($oUser->isAdministrator()
or Config::Get('acl.create.wall.limit_time')==0
or $oUser->getRating()>=Config::Get('acl.create.wall.limit_time_rating')) {
return true;
}
if ($oWall->getUserId()==$oWall->getWallUserId()) {
return true;
}
/**
* Получаем последнее сообщение
*/
$aWall=$this->Wall_GetWall(array('user_id'=>$oWall->getUserId()),array('id'=>'desc'),1,1,array());
/**
* Если сообщений нет
*/
if($aWall['count']==0){
return true;
}
$oWallLast = array_shift($aWall['collection']);
$sDate = strtotime($oWallLast->getDateAdd());
if($sDate and ((time()-$sDate)<Config::Get('acl.create.wall.limit_time'))) {
return false;
}
return true;
}
}
?>

View file

@ -21,12 +21,29 @@ class ModuleWall_EntityWall extends Entity {
* Определяем правила валидации
*/
protected $aValidateRules=array(
array('pid','pid'),
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);
$this->aValidateRules[]=array('text','string','max'=>Config::Get('module.wall.text_max'),'min'=>Config::Get('module.wall.text_min'),'allowEmpty'=>false,'on'=>array('','add'));
}
/**
* Проверка на ограничение по времени
*
* @param $sValue
* @param $aParams
*
* @return bool
*/
public function ValidateTimeLimit($sValue,$aParams) {
if ($oUser=$this->User_GetUserById($this->getUserId())) {
if ($this->ACL_CanAddWallTime($oUser,$this)) {
return true;
}
}
return $this->Lang_Get('wall_add_time_limit');
}
/**
* Валидация родительского сообщения

View file

@ -64,6 +64,7 @@ class ModuleWall_MapperWall extends Mapper {
{ AND pid = ?d }
{ AND pid IS NULL AND 1 = ?d }
{ AND wall_user_id = ?d }
{ AND user_id = ?d }
{ AND ip = ? }
{ AND id = ?d }
{ AND id < ?d }
@ -76,6 +77,7 @@ class ModuleWall_MapperWall extends Mapper {
(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['user_id']) ? $aFilter['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,

View file

@ -153,6 +153,8 @@ $config['acl']['create']['talk']['limit_time'] = 300; // время в
$config['acl']['create']['talk']['limit_time_rating'] = 1; // рейтинг, выше которого перестаёт действовать ограничение по времени на отправку инбоксов
$config['acl']['create']['talk_comment']['limit_time'] = 10; // время в секундах между отправкой инбоксов, если 0 то ограничение по времени не будет работать
$config['acl']['create']['talk_comment']['limit_time_rating'] = 5; // рейтинг, выше которого перестаёт действовать ограничение по времени на отправку инбоксов
$config['acl']['create']['wall']['limit_time'] = 20; // рейтинг, выше которого перестаёт действовать ограничение по времени на отправку сообщений на стену
$config['acl']['create']['wall']['limit_time_rating'] = 0; // рейтинг, выше которого перестаёт действовать ограничение по времени на отправку сообщений на стену
$config['acl']['vote']['comment']['rating'] = -3; // порог рейтинга при котором юзер может голосовать за комментарии
$config['acl']['vote']['blog']['rating'] = -5; // порог рейтинга при котором юзер может голосовать за блог
$config['acl']['vote']['topic']['rating'] = -7; // порог рейтинга при котором юзер может голосовать за топик

View file

@ -562,6 +562,7 @@ return array(
*/
'wall_add_pid_error' => 'At this message can not be reply',
'wall_add_error' => 'Error adding a post to the wall',
'wall_add_time_limit' => 'You can\'t send post on wall a frequent rate',
/**
* Configs.
*/

View file

@ -562,6 +562,7 @@ return array(
*/
'wall_add_pid_error' => 'На данное сообщение невозможно ответить',
'wall_add_error' => 'Ошибка добавления записи на стены',
'wall_add_time_limit' => 'Вам нельзя слишком часто писать на стене',
/**
* Настройки
*/