Нужен конвертер с LB на XenForo

ИХМО, лишним не будет :-)
PHP:
<?php

$db_host = 'localhost';
$db_name = 'имя_базы';
$db_username = 'юзер';
$db_password = 'пароль';
 
$conn = new mysqli($db_host, $db_username, $db_password, $db_name);
 
  if ($conn->connect_error) {
    die("Ошибка: не удается подключиться: " . $conn->connect_error);
  }
 
  echo 'Подключение к базе данных.<br>';
 
  $conn->set_charset("utf8");

 
  //исходя из количества постов в базе
  $id_now = 156000;

    $results = $conn->query("SELECT post_id, message FROM xf_post_now WHERE post_id<'$id_now'");

    // print '<table border="1">';
    while($row = $results->fetch_assoc())
    {
        //print '<tr>';
       // print '<td>'.$row["post_id"].'</td>';
      //  print '<td>'.$row["username"].'</td>';
        
        $txt        =  $row["message"];

        $txt_new    =  str_replace(  "<strong>",  "[B]",  $txt  );
        $txt_new    =  str_replace(  "</strong>",  "[/B]",  $txt_new  );
        $txt_new    =  str_replace(  '<blockquote class="blockquote"><p><span class="titlequote">',  "",  $txt_new  );   
        $txt_new    =  str_replace(  '<div class="block_quote"><span class="block_titlequote">',  "",  $txt_new  );                   

        $txt_new    =  str_replace(  '</span><span class="textquote">',  "[QUOTE]",  $txt_new  );

        
        $txt_new    =  str_replace(  '</span><span class="block_textquote">',  "[QUOTE]",  $txt_new  );



        $txt_new    =  str_replace(  '</span></p></blockquote><!--quote -->',  "[/QUOTE]",  $txt_new  );

        $txt_new    =  str_replace(  '</span></div><!--quote --><br /><br />',  "[/QUOTE]",  $txt_new  );


        $txt_new    =  str_replace(  '</span></div><!--quote -->',  "[/QUOTE]",  $txt_new  );
        


        $txt_new    =  str_replace(  "<!--br--><br />",  "\n",  $txt_new  );

        $txt_new    =  str_replace(  "<i>",  "[I]",  $txt_new  );

        $txt_new    =  str_replace(  "</i>",  "[/I]",  $txt_new  );

        $txt_new    =  str_replace(  "<s>",  "[S]",  $txt_new  );

        $txt_new    =  str_replace(  "</s>",  "[/S]",  $txt_new  );

        $txt_new    =  str_replace(  "<br />",  "\n",  $txt_new  );
                            
        $txt_new    =  str_replace(  '/undefined',  "",  $txt_new  );   

        $txt_new    =  str_replace(  '&quot;',  '"',  $txt_new  );
        
        $re = '/<img id=\'smiles_img\' src=\'.TEMPLATE..bbcode.smiles.....gif\'..>/ui';

        $txt_new = preg_replace($re, "", $txt_new);
        
        $re = '/<img class=\'.+\' src=\'.+\/>/ui';
        $txt_new = preg_replace($re, "", $txt_new);


        $re = '/.color=................./ui';
        $txt_new = preg_replace($re, "", $txt_new);

        $re = '/..color:........./ui';
        $txt_new = preg_replace($re, "", $txt_new);

        $re = '/<object width="..." height="..."><param name="....." value="https:..youtube.com.v./ui';
        $txt_new = preg_replace($re, "[MEDIA=youtube]", $txt_new);

        $re = '/<embed.+<\/embed>/ui';
        $txt_new = preg_replace($re, "", $txt_new);

        $re = '/\?fs=1"><.+<\/object>/ui';
        $txt_new = preg_replace($re, "[/MEDIA]", $txt_new);



        $re = '/<iframe.+\/\/youtube.com\/embed\//ui';
        $txt_new = preg_replace($re, "[MEDIA=youtube]", $txt_new);

        $re = '/" frameborder=.+<\/iframe>/ui';
        $txt_new = preg_replace($re, "[/MEDIA]", $txt_new);


        $re = '/<a href=".+<\/a>/ui';
        $txt_new = preg_replace($re, "", $txt_new);

        $re = '/<div class="block_quote"><span class="block_titlequote" data-pid="[0-9]{4,7}">/ui';
        $txt_new = preg_replace($re, "", $txt_new);

        $re = '/\(<a href=".+<\/a>\)/ui';
        $txt_new = preg_replace($re, "", $txt_new);


        $re = '/<blockquote class="blockspoiler">.+;">/ui';
        $txt_new = preg_replace($re, "", $txt_new);

        $re = '/<\/a><\/span>.+class="textspoiler">/ui';
        $txt_new = preg_replace($re, "\n", $txt_new);

        $re = '/<blockquote class="blockspoiler"><span class="titlespoiler"><a.+return false;">/ui';
        $txt_new = preg_replace($re, "", $txt_new);

        $re = '/<\/a><\/span><div.+class="textspoiler">/ui';
        $txt_new = preg_replace($re, "\n", $txt_new);

        $re = '/\[attachment=[0-9]{2,6}\]/ui';
        $txt_new = preg_replace($re, "\n", $txt_new);


        $txt_new    =  str_replace(  '</div></blockquote><!--spoiler -->',  "",  $txt_new  );
        

 

        $post_id = $row["post_id"];

         //$update_query = $conn->query("UPDATE 'xf_post' SET 'message' = '$txt_new' WHERE 'post_id' = '$post_id'");
        
         $statement = $conn->prepare("UPDATE xf_post_now SET message=? WHERE post_id=?");

        //bind parameters for markers, where (s = string, i = integer, d = double,  b = blob)
        $statement->bind_param('si', $txt_new, $post_id);

        $resultat =  $statement->execute();

        if($results){
            print 'Success! record updated<br>';
        }else{
            print 'Error : ('. $mysqli->errno .') '. $mysqli->error;
        }
         //$update_query->close();

        //print '<td>'.$txt_new.'</td>';
        //print '<td>'.$row["message_state"].'</td>';
        //print $row["post_id"].'<br>';
    }
    //print '</table>';


  echo "Количество строк: $results->num_rows";
 
  $results->close();
  

  $conn->close();





?>
ПОнятно ,что регулярные выражения под себя.
Мы раза три запускали, потому что оказались следы двух или трёх форумов и разных модификаций :)
Запускали скрипт на тестовом форуме, добавляли регулярки, пока не отладили, вроде не было больше проблем.
Затем уже на рабочем.

Продублирую из лички.
Для полноты картины, последовательности действий.

Поставил новый форум в папке /forum2, с новой базой.
До этого - уже подкидывал через SMF и затем штатным конвертером Xen те же таблицы, и видно было - что нужно для функционирования.
Сохранял в формате CSV. Именно чтобы вручную переносить. Было бы больше знаний -можно было и запросом к базе, но я не был уверен в себе :)
Сначала экспорт в этом формате, с заголовками, затем импорт в целевую таблицу. Я на всякий случай сначала дублировал целевую таблицу, чистую, без данных - если что пойдёт не так - чтобы можно было откатиться без проблем, и повторить.
При импорте - сопоставлял по названиям полей, многие как ни странно были даже на тех же местах.
Ну id и user_id , даты первого поста, редактирования, и так далее.
Очерёдность - сначала юзеров перенёс, обновил кеши, посмотрел их статистику - соответствует тому, что на старом.
Затем ноды и треды. Вроде сначала йоды, но не принципиально имхо - обновлял кеши после этого сдвоенного импорта.
Затем уже посты. Их просто много было, но собственно работа с полями заняла не больше времени.
Снова обновил кеши.
А, ещё момент!
У меня был глюк, с очерёдностью категорий-разделов!
Ранее , поскольку несколько раз переезжал и темы перекидывал туда-сюда, и создавал разные подразделы - была путаница в разделах, их было восемь с номерами от 1 до 26. Так не подхватились!
Создал в админке пустые разделы , 26 штук, а затем уже лишние убрал. Явно можно проще, но я не знал как :)
И ещё. НЕ сразу вспомнил - xf_user_authenticate - тоже пришлось вручную тащить. Первый раз, когда через SMF конвертировал - этого было не нужно почему-то. Вручную - по той же схеме перебросил, и юзеры появились в полном объёме.
Вроде ни одного поста не потерял.
На тестовом форуме сначала были потери в числе тем и сообщений, я решил, что лучше переделаю :)

Это основное в переносе.
Затем скриптом прошлись - убрали старые смайлики с PhpBBи так далее, BBкоды старые и прочее.
Смайлики - <img id=‘smiles_img’ src=‘{TEMPLATE}/bbcode/smiles/002.gif’ />
Сын делал из дома, я сам скрипт ещё не разбирал.
Но явно запросы делал скриптом, скрипт просто в директории сайта запускал. Пришлось увеличивать память и время исполнения в php.ini - тяжёлый скрипт, таблица постов 187мб, 127тыс строк.

Примерно так :)

Скрипт приложил выше, под спойлером.
 
Grammy, так не делается :) Ладно посмотрим если чуть позже на нормальный скрипт средствами XF
 
Grammy, так не делается :-) Ладно посмотрим если чуть позже на нормальный скрипт средствами XF
Я согласен, что не делается :)
Я просто опередил того, кого попросил помочь. И уже перенёс вручную.
Ему осталось лишь почистить мусор.
Скрипт для очистки нормально сработал.
Очень уж мне хотелось поскорее, сори :)
 
Зря опять скачал это ущербство...
Главное пароль 6 символов, а как скрывать так нет чудо...
 
Зря опять скачал это ущербство...
Главное пароль 6 символов, а как скрывать так нет чудо...
В смысле чудо? LB? Или скрипт?
В LB пароль скрывается ,точно. И логиниться можно принудительно _только_ через почту, а не логин.
ИМХО это неплохо.
Снимок экрана 2017-07-09 в 21.15.50.png
Вот у меня.

Было, в смысле, на старом :)
 
Это при установке?
Я - про уже установленный форум.
На уже установленном скрывается, я приложил скриншот.
Вот на оф.форуме поддержки:
Тоже скрывается, вполне.
Снимок экрана 2017-07-09 в 21.20.14.png
 
Да при установке
 
Да при установке
Тогда да, показывается. Я тут не вижу криминала, сорри - я ставил форум лет пять назад, однажды - и показ пароля был тогда явно не критичен.
А вот на работающем - скрывает вполне честно.
Не было ни одного взлома, тьфу*3, хотя попытки стука в админку - есть.
 
Я вот только одного не понял . Тс что хочет отдельный скрипт для конвертации базы данных, или в виде дополнения? Если первое то немного посидеть и сделать не проблемма а вот второе уже сложней.
p.s. Над сделать для прикола просто .
 
Последнее редактирование:
Я вот только одного не понял . Тс что хочет отдельный скрипт для конвертации базы данных, или в виде дополнения? Если первое то немного посидеть и сделать не проблемма а вот второе уже сложней.
p.s. Над сделать для прикола просто .
Для меня лично - "хоть чучелом, хоть тушкой" - лишь бы реализовать задачу :)
То есть - вполне годится отдельный скрипт, имхо.
LB - не такой распространённый движок, чтобы делать специально дополнение, встраивать его. Я попытался так, сначала в варианте SMF Merge сделать. Наивно подумал, что главное, чтобы как-то перенести на промежуточную станцию SMF, а затем уже оттуда XenForo возьмёт что надо, сам.
В принципе получилось, кстати. Но - я не все структуры сразу понял, на момент адаптации Merge System.
А когда понял - даже скрипт не стал писать, там быстро всё по сути даже руками перекинуть оказалось, в Sequel Pro.

Если сделаете скрипт - довольно много людей скажет спасибо, имхо :)
Я тоже! :)
 
Grammy, Я наверное позже отпишусь об успехах всего. Ибо на работе пока что нет возможности что то вообще делать.
 
Grammy, Я наверное позже отпишусь об успехах всего. Ибо на работе пока что нет возможности что то вообще делать.
Спасибо!
Спешки точно нет, решение ведь наверняка возможно, и сроки при глобальном переходе - не критичны! :)
ИМХО :)
Я тоже сейчас работаю, может быть к вечеру или завтра получится соорудить что-то, попытаюсь видимо. Интересно :)
 
Grammy, Я тут скрипт посмотрел. Вам не кажется что что можно было обойтись одной функцией str_replace ? Создав всего два массива, или один key => value . Где ключ это что ищем а значение это на что меняем. И через foreach пройтись по нему .Или отдельные массивы один поиск другой замена. Так то проще былоб. Если не ошибаюсь то функция работает с массивами хорошо
 
Grammy, Я тут скрипт посмотрел. Вам не кажется что что можно было обойтись одной функцией str_replace ? Создав всего два массива, или один key => value . Где ключ это что ищем а значение это на что меняем. И через foreach пройтись по нему .Или отдельные массивы один поиск другой замена. Так то проще былоб. Если не ошибаюсь то функция работает с массивами хорошо
Да - именно так.
Я вообще скопировал всё в одну базу, так сказать единую с разными префиксами, и копировал содержимое таблиц по полям.
Неуклюже у меня конечно, - у Вас однозначно изящнее!
Копировал - чтобы сохранить на некоторое время старый движок, оставив в целости и файлы и базу.
 
Grammy, У меня пока что только план в голове. До того как сделать я ещё не совсем додумался. Вечером посижу за кофе и подумаю уже конкретно.
 
Grammy, У меня пока что только план в голове. До того как сделать я ещё не совсем додумался. Вечером посижу за кофе и подумаю уже конкретно.
Спасибо!
Я аналогично - сейчас тоже не совсем могу сообразить и сделать :)
Горячий понедельник, просто работать неохота никак :)
 
Grammy, Работа не волк в лес не убижит. Или не х** стояла и стоять будет :lol:
 
Так же хочу перейти с LogicBoard 4.1 DLE (могу и до 5.0 обновить) на XenForo.
Получилось ли у кого сделать это? Атачи обязательно мне нужны, так как их на 20Gb на сервере.
 
Урааа... Все получилось и так же все вложения (7000 файлов, 20Гб) перенес.
Все делал руками. Если у кого есть интерес, то могу расписать как делал.
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу