ExBB Community » Файловый ExBB » Модификации и дополнения » Мод: Бан лист

Страниц (6): [1] 2 3 4 5 6 »
 

1. RomAndry - 17 февраля 2010 — 20:35 - перейти к сообщению
Приветствую.
Вот понадобилось сделать для форума портала PHP.SU нечто более, чем текущий бан.

К примеру временная блокировка и указание причины бана. Так же нужен список забаненных товарищей с информацией кого, когда, на сколько и кто забанил. Так же кто разбанил, Модератор или сам скрипт по истечению (авторазбан работает, когда забаненный юзер пытается зайти по истечению срока бана. Возможно лучшее решение это крон раз в сутки).

Бан ставится минимум на 1 день. Возможно разбанить и раньше - обычной кнопкой "Разбанить"

Я слышал, что в новой версии будет улучшен этот алгоритм, но сегодня появилось время и решил сделать - может кому еще пригодится.

1. Для начала создаем в папке data папку banned_users и сразу ставим права 777 (rwxrwxrwx). В этой папке будут храниться файлы ИДюзера.php

2. в файле profile.php после строки

CODE:
if ($is_moder && !$to_moder) {


коменируем

CODE:
// $moders_ban= '<a href="..........';


и добавляем код

Спойлер (Отобразить)


3. в файле tools.php после строк

CODE:
case 'members':
memberslist();
break;


добавиляем
CODE:

case 'banmembers':
banmemberslist();
break;


там же перед строкой

CODE:
function memberslist() {


добавляем

CODE:

function banmemberslist() {
global $fm;
$users = $fm->_Read(FM_USERS);

$userskeys = array_keys($users);

$banmembers_data = '';
$time_end = time();
$is_moder = ($fm->user['status'] == 'ad' || $fm->user['status'] == 'sm') ? 1 : 0;
foreach ($userskeys AS $key => $user_id) {
$user = $fm->_GetBanMember($user_id);
if(!$user){continue;}
if($user['end'] < $time_end AND $is_moder==0) {continue;}
$user['user_name'] = ($user['end'] < time() OR $user['days']==0) ? $user['user_name'] : '<font color=\'red\'>'.$user['user_name'].'</font>';
$user['date'] = $fm->_DateFormat($user['date']);
$user['end'] = $user['days']>=999 ? 'никогда' : $fm->_DateFormat($user['end']);
$user['days'] = $user['days']>0 ? ($user['days']>=999 ? '-' : $user['days']) : $fm->LANG['BanUnSeted'];
$user['whounban'] = (isset($user['whounban_id']) AND $user['whounban_id']>0) ? '<a href="profile.php?action=show&member='.$user['whounban_id'].'" title="'.$fm->LANG['UserProfile'].' '.$user['whounban_name'].'">'.$user['whounban_name'].'</a>' : ($user['days']==0 ? 'Auto' : '');
include('./templates/'.DEF_SKIN.'/banmemblist_data.tpl');
unset($user);

}


4. в файле loginout.php после строк

CODE:
$fm->_Fclose($fp_user);
$fm->_WriteLog($fm->LANG['BannedLoged']);


добавляем

CODE:
if($text_ban = $fm->_AutoUnBan($user, TRUE)) {
$fm->_Message($fm->LANG['ErrorLogin'],$fm->LANG['LoginDeniedBan'].'<br />'.$text_ban);
}


5. в файле include/fm.class.php

перед

CODE:
/*
_Locale установка локальных настроек форума для пользователя и гостя
*/
function _Locale() {


добавляем

CODE:

/*
_AutoUnBan разбанивание по окончании времени действия бана
*/
function _AutoUnBan($user, $msg=FALSE){
$usrban = $this->_Read('data/banned_users/'.$user['id'].'.php');
if($usrban['end'] < time()) {
$user_ban = $this->_Read2Write($fp_ban, 'data/banned_users/'.$user['id'].'.php');
$user_ban['whounban_id'] = 0;
$user_ban['whounban_name'] = 'auto';
$user_ban['days'] = 0;
$this->_Write($fp_ban, $user_ban);

$user_unban = $this->_Read2Write($fp_user_unban, 'members/'.$user['id'].'.php');
$user_unban['status'] = 'me';
$this->_Write($fp_user_unban, $user_unban);
$this->_Mail($this->exbb['boardname'],$this->exbb['adminemail'],$this->exbb['adminemail'], 'AutoUnBanned User (PHP.SU)', 'AutoUnBan '.$user['name']);
$this->_WriteLog(sprintf('AutoUnBan', 'Auto', '<b>'.$user['name'].'</b>'), 2); // Запись в лог
return false;
}
if($msg) {
return '<br />Причина: '.$usrban['reason'].'<br /> Дней: '.$usrban['days'].'<br /> Дата окончания: '.$this->_DateFormat($usrban['end']);
}
return true;
}


после

CODE:
if ($this->user['id'] == 0) {
$this->user['name'] = $this->LANG['Guest'];
}elseif ($this->user['status'] == 'banned') {


добавляем

CODE:

if($text_ban =$this->_AutoUnBan($this->user,TRUE)) {
$this->_Message($this->LANG['MainMsg'],$this->LANG['LoginDeniedBan'].$text_ban,'',1);
}


7. в файле language/russian/lang_front_all.php перед строкой

CODE:
?>


добаляем

CODE:

$this->LANG['BanUnSeted'] = 'Разбанен';
$this->LANG['BanReason'] = 'Причина';
$this->LANG['BanDays'] = 'Дней';
$this->LANG['BanDate'] = 'Дата бана';
$this->LANG['BanDateEnd'] = 'Дата окончания';
$this->LANG['BanUser'] = 'Пользователь';
$this->LANG['BanWho'] = 'Кто забанил';
$this->LANG['BanWhoUnban'] = 'Кто разбанил';


8. в файле language/russian/lang_front_register.php перед строкой

CODE:
?>


добавляем

CODE:

$this->LANG['Punad'] = 'Администратор';
$this->LANG['Punsm'] = 'Супермодератор';
/*
Ban/UnBan
*/
$this->LANG['BanReason'] = 'Причина';
$this->LANG['BanDays'] = 'Дней';
$this->LANG['BanDate'] = 'Дата';
$this->LANG['BanDateEnd'] = 'Дата окончания';
$this->LANG['BanSet'] = 'Забанить';
$this->LANG['BanUnSet'] = 'Разбанить';
$this->LANG['BanErrorReason'] = 'Укажите причину бана';
$this->LANG['BanErrorDays'] = 'Укажите количество дней бана (целое число от 1)';


9. в файле templates/InvisionBB/logos.tpl

за строкой

CODE:
<a href="tools.php?action=members" title="{$fm->LANG['Users']}"><img src="./templates/InvisionExBB/im/members.gif" border="0" alt="{$fm->LANG['Users']}" />&nbsp;<b>{$fm->LANG['Users']}</b></a>


добавляем

CODE:

<a href="tools.php?action=banmembers" title="{$fm->LANG['BanUsers']}"><img src="./templates/InvisionExBB/im/banmembers.gif" border="0" alt="{$fm->LANG['BanUsers']}" />&nbsp;<b>{$fm->LANG['BanUsers']}</b></a>


10. создаем файл templates/InvisionBB/banmemblist.tpl с таким содержанием :
CODE:

<?php
echo <<<MEMBERS
<br/>
<div id="navstrip" align="left">
<img src="./templates/InvisionExBB/im/nav.gif" border="0" alt="&gt;" />&nbsp;<a href="index.php">{$fm->exbb['boardname']}</a>&nbsp;&raquo;&nbsp;<a href="tools.php?action=banmembers">{$fm->LANG['BanMemberlist']}</a>
</div>
<table width="100%" cellpadding="0" cellspacing="1" class="tableborder">
<tr>
<td class="maintitle" colspan="8"><img src="./templates/InvisionExBB/im/nav_m.gif" border="0" alt="&gt;" width="8" height="8" />&nbsp;{$fm->LANG['BanMemberlist']}</td>
</tr>
<tr class="postlinksbar" align="center">
<td width="15%" height="29">{$fm->LANG['BanUser']}</td>
<td width="33%">{$fm->LANG['BanReason']}</td>
<td width="15%">{$fm->LANG['BanDate']}</td>
<td width="2%">{$fm->LANG['BanDays']}</td>
<td width="15%">{$fm->LANG['BanDateEnd']}</td>
<td width="15%">{$fm->LANG['BanWho']}</td>
<td width="15%">{$fm->LANG['BanWhoUnban']}</td>
</tr>
{$banmembers_data}
<tr>
<td class="activeuserstrip" align="center" colspan="8">&nbsp;</td>
</tr>
</table>
MEMBERS;
?>


11. создаем файл templates/InvisionBB/banmemblist_data.tpl с таким содержанием :

CODE:

<?php
$banmembers_data .= <<<DATA
<tr align="center">
<td class="row2"><b><a href="profile.php?action=show&member={$user_id}" title="{$fm->LANG['UserProfile']} {$user['user_name']}">{$user['user_name']}</a></b</td>
<td class="row2">{$user['reason']}</td>
<td class="row2">{$user['date']}</td>
<td class="row2">{$user['days']}</td>
<td class="row2">{$user['end']}</td>
<td class="row2"><b><a href="profile.php?action=show&member={$user['who_id']}" title="{$fm->LANG['UserProfile']} {$user['who_name']}">{$user['who_name']}</a></b</td>
<td class="row2">{$user['whounban']}</td>
</tr>
DATA;
?>


пара моментов которые зацепил походу:

1. в файле modules/punish/profile.php
строку
CODE:
$whoadd = $fm->LANG['Pun'.$status].$moder;


заменить на

CODE:
$whoadd = (isset($fm->LANG['Pun'.$status]) ? $fm->LANG['Pun'.$status].' - ' : '').$moder;


2. в файле language/russian/lang_front_all.php
(необходимо так как забаненному выскакивает предупреждение из шаблона админки) добавляем

CODE:
$this->LANG['Administrating'] = 'Администрирование ExBB FM';


Конечно, много нюансов и вопросов остается, но сделал за несколько часов, и в будущем буду модифицировать и выкладывать
Как это выглядит:
1. В профиле юзера модераторы видят форму с полями для бана
2. http://forum.php.su/tools.php?action=banmembers
Модераторы так же видят кого разбанили.

Возможно лучшее решение это удалять разбаненого пользователя из папки data/banned_users/.
2. electron - 20 февраля 2010 — 18:49 - перейти к сообщению
RomAndry , конечно задумка офигенная, но на вашем форуме на страничке бан-листа ошибка
Цитата:
Notice: Undefined index: whounban_id in /home/admin/public_html/forum/tools.php on line 245
3. Александр Михалицын - 21 февраля 2010 — 12:45 - перейти к сообщению
RomAndry,
увеличил максимальный размер сообщения в 2 раза. Улыбка

Отредактировал ваш пост тут (добавил первый пост из второй темы).
Вторую тему удалил.
4. electron - 21 февраля 2010 — 14:26 - перейти к сообщению
и я тоже подредактировал - добавил тэги [code] где это надо, для более правильного отображения Улыбка
5. RomAndry - 21 февраля 2010 — 17:19 - перейти к сообщению
Да, спасибо, что поправили - я больше думал что бы ничего не забыть
по поводу ошибки я испрваил ее и отредактировал топик.
Было:
CODE:

$user['whounban'] = $user['whounban_id']>0 ? '<a href="profile.php?action=show&member='.$user['whounban_id'].'" title="'.$fm->LANG['UserProfile'].' '.$user['whounban_name'].'">'.$user['whounban_name'].'</a>' : 'Auto';


сейчас:
CODE:
$user['whounban'] = (isset($user['whounban_id']) AND $user['whounban_id']>0) ? '<a href="profile.php?action=show&member='.$user['whounban_id'].'" title="'.$fm->LANG['UserProfile'].' '.$user['whounban_name'].'">'.$user['whounban_name'].'</a>' : ($user['days']==0 ? 'Auto' : '');
6. electron - 21 февраля 2010 — 17:36 - перейти к сообщению
RomAndry пишет:
я больше думал что бы ничего не забыть

все-таки забыл кое-что Улыбка
в файл language/russian/lang_front_all.php просто необходимо добавить строку
CODE:
$this->LANG['BanUsers'] = "Банлист";


и еще. назрел вопрос. если при установке данного мода правится файл logos.tpl - почему на вашем сайте ссылка на бан-лист видна только на страничке http://forum.php.su/tools.php?action=banmembers , а не на всех страницах форума?
7. RomAndry - 21 февраля 2010 — 18:09 - перейти к сообщению
electron пишет:
и еще. назрел вопрос. если при установке данного мода правится файл logos.tpl - почему на вашем сайте ссылка на бан-лист видна только на страничке http://forum.php.su/tools.php?action=banmembers , а не на всех страницах форума?

Я пока думаю и ищу варианты как лучше...
Не увидел смысла показывать банлист везде
Как его лучше- не знаю, надеюсь и с Вашей помощью поравить неточности

logos.tpl
сразу после <?php
вставляем
CODE:

$banlist = '';
if(isset($fm->input['action']) AND ($fm->input['action']=='members' OR $fm->input['action']=='banmembers')){
$banlist = <<<BANLIST
<a href="tools.php?action=banmembers" title="{$fm->LANG['BanUsers']}"><img src="./templates/InvisionExBB/im/banmembers.gif" border="0" alt="{$fm->LANG['BanUsers']}" />&nbsp;<b>{$fm->LANG['BanUsers']}</b></a>
BANLIST;
}


и меняем
CODE:
<a href="tools.php?action=banmembers" title="{$fm->LANG['BanUsers']}"><img src="./templates/InvisionExBB/im/banmembers.gif" border="0" alt="{$fm->LANG['BanUsers']}" />&nbsp;<b>{$fm->LANG['BanUsers']}</b></a>

на
CODE:
{$banlist}
8. electron - 21 февраля 2010 — 18:12 - перейти к сообщению
RomAndry пишет:
Не увидел смысла показывать банлист везде

ну почему же? как раз данную информацию надо светить везде, чтоб забаненным позорно было. имхо.

поставил мод себе - белый экран при входе на страницу банлиста. странно...
9. RomAndry - 21 февраля 2010 — 19:12 - перейти к сообщению
там в коде обрезалась функция в файле tools.php, а отредактировать не могу из-за тех же 10кб ограничения. в этом файле перед строкой
CODE:
function memberslist() {

надо добавлять такой код:
CODE:
function banmemberslist() {
global $fm;
$users = $fm->_Read(FM_USERS);

$userskeys = array_keys($users);

$banmembers_data = '';
$time_end = time();
$is_moder = ($fm->user['status'] == 'ad' || $fm->user['status'] == 'sm') ? 1 : 0;
foreach ($userskeys AS $key => $user_id) {
$user = $fm->_GetBanMember($user_id);
if(!$user){continue;}
if($user['end'] < $time_end AND $is_moder==0) {continue;}
$user['user_name'] = ($user['end'] < time() OR $user['days']==0) ? $user['user_name'] : '<font color=\'red\'>'.$user['user_name'].'</font>';
$user['date'] = $fm->_DateFormat($user['date']);
$user['end'] = $user['days']>=999 ? 'никогда' : $fm->_DateFormat($user['end']);
$user['days'] = $user['days']>0 ? ($user['days']>=999 ? '-' : $user['days']) : $fm->LANG['BanUnSeted'];
$user['whounban'] = (isset($user['whounban_id']) AND $user['whounban_id']>0) ? '<a href="profile.php?action=show&member='.$user['whounban_id'].'" title="'.$fm->LANG['UserProfile'].' '.$user['whounban_name'].'">'.$user['whounban_name'].'</a>' : ($user['days']==0 ? 'Auto' : '');
// $user['who_name'] = (isset($fm->LANG['Pun'.$status]) ? $fm->LANG['Pun'.$status].' - ' : '').$user['who_name'];
include('./templates/'.DEF_SKIN.'/banmemblist_data.tpl');
unset($user);

}

$fm->_Title = ' :: '.$fm->LANG['BanMemberlist'];
include('./templates/'.DEF_SKIN.'/all_header.tpl');
include('./templates/'.DEF_SKIN.'/logos.tpl');
include('./templates/'.DEF_SKIN.'/banmemblist.tpl');
include('./templates/'.DEF_SKIN.'/footer.tpl');

}


в файле include/fm.class.php
после
CODE:

function _Getmember($uid) {
if ($this->_Checkuser($uid)) {
$userfile = 'members/'.$uid.'.php';
return $this->_Read($userfile,FALSE);
}
return FALSE;
}




добавляем функцию:

CODE:

/*
_GetBanMember возвращает инфо о забаненом пользователе с ID переданным в аргументе
*/
function _GetBanMember($uid) {
if ($this->_Checkuser($uid)) {
$userfile = 'data/banned_users/'.$uid.'.php';
return $this->_Read($userfile,FALSE);
}
return FALSE;
}



в language/russian/lang_front_tools.php добавить

CODE:
$this->LANG['BanMemberlist'] = 'Ban List';


в language/russian/lang_front_all.php добавить

CODE:
$this->LANG['BanUsers'] = 'BanList';
10. lisiycat - 21 февраля 2010 — 19:24 - перейти к сообщению
Просьба к модераторам, пожалуйста слепите инструкцию по установке мода в одно сообщение...
Хочу себе поставить попробовать, так глаза разбегаются Не понял - сейчас очень неудобно выглядит
11. electron - 21 февраля 2010 — 19:34 - перейти к сообщению
вот теперь всё работает. спасибо

lisiycat пишет:
Просьба к модераторам, пожалуйста слепите инструкцию по установке мода в одно сообщение...
Хочу себе поставить попробовать, так глаза разбегаются - сейчас очень неудобно выглядит

собрал дополнения в один пост. в основную инструкцию добавить не могу - снова действует ограничение в 10 кБ
12. RomAndry - 21 февраля 2010 — 19:38 - перейти к сообщению
и Вам спасибо, что помогли найти пропущенные моменты
13. HARUSAME - 23 февраля 2010 — 20:48 - перейти к сообщению
Былоб неплохо... сделать в одном сообщении работающий мод ))
14. lisiycat - 23 февраля 2010 — 21:02 - перейти к сообщению
HARUSAME пишет:
Былоб неплохо... сделать в одном сообщении работающий мод ))


Да, просьба к автору мода - приведите пожалуйста в читаемый вид установку мода, например как тут. Если не трудно, конечно
15. HARUSAME - 23 февраля 2010 — 23:25 - перейти к сообщению
И ЧТО ЗНАЧИТ ВОТ ЭТА ОШИБКА-?
Parse error: syntax error, unexpected '}' in /home/kachn619/domains/sharalincs.ru/public_html/profile.php on line 188

и

Notice: Undefined index: end in /home/kachn619/domains/sharalincs.ru/public_html/tools.php on line 276

Notice: Undefined index: end in /home/kachn619/domains/sharalincs.ru/public_html/tools.php on line 277

Notice: Undefined index: user_name in /home/kachn619/domains/sharalincs.ru/public_html/tools.php on line 277

Notice: Undefined index: date in /home/kachn619/domains/sharalincs.ru/public_html/tools.php on line 278

Notice: Undefined index: days in /home/kachn619/domains/sharalincs.ru/public_html/tools.php on line 279

Notice: Undefined index: end in /home/kachn619/domains/sharalincs.ru/public_html/tools.php on line 279

Notice: Undefined index: days in /home/kachn619/domains/sharalincs.ru/public_html/tools.php on line 280

Notice: Undefined index: reason in /home/kachn619/domains/sharalincs.ru/public_html/templates/GreyE xBB/banmemblist_data.tpl on line 5

Notice: Undefined index: who_id in /home/kachn619/domains/sharalincs.ru/public_html/templates/GreyE xBB/banmemblist_data.tpl on line 9

Notice: Undefined index: who_name in /home/kachn619/domains/sharalincs.ru/public_html/templates/GreyE xBB/banmemblist_data.tpl on line 9

Notice: Undefined index: who_name in /home/kachn619/domains/sharalincs.ru/public_html/templates/GreyE xBB/banmemblist_data.tpl on line 9

Яндекс.Метрика   

Powered by ExBB
[Script Execution time: 0.0249]     [ ]