1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-05-21 10:18:19 +03:00

Доработана система блоков blacklist и speakers, расширена возможность управления статусами участия в разговоре.

This commit is contained in:
Alexey Kachayev 2009-08-27 19:54:31 +00:00
parent 12103ba034
commit fcf7f3a173
14 changed files with 155 additions and 65 deletions

View file

@ -133,7 +133,7 @@ class ActionTalk extends Action {
if(count($aFilter)>1) {
$this->Message_AddNotice(
($aResult['count'])
? $this->Lang_Get('talk_filter_result_count',array('%%count%%'=>$aResult['count']))
? $this->Lang_Get('talk_filter_result_count',array('count'=>$aResult['count']))
: $this->Lang_Get('talk_filter_result_empty')
);
}
@ -150,7 +150,7 @@ class ActionTalk extends Action {
'actions/ActionTalk/blacklist.tpl'
)
);
$this->Viewer_Assign('aPaging',$aPaging);
$this->Viewer_Assign('aPaging',$aPaging);
$this->Viewer_Assign('aTalks',$aTalks);
}
@ -283,7 +283,7 @@ class ActionTalk extends Action {
if (!($oTalkUser=$this->Talk_GetTalkUser($oTalk->getId(),$this->oUserCurrent->getId()))) {
return parent::EventNotFound();
}
if(!$oTalkUser->getIsActive()){
if($oTalkUser->getUserActive()!=LsTalk::TALK_USER_ACTIVE){
return parent::EventNotFound();
}
/**
@ -354,9 +354,9 @@ class ActionTalk extends Action {
} else {
$this->Message_AddError(
str_replace(
'%%login%%',
'login',
$oUser->getLogin(),
$this->Lang_Get('talk_user_in_blacklist')
$this->Lang_Get('talk_user_in_blacklist',array('login'=>$oUser->getLogin()))
),
$this->Lang_Get('error')
);

View file

@ -23,6 +23,13 @@ require_once('mapper/Talk.mapper.class.php');
*
*/
class LsTalk extends Module {
/**
* Статус TalkUser в базе данных
*/
const TALK_USER_ACTIVE = 1;
const TALK_USER_DELETE_BY_SELF = 2;
const TALK_USER_DELETE_BY_AUTHOR = 4;
protected $oMapper;
protected $oUserCurrent=null;
@ -334,7 +341,7 @@ class LsTalk extends Module {
* @param TalkEntity_TalkUser $oTalkUser
* @return unknown
*/
public function DeleteTalkUserByArray($aTalkId,$sUserId) {
public function DeleteTalkUserByArray($aTalkId,$sUserId,$iAcitve=self::TALK_USER_DELETE_BY_SELF) {
if(!is_array($aTalkId)){
$aTalkId=array($aTalkId);
}
@ -357,7 +364,7 @@ class LsTalk extends Module {
array("update_talk_user_{$sTalkId}")
);
}
return $this->oMapper->DeleteTalkUserByArray($aTalkId,$sUserId);
return $this->oMapper->DeleteTalkUserByArray($aTalkId,$sUserId,$iAcitve);
}
/**
* Есть ли юзер в этом разговоре
@ -371,7 +378,7 @@ class LsTalk extends Module {
if (isset($aTalkUser[$sTalkId])) {
return $aTalkUser[$sTalkId];
}
return null;
return null;
}
/**
* Получить все темы разговора где есть юзер

View file

@ -33,8 +33,10 @@ class TalkEntity_TalkUser extends Entity
return $this->_aData['comment_count_new'];
}
public function getIsActive(){
return $this->_aData['talk_user_active'];
public function getUserActive(){
return (array_key_exists('talk_user_active',$this->_aData))
? $this->_aData['talk_user_active']
: LsTalk::TALK_USER_ACTIVE;
}
public function getUser() {
return $this->_aData['user'];
@ -57,7 +59,7 @@ class TalkEntity_TalkUser extends Entity
$this->_aData['comment_count_new']=$data;
}
public function setIsActive($data) {
public function setUserActive($data) {
$this->_aData['talk_user_active']=$data;
}
public function setUser($data) {

View file

@ -77,7 +77,7 @@ class Mapper_Talk extends Mapper {
WHERE
t.user_id = ?d
AND
t.talk_id IN(?a)
t.talk_id IN(?a)
";
$aTalkUsers=array();
if ($aRows=$this->oDb->select($sql,$sUserId,$aArrayId)) {
@ -113,12 +113,20 @@ class Mapper_Talk extends Mapper {
$sql = "INSERT INTO ".Config::Get('db.table.talk_user')."
(talk_id,
user_id,
date_last
date_last,
talk_user_active
)
VALUES(?d, ?d, ?)
VALUES(?d, ?d, ?, ?d)
ON DUPLICATE KEY
UPDATE talk_user_active = ?d
";
if ($this->oDb->query($sql,$oTalkUser->getTalkId(),$oTalkUser->getUserId(),$oTalkUser->getDateLast())===0)
{
if ($this->oDb->query($sql,
$oTalkUser->getTalkId(),
$oTalkUser->getUserId(),
$oTalkUser->getDateLast(),
$oTalkUser->getUserActive(),
$oTalkUser->getUserActive()
)===0) {
return true;
}
return false;
@ -143,7 +151,7 @@ class Mapper_Talk extends Mapper {
$oTalkUser->getDateLast(),
$oTalkUser->getCommentIdLast(),
$oTalkUser->getCommentCountNew(),
$oTalkUser->getIsActive(),
$oTalkUser->getUserActive(),
$oTalkUser->getTalkId(),
$oTalkUser->getUserId()
)
@ -154,20 +162,20 @@ class Mapper_Talk extends Mapper {
}
public function DeleteTalkUserByArray($aTalkId,$sUserId) {
public function DeleteTalkUserByArray($aTalkId,$sUserId,$iActive) {
if (!is_array($aTalkId)) {
$aTalkId=array($aTalkId);
}
$sql = "
UPDATE ".Config::Get('db.table.talk_user')."
SET
talk_user_active = 0
talk_user_active = ?d
WHERE
talk_id IN (?a)
AND
user_id = ?d
";
if ($this->oDb->query($sql,$aTalkId,$sUserId))
if ($this->oDb->query($sql,$iActive,$aTalkId,$sUserId))
{
return true;
}
@ -185,9 +193,9 @@ class Mapper_Talk extends Mapper {
WHERE
tu.user_id = ?d
AND
tu.talk_user_active=1
tu.talk_user_active=?d
";
if ($aRow=$this->oDb->selectRow($sql,$sUserId)) {
if ($aRow=$this->oDb->selectRow($sql,$sUserId, LsTalk::TALK_USER_ACTIVE)) {
return $aRow['count_new'];
}
return false;
@ -204,9 +212,9 @@ class Mapper_Talk extends Mapper {
AND
tu.user_id = ?d
AND
tu.talk_user_active=1
tu.talk_user_active=?d
";
if ($aRow=$this->oDb->selectRow($sql,$sUserId)) {
if ($aRow=$this->oDb->selectRow($sql,$sUserId,LsTalk::TALK_USER_ACTIVE)) {
return $aRow['count_new'];
}
return false;
@ -223,13 +231,13 @@ class Mapper_Talk extends Mapper {
AND
tu.talk_id=t.talk_id
AND
tu.talk_user_active = '1'
tu.talk_user_active = ?d
ORDER BY t.talk_date_last desc, t.talk_date desc
LIMIT ?d, ?d
";
$aTalks=array();
if ($aRows=$this->oDb->selectPage($iCount,$sql,$sUserId,($iCurrPage-1)*$iPerPage, $iPerPage)) {
if ($aRows=$this->oDb->selectPage($iCount,$sql,$sUserId,LsTalk::TALK_USER_ACTIVE,($iCurrPage-1)*$iPerPage, $iPerPage)) {
foreach ($aRows as $aRow) {
$aTalks[]=$aRow['talk_id'];
}
@ -310,7 +318,7 @@ class Mapper_Talk extends Mapper {
".Config::Get('db.table.user')." as u
WHERE
tu.talk_id=t.talk_id
AND tu.talk_user_active = '1'
AND tu.talk_user_active = ?d
AND u.user_id=t.user_id
{ AND tu.user_id = ?d }
{ AND t.talk_date < ? }
@ -326,6 +334,7 @@ class Mapper_Talk extends Mapper {
$aRows=$this->oDb->selectPage(
$iCount,
$sql,
LsTalk::TALK_USER_ACTIVE,
(!empty($aFilter['user_id']) ? $aFilter['user_id'] : DBSIMPLE_SKIP),
(!empty($aFilter['date_max']) ? $aFilter['date_max'] : DBSIMPLE_SKIP),
(!empty($aFilter['date_min']) ? $aFilter['date_min'] : DBSIMPLE_SKIP),

View file

@ -292,6 +292,8 @@ $config['module']['talk']['reload'] = true;
$config['module']['talk']['request'] = 60;
$config['module']['talk']['period'] = 20000;
$config['module']['talk']['max_errors'] = 4;
// Модуль Lang
$config['module']['lang']['delete_undefined'] = true; // Если установлена true, то модуль будет автоматически удалять из языковых конструкций переменные вида %%var%%, по которым не была произведена замена
// Какие модули должны быть загружены на старте
$config['module']['autoLoad'] = array('Cache','Session','User', 'Lang');

View file

@ -105,15 +105,25 @@ class LsLang extends Module {
/**
* Получает текстовку по её имени
*
* @param unknown_type $sName
* @param string $sName
* @param array $aReplace
* @return string
*/
public function Get($sName,$aReplace=array()) {
if (isset($this->aLangMsg[$sName])) {
$sTranslate=$this->aLangMsg[$sName];
return (is_array($aReplace)&&count($aReplace))
? $sTranslate=strtr($sTranslate,$aReplace)
: $sTranslate;
if(is_array($aReplace)&&count($aReplace)) {
foreach ($aReplace as $sFrom => $sTo) {
$aReplacePairs["%%{$sFrom}%%"]=$sTo;
}
$sTranslate=strtr($sTranslate,$aReplacePairs);
}
if(Config::Get('module.lang.delete_undefined')) {
$sTranslate=preg_replace("/\%\%[\S]+\%\%/",'',$sTranslate);
}
return $sTranslate;
}
return 'NOT_FOUND_LANG_TEXT';
}

View file

@ -44,7 +44,7 @@ if ($oEngine->User_IsAuthorization()) {
$aResult[]=array(
'bStateError'=>false,
'sMsgTitle'=>$oEngine->Lang_Get('attention'),
'sMsg'=>$oEngine->Lang_Get('talk_blacklist_add_ok',array('%%login%%'=>$sUser)),
'sMsg'=>$oEngine->Lang_Get('talk_blacklist_add_ok',array('login'=>$sUser)),
'sUserId'=>$oUser->getId(),
'sUserLogin'=>$sUser
);
@ -60,7 +60,7 @@ if ($oEngine->User_IsAuthorization()) {
$aResult[]=array(
'bStateError'=>true,
'sMsgTitle'=>$oEngine->Lang_Get('error'),
'sMsg'=>$oEngine->Lang_Get('talk_blacklist_user_already_have',array('%%login%%'=>$sUser)),
'sMsg'=>$oEngine->Lang_Get('talk_blacklist_user_already_have',array('login'=>$sUser)),
'sUserLogin'=>$sUser
);
continue;
@ -69,7 +69,7 @@ if ($oEngine->User_IsAuthorization()) {
$aResult[]=array(
'bStateError'=>true,
'sMsgTitle'=>$oEngine->Lang_Get('error'),
'sMsg'=>$oEngine->Lang_Get('module_error_user_not_found',array('%%login%%'=>$sUser)),
'sMsg'=>$oEngine->Lang_Get('user_not_found',array('login'=>$sUser)),
'sUserLogin'=>$sUser
);
}

View file

@ -45,7 +45,64 @@ if ($oEngine->User_IsAuthorization()) {
if ( ($oUser=$oEngine->User_GetUserByLogin($sUser))
&& ($oUser->getActivate()==1) ) {
if(!in_array($oUser->getId(),$aUserInBlacklist)) {
if(!array_key_exists($oUser->getId(),$aTalkUsers)) {
if(array_key_exists($oUser->getId(),$aTalkUsers)) {
switch($aTalkUsers[$oUser->getId()]->getUserActive()) {
case LsTalk::TALK_USER_DELETE_BY_AUTHOR:
if (
$oEngine->Talk_AddTalkUser(
new TalkEntity_TalkUser(
array(
'talk_id'=>$idTalk,
'user_id'=>$oUser->getId(),
'date_last'=>null,
'talk_user_active'=>LsTalk::TALK_USER_ACTIVE
)
)
)
) {
$oEngine->Notify_SendTalkNew($oUser,$oUserCurrent,$oTalk);
$aResult[]=array(
'bStateError'=>false,
'sMsgTitle'=>$oEngine->Lang_Get('attention'),
'sMsg'=>$oEngine->Lang_Get('talk_speaker_add_ok',array('login',$sUser)),
'sUserId'=>$oUser->getId(),
'sUserLogin'=>$oUser->getLogin()
);
$bState=true;
} else {
$aResult[]=array(
'bStateError'=>true,
'sMsgTitle'=>$oEngine->Lang_Get('error'),
'sMsg'=>$oEngine->Lang_Get('system_error')
);
}
break;
case LsTalk::TALK_USER_ACTIVE:
$aResult[]=array(
'bStateError'=>true,
'sMsgTitle'=>$oEngine->Lang_Get('error'),
'sMsg'=>$oEngine->Lang_Get('talk_speaker_user_already_exist',array('login'=>$sUser))
);
break;
case LsTalk::TALK_USER_DELETE_BY_SELF:
$aResult[]=array(
'bStateError'=>true,
'sMsgTitle'=>$oEngine->Lang_Get('error'),
'sMsg'=>$oEngine->Lang_Get('talk_speaker_delete_by_self',array('login'=>$sUser))
);
break;
default:
$aResult[]=array(
'bStateError'=>true,
'sMsgTitle'=>$oEngine->Lang_Get('error'),
'sMsg'=>$oEngine->Lang_Get('system_error')
);
}
} else {
if (
$oEngine->Talk_AddTalkUser(
new TalkEntity_TalkUser(
@ -53,7 +110,7 @@ if ($oEngine->User_IsAuthorization()) {
'talk_id'=>$idTalk,
'user_id'=>$oUser->getId(),
'date_last'=>null,
'talk_user_active'=>'1'
'talk_user_active'=>LsTalk::TALK_USER_ACTIVE
)
)
)
@ -62,7 +119,7 @@ if ($oEngine->User_IsAuthorization()) {
$aResult[]=array(
'bStateError'=>false,
'sMsgTitle'=>$oEngine->Lang_Get('attention'),
'sMsg'=>$oEngine->Lang_Get('talk_speaker_add_ok',array('%%login%%',$sUser)),
'sMsg'=>$oEngine->Lang_Get('talk_speaker_add_ok',array('login',$sUser)),
'sUserId'=>$oUser->getId(),
'sUserLogin'=>$oUser->getLogin()
);
@ -73,33 +130,27 @@ if ($oEngine->User_IsAuthorization()) {
'sMsgTitle'=>$oEngine->Lang_Get('error'),
'sMsg'=>$oEngine->Lang_Get('system_error')
);
}
} else {
$aResult[]=array(
'bStateError'=>true,
'sMsgTitle'=>$oEngine->Lang_Get('error'),
'sMsg'=>$oEngine->Lang_Get('talk_speaker_user_already_exist',array('%%login%%',$sUser))
);
}
}
} else {
$aResult[]=array(
'bStateError'=>true,
'sMsgTitle'=>$oEngine->Lang_Get('error'),
'sMsg'=>$oEngine->Lang_Get('talk_user_in_blacklist',array('%%login%%',$sUser))
'sMsg'=>$oEngine->Lang_Get('talk_user_in_blacklist',array('login'=>$sUser))
);
}
} else {
$aResult[]=array(
'bStateError'=>true,
'sMsgTitle'=>$oEngine->Lang_Get('error'),
'sMsg'=>$oEngine->Lang_Get('module_error_user_not_found',array('%%login%%',$sUser)),
'sMsg'=>$oEngine->Lang_Get('user_not_found',array('login'=>$sUser)),
'sUserLogin'=>$sUser
);
}
}
} else {
$sMsgTitle=$oEngine->Lang_Get('error');
$sMsg=$oEngine->Lang_Get('module_error_talk_not_found');
$sMsg=$oEngine->Lang_Get('talk_not_found');
}
} else {
$sMsgTitle=$oEngine->Lang_Get('error');

View file

@ -36,16 +36,16 @@ if ($oEngine->User_IsAuthorization()) {
if ($oEngine->Talk_DeleteUserFromBlacklist($idTarget,$oUserCurrent->getId())) {
$bStateError=false;
$sMsgTitle=$oEngine->Lang_Get('attention');
$sMsg=$oEngine->Lang_Get('talk_blacklist_delete_ok',array('%%login%%'=>$oUserTarget->getLogin()));
$sMsg=$oEngine->Lang_Get('talk_blacklist_delete_ok',array('login'=>$oUserTarget->getLogin()));
$bState=true;
} else {
$sMsgTitle=$oEngine->Lang_Get('error');
$sMsg=$oEngine->Lang_Get('talk_blacklist_user_not_found',array('%%login%%'=>$oUserTarget->getLogin()));
$sMsg=$oEngine->Lang_Get('talk_blacklist_user_not_found',array('login'=>$oUserTarget->getLogin()));
}
}
} else {
$sMsgTitle=$oEngine->Lang_Get('error');
$sMsg=$oEngine->Lang_Get('module_error_user_not_found',array('%%login%%'=>$oUserTarget->getLogin()));
$sMsg=$oEngine->Lang_Get('user_not_found_by_id',array('id'=>$idTarget));
}
} else {
$sMsgTitle=$oEngine->Lang_Get('error');

View file

@ -35,11 +35,12 @@ if ($oEngine->User_IsAuthorization()) {
if(($oTalk=$oEngine->Talk_GetTalkById($idTalk))
&& ($oTalk->getUserId()==$oUserCurrent->getId()) ) {
$aTalkUsers=$oTalk->getTalkUsers();
if(!isset($aTalkUsers[$idTarget]) || !$aTalkUsers[$idTarget]->getIsActive()) {
if ($oEngine->Talk_DeleteTalkUserByArray($idTalk,$idTarget)) {
if(!isset($aTalkUsers[$idTarget])
|| !$aTalkUsers[$idTarget]->getUserActive()!=LsTalk::TALK_USER_DELETE_BY_SELF) {
if ($oEngine->Talk_DeleteTalkUserByArray($idTalk,$idTarget,LsTalk::TALK_USER_DELETE_BY_AUTHOR)) {
$bStateError=false;
$sMsgTitle=$oEngine->Lang_Get('attention');
$sMsg=$oEngine->Lang_Get('talk_speaker_delete_ok',array('%%login%%'=>$oUserTarget->getLogin()));
$sMsg=$oEngine->Lang_Get('talk_speaker_delete_ok',array('login'=>$oUserTarget->getLogin()));
$bState=true;
} else {
$sMsgTitle=$oEngine->Lang_Get('error');
@ -47,15 +48,15 @@ if ($oEngine->User_IsAuthorization()) {
}
} else {
$sMsgTitle=$oEngine->Lang_Get('error');
$sMsg=$oEngine->Lang_Get('talk_speaker_user_not_found',array('%%login%%'=>$oUserTarget->getLogin()));
$sMsg=$oEngine->Lang_Get('talk_speaker_user_not_found',array('login'=>$oUserTarget->getLogin()));
}
} else {
$sMsgTitle=$oEngine->Lang_Get('error');
$sMsg=$oEngine->Lang_Get('module_error_talk_not_found');
$sMsg=$oEngine->Lang_Get('talk_not_found');
}
} else {
$sMsgTitle=$oEngine->Lang_Get('error');
$sMsg=$oEngine->Lang_Get('module_error_user_not_found',array('%%login%%'=>$oUserTarget->getLogin()));
$sMsg=$oEngine->Lang_Get('user_not_found_by_id',array('id'=>$idTarget));
}
} else {
$sMsgTitle=$oEngine->Lang_Get('error');

View file

@ -352,7 +352,10 @@ return array(
'user_stats_sex_man' => 'Мужчины',
'user_stats_sex_woman' => 'Женщины',
'user_stats_sex_other' => 'Пол не указан',
'user_not_found' => 'Пользователь <b>%%login%%</b> не найден',
'user_not_found_by_id' => 'Пользователь <b>#%%id%%</b> не найден',
/**
* Меню профиля пользователя
*/
@ -641,7 +644,10 @@ return array(
'talk_speaker_user_not_found' => 'Пользователь <b>%%login%%</b> не участвует в разговоре',
'talk_speaker_user_already_exist' => ' <b>%%login%%</b> уже участник разговора',
'talk_speaker_add_ok' => 'Участник <b>%%login%%</b> успешно добавлен',
'talk_speaker_delete_by_self' => 'Участник <b>%%login%%</b> удалил этот разговор',
'talk_not_found' => 'Разговор не найден',
/**
* Рейтинг TOP
*/
@ -708,9 +714,6 @@ return array(
'system_error_template' => 'Не найден шаблон',
'system_error_template_block' => 'Не найден шаблон подключаемого блока',
'module_error_user_not_found' => 'Пользователь <b>%%login%%</b> не найден',
'module_error_talk_not_found' => 'Разговор не найден',
'error' => 'Ошибка',
'attention' => 'Внимание',
'system_error' => 'Системная ошибка, повторите позже',

View file

@ -18,9 +18,10 @@
{assign var="oTalkUser" value=$oTalk->getTalkUser()}
<tr>
<td class="name">
{foreach from=$oTalk->getUsers() item=oUser name=users}
{if $oUser->getId()!=$oUserCurrent->getId()}
<a href="{$oUser->getUserWebPath()}" class="author">{$oUser->getLogin()}</a>
{foreach from=$oTalk->getTalkUsers() item=oUser name=users}
{if $oUser->getUserId()!=$oUserCurrent->getId()}
{assign var="oAdditionalUser" value=$oUser->getUser()}
<a href="{$oAdditionalUser->getUserWebPath()}" class="author {if !$oUser->getUserActive()!=1}inactive{/if}">{$oAdditionalUser->getLogin()}</a>
{/if}
{/foreach}
</td>

View file

@ -24,7 +24,7 @@
{foreach from=$oTalk->getTalkUsers() item=oUser name=users}
{if $oUser->getUserId()!=$oUserCurrent->getId()}
{assign var="oAdditionalUser" value=$oUser->getUser()}
<a href="{$oAdditionalUser->getUserWebPath()}" class="author {if !$oUser->getIsActive()}inactive{/if}">{$oAdditionalUser->getLogin()}</a>
<a href="{$oAdditionalUser->getUserWebPath()}" class="author {if !$oUser->getUserActive()!=1}inactive{/if}">{$oAdditionalUser->getLogin()}</a>
{/if}
{/foreach}
</td>

View file

@ -43,6 +43,10 @@
return true;
}
function addListItem(sId,sLogin) {
if($('speakerList').getElements('span:contains(kachayev)').length==1) {
return false;
}
oSpan=new Element('span',
{
'class' : 'user',
@ -113,7 +117,7 @@
{foreach from=$oTalk->getTalkUsers() item=oUser name=users}
{if $oUser->getUserId()!=$oUserCurrent->getId()}
{assign var="oAdditionalUser" value=$oUser->getUser()}
<li><span class="user {if !$oUser->getIsActive()}inactive{/if}">{$oAdditionalUser->getLogin()}</span>{if $oUser->getIsActive()}<a href="#" id="speaker_item_{$oUser->getUserId()}" onclick="deleteFromTalk(this,{$oTalk->getId()}); return false;" class="delete"></a>{/if}</li>
{if $oUser->getUserActive()!=4}<li><span class="user {if $oUser->getUserActive()!=1}inactive{/if}">{$oAdditionalUser->getLogin()}</span>{if $oUser->getUserActive()==1}<a href="#" id="speaker_item_{$oUser->getUserId()}" onclick="deleteFromTalk(this,{$oTalk->getId()}); return false;" class="delete"></a>{/if}</li>{/if}
{/if}
{/foreach}
</ul>