Migrating from Invision Power Board to Discourse

is this offer still available ?
Getting to the point where I might have to pay IPB :sadpanda:

Want to convert from http://mandrivausers.org/

Hey, i will probably need to do a migration from IP Board v3.4.5 to Discourse at my job, any news about the import script? Would love to test it.

I wont promise that it will work for you, but I will try to clean it up and submit a PR in the next few days. If you have a budget, my contact info is in my profile.

I also need to do a migration from a bitrix based forum, so i’ll have to write a custom script anyway and figure out how all of this works, anything to save me some time would be extremely helpful. Thank you.

Here it is. The two sites that I imported with this code were wildly different. I hope that someone finds it useful.

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

Подскажите, пожалуйста, где находится скрипт импорта для Invision Power Board версии 4?
В репозитории я вижу только скрипты импорта для IPBoard и IPBoard 3.
Поддерживаете ли вы миграцию с IPBoard 4 на Discourse?

Я не знаю. Думаю, стоит попробовать скрипт ipboard.rb; я не помню, для какой версии ipboard я его писал. Вам придётся проверить его на ваших данных, чтобы убедиться, что он работает. Как я уже говорил (много лет) назад, когда я изначально писал скрипт для ipboard, два сайта, на которых я его тестировал, были очень, очень разными.

Если вас интересует платная поддержка, ознакомьтесь с информацией по ссылке: Redirecting…

Спасибо за ответ.
Я попробовал со своими данными, но процесс не завершается, так как происходит ошибка.
Скрипт пытается найти таблицу “profile_portal”, которой нет в 4-й версии.
Полагаю, что этот скрипт написан для IPB 3 или более ранних версий.

Я подумаю о платной поддержке.

Привет @pfaffman, пожалуйста, дай знать, если сможешь помочь. Я хочу выполнить импорт из версии 2.3.6, но у меня возникают проблемы с привязкой тем к forum_id, так как в этой версии его нет. Не мог бы ты подсказать, в какой таблице хранится значение для связи между темой и форумом?

Вот что у меня сейчас есть для импорта тем. Импорт работает, но все темы попадают в категорию «Без категории»:

def import_topics
  puts "\n📌 Импорт тем..."
  total_count = mysql_query("SELECT count(*) count FROM iBB_posts WHERE new_topic = 1;").first['count']

  batches(BATCH_SIZE) do |offset|
    discussions = mysql_query(<<-SQL
      SELECT pid as tid, topic_id, post_title as title, post as raw,
             FROM_UNIXTIME(post_date) as created_at, author_id
      FROM iBB_posts
      WHERE new_topic = 1
      ORDER BY post_date ASC
      LIMIT #{BATCH_SIZE} OFFSET #{offset};
    SQL
    ).to_a

    break if discussions.empty?

    create_posts(discussions, total: total_count, offset: offset) do |discussion|
      {
        id: "topic-#{discussion['tid']}",
        user_id: user_id_from_imported_user_id(discussion['author_id']) || Discourse::SYSTEM_USER_ID,
        title: format_title(discussion['title']),  # Убедитесь, что заголовки отформатированы правильно
        raw: discussion['raw'],
        created_at: discussion['created_at'],
        post_number: 1
      }
    end
  end
end
def format_title(title)
  return "Без названия темы" if title.nil? || title.strip.empty?
  CGI.unescapeHTML(title)
end
def import_replies
  puts "\n📌 Импорт ответов..."
  total_count = mysql_query("SELECT count(*) FROM iBB_posts WHERE new_topic = 0;").first['count']

  batches(BATCH_SIZE) do |offset|
    comments = mysql_query(<<-SQL
      SELECT pid, topic_id, post as raw, FROM_UNIXTIME(post_date) as created_at, author_id
      FROM iBB_posts
      WHERE new_topic = 0
      ORDER BY post_date ASC
      LIMIT #{BATCH_SIZE} OFFSET #{offset};
    SQL
    ).to_a

    break if comments.empty?

    create_posts(comments, total: total_count, offset: offset) do |comment|
      topic_id = topic_lookup_from_imported_post_id("topic-#{comment['topic_id']}")
      next unless topic_id

      {
        id: "post-#{comment['pid']}",
        topic_id: topic_id,
        user_id: user_id_from_imported_user_id(comment['author_id']) || Discourse::SYSTEM_USER_ID,
        raw: comment['raw'],
        created_at: comment['created_at']
      }
    end
  end
end

Вы не передаёте категорию создателю темы, поэтому вам нужно это исправить.

Я бы, но не могу найти forum_id в базе данных IPB SQL для использования.

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

Если у вас есть бюджет, вы можете обратиться по адресу Discourse Migration - Literate Computing. Если вы сообщите мне размер бюджета, я постараюсь предложить сопоставимое решение.

Я ценю ваш ответ, но я искал именно техническое руководство по решению этой проблемы, а не предложения услуг. Спасибо ещё раз за быстрый ответ.

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

Все, что я могу вам сказать, и что я уже говорил, — это проверить базу данных, чтобы найти, где скрывается категория. В записи темы должно быть какое-то поле, которое вы упускаете. Иногда это ссылка на другую таблицу, в которой хранится идентификатор категории, и вам нужно выполнить соединение (join). Вероятно, у него просто какое-то имя, которого вы не ожидаете.