# Discourse Import IPS4 Skript

**URL:** <https://meta.discourse.org/t/discourse-import-ips4-script/181441>\
**Category:** Development\
**Created:** [1. März 2021 um 07:22 UTC](https://meta.discourse.org/t/discourse-import-ips4-script/181441 "2021-03-01T07:22:01Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![Алексей\_Батурин1](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/%D0%B0%D0%BB%D0%B5%D0%BA%D1%81%D0%B5%D0%B9_%D0%B1%D0%B0%D1%82%D1%83%D1%80%D0%B8%D0%BD1/32/251260_2.png) [@Алексей\_Батурин1](https://meta.discourse.org/u/%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B5%D0%B9_%D0%91%D0%B0%D1%82%D1%83%D1%80%D0%B8%D0%BD1)\
**Post date:** [1. März 2021 um 07:22 UTC](https://meta.discourse.org/t/discourse-import-ips4-script/181441/1 "2021-03-01T07:22:01Z")

</div>

Helfen Sie mit, den Import privater Nachrichten zu gestalten

Es gibt Code, der für die vorherige Version von IPB3 geschrieben wurde.  
In der neuen Version von IPS4 wurden einige Tabellen umbenannt.

> **Zusammenfassung**
>
> def import\_private\_messages  
> puts “”, “Importiere private Nachrichten…”
> 
> ```
> topic_count = mysql_query("SELECT COUNT(msg_id) count FROM #{TABLE_PREFIX}message_posts").first["count"]
> 
> last_private_message_topic_id = -1
> 
> batches(BATCH_SIZE) do |offset|
> private_messages = mysql_query(<<-SQL
> SELECT msg_id pmtextid,
> msg_topic_id topic_id,
> msg_author_id fromuserid,
> mt_title title,
> msg_post message,
>              
> mt_invited_members touserarray,
>              
> mt_to_member_id to_user_id,
> msg_is_first_post first_post,
> msg_date dateline
> FROM #{TABLE_PREFIX}message_topics, #{TABLE_PREFIX}message_posts
> WHERE msg_topic_id = mt_id
> AND msg_date > UNIX_TIMESTAMP(STR_TO_DATE('#{IMPORT_AFTER}', '%Y-%m-%d'))
> ORDER BY msg_topic_id, msg_id
> LIMIT #{BATCH_SIZE}
> OFFSET #{offset}
> SQL
> )
> 
> puts "Verarbeite #{private_messages.count} Nachrichten"
> break if private_messages.count < 1
> puts "Verarbeite . . . "
> private_messages = private_messages.reject { |pm| @lookup.post_already_imported?("pm-#{pm['pmtextid']}") }
> 
> title_username_of_pm_first_post = {}
> 
> create_posts(private_messages, total: topic_count, offset: offset) do |m|
> skip = false
> mapped = {}
> 
> mapped[:id] = "pm-#{m['pmtextid']}"
> mapped[:user_id] = user_id_from_imported_user_id(m['fromuserid']) || Discourse::SYSTEM_USER_ID
> mapped[:raw] = clean_up(m['message']) rescue nil
> mapped[:created_at] = Time.zone.at(m['dateline'])
> title = @htmlentities.decode(m['title']).strip[0...255]
> topic_id = nil
> 
> next if mapped[:raw].blank?
> 
> # Benutzer, die Teil dieser privaten Nachricht sind.
> target_usernames = []
> target_userids = []
> begin
> to_user_array = [m['to_user_id'] ] + array_from_members_string(m['touserarray'])
> rescue
> puts "#{m['pmtextid']} -- #{m['touserarray']}"
> skip = true
> end
> 
> begin
> to_user_array.each do |to_user|
> user_id = user_id_from_imported_user_id(to_user)
> username = User.find_by(id: user_id).try(:username)
> target_userids << user_id || Discourse::SYSTEM_USER_ID
> target_usernames << username if username
> if user_id
> puts "Benutzer gefunden: #{to_user} -- #{user_id} -- #{username}"
> else
> puts "Benutzer nicht gefunden: #{to_user}"
> end
> end
> rescue
> puts "Überspringe pm-#{m['pmtextid']} `to_user_array` ist defekt -- #{to_user_array.inspect}"
> skip = true
> end
> 
> participants = target_userids
> participants << mapped[:user_id]
> begin
> participants.sort!
> rescue
> puts "Eine der Teilnehmer-IDs ist nil -- #{participants.inspect}"
> end
> 
> if last_private_message_topic_id != m['topic_id']
> last_private_message_topic_id = m['topic_id']
> puts "Neue Nachricht: #{m['topic_id']}: #{title} von #{m['fromuserid']} (#{mapped[:user_id]})" unless QUIET
> # Themen-Nachricht
> topic_id = m['topic_id']
> mapped[:title] = title
> mapped[:archetype] = Archetype.private_message
> mapped[:target_usernames] = target_usernames.join(',')
> if mapped[:target_usernames].size < 1 # PN mit sich selbst?
> # skip = true
> mapped[:target_usernames] = "system"
> puts "pm-#{m['pmtextid']} hat kein Ziel (#{m['touserarray']})"
> end
> else # Antwort
> topic_id = topic_lookup_from_imported_post_id("pm-#{topic_id}")
> if !topic_id
> skip = true
> end
> mapped[:topic_id] = topic_id
> puts "Antwort-Nachricht #{topic_id}: #{m['topic_id']}: von #{m['fromuserid']} (#{mapped[:user_id]})" unless QUIET
> end
> # puts "#{target_usernames} -- #{mapped[:target_usernames]}"
> # puts "Füge #{mapped} hinzu"
> skip ? nil : mapped
> # puts "#{'-'*50}> hinzugefügt"
> end
> end
> 
> ```

So sieht die Tabelle jetzt aus

 ![Снимок экрана от 2021-03-01 12-16-57](https://global.discourse-cdn.com/meta/original/3X/9/e/9e932e7c89591924d33b2b3d30c2f33c9bd74498.png) ![Снимок экрана от 2021-03-01 12-15-12](https://global.discourse-cdn.com/meta/original/3X/1/d/1d8e0f5fe09a0390c76e5bafd7c13780088d001d.png) ![Снимок экрана от 2021-03-01 12-15-14](https://global.discourse-cdn.com/meta/original/3X/7/f/7f150bcd65433ccbbde8bc708565778624ef234e.png)

Das Problem tritt bei **mt\_invited\_members** auf.

Wenn Sie diese Zeile der Nachricht aus der Anfrage entfernen, wird sie importiert, aber die Kette der Antworten geht verloren. Ich verstehe kaum, welche Änderungen vorgenommen werden müssen, damit private Nachrichten korrekt importiert werden.  
Ich habe versucht, mt\_invited\_members durch mt\_starter\_id zu ersetzen.

Nachrichten wurden überhaupt nicht importiert.

---

_[View the full topic](https://meta.discourse.org/t/discourse-import-ips4-script/181441)._
