Запрос на улучшение скрипта импорта phpBB3

В phpBB можно добавлять комментарии к загруженным вложениям:

Затем они отображаются под изображением в сообщении:

Было бы полезно, если бы скрипт импорта phpBB3 мог брать эти комментарии и присваивать их в качестве альтернативного текста к соответствующему изображению, чтобы они отображались при наведении курсора на изображение в Discourse.

Спасибо,
Дэн

Ах! Так как я ничего не знаю о Ruby on Rails — и я запрашиваю улучшение скрипта импорта phpBB — я хотел бы также запросить дополнительное улучшение, как описано здесь. Было бы полезно, если бы при сообщении скриптом об ошибке даты/времени для поста он также указывал phpBB post_id для целей отладки.

Спасибо,
Дэн

Не совсем понятно, как выполнить то, что вы просите, но я потратил несколько минут и не нашел удовлетворительного решения, которое выглядело бы реализуемым.

В записи загрузки нет места для подписи, и я не вижу очевидного способа вернуться от загрузки… Возможно, можно было бы сохранить комментарий как имя файла, а затем каким-то образом позже извлечь его в качестве подписи. Да. Это, пожалуй, лучшее, что можно сделать: закодировать подпись в имени файла, чтобы она отображалась при наведении курсора и так далее. Если хотите, вы можете затем сделать что-то еще, например, найти файлы с именами, включающими подпись, и каким-то образом вставить её в HTML.

Честно говоря, я ничего не знаю о RoR или даже о PostgreSQL. Но когда вы размечаете изображение с помощью альтернативного текста, он сохраняется в базе данных PostgreSQL в ассоциации с этим изображением. Что именно в скрипте импорта препятствует этому присвоению? Конечно, комментарий доступен в MySQL.

Выглядит непросто, но у вас может получиться, если изменить этот метод здесь:

Вместо этого:

text.gsub!(attachment_regexp) do
        index = $1.to_i
        real_filename = $2
        unreferenced_attachments[index] = nil
        attachments.fetch(index, real_filename)
end

Вам нужно что-то вроде этого:

text.gsub!(attachment_regexp) do
        index = $1.to_i
        description = $2.strip
        unreferenced_attachments[index] = nil

        url = attachments.fetch(index, description)

        "![#{description}](#{url})"
end

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

Если завтра у меня будет время, я могу открыть PR с реальным решением. :grinning_face_with_smiling_eyes:

Спасибо! Хотите ли вы фильтровать задания по типу MIME? (Я не смог прикрепить комментарий phpBB к файлу .mp4; хотя я смог прикрепить его к .gif, он не отображался при наведении курсора.)

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

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

Я с радостью протестирую, но… Мне нужно ли очищать тестовую среду и начинать заново? Claude.ai провел меня через процесс установки, я новичок в Docker, и даже так в процессе возникло множество ошибок.

Если вы сможете описать способ, как мне легко протестировать, я с радостью попробую.

Отличная работа! Я посмотрел код, но ничего не нашёл.

Да. Вам потребуется полностью очистить базу данных и запустить процесс снова. Импортёр пропускает уже импортированные данные, поэтому для проверки придётся импортировать всё заново. Хотя, похоже, всё должно сработать!

Окей — в целом вложения всё ещё на месте, как и база данных MySQL. Это заняло несколько часов, но я попросил Клода помочь мне разобраться и сообщу о результатах.

Конечно, я могу вам помочь. Менять установку не нужно. Простой способ:

  1. Сделайте резервную копию вашего сайта и сохраните её в надёжном месте. Это защитит вас от потери данных.
  2. Сбросьте ваш сайт:
# Войдите в контейнер сайта
cd /var/discourse
./launcher enter <your-container-name>

# Сброс базы данных
bundle exec rake db:drop
bundle exec rake db:create
bundle exec rake db:migrate
bundle exec rake db:seed

# Выйдите из контейнера
exit

# Пересоберите контейнер, чтобы убедиться, что всё на месте
./launcher rebuild <your-container-name>
  1. Измените файлы с новым кодом. Вы можете использовать текстовый редактор CLI или открыть контейнер через SSH в вашем любимом текстовом редакторе.
  2. Настройте файл settings.yml и запустите импортёр снова.

Чтобы вернуться к предыдущему состоянию, просто восстановите резервную копию, которую вы сделали в начале:

./launcher enter <your-container-name>
discourse enable restore
discourse restore <your-backup-filename>

Ага! Кстати, не сложно ли модифицировать скрипт так, чтобы он сообщал phpBB post_id обрабатываемого сообщения при обнаружении проблемы с датой/временем?

Кажется, достаточно просто! Я попробую, как только Рози :dog: отведёт меня на прогулку.

Я добавляю это здесь, используя существующий gsub:

Но спасибо, что уделили время, это заставило меня понять, что я не учел вложения без ссылок, которые также есть в phpbb:

Хорошо, резервное копирование началось. Ожидаю, что это займёт некоторое время…

Мне нужно редактировать файлы вручную? Неужели нельзя просто выполнить docker cp в пути к скриптам для этих файлов из вашего репозитория Git?

Это тоже сработает. В качестве альтернативы вы можете настроить container.yml на использование моего репозитория и ветки, а затем выполнить пересборку.

Что ж, это не прошло гладко.

reset_log.txt (16.6 КБ)

По-видимому, вам нужно выполнить команды от имени пользователя discourse:

su discourse

или

su discourse -c "bundle exec rake db:drop"

Ой. Ошибка новичка: не хотел закрывать тему — просто хотел подтвердить, что, похоже, это решило конкретную проблему.

«Похоже, что». Всё ещё жду завершения db:drop. Вперёд…

По-прежнему ничего не получается.

reset_log2.txt (1.7 КБ)