Миграция со старой Kunena до 4.0.11 и решение проблем с PHP7.

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

Обычно миграция контента со старой Joomla1.5 не проблема, а вот миграция форума может заставить подумать. Итак дано: Joomla 1.5.26 и Kunena 1.5.9, нужно обновить до Joomla 3 и Kunena 4. Всю работу можно условно разделить на две части: обновление сайта, этого я коснусь самым краешком, и обновление форума. Первая сложность: требования J1.5+K1.5 и J3+K4 - совершенно разные. Самым простым способом будет разделить обновление на две части - сначала обновить форум на старом сайте до 2.0.4, а потом перетянуть контент на другую площадку, с современным софтом и J3 и втянуть туда форум, и уже на новом сайте обновить до 4.0.11.

БЕКАП!!! Перед тем как что-то делать обязательно.

Итак, во-первых нужно отключить всё, что отключается, включить плагин - Mootools Upgrade и, если если в код форума вносились значительные изменения, то можно заново установить сверху похожую версию, я сумел найти на просторах интернета K1.5.14 и поставил сверху, следующей поставил версию K1.7.2 и, наконец K2.0.4. Если нужно, то в конце поставить русификацию. В таком виде форум становится более дружелюбным, им удобнее управлять, если нужно сделать здесь промежуточную остановку и пользоваться в таком виде, то придётся его подшаманить: возможно не будет показывать аттачи, совсем, тогда нужно в файле administrator/components/com_kunena/libraries/bbcode/bbcode.php найти строку:

if ($att->filename == $filename && $att->folder == 'media/kunena/attachments/legacy/images') {

и добавить начальный слеш в путь. Должно получиться так:

if ($att->filename == $filename && $att->folder == '/media/kunena/attachments/legacy/images') {

Следующей нужно в том же файле найти строку:

return '<div class="kmsgimage"><img src="' . $fileurl . $width .'" style="max-height:'.$config->imageheight.'px;" alt="" /></div>';

и привести её к виду, добавлены одни двойные кавычки в одинарных:

return '<div class="kmsgimage"><img src="' . $fileurl .'"'. $width .'" style="max-height:'.$config->imageheight.'px;" alt="" /></div>';

Теперь аттачи должны появиться. Ещё может не работать видео с youtube, возможно не работает и из других источников, я не проверял, нужно в том же файле поискать что-то типа http://youtube и заменить на https://youtube - просто поменялся протокол доступа, теперь с шифрованием. Там несложно разобраться, файл небольшой. Это имеется ввиду K2, если подобное что-то нужно будет сделать в K4, то библиотека будет лежать по пути: /libraries/kunena/bbcode/bbcode.php - там можно подкрутить всякие штуки связанные с написанием топиков.

Вот в таком виде можно уже мигрировать дальше. Контент, картинки, меню и прочее можно перетянуть руками, можно воспользоваться, например spupgrade_3, который может перенсти практически всё, вроде бы даже форум, но я не пробовал, вот ссылка на подробную инструкцию по миграции с помощью этого компонента. Вроде бы люди пробовали обновлять до K3.0.7 и уже её мигрировать, и это я не пробовал.

Итак мы имеем два сайта: J1.5 с рабочим форумом K2.0.4 и J3 без форума, нужно перетянуть со старого на новый форум, для этого можно воспользоваться phpMyAdmin и сделать всё легко и быстро: на старом сайте открываем базу и экспортируем таблицы форума, все. Для этого отмечаем чекбоксы таблиц и ниже, в выпадающем меню выбираем экспорт. Импортируем в новый сайт по той же схеме, тут может быть первая засада: если форум большой, а максимальный размер аплода не менялся, то файл не пролезет. Пути решения: упаковать, подсказка прямо на странице импорта phpMyAdmin, разбить на части, увеличить размер аплода - для изменения размера загрузки подправить /etc/php/7.4/fpm/php.ini и перезапустить. Теперь нужно поменять префекс таблиц со старого на новый - схема та же, выбираем, в выпадающем меню выбираем сменить префикс, выполняем.

Всё, теперь можно/нужно ставить форум и он подхватит таблицы. Я ставил так же по шагам, сначала K3.0.7, а потом накатил сверху K4.0.11. И оно не будет работать! Совсем! Не нужно волноваться, сейчас всё исправим. Во-первых нужно выставить верно права на категории форума, если их много, то, возможно, будет быстрее сделать для одной категории и по образцу выставить значения в базе, у меня было не очень много и эта умная мысль меня посетила когда я уже закончил. Второе, без чего ничего не будет работать - нужно исправить ошибки с новым PHP, кажется начиная с 7.3. Тут придётся поработать руками: нужно включить режим отладки в самой Кунене, на самой первой закладке конфигурации. Далее переходим в форум и смотрим где ошибки, обязательно будут ошибки вида:

preg_replace_callback(): Compilation failed: invalid range in character class at offset 18 in components/com_kunena/views/category/view.html.php on line 528

идём в этот файл и ищем конструкцию вида:

$contents = preg_replace_callback('|\[K=(\w+)(?:\:([\w-_]+))?\]|', array($this, 'fillTopicInfo'), $contents);

и удаляем одну открывающую квадратную скобку перед \w-:

$contents = preg_replace_callback('|\[K=(\w+)(?:\:(\w-_]+))?\]|', array($this, 'fillTopicInfo'), $contents);

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

Что ещё нужно сделать: проконтролировать где лежат аватары и аттачменты, они из /images перекочевали в /media, посмотрите что откуда растёт и где должно быть, нужно перенести со старого сайта. Ещё нужно подложить смайлики в /components/com_kunena/template/_шаблон_/images/emoticons.

По такой же схеме переносится компонент личных сообщений uddeIM: перенести таблицы, накатить сверху компонент.

Вроде всё.

UPD Добавил K4.0.12 - это, вроде бы, последний из ветки K4. Сам я не ставил, ничего сказать не могу.