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

phpBB < 2.0.18 [FIX][RC] Prune bugs in phpBB

Здесь авторы постили бета-версии своих модификаций для phpBB 2.0.x. Внимание! Не устанавливайте бета-версии модов на работающие форумы!
Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Стаж: 19 лет 6 месяцев
Откуда: оттуда

phpBB < 2.0.18 [FIX][RC] Prune bugs in phpBB

Сообщение Егор Наклоняев »

Навеяно
http://www.phpbbguru.net/community/viewtopic.php?t=1723

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

##############################################################
## MOD Title: Fix prune bugs
## MOD Author: chyduskam < chuduskam@debilarius.ru > (Egor Naklonyaeff) N/A
## MOD Description: Fix stupid SQL in prune.php
## MOD Version: 0.0.1
##
## Installation Level: Easy
## Installation Time: 2 Minutes
## Files To Edit: 1
##    includes/prune.php
##    Included Files: n/a
##############################################################
## For Security Purposes, Please Check: http://www.phpbbguru.net/mods/ for the
## latest version of this MOD. Downloading this MOD from other sites could cause malicious code
## to enter into your phpBB Forum. As such, phpBB will not offer support for MOD's not offered
## in our MOD-Database, located at: http://www.phpbbguru.net/mods/
##############################################################
## Author Notes: I'm too lazy to write something
##############################################################
## MOD History:
##   2005-04-08 - Version 0.0.1
##      - initial release
##############################################################
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
##############################################################

#
#-----[ OPEN ]-------------------------------------------------------
#
includes/prune.php

#
#-----[ FIND ]----------------------------------------
#
	global $db, $lang;

	$prune_all = ($prune_all) ? '' : 'AND t.topic_vote = 0 AND t.topic_type <> ' . POST_ANNOUNCE;
	//
	// Those without polls and announcements ... unless told otherwise!
	//
	$sql = "SELECT t.topic_id
		FROM " . POSTS_TABLE . " p, " . TOPICS_TABLE . " t
		WHERE t.forum_id = $forum_id
			$prune_all
			AND ( p.post_id = t.topic_last_post_id
				OR t.topic_last_post_id = 0 )";
	if ( $prune_date != '' )
	{
		$sql .= " AND p.post_time < $prune_date";
	}

	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not obtain lists of topics to prune', '', __LINE__, __FILE__, $sql);
	}

	$sql_topics = '';
	while( $row = $db->sql_fetchrow($result) )
	{
		$sql_topics .= ( ( $sql_topics != '' ) ? ', ' : '' ) . $row['topic_id'];
	}
	$db->sql_freeresult($result);

#
#-----[ REPLACE WITH ]----------------------------------
#
	global $db, $lang;

	$prune_all = ($prune_all) ? '' : 'AND t.topic_vote = 0 AND t.topic_type <> ' . POST_ANNOUNCE;
	$sql_prune_data=( $prune_date != '' )? "AND p.post_time < $prune_date":'';
	//
	// Those without polls and announcements ... unless told otherwise!
	//
	$sql = "SELECT t.topic_id
		FROM " . POSTS_TABLE . " p, " . TOPICS_TABLE . " t
		WHERE t.forum_id = $forum_id
			$prune_all
            $sql_prune_data
			AND p.post_id = t.topic_last_post_id";
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not obtain lists of topics to prune', '', __LINE__, __FILE__, $sql);
	}

	$sql_topics = '';
	while( $row = $db->sql_fetchrow($result) )
	{
		$sql_topics .= ( ( $sql_topics != '' ) ? ', ' : '' ) . $row['topic_id'];
	}
	$db->sql_freeresult($result);
// Fix stupid bug
	$sql = "SELECT t.topic_id
		FROM " . TOPICS_TABLE . " t
		WHERE t.forum_id = $forum_id
		$prune_all
		AND t.topic_last_post_id = 0";
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not obtain lists of topics to prune', '', __LINE__, __FILE__, $sql);
	}
	while( $row = $db->sql_fetchrow($result) )
	{
		$sql_topics .= ( ( $sql_topics != '' ) ? ', ' : '' ) . $row['topic_id'];
	}
	$db->sql_freeresult($result);


#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM
Аватара пользователя
Сергей Секирин
phpBB 2.0.0
Сообщения: 244
Стаж: 19 лет 2 месяца

Сообщение Сергей Секирин »

Эх понять бы точнее, что это исправляет - в смысле - не на специальном языке, понятном посвящённым :-)
Апология здравомыслия - странное занятие Православия:-)
Аватара пользователя
Rick
phpBB 1.4.2
Сообщения: 63
Стаж: 19 лет 5 месяцев

Сообщение Rick »

Устраняет откровенные ляпы в ф-ции работы prune форума.

У меня другой вопрос к автору мода. Вы отправляете Ваши справления в phpbb.com? Хочется знать, будут ли исправлены ляпы в официальных релизах или все же нужно самому следить за всем?
Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Стаж: 19 лет 6 месяцев
Откуда: оттуда

Сообщение Егор Наклоняев »

Сергей Секирин

Поясняю. Запрос

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

$sql = "SELECT t.topic_id
      FROM " . POSTS_TABLE . " p, " . TOPICS_TABLE . " t
      WHERE t.forum_id = $forum_id
         $prune_all
         AND ( p.post_id = t.topic_last_post_id
            OR t.topic_last_post_id = 0 )";
Сделан некорректно, т.к. использивание OR, во первых, исключает нормальное использование индексов, а во вторых создаёт выборку из несвязанных таблиц, вида

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

$sql = "SELECT t.topic_id
      FROM " . POSTS_TABLE . " p, " . TOPICS_TABLE . " t
      WHERE t.forum_id = $forum_id
         $prune_all
         AND t.topic_last_post_id = 0 ";
Обратите внимание, этот запрос не описывает связи между таблицами POSTS_TABLE и TOPICS_TABLE. По количетсву записей, необходимых для выподнения этого запроса отсылаю Вас к примеру из ссылки в первом сообщении этой темы.

Rick
Поясняю,. phpBB не принимает претензий по ляпам в версии 2.0.13 не ияющие на безопасность. Я публиковал в модах свою фиксацию удаления пользователей. она особо никому была не нужна, посему попросил Xpert собрать всё до кучи и послать руководителям проекта.
Я постоянно исправляю свой форум, практически код каждой страницы подвергнут оптимизации, другой вопрос, что публикую я исправление только откровенных ляпов. Поэтому ждело Ваше - исправлять или нет...
Аватара пользователя
Rick
phpBB 1.4.2
Сообщения: 63
Стаж: 19 лет 5 месяцев

Сообщение Rick »

Егор Наклоняев
Будем надеяться, что авторы форума проделывают такую же кропотливую работу по устранению багов, что и Вы. Спасибо за Ваши моды!
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 19 лет 5 месяцев
Поблагодарили: 1 раз

Сообщение VVVas »

Егор Наклоняев
Спасибо.
я люблю daft punk | новый sugoi.ru

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