Пропустить

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

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).

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

Сообщение Kot » 26.01.2010 21:27

amBX писал(а):Слушайте, может возможно сделать так, если карма -5 то она высвечивалась красным, если карма 0 то обычным цветом, если +5 то зеленым?
А разве в моем коде не так сделано? :) topic23115-270.html#p269074

Обратите внимание на изменение css файла.

Добавлено спустя 1 минуту 5 секунд:
Разве что только 0 тоже зеленым показывается, не заморачивался насчет "обычного" цвета.
Аватара пользователя
Kot
phpBB 1.2.0
 
Сообщения: 18
Зарегистрирован: 20.03.2009 20:23
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

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

Сообщение VVVas » 26.01.2010 21:58

amBX писал(а):С html дружу я.
Судя по отсутствию результата надо подружиться с CSS или улучшить дружбу с HTML.
Аватара пользователя
VVVas
Former team member
 
Сообщения: 4469
Зарегистрирован: 12.11.2004 0:20
Благодарил (а): 0 раз.
Поблагодарили: 10 раз.

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

Сообщение amBX » 26.01.2010 22:05

Да блин совсем ни чего не получается(( всё что написано "найти и заменить на" такое ощущение что у меня это в 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'];

Но ни как не выше преведенный, и так со всем, я не могу найти то что надо заменить.


МОЖНО просто мне обяснить как сделать так?
Вложения
5.jpg
5.jpg (13.35 КБ) Просмотров: 528

amBX
phpBB 1.2.1
 
Сообщения: 25
Зарегистрирован: 09.01.2010 19:27
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.

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

Сообщение FladeX » 26.01.2010 22:35

Преамбула.
На 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 для форумов | форум про форумы
Аватара пользователя
FladeX
Former team member
 
Сообщения: 2104
Зарегистрирован: 02.06.2007 22:44
Откуда: Саранск
Благодарил (а): 6 раз.
Поблагодарили: 53 раз.

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

Сообщение boloto » 27.01.2010 16:26

amBX писал(а):Да блин совсем ни чего не получается(( всё что написано "найти и заменить на" такое ощущение что у меня это в viewtopic.php совсем нет.
видимо, ты невнимательно прочитал сообщение topic23115-270.html#p269074 "Итак, указанные ниже изменения нужно вносить ПОСЛЕ изменений от автора аддона. "
Аватара пользователя
boloto
phpBB 2.0.0
 
Сообщения: 111
Зарегистрирован: 29.09.2009 15:41
Благодарил (а): 35 раз.
Поблагодарили: 9 раз.

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

Сообщение Буржуй » 12.02.2010 11:35

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

Добавлено спустя 1 минуту 11 секунд:
Рейтинг повысил, почему не чего не меняется ??? хотя рейтинг добавлен с коментариями
Вложения
Безымянный2.png
(11.51 КБ) Скачиваний: 396
Безымянный.png
Безымянный.png (10.18 КБ) Просмотров: 466

Буржуй
phpBB 1.2.1
 
Сообщения: 26
Зарегистрирован: 13.12.2009 16:03
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Предупреждения: 1

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

Сообщение Kot » 12.02.2010 11:56

Попробуй на локали запустить это дело с максимальным выводом ошибок php -- есть вероятность, что увидишь, где находится незаинициализированная переменная. У меня подозрение, что ты неправильно обновил viewtopic.php
Аватара пользователя
Kot
phpBB 1.2.0
 
Сообщения: 18
Зарегистрирован: 20.03.2009 20:23
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

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

Сообщение Буржуй » 12.02.2010 13:02

в том то и дело что все правильно, пробывал одна и таже ошибка! форум 3.0.6

Буржуй
phpBB 1.2.1
 
Сообщения: 26
Зарегистрирован: 13.12.2009 16:03
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Предупреждения: 1

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

Сообщение Kot » 18.02.2010 19:43

Перевел сайт к другому хостеру, у которого стоит ограничение на количество запросов к 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 поблагодарил:
boloto (28.08.2010 21:48)
Аватара пользователя
Kot
phpBB 1.2.0
 
Сообщения: 18
Зарегистрирован: 20.03.2009 20:23
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

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

Сообщение Kot » 18.02.2010 23:19

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

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

Кто-нибудь с этим сталкивался, правил? А то меня как-то ломает разбираться..
Аватара пользователя
Kot
phpBB 1.2.0
 
Сообщения: 18
Зарегистрирован: 20.03.2009 20:23
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

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

Сообщение EuRusik » 27.02.2010 16:05

Поставил данный мод на 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;
Аватара пользователя
EuRusik
phpBB 1.2.0
 
Сообщения: 18
Зарегистрирован: 28.01.2010 9:27
Откуда: Днепропетровск
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.

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

Сообщение MAzZY » 27.02.2010 16:27

Проверяйте установку.
И больше не устанавливайте моды, находящиеся в разработке. Никто не обещал поддержку по ним.
Заработок на сайтах и форумах. Рефералам помогу установить код и начать зарабатывать.
Хороший хостинг в Питере
Аватара пользователя
MAzZY
Former team member
 
Сообщения: 2969
Зарегистрирован: 14.05.2005 22:43
Благодарил (а): 50 раз.
Поблагодарили: 54 раз.
Предупреждения: 1

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

Сообщение TomaAlymova » 03.03.2010 23:31

Здравствуйте, пробовала установить мод. Сделала все как в инструкции. Ошибок никаких не выходит. Просто не появляется никакой репутации! Помогите пожалуйста мне!

TomaAlymova
phpBB 1.0.0
 
Сообщения: 1
Зарегистрирован: 03.03.2010 23:24
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

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

Сообщение Izya » 05.03.2010 12:15

Кэш чистили после установки?
Изображение
Аватара пользователя
Izya
Former team member
 
Сообщения: 415
Зарегистрирован: 30.08.2008 9:46
Откуда: Абакан, Сибирь
Благодарил (а): 1 раз.
Поблагодарили: 19 раз.

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

Сообщение romeo_piter » 28.03.2010 12:03

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

В стиле ник присутствует. Мод не ругается, просто не отображает его. Вот кусок из 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&amp;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>
Вложения
ooo.jpg

romeo_piter
phpBB 2.0.11
 
Сообщения: 381
Зарегистрирован: 02.04.2009 16:28
Благодарил (а): 51 раз.
Поблагодарили: 7 раз.

Пред.След.

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

 

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Бессрочный конкурс phpBB-ориентированных материалов
FastVPS — надёжный и доступный хостинг для phpBB
Место для вашей рекламы