Этот мод - просто супер! Репутация и предупреждения в одном флаконе. Благодаря ему мне не придется все писать с нуля
Для начала - найденные баги: (
если я ошибся - извините)
- Код: Выделить всё
#OPEN
page_header.php
#FIND
$sql = 'SELECT id, user_id, modification FROM ' . REPUTATION_TABLE . '
WHERE modification = ' . REPUTATION_WARNING . ' OR modification = ' . REPUTATION_BAN . "
AND expire < $current_time";
#REPLACE
# добавил скобки вокруг OR - без них все предупреждения сразу становились expired
$sql = 'SELECT id, user_id, modification FROM ' . REPUTATION_TABLE . '
WHERE (modification = ' . REPUTATION_WARNING . ' OR modification = ' . REPUTATION_BAN . ")
AND expire < $current_time";
#OPEN
profile_warning.tpl
#FIND
<div class="gen">{switch_ban.L_NEVER_EXPIRE}</span>
#REPLACE
# wrong closing tag
<div class="gen">{switch_ban.L_NEVER_EXPIRE}</div>
#FIND
<div class="gen">{switch_warning.L_EXPIRE} <input type="input" name="expire" size="3" maxlength="3" value="{switch_warning.S_EXPIRE_VALUE}" {switch_warning.S_EXPIRE_DISABLED}/> {switch_warning.L_DAYS}</div><div class="gensmall">{switch_warning.L_EXPIRE_HINT}</div>
#REPLACE
# wrong closing tag
<div class="gen">{switch_warning.L_EXPIRE} <input type="input" name="expire" size="3" maxlength="3" value="{switch_warning.S_EXPIRE_VALUE}" {switch_warning.S_EXPIRE_DISABLED}/> {switch_warning.L_DAYS}</div><div class="gensmall">{switch_warning.L_EXPIRE_HINT}</div>
#OPEN
user_reputation.php
#FIND
Already_banned
#REPLACE
# нет такой переменной $lang['Already_banned'] - надо добавить
???
#FIND
if ( $poster_id == ANONYMOUS )
{
message_die(GENERAL_MESSAGE, $lang['reputation_anonymous_no_reviews']);
}
#REPLACE
# нет такой переменной $poster_id
#FIND во многих местах
$expire = ( $warning[$i]['expire'] == -1 ) ? $lang['reputation_never'] : create_date('d.m.Y', $info[$i]['expire'], $board_config['board_timezone']);
#REPLACE
# нет переменной $warning, есть $info
$expire = ( $info[$i]['expire'] == -1 ) ? $lang['reputation_never'] : create_date('d.m.Y', $info[$i]['expire'], $board_config['board_timezone']);
#FIND
if ( $userdata['session_logged_in'] && $info[$i]['time'] > $userdata['user_lastvisit'] )
#REPLACE
# нет $info[$i]['time'], есть $info[$i]['date']
if ( $userdata['session_logged_in'] && $info[$i]['date'] > $userdata['user_lastvisit'] )
#FIND в 2-x местах (второй немного отличается)
$pagination = ( $highlight != '' ) ? generate_pagination("profile.$phpEx?mode=reputation&m=" . REPUTATION_VIEW . '&' . POST_POST_URL . "=$post_id&postorder=$post_order&highlight=$highlight", $plus + $minus, $board_config['reputation_reviews_per_page'], $start) : generate_pagination("profile.$phpEx?mode=reputation&m=" . REPUTATION_VIEW . '&' . POST_POST_URL . "=$post_id&postorder=$post_order", $plus + $minus, $board_config['reputation_reviews_per_page'], $start);
#REPLACE
# $highlight ни при чем, подсвечивать тут нечего
$pagination = generate_pagination("profile.$phpEx?mode=reputation&m=" . REPUTATION_VIEW . '&' . POST_POST_URL . "=$post_id&postorder=$post_order", $plus + $minus, $board_config['reputation_reviews_per_page'], $start);
#FIND
switch ( $info[$i]['modification'] )
#REPLACE
# чтобы не было undefined variable добавляем здесь $l_expire
$l_expire = '';
switch ( $info[$i]['modification'] )
#FIND только первое входждение из 2-х!
if ( !empty($postrow['user_icq']) )
#REPLACE
# вместо $postrow надо $info
if ( !empty($info[$i]['user_icq']) )
#FIND
if ( !isset($rep_mode) )
#REPLACE
# это косметика, но все же
else
#FIND
if ( $HTTP_POST_VARS['exp'] == 1 || $HTTP_GET_VARS['exp'] == 1 )
#REPLACE
# иначе undefined offset 'exp'
if ( !empty($HTTP_POST_VARS['exp']) || !empty($HTTP_GET_VARS['exp']) )
#FIND во многих местах
$is_auth = array();
#REPLACE
# ??? зачем нужна эта строка перед всеми $is_auth = auth(...);
#FIND
$lang['reputation_report_post'] = "Report this post to moderator(s)";
#REPLACE
# лишняя строка
Полубаги:1) Очень много строк типа
- Код: Выделить всё
if ($result = $db->sql_query('DELETE ...'))
Запросы INSERT/UPDATE/DELETE не возвращают rowset, зачем тут $result ?
2) $lang['reputation_no_access'] лучше заменить на $lang['Not_Authorised'], зачем дублировать? И вообще новых строк в $lang слишком много, без некоторых можно и обойтись
Технические замечания:
1) (спорный вопрос) слить воедино profile_modify_reputation.tpl и profile_warning.tpl - они достаточно похожи
2) в profile_view_reputation.tpl блоки 'warn' и 'rep' абсолютно идентичны. Нужно оставить только один, второй лишний.
3) аналогично в modcp_post_report_body.tpl блоки 'postrow' и 'reviewrow' почти идентичны, лучше их слить в один
Нужные опции (сделаю сам
):
1) разрешить не указывать причину при изменении репутации (пустой отзыв)
2) разрешить изменять репутацию из профиля (не указывая конкретный пост)
3) ввести временное ограничение на изменение репутации (например, нельзя изменять чаще, чем раз в неделю)
4) систему
5) опция не показывать пост на который ссылаешься при изменении репутации или резать его по длине до 200-500 символов
(посты могут быть длинные => форма отправки отзыва уезжает далеко вниз)
6) снимать предупреждения/баны последовательно, а не независимо. Например, есть 2 предупреждения по 7 дней и сверху еще бан на месяц. Тогда
бан пропадает через 30 дней. Второй предупреждение пропадает через 7 дней после исчезновения бана, третье - через 7 дней после второго и т.д.
Carbofos, тебе нужна помощь в разработке мода? Я бы с удовольствием поучаствовал (
хотя у меня тоже сессия
)