Skip to content

Commit 016ca7a

Browse files
committed
Updated bulk import scripts based on Selase's feedback and extended badge imports
1 parent 7b97076 commit 016ca7a

File tree

2 files changed

+68
-18
lines changed

2 files changed

+68
-18
lines changed

script/bulk_import/base.rb

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ def initialize
7676
@html_entities = HTMLEntities.new
7777
@encoding = CHARSET_MAP[charset]
7878
@bbcode_to_md = true if use_bbcode_to_md?
79+
@assign_plugin_enabled = defined?(::DiscourseAssign)
7980

8081
@markdown =
8182
Redcarpet::Markdown.new(
@@ -511,8 +512,8 @@ def discourse_reaction_id_from_original_id(id)
511512
messageable_level
512513
created_at
513514
updated_at
514-
assignable_level
515515
]
516+
GROUP_COLUMNS << :assignable_level if defined?(::DiscourseAssign)
516517

517518
USER_COLUMNS = %i[
518519
id
@@ -649,7 +650,6 @@ def discourse_reaction_id_from_original_id(id)
649650
description
650651
position
651652
parent_category_id
652-
read_restricted
653653
uploaded_logo_id
654654
created_at
655655
updated_at
@@ -803,6 +803,14 @@ def discourse_reaction_id_from_original_id(id)
803803
updated_at
804804
multiple_grant
805805
query
806+
allow_title
807+
icon
808+
listable
809+
target_posts
810+
enabled
811+
auto_revoke
812+
trigger
813+
show_posts
806814
]
807815

808816
USER_BADGE_COLUMNS = %i[badge_id user_id granted_at granted_by_id seq post_id created_at]
@@ -1235,6 +1243,7 @@ def process_group(group)
12351243

12361244
group[:created_at] ||= NOW
12371245
group[:updated_at] ||= group[:created_at]
1246+
group[:assignable_level] ||= Group::ALIAS_LEVELS[:nobody] if @assign_plugin_enabled
12381247
group
12391248
end
12401249

@@ -1415,6 +1424,7 @@ def process_user_associated_account(account)
14151424
end
14161425

14171426
def process_group_user(group_user)
1427+
group_user[:owner] ||= false
14181428
group_user[:created_at] = NOW
14191429
group_user[:updated_at] = NOW
14201430
group_user
@@ -1450,7 +1460,6 @@ def process_category(category)
14501460
category[:slug] ||= Slug.for(name_lower, "") # TODO Ensure that slug doesn't exist yet
14511461
category[:description] = (category[:description] || "").scrub.strip.presence
14521462
category[:user_id] ||= Discourse::SYSTEM_USER_ID
1453-
category[:read_restricted] = false if category[:read_restricted].nil?
14541463
category[:created_at] ||= NOW
14551464
category[:updated_at] ||= category[:created_at]
14561465

script/bulk_import/generic_bulk.rb

Lines changed: 56 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ def execute
7878
import_category_permissions
7979
import_category_users
8080
import_category_moderation_groups
81-
update_read_restricted_flags
81+
update_category_read_restricted
8282

8383
import_topics
8484
import_posts
@@ -379,7 +379,7 @@ def import_category_moderation_groups
379379
group_id = group_id_from_imported_id(row["group_id"])
380380

381381
next unless category_id && group_id
382-
next if existing_moderation_groups.include?([category_id, group_id])
382+
next unless existing_moderation_groups.add?([category_id, group_id])
383383

384384
{ category_id: category_id, group_id: group_id }
385385
end
@@ -414,19 +414,24 @@ def import_category_users
414414
category_users.close
415415
end
416416

417-
def update_read_restricted_flags
417+
def update_category_read_restricted
418418
puts "", "Updating category read_restricted flags..."
419419
start_time = Time.now
420420
processed_count = 0
421421
updated_count = 0
422422
skipped_count = 0
423423

424424
Category
425-
.includes(:category_groups)
425+
.includes(category_groups: :group)
426426
.find_each do |category|
427427
processed_count += 1
428428

429-
permissions = category.permissions_params
429+
permissions = {}
430+
category.category_groups.each do |category_group|
431+
group = category_group.group
432+
permissions[category_group.group_name] = category_group.permission_type if group.present?
433+
end
434+
430435
expected_read_restricted =
431436
if permissions.empty?
432437
false
@@ -459,19 +464,20 @@ def import_groups
459464
create_groups(groups) do |row|
460465
next if group_id_from_imported_id(row["id"]).present?
461466

462-
{
467+
group_data = {
463468
imported_id: row["id"],
464469
name: row["name"],
465470
full_name: row["full_name"],
466-
public_admission: row["public_admission"],
467-
public_exit: row["public_exit"],
468-
allow_membership_requests: row["allow_membership_requests"],
471+
public_admission: row["public_admission"] || false,
472+
public_exit: row["public_exit"] || false,
473+
allow_membership_requests: row["allow_membership_requests"] || false,
469474
visibility_level: row["visibility_level"],
470475
members_visibility_level: row["members_visibility_level"],
471476
mentionable_level: row["mentionable_level"],
472477
messageable_level: row["messageable_level"],
473-
assignable_level: row["assignable_level"],
474478
}
479+
group_data[:assignable_level] = row["assignable_level"] if defined?(::DiscourseAssign)
480+
group_data
475481
end
476482

477483
groups.close
@@ -609,13 +615,12 @@ def import_user_options
609615
puts "", "Importing user options..."
610616

611617
users = query(<<~SQL)
612-
SELECT id, timezone, email_level, email_messages_level, email_digests, hide_profile_and_presence
618+
SELECT id, timezone, email_level, email_messages_level, email_digests
613619
FROM users
614620
WHERE timezone IS NOT NULL
615621
OR email_level IS NOT NULL
616622
OR email_messages_level IS NOT NULL
617623
OR email_digests IS NOT NULL
618-
OR hide_profile_and_presence IS NOT NULL
619624
ORDER BY id
620625
SQL
621626

@@ -631,7 +636,9 @@ def import_user_options
631636
email_level: row["email_level"],
632637
email_messages_level: row["email_messages_level"],
633638
email_digests: row["email_digests"],
634-
hide_profile_and_presence: row["hide_profile_and_presence"] || false,
639+
hide_profile_and_presence: false,
640+
hide_profile: false,
641+
hide_presence: false,
635642
}
636643
end
637644

@@ -2023,10 +2030,17 @@ def import_tags
20232030
)
20242031
@tag_mapping[row["id"]] = tag.id
20252032

2026-
if row["tag_group_id"] && !row["tag_group_id"].empty?
2027-
intermediate_group_ids = JSON.parse(row["tag_group_id"])
2033+
intermediate_group_ids = []
2034+
if row["tag_group_ids"] && !row["tag_group_ids"].empty?
2035+
intermediate_group_ids = JSON.parse(row["tag_group_ids"])
2036+
elsif row["tag_group_id"] && !row["tag_group_id"].empty?
2037+
# Support old single tag_group_id
2038+
intermediate_group_ids = [row["tag_group_id"]]
2039+
end
20282040

2041+
if intermediate_group_ids.any?
20292042
intermediate_group_ids.each do |intermediate_group_id|
2043+
intermediate_group_id = intermediate_group_id.to_i if intermediate_group_id.is_a?(String)
20302044
discourse_tag_group_id = @tag_group_mapping[intermediate_group_id]
20312045

20322046
if discourse_tag_group_id
@@ -2476,6 +2490,15 @@ def import_badges
24762490
image_upload_id:
24772491
row["image_upload_id"] ? upload_id_from_original_id(row["image_upload_id"]) : nil,
24782492
query: row["query"],
2493+
multiple_grant: to_boolean(row["multiple_grant"]),
2494+
allow_title: to_boolean(row["allow_title"]),
2495+
icon: row["icon"],
2496+
listable: to_boolean(row["listable"]),
2497+
target_posts: to_boolean(row["target_posts"]),
2498+
enabled: to_boolean(row["enabled"]),
2499+
auto_revoke: to_boolean(row["auto_revoke"]),
2500+
trigger: row["trigger"],
2501+
show_posts: to_boolean(row["show_posts"]),
24792502
}
24802503
end
24812504

@@ -2506,6 +2529,24 @@ def import_user_badges
25062529
end
25072530

25082531
user_badges.close
2532+
2533+
puts "", "Updating badge grant counts..."
2534+
start_time = Time.now
2535+
2536+
DB.exec(<<~SQL)
2537+
WITH
2538+
grants AS (
2539+
SELECT badge_id, COUNT(*) AS grant_count FROM user_badges GROUP BY badge_id
2540+
)
2541+
2542+
UPDATE badges
2543+
SET grant_count = grants.grant_count
2544+
FROM grants
2545+
WHERE badges.id = grants.badge_id
2546+
AND badges.grant_count <> grants.grant_count
2547+
SQL
2548+
2549+
puts " Update took #{(Time.now - start_time).to_i} seconds."
25092550
end
25102551

25112552
def import_anniversary_user_badges

0 commit comments

Comments
 (0)