diff --git a/app/controllers/admin/alias_and_implication_imports_controller.rb b/app/controllers/admin/alias_and_implication_imports_controller.rb index 4f3860bbd..215594ead 100644 --- a/app/controllers/admin/alias_and_implication_imports_controller.rb +++ b/app/controllers/admin/alias_and_implication_imports_controller.rb @@ -6,7 +6,7 @@ module Admin end def create - @importer = AliasAndImplicationImporter.new(params[:batch][:text], params[:batch][:forum_id]) + @importer = AliasAndImplicationImporter.new(params[:batch][:text], params[:batch][:forum_id], params[:batch][:rename_aliased_pages]) @importer.process! flash[:notice] = "Import queued" redirect_to new_admin_alias_and_implication_import_path diff --git a/app/logical/alias_and_implication_importer.rb b/app/logical/alias_and_implication_importer.rb index 5ee2887d8..21ce73a85 100644 --- a/app/logical/alias_and_implication_importer.rb +++ b/app/logical/alias_and_implication_importer.rb @@ -1,9 +1,10 @@ class AliasAndImplicationImporter - attr_accessor :text, :commands, :forum_id + attr_accessor :text, :commands, :forum_id, :rename_aliased_pages - def initialize(text, forum_id) + def initialize(text, forum_id, rename_aliased_pages = "0") @forum_id = forum_id @text = text + @rename_aliased_pages = rename_aliased_pages end def process! @@ -11,6 +12,10 @@ class AliasAndImplicationImporter parse(tokens) end + def rename_aliased_pages? + @rename_aliased_pages == "1" + end + private def tokenize(text) @@ -40,6 +45,7 @@ private case token[0] when :create_alias tag_alias = TagAlias.create(:forum_topic_id => forum_id, :status => "pending", :antecedent_name => token[1], :consequent_name => token[2]) + tag_alias.rename_wiki_and_artist if rename_aliased_pages? tag_alias.delay(:queue => "default").process! when :create_implication diff --git a/app/models/tag_alias.rb b/app/models/tag_alias.rb index 9870a85d8..019afcbd3 100644 --- a/app/models/tag_alias.rb +++ b/app/models/tag_alias.rb @@ -139,4 +139,27 @@ class TagAlias < ActiveRecord::Base antecedent_tag.fix_post_count if antecedent_tag consequent_tag.fix_post_count if consequent_tag end + + def rename_wiki_and_artist + antecedent_wiki = WikiPage.titled(antecedent_name).first + if antecedent_wiki.present? && WikiPage.titled(consequent_name).blank? + CurrentUser.scoped(creator, creator_ip_addr) do + antecedent_wiki.update_attributes( + :title => consequent_name, + :body => "[i]This page was automatically renamed from [[#{antecedent_name}]] by a tag alias.[/i]\n\n#{antecedent_wiki.body}" + ) + end + end + + if antecedent_tag.category == Tag.categories.artist + antecedent_artist = Artist.name_matches(antecedent_name).first + if antecedent_artist.present? && Artist.name_matches(consequent_name).blank? + CurrentUser.scoped(creator, creator_ip_addr) do + antecedent_artist.update_attributes( + :name => consequent_name + ) + end + end + end + end end diff --git a/app/views/admin/alias_and_implication_imports/new.html.erb b/app/views/admin/alias_and_implication_imports/new.html.erb index 7ac67cddf..592deda94 100644 --- a/app/views/admin/alias_and_implication_imports/new.html.erb +++ b/app/views/admin/alias_and_implication_imports/new.html.erb @@ -26,6 +26,13 @@ create implication aaa -> bbb <%= text_field "batch", "forum_id" %> +
+ +
+ <%= submit_tag %> <% end %> diff --git a/test/unit/alias_and_implication_importer_test.rb b/test/unit/alias_and_implication_importer_test.rb index e4c7032fe..ec4e58b6d 100644 --- a/test/unit/alias_and_implication_importer_test.rb +++ b/test/unit/alias_and_implication_importer_test.rb @@ -51,5 +51,16 @@ class AliasAndImplicationImporterTest < ActiveSupport::TestCase end end end + + should "rename an aliased tag's artist entry and wiki page" do + tag1 = FactoryGirl.create(:tag, :name => "aaa", :category => 1) + tag2 = FactoryGirl.create(:tag, :name => "bbb") + artist = FactoryGirl.create(:artist, :name => "aaa", :notes => "testing") + @importer = AliasAndImplicationImporter.new("create alias aaa -> bbb", "", "1") + @importer.process! + artist.reload + assert_equal("bbb", artist.name) + assert_match(/automatically renamed/, artist.notes) + end end end