Commit 9839cbc76f991a316f62605be79083123385045e
1 parent
7df56ce1
Exists in
master
and in
29 other branches
ActionItem1165: checkpoint
Showing
2 changed files
with
46 additions
and
20 deletions
Show diff stats
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! |