Jump to content
Дизайн и модификация Invision Power Board IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Haktar

Баги по репутации

Recommended Posts

- - -

 

Поставлен мод который даёт возможность к репутации добавлять комментарии. Всё хорошо но есть один баг - если в коммент добавить знак вопроса, то после него обрезается весь текст (если текст идёт русскими символами).

Вот текст хука - http://imtw.ru/uploads/imperiall/imgs/total_war1381707276_ah30reputationcorefunctions.txt

Может в этом причина?

 

	public function unicode_escape($str)
{
	$escape_table = array(
 		'%20' => ' ',
 		'%21' => '!',
 		'%2C' => ',',
 		'%3A' => ':',
 		'%3B' => ';',
 		'%u0410' => 'А',
 		'%u0411' => 'Б',
 		'%u0412' => 'В',
 		'%u0413' => 'Г',
 		'%u0414' => 'Д',
 		'%u0415' => 'Е',
 		'%u0401' => 'Ё',
 		'%u0416' => 'Ж',
 		'%u0417' => 'З',
 		'%u0418' => 'И',
 		'%u0419' => 'Й',
 		'%u041A' => 'К',
 		'%u041B' => 'Л',
 		'%u041C' => 'М',
 		'%u041D' => 'Н',
 		'%u041E' => 'О',
 		'%u041F' => 'П',
 		'%u0420' => 'Р',
 		'%u0421' => 'С',
 		'%u0422' => 'Т',
 		'%u0423' => 'У',
 		'%u0424' => 'Ф',
 		'%u0425' => 'Х',
 		'%u0426' => 'Ц',
 		'%u0427' => 'Ч',
 		'%u0428' => 'Ш',
 		'%u0429' => 'Щ',
 		'%u042A' => 'Ъ',
 		'%u042B' => 'Ы',
 		'%u042C' => 'Ь',
 		'%u042D' => 'Э',
 		'%u042E' => 'Ю',
 		'%u042F' => 'Я',
 		'%u0430' => 'а',
 		'%u0431' => 'б',
 		'%u0432' => 'в',
 		'%u0433' => 'г',
 		'%u0434' => 'д',
 		'%u0435' => 'е',
 		'%u0451' => 'ё',
 		'%u0436' => 'ж',
 		'%u0437' => 'з',
 		'%u0438' => 'и',
 		'%u0439' => 'й',
 		'%u043A' => 'к',
 		'%u043B' => 'л',
 		'%u043C' => 'м',
 		'%u043D' => 'н',
 		'%u043E' => 'о',
 		'%u043F' => 'п',
 		'%u0440' => 'р',
 		'%u0441' => 'с',
 		'%u0442' => 'т',
 		'%u0443' => 'у',
 		'%u0444' => 'ф',
 		'%u0445' => 'х',
 		'%u0446' => 'ц',
 		'%u0447' => 'ч',
 		'%u0448' => 'ш',
 		'%u0449' => 'щ',
 		'%u044A' => 'ъ',
 		'%u044B' => 'ы',
 		'%u044C' => 'ь',
 		'%u044D' => 'э',
 		'%u044E' => 'ю',
 		'%u044F' => 'я',
	//ukrainian char 
	'%u0456' => 'і',
 		'%u0406' => 'І',
 		'%u0457' => 'ї',
 		'%u0407' => 'Ї',
 		'%u0454' => 'є',
 		'%u0404' => 'Є',
	);  
	return  strtr($str, $escape_table);

}

 

 

- - -

 

Как сделать реализацию что бы список репутации начинался с новых.

Вот скрин:

total_war1381707461_2013-10-07_154919.jpg

То есть что бы самая новая оценка была сверху а не снизу.

 

- - -

 

Стоит приложение История Репутации. Но на странице её почему то страниц листалок намного больше чем самих оценок. Как убрать пустые страницы?

Вот скрин:

total_war1381707623_2012-06-05_005948.jpg

 

- - -

 

Также в этом приложении попадают и оценки репутации с блогов, но они почему то ведут на id сообщения, который идентичен id записи блога.

 

- - -

 

Буду рад помощи по исправлению хотя бы одного бага. Заранее спасибо.

Share this post


Link to post
Share on other sites
Обратите внимание

По указанному вами в профиле "Board url" находится не IP.Board, либо модифицированный пиратский скрипт с удаленными копирайтами. Если вы указали неверный URL, пожауйста, поправьте его, потому что он скорее всего потребуется при диагностике вашей проблемы. Нелицензионные скрипты не приветствуются, т.к. зачастую именно некорректное "нуление" и является причиной проблем в них.

Share this post


Link to post
Share on other sites

1. Дело скорее всего в этом $message = IPSText::truncate( $message, 199 );

Хотя для "этого" есть более нормальный вариант декодирования

 

	public function unicode_escape($str)
{
	$str = preg_replace_callback( '/%u([0-9a-f]{4})/i',  array( $this, 'entity_decode' ), $str );
	return $str;
}

public function entity_decode( $m )
{
	$m = is_array($m) ? $m[1] : $m;
	return html_entity_decode( ''.hexdec( $m ).';', null, 'utf-8' );
}

 

2. Изменить сортировку в sql запросе. По умолчанию это admin\applications\core\modules_public\ajax\reputation.php, _viewRep(). Если у хука есть файл который его перегружает, то нужно править его.

'order' => 'rep_date DESC',

 

3. Какой-то счетчик не правильно работает, либо не правильно считается общее количество репутации. Отсюда и пустые листы

 

4. Автор не учел блоги, а все записи считает за репутацию сообщений. Это может быть причиной и бага в третьем пункте.

  • Upvote 1

Share this post


Link to post
Share on other sites

1. Дело скорее всего в этом $message = IPSText::truncate( $message, 199 );

Удалил. Не помогает. Значит не в ней.

 

Хотя для "этого" есть более нормальный вариант декодирования

Поставил. Проблема знака вопроса так и осталась :(

 

- - -

 

2. Изменить сортировку в sql запросе. По умолчанию это admin\applications\core\modules_public\ajax\reputation.php, _viewRep(). Если у хука есть файл который его перегружает, то нужно править его.

'order' => 'rep_date DESC',

Спасибо. Нужно было в файле хука ah30ReputationClassPopupOverload.php поменять 'rep_date', на 'rep_date DESC',

 

- - -

 

Кстати. А не подскажите как в файле хука ( http://imtw.ru/uploads/imperiall/imgs/total_war1381707276_ah30reputationcorefunctions.txt ) добавить условие что бы в комментариях срабатывал фильтр на нецензурные слова?

 

- - -

 

3. Какой-то счетчик не правильно работает, либо не правильно считается общее количество репутации. Отсюда и пустые листы

Причина по моему ясна - он считает общее кол-во оценок репутации, в том числе и с удалённых сообщений. Но как указать ему что бы он не считал репу та которая была в удалённых сообщениях?

 

- - -

 

4. Автор не учел блоги, а все записи считает за репутацию сообщений. Это может быть причиной и бага в третьем пункте.

Да. Вот в файле нет и намёка на блоги - http://imtw.ru/uploads/imperiall/imgs/total_war1381787346_reputationhistory.txt

Как указать что существуют и репутация в блогах?

Share this post


Link to post
Share on other sites

Поставил. Проблема знака вопроса так и осталась

Тогда нужно дебажить.

 

Причина по моему ясна - он считает общее кол-во оценок репутации, в том числе и с удалённых сообщений. Но как указать ему что бы он не считал репу та которая была в удалённых сообщениях?

По сути никак. Костыли с джоином таблицы постов не подойдет, так как в таком случае не будет репутации из других приложений. Если она все равно не нужна, то вместо

 

       $this->DB->build( array(
                                       'select'    => 'COUNT(type_id) as max',
                                       'from'      => 'reputation_index',
                               )       );
       $this->DB->execute();

       $total_possible = $this->DB->fetch();

поставить такой sql запрос

 

	$total_possible = $this->DB->buildAndFetch(array(
		'select'   => 'COUNT(*) as max',
		'from'     => array('reputation_index' => 'ri'),
		'add_join' => array(
			array(
				'from'  => array( 'posts' => 'p' ),
				'where' => 'ri.app="forums" AND ri.type="pid" AND ri.type_id=p.pid',
				'type'  => 'inner',
			),
		),
	));

 

И ниже 'p.pid=ri.type_id' заменить на 'ri.app="forums" AND ri.type="pid" AND ri.type_id=p.pid'

  • Upvote 1

Share this post


Link to post
Share on other sites

Тогда нужно дебажить.

Подскажите как это сделать.

 

По сути никак. Костыли с джоином таблицы постов не подойдет, так как в таком случае не будет репутации из других приложений. Если она все равно не нужна, то вместо

Ура - помогли! И репутация с приложений туда не попадает.

 

Но хотелось бы что бы там ещё и репутация с приложений (блоги и туториалы) попадала. Она у юзера отображается и засчитывается, но как её на список вывести?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...