Возврат Inline Attachments на место после апгрейда до 2.1.

Автор Kira, 01 марта 2022, 21:00:26

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Kira

Скрипт на скорую руку, возвращающий вложения, размещённые в теле сообщения при помощи мода Post and PM Inline Attachments на место после обновления форума до 2.1. Может кому ещё  пригодится.

Инструкция:
0. Сделать бэкап базы.
1. Сохранить код в файл и выложить в корень форума.
2. Запустить или открыть в браузере.
3. Удалить файл.

[spoiler]
<?php/** * @author Kira * @license http://www.wtfpl.net Do What the |censored| You Want to Public License. */require_once 'SSI.php';if (!defined('SMF'))	die('Hacking attempt...');ini_set('error_reporting', E_ALL);ini_set('display_errors', 1);$count=0;$row=true;$srch=array('[attachment','[attachthumb','[attachmini','[attachurl');while ($row){	$request = $smcFunc['db_query']('', 'SELECT `id_msg`,`body` FROM {db_prefix}messages WHERE `body` LIKE \'%[attach%\' AND `body` NOT LIKE \'%[/attach]%\' LIMIT 1');	if ($row = $smcFunc['db_fetch_assoc']($request)){		$id_msg=$row['id_msg'];		$body=$row['body'];		$smcFunc['db_free_result']($request); 		$request = $smcFunc['db_query']('', 'SELECT `id_attach`,`attachment_type`,`filename` FROM {db_prefix}attachments WHERE `id_msg`='.$id_msg.' AND `attachment_type` =0 LIMIT 100');		while ($row1 = $smcFunc['db_fetch_assoc']($request)){			$attchs[]=array($row1['id_attach'],$row1['filename']);		}		$smcFunc['db_free_result']($request);	}	if(isset($attchs)){			$new_body=str_replace($srch,'[attach',$body);		$new_body=preg_replace('/(\[attach id=)(\d+) (msg=)(\d+)/i', '${1}${2}', $new_body);		foreach($attchs as $ila_number => $attach){			$new_body=preg_replace('/(\[attach id=)('.$ila_number.')(.*)(\])/iU', '${1}*'.$attach[0].'${3}${4}'.$attach[1].'[/attach]', $new_body);		}		$new_body=str_replace('[attach id=*','[attach id=',$new_body);		$request = $smcFunc['db_query'](true,'UPDATE {db_prefix}messages SET body = {string:body} WHERE id_msg='.$id_msg,			array('body' => $new_body,)		);		unset($attchs,$new_body);	$count++;	if($count>999) die('Исправлено 1000 тем. Возможно, остались ещё. Обновите страницу.');	}}echo 'Исправлено тем: ',$count;?>
[/spoiler]