Commit 9839cbc76f991a316f62605be79083123385045e

Authored by Antonio Terceiro
1 parent 7df56ce1

ActionItem1165: checkpoint

script/group-import-cooperation.net 0 → 120000
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +import-cooperation.net
0 \ No newline at end of file 2 \ No newline at end of file
script/import-cooperation.net
@@ -3,6 +3,8 @@ require File.dirname(__FILE__) + '/../config/environment' @@ -3,6 +3,8 @@ require File.dirname(__FILE__) + '/../config/environment'
3 3
4 include ActionController::UrlWriter 4 include ActionController::UrlWriter
5 5
  6 +SCRIPT_TYPE = File.basename($PROGRAM_NAME)
  7 +
6 IMPORT_DIR = ENV['IMPORT_DIR'] || '/home/terceiro/src/cooperation-migration/data/export' 8 IMPORT_DIR = ENV['IMPORT_DIR'] || '/home/terceiro/src/cooperation-migration/data/export'
7 9
8 if ARGV.size == 0 10 if ARGV.size == 0
@@ -75,32 +77,49 @@ for username in ARGV @@ -75,32 +77,49 @@ for username in ARGV
75 domain_name = username.gsub(/^.*@/, '') 77 domain_name = username.gsub(/^.*@/, '')
76 environment = import_environment(domain_name) 78 environment = import_environment(domain_name)
77 79
78 - # create user  
79 login = username.gsub(/@.*$/, '') 80 login = username.gsub(/@.*$/, '')
80 if FORBIDDEN_LOGINS.include?(login) 81 if FORBIDDEN_LOGINS.include?(login)
81 $stderr.puts "E: not importing #{username}, #{login} is not an allowed login" 82 $stderr.puts "E: not importing #{username}, #{login} is not an allowed login"
82 next 83 next
83 end 84 end
84 - user = User.new(:login => login, :email => username, :environment => environment)  
85 -  
86 - # import person data  
87 - imported_data = Hash.from_xml(File.read(File.join(IMPORT_DIR, username + '.xml')))['person']  
88 - user.crypted_password = imported_data.delete(:crypted_password.to_s)  
89 - user.salt = imported_data.delete(:salt.to_s)  
90 - user.password_type = imported_data.delete(:password_type.to_s)  
91 85
92 - user.person_data = imported_data.merge('preferred_domain_id' => get_domain(domain_name).id)  
93 - user.save!  
94 - Progress.say "I: #{username} data imported"  
95 -  
96 - person = user.person 86 + profile = nil
  87 + if SCRIPT_TYPE == 'group-import-cooperation.net'
  88 + # import as a group
  89 + imported_data = Hash.from_xml(File.read(File.join(IMPORT_DIR, username + '.xml')))['person']
  90 + profile = Community.create!(
  91 + :identifier => login,
  92 + :name => login,
  93 + :contact_email => imported_data['email'],
  94 + :address => imported_data['address'],
  95 + :environment => environment,
  96 + :preferred_domain_id => get_domain(domain_name).id
  97 + )
  98 + else
  99 + # import as a user
  100 +
  101 + # create user
  102 + user = User.new(:login => login, :email => username, :environment => environment)
  103 +
  104 + # import person data
  105 + imported_data = Hash.from_xml(File.read(File.join(IMPORT_DIR, username + '.xml')))['person']
  106 + user.crypted_password = imported_data.delete(:crypted_password.to_s)
  107 + user.salt = imported_data.delete(:salt.to_s)
  108 + user.password_type = imported_data.delete(:password_type.to_s)
  109 +
  110 + user.person_data = imported_data.merge('preferred_domain_id' => get_domain(domain_name).id)
  111 + user.save!
  112 + Progress.say "I: #{username} data imported"
  113 +
  114 + profile = user.person
  115 + end
97 116
98 # import articles 117 # import articles
99 Dir.glob(File.join(IMPORT_DIR, username, 'articles', '*.xml')) do |xml| 118 Dir.glob(File.join(IMPORT_DIR, username, 'articles', '*.xml')) do |xml|
100 Progress.say "I: Trying to import #{username}'s article in #{xml} ..." 119 Progress.say "I: Trying to import #{username}'s article in #{xml} ..."
101 article = TinyMceArticle.new 120 article = TinyMceArticle.new
102 article.from_xml(File.read(xml)) 121 article.from_xml(File.read(xml))
103 - article.profile = person 122 + article.profile = profile
104 if article.valid? 123 if article.valid?
105 article.save! 124 article.save!
106 Progress.say "I: #{username}'s article #{article.name.inspect} imported" 125 Progress.say "I: #{username}'s article #{article.name.inspect} imported"
@@ -110,13 +129,19 @@ for username in ARGV @@ -110,13 +129,19 @@ for username in ARGV
110 end 129 end
111 130
112 if article.is_homepage 131 if article.is_homepage
113 - person.home_page = article  
114 - person.save! 132 + profile.home_page = article
  133 + profile.save!
115 Progress.say "I: Article #{article.name.inspect} is #{username}'s homepage!" 134 Progress.say "I: Article #{article.name.inspect} is #{username}'s homepage!"
116 end 135 end
117 136
118 - File.open("tmp/rewrite.txt", 'w+') do |file|  
119 - file.puts("#{article.id} #{url_for(article.url)}") 137 + orig_article_number = File.basename(xml).sub(/\.xml$/, '')
  138 +
  139 + File.open("tmp/rewrite.txt", 'a') do |file|
  140 + [ '', '.html' ].each do |ext|
  141 + [ '', '/[a-z.]*'].each do |prefix|
  142 + file.puts("Redirect #{prefix}/info/#{orig_article_number}#{ext} #{url_for(article.url)}")
  143 + end
  144 + end
120 Progress.say "I: Article with id = #{article.id} redirected to #{url_for(article.url)}" 145 Progress.say "I: Article with id = #{article.id} redirected to #{url_for(article.url)}"
121 end 146 end
122 147
@@ -132,7 +157,7 @@ for username in ARGV @@ -132,7 +157,7 @@ for username in ARGV
132 Progress.say "I: about to read data from #{file.filesystem_location} (xml: #{attachment_xml})" 157 Progress.say "I: about to read data from #{file.filesystem_location} (xml: #{attachment_xml})"
133 file.uploaded_data = FileData.new(file.filesystem_location, file.filename, file.content_type) 158 file.uploaded_data = FileData.new(file.filesystem_location, file.filename, file.content_type)
134 file.parent = article 159 file.parent = article
135 - file.profile = person 160 + file.profile = profile
136 Progress.say "I: Trying to save attachment \"#{file.filename}/#{file.slug}\"" 161 Progress.say "I: Trying to save attachment \"#{file.filename}/#{file.slug}\""
137 file.save! 162 file.save!
138 Progress.say "I: attachment added to article #{article.id}" 163 Progress.say "I: attachment added to article #{article.id}"
@@ -158,7 +183,7 @@ for username in ARGV @@ -158,7 +183,7 @@ for username in ARGV
158 data['menu']['items'].each do |item| 183 data['menu']['items'].each do |item|
159 links << { :name => item['title'], :address => item['url'] } 184 links << { :name => item['title'], :address => item['url'] }
160 end 185 end
161 - block = person.blocks.select { |block| block.class == LinkListBlock }[i-1] 186 + block = profile.blocks.select { |block| block.class == LinkListBlock }[i-1]
162 block.title = data['menu']['title'] 187 block.title = data['menu']['title']
163 block.links = links 188 block.links = links
164 block.save! 189 block.save!