Быстрый лёгкий надёжный форумный движок
Вы не вошли.
Все заработало. Просто забыл убрать коммент в одной строке...
Скажите - а есть ли для мода деинсталлятор - чтоб в базе не копаться.
Нет. Будет только для форума версии 1.3
Такая проблема. Мод поставил, но в том, что вместо надписи "репутация" отображается абракадабра(( Проблема в кодировке - но в БД столько таблиц, что не знаю, куда смотреть. Не подскажите, что нужно поменять/исправить?
Только в том месте? Смотри ланг-файл, чтобы его кодировка совпадала с кодировкой сайта - lang/russian/reputation.php
hcs Спасибо огромное! Заработало!
hcs
Привет, в данном моде обнаружил грубую ошибку, не знаю, может она уже исправлена, я качал с punres.org данный мод.
Ошибка:
if ((($pun_user['g_rep_minus_min'] > $pun_user['num_posts']) && [b]($method=2)[/b] ) || (($pun_user['g_rep_plus_min'] > $pun_user['num_posts']) && [b]($method=1)[/b] ))
message($lang_reputation['Small Number of post']);
Исправление:
if ((($pun_user['g_rep_minus_min'] > $pun_user['num_posts']) && [b]($method==2)[/b] ) || (($pun_user['g_rep_plus_min'] > $pun_user['num_posts']) && [b]($method==1)[/b] ))
message($lang_reputation['Small Number of post']);
Добавлено спустя 8 минут 55 секунд:
($method=2)
тут ошибка, вместо проверки на равенство присваивание
О да, большое спасибо.
Вот эту строчку
$result = $db->query('SELECT p.poster, p.poster_id, p.posted, p.id, p.topic_id, t.subject, u.reputation_enable, r.time FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'topics AS t ON p.topic_id=t.id INNER JOIN '.$db->prefix.'users AS u ON p.poster_id = u.id LEFT JOIN '.$db->prefix.'reputation AS r ON (r.from_user_id ='.$pun_user["id"] .' AND r.user_id = u.id) WHERE p.id='.$pid.' AND p.poster="'. $poster .'" ORDER BY r.time DESC LIMIT 0 , 1') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
надо поменять на эту
$result = $db->query('SELECT p.poster, p.poster_id, p.posted, p.id, p.topic_id, t.subject, u.reputation_enable, r.time FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'topics AS t ON p.topic_id=t.id INNER JOIN '.$db->prefix.'users AS u ON p.poster_id = u.id LEFT JOIN '.$db->prefix.'reputation AS r ON (r.from_user_id ='.$pun_user["id"] .' AND r.user_id = u.id) WHERE p.id='.$pid.' AND p.poster="'. $db->escape($poster) .'" ORDER BY r.time DESC LIMIT 0 , 1') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
иначе у меня вот на такого пользователя Qwert\\wer не получалось репутацию изменить (это я мод тестирую).
Есть подозрение, что в этом запросе дырка!
Хмхм...
Будем смотреть, спасибо.
Зачем в этом запросе
$result = $db->query('SELECT u.username, u.rep_plus AS count_rep_plus, u.rep_minus AS count_rep_minus FROM '.$db->prefix.'users AS u LEFT JOIN '.$db->prefix.'reputation as r ON r.user_id=u.id WHERE u.id='.$uid.' GROUP by u.id') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
LEFT JOIN используется, если данные берутся только из таблицы users?
Считаю что
LEFT JOIN '.$db->prefix.'reputation as r ON r.user_id=u.id
можно убрать.
иначе у меня вот на такого пользователя Qwert\\wer не получалось репутацию изменить (это я мод тестирую).
User management - v1.3 такого пользователя даже не создает, приходится обычно регистрироваться. А баг действительно есть.
Я подумал и на всякий пожарный вообще так сделал:
$result = $db->query('SELECT p.poster, p.poster_id, p.posted, p.id, p.topic_id, t.subject, u.reputation_enable, r.time FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'topics AS t ON p.topic_id=t.id INNER JOIN '.$db->prefix.'users AS u ON p.poster_id = u.id LEFT JOIN '.$db->prefix.'reputation AS r ON (r.from_user_id ='.$pun_user['id'].' AND r.user_id = u.id) WHERE p.id='.$pid.' ORDER BY r.time DESC LIMIT 0, 1') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
if (!$db->num_rows($result))
message($lang_common['Bad request']);
$target = $db->fetch_assoc($result);
if ($target['poster'] != $poster)
message($lang_common['Bad request']);
Буду отслеживать тему.
Ладно, тогда отсебятина от себя
Вывожу репутацию в строчку Активен/Неактивен. Для этого сделал в viewtopic.php так:
После
// Format the online indicator
$is_online = ($cur_post['is_online'] == $cur_post['poster_id']) ? '<strong>'.$lang_topic['Online'].'</strong>' : $lang_topic['Offline'];
дописал это
//START Reputation Plugin for PunBB
if ($pun_user['g_rep_enable'] == 1 && $pun_config['o_reputation_enabled'] == 1 && $cur_post['reputation_enable'] == 1 && $pun_user['reputation_enable_adm'] == 1 && $pun_user['reputation_enable'] == 1)
if($pun_user['is_guest'] != true && $pun_user['username'] != $cur_post['username'])
{
$repdata='&pid=' .$cur_post['id'] . '&uid=' .$cur_post['poster_id'] .'&method=';
$repdataplus=$repdata .'1';
$repdataminus=$repdata .'2';
$is_online.=' <a href="./reputation.php?'.$repdataplus.'"><img src="./img/warn_add.gif" alt="+" border="0"></a> <strong><a href="reputation.php?uid='.$cur_post['poster_id'].'" title="'.$lang_reputation['Reputation'].'">'.($cur_post['count_rep_plus']-$cur_post['count_rep_minus']).'</a></strong> <a href="./reputation.php?'.$repdataminus.'"><img src="./img/warn_minus.gif" alt="-" border="0"></a>';
}
else
$is_online.=' <strong><a href="reputation.php?uid='.$cur_post['poster_id'].'" title="'.$lang_reputation['Reputation'].'">'.($cur_post['count_rep_plus']-$cur_post['count_rep_minus']).'</a></strong>';
//END Reputation Plugin for PunBB
и убрал вызов
<?php require(PUN_ROOT.'include/reputation/rep_viewtopic.php'); ?>
В profile.php сделал вывод репутации (ссылкой) ниже ранга пользователя, для этого в блоке if (isset($_GET['view'])... перед
$page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / '.$lang_common['Profile'];
дописал
//START Reputation Plugin for PunBB
$repa_pro = '';
if ($pun_user['g_rep_enable'] == 1 && $pun_config['o_reputation_enabled'] == 1 && $user['reputation_enable'] == 1 && $pun_user['reputation_enable_adm'] == 1 && $pun_user['reputation_enable'] == 1)
{
require PUN_ROOT.'lang/'.$pun_user['language'].'/reputation.php';
$repa_pro = "\n <dt>".$lang_reputation['Reputation'].": </dt>\n <dd><a href=\"reputation.php?uid=".$user['id']."\" title=\"".$lang_reputation['Reputation']."\">".($user['rep_plus']-$user['rep_minus'])."</a></dd>";
}
//END Reputation Plugin for PunBB
а строчку
<dd><?php echo ($pun_config['o_censoring'] == '1') ? censor_words($user_title_field) : $user_title_field; ?></dd>
поменял на
<dd><?php echo ($pun_config['o_censoring'] == '1') ? censor_words($user_title_field) : $user_title_field; ?></dd><?php echo $repa_pro ?>
Это все дополнительный функционал, а что по поводу возможных уязвимостей и ошибок?
Reputation mod 2.0.1 возможная уязвимость. Но тут предварительные заслоны есть, в виде встроенной системы проверки ников.
Эти исправления я уже применил. Спасибо.
Ну пока больше сообщений о потенциальных и явных уязвимостях нет, можно спать спокойно
Ссылка на последнюю версию данного модуля, со всеми исправлениями, о которых велась речь в этом топике находиться в первом посте?
да
я предпочитаю мод респекта, а не рейтингов. но всё равно спасибо
Редактировался [lol]2Fast4U (2008-03-14 23:19:30)
2Fast4U]мод респекта, а не рейтингов
А в чем принципиальная разница?
Народ у меня проблема....
пишет,там где ну по аватаром...
Notice: Undefined index: reputation_enable in /www/rifo.net/m/u/munecabrava/home/site/include/reputation/rep_viewtopic.php on line 28
я этот файл,не изменял..не знаю в чем проблема...
Добавлено спустя 48 минут 28 секунд:
Ни чего не менял в этом файле...((((
Ну попробуй заново залить, чистый rep_viewtopic.php, вдруг поможет и там где, ну по аватаром... не буит больше всякую бяку писать
заливал,Все равно.... подскажите....
а можно еще спросить?
как сделать,чтобы как тут в быстром ответе были : размер,цвет,смайлы,ссылка,ж,к,ч(ну чтобы не заходить в форуму полного ответа)как сделать?