Перейти к контенту

Вес предупреждений


Рекомендуемые сообщения

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

  • 2 недели спустя...

mySQL query error: INSERT INTO ibf_warn_logs VALUES('','6735','<content>Снят по истечении срока</content><mod>,d,</mod><post>,d, </post><susp>,d</susp>','none','','1151571993','pos','2','0')

 

mySQL error: Column count doesn't match value count at row 1

mySQL error code:

Date: Thursday 29th of June 2006 01:06:33 PM

 

 

вот сама строка из скрипта:

 

$queries[] = "INSERT INTO ".SQL_PREFIX."warn_logs VALUES('','{$ibforums->member['id']}','<content>Снят по истечении срока</content><mod>,d,</mod><post>,d, </post><susp>,d</susp>','none','','".time()."','pos','".DEC_ID."','0')";

 

Такая вот штука, насколько я понимаю, автоматическое снятие нарушений снимает только по 1 единицы наказаний, а в моде Вес предупреждений встречаются и 2 и 3 пункта наказаний сразу :D

Т.е нужно сделать так, чтобы мод Автоматического снятия нарушений снимал то кол-во пунктов, на которое был наказан пользователь ;)

Ссылка на комментарий
Поделиться на других сайтах

В принципе можно избежать ошибки БД, если заменить код на:
$queries[] = "INSERT INTO ".SQL_PREFIX."warn_logs VALUES('','{$ibforums->member['id']}','<content>Ñíÿò ïî èñòå÷åíèè ñðîêà</content><mod>,d,</mod><post>,d, </post><susp>,d</susp>','none','','".time()."','pos','".DEC_ID."','0','','')";

тут просто еще 2 поля добавлены. Но он не снимает сам Вес предупреждений, но как временная мера вполне подходит

Ссылка на комментарий
Поделиться на других сайтах

Уважаемая Anna

У меня такие ерроры:

При введении изменений в topics.php выдает ошибку:

Parse error: parse error, unexpected T_ELSE in n:\home\localhost\www\sources\topics.php on line 1197

Если не вношу изменений - ошибок нет.

ах да...версия 2.0.3

 

Снимаю вопрос....решил сам.

Ссылка на комментарий
Поделиться на других сайтах

mySQL query error: INSERT INTO ibf_warn_logs VALUES('','6735','<content>Снят по истечении срока</content><mod>,d,</mod><post>,d, </post><susp>,d</susp>','none','','1151571993','pos','2','0')

 

mySQL error: Column count doesn't match value count at row 1

mySQL error code:

Date: Thursday 29th of June 2006 01:06:33 PM

 

 

здесь используется так называемая "неполная вставка", т.е. тут не перечисляются поля, в которые вставляются значения. а поскольку в моем моде в эту таблицу добавляется еще два поля, то и получается что общее колво полей больше, чем колво значений. надо либо перечислять в скобках названия полей после названия таблицы, либо дописать еще два значения. первый вариант ИМХО более корректный.

Ссылка на комментарий
Поделиться на других сайтах

Anna: в идеале, конечно, нужно дописать запрос в Снятии предупреждений, чтобы он смотрел лог-наказаия и брал значение поля warn_weight и на столько же снимал :D
Ссылка на комментарий
Поделиться на других сайтах

Да, это будет то что нужно. Без этого снятие предупреждения будет неадекватным по своему весу. Если вы знаете ID строки предупреждения, то выяснить вес достаточно просто - простой запрос к соответствующему полю.
Ссылка на комментарий
Поделиться на других сайтах

Anna: К сожалению я в Mysql полный 0, поэтому самостоятельно это сделать не смогу ;) остается надеятся на других "тружеников"ресурса :D
Ссылка на комментарий
Поделиться на других сайтах

К сожалению я не знакома с модом автоматического снятия предупреждений, но по смыслу должно быть так:

 

SELECT wlog_weight FROM ibf_warn_logs WHERE wlog_id = 'сюда_индекс_предупреждения';

 

а потом это значение пишешь в переменную и подставляешь в свой запрос на снятие предупреждения так, чтоб оно попало в поле wlog_weight

Изменено пользователем Anna
Ссылка на комментарий
Поделиться на других сайтах

  • 4 месяца спустя...
Возможно я не буду оригинален. Но для 1.3 это чудо будет?
Ссылка на комментарий
Поделиться на других сайтах

  • 2 месяца спустя...

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

СКАЖИТЕ ТОЛЬКО, ЭТО РАБОТАЕТ?

тогда я переделаю под 21, мне самому нужно

Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

в общем занялся я этим для 2.1.х

работает

конфликтов с автоснятием нет, правда снимается минус 1, да я считаю это нормально, просто поставить чтоб почаще снималось

сейчас расскажу как сделать

буду говорить, какие изменения по отношению к коду надо вносить от версии для 2.0.х

 

 

 

пункты описания системы с 1 по 8 выполняются без изменений

 

1 - создаем ДУБЛИКАТ правил в закрытом разделе, доступ только у модеров, формат по описанию выше

2 - создаем в разделе настройки-правила новую настройку с любым именем, но ключом = rules_post_id

3 - не выполняем (оставляем все как есть)

 

таким образом мы можем использовать все как и было, сделать правила в админке, а в посте будет их копия-исходник для модерирования(предупреждений)

 

1 - без изменений(выполняем как есть, собственно в предыдущем первом пункте мы это выполняли, не так ли)

2 - выполняем как есть, тут все совпадает

3 - благодаря создателям ипб, действия над шаблонами для этого мода под 2.0.х подходят без изменений под 2.1.х

тоесть выполняем все как есть

4 - в шаблоне warn_header надо добавить к

<input type="radio" name="level" id="add" class="radiobutton" value="add" {$type['add']}

onclick="document.getElementById('option_mainrule').style.display='block'; document.getElementById('option_weight').style.display='block'; document.getElementById('option_weight_minus').style.display='none'"

а к

<input type="radio" name="level" id="minus" class="radiobutton" value="remove" {$type['minus']}

onclick="document.getElementById('option_mainrule').style.display='none'; document.getElementById('option_weight').style.display='none'; document.getElementById('option_weight_minus').style.display='block'"

в остальных шабллонах все как и для 2.0.х

 

теперь самый ответственный файл

5 sources/action_public/misc/warn.php

находим

var $warn_member  = "";

добавляем после

// warn weight
 var $tmp_row_length = 50;
 var $tmp_weight_arr = array( 0 => 'В соответствии с выбранным пунктом Правил', 1 => 'Легкое', 2 => 'Среднее', 3 => 'Серьезное' );
 var $tmp_colors_arr = array( 0 => 'gray' , 1 => 'green', 2 => 'orange', 3 => 'red' );
//^^

находим

$content = $this->parser->pre_display_parse( $this->parser->pre_db_parse( $match[1] ) );

добавляем после

	// warn weight
$weight = "";
if (strlen($r['wlog_mainrule'])>0)
{
 $content .= "<br /><br /><span align=left><b>Основной пункт правил: {$r['wlog_mainrule']}</b></span>";
}
if (strlen($r['wlog_weight'])>0)
{
 $weight = "<span style='color: {$this->tmp_colors_arr[$r['wlog_weight']]}; border: 2px solid white'><b>  " . ($r['wlog_type'] == 'pos' ? "-" : "+")  . $r['wlog_weight'] . " (". $this->tmp_weight_arr[$r['wlog_weight']].")  </b></span>";
}
// ^^

находим

				if ( $r['wlog_type'] == 'pos' )
			{
				$this->output .= $this->ipsclass->compiled_templates['skin_mod']->warn_view_positive_row($date, $content, $puni_name);
			}
			else
			{
				$this->output .= $this->ipsclass->compiled_templates['skin_mod']->warn_view_negative_row($date, $content, $puni_name);
			}

меняем на

				if ( $r['wlog_type'] == 'pos' )
			{
				$this->output .= $this->ipsclass->compiled_templates['skin_mod']->warn_view_positive_row($date, $content, $puni_name, $weight);
			}
			else
			{
				$this->output .= $this->ipsclass->compiled_templates['skin_mod']->warn_view_negative_row($date, $content, $puni_name, $weight);
			}

находим

		$save['wlog_mid']	 = $this->warn_member['id'];
	$save['wlog_addedby'] = $this->ipsclass->member['id'];

добавляем после

//warn weight
 if ($this->ipsclass->input['level'] == 'add')
 {
  $tmp = explode( "," , $this->ipsclass->input['mainrule'] );
  if (intval($this->ipsclass->input['weight']) > 0)
  {
$save['wlog_weight'] = $this->ipsclass->input['weight'];
if (intval($tmp[1]) > 0)
{
 $save['wlog_mainrule'] = $tmp[0];
}
  } else {
if (intval($tmp[1]) == 0)
{
 $save['wlog_weight'] = 2;
} else {
 $save['wlog_weight'] = $tmp[1];
 $save['wlog_mainrule'] = $tmp[0];
}
  }
 } else {
  $save['wlog_weight'] = $this->ipsclass->input['weight_minus'];
 }
//^^

находим

		if ( $this->ipsclass->input['level'] == 'add' )
	{
		$warn_level++;
	}
	else
	{
		$warn_level--;
	}

меняем на

		if ( $this->ipsclass->input['level'] == 'add' )
	{
		//$warn_level++;
		$warn_level += $save['wlog_weight'];
	}
	else
	{
		//$warn_level--;
		$warn_level -= $save['wlog_weight'];
	}

находим

		if ( $warn_level > $this->ipsclass->vars['warn_max'] )
	{
		$warn_level = $this->ipsclass->vars['warn_max'];
	}

меняем на

		/*if ( $warn_level > $this->ipsclass->vars['warn_max'] )
	{
		$warn_level = $this->ipsclass->vars['warn_max'];
	}*/

(собственно, закомментируем)

 

находим

			$this->output .= $this->ipsclass->compiled_templates['skin_mod']->warn_suspend($ban_arr, $ban_extra);
	}

добавляем после

//  warn weight

  $mainrule_contains = "<option value='' style='text-weight: bold; color: red'>Не удалось подгрузить Правила или распарсить их!</option>";
  $cache = $this->ipsclass->DB->simple_exec_query( array( 'select' => '*', 'from' => 'conf_settings', 'where' => "conf_key='rules_post_id'" ) );
  $text  = $cache['conf_value'] ? $cache['conf_value'] : $cache['conf_default'];
  $this->ipsclass->DB->query("SELECT pid, post FROM ibf_posts WHERE pid=".intval($text));
  if ($row=$this->ipsclass->DB->fetch_row())
  {
$mainrule_contains = "<option style='color: gray' value='0,0'>Не выбрано</option>\n";
$text = $this->ipsclass->my_nl2br($row['post']);
$tmp = explode( "<br />" , $text);
foreach ($tmp as $row)
{
 if (preg_match("/color\:/", $row))
 {
  $tmp_clear  = preg_replace('/<span style=\'color:.+?<\/span>/', '', $row);
  $tmp_clear  = str_replace("'", "", preg_replace('/<.+?>/', '', $tmp_clear));	  
  $tmp_color  = str_replace("'", "", preg_replace('/(.*)color:(\w+)(.*)/', '$2', $row));
  switch ($tmp_color)
  {
   case $this->tmp_colors_arr[3]:
	$tmp_weight = 3;
	$tmp_weight_desc = $this->tmp_weight_arr[$tmp_weight];
	break;
   case $this->tmp_colors_arr[1]:
	$tmp_weight = 1;
	$tmp_weight_desc = $this->tmp_weight_arr[$tmp_weight];
	break;
   default:
	$tmp_weight = 2;
	$tmp_weight_desc = $this->tmp_weight_arr[$tmp_weight];
  }
  $tmp_number = str_replace("'", "", preg_replace('/([\d\.]+)(.*)/', '$1', $tmp_clear));
  $tmp_clear  = substr( $tmp_clear , strlen($tmp_number) );
  $mainrule_contains .= "<option style='color: {$this->tmp_colors_arr[$tmp_weight]}' value='{$tmp_number},{$tmp_weight}'>{$tmp_number} - Характер нарушения: {$tmp_weight_desc}</option>\n";
  $tmp_clear_arr = explode(" ", $tmp_clear);
  $tmp_part = "";
  foreach ($tmp_clear_arr as $entry)
  {
   $tmp_part .= $entry." ";
   if (strlen($tmp_part)>=$this->tmp_row_length)
   {
	$mainrule_contains = $this->mainrule_optgroup($mainrule_contains, trim($tmp_part));
	$tmp_part = "";
   }
  }
  if (strlen(trim($tmp_part))>0)
  {
   $mainrule_contains = $this->mainrule_optgroup($mainrule_contains, $tmp_part);
  }
 }
}
  }
  $this->output .= $this->ipsclass->compiled_templates['skin_mod']->warn_main_rule($mainrule_contains, $this->ipsclass->input['type'] == 'minus' ? 'none' : 'block');

  $weight_contains = "";
  $weight_minus_contains = "";
  foreach ($this->tmp_weight_arr as $k => $v)
  {	
$weight_contains .= "<option style='color: {$this->tmp_colors_arr[$k]}' value='{$k}'>{$v}</option>\n";
if ($k > 0) $weight_minus_contains .= "<option style='color: {$this->tmp_colors_arr[$k]}' value='{$k}'>{$v} (-{$k})</option>\n";
  }
  $this->output .= $this->ipsclass->compiled_templates['skin_mod']->warn_weight($weight_contains, $this->ipsclass->input['type'] == 'minus' ? 'none' : 'block');
  $this->output .= $this->ipsclass->compiled_templates['skin_mod']->warn_weight_minus($weight_minus_contains, $this->ipsclass->input['type'] == 'minus' ? 'block' : 'none');

//^^

находим

}

?>

добавляем ПЕРЕД

// warn weight
 function mainrule_optgroup($full, $part)
 {
  return $full . "<optgroup style='color: gray' label='   {$part}'></optgroup>\n";
 }
//^^

 

6 - без изменений

 

 

7 - sources/action_public/profile.php

находим

						if ( $member['warn_level'] < 1 )
					{
						$member['warn_img'] = '<{WARN_0}>';
					}
					else if ( $member['warn_level'] >= $this->ipsclass->vars['warn_max'] )
					{
						$member['warn_img']	 = '<{WARN_5}>';
						$member['warn_percent'] = 100;
					}
					else
					{
						$member['warn_percent'] = $member['warn_level'] ? sprintf( "%.0f", ( ($member['warn_level'] / $this->ipsclass->vars['warn_max']) * 100) ) : 0;

						if ( $member['warn_percent'] > 100 )
						{
							$member['warn_percent'] = 100;
						}

меняем на

						if ( $member['warn_level'] < 1 )
					{
						$member['warn_img'] = '<{WARN_0}>';
					}
					/*else if ( $member['warn_level'] >= $this->ipsclass->vars['warn_max'] )
					{
						$member['warn_img']	 = '<{WARN_5}>';
						$member['warn_percent'] = 100;
					}*/
					else
					{
						$member['warn_percent'] = $member['warn_level'] ? sprintf( "%.0f", ( ($member['warn_level'] / $this->ipsclass->vars['warn_max']) * 100) ) : 0;

						/*if ( $member['warn_percent'] > 100 )
						{
							$member['warn_percent'] = 100;
						}*/

 

8 - sources/action_public/topics.php

находим

					if ( $member['warn_level'] <= $this->ipsclass->vars['warn_min'] )
				{
					$member['warn_img']	 = '<{WARN_0}>';
					$member['warn_percent'] = 0;
				}
				else if ( $member['warn_level'] >= $this->ipsclass->vars['warn_max'] )
				{
					$member['warn_img']	 = '<{WARN_5}>';
					$member['warn_percent'] = 100;
				}
				else
				{

					$member['warn_percent'] = $member['warn_level'] ? sprintf( "%.0f", ( ($member['warn_level'] / $this->ipsclass->vars['warn_max']) * 100) ) : 0;

					if ( $member['warn_percent'] > 100 )
					{
						$member['warn_percent'] = 100;
					}

меняем на

					if ( $member['warn_level'] <= $this->ipsclass->vars['warn_min'] )
				{
					$member['warn_img']	 = '<{WARN_0}>';
					$member['warn_percent'] = 0;
				}
				/*else if ( $member['warn_level'] >= $this->ipsclass->vars['warn_max'] )
				{
					$member['warn_img']	 = '<{WARN_5}>';
					$member['warn_percent'] = 100;
				}*/
				else
				{

					$member['warn_percent'] = $member['warn_level'] ? sprintf( "%.0f", ( ($member['warn_level'] / $this->ipsclass->vars['warn_max']) * 100) ) : 0;

					/*if ( $member['warn_percent'] > 100 )
					{
						$member['warn_percent'] = 100;
					}*/

правда я так и не понял, зачем эти проценты...

9 - без изменений

Ссылка на комментарий
Поделиться на других сайтах

Хорошоб написать полное руководство по установке..и не смотреть как есть для 2.0 , а как для 2.1.7 ...а то запутаешься.

 

Я вот например не понял , вот тут

2 - создаем в разделе настройки-правила новую настройку с любым именем, но ключом = rules_post_id

Остальные поля как заполнять?

Ссылка на комментарий
Поделиться на других сайтах

как угодно, желательно заполнить как можно меньше лишнего..

поискать по сайту, может есть где мануал по добавлению настройки

у вас получится

Ссылка на комментарий
Поделиться на других сайтах

  • 1 год спустя...

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.