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

Update attachment

Все моды, созданные нашим сообществом для phpBB 3.0.x, будут анонсированы тут. Вся техническая поддержка по этим модам оказывается в этом форуме.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
hardlock
phpBB 1.4.0
Сообщения: 37
Стаж: 15 лет 2 месяца
Откуда: zp.ua
Благодарил (а): 1 раз
Поблагодарили: 2 раза
Контактная информация:

Re: Update attachment

Сообщение hardlock »

Предлагаю некоторую модификацию в связи с вот каким глюком - при обновлении вложений меняется их ID в посте.
Например, загружаем 4 картинки (1.gif, 2.gif, 3.gif, 4.gif) и вставляем их в текст сообщения, получаем:

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

[attachment=3]1.gif[/attachment]
[attachment=2]2.gif[/attachment]
[attachment=1]3.gif[/attachment]
[attachment=0]4.gif[/attachment]
Теперь нам понадобилось обновить картинку... допустим 2.gif... После заливки через Update её ID станет "0", т.к. она самая новая по времени, т.е. в посте надо будет исправить:

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

[attachment=3]1.gif[/attachment]
[attachment=0]2.gif[/attachment]
[attachment=2]3.gif[/attachment]
[attachment=1]4.gif[/attachment]
Я только что исправил ИДшники у 56 картинок в посте, т.к. очерёдность ОЧЕНЬ важна. Мне хватило...

Посему немного порывшись в коде нашёл как НЕ менять дату заливки файла, чтобы не менялся порядок следования ИДшников картинок (сортируются они по времени).

Файл includes/message_parser.php
самый большой кусок, добавляемый по инструкции. В нём выкинул строку

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

'filetime'			=> $filedata['filetime'],
и получил в итоге вот такой код:

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

			else if ($update_file && $upload_file)
			{
				include_once($phpbb_root_path . 'includes/functions_admin.' . $phpEx);

				$filedata = upload_attachment($form_name, $forum_id, false, '', $is_message);
				$error = array_merge($error, $filedata['error']);

				$index = array_keys(request_var('update_file', array(0 => 0)));
				$index = (!empty($index)) ? $index[0] : false;
				$filename = $filedata['real_filename'];
	
				if ($index !== false && !empty($this->attachment_data[$index]))
				{
					$sql = 'SELECT attach_id, is_orphan, filesize, physical_filename, thumbnail
						FROM ' . ATTACHMENTS_TABLE . '
						WHERE attach_id = ' . (int) $this->attachment_data[$index]['attach_id'] . '
							AND poster_id = ' . $user->data['user_id'];
					$result = $db->sql_query($sql);
					$row = $db->sql_fetchrow($result);
					$db->sql_freeresult($result);

					if (!sizeof($error))
					{
						$sql_ary = array(
							'physical_filename'	=> $filedata['physical_filename'],
							'attach_comment'	=> $this->filename_data['filecomment'],
							'real_filename'		=> $filedata['real_filename'],
							'extension'			=> $filedata['extension'],
							'mimetype'			=> $filedata['mimetype'],
							'filesize'			=> $filedata['filesize'],
							'thumbnail'			=> $filedata['thumbnail'],
							'in_message'		=> ($is_message) ? 1 : 0,
							'poster_id'			=> $user->data['user_id'],
						);

						$db->sql_query('UPDATE ' . ATTACHMENTS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . ' WHERE attach_id = ' . (int) $this->attachment_data[$index]['attach_id'] );
						
						//Delete old file
						phpbb_unlink($row['physical_filename'], 'file');

						if ($row['thumbnail'])
						{
							phpbb_unlink($row['physical_filename'], 'thumbnail');
						}

						if (!$row['is_orphan'])
						{
							set_config('upload_dir_size', $config['upload_dir_size'] - $row['filesize'] + $filedata['filesize'], true);
						}

						// Refresh attachment data
						$this->attachment_data[$index]['real_filename'] = $filedata['real_filename'];
						$this->attachment_data[$index]['attach_comment'] = ($this->filename_data['filecomment']) ? $this->filename_data['filecomment'] : $this->attachment_data[$index]['attach_comment'];
						$this->message = preg_replace("#\[attachment=$index\](.*?)\[\/attachment\]#e", "'[attachment=$index]' . \$filename . '[/attachment]'", $this->message);
						$this->filename_data['filecomment'] = '';
					}
				}
			}

Теперь при обновлении не меняется поле filetime, соответственно не меняется порядок следования ИД-шников вложений. Вообщем, кому интересно, то принимаем к сведению.
phpbb 3.3.8 / php 7.4.0 / MySQL(i) 5.5.42 / FreeBSD 11.2
Аватара пользователя
Andrew O
phpBB 1.4.2
Сообщения: 53
Стаж: 15 лет 11 месяцев
Откуда: с родины А.И. Родимцева
Благодарил (а): 2 раза
Контактная информация:

Re: Update attachment

Сообщение Andrew O »

rxu писал(а):А если нажать кнопку "Добавить файл", выпадет какая-то форма для закачки?
Насколько я помню phpBB3, есть поле имени файла, рядом с которым кнопка выбора этого имени. Выбираете с её помощью нужный файл для закачки, а потом жмёте кнопку того вложения, которое вы хотите обновить выбранным файлом.
Надеюсь, понятно объяснил :)
спасибо за пояснение, а то не понятно поначалу как работает мод :)
mediland
phpBB 1.4.0
Сообщения: 39
Стаж: 12 лет 5 месяцев
Контактная информация:

Re: Update attachment

Сообщение mediland »

У меня phpBB 3.0.9

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

Нужно ли мне устанавливать для phpBB 3.0.9 "Recent topics for phpBB3" или в 3.0.9 это уже реализовано?
Shredder
Former team member
Сообщения: 2217
Стаж: 15 лет 3 месяца
Благодарил (а): 236 раз
Поблагодарили: 561 раз
Контактная информация:

Re: Update attachment

Сообщение Shredder »

mediland
Не реализовано, нужно устанавливать.
mediland
phpBB 1.4.0
Сообщения: 39
Стаж: 12 лет 5 месяцев
Контактная информация:

Re: Update attachment

Сообщение mediland »

Я установил, но кнопка "обновить вложение" появляется только для стилей "prosilver" и "subsilver 2". Для "prosilver SE" не появляется! Вообще-то в "prosilver SE" нет файла template/posting_editor.html, он по идее тянется из "prosilver".

Если скопировать template/posting_editor.html из "prosilver" в "prosilver SE" - ничего не получается.
Shredder
Former team member
Сообщения: 2217
Стаж: 15 лет 3 месяца
Благодарил (а): 236 раз
Поблагодарили: 561 раз
Контактная информация:

Re: Update attachment

Сообщение Shredder »

Обнаружил баг с невозможностью перезалить вложение в ЛС. Для исправления:

includes/ucp/ucp_pm_compose.php
Найти:

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

	$refresh	= isset($_POST['add_file']) || isset($_POST['delete_file']) || $save || $load
Найти в строке:

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

isset($_POST['add_file'])
Добавить после:

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

 || isset($_POST['update_file'])
Закрыто

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