3 require 'active_support/all'
\r
4 require 'rest_client'
\r
10 puts "panel_import.rb src_host src_email src_token dest_host dest_email dest_token"
\r
18 dest_email = ARGV[4]
\r
19 dest_token = ARGV[5]
\r
22 def initialize src_host, src_email, src_token, dest_host, dest_email, dest_token
\r
23 @src_host = src_host
\r
24 @src_email = src_email
\r
25 @src_token = src_token
\r
26 @dest_host = dest_host
\r
27 @dest_email = dest_email
\r
28 @dest_token = dest_token
\r
30 self.licenses(@src_host).each do |l|
\r
31 @src_licenses[l['id'].to_i] = l
\r
34 self.licenses(@dest_host).each do |l|
\r
35 @dest_licenses[l['name']] = l
\r
37 @src_speech_balloon_templates = {}
\r
38 self.speech_balloon_templates(@src_host, @src_email, @src_token).each do |sb|
\r
39 @src_speech_balloon_templates[sb['id'].to_i] = sb
\r
41 @dest_speech_balloon_templates = {}
\r
42 self.speech_balloon_templates(@dest_host, @dest_email, @dest_token).each do |sb|
\r
43 @dest_speech_balloon_templates[sb['name']] = sb
\r
45 @src_writing_formats = {}
\r
46 self.writing_formats(@src_host, @src_email, @src_token).each do |wf|
\r
47 @src_writing_formats[wf['id'].to_i] = wf
\r
49 @dest_writing_formats = {}
\r
50 self.writing_formats(@dest_host, @dest_email, @dest_token).each do |wf|
\r
51 @dest_writing_formats[wf['name']] = wf
\r
53 @src_system_pictures = {}
\r
54 self.system_pictures(@src_host, @dest_email, @dest_token).each do |sp|
\r
55 @src_system_pictures[sp['id'].to_i] = sp
\r
57 @dest_system_pictures = {}
\r
58 self.system_pictures(@dest_host, @dest_email, @dest_token).each do |sp|
\r
59 @dest_system_pictures[sp['md5']] = sp
\r
65 u = host + 'licenses.json'
\r
66 r = RestClient.get(u, :params => {:page_size => 100})
\r
71 def license_groups host
\r
73 u = host + 'license_groups.json'
\r
74 r = RestClient.get(u, :params => {:page_size => 100})
\r
78 res[l['id'].to_i] = l
\r
83 def speech_balloon_templates host, email, token
\r
85 u = host + 'speech_balloon_templates.json'
\r
86 r = RestClient.get(u, {:params => {:page_size => 100}, :email => email, :token => token})
\r
91 def writing_formats host, email, token
\r
93 u = host + 'writing_formats.json'
\r
94 r = RestClient.get(u, {:params => {:page_size => 100}, :email => email, :token => token})
\r
99 def system_pictures host, email, token
\r
101 u = host + 'system_pictures.json'
\r
102 r = RestClient.get(u, {:params => {:page_size => 100}, :email => email, :token => token})
\r
107 def panels host, email, token
\r
109 u = host + 'home/panels.json'
\r
110 r = RestClient.get(u, {:params => {:page_size => 100}, :email => email, :token => token})
\r
111 resp = JSON.parse r
\r
112 status = resp['page_status']
\r
113 resp['list'].each do |panel|
\r
114 res[panel['id'].to_i] = panel
\r
119 def panel pid, host, email, token
\r
121 u = host + 'panels/' + pid.to_s + '.json'
\r
122 r = RestClient.get(u, {:params => {:with_elements => true}, :email => email, :token => token})
\r
126 def picture id, host, email, token
\r
127 u = host + 'pictures/' + id.to_s + '.json'
\r
128 r = RestClient.get(u, {:email => email, :token => token})
\r
132 def search_resource_picture md5, host, email, token
\r
134 u = host + 'resource_pictures/search.json'
\r
135 r = RestClient.get(u, {:params => {:md5 => md5}, :email => email, :token => token})
\r
139 def prepare_panel_pictures panel_picture
\r
140 element_name = 'panel_pictures'
\r
141 puts 'panel_picture:' + panel_picture['id'].to_s
\r
142 # get picture from src
\r
143 picture = self.picture panel_picture['picture_id'], @src_host, @src_email, @src_token
\r
144 puts 'picture:' + picture['id'].to_s
\r
145 # get resource_picture if exists?
\r
146 # choose latest resource_picture if find same rp at server
\r
147 rps = self.search_resource_picture picture['md5'], @dest_host, @dest_email, @dest_token
\r
150 puts 'resource picture ok:' + rp['id'].to_s + '(' + rp['md5'].to_s + ')'
\r
156 # get lisence's id if exists?
\r
157 src_ls_name = @src_licenses[picture['license_id']]['name']
\r
158 puts 'license:' + picture['license_id'].to_s + '(' + src_ls_name + ')'
\r
159 if dl = @dest_licenses[src_ls_name]
\r
160 puts 'license ok(' + dl['id'].to_s + ')'
\r
166 panel_picture['picture_id'] = rp['picture_id']
\r
170 def prepare_speech_balloons speech_balloon
\r
171 element_name = 'speech_balloons'
\r
172 puts 'sb:' + speech_balloon['id'].to_s
\r
173 src_sb_name = @src_speech_balloon_templates[speech_balloon['speech_balloon_template_id']]['name']
\r
174 puts 'speech_balloon_template:' + speech_balloon['speech_balloon_template_id'].to_s + '(' + src_sb_name + ')'
\r
175 if dsb = @dest_speech_balloon_templates[src_sb_name]
\r
176 puts 'speech_balloon_template ok(' + dsb['id'].to_s + ')'
\r
178 puts 'no speech_balloon_template'
\r
182 src_sp_md5 = @src_system_pictures[speech_balloon['balloon']['system_picture_id']]['md5']
\r
183 puts 'balloon picture:' + speech_balloon['balloon']['system_picture_id'].to_s + '(' + src_sp_md5 + ')'
\r
184 if dsp = @dest_system_pictures[src_sp_md5]
\r
185 puts 'balloon picture ok(' + dsp['id'].to_s + ')'
\r
187 puts 'no balloon picture'
\r
191 src_wf_name = @src_writing_formats[speech_balloon['speech']['writing_format_id']]['name']
\r
192 puts 'speech writing_format:' + speech_balloon['speech']['writing_format_id'].to_s + '(' + src_wf_name + ')'
\r
193 if dwf = @dest_writing_formats[src_wf_name]
\r
194 puts 'speech writing_format ok(' + dwf['id'].to_s + ')'
\r
196 puts 'no speech writing_format'
\r
200 speech_balloon['speech_balloon_template_id'] = dsb['id']
\r
201 speech_balloon["speech_balloon_template_settings"] = speech_balloon["settings"]
\r
202 speech_balloon.delete 'settings'
\r
203 speech_balloon["speech_balloon_template_module_name"] = dsb["module_name"]
\r
204 speech_balloon.delete 'module_name'
\r
205 #e.delete 'speech_balloon_template'
\r
206 balloon = speech_balloon['balloon']
\r
207 speech_balloon.delete 'balloon'
\r
208 balloon.delete 'id'
\r
209 balloon.delete 'speech_balloon_id'
\r
210 balloon["speech_balloon_template_settings"] = speech_balloon["settings"]
\r
211 balloon.delete 'settings'
\r
212 balloon['system_picture_id'] = dsp['id']
\r
213 balloon['speech_balloon_template_id'] = dsb['id']
\r
214 balloon["speech_balloon_template_module_name"] = dsb["module_name"]
\r
216 speech = speech_balloon['speech']
\r
217 speech_balloon.delete 'speech'
\r
219 speech.delete 'speech_balloon_id'
\r
220 speech["speech_balloon_template_settings"] = speech_balloon["settings"]
\r
221 speech.delete 'settings'
\r
222 speech['speech_balloon_template_id'] = dsb['id']
\r
223 speech["speech_balloon_template_module_name"] = dsb["module_name"]
\r
224 speech['writing_format_id'] = dwf['id']
\r
225 speech["writing_format_module_name"] = dwf["module_name"]
\r
227 speech_balloon['balloon_attributes'] = balloon
\r
228 speech_balloon['speech_attributes'] = speech
\r
232 def prepare_ground_colors ground_color
\r
233 element_name = 'ground_colors'
\r
234 puts 'ground_color:' + ground_color['id'].to_s
\r
238 def prepare_ground_pictures ground_picture
\r
239 element_name = 'ground_pictures'
\r
240 puts 'ground_picture:' + ground_picture['id'].to_s
\r
241 rps = self.resource_picture ground_picture['picture']['md5'], @dest_host, @dest_email, @dest_token
\r
244 puts 'picture ok(' + rp['id'].to_s + ')'
\r
250 #e['license_id'] = dl['id']
\r
251 ground_picture['picture_id'] = rp['id']
\r
255 def add_attribute element_name, panel_json, attribute
\r
256 eid = attribute['id']
\r
257 attribute.delete 'id'
\r
258 attribute.delete 'panel_id'
\r
259 panel_json[element_name + '_attributes'] ||= []
\r
260 panel_json[element_name + '_attributes'].push attribute
\r
263 def edit_elements panel_json, element_name
\r
265 (panel_json[element_name] || {}).each do |attr|
\r
266 r = self.__send__ 'prepare_' + element_name, attr
\r
268 self.add_attribute element_name, panel_json, attr
\r
270 panel_json.delete element_name
\r
275 self.panels(@src_host, @src_email, @src_token).each do |key, attrs|
\r
276 puts 'source panel:' + key.to_s
\r
277 panel_json = self.panel(key, @src_host, @src_email, @src_token)
\r
279 ['panel_pictures', 'speech_balloons', 'ground_pictures', 'ground_colors'].each do |element_name|
\r
280 r = self.edit_elements(panel_json, element_name)
\r
284 puts '============ importable'
\r
285 panel_json.delete 'id'
\r
286 panel_json.delete 'author'
\r
287 panel_json.delete 'author_id'
\r
288 panel_json.delete "created_at"
\r
289 panel_json.delete 'updated_at'
\r
296 u = Importer.new src_host, src_email, src_token, dest_host, dest_email, dest_token
\r
298 u.each_panel do |panel_json|
\r
299 u = dest_host + 'panels'
\r
301 File.open('/Sites/panel_create.json', 'w') do |f|
\r
302 f.write JSON.pretty_generate(panel_json)
\r
305 r = RestClient.post(u,
\r
306 {:panel => panel_json}.to_json,
\r
307 :content_type => :json, :accept => :json, :email => dest_email, :token => dest_token
\r
311 puts ' failed: ' + r.to_s
\r