Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

[BETA] Democracy MOD 0.2.1 (reputation + warnings + reports)

Здесь авторы постили бета-версии своих модификаций для phpBB 2.0.x. Внимание! Не устанавливайте бета-версии модов на работающие форумы!
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

IncominG
Аккуратнее на поворотах... Информация ETZel действительно очень интересна и важна. О его компетентности судить не тебе.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
ETZel
phpBB 1.4.3
Сообщения: 93
Стаж: 18 лет 4 месяца
Откуда: Челябинск

Сообщение ETZel »

IncominG писал(а):У меня тож стоит и все замечателдьно работает. Переменная объявлена - не стоит спорить...
Carbofos нас рассудит :mrgreen:
IncominG писал(а):фу как невежливо А местами я что, безграмотный?
Есть чуток
Можно поподробней? оч любопытно...

Немножко фиксов НЕ в usercp_reputation.php:

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

#OPEN post_report.php
#FIND
		$confirm = false;
		$confirm = isset($HTTP_POST_VARS['confirm']);
#REPLACE
		$confirm = isset($HTTP_POST_VARS['confirm']);


#OPEN page_header.php
#FIND
				$set = REPUTATION_BAN_EXPIRED;
#AFTER ADD
# Снимает expired баны когда включена опция "помечать как прошлые"
				$sql = 'DELETE FROM ' . BANLIST_TABLE . "
					WHERE ban_userid = '" . $row['user_id'] . "'";
				if ( !$db->sql_query($sql) )
				{
					message_die(GENERAL_ERROR, "Couldn't obtain banlist information", "", __LINE__, __FILE__, $sql);
				}
:!: Полностью фиксенный usercp_reputation.php и profile_view_reputation.tpl (в конце поста).
Это файл из democracy012 + все вышеописанный фиксы с свмого начала темы + несколько изменений:
1) добавил в function display_details($type, $forums_auth) параметр $forums_auth и соотв. код в блок REPUTATION_VIEW, чтобы модеры видели кнопки IP, Delete и Edit только если отзыв сделан в их форуме.
2) изменил код вычисления значения $approve в блоках REPUTATION_EDIT и REPUTATION_DELETE. Наконец-то полностью разобрался с $user_id и $voter_id. Это также и багфикс.

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

#FIND
	if ( !$post_deleted )
	{
		$is_auth = array();
		$is_auth = auth(AUTH_ALL, $forum_id, $userdata);

		if ( $is_auth['auth_mod'] )
		{
			$approve = true;
		}
		else if ( !$board_config['reputation_users_can_delete'] ) // зачем тут отрицание ???
		{
			if ( $user_id == $userdata['user_id'] )
			{
				$approve = true;
			}
		}
	}
	else
	{
		if ( $userdata['user_level'] == ADMIN || $userdata['user_level'] == MOD )
		{
			message_die(GENERAL_MESSAGE, $lang['reputation_deleted_no_edit']);
		}
	}
#REPLACE
# это косметика + $approved всегда будет определен
	if ( !$post_deleted )
	{
		$is_auth = auth(AUTH_ALL, $forum_id, $userdata);
		$approve = $is_auth['auth_mod'] || ($board_config['reputation_users_can_delete'] && $user_id == $userdata['user_id']);
	}
	else
	{
		if ( $userdata['user_level'] == ADMIN || $userdata['user_level'] == MOD )
		{
			message_die(GENERAL_MESSAGE, $lang['reputation_deleted_no_edit']);
		}
		$approve = false;
	}
#FIND только первое вхождение
	$user_id = intval($forum_topic_data['user_id']);
#AFTER ADD
	$voter_id = intval($forum_topic_data['voter_id']);
#FIND
	if ( !$post_deleted )
	{
		$is_auth = array();
		$is_auth = auth(AUTH_ALL, $forum_id, $userdata);

		if ( $is_auth['auth_mod'] )
		{
			$approve = true;
		}
		else if ( !$board_config['reputation_users_can_delete'] ) // зачем тут отрицание ???
		{
			if ( $user_id == $userdata['user_id'] )
			{
				$approve = true;
			}
		}
	}
	else
	{
		if ( $userdata['user_level'] == MOD )
		{
			if ( $user_id == $userdata['user_id'] )
			{
				$approve = true;
			}
		}
		else if ( $userdata['user_level'] == ADMIN )
		{
			$approve = true;
		}
	}
#REPLACE
# модератор может удалять отзывы на удаленные посты из его форума, почему нет?
	$is_auth = auth(AUTH_ALL, $forum_id, $userdata);
	$approve = $is_auth['auth_mod'] || ($board_config['reputation_users_can_delete'] && $voter_id == $userdata['user_id']);
3) использую текстовые кнопки, поэтому облагородил (укоротил надпись и добавил title) код, обявляющий $ip/$edit/$delpost/$pm/$profile/$email/$icq и т.д.
На тех, кто использует графические кнопки (в т.ч. subSilver), это не влияет.
4) объединил блоки 'warn' и 'rep' в profile_view_reputation.tpl. Для этого пришлось малость переделать переменную $expire (постить код уже не буду, "Total Commander -> Files -> Compare by content" и все видно)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось ETZel 07.01.2006 11:42, всего редактировалось 2 раза.
IncominG

Сообщение IncominG »

Xpert
Есть моменты где он не прав...
Если человек еще не потрудился посмотреть объявлена переменная или нет а и уже говорит что она не объявлена - о чем тут говорить...
Аватара пользователя
ETZel
phpBB 1.4.3
Сообщения: 93
Стаж: 18 лет 4 месяца
Откуда: Челябинск

Сообщение ETZel »

IncominG
Про неправ: ГДЕ? А могу ошибиться - поправьте и не парьтесь :?
Про дружбу: с тов. Xpert не знаком ни в реале ни виртуально.
Про $poster_id: я же привел код, где она используется ДО объявления. Не в profile.php же она объявлена? Я вставлял там error_reporting(E_ALL) - выводился Notice: undefined var, я вставлял там var_dump($poster_id) - выводился NULL. Мне что, приснилось все это? Покажите пожалуйста, где она объявлена ДО строки

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

if ( $poster_id == ANONYMOUS )
PS. перекачайте democracy_fixes.zip, я первый раз закачал с ошибкой (не убрал совместимость с модом "Always show edited by")
IncominG

Сообщение IncominG »

ETZel писал(а):Можно поподробней? оч любопытно...
Я же вам писал уже...
Млин я мало того твоего поста не заметил да еще пошел твои фиксы ставить ;) блин во дурак ;) Спасибо за перепаковочку только в конце редирект все равно ;)

Добавлено спустя 1 минуту 45 секунд:
ETZel писал(а):Про $poster_id: я же привел код, где она используется ДО объявления. Не в profile.php же она объявлена? Я вставлял там error_reporting(E_ALL) - выводился Notice: undefined var, я вставлял там var_dump($poster_id) - выводился NULL. Мне что, приснилось все это? Покажите пожалуйста, где она объявлена ДО строки
Ой действительно... Убедили... ;)
Как фиксить будем? ;)

Добавлено спустя 15 минут 45 секунд:

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

			else
			{
				$set = REPUTATION_BAN_EXPIRED;
				$sql = 'DELETE FROM ' . BANLIST_TABLE . " 
					WHERE ban_userid = '" . $row['user_id'] . "'"; 
				if ( !$db->sql_query($sql) ) 
				{ 
					message_die(GENERAL_ERROR, "Couldn't obtain banlist information", "", __LINE__, __FILE__, $sql); 
				}
			}
г-н ETZel
вы хотите чтоб было так?
глядя на этот код:

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

			if ( $row['modification'] == REPUTATION_WARNING )
			{
				$set = REPUTATION_WARNING_EXPIRED;
			}
			else
			{
				$set = REPUTATION_BAN_EXPIRED;
				$sql = 'DELETE FROM ' . BANLIST_TABLE . " 
					WHERE ban_userid = '" . $row['user_id'] . "'"; 
				if ( !$db->sql_query($sql) ) 
				{ 
					message_die(GENERAL_ERROR, "Couldn't obtain banlist information", "", __LINE__, __FILE__, $sql); 
				}
			}
			$sql = 'UPDATE ' . REPUTATION_TABLE . '
				SET modification = ' . $set . '
				WHERE id = ' . $row['id'];
			if ( !($result = $db->sql_query($sql)) )
			{
				message_die(GENERAL_ERROR, 'Couldn\'t cancel expired warnings', '', __LINE__, __FILE__, $sql);
			}
Это как минимум не логично
Аватара пользователя
Поручик
Former team member
Сообщения: 3942
Стаж: 18 лет 11 месяцев
Откуда: Оренбург (Южный Урал)
Благодарил (а): 3 раза

Сообщение Поручик »

IncominG писал(а):Че твой дружбан чтоль? Ну дык и вешай объяву типа не обижайте ETZel'я!
kosjak писал(а):IncominG, ты че, дурак
Скажи спасибо, что нашелся человек, досконально изучивший полезный мод.
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции

наш форум http://forum.aeroion.ru/cat1.html
IncominG

Сообщение IncominG »

А при чем тут
Поручик писал(а):kosjak писал(а):
??
Поручик писал(а):Скажи спасибо, что нашелся человек, досконально изучивший полезный мод.
Он тоже ошибается... Вот лучше почитай и сделай замечания...
lusever
phpBB 1.4.2
Сообщения: 66
Стаж: 19 лет 1 месяц

Сообщение lusever »

ETZel, СПАСИБО.
:idea: Но лучше конечно патч файлы. Но пока так изучим.
Аватара пользователя
ETZel
phpBB 1.4.3
Сообщения: 93
Стаж: 18 лет 4 месяца
Откуда: Челябинск

Сообщение ETZel »

IncominG писал(а):г-н ETZel
вы хотите чтоб было так?
глядя на этот код:
Я не совсем понял вопрос. Код может и не очень изячно, но баг исправляет. Главное тут идея (бан надо снять независимо от опций). Предложите, пожалуйста, свой вариант.

Баги с редиректом в usercp_democracy.php

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

#FIND в 2-х местах
		redirect(append_sid("login.$phpEx?redirect=profile.$phpEx&mode=reputation&m=$rep_mode&" . POST_POST_URL . "$post_id", true));
#REPLACE
# не хватает '=' перед $post_id
		redirect(append_sid("login.$phpEx?redirect=profile.$phpEx&mode=reputation&m=$rep_mode&" . POST_POST_URL . "=$post_id", true));

#FIND
		$post_append = "#$review_id";
		redirect(append_sid($redirect, true) . $post_append);
#REPLACE
# косметика
		redirect(append_sid($redirect, true) . "#$review_id");

# решение вопроса о необъявленном $poster_id
#FIND
		if ( $poster_id == ANONYMOUS )
#BEFORE ADD
		$poster_id = $postrow['user_id'];
#FIND
		$poster_id = $postrow['user_id'];
		$poster = ( $poster_id == ANONYMOUS ) ? $lang['Guest'] : $postrow['username'];
#REPLACE
		$poster = ( $poster_id == ANONYMOUS ) ? $lang['Guest'] : $postrow['username'];
Кому нужен patch - пожалуйста (фиксы из этого поста включены):
У вас нет необходимых прав для просмотра вложений в этом сообщении.
IncominG

Сообщение IncominG »

ETZel
Просто как-то нелогично получается :(
варны мы оставляем без изменений, а бан мы снимаем в любом случае... То-ли с мозгами у меня что-то стало то ли еще что... Но я не понимаю зачем?
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

IncominG
Я вам еще раз могу повторить - мое терпение небезгранично. Если вы досконально не изучали код мода, то не надо пытаться что-либо утверждать. Пока вы будете вести себя подобно этому:
Участник - Утверждение 1
Вы - Да ты че ты не прав
Участник - Это доказано следущим: ...
Вы: Не прав сто пудов, не гони волну...
Участник: Смотрите внимательно сюда: ...
Вы: Ой, да, ошибся, ой-ой-ой...
... к вам и отношение будет соотвествующее. Хотя к вам многие пытаются относиться нормально, но вы не можете отрицать что подобную репутацию вы создали себе сами. Вообще, можете с такоми заскоками скоро влететь в бессрочный бан...
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
ETZel
phpBB 1.4.3
Сообщения: 93
Стаж: 18 лет 4 месяца
Откуда: Челябинск

Сообщение ETZel »

IncominG, кусок кода, который вы приводили, с комментариями.

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

else
{
	// стоит опция сохранять истекшие баны/предупреждения

	if ( $row['modification'] == REPUTATION_WARNING )
	{
		// истекло предупреждение - надо сменить его состояние (поле phpbb_reputation.modification)
		// с REPUTATION_WARNING на REPUTATION_WARNING_EXPIRED
		$set = REPUTATION_WARNING_EXPIRED;
	}
	else // $row['modification'] == REPUTATION_BAN
	{
		// если бан - надо сменить REPUTATION_BAN на REPUTATION_BAN_EXPIRED
		$set = REPUTATION_BAN_EXPIRED;
	}
	// собсно, меняем состояние
	$sql = 'UPDATE ' . REPUTATION_TABLE . '
		SET modification = ' . $set . '
		WHERE id = ' . $row['id'];
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Couldn\'t cancel expired warnings', '', __LINE__, __FILE__, $sql);
	}
		
	// ВОПРОС!!! почему не удаляем пользователя из BANLIST_TABLE, хотя бан истек???
	// ОТВЕТ: это баг, если $row['modification'] == REPUTATION_BAN, то надо добавить код удаления юзера из банлиста, что я и сделал выше, в блоке else
}
Больше пояснять ничего не буду. Ваше отношение - это кошмар.
Аватара пользователя
Mr. Anderson
phpBB Guru
phpBB Guru
Сообщения: 7522
Стаж: 20 лет 1 месяц
Откуда: СССР
Благодарил (а): 5 раз
Поблагодарили: 105 раз

Сообщение Mr. Anderson »

IncominG
И после этого ты ждешь к себе хотя бы нормального отношения? Как ты к людям, так и они к тебе, знаешь ли...
Аватара пользователя
ETZel
phpBB 1.4.3
Сообщения: 93
Стаж: 18 лет 4 месяца
Откуда: Челябинск

Сообщение ETZel »

Уж полночь близится, а Carbofos'а все нет :?

К размышлению: блоки 'warn' и 'rep' в profile_view_reputation.tpl, наверное, не стоило объединять. Они по-разному должны выглядеть! (в 'warn' - адский огонь, черти, котлы с кипящей смолой и горящая надпись: позор на 30 суток; а 'rep' можно раскрасить в 2 цвета, в зависимости от направления изменения репутации, как это делает мод для IPB). Может их даже по разным страницам разнести? Мало ли что они на одном движке. С точки зрения юзера - это две разных системы. Мнения?
Аватара пользователя
MadCat_S
phpBB 1.4.2
Сообщения: 60
Стаж: 18 лет 7 месяцев

Сообщение MadCat_S »

ETZel писал(а):К размышлению: блоки 'warn' и 'rep' в profile_view_reputation.tpl, наверное, не стоило объединять
Я тоже так думаю, что их лучше оставить раздельно

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