From c5fdcefa82de4c0b3bf5a69b6ec120827542a875 Mon Sep 17 00:00:00 2001 From: yasushiito Date: Tue, 4 Aug 2015 07:58:58 +0900 Subject: [PATCH] fix: bin tool --- app/controllers/application_controller.rb | 9 +- .../original_picture_licenses_controller.rb | 5 + app/controllers/panels_controller.rb | 4 +- app/controllers/pictures_controller.rb | 4 +- app/controllers/resource_pictures_controller.rb | 11 +- app/controllers/sheets_controller.rb | 6 +- app/models/picture.rb | 23 +- app/models/resource_picture.rb | 4 + app/views/original_pictures/show.html.erb | 2 +- app/views/panels/index.html.erb | 4 +- bin/panel_import.rb | 440 +++++++++------------ bin/preup.rb | 41 +- bin/uploader.rb | 75 +--- lib/manifest/controller/action/base.rb | 2 +- lib/manifest/controller/action/list.rb | 3 + lib/peta/leaf.rb | 12 +- 16 files changed, 267 insertions(+), 378 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 634b9c38..57214ee5 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -3,7 +3,7 @@ class ApplicationController < ActionController::Base protect_from_forgery with: :null_session, if: Proc.new {|c| c.request.format == 'application/json'} layout :devise_layout before_action :bf - before_action :authenticate_user_from_token!, if: -> {params[:email].present?} + before_action :authenticate_user_from_token!, if: -> {params[:email].present? or request.headers[:email]} def devise_layout if devise_controller? @@ -54,8 +54,8 @@ class ApplicationController < ActionController::Base end def authenticate_user_from_token! - user = User.find_by(email: params[:email]) - if Devise.secure_compare(user.try(:authentication_token), params[:auth_token]) + user = User.find_by(email: (params[:email] or request.headers[:email])) + if Devise.secure_compare(user.try(:authentication_token), (params[:token] or request.headers[:token])) sign_in user, store: false self.bf end @@ -150,7 +150,7 @@ class ApplicationController < ActionController::Base res = { :page_status => { :type => :default, :total => @finder.total_count, :total_page => @finder.total_pages, - :page => @finder.page, :page_size => @finder.limit_value, + :page => @finder.current_page, :page_size => @finder.limit_value, :item_name => @my_action.return_item_name }, # rails3.2 has problem @@ -160,6 +160,7 @@ class ApplicationController < ActionController::Base :list => list.map{|i| i.attributes} # :list => @finder.to_json } + p res render json: res.to_json } end diff --git a/app/controllers/original_picture_licenses_controller.rb b/app/controllers/original_picture_licenses_controller.rb index 7300cb31..dec43bf5 100644 --- a/app/controllers/original_picture_licenses_controller.rb +++ b/app/controllers/original_picture_licenses_controller.rb @@ -28,6 +28,11 @@ class OriginalPictureLicensesController < ApplicationController render main_app.new_resource_picture_path } format.json { + # response contains credits template + # + # confirm page need show credit + # however, building resource picture has not credit + # r = { :item => @item, :credits => render_to_string('credits', :formats => :html, :layout => false) diff --git a/app/controllers/panels_controller.rb b/app/controllers/panels_controller.rb index 27f6c4d3..70d8d5d1 100644 --- a/app/controllers/panels_controller.rb +++ b/app/controllers/panels_controller.rb @@ -50,8 +50,8 @@ class PanelsController < ApplicationController def show_html_format format format.html { if @operators.author - @new_scroll_items = assist_items('home', 'scrolls') - @fresh_scroll_items = assist_items('home', 'scroll_panels').map {|sp| sp.scroll} + @new_scroll_items = assist_items('home', 'scrolls', finder: :find_private, param: @operators) + @fresh_scroll_items = assist_items('home', 'scroll_panels', finder: :find_private, param: @operators).map {|sp| sp.scroll} end } end diff --git a/app/controllers/pictures_controller.rb b/app/controllers/pictures_controller.rb index 435b481e..62be192a 100644 --- a/app/controllers/pictures_controller.rb +++ b/app/controllers/pictures_controller.rb @@ -41,7 +41,7 @@ class PicturesController < ApplicationController def credit @picture = Picture.show(params[:id], @operators) - + respond_to do |format| format.html { render :layout => false } format.json { render :json => @picture.to_json} @@ -49,7 +49,7 @@ class PicturesController < ApplicationController end def search - @pictures = Picture.list_by_md5(params[:md5]) + @pictures = Picture.find_by_md5(params[:md5]) respond_to do |format| format.html diff --git a/app/controllers/resource_pictures_controller.rb b/app/controllers/resource_pictures_controller.rb index a392b4c2..118e49c3 100644 --- a/app/controllers/resource_pictures_controller.rb +++ b/app/controllers/resource_pictures_controller.rb @@ -5,7 +5,7 @@ class ResourcePicturesController < ApplicationController else before_action :authenticate_resource_reader, :only => [ :index, :show, :credit, - :by_original_picture, :by_license_group, :by_license, :by_artist + :by_original_picture, :by_license_group, :by_license, :by_artist, :search ] before_action :authenticate_user, :only => [:new, :create, :update, :destroy] before_action :authenticate_artist, :only => [:new, :create, :update, :destroy] @@ -106,4 +106,13 @@ class ResourcePicturesController < ApplicationController end end + def search + @resource_pictures = ResourcePicture.find_by_md5(params[:md5]) + + respond_to do |format| + format.html + format.json { render json: @resource_pictures.to_json } + end + end + end diff --git a/app/controllers/sheets_controller.rb b/app/controllers/sheets_controller.rb index 24c6d1b5..0aa475a5 100644 --- a/app/controllers/sheets_controller.rb +++ b/app/controllers/sheets_controller.rb @@ -29,10 +29,10 @@ class SheetsController < ApplicationController def show_html_format format format.html { if @operators.author - @new_panel_items = assist_items('home', 'panels') + @new_panel_items = assist_items('home', 'panels', finder: :find_private, param: @operators) - @new_story_items = assist_items('home', 'stories') - @fresh_story_items = assist_items('home', 'story_sheets').map {|ss| ss.story} + @new_story_items = assist_items('home', 'stories', finder: :find_private, param: @operators) + @fresh_story_items = assist_items('home', 'story_sheets', finder: :find_private, param: @operators).map {|ss| ss.story} end } end diff --git a/app/models/picture.rb b/app/models/picture.rb index e987d938..913b7f76 100644 --- a/app/models/picture.rb +++ b/app/models/picture.rb @@ -28,6 +28,14 @@ class Picture < Peta::Content find_index.where(artist_id: artist_id) end + scope :find_by_md5, -> (md5) do + find_index.where(md5: md5).order(updated_at: :desc) + end + + scope :find_by_md5_without_original_picture, -> (md5, original_picture_id) do + self.find_by_md5(md5).where.not(original_picture_id: original_picture_id).order(updated_at: :desc) + end + def supply_default end @@ -126,21 +134,8 @@ class Picture < Peta::Content self.license_extend.reverse < 0 ? [''] : ['', 'v', 'h', 'vh'] end - def self.find_by_md5 md5 - r = Picture.where(md5: md5).order(updated_at: :desc) - end - - def self.list_by_md5 md5, opid = nil - cond = if opid.blank? - {md5: md5} - else - ['md5 = :md5 and original_picture_id <> :opid', {md5: md5, opid: opid}] - end - r = Picture.where(cond).order(updated_at: :desc) - end - def self.exist_by_md5 md5, opid - Picture.list_by_md5(md5, opid).empty? ? false : true + Picture.find_by_md5(md5, opid).empty? ? false : true end def self.list_by_original_picture_where original_picture_id diff --git a/app/models/resource_picture.rb b/app/models/resource_picture.rb index 521a071c..42c8eb65 100644 --- a/app/models/resource_picture.rb +++ b/app/models/resource_picture.rb @@ -48,6 +48,10 @@ class ResourcePicture < Peta::Content find_index.where(artist_id: artist_id) end + scope :find_by_md5, -> (md5) do + find_index.where(md5: md5) + end + def self.pickup_item_name Picture.item_name end diff --git a/app/views/original_pictures/show.html.erb b/app/views/original_pictures/show.html.erb index 1b04b806..01e285a1 100644 --- a/app/views/original_pictures/show.html.erb +++ b/app/views/original_pictures/show.html.erb @@ -4,7 +4,7 @@ <%= link_to icon_tag('Prof'), original_picture_path(@item, :format => :prof) %> -<%= render 'exist', :pictures => Picture.list_by_md5(@item.md5, @item.id) %> +<%= render 'exist', :pictures => Picture.find_by_md5_without_original_picture(@item.md5, @item.id) %>

<%= notice %>

diff --git a/app/views/panels/index.html.erb b/app/views/panels/index.html.erb index 4c3e69cb..797a77c2 100644 --- a/app/views/panels/index.html.erb +++ b/app/views/panels/index.html.erb @@ -2,11 +2,11 @@

<%= t('panels.empty') %>

<% else %>

<%= link_to t('panels.filer'), main_app.panels_path(:mode => 'filer', :page => params[:page], :page_size => params[:page_size]) %>

- <%= render @pager.template_name, :pager => @pager %> + <%= paginate @pager %> <% @items.each do |panel| %> <%= render 'body', :panel => panel, :operators => @operators, :spot => nil %> <%= render 'panels/footer', :panel => panel, :operators => @operators %> <% end %> - <%= render @pager.template_name, :pager => @pager %> + <%= paginate @pager %> <%= render 'panels/licensed_pictures', :licensed_pictures => Panel.licensed_pictures(@items) %> <% end %> diff --git a/bin/panel_import.rb b/bin/panel_import.rb index da532bf7..fc8f576a 100644 --- a/bin/panel_import.rb +++ b/bin/panel_import.rb @@ -7,22 +7,26 @@ require 'json' require 'base64' if ARGV.size < 1 - puts "uploader.rb src_host src_auth dest_host dest_auth" + puts "uploader.rb src_host src_email src_token dest_host dest_email dest_token" puts "upload on child dirs" exit end src_host = ARGV[0] -src_auth = ARGV[1] -dest_host = ARGV[2] -dest_auth = ARGV[3] +src_email= ARGV[1] +src_token = ARGV[2] +dest_host = ARGV[3] +dest_email = ARGV[4] +dest_token = ARGV[5] class Importer - def initialize src_host, src_auth, dest_host, dest_auth + def initialize src_host, src_email, src_token, dest_host, dest_email, dest_token @src_host = src_host - @src_auth = src_auth + @src_email = src_email + @src_token = src_token @dest_host = dest_host - @dest_auth = dest_auth + @dest_email = dest_email + @dest_token = dest_token @src_licenses = {} self.licenses(@src_host).each do |l| @src_licenses[l['id'].to_i] = l @@ -32,28 +36,28 @@ class Importer @dest_licenses[l['name']] = l end @src_speech_balloon_templates = {} - self.speech_balloon_templates(@src_host, @src_auth).each do |sb| + self.speech_balloon_templates(@src_host, @src_email, @src_token).each do |sb| @src_speech_balloon_templates[sb['id'].to_i] = sb end @dest_speech_balloon_templates = {} - self.speech_balloon_templates(@dest_host, @dest_auth).each do |sb| + self.speech_balloon_templates(@dest_host, @src_email, @src_token).each do |sb| @dest_speech_balloon_templates[sb['name']] = sb end @src_writing_formats = {} - self.writing_formats( @dest_host, @dest_auth).each do |wf| + self.writing_formats(@dest_host, @src_email, @src_token).each do |wf| # self.writing_formats(@src_host, @src_auth).each do |wf| @src_writing_formats[wf['id'].to_i] = wf end @dest_writing_formats = {} - self.writing_formats(@dest_host, @dest_auth).each do |wf| + self.writing_formats(@dest_host, @dest_email, @dest_token).each do |wf| @dest_writing_formats[wf['name']] = wf end @src_system_pictures = {} - self.system_pictures(@src_host, @src_auth).each do |sp| + self.system_pictures(@src_host, @dest_email, @dest_token).each do |sp| @src_system_pictures[sp['id'].to_i] = sp end @dest_system_pictures = {} - self.system_pictures(@dest_host, @dest_auth).each do |sp| + self.system_pictures(@dest_host, @dest_email, @dest_token).each do |sp| @dest_system_pictures[sp['md5']] = sp end end @@ -76,292 +80,222 @@ class Importer res end - def speech_balloon_templates host, auth + def speech_balloon_templates host, email, token res = {} u = host + 'speech_balloon_templates.json' - r = RestClient.get(u, :params => {:page_size => 100, :auth_token => auth}) + r = RestClient.get(u, {:params => {:page_size => 100}}, {:email => email, :token => token}) JSON.parse r end - def writing_formats host, auth + def writing_formats host, email, token res = {} u = host + 'writing_formats.json' - r = RestClient.get(u, :params => {:page_size => 100, :auth_token => auth}) + r = RestClient.get(u, {:params => {:page_size => 100}}, {:email => email, :token => token}) JSON.parse r end - def system_pictures host, auth + def system_pictures host, email, token res = {} u = host + 'system_pictures.json' - r = RestClient.get(u, :params => {:page_size => 100, :auth_token => auth}) + r = RestClient.get(u, {:params => {:page_size => 100}}, {:email => email, :token => token}) JSON.parse r end - def panels host, auth + def panels host, email, token res = {} u = host + 'home/panels.json' - r = RestClient.get(u, :params => {:page_size => 100, :auth_token => auth}) - ary = JSON.parse r - ary.each do |panel| + r = RestClient.get(u, {:params => {:page_size => 100}}, {:email => email, :token => token}) + resp = JSON.parse r + status = resp['page_status'] + resp['list'].each do |panel| res[panel['id'].to_i] = panel end res end - def resource_picture md5, host, auth + def picture id, host, email, token res = {} - u = host + 'pictures/search.json' - r = RestClient.get(u, :params => {:md5 => md5, :auth_token => auth}) + u = host + 'pictures/' + r = RestClient.get(u, {:params => {:id => id}}, {:email => email, :token => token}) JSON.parse r end - def each_panel - self.panels(@src_host, @src_auth).each do |key, panel_json| - puts 'source panel:' + key.to_s - # 今はAPIの仕様が変わっているので、そのうち書き直す - elements = panel_json['elements'] - panel_json.delete 'elements' - c = true - elements.each do |e| - if e['link'] - element_name = 'panel_pictures' - puts 'pp:' + e['id'].to_s - rps = self.resource_picture e['picture']['md5'], @dest_host, @dest_auth - if rps.any? - rp = rps.first - puts 'picture ok(' + rp['id'].to_s + ')' - else - puts 'no picture' - c = false - break - end - src_ls_name = @src_licenses[e['picture']['license_id']]['name'].gsub /License\:/, 'Licenses:' - puts 'license:' + e['picture']['license_id'].to_s + '(' + src_ls_name + ')' - if dl = @dest_licenses[src_ls_name] - puts 'license ok(' + dl['id'].to_s + ')' - else - puts 'no license' - c = false - break - end - e['picture_id'] = rp['id'] - e.delete 'picture' - e.delete 'license' - elsif e['classname'] - element_name = 'speech_balloons' - puts 'sb:' + e['id'].to_s - src_sb_name = @src_speech_balloon_templates[e['speech_balloon_template_id']]['name'] - puts 'speech_balloon_template:' + e['speech_balloon_template_id'].to_s + '(' + src_sb_name + ')' - if dsb = @dest_speech_balloon_templates[src_sb_name] - puts 'speech_balloon_template ok(' + dsb['id'].to_s + ')' - else - puts 'no speech_balloon_template' - c = false - break - end - src_sp_md5 = @src_system_pictures[e['balloon']['system_picture_id']]['md5'] - puts 'balloon picture:' + e['balloon']['system_picture_id'].to_s + '(' + src_sp_md5 + ')' - if dsp = @dest_system_pictures[src_sp_md5] - puts 'balloon picture ok(' + dsp['id'].to_s + ')' - else - puts 'no balloon picture' - c = false - break - end - src_wf_name = @src_writing_formats[e['speech']['writing_format_id']]['name'] - puts 'speech writing_format:' + e['speech']['writing_format_id'].to_s + '(' + src_wf_name + ')' - if dwf = @dest_writing_formats[src_wf_name] - puts 'speech writing_format ok(' + dwf['id'].to_s + ')' - else - puts 'no speech writing_format' - c = false - break - end - e['speech_balloon_template_id'] = dsb['id'] - e["speech_balloon_template_settings"] = e["settings"] - e.delete 'settings' - e["speech_balloon_template_classname"] = dsb["classname"] - e.delete 'classname' - #e.delete 'speech_balloon_template' - balloon = e['balloon'] - e.delete 'balloon' - balloon.delete 'id' - balloon.delete 'speech_balloon_id' - balloon["speech_balloon_template_settings"] = e["settings"] - balloon.delete 'settings' - balloon['system_picture_id'] = dsp['id'] - balloon['speech_balloon_template_id'] = dsb['id'] - balloon["speech_balloon_template_classname"] = dsb["classname"] - - speech = e['speech'] - e.delete 'speech' - speech.delete 'id' - speech.delete 'speech_balloon_id' - speech["speech_balloon_template_settings"] = e["settings"] - speech.delete 'settings' - speech['speech_balloon_template_id'] = dsb['id'] - speech["speech_balloon_template_classname"] = dsb["classname"] - speech['writing_format_id'] = dwf['id'] - # speech["writing_format_classname"] = 'Pettanr' + dwf["classname"] - speech["writing_format_classname"] = dwf["classname"] - - e['balloon_attributes'] = balloon - e['speech_attributes'] = speech - elsif e['code'] - element_name = 'ground_colors' - puts 'gc:' + e['id'].to_s - elsif e['repeat'] - element_name = 'ground_pictures' - puts 'gp:' + e['id'].to_s - rps = self.resource_picture e['picture']['md5'], @dest_host, @dest_auth - if rps.any? - rp = rps.first - puts 'picture ok(' + rp['id'].to_s + ')' - else - puts 'no picture' - c = false - break - end - #e['license_id'] = dl['id'] - e['picture_id'] = rp['id'] - #e.delete 'license' - else - c = false - break - end - eid = e['id'] - e.delete 'id' - e.delete 'panel_id' - panel_json[element_name + '_attributes'] ||= {} - panel_json[element_name + '_attributes']['new' + eid.to_s] = e - end - next unless c - puts '============ importable' - panel_json.delete 'id' - panel_json.delete 'author' - panel_json.delete 'author_id' - panel_json.delete "created_at" - panel_json.delete 'updated_at' - yield panel_json - end + def search_resource_picture md5, host, email, token + res = {} + u = host + 'resource_pictures/search.json' + r = RestClient.get(u, {:params => {:md5 => md5}}, {:email => email, :token => token}) + JSON.parse r end - def each_opset - self.each_subdir do |filename| - imgfile = nil - lsname = nil - formname = nil - attr = nil - Dir.glob(filename + '/*') do |fn| - ext = File.extname(fn).downcase - case ext - when '.json' - json = JSON.parse(File.open(fn).read) - lsname = json["license_name"] - formname = json["formname"] - attr = json["attributes"] - when '.png', '.gif', '.jpeg' - imgfile = fn - end - end - if imgfile and lsname and formname and attr - yield imgfile, lsname, formname, attr - end + def prepare_panel_picture panel_picture + element_name = 'panel_pictures' + puts 'panel_picture:' + panel_picture['id'].to_s + # get picture from src + picture = self.picture panel_picture['picture_id'], @src_host, @src_email, @src_token + puts 'picture:' + picture['id'].to_s + # get resource_picture if exists? + # choose latest resource_picture if find same rp at server + rps = self.search_resource_picture picture['md5'], @dest_host, @dest_email, @dest_token + if rps.any? + rp = rps.first + puts 'resource picture ok:' + rp['id'].to_s + '(' + rp['md5'].to_s + ')' + else + puts 'no picture' + c = false + return + end + # get lisence's id if exists? + src_ls_name = @src_licenses[picture['license_id']]['name'].gsub /License\:/, 'Licenses:' + puts 'license:' + picture['license_id'].to_s + '(' + src_ls_name + ')' + if dl = @dest_licenses[src_ls_name] + puts 'license ok(' + dl['id'].to_s + ')' + else + puts 'no license' + c = false + return end + panel_picture['picture_id'] = rp['picture_id'] end - def upload fn - oid = nil - b = Base64.encode64(File.open(fn, 'rb').read) - u = @host + 'original_pictures' - begin - r = RestClient.post(u, - {:original_picture => {:file => b}, :auth_token => @auth}.to_json, - :content_type => :json, :accept => :json - ) - o = JSON.parse r - oid = o['id'] - rescue - puts ' failed: ' + r.to_s + def prepare_speech_balloon speech_balloon + element_name = 'speech_balloons' + puts 'sb:' + e['id'].to_s + src_sb_name = @src_speech_balloon_templates[e['speech_balloon_template_id']]['name'] + puts 'speech_balloon_template:' + e['speech_balloon_template_id'].to_s + '(' + src_sb_name + ')' + if dsb = @dest_speech_balloon_templates[src_sb_name] + puts 'speech_balloon_template ok(' + dsb['id'].to_s + ')' + else + puts 'no speech_balloon_template' + c = false + return + end + src_sp_md5 = @src_system_pictures[e['balloon']['system_picture_id']]['md5'] + puts 'balloon picture:' + e['balloon']['system_picture_id'].to_s + '(' + src_sp_md5 + ')' + if dsp = @dest_system_pictures[src_sp_md5] + puts 'balloon picture ok(' + dsp['id'].to_s + ')' + else + puts 'no balloon picture' + c = false + return end - oid + src_wf_name = @src_writing_formats[e['speech']['writing_format_id']]['name'] + puts 'speech writing_format:' + e['speech']['writing_format_id'].to_s + '(' + src_wf_name + ')' + if dwf = @dest_writing_formats[src_wf_name] + puts 'speech writing_format ok(' + dwf['id'].to_s + ')' + else + puts 'no speech writing_format' + c = false + return + end + e['speech_balloon_template_id'] = dsb['id'] + e["speech_balloon_template_settings"] = e["settings"] + e.delete 'settings' + e["speech_balloon_template_classname"] = dsb["classname"] + e.delete 'classname' + #e.delete 'speech_balloon_template' + balloon = e['balloon'] + e.delete 'balloon' + balloon.delete 'id' + balloon.delete 'speech_balloon_id' + balloon["speech_balloon_template_settings"] = e["settings"] + balloon.delete 'settings' + balloon['system_picture_id'] = dsp['id'] + balloon['speech_balloon_template_id'] = dsb['id'] + balloon["speech_balloon_template_classname"] = dsb["classname"] + + speech = e['speech'] + e.delete 'speech' + speech.delete 'id' + speech.delete 'speech_balloon_id' + speech["speech_balloon_template_settings"] = e["settings"] + speech.delete 'settings' + speech['speech_balloon_template_id'] = dsb['id'] + speech["speech_balloon_template_classname"] = dsb["classname"] + speech['writing_format_id'] = dwf['id'] +# speech["writing_format_classname"] = 'Pettanr' + dwf["classname"] + speech["writing_format_classname"] = dwf["classname"] + + e['balloon_attributes'] = balloon + e['speech_attributes'] = speech end - def publish oid, lgid, rp - res = nil - u = @host + 'resource_pictures' - attr = { - :original_picture_id => oid, - :original_picture_license_group => { - :original_picture_id => oid, :license_group_id => lgid - }, - :resource_picture => { - :original_picture_id => oid, - :license_id => rp['license_id'], - :artist_name => rp['artist_name'], - :system_picture_id => rp['system_picture_id'], - :license_group_classname => rp['license_group_classname'], - :license_group_settings => rp['license_group_settings'], - :credit_picture_settings => rp['credit_picture_settings'], - :license_settings => rp['license_settings'] - }, - :auth_token => @auth - } - begin - r = RestClient.post(u, - attr.to_json, - :content_type => :json, :accept => :json - ) - res = JSON.parse r - rescue - puts ' failed: ' + r.to_s + def prepare_ground_color ground_color + element_name = 'ground_colors' + puts 'ground_color:' + ground_color['id'].to_s + end + + def prepare_ground_picture ground_picture + element_name = 'ground_pictures' + puts 'ground_picture:' + ground_picture['id'].to_s + rps = self.resource_picture ground_picture['picture']['md5'], @dest_host, @dest_auth + if rps.any? + rp = rps.first + puts 'picture ok(' + rp['id'].to_s + ')' + else + puts 'no picture' + c = false + return end - res + #e['license_id'] = dl['id'] + ground_picture['picture_id'] = rp['id'] + #e.delete 'license' + end + + def add_attribute panel_json, attribute + eid = e['id'] + e.delete 'id' + e.delete 'panel_id' + panel_json[element_name + '_attributes'] ||= {} + panel_json[element_name + '_attributes']['new' + eid.to_s] = e end - def publish_all - each_opset do |imgfile, lsname, formname, attr| - puts 'uploading: ' + imgfile - oid = self.upload imgfile - next unless oid - puts 'success: ' + oid.to_s - ls = @licenses[lsname] - unless ls - puts 'not detect licenses: ' + lsname.to_s - next + def each_panel + self.panels(@src_host, @src_email, @src_token).each do |key, panel_json| + puts 'source panel:' + key.to_s + c = true + panel_json['panel_pictures'].each do |panel_picture| + self.prepare_panel_picture panel_picture + self.add_attribute panel_json, panel_picture + end + panel_json['speech_balloons'].each do |speech_balloon| + self.prepare_speech_balloon speech_balloon + end + panel_json['ground_colors'].each do |ground_color| + self.prepare_ground_color ground_color end - lsid = ls['id'] - lgid = ls['license_group_id'].to_i - lg = @license_groups[lgid] - en = lg['classname'] - puts 'building: ' + formname - rp = self.resource_picture oid, lgid, lsid, en, formname, attr - next unless rp - puts 'publishing: ' + lsname - r = self.publish oid, lgid, rp - puts 'success: ' + r['id'].to_s + panel_json['ground_pictures'].each do |ground_picture| + self.prepare_ground_picture ground_picture + end + next unless c + puts '============ importable' + panel_json.delete 'id' + panel_json.delete 'author' + panel_json.delete 'author_id' + panel_json.delete "created_at" + panel_json.delete 'updated_at' + yield panel_json end end end -u = Importer.new src_host, src_auth, dest_host, dest_auth +u = Importer.new src_host, src_email, src_token, dest_host, dest_email, dest_token u.each_panel do |panel_json| - u = dest_host + 'panels' - File.open('/Sites/panel_create.json', 'w') do |f| + u = dest_host + 'panels' + # write log + File.open('/Sites/panel_create.json', 'w') do |f| f.write JSON.pretty_generate(panel_json) - end - begin - r = RestClient.post(u, - {:json => panel_json, :auth_token => dest_auth}.to_json, - :content_type => :json, :accept => :json - ) - res = JSON.parse r - rescue - puts ' failed: ' + r.to_s - end - # break + end + begin + r = RestClient.post(u, + {:json => panel_json}.to_json, + :content_type => :json, :accept => :json, :email => dest_email, :token => dest_token + ) + res = JSON.parse r + rescue + puts ' failed: ' + r.to_s + end end diff --git a/bin/preup.rb b/bin/preup.rb index c902cb4c..3bc80a65 100644 --- a/bin/preup.rb +++ b/bin/preup.rb @@ -4,16 +4,16 @@ require 'fileutils' require 'json' if ARGV.size < 1 - puts "preup.rb dirname {license.json}" + puts "preup.rb default.attr" exit end -dirname = File.expand_path ARGV[0] -ls = if ARGV.size > 1 and File.exist?(ARGV[1]) - ARGV[1] -else - nil -end +dirname = File.expand_path(File.dirname(ARGV[0])) +default_attr_file = ARGV[0] + +puts dirname +puts default_attr_file +default_attr = JSON.parse(File.open(default_attr_file, 'r').read) Dir.glob(dirname + '/*') do |fn| ext = File.extname(fn).downcase @@ -21,30 +21,9 @@ Dir.glob(dirname + '/*') do |fn| case ext when '.png', '.gif', '.jpeg' puts fn - d = File.dirname(fn) + '/' + bn - Dir.mkdir(d) unless File.exist?(d) - FileUtils.cp fn, d + '/' + File.basename(fn) - if ls - puts 'with license:' + ls - lsfn = d + '/' + File.basename(ls) - attrfn = d + '/attributes.json' - if File.exist?(attrfn) - puts 'get attributes.json' - attr = nil - File.open(attrfn, 'r') do |f| - attr = JSON.parse(f.read) - end - json = JSON.parse(open(ls).read) - if json['attributes'] and attr - json['attributes'] = attr - end - File.open(lsfn, 'w') do |f| - f.write JSON.pretty_generate(json) - end - else - FileUtils.cp ls, lsfn - end - end + custom_attr_file = File.dirname(fn) + '/' + bn + '.json' + FileUtils.cp(default_attr_file, custom_attr_file) unless File.exist?(custom_attr_file) + custom_attr = JSON.parse(File.open(custom_attr_file, 'r').read) end end diff --git a/bin/uploader.rb b/bin/uploader.rb index aa56f49f..e8fa6edd 100644 --- a/bin/uploader.rb +++ b/bin/uploader.rb @@ -7,23 +7,23 @@ require 'json' require 'base64' if ARGV.size < 1 - puts "uploader.rb host dirname attr.json lsname auth" + puts "uploader.rb host dirname license_name email token" puts "upload on child dirs" exit end host = ARGV[0] dirname = ARGV[1] -attr_fn = ARGV[2] -lsname = ARGV[3] +lsname = ARGV[2] +email = ARGV[3] auth = ARGV[4] class Uploader - def initialize host, dirname, attr_fn, lsname, auth + def initialize host, dirname, lsname, email, auth @host = host @dirname = dirname - @attr_fn = attr_fn @lsname = lsname + @email = email @auth = auth @licenses = self.licenses @license_groups = self.license_groups @@ -32,18 +32,18 @@ class Uploader def licenses res = {} u = @host + 'licenses.json' - r = RestClient.get(u) + r = RestClient.get(u, {email: @email, token: @auth}) ary = JSON.parse r ary['list'].each do |l| res[l['name']] = l end res end - + def license_groups res = {} u = @host + 'license_groups.json' - r = RestClient.get(u) + r = RestClient.get(u, {email: @email, token: @auth}) ary = JSON.parse r ary['list'].each do |l| res[l['id'].to_i] = l @@ -51,20 +51,15 @@ class Uploader res end - def each_subdir - Dir.glob File.expand_path(@dirname) + '/*' do |filename| - if File.directory?(filename) - yield filename - end - end - end - def each_op Dir.glob File.expand_path(@dirname) + '/*' do |fn| ext = File.extname(fn).downcase + bn = File.basename(fn, ".*") case ext when '.png', '.gif', '.jpeg' - yield fn + custom_attr_file = File.dirname(fn) + '/' + bn + '.json' + attr = JSON.parse(File.open(custom_attr_file).read) + yield fn, attr end end end @@ -75,8 +70,8 @@ class Uploader u = @host + 'original_pictures' begin r = RestClient.post(u, - {:original_picture => {:file => b}, :auth_token => @auth}.to_json, - :content_type => :json, :accept => :json + {:original_picture => {:file => b}}.to_json, + :content_type => :json, :accept => :json, :email => @email, :token => @auth ) o = JSON.parse r oid = o['id'] @@ -95,41 +90,14 @@ class Uploader :license_id => lsid, :license_group_module_name => en, :license_settings => attr, - :auth_token => @auth - } - begin - r = RestClient.post(u, - param.to_json, - :content_type => :json, :accept => :json - ) - rp = JSON.parse r - rescue - puts ' failed: ' + u.to_s - puts param - puts r.to_s - end - rp - end - - #confirm - def resource_picture oid, lgid, lsid, en, formname, attr - rp = nil - u = @host + en.tableize + '/attributes' - attr['license_id'] = lsid - param = { - :original_picture_id => oid, - :original_picture_license_group => { - :original_picture_id => oid, :license_group_id => lgid - }, - :auth_token => @auth } - param[:attributes] = attr begin r = RestClient.post(u, param.to_json, - :content_type => :json, :accept => :json + :content_type => :json, :accept => :json, :email => @email, :token => @auth ) - rp = JSON.parse r + resp = JSON.parse r + rp = resp['item'] rescue puts ' failed: ' + u.to_s puts param @@ -147,12 +115,11 @@ class Uploader :original_picture_id => oid, :license_group_id => lgid }, :resource_picture => rp, - :auth_token => @auth } begin r = RestClient.post(u, attr.to_json, - :content_type => :json, :accept => :json + :content_type => :json, :accept => :json, :email => @email, :token => @auth ) res = JSON.parse r rescue @@ -162,8 +129,7 @@ class Uploader end def publish_all - attr = JSON.parse(File.open(@attr_fn).read) - each_op do |imgfile| + each_op do |imgfile, attr| puts 'uploading: ' + imgfile oid = self.upload imgfile next unless oid @@ -186,7 +152,6 @@ class Uploader end -u = Uploader.new host, dirname, attr_fn, lsname, auth - +u = Uploader.new host, dirname, lsname, email, auth u.publish_all diff --git a/lib/manifest/controller/action/base.rb b/lib/manifest/controller/action/base.rb index 720cb2bd..063e1914 100644 --- a/lib/manifest/controller/action/base.rb +++ b/lib/manifest/controller/action/base.rb @@ -37,7 +37,7 @@ module Manifest end def has_alias_action - @alias.any? + @alias and @alias.any? end def alias_action diff --git a/lib/manifest/controller/action/list.rb b/lib/manifest/controller/action/list.rb index dec4beb1..873755d7 100644 --- a/lib/manifest/controller/action/list.rb +++ b/lib/manifest/controller/action/list.rb @@ -25,6 +25,9 @@ module Manifest end def find options = {} + if has_alias_action + return self.alias_action.find options + end self.finder(options).order( self.order_sql(options[:order], options[:direction]) ).page(options[:page]).per(options[:page_size]) diff --git a/lib/peta/leaf.rb b/lib/peta/leaf.rb index a736a719..f7a2b107 100644 --- a/lib/peta/leaf.rb +++ b/lib/peta/leaf.rb @@ -117,25 +117,19 @@ module Peta end def insert_shift - self.class.update_all('t = t + 1', - [self.binder_key + ' = ? and t >= ?', self.binder_id, self.t] - ) + self.class.where([self.binder_key + ' = ? and t >= ?', self.binder_id, self.t]).update_all('t = t + 1') end def lesser_shift old_t self.t = 0 if self.t < 0 - self.class.update_all('t = t + 1', - [self.binder_key + ' = ? and (t >= ? and t < ?)', self.binder_id, self.t, old_t] - ) + self.class.where([self.binder_key + ' = ? and (t >= ? and t < ?)', self.binder_id, self.t, old_t]).update_all('t = t + 1') end def higher_shift old_t nf = self.class.find_t(self.binder_id, self.t) max_t = self.class.max_t(self.binder_id).to_i self.t = max_t if self.t > max_t - self.class.update_all('t = t - 1', - [self.binder_key + ' = ? and (t > ? and t <= ?)', self.binder_id, old_t, self.t] - ) + self.class.where([self.binder_key + ' = ? and (t > ? and t <= ?)', self.binder_id, old_t, self.t]).update_all('t = t - 1') end def update_shift old_t -- 2.11.0