From 9839cbc76f991a316f62605be79083123385045e Mon Sep 17 00:00:00 2001 From: Antonio Terceiro Date: Thu, 13 Aug 2009 10:25:40 -0300 Subject: [PATCH] ActionItem1165: checkpoint --- script/group-import-cooperation.net | 1 + script/import-cooperation.net | 65 +++++++++++++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 46 insertions(+), 20 deletions(-) create mode 120000 script/group-import-cooperation.net diff --git a/script/group-import-cooperation.net b/script/group-import-cooperation.net new file mode 120000 index 0000000..10a8f07 --- /dev/null +++ b/script/group-import-cooperation.net @@ -0,0 +1 @@ +import-cooperation.net \ No newline at end of file diff --git a/script/import-cooperation.net b/script/import-cooperation.net index 46834ea..4891ca6 100755 --- a/script/import-cooperation.net +++ b/script/import-cooperation.net @@ -3,6 +3,8 @@ require File.dirname(__FILE__) + '/../config/environment' include ActionController::UrlWriter +SCRIPT_TYPE = File.basename($PROGRAM_NAME) + IMPORT_DIR = ENV['IMPORT_DIR'] || '/home/terceiro/src/cooperation-migration/data/export' if ARGV.size == 0 @@ -75,32 +77,49 @@ for username in ARGV domain_name = username.gsub(/^.*@/, '') environment = import_environment(domain_name) - # create user login = username.gsub(/@.*$/, '') if FORBIDDEN_LOGINS.include?(login) $stderr.puts "E: not importing #{username}, #{login} is not an allowed login" next end - user = User.new(:login => login, :email => username, :environment => environment) - - # import person data - imported_data = Hash.from_xml(File.read(File.join(IMPORT_DIR, username + '.xml')))['person'] - user.crypted_password = imported_data.delete(:crypted_password.to_s) - user.salt = imported_data.delete(:salt.to_s) - user.password_type = imported_data.delete(:password_type.to_s) - user.person_data = imported_data.merge('preferred_domain_id' => get_domain(domain_name).id) - user.save! - Progress.say "I: #{username} data imported" - - person = user.person + profile = nil + if SCRIPT_TYPE == 'group-import-cooperation.net' + # import as a group + imported_data = Hash.from_xml(File.read(File.join(IMPORT_DIR, username + '.xml')))['person'] + profile = Community.create!( + :identifier => login, + :name => login, + :contact_email => imported_data['email'], + :address => imported_data['address'], + :environment => environment, + :preferred_domain_id => get_domain(domain_name).id + ) + else + # import as a user + + # create user + user = User.new(:login => login, :email => username, :environment => environment) + + # import person data + imported_data = Hash.from_xml(File.read(File.join(IMPORT_DIR, username + '.xml')))['person'] + user.crypted_password = imported_data.delete(:crypted_password.to_s) + user.salt = imported_data.delete(:salt.to_s) + user.password_type = imported_data.delete(:password_type.to_s) + + user.person_data = imported_data.merge('preferred_domain_id' => get_domain(domain_name).id) + user.save! + Progress.say "I: #{username} data imported" + + profile = user.person + end # import articles Dir.glob(File.join(IMPORT_DIR, username, 'articles', '*.xml')) do |xml| Progress.say "I: Trying to import #{username}'s article in #{xml} ..." article = TinyMceArticle.new article.from_xml(File.read(xml)) - article.profile = person + article.profile = profile if article.valid? article.save! Progress.say "I: #{username}'s article #{article.name.inspect} imported" @@ -110,13 +129,19 @@ for username in ARGV end if article.is_homepage - person.home_page = article - person.save! + profile.home_page = article + profile.save! Progress.say "I: Article #{article.name.inspect} is #{username}'s homepage!" end - File.open("tmp/rewrite.txt", 'w+') do |file| - file.puts("#{article.id} #{url_for(article.url)}") + orig_article_number = File.basename(xml).sub(/\.xml$/, '') + + File.open("tmp/rewrite.txt", 'a') do |file| + [ '', '.html' ].each do |ext| + [ '', '/[a-z.]*'].each do |prefix| + file.puts("Redirect #{prefix}/info/#{orig_article_number}#{ext} #{url_for(article.url)}") + end + end Progress.say "I: Article with id = #{article.id} redirected to #{url_for(article.url)}" end @@ -132,7 +157,7 @@ for username in ARGV Progress.say "I: about to read data from #{file.filesystem_location} (xml: #{attachment_xml})" file.uploaded_data = FileData.new(file.filesystem_location, file.filename, file.content_type) file.parent = article - file.profile = person + file.profile = profile Progress.say "I: Trying to save attachment \"#{file.filename}/#{file.slug}\"" file.save! Progress.say "I: attachment added to article #{article.id}" @@ -158,7 +183,7 @@ for username in ARGV data['menu']['items'].each do |item| links << { :name => item['title'], :address => item['url'] } end - block = person.blocks.select { |block| block.class == LinkListBlock }[i-1] + block = profile.blocks.select { |block| block.class == LinkListBlock }[i-1] block.title = data['menu']['title'] block.links = links block.save! -- libgit2 0.21.2