[DEV] Reputation System / Система репутации

Здесь авторы могут постить бета-версии своих модификаций для phpBB 3.0.x. Внимание! Не устанавливайте бета-версии модов на работающие форумы!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
amBX
phpBB 1.2.0
Сообщения: 15
Стаж: 16 лет 8 месяцев
Благодарил (а): 4 раза

Re: [DEV] Reputation System / Система репутации

Сообщение amBX »

Да блин совсем ни чего не получается(( всё что написано "найти и заменить на" такое ощущение что у меня это в viewtopic.php совсем нет.

Вот допустим
Заменить

Код: Выделить всё

      $sql = 'SELECT COUNT(*) AS rev_cnt
      FROM ' . REPUTATION_TABLE .
      ' WHERE reputation_post =' . $row['post_id'];
На

Код: Выделить всё

      $sql = 'SELECT COUNT(*) as rep_cnt 
      FROM ' . REPUTATION_TABLE . '
      WHERE reputation_post =' . $row['post_id'] . '
      UNION ALL
      SELECT COUNT(*) as rep_cnt 
      FROM ' . REPUTATION_TABLE . '
      WHERE reputation_post =' . $row['post_id'] . ' AND reputation_type = 1
      UNION ALL
      SELECT COUNT(*) as rep_cnt 
      FROM ' . REPUTATION_TABLE . '
      WHERE reputation_post =' . $row['post_id'] . ' AND reputation_type = 0';
 
Откуда этот код взялся в viewtopic.php ???

Код: Выделить всё

      $sql = 'SELECT COUNT(*) AS rev_cnt
      FROM ' . REPUTATION_TABLE .
      ' WHERE reputation_post =' . $row['post_id'];
У меня в файле viewtopic.php есть такой код:

Код: Выделить всё

			$sql = 'SELECT COUNT(*) AS reputation_cnt
				FROM ' . REPUTATION_TABLE . " r
				WHERE r.reputation_to = $poster_id
					AND r.reputation_from = " . $user->data['user_id'] . '
					AND r.reputation_post = ' . $row['post_id'];
Но ни как не выше преведенный, и так со всем, я не могу найти то что надо заменить.


МОЖНО просто мне обяснить как сделать так?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Re: [DEV] Reputation System / Система репутации

Сообщение FladeX »

Преамбула.
На phpBB.com есть хороший мод Auto Groups. Он позволяет в настройках групп сделать опции автоперехода на основе количества сообщений, дней регистрации и количества предупреждений. Для примера, создаем группу "Активисты", задаем опцию "минимальное количество сообщений" равной 1000. Тогда каждый пользователь, набравший 1000 сообщений, будет автоматически перенесен в эту группу.
Фабула.
Попробуем объединить этот мод с модом репутации. То бишь добавим к группам еще две опции - "минимальное количество репутации" и "максимальное количество репутации". Для начала нужно, чтобы оба мода были установлены на форуме. После этого переходим к активным действиям.

SQL

Код: Выделить всё

ALTER TABLE phpbb_groups ADD group_min_reputation MEDIUMINT(8) DEFAULT 0;
ALTER TABLE phpbb_groups ADD group_max_reputation MEDIUMINT(8) DEFAULT 0;
Open: includes/acp/acp_groups.php
Find:

Код: Выделить всё

'max_posts'        => request_var('max_group_posts', 0), 
After, add:

Код: Выделить всё

                        'min_reputation'        => request_var('min_group_reputation', 0),
                        'max_reputation'        => request_var('max_group_reputation', 0), 
Find:

Код: Выделить всё

'max_posts' => 'int', 
After, add:

Код: Выделить всё

                            'min_reputation' => 'int',
                            'max_reputation' => 'int', 
Find:

Код: Выделить всё

'MAX_GROUP_POSTS'        => (isset($group_row['group_max_posts'])) ? $group_row['group_max_posts'] : 0, 
After, add:

Код: Выделить всё

                    'MIN_GROUP_REPUTATION'        => (isset($group_row['group_min_reputation'])) ? $group_row['group_min_reputation'] : 0,
                    'MAX_GROUP_REPUTATION'        => (isset($group_row['group_max_reputation'])) ? $group_row['group_max_reputation'] : 0, 
Open adm/style/auto_groups.html
Find:

Код: Выделить всё

        <dd><input name="max_group_posts" size="40" value="{MAX_GROUP_POSTS}" /></dd>
    </dl> 
After, add:

Код: Выделить всё

    <dl>
        <dt><label for="min_group_reputation">{L_GROUP_MIN_REPUTATION}</label></dt>
        <dd><input name="min_group_reputation" size="40" value="{MIN_GROUP_REPUTATION}" /></dd>
    </dl>
    <dl>
        <dt><label for="max_group_reputation">{L_GROUP_MAX_REPUTATION}</label></dt>
        <dd><input name="max_group_reputation" size="40" value="{MAX_GROUP_REPUTATION}" /></dd>
    </dl> 
Open includes/functions_autogroup.php
Find:

Код: Выделить всё

$check['posts'][$user->data['user_id']] = (int) $user->data['user_posts']; 
After, add:

Код: Выделить всё

        $check['reputation'][$user->data['user_id']] = (int) $user->data['user_reputation_total']; 
Find:

Код: Выделить всё

$check['posts'][$row['user_id']] = (int) $row['user_posts']; 
After, add:

Код: Выделить всё

            $check['reputation'][$row['user_id']] = (int) $row['user_reputation_total']; 
Find:

Код: Выделить всё

    if (!empty($group_attributes['group_min_posts']) || !empty($group_attributes['group_max_posts']) || !empty($group_attributes['group_min_days']) ||
        !empty($group_attributes['group_max_days']) || !empty($group_attributes['group_max_days']) || !empty($group_attributes['group_min_warnings']) || !empty($group_attributes['group_max_warnings'])) 
Replace, with:

Код: Выделить всё

    if (!empty($group_attributes['group_min_posts']) || !empty($group_attributes['group_max_posts']) || !empty($group_attributes['group_min_reputation']) || !empty($group_attributes['group_max_reputation']) || !empty($group_attributes['group_min_days']) ||
        !empty($group_attributes['group_max_days']) || !empty($group_attributes['group_max_days']) || !empty($group_attributes['group_min_warnings']) || !empty($group_attributes['group_max_warnings'])) 
Find:

Код: Выделить всё

'posts'        => 'user_posts', 
After, add:

Код: Выделить всё

            'reputation'        => 'user_reputation_total', 
Open language/en/mods/info_acp_auto_groups.php
Find:

Код: Выделить всё

'GROUP_MAX_POSTS' 
After, add:

Код: Выделить всё

    'GROUP_MIN_REPUTATION'    => 'Minimum reputation count',
    'GROUP_MAX_REPUTATION'    => 'Maximum reputation count', 
Open language/ru/mods/info_acp_auto_groups.php
Find:

Код: Выделить всё

'GROUP_MAX_POSTS' 
After, add:

Код: Выделить всё

    'GROUP_MIN_REPUTATION'    => 'Минимальная репутация',
    'GROUP_MAX_REPUTATION'    => 'Максимальная репутация', 
Open reputation.php
Find:

Код: Выделить всё

meta_refresh(3, $redirect_url); 
Before, add:

Код: Выделить всё

            if (!function_exists('auto_group'))
            {
                include($phpbb_root_path . 'includes/functions_autogroup.'.$phpEx);
            }
            auto_group($poster_id, false); 
Добавлено спустя 1 час 26 минут 10 секунд:
Проверил на локалхосте, всё работает :geek: Пользуйтесь :)

Добавлено спустя 1 час 22 минуты 35 секунд:
modx делать, или так сойдет?)
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы
Буржуй
phpBB 1.2.1
Сообщения: 24
Стаж: 16 лет 9 месяцев

Re: [DEV] Reputation System / Система репутации

Сообщение Буржуй »

Срочно нужна ваша помошь, поставил данный мод все сделал точно как по инструкций
Изображение
проблема в том что

Добавлено спустя 1 минуту 11 секунд:
Рейтинг повысил, почему не чего не меняется ??? хотя рейтинг добавлен с коментариями
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Kot
phpBB 2.0.0
Сообщения: 207
Стаж: 17 лет 6 месяцев
Благодарил (а): 17 раз
Поблагодарили: 34 раза

Re: [DEV] Reputation System / Система репутации

Сообщение Kot »

Попробуй на локали запустить это дело с максимальным выводом ошибок php -- есть вероятность, что увидишь, где находится незаинициализированная переменная. У меня подозрение, что ты неправильно обновил viewtopic.php
Буржуй
phpBB 1.2.1
Сообщения: 24
Стаж: 16 лет 9 месяцев

Re: [DEV] Reputation System / Система репутации

Сообщение Буржуй »

в том то и дело что все правильно, пробывал одна и таже ошибка! форум 3.0.6
Аватара пользователя
Kot
phpBB 2.0.0
Сообщения: 207
Стаж: 17 лет 6 месяцев
Благодарил (а): 17 раз
Поблагодарили: 34 раза

Re: [DEV] Reputation System / Система репутации

Сообщение Kot »

Перевел сайт к другому хостеру, у которого стоит ограничение на количество запросов к mysql. Разумеется, в считанные часы база "свалилась", а я запрягся смотреть, что же это такое генерит избыточные запросы.

В числе всего прочего самый главный виновник -- вот этот самый reputation mod. Например, для просмотра одной страницы форума он делает около 50 запросов к базе. Прониклись немного? :)

Пришлось срочно все кешировать, результат представлен ниже.

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

Теперь немного о том, что именно должно предшествовать настройке кеширования, что должно быть установлено, чтобы был гарантированный результат:
Собственно, сам reputation mod 0.1.5 dev (логично, не правда ли? ;))
Фиксы всяких мелких багов от автора мода (т.к. я предлагаю файл reputation.php полностью заменить на свой, то, по идее, этим пунктом заморачиваться не стоит, все уже "включено в сервис")
Аддон для показа количества репутации в конкретном посте
мои обновления для этого аддона

Поехали.
файл reputation.php, заменяйте целиком:

Код: Выделить всё

<?php
/** 
*
* @package phpBB3
* @version $Id: reputation.php,v 0.1.5 2009/01/03 15:07:00 OlegNT Exp $
* @copyright (c) 2005 phpBB Group 
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
* Minimum Requirement: PHP 4.3.3
*/

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup('mods/reputation');

$mode = request_var('mode', 'view', 'reviews');

if (!in_array($mode, array('view', 'change', 'reviews')))
{
	trigger_error('NO_MODE');
}


if ($mode == 'view')
{
	$user_id = request_var('u', $user->data['user_id']);

	if ($user_id == ANONYMOUS)
	{
		trigger_error('REPUTATION_NO_SUCH_USER');
	}

	$start = request_var('start', 0);
	if ($start < 0)
	{
		$start = 0;
	}

	$cache_filename = '_rep_users_userid_' . $user_id;
	if (($row = $cache->get($cache_filename)) === false)
	{
		$sql = "SELECT u.username, u.user_reputation_pluses, u.user_reputation_minuses, u.user_reputation_total, u.user_colour
			FROM " . USERS_TABLE . " u
			WHERE u.user_id = $user_id";
		$result = $db->sql_query($sql);
		$row = $db->sql_fetchrow($result);
		$db->sql_freeresult($result);
		
		$cache->put($cache_filename, $row);
	}

	if (empty($row))
	{
		trigger_error('REPUTATION_NO_SUCH_USER');
	}

	$username = $row['username'];
	$reputation_pluses = $row['user_reputation_pluses'];
	$reputation_minuses = $row['user_reputation_minuses'];
	$reputation_total = $row['user_reputation_total'];

	$username_full = get_username_string('full', $user_id, $username, $row['user_colour']);

	$page_title = $user->lang['REPUTATION'];

	$cache_filename = '_rep_all_userid_perpage_start_' . $user_id . '_' . $config['topics_per_page'] . '_' . $start;
	if (($reprows = $cache->get($cache_filename)) === false)
	{
		$sql = "SELECT r.*
			FROM " . REPUTATION_TABLE . " r
			WHERE r.reputation_to = $user_id
			ORDER BY r.reputation_time DESC";
		$result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
		
		$reprows = array();
		while ($row = $db->sql_fetchrow($result))
		{
			$reprows[] = $row;
		}
		$db->sql_freeresult($result);
		
		$cache->put($cache_filename, $reprows);
	}

	$users_cache = array();
	$topics_cache = array();

	$i = 0;

	foreach ($reprows as $reprows_key => $reprows_value)
	{
		$r_userid = $reprows_value['reputation_from'];
		$r_comment = nl2br(trim($reprows_value['reputation_comment']));
		$r_post = $reprows_value['reputation_post'];
		$r_time = $user->format_date($reprows_value['reputation_time']);
		$r_type = $reprows_value['reputation_type'];
		$r_image_type = ($r_type) ? $user->img('icon_reputation_up', '+') : $user->img('icon_reputation_down', '&minus;');

		$cache_filename = '_rep_usercolor_userid_' . $r_userid;
		if (($row = $cache->get($cache_filename)) === false)
		{
			$sql = "SELECT u.username, u.user_colour
				FROM " . USERS_TABLE . " u
				WHERE u.user_id = $r_userid";
			$result = $db->sql_query($sql);
	
			$row = $db->sql_fetchrow($result);
			$db->sql_freeresult($result);
			
			$cache->put($cache_filename, $row);
		}
		$r_username = get_username_string('full', $r_userid, $row['username'], $row['user_colour']);

		if (!isset($topics_cache[$r_post]))
		{
			$cache_filename = '_rep_topictitle_post_' . $r_post;
			if (($topics_cache[$r_post] = $cache->get($cache_filename)) === false)
			{
				$sql = "SELECT t.topic_title
					FROM " . TOPICS_TABLE . " t, " . POSTS_TABLE . " p
					WHERE p.post_id = $r_post
						AND t.topic_id = p.topic_id";
				$result = $db->sql_query($sql);
	
				$row = $db->sql_fetchrow($result);
				$topics_cache[$r_post] = (empty($row['topic_title'])) ? false : $row['topic_title'];
				$db->sql_freeresult($result);

				$cache->put($cache_filename, $topics_cache[$r_post]);
			}
		}

		if ($topics_cache[$r_post])
		{
			$r_topic = '<a href="' . append_sid("{$phpbb_root_path}viewtopic.$phpEx", "p=$r_post") . '#p' . $r_post . '">' . $topics_cache[$r_post] . '</a>';
		}
		else
		{
			$r_topic = false;
		}

		$template->assign_block_vars('reputationrow', array(
			'ROWID'		=> $i + ($start + 1),
			'USERNAME'	=> $r_username,
			'TOPIC'		=> $r_topic,
			'COMMENT'	=> $r_comment,
			'TYPE'		=> $r_image_type,
			'TIME'		=> $r_time)
		);

		$i++;
	}

	$cache_filename = '_rep_cnt_touserid_' . $user_id;
	if (($reputation_total_items = $cache->get($cache_filename)) === false)
	{
		$sql = "SELECT COUNT(*) AS rep_cnt
			FROM " . REPUTATION_TABLE . "
			WHERE reputation_to = $user_id";
		$result = $db->sql_query($sql);
	
		$reputation_total_items = $db->sql_fetchfield('rep_cnt');
	
		$db->sql_freeresult($result);
		
		$cache->put($cache_filename, $reputation_total_items);
	}
	
	$pagination = generate_pagination(append_sid("{$phpbb_root_path}reputation.$phpEx", "u=$user_id"), $reputation_total_items, $config['topics_per_page'], $start);
	$on_page = on_page($reputation_total_items, $config['topics_per_page'], $start);

	$template->assign_vars(array(
		'USER_REPUTATION_INFO'	=> sprintf($user->lang['REPUTATION_HISTORY_TITLE'], $username_full) . ': <strong>' . (($reputation_total < 0) ? '&minus;' . abs($reputation_total) : $reputation_total) . ' [&nbsp;&minus;' . $reputation_minuses . '/+' . $reputation_pluses . '&nbsp;]</strong>',
		'PAGINATION'			=> $pagination,
		'TOTAL_COMMENTS'		=> ($reputation_total_items == 1) ? $user->lang['REPUTATION_TOTAL_ONE_COMMENT'] : sprintf($user->lang['REPUTATION_TOTAL_COMMENTS'], $reputation_total_items),
		'PAGE_NUMBER'			=> $on_page,
	));


	page_header($page_title);

	$template->set_filenames(array(
		'body' => 'reputation_history_body.html')
	);


	page_footer();

}
elseif ($mode == 'reviews')
{
   $posts_id = request_var('p', $user->data['user_id']);

   $start = request_var('start', 0);
   if ($start < 0)
   {
      $start = 0;
   }

   $page_title = $user->lang['REPUTATION_FOR_POST'];

	$cache_filename = '_rep_all_postid_perpage_start_' . $posts_id . '_' . $config['topics_per_page'] . '_' . $start;
	if (($reprows = $cache->get($cache_filename)) === false)
	{
		$sql = "SELECT r.*
			FROM " . REPUTATION_TABLE . " r
			WHERE reputation_post= $posts_id
			ORDER BY r.reputation_time DESC";
		$result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
		
		$reprows = array();
		while ($row = $db->sql_fetchrow($result))
		{
			$reprows[] = $row;
		}
		$db->sql_freeresult($result);
		
		$cache->put($cache_filename, $reprows);
	}

   $users_cache = array();
   $topic_rev = '<a href="' . append_sid("{$phpbb_root_path}viewtopic.$phpEx", "p=$posts_id") . '#p' . $posts_id . '">' . $posts_id . '</a>';

   $i = 0;


   foreach ($reprows as $reprows_key => $reprows_value)
   {
      $r_userid = $reprows_value['reputation_from'];
      $r_comment = nl2br(trim($reprows_value['reputation_comment']));
      $r_time = $user->format_date($reprows_value['reputation_time']);
      $r_type = $reprows_value['reputation_type'];
      $r_image_type = ($r_type) ? $user->img('icon_reputation_up', '+') : $user->img('icon_reputation_down', '&minus;');

			$cache_filename = '_rep_usercolor_userid_' . $r_userid;
			if (($row = $cache->get($cache_filename)) === false)
			{
				$sql = "SELECT u.username, u.user_colour
					 FROM " . USERS_TABLE . " u
					 WHERE u.user_id = $r_userid";
				$result = $db->sql_query($sql);
	
				$row = $db->sql_fetchrow($result);
				$db->sql_freeresult($result);
				
				$cache->put($cache_filename, $row);
			}
      $r_username = get_username_string('full', $r_userid, $row['username'], $row['user_colour']);


      $template->assign_block_vars('reputationrow', array(
         'ROWID'      => $i + ($start + 1),
         'USERNAME'   => $r_username,
         'COMMENT'   => $r_comment,
         'TYPE'      => $r_image_type,
         'TIME'      => $r_time)
      );

      $i++;
   }

		// unnecessary UNIONs, 
		// but should work together with Reviews addon to decrease count of sql requests and cache items
		$cache_filename = '_rep_cnt_post_' . $posts_id;
		if (($rep_count = $cache->get($cache_filename)) === false)
		{
			$sql = 'SELECT COUNT(*) as rep_cnt 
			FROM ' . REPUTATION_TABLE . '
			WHERE reputation_post =' . $posts_id . '
			UNION ALL
			SELECT COUNT(*) as rep_cnt 
			FROM ' . REPUTATION_TABLE . '
			WHERE reputation_post =' . $posts_id . ' AND reputation_type = 1
			UNION ALL
			SELECT COUNT(*) as rep_cnt 
			FROM ' . REPUTATION_TABLE . '
			WHERE reputation_post =' . $posts_id . ' AND reputation_type = 0';
		
			$result = $db->sql_query($sql);
    
			$rep_count = array();
			while ($rep_row = $db->sql_fetchrow($result))
			{
				$rep_count[] = $rep_row['rep_cnt'];
			}
			$db->sql_freeresult($result);

			$cache->put($cache_filename, $rep_count);
		}

		$reputation_total_items = $rep_count[0];

   $pagination = generate_pagination(append_sid("{$phpbb_root_path}reputation.$phpEx", "mode=reviews&p=$posts_id"), $reputation_total_items, $config['topics_per_page'], $start);
   $on_page = on_page($reputation_total_items, $config['topics_per_page'], $start);

   $template->assign_vars(array(
      'PAGINATION'         => $pagination,
      'TOTAL_COMMENTS'      => ($reputation_total_items == 1) ? $user->lang['REPUTATION_TOTAL_ONE_COMMENT'] : sprintf($user->lang['REPUTATION_TOTAL_COMMENTS'], $reputation_total_items),
      'PAGE_NUMBER'         => $on_page,
      'TOPIC'               => $topic_rev
   ));


   page_header($page_title);

   $template->set_filenames(array(
      'body' => 'reputation_topic_body.html')
   );


   page_footer();
}
else
{
	if (!$user->data['is_registered'])
	{
		login_box('', 'Only registered users may change reputation');
	}

	$type = request_var('type', '');
	if ( $type != 'plus' && $type != 'minus' )
	{
		trigger_error(sprintf($user->lang['REPUTATION_INVALID_VALUE'], 'type'));
	}

	if ($user->data['user_reputation_ban'])
	{
		trigger_error('REPUTATION_FORBIDDEN');
	}

	$post_id = request_var('p', 0);

	if (!$post_id)
	{
		trigger_error('REPUTATION_POST_NOT_FOUND');
	}

	$cache_filename = '_rep_postsusers_postid_' . $post_id;
	if (($row = $cache->get($cache_filename)) === false)
	{
		$sql = "SELECT p.poster_id, u.username, u.user_reputation_minuses, u.user_reputation_pluses, u.user_reputation_total, u.user_reputation_ban, u.user_colour
			FROM " . POSTS_TABLE . " p, " . USERS_TABLE . " u
			WHERE p.post_id = $post_id
				AND u.user_id = p.poster_id";
		$result = $db->sql_query($sql);
		$row = $db->sql_fetchrow($result);
		$db->sql_freeresult($result);
		
		$cache->put($cache_filename, $row);
	}

	if (empty($row))
	{
		trigger_error('REPUTATION_POST_NOT_FOUND');
	}

	$poster_id = $row['poster_id'];
	$to_username = $row['username'];
	$reputation_pluses = $row['user_reputation_pluses'];
	$reputation_minuses = $row['user_reputation_minuses'];
	$reputation_total = $row['user_reputation_total'];

	$poster_full = get_username_string('full', $poster_id, $to_username, $row['user_colour']);

	$redirect_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "p=$post_id") . "#p$post_id";

	if ($poster_id == $user->data['user_id'])
	{
		trigger_error(sprintf($user->lang['REPUTATION_SELF'], $redirect_url));
	}

	if ($config['reputation_max_comments'])
	{
		$cache_filename = '_rep_posterid_max_' . $poster_id . '_' . $config['topics_per_page'];
		if (($rows = $cache->get($cache_filename)) === false)
		{
			$sql = "SELECT r.reputation_id, r.reputation_from
				FROM " . REPUTATION_TABLE . " r
				WHERE r.reputation_to = $poster_id
				ORDER BY r.reputation_time DESC
				LIMIT 0, " . $config['reputation_max_comments'];
			$result = $db->sql_query($sql);
	
			$rows = array();
			while ($row = $db->sql_fetchrow($result))
			{
				$rows[] = $row;
			}
			$db->sql_freeresult($result);
	
			$cache->put($cache_filename, $rows);
		}

		if ($config['reputation_max_comments'] == sizeof($rows))
		{
			$forbid = true;
			foreach ($rows as $rows_key => $rows_value)
			{
				if ($rows_value['reputation_from'] != $user->data['user_id'])
				{
					$forbid = false;
					break;
				}
			}
		}
		else
		{
			$forbid = false;
		}
		
		if ($forbid)
		{
			trigger_error('REPUTATION_LIMIT_COMMENTS');
		}
	}

	$cache_filename = '_rep_cnt_poster_from_post_' . $poster_id . '_' . $user->data['user_id'] . '_' . $post_id;
	if (($_c = $cache->get($cache_filename)) === false)
	{
		$sql = "SELECT COUNT(*) AS cnt
			FROM " . REPUTATION_TABLE . " r
			WHERE r.reputation_to = $poster_id
				AND r.reputation_from = " . $user->data['user_id'] . "
				AND r.reputation_post = $post_id";
		$result = $db->sql_query($sql);
		$_c = $db->sql_fetchfield('cnt');
		$db->sql_freeresult($result);

		$cache->put($cache_filename, $_c);
	}

	if ($_c)
	{
		trigger_error(sprintf($user->lang['REPUTATION_AGAIN'], $redirect_url));
	}

	$error = false;

	$rep_post = request_var('rep-post', '0');

	$comment = utf8_normalize_nfc(request_var('comment', '', true));
	if (!empty($rep_post))
	{
		
		if (empty($comment))
		{
			$error = true;
		}
		else
		{
			if ($type == 'minus')
			{
				$sql_rep_change = 'user_reputation_minuses = user_reputation_minuses + 1';
				$sql_rep_change_total = 'user_reputation_total = user_reputation_total - 1';
			}
			else
			{
				$sql_rep_change = 'user_reputation_pluses = user_reputation_pluses + 1';
				$sql_rep_change_total = 'user_reputation_total = user_reputation_total + 1';
			}
			$sql = "UPDATE " . USERS_TABLE . "
				SET $sql_rep_change, $sql_rep_change_total
				WHERE user_id = $poster_id";
			$db->sql_query($sql);
			
			// empty outdated cache items
			$cache->destroy('_rep_users_userid_' . $poster_id);
			$cache->destroy('_rep_postsusers_postid_' . $post_id);
			// not sure that we need to destroy this cache item right here
			// but anyway we need to refresh it somewhere, 
			// and I'm too lazy to find "change user group or color" actions in the source code ;)
			$cache->destroy('_rep_usercolor_userid_' . $poster_id);

			$sql = "INSERT INTO " . REPUTATION_TABLE . " (reputation_to, reputation_from, reputation_comment, reputation_time, reputation_type, reputation_post, reputation_read)
				VALUES ($poster_id, " . $user->data['user_id'] . ", '" . $db->sql_escape($comment) . "', " . time() . ", " . (($type == 'plus') ? 1 : 0 ) . ", $post_id, 0)";
			$db->sql_query($sql);

			// empty outdated cache items
			$cache->destroy('_rep_cnt_poster_from_post_' . $poster_id . '_' . $user->data['user_id'] . '_' . $post_id);
			$cache->destroy('_rep_idfrom_poster_maxcomments_' . $poster_id . '_' . $config['reputation_max_comments']);
			$cache->destroy('_rep_cnt_post_' . $post_id);
			$cache->destroy('_rep_topictitle_post_' . $post_id);
			$cache->destroy('_rep_cnt_touserid_' . $poster_id);
			$cache->destroy('_rep_posterid_max_' . $poster_id . '_' . $config['topics_per_page']);
			// ugly hardcode, I know. Kick me. ;)
			$cache->destroy('_rep_all_postid_perpage_start_' . $post_id . '_' . $config['topics_per_page'] . '_' . 0);
			$cache->destroy('_rep_all_postid_perpage_start_' . $post_id . '_' . $config['topics_per_page'] . '_' . ($config['topics_per_page'] * 1));
			$cache->destroy('_rep_all_postid_perpage_start_' . $post_id . '_' . $config['topics_per_page'] . '_' . ($config['topics_per_page'] * 2));
			$cache->destroy('_rep_all_postid_perpage_start_' . $post_id . '_' . $config['topics_per_page'] . '_' . ($config['topics_per_page'] * 3));
			$cache->destroy('_rep_all_postid_perpage_start_' . $post_id . '_' . $config['topics_per_page'] . '_' . ($config['topics_per_page'] * 4));
			$cache->destroy('_rep_all_postid_perpage_start_' . $post_id . '_' . $config['topics_per_page'] . '_' . ($config['topics_per_page'] * 5));
			$cache->destroy('_rep_all_postid_perpage_start_' . $post_id . '_' . $config['topics_per_page'] . '_' . ($config['topics_per_page'] * 6));
			$cache->destroy('_rep_all_postid_perpage_start_' . $post_id . '_' . $config['topics_per_page'] . '_' . ($config['topics_per_page'] * 7));
			$cache->destroy('_rep_all_postid_perpage_start_' . $post_id . '_' . $config['topics_per_page'] . '_' . ($config['topics_per_page'] * 8));
			$cache->destroy('_rep_all_postid_perpage_start_' . $post_id . '_' . $config['topics_per_page'] . '_' . ($config['topics_per_page'] * 9));
			$cache->destroy('_rep_all_postid_perpage_start_' . $post_id . '_' . $config['topics_per_page'] . '_' . ($config['topics_per_page'] * 10));
			$cache->destroy('_rep_all_userid_perpage_start_' . $poster_id . '_' . $config['topics_per_page'] . '_' . 0);
			$cache->destroy('_rep_all_userid_perpage_start_' . $poster_id . '_' . $config['topics_per_page'] . '_' . ($config['topics_per_page'] * 1));
			$cache->destroy('_rep_all_userid_perpage_start_' . $poster_id . '_' . $config['topics_per_page'] . '_' . ($config['topics_per_page'] * 2));
			$cache->destroy('_rep_all_userid_perpage_start_' . $poster_id . '_' . $config['topics_per_page'] . '_' . ($config['topics_per_page'] * 3));
			$cache->destroy('_rep_all_userid_perpage_start_' . $poster_id . '_' . $config['topics_per_page'] . '_' . ($config['topics_per_page'] * 4));
			$cache->destroy('_rep_all_userid_perpage_start_' . $poster_id . '_' . $config['topics_per_page'] . '_' . ($config['topics_per_page'] * 5));
			$cache->destroy('_rep_all_userid_perpage_start_' . $poster_id . '_' . $config['topics_per_page'] . '_' . ($config['topics_per_page'] * 6));
			$cache->destroy('_rep_all_userid_perpage_start_' . $poster_id . '_' . $config['topics_per_page'] . '_' . ($config['topics_per_page'] * 7));
			$cache->destroy('_rep_all_userid_perpage_start_' . $poster_id . '_' . $config['topics_per_page'] . '_' . ($config['topics_per_page'] * 8));
			$cache->destroy('_rep_all_userid_perpage_start_' . $poster_id . '_' . $config['topics_per_page'] . '_' . ($config['topics_per_page'] * 9));
			$cache->destroy('_rep_all_userid_perpage_start_' . $poster_id . '_' . $config['topics_per_page'] . '_' . ($config['topics_per_page'] * 10));

			meta_refresh(3, $redirect_url);

			trigger_error(sprintf($user->lang['REPUTATION_CHANGED'], $redirect_url));
		}
	}

	add_form_key('reputation_change');

	$page_title = $user->lang['REPUTATION_CHANGING'];
	page_header($page_title);

	$s_hidden_fields  = '<input type="hidden" name="mode" value="change" />';
	$s_hidden_fields .= '<input type="hidden" name="type" value="' . $type . '" />';
	$s_hidden_fields .= '<input type="hidden" name="p" value="' . $post_id . '" />';
	$s_hidden_fields .= '<input type="hidden" name="rep-post" value="1" />';

	if ($error)
	{
		$template->assign_vars(array(
			'ERROR' => $user->lang['REPUTATION_MISSING_COMMENT'])
		);
	}

	$template->assign_vars(array(
		'S_REPUTATION_ACTION'	=> append_sid("{$phpbb_root_path}reputation.$phpEx"),
		'S_HIDDEN_FIELDS'		=> $s_hidden_fields,

		'USERNAME'				=> $poster_full,

		'U_USER_REPUTATION'		=> append_sid("{$phpbb_root_path}reputation.$phpEx", "u=$poster_id"),
		'REPUTATION_VALUE'		=> ($reputation_total < 0) ? '&minus;' . abs($reputation_total) : $reputation_total,
		'REPUTATION_PLUSES'		=> $reputation_pluses,
		'REPUTATION_MINUSES'	=> $reputation_minuses,

		'S_REPUTATION_TYPE'		=> $type,

		'U_FOR_POST'			=> $redirect_url,

		'COMMENT'				=> $comment,
	));

	$template->set_filenames(array(
		'body' => 'reputation_change_body.html')
	);

	page_footer();

}

?>
Файл memberlist.php:
После:

Код: Выделить всё

$ranks = $cache->obtain_ranks();
Вставить:

Код: Выделить всё

// Reputation START
// Kot: Moved to global scope
$user->add_lang(array('mods/reputation'));
// Reputation END
Заменить:

Код: Выделить всё

		// Reputation START
		$user->add_lang(array('mods/reputation'));
На:

Код: Выделить всё

		// Reputation START
Файл viewtopic.php
Заменить:

Код: Выделить всё

			$sql = 'SELECT COUNT(*) AS reputation_cnt
				FROM ' . REPUTATION_TABLE . " r
				WHERE r.reputation_to = $poster_id
					AND r.reputation_from = " . $user->data['user_id'] . '
					AND r.reputation_post = ' . $row['post_id'];
			$result = $db->sql_query($sql);
			$rep_row = $db->sql_fetchrow($result);
			$db->sql_freeresult($result);

			$reputation_changeable = !$rep_row['reputation_cnt'];
На:

Код: Выделить всё

			$cache_filename = '_rep_cnt_poster_from_post_' . $poster_id . '_' . $user->data['user_id'] . '_' . $row['post_id'];
			if (($rep_row = $cache->get($cache_filename)) === false)
			{
				$sql = 'SELECT COUNT(*) AS reputation_cnt
					FROM ' . REPUTATION_TABLE . " r
					WHERE r.reputation_to = $poster_id
						AND r.reputation_from = " . $user->data['user_id'] . '
						AND r.reputation_post = ' . $row['post_id'];
				$result = $db->sql_query($sql);
				$rep_row = $db->sql_fetchfield('reputation_cnt');
				$db->sql_freeresult($result);
				
				$cache->put($cache_filename, $rep_row);
			}

			$reputation_changeable = !$rep_row;


Заменить:

Код: Выделить всё

					$sql = 'SELECT r.reputation_id, r.reputation_from
						FROM ' . REPUTATION_TABLE . " r
						WHERE r.reputation_to = $poster_id
						ORDER BY r.reputation_time DESC
						LIMIT 0, " . $config['reputation_max_comments'];
					$result = $db->sql_query($sql);
					$rep_rows = array();
					while ($rep_row = $db->sql_fetchrow($result))
					{
						$rep_rows[] = $rep_row;
					}
					$db->sql_freeresult($result);
На:

Код: Выделить всё

					$cache_filename = '_rep_idfrom_poster_maxcomments_' . $poster_id . '_' . $config['reputation_max_comments'];
					if (($rep_rows = $cache->get($cache_filename)) === false)
					{
						$sql = 'SELECT r.reputation_id, r.reputation_from
							FROM ' . REPUTATION_TABLE . " r
							WHERE r.reputation_to = $poster_id
							ORDER BY r.reputation_time DESC
							LIMIT 0, " . $config['reputation_max_comments'];
						$result = $db->sql_query($sql);
						$rep_rows = array();
						while ($rep_row = $db->sql_fetchrow($result))
						{
							$rep_rows[] = $rep_row;
						}
						$db->sql_freeresult($result);
	
						$cache->put($cache_filename, $rep_rows);
					}
		
Заменить:

Код: Выделить всё

	// Review
	if ($user->data['user_id'] == ANONYMOUS && !$user->data['is_bot'])
На:

Код: Выделить всё

	// Review
	if ($user->data['is_bot'])
Заменить:

Код: Выделить всё

		$sql = 'SELECT COUNT(*) as rep_cnt 
		FROM ' . REPUTATION_TABLE . '
		WHERE reputation_post =' . $row['post_id'] . '
		UNION ALL
		SELECT COUNT(*) as rep_cnt 
		FROM ' . REPUTATION_TABLE . '
		WHERE reputation_post =' . $row['post_id'] . ' AND reputation_type = 1
		UNION ALL
		SELECT COUNT(*) as rep_cnt 
		FROM ' . REPUTATION_TABLE . '
		WHERE reputation_post =' . $row['post_id'] . ' AND reputation_type = 0';
	
		$result = $db->sql_query($sql);
		$reviews_total_items = $db->sql_fetchfield('rep_cnt', 0);
		if ( $reviews_total_items > 0 )
		{
			$reviews_plus_items = $db->sql_fetchfield('rep_cnt', 1);
			$reviews_minus_items = $db->sql_fetchfield('rep_cnt', 2);
			$reviews_diff = $reviews_plus_items - $reviews_minus_items;

			$reviews = $user->lang['REVIEWS_MESSAGE_RATING'] . ': <strong class=' . ($reviews_diff > 0 ? '"positive">+' : '"negative">') . $reviews_diff . '</strong> (<a href="' . append_sid("{$phpbb_root_path}reputation.$phpEx", "mode=reviews&p=" . $row['post_id']) . '" title="' . $user->lang['REVIEWS_HISTORY'] . '">' . $user->lang['REVIEWS'] . ": $reviews_total_items</a>)";
		}
		else
		{
			$reviews = '';
		}

		$db->sql_freeresult($result);
	}
На:

Код: Выделить всё

		$cache_filename = '_rep_cnt_post_' . $row['post_id'];
		if (($rep_count = $cache->get($cache_filename)) === false)
		{
			$sql = 'SELECT COUNT(*) as rep_cnt 
			FROM ' . REPUTATION_TABLE . '
			WHERE reputation_post =' . $row['post_id'] . '
			UNION ALL
			SELECT COUNT(*) as rep_cnt 
			FROM ' . REPUTATION_TABLE . '
			WHERE reputation_post =' . $row['post_id'] . ' AND reputation_type = 1
			UNION ALL
			SELECT COUNT(*) as rep_cnt 
			FROM ' . REPUTATION_TABLE . '
			WHERE reputation_post =' . $row['post_id'] . ' AND reputation_type = 0';
		
			$result = $db->sql_query($sql);
    
			$rep_count = array();
			while ($rep_row = $db->sql_fetchrow($result))
			{
				$rep_count[] = $rep_row['rep_cnt'];
			}
			$db->sql_freeresult($result);

			$cache->put($cache_filename, $rep_count);
		}

		$reviews_total_items = $rep_count[0];
		if ( $reviews_total_items > 0 )
		{
			$reviews_plus_items = $rep_count[1];
			$reviews_minus_items = $rep_count[2];
			$reviews_diff = $reviews_plus_items - $reviews_minus_items;

			$reviews = $user->lang['REVIEWS_MESSAGE_RATING'] . ': <strong class=' . ($reviews_diff > 0 ? '"positive">+' : '"negative">') . $reviews_diff . '</strong> (<a href="' . append_sid("{$phpbb_root_path}reputation.$phpEx", "mode=reviews&p=" . $row['post_id']) . '" title="' . $user->lang['REVIEWS_HISTORY'] . '">' . $user->lang['REVIEWS'] . ": $reviews_total_items</a>)";
		}
		else
		{
			$reviews = '';
		}
	}
Аватара пользователя
Kot
phpBB 2.0.0
Сообщения: 207
Стаж: 17 лет 6 месяцев
Благодарил (а): 17 раз
Поблагодарили: 34 раза

Re: [DEV] Reputation System / Система репутации

Сообщение Kot »

Упс, тем, кто уже успел обновить мод репутации в промежутке между этими двумя сообщениями, просьба заново скопировать файл reputation.php -- нашелся баг, когда кэш со списком репутаций не очищался при изменении репутации пользователю.

Да, и в системе репутации есть еще один баг "от автора":
при изменении репутации внутреннее изменение радиобатонов "Изменение репутации" на результат не влияет. Т.е. если я перешел на страницу изменения репутации по нажатию на "+", то в итоге репутация изменится в положительную сторону, какой бы радиобаттон я не выбирал.

Кто-нибудь с этим сталкивался, правил? А то меня как-то ломает разбираться..
Аватара пользователя
EuRusik
phpBB 1.2.0
Сообщения: 10
Стаж: 16 лет 7 месяцев
Откуда: Днепропетровск
Благодарил (а): 5 раз

Re: [DEV] Reputation System / Система репутации

Сообщение EuRusik »

Поставил данный мод на 3.0.6, все как бы работает нормально, но при включенном дебаг, вылазит ряд ошибок

Код: Выделить всё

[phpBB Debug] PHP Notice: in file /viewtopic.php on line 1536: Undefined index: reputation_max_comments
[phpBB Debug] PHP Notice: in file /viewtopic.php on line 1507: Undefined index: reputation_min_posts
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 4211: Cannot modify header information - headers already sent by (output started at /includes/functions.php:3493)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 4213: Cannot modify header information - headers already sent by (output started at /includes/functions.php:3493)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 4214: Cannot modify header information - headers already sent by (output started at /includes/functions.php:3493)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 4215: Cannot modify header information - headers already sent by (output started at /includes/functions.php:3493)
А при просмотре профиля

Код: Выделить всё

[phpBB Debug] PHP Notice: in file /memberlist.php on line 1661: Undefined index: REPUTATION_VIEW_HISTORY
Коды +- 7-8 строк
1507
// Reputation START
if ($poster_id != ANONYMOUS)
{
$reputation_changeable = false;
$reputation_unavailable_reason = '';

if (!$user->data['is_registered'])
{
$reputation_unavailable_reason = sprintf($user->lang['REPUTATION_REASON_NOT_LOGGED_IN'], $config['reputation_min_posts']);
}
else if ($user->data['user_posts'] < $config['reputation_min_posts'])
{
$reputation_unavailable_reason = sprintf($user->lang['REPUTATION_REASON_FEW_POSTS'], $config['reputation_min_posts']);
}
else if ($user->data['user_reputation_ban'])
{
$reputation_unavailable_reason = $user->lang['REPUTATION_REASON_BAN'];
}
else if ($user->data['user_id'] == $poster_id)
{
$reputation_unavailable_reason = $user->lang['REPUTATION_REASON_SELF'];
}
else
{

Коды +- 10 строк
1536
$result = $db->sql_query($sql);
$rep_row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);

$reputation_changeable = !$rep_row['reputation_cnt'];

if (!$reputation_changeable)
{
$reputation_unavailable_reason = $user->lang['REPUTATION_REASON_AGAIN'];
}
else if ($config['reputation_max_comments'])
{
if (!isset($reputation_last_info_cache[$poster_id]))
{
$sql = 'SELECT r.reputation_id, r.reputation_from
FROM ' . REPUTATION_TABLE . " r
WHERE r.reputation_to = $poster_id
ORDER BY r.reputation_time DESC
LIMIT 0, " . $config['reputation_max_comments'];
$result = $db->sql_query($sql);
Коды +- 10 строк
1661
// Dump it out to the template
return array(
'AGE' => $age,
'RANK_TITLE' => $rank_title,
'JOINED' => $user->format_date($data['user_regdate']),
'VISITED' => (empty($last_visit)) ? ' - ' : $user->format_date($last_visit),
'POSTS' => ($data['user_posts']) ? $data['user_posts'] : 0,
'WARNINGS' => isset($data['user_warnings']) ? $data['user_warnings'] : 0,
// Reputation START
'REPUTATION' => '<a href="' . append_sid("{$phpbb_root_path}reputation.$phpEx", "u=$user_id") . '" title="' . $user->lang['REPUTATION_VIEW_HISTORY'] . '">' . (($data['user_reputation_total'] < 0) ? '&minus;' . abs($data['user_reputation_total']) : $data['user_reputation_total']) . '</a>&nbsp;[&minus;' . $data['user_reputation_minuses'] . '/+' . $data['user_reputation_pluses'] . ']',
// Reputation END




'USERNAME_FULL' => get_username_string('full', $user_id, $username, $data['user_colour']),
'USERNAME' => get_username_string('username', $user_id, $username, $data['user_colour']),
'USER_COLOR' => get_username_string('colour', $user_id, $username, $data['user_colour']),
'U_VIEW_PROFILE' => get_username_string('profile', $user_id, $username, $data['user_colour']),
Код 4211-4215
'T_ICONS' => $config['icons_path'],
'T_RANKS' => $config['ranks_path'],
'T_UPLOAD' => $config['upload_path'],

'SITE_LOGO_IMG' => $user->img('site_logo'),

'A_COOKIE_SETTINGS' => addslashes('; path=' . $config['cookie_path'] . ((!$config['cookie_domain'] || $config['cookie_domain'] == 'localhost' || $config['cookie_domain'] == '127.0.0.1') ? '' : '; domain=' . $config['cookie_domain']) . ((!$config['cookie_secure']) ? '' : '; secure')),
));

// application/xhtml+xml not used because of IE
header('Content-type: text/html; charset=UTF-8');

header('Cache-Control: private, no-cache="set-cookie"');
header('Expires: 0');
header('Pragma: no-cache');


return;
}

/**
* Generate page footer
*/
function page_footer($run_cron = true)
{
global $db, $config, $template, $user, $auth, $cache, $starttime, $phpbb_root_path, $phpEx;
Код 3494
{
if (@extension_loaded('zlib') && !headers_sent() && !ob_get_level())
{
@ob_flush();
}
}

// remove complete path to installation, with the risk of changing backslashes meant to be there
$errfile = str_replace(array(phpbb_realpath($phpbb_root_path), '\\'), array('', '/'), $errfile);
$msg_text = str_replace(array(phpbb_realpath($phpbb_root_path), '\\'), array('', '/'), $msg_text);
echo '<b>[phpBB Debug] PHP Notice</b>: in file <b>' . $errfile . '</b> on line <b>' . $errline . '</b>: <b>' . $msg_text . '</b><br />' . "\n";

// we are writing an image - the user won't see the debug, so let's place it in the log
if (defined('IMAGE_OUTPUT') || defined('IN_CRON'))
{
add_log('critical', 'LOG_IMAGE_GENERATION_ERROR', $errfile, $errline, $msg_text);
}
// echo '<br /><br />BACKTRACE<br />' . get_backtrace() . '<br />' . "\n";
}

return;
MAzZY
Бывший член :)
Сообщения: 2925
Стаж: 21 год 4 месяца
Благодарил (а): 79 раз
Поблагодарили: 69 раз
Забанен: Бессрочно

Re: [DEV] Reputation System / Система репутации

Сообщение MAzZY »

Проверяйте установку.
И больше не устанавливайте моды, находящиеся в разработке. Никто не обещал поддержку по ним.
TomaAlymova
phpBB 1.0.0
Сообщения: 0
Стаж: 16 лет 6 месяцев

Re: [DEV] Reputation System / Система репутации

Сообщение TomaAlymova »

Здравствуйте, пробовала установить мод. Сделала все как в инструкции. Ошибок никаких не выходит. Просто не появляется никакой репутации! Помогите пожалуйста мне!
Аватара пользователя
Izya
Former team member
Сообщения: 408
Стаж: 18 лет
Откуда: Абакан, Сибирь
Благодарил (а): 1 раз
Поблагодарили: 28 раз

Re: [DEV] Reputation System / Система репутации

Сообщение Izya »

Кэш чистили после установки?
Изображение
romeo_piter
phpBB 2.0.22
Сообщения: 1375
Стаж: 17 лет 5 месяцев
Благодарил (а): 260 раз
Поблагодарили: 32 раза

Re: [DEV] Reputation System / Система репутации

Сообщение romeo_piter »

Недавно обнаружил такую штуку. В форму изменения репутации не передается ник пользователя. На скрине все видно.

В стиле ник присутствует. Мод не ругается, просто не отображает его. Вот кусок из reputation_change_body.html:

Код: Выделить всё

<dl>
		<dt>{L_REPUTATION_USERNAME}:</dt>
		<dd><a href="{U_TO_USERNAME}" onclick="this.target='_blank';" title="{L_REPUTATION_USER_PROFILE}">{TO_USERNAME}</a></dd>
	</dl>
Подскажите, куда смотреть, где копать.

Добавлено спустя 27 минут 38 секунд:
Ничего не понимаю, убрал в переменных "TO"
Т.е. в файле стиля вот это:
<dl>
<dt>{L_REPUTATION_USERNAME}:</dt>
<dd><a href="{U_USERNAME}" onclick="this.target='_blank';" title="{L_REPUTATION_USER_PROFILE}">{USERNAME}</a></dd>
</dl>

<dl>
<dt>{L_REPUTATION_CURRENT}:</dt>
<dd><a href="{U_USER_REPUTATION}" title="{L_REPUTATION_VIEW_HISTORY_CHANGING}" onclick="this.target='_blank';">{REPUTATION_VALUE}</a> &nbsp;&nbsp; [&nbsp;&minus;{REPUTATION_MINUSES}&nbsp;/&nbsp;+{REPUTATION_PLUSES}&nbsp;]</dd>
</dl>
Имя пользователя ссылкой теперь отображает,
НО!!!
1. Не открывает профиль в новой вкладке (хотя по коду должен)
2. Сам исходный код на странице выглядит криво: (Смущает a href="")

Код: Выделить всё

<dt>Пользователю:</dt>
		<dd><a href="" onclick="this.target='_blank';" title="Профиль пользователя"><a href="./memberlist.php?mode=viewprofile&u=453">alex7806</a></a></dd>
	</dl>

	<dl>
		<dt>Текущее значение репутации:</dt>

		<dd><a href="./reputation.php?u=453" title="Просмотреть историю изменения репутации" onclick="this.target='_blank';">28</a> &nbsp;&nbsp; [&nbsp;&minus;0&nbsp;/&nbsp;+28&nbsp;]</dd>
У вас нет необходимых прав для просмотра вложений в этом сообщении.
nuknuk0071
phpBB 1.0.0
Сообщения: 3
Стаж: 16 лет 5 месяцев

Re: [DEV] Reputation System / Система репутации

Сообщение nuknuk0071 »

всем привет, поставил данный мод, почитал всю тему, но не могу решить пару проблем
версия phpbb 3.0.7-PL1


1 проблема, не работает вкладка стили в админке (белый экран), остальные вкладки работаю


2 проблема, нет настроек мода, хотя что-то есть не это вроде не то
а понять этого не могу так как отображается крякозябрами
вот фото

[фото пропало]

буду рад тому кто поможет в решении этих проблем :)
заранее спасибо
Аватара пользователя
Rayden
Former team member
Сообщения: 3739
Стаж: 21 год 2 месяца
Поблагодарили: 44 раза

Re: [DEV] Reputation System / Система репутации

Сообщение Rayden »

Кривая установка.
Читай статью "как устанавливать моды", ссылка вверху.

Добавлено спустя 2 минуты 6 секунд:
И еще... Тупиц тут мало, поэтому не надо выделять весь текст жирным шрифтом, схлопочешь замечание.
phpBB2 FAQ
phpBB3 FAQ
nuknuk0071
phpBB 1.0.0
Сообщения: 3
Стаж: 16 лет 5 месяцев

Re: [DEV] Reputation System / Система репутации

Сообщение nuknuk0071 »

Rayden сорри думал текст будет плохо видно после картинки


зы. по моду- я установил его правильно, не пойму в чем проблема :(

Вернуться в «Бета-версии модов для phpBB 3.0.x»