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

Advanced Posts Merging

Все моды, созданные нашим сообществом для phpBB 2.0.x, анонсированы тут.
Аватара пользователя
IGO
phpBB 2.0.1
Сообщения: 297
Стаж: 21 год 6 месяцев

Сообщение IGO »

1) Установил.
2) Ошибок не выдаёт.
3) При запуске файла advanced_posts_merging_db_ins.php

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

Advanced Posts Merging DB Update
Installation failed: Duplicate entry 'time_to_merge' for key 1
4) Как правильно нужно выставлять время в админке? :?

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

Нет, а теперь вроде склеил...
Но вот с установкой времени, думаю стоит разобраться..
IGO писал(а):4) Как правильно нужно выставлять время в админке? Confused
Терпение и труд - всё перетрут
Я на этом форуме уже чуть больше года.. спасибо вам за помощь!
Аватара пользователя
Гога
phpBB 2.0.0
Сообщения: 220
Стаж: 21 год 5 месяцев
Откуда: Архангельск

Сообщение Гога »

По моему скромному мнению, надо добавить проверку размера предыдущего сообщения, и, если оно превосходит определённое значение, то не склеивать с ним, чтобы не получались монстрообразные посты.
Гугл рулит. Я люблю ЛОР.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 22 года 7 месяцев
Поблагодарили: 2 раза

Сообщение Xpert »

IGO
3. Все ок. Есть SQL в файле, а есть скрипт который добавляет поля и выполняет команды. Вы попытались воспользоваться и тем и тем.
4. Новые опции, которые создает мод в Конфигурации вроде прекрасно документированы... Время склейки - в часах, флуд-контроль склейки - в секундах.

Гога
Очень может быть. Но так неохота выделять под это отдельную настройку и поле в БД. Просто в коде да в виде addon - пожалуйста, тут банальный strlen().

Добавлено спустя 2 минуты 8 секунд:
IGO писал(а):А количество постов у пользователей измениться?
Никак. Остается прежним.
Гога писал(а):А как быть с ограничением числа вложений в одном сообщении?
Пока никак... не действует оно в случае с модом. А дальше посмотрим...
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Гога
phpBB 2.0.0
Сообщения: 220
Стаж: 21 год 5 месяцев
Откуда: Архангельск

Сообщение Гога »

Вот нашёл-таки ещё одного таракана :)

Как оно выглядит:
Есть сообщение от 21.08.2005 Вс, 00:35
в нему спустя 6 дней 12 часов 9 минут 20 секунд добавлено ещё.
В этом же форуме (в другой теме) есть сообщение от 21.08.2005 Вс, 15:58
Обращаю внимание: первое сообщение с добавкой новее второго.

Далее, 28.08.2005 создаётся ещё одно сообщение в этом форуме (в другой, уже третьей теме, которая и до этого существовала). Затем оно удаляется.

В итоге на главной странице в этом форуме показывается самое новое сообщение -- второе (от 21.08.2005 Вс, 15:58), а в списке тем этого форума всё правильно -- первое (от 21.08.2005 Вс, 00:35 с добавкой). А должно на главной странице отображаться первое (21.08.2005 Вс, 00:35 с добавкой) сообщение, как самое новое -- так и было до начала описанных манипуляций.

Как оно работает (IMHO)
При удалении сообщения вызывается функция update_post_stats() (includes/functions_post.php).
В ней (ещё не понял где именно) ищется самый свежий пост (last_post_id), но не по времени, а по номеру (post_id).
А надо бы по времени (post_time).

Я пока своими кривыми руками не полезу, а подумаю...

Добавлено спустя 24 минуты 56 секунд:

Скорее всего здесь:

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

			if ($post_data['last_topic'])
			{
				$sql = "SELECT MAX(post_id) AS last_post_id
					FROM " . POSTS_TABLE . "
					WHERE forum_id = $forum_id";
				if (!($result = $db->sql_query($sql)))
				{
					message_die(GENERAL_ERROR, 'Error in deleting post', '', __LINE__, __FILE__, $sql);
				}

				if ($row = $db->sql_fetchrow($result))
				{
					$forum_update_sql .= ($row['last_post_id']) ? ', forum_last_post_id = ' . $row['last_post_id'] : ', forum_last_post_id = 0';
				}
			}
Добавлено спустя 18 минут 17 секунд:

А вот и решение предлагаю:
заменить

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

				$sql = "SELECT MAX(post_id) AS last_post_id
					FROM " . POSTS_TABLE . "
					WHERE forum_id = $forum_id";
на

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

				$sql = "SELECT post_id AS last_post_id
					FROM " . POSTS_TABLE . "
					WHERE forum_id = $forum_id
					ORDER BY post_time DESC
					LIMIT 1";
Чуть выше (для тем) такой ошибки быть не должно, т.к. последний пост в теме является последним и по времени, и по номеру:

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

				$topic_update_sql .= 'topic_replies = topic_replies - 1';

				$sql = "SELECT MAX(post_id) AS last_post_id
					FROM " . POSTS_TABLE . "
					WHERE topic_id = $topic_id";
				if (!($result = $db->sql_query($sql)))
				{
					message_die(GENERAL_ERROR, 'Error in deleting post', '', __LINE__, __FILE__, $sql);
				}

				if ($row = $db->sql_fetchrow($result))
				{
					$topic_update_sql .= ', topic_last_post_id = ' . $row['last_post_id'];
				}
Добавлено спустя 1 час 36 секунд:

А вот теперь осмысленно: самое свежее сообщение в форуме (№ forum_id) может иметь не самый верхний номер, так как Advanced Posts Merging, "подпинывая" время сообщения, оставляет его номер неизменным, а до момента объединения в том же самом форуме, но в другой его теме, может появиться новое сообщение с большим номером. Функция update_post_stats() всегда считает, что самое свежее сообщение в форуме имеет наибольший номер, и в этом её надо разубедить. :)

А самое свежее сообщение в теме (№ topic_id) всегда имеет самый высокий номер, даже при слиянии.

Добавлено спустя 9 часов 19 минут 44 секунды:

Ещё момент -- файл includes/functions_admin.php

Заменить:

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

		case 'forum':
			$sql = "SELECT MAX(post_id) AS last_post, COUNT(post_id) AS total
				FROM " . POSTS_TABLE . "
				WHERE forum_id = $id";
			if ( !($result = $db->sql_query($sql)) )
			{
				message_die(GENERAL_ERROR, 'Could not get post ID', '', __LINE__, __FILE__, $sql);
			}

			if ( $row = $db->sql_fetchrow($result) )
			{
				$last_post = ( $row['last_post'] ) ? $row['last_post'] : 0;
				$total_posts = ($row['total']) ? $row['total'] : 0;
			}
			else
			{
				$last_post = 0;
				$total_posts = 0;
			}
На:

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

		case 'forum':
			$sql = "SELECT post_id AS last_post
				FROM " . POSTS_TABLE . "
				WHERE forum_id = $id
				ORDER BY post_time DESC
				LIMIT 1";
			if ( !($result = $db->sql_query($sql)) )
			{
				message_die(GENERAL_ERROR, 'Could not get post ID', '', __LINE__, __FILE__, $sql);
			}

			if ( $row = $db->sql_fetchrow($result) )
			{
				$last_post = ( $row['last_post'] ) ? $row['last_post'] : 0;
			}
			else
			{
				$last_post = 0;
			}

			$sql = "SELECT COUNT(post_id) AS total
				FROM " . POSTS_TABLE . "
				WHERE forum_id = $id";
			if ( !($result = $db->sql_query($sql)) )
			{
				message_die(GENERAL_ERROR, 'Could not get total posts', '', __LINE__, __FILE__, $sql);
			}

			if ( $row = $db->sql_fetchrow($result) )
			{
				$total_posts = ($row['total']) ? $row['total'] : 0;
			}
			else
			{
				$total_posts = 0;
			}
Добавлено спустя 1 минуту 56 секунд:

Я не в курсе, может и одним запросом можно обойтись -- у меня не получилось, но эта функция используется редко, но она полезная -- синхронизация форумов.
Гугл рулит. Я люблю ЛОР.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
Diver
phpBB 1.2.0
Сообщения: 15
Стаж: 21 год 1 месяц
Откуда: 25 RUS

Сообщение Diver »

Товарищи, не понимаю для чего нужен
no_msg_at_certain_forums.
Disables merging message at certain forums. перевел как Отключение склеивания мессяг в определенных форумах. Поставил после основного мода. и в чем разница?
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 22 года 7 месяцев
Поблагодарили: 2 раза

Сообщение Xpert »

Как перевели, так и работает. id форума в котором склейка прекращает работать жестко прописан в коде, вроде это 5.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Diver
phpBB 1.2.0
Сообщения: 15
Стаж: 21 год 1 месяц
Откуда: 25 RUS

Сообщение Diver »

А id форума это где?
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 21 год 11 месяцев
Поблагодарили: 13 раз

Сообщение VVVas »

Diver писал(а):id форума это где?

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

if ( $forum_id != 5)
я люблю daft punk | новый sugoi.ru
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 22 года 7 месяцев
Поблагодарили: 2 раза

Сообщение Xpert »

Сори, ошибся сам с функциональностью. Сообщения склеиваются, но фраза "Добавлено спустя..." не добавляется.

По поводу id. Наведите мышь на ссылку на форум и увидите в ссылке что-то вроде f=43. 43 и есть внутренний номер форума.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Diver
phpBB 1.2.0
Сообщения: 15
Стаж: 21 год 1 месяц
Откуда: 25 RUS

Сообщение Diver »

нуу это я видел что если ид форума = 5 то работает. а как мне на форуме увидеть работу?

Добавлено спустя 56 секунд:

а. щас посмотрим

Добавлено спустя 3 минуты 48 секунд:

хм. а оно у меня правильно работает?
исходное сообщение было Один, потом ответил на тему словом Два. сообщение получилось ОдинДва, если отвечу словом Три, получится ОдинДваТри. Так?
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 22 года 7 месяцев
Поблагодарили: 2 раза

Сообщение Xpert »

Да.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
severnet
phpBB 2.0.5
Сообщения: 490
Стаж: 21 год 10 месяцев
Откуда: Санкт-Петербург

Сообщение severnet »

Could not insert data into users table

DEBUG MODE

INSERT INTO phpbb_users (user_id, username, user_regdate, user_password, user_email, user_icq, user_website, user_occ, user_from, user_interests, user_sig, user_sig_bbcode_uid, user_avatar, user_avatar_type, user_viewemail, user_aim, user_yim, user_msnm, user_attachsig, user_allowsmile, user_allowhtml, user_allowbbcode, user_allow_viewonline, user_notify, user_notify_pm, user_popup_pm, user_timezone, user_dateformat, user_lang, user_style, user_level, user_allow_pm, user_birthday, user_next_birthday_greeting, user_active, user_actkey) VALUES (482, 'Test', 1126967155, '202cb962ac59075b964b07152d234b70', 'rks@mail.wplus.net', '', '', '', '', '', '', '', '', 0, 0, '', '', '', 1, 1, 0, 1, 1, 0, 1, 1, 4, 'd M Y, D H:i', 'russian', 2, user_gender, 0, 1, '999999', '', 1, '')

Line : 672
File : usercp_register.php
Нужна помощь. :cry:

Добавлено спустя 33 минуты 27 секунд:

Не пойму, до этого все работало, а теперь нет. В чем может быть проблема?

Значение SQL добавлял запросом:
INSERT INTO phpbb_config (config_name, config_value) VALUES('time_to_merge', 0);
INSERT INTO phpbb_config (config_name, config_value) VALUES('merge_flood_interval', 0);
ALTER TABLE phpbb_posts ADD post_created INT(11) DEFAULT '0' NOT NULL AFTER post_time;
UPDATE phpbb_posts SET post_created = post_time;
Когда увидел ошибку в регистрации решил проинсталлировать скриптом advanced_posts_merging_db_ins.php, но выдает:
Advanced Posts Merging DB Update
Installation failed: Duplicate entry 'time_to_merge' for key 1
Добавлено спустя 1 минуту 31 секунду:

Кстати, слеивается все отлично, но вот регистрация не работает. :cry:
Изображение
Аватара пользователя
Coagulant
Former team member
Сообщения: 955
Стаж: 21 год 9 месяцев
Откуда: Москва

Сообщение Coagulant »

severnet писал(а):Нужна помощь.
Ошиблись при установке Gender Mod, а именно в файле usercp_register.php. APM тут совершенно не при чём.
severnet писал(а):Когда увидел ошибку в регистрации решил проинсталлировать скриптом advanced_posts_merging_db_ins.php
advanced_posts_merging_db_ins.php выполняет те же самые SQL-запросы, что вы уже сделали, нет нужды выполнять запросы вручную и запускать скрипт. Достаточно чего-то одного.
Аватара пользователя
severnet
phpBB 2.0.5
Сообщения: 490
Стаж: 21 год 10 месяцев
Откуда: Санкт-Петербург

Сообщение severnet »

Coagulant, не могу найти:

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

#-----[ FIND ]------------------------------------------------ 
# 
$sql = "INSERT INTO " . USERS_TABLE . "
VALUES

# 
#-----[ IN-LINE FIND ]---------------------------------------- 
# 
, user_style

# 
#-----[ IN-LINE AFTER, ADD ]---------------------------------- 
# 
, user_gender
в строке файла usercp_register.php:

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

$sql = "INSERT INTO " . USERS_TABLE . "	(user_id, username, user_regdate, user_password, user_email, user_icq, user_website, user_occ, user_from, user_interests, user_sig, user_sig_bbcode_uid, user_avatar, user_avatar_type, user_viewemail, user_aim, user_yim, user_msnm, user_attachsig, user_allowsmile, user_allowhtml, user_allowbbcode, user_allow_viewonline, user_notify, user_notify_pm, user_popup_pm, user_timezone, user_dateformat, user_lang, user_style, user_level, user_allow_pm, user_birthday, user_next_birthday_greeting, user_active, user_actkey)
				VALUES ($user_id, '" . str_replace("\'", "''", $username) . "', " . time() . ", '" . str_replace("\'", "''", $new_password) . "', '" . str_replace("\'", "''", $email) . "', '" . str_replace("\'", "''", $icq) . "', '" . str_replace("\'", "''", $website) . "', '" . str_replace("\'", "''", $occupation) . "', '" . str_replace("\'", "''", $location) . "', '" . str_replace("\'", "''", $interests) . "', '" . str_replace("\'", "''", $signature) . "', '$signature_bbcode_uid', $avatar_sql, $viewemail, '" . str_replace("\'", "''", str_replace(' ', '+', $aim)) . "', '" . str_replace("\'", "''", $yim) . "', '" . str_replace("\'", "''", $msn) . "', $attachsig, $allowsmilies, $allowhtml, $allowbbcode, $allowviewonline, $notifyreply, $notifypm, $popup_pm, $user_timezone, '" . str_replace("\'", "''", $user_dateformat) . "', '" . str_replace("\'", "''", $user_lang) . "', $user_style, '$gender', 0, 1, '$birthday', '$next_birthday_greeting', ";
Добавлено спустя 21 минуту 14 секунд:

Coagulant, всё нашел и исправил. Работает.

Добавлено спустя 1 час 26 минут 37 секунд:

Кстати, как интегрировать проверку сообщения Message too short для Extended Quick Reply Form?
Изображение
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 21 год 9 месяцев
Откуда: Novosibirsk,RU

Сообщение [R: R@m$e$ :U] »

severnet
Кстати, как интегрировать проверку сообщения Message too short для Extended Quick Reply Form?
а может склонимся к соответствующим топикам?
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y

Вернуться в «Анонсы и поддержка модов для phpBB 2.0.x»