Возврат 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]