OSDN Git Service

fix: bin tool
authoryasushiito <yas@pen-chan.jp>
Mon, 3 Aug 2015 22:58:58 +0000 (07:58 +0900)
committeryasushiito <yas@pen-chan.jp>
Mon, 3 Aug 2015 22:58:58 +0000 (07:58 +0900)
16 files changed:
app/controllers/application_controller.rb
app/controllers/original_picture_licenses_controller.rb
app/controllers/panels_controller.rb
app/controllers/pictures_controller.rb
app/controllers/resource_pictures_controller.rb
app/controllers/sheets_controller.rb
app/models/picture.rb
app/models/resource_picture.rb
app/views/original_pictures/show.html.erb
app/views/panels/index.html.erb
bin/panel_import.rb
bin/preup.rb
bin/uploader.rb
lib/manifest/controller/action/base.rb
lib/manifest/controller/action/list.rb
lib/peta/leaf.rb

index 634b9c3..57214ee 100644 (file)
@@ -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
index 7300cb3..dec43bf 100644 (file)
@@ -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)
index 27f6c4d..70d8d5d 100644 (file)
@@ -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
index 435b481..62be192 100644 (file)
@@ -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
index a392b4c..118e49c 100644 (file)
@@ -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
index 24c6d1b..0aa475a 100644 (file)
@@ -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
index e987d93..913b7f7 100644 (file)
@@ -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
index 521a071..42c8eb6 100644 (file)
@@ -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
index 1b04b80..01e285a 100644 (file)
@@ -4,7 +4,7 @@
   <%= link_to icon_tag('Prof'), original_picture_path(@item, :format => :prof) %>
 </h1>
 
-<%= 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) %>
 <p id="notice"><%= notice %></p>
 
 <table class="no-border">
index 4c3e69c..797a77c 100644 (file)
@@ -2,11 +2,11 @@
   <h2><%= t('panels.empty') %></h2>
 <% else %>
   <h2><%= link_to t('panels.filer'), main_app.panels_path(:mode => 'filer', :page => params[:page], :page_size => params[:page_size]) %></h2>
-  <%= 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 %>
index da532bf..fc8f576 100644 (file)
@@ -7,22 +7,26 @@ require 'json'
 require 'base64'\r
 \r
 if ARGV.size < 1\r
-  puts "uploader.rb src_host src_auth dest_host dest_auth"\r
+  puts "uploader.rb src_host src_email src_token dest_host dest_email dest_token"\r
   puts "upload on child dirs"\r
   exit\r
 end\r
 \r
 src_host = ARGV[0]\r
-src_auth = ARGV[1]\r
-dest_host = ARGV[2]\r
-dest_auth = ARGV[3]\r
+src_email= ARGV[1]\r
+src_token = ARGV[2]\r
+dest_host = ARGV[3]\r
+dest_email = ARGV[4]\r
+dest_token = ARGV[5]\r
 \r
 class Importer\r
-  def initialize src_host, src_auth, dest_host, dest_auth\r
+  def initialize src_host, src_email, src_token, dest_host, dest_email, dest_token\r
     @src_host = src_host\r
-    @src_auth = src_auth\r
+    @src_email = src_email\r
+    @src_token = src_token\r
     @dest_host = dest_host\r
-    @dest_auth = dest_auth\r
+    @dest_email = dest_email\r
+    @dest_token = dest_token\r
     @src_licenses = {}\r
     self.licenses(@src_host).each do |l|\r
       @src_licenses[l['id'].to_i] = l\r
@@ -32,28 +36,28 @@ class Importer
       @dest_licenses[l['name']] = l\r
     end\r
     @src_speech_balloon_templates = {}\r
-    self.speech_balloon_templates(@src_host, @src_auth).each do |sb|\r
+    self.speech_balloon_templates(@src_host, @src_email, @src_token).each do |sb|\r
       @src_speech_balloon_templates[sb['id'].to_i] = sb\r
     end\r
     @dest_speech_balloon_templates = {}\r
-    self.speech_balloon_templates(@dest_host, @dest_auth).each do |sb|\r
+    self.speech_balloon_templates(@dest_host, @src_email, @src_token).each do |sb|\r
       @dest_speech_balloon_templates[sb['name']] = sb\r
     end\r
     @src_writing_formats = {}\r
-    self.writing_formats(          @dest_host, @dest_auth).each do |wf|\r
+    self.writing_formats(@dest_host, @src_email, @src_token).each do |wf|\r
   #  self.writing_formats(@src_host, @src_auth).each do |wf|\r
       @src_writing_formats[wf['id'].to_i] = wf\r
     end\r
     @dest_writing_formats = {}\r
-    self.writing_formats(@dest_host, @dest_auth).each do |wf|\r
+    self.writing_formats(@dest_host, @dest_email, @dest_token).each do |wf|\r
       @dest_writing_formats[wf['name']] = wf\r
     end\r
     @src_system_pictures = {}\r
-    self.system_pictures(@src_host, @src_auth).each do |sp|\r
+    self.system_pictures(@src_host, @dest_email, @dest_token).each do |sp|\r
       @src_system_pictures[sp['id'].to_i] = sp\r
     end\r
     @dest_system_pictures = {}\r
-    self.system_pictures(@dest_host, @dest_auth).each do |sp|\r
+    self.system_pictures(@dest_host, @dest_email, @dest_token).each do |sp|\r
       @dest_system_pictures[sp['md5']] = sp\r
     end\r
   end\r
@@ -76,292 +80,222 @@ class Importer
     res\r
   end\r
   \r
-  def speech_balloon_templates host, auth\r
+  def speech_balloon_templates host, email, token\r
     res = {}\r
     u = host + 'speech_balloon_templates.json'\r
-    r = RestClient.get(u, :params => {:page_size  => 100, :auth_token => auth})\r
+    r = RestClient.get(u, {:params => {:page_size  => 100}}, {:email => email, :token => token})\r
     JSON.parse r\r
   end\r
   \r
-  def writing_formats host, auth\r
+  def writing_formats host, email, token\r
     res = {}\r
     u = host + 'writing_formats.json'\r
-    r = RestClient.get(u, :params => {:page_size  => 100, :auth_token => auth})\r
+    r = RestClient.get(u, {:params => {:page_size  => 100}}, {:email => email, :token => token})\r
     JSON.parse r\r
   end\r
   \r
-  def system_pictures host, auth\r
+  def system_pictures host, email, token\r
     res = {}\r
     u = host + 'system_pictures.json'\r
-    r = RestClient.get(u, :params => {:page_size  => 100, :auth_token => auth})\r
+    r = RestClient.get(u, {:params => {:page_size  => 100}}, {:email => email, :token => token})\r
     JSON.parse r\r
   end\r
   \r
-  def panels host, auth\r
+  def panels host, email, token\r
     res = {}\r
     u = host + 'home/panels.json'\r
-    r = RestClient.get(u, :params => {:page_size  => 100, :auth_token => auth})\r
-    ary = JSON.parse r\r
-    ary.each do |panel|\r
+    r = RestClient.get(u, {:params => {:page_size  => 100}}, {:email => email, :token => token})\r
+    resp = JSON.parse r\r
+    status = resp['page_status']\r
+    resp['list'].each do |panel|\r
       res[panel['id'].to_i] = panel\r
     end\r
     res\r
   end\r
   \r
-  def resource_picture md5, host, auth\r
+  def picture id, host, email, token\r
     res = {}\r
-    u = host + 'pictures/search.json'\r
-    r = RestClient.get(u, :params => {:md5 => md5, :auth_token => auth})\r
+    u = host + 'pictures/'\r
+    r = RestClient.get(u, {:params => {:id => id}}, {:email => email, :token => token})\r
     JSON.parse r\r
   end\r
   \r
-  def each_panel\r
-    self.panels(@src_host, @src_auth).each do |key, panel_json|\r
-      puts 'source panel:' + key.to_s\r
-      # 今はAPIの仕様が変わっているので、そのうち書き直す\r
-      elements = panel_json['elements']\r
-      panel_json.delete 'elements'\r
-      c = true\r
-      elements.each do |e|\r
-        if e['link']\r
-          element_name = 'panel_pictures'\r
-          puts 'pp:' + e['id'].to_s\r
-          rps = self.resource_picture e['picture']['md5'], @dest_host, @dest_auth\r
-          if rps.any?\r
-            rp = rps.first\r
-            puts 'picture ok(' + rp['id'].to_s + ')'\r
-          else\r
-            puts 'no picture'\r
-            c = false\r
-            break\r
-          end\r
-          src_ls_name = @src_licenses[e['picture']['license_id']]['name'].gsub /License\:/, 'Licenses:'\r
-          puts 'license:' + e['picture']['license_id'].to_s + '(' + src_ls_name + ')'\r
-          if dl = @dest_licenses[src_ls_name]\r
-            puts 'license ok(' + dl['id'].to_s + ')'\r
-          else\r
-            puts 'no license'\r
-            c = false\r
-            break\r
-          end\r
-          e['picture_id'] = rp['id']\r
-          e.delete 'picture'\r
-          e.delete 'license'\r
-        elsif e['classname']\r
-          element_name = 'speech_balloons'\r
-          puts 'sb:' + e['id'].to_s\r
-          src_sb_name = @src_speech_balloon_templates[e['speech_balloon_template_id']]['name']\r
-          puts 'speech_balloon_template:' + e['speech_balloon_template_id'].to_s + '(' + src_sb_name + ')'\r
-          if dsb = @dest_speech_balloon_templates[src_sb_name]\r
-            puts 'speech_balloon_template ok(' + dsb['id'].to_s + ')'\r
-          else\r
-            puts 'no speech_balloon_template'\r
-            c = false\r
-            break\r
-          end\r
-          src_sp_md5 = @src_system_pictures[e['balloon']['system_picture_id']]['md5']\r
-          puts 'balloon picture:' + e['balloon']['system_picture_id'].to_s + '(' + src_sp_md5 + ')'\r
-          if dsp = @dest_system_pictures[src_sp_md5]\r
-            puts 'balloon picture ok(' + dsp['id'].to_s + ')'\r
-          else\r
-            puts 'no balloon picture'\r
-            c = false\r
-            break\r
-          end\r
-          src_wf_name = @src_writing_formats[e['speech']['writing_format_id']]['name']\r
-          puts 'speech writing_format:' + e['speech']['writing_format_id'].to_s + '(' + src_wf_name + ')'\r
-          if dwf = @dest_writing_formats[src_wf_name]\r
-            puts 'speech writing_format ok(' + dwf['id'].to_s + ')'\r
-          else\r
-            puts 'no speech writing_format'\r
-            c = false\r
-            break\r
-          end\r
-          e['speech_balloon_template_id'] = dsb['id']\r
-          e["speech_balloon_template_settings"] = e["settings"]\r
-          e.delete 'settings'\r
-          e["speech_balloon_template_classname"] = dsb["classname"]\r
-          e.delete 'classname'\r
-          #e.delete 'speech_balloon_template'\r
-          balloon = e['balloon']\r
-          e.delete 'balloon'\r
-          balloon.delete 'id'\r
-          balloon.delete 'speech_balloon_id'\r
-          balloon["speech_balloon_template_settings"] = e["settings"]\r
-          balloon.delete 'settings'\r
-          balloon['system_picture_id'] = dsp['id']\r
-          balloon['speech_balloon_template_id'] = dsb['id']\r
-          balloon["speech_balloon_template_classname"] = dsb["classname"]\r
-          \r
-          speech = e['speech']\r
-          e.delete 'speech'\r
-          speech.delete 'id'\r
-          speech.delete 'speech_balloon_id'\r
-          speech["speech_balloon_template_settings"] = e["settings"]\r
-          speech.delete 'settings'\r
-          speech['speech_balloon_template_id'] = dsb['id']\r
-          speech["speech_balloon_template_classname"] = dsb["classname"]\r
-          speech['writing_format_id'] = dwf['id']\r
-    #      speech["writing_format_classname"] = 'Pettanr' + dwf["classname"]\r
-          speech["writing_format_classname"] = dwf["classname"]\r
-          \r
-          e['balloon_attributes'] = balloon\r
-          e['speech_attributes'] = speech\r
-        elsif e['code']\r
-          element_name = 'ground_colors'\r
-          puts 'gc:' + e['id'].to_s\r
-        elsif e['repeat']\r
-          element_name = 'ground_pictures'\r
-          puts 'gp:' + e['id'].to_s\r
-          rps = self.resource_picture e['picture']['md5'], @dest_host, @dest_auth\r
-          if rps.any?\r
-            rp = rps.first\r
-            puts 'picture ok(' + rp['id'].to_s + ')'\r
-          else\r
-            puts 'no picture'\r
-            c = false\r
-            break\r
-          end\r
-          #e['license_id'] = dl['id']\r
-          e['picture_id'] = rp['id']\r
-          #e.delete 'license'\r
-        else\r
-          c = false\r
-          break\r
-        end\r
-        eid = e['id']\r
-        e.delete 'id'\r
-        e.delete 'panel_id'\r
-        panel_json[element_name + '_attributes'] ||= {}\r
-        panel_json[element_name + '_attributes']['new' + eid.to_s] = e\r
-      end\r
-      next unless c\r
-      puts '============ importable'\r
-      panel_json.delete 'id'\r
-      panel_json.delete 'author'\r
-      panel_json.delete 'author_id'\r
-      panel_json.delete "created_at"\r
-      panel_json.delete 'updated_at'\r
-      yield panel_json\r
-    end\r
+  def search_resource_picture md5, host, email, token\r
+    res = {}\r
+    u = host + 'resource_pictures/search.json'\r
+    r = RestClient.get(u, {:params => {:md5 => md5}}, {:email => email, :token => token})\r
+    JSON.parse r\r
   end\r
   \r
-  def each_opset \r
-    self.each_subdir do |filename|\r
-      imgfile = nil\r
-      lsname = nil\r
-      formname = nil\r
-      attr  = nil\r
-      Dir.glob(filename + '/*') do |fn|\r
-        ext = File.extname(fn).downcase\r
-        case ext\r
-        when '.json'\r
-          json = JSON.parse(File.open(fn).read)\r
-          lsname = json["license_name"]\r
-          formname = json["formname"]\r
-          attr = json["attributes"]\r
-        when '.png', '.gif', '.jpeg'\r
-          imgfile = fn\r
-        end\r
-      end\r
-      if imgfile and lsname and formname and attr\r
-        yield imgfile, lsname, formname, attr\r
-      end\r
+  def prepare_panel_picture panel_picture\r
+    element_name = 'panel_pictures'\r
+    puts 'panel_picture:' + panel_picture['id'].to_s\r
+    # get picture from src\r
+    picture = self.picture panel_picture['picture_id'], @src_host, @src_email, @src_token\r
+    puts 'picture:' + picture['id'].to_s\r
+    # get resource_picture if exists?\r
+    # choose latest resource_picture if find same rp at server\r
+    rps = self.search_resource_picture picture['md5'], @dest_host, @dest_email, @dest_token\r
+    if rps.any?\r
+      rp = rps.first\r
+      puts 'resource picture ok:' + rp['id'].to_s + '(' + rp['md5'].to_s + ')'\r
+    else\r
+      puts 'no picture'\r
+      c = false\r
+      return\r
+    end\r
+    # get lisence's id if exists?\r
+    src_ls_name = @src_licenses[picture['license_id']]['name'].gsub /License\:/, 'Licenses:'\r
+    puts 'license:' + picture['license_id'].to_s + '(' + src_ls_name + ')'\r
+    if dl = @dest_licenses[src_ls_name]\r
+      puts 'license ok(' + dl['id'].to_s + ')'\r
+    else\r
+      puts 'no license'\r
+      c = false\r
+      return\r
     end\r
+    panel_picture['picture_id'] = rp['picture_id']\r
   end\r
   \r
-  def upload fn\r
-    oid = nil\r
-    b = Base64.encode64(File.open(fn, 'rb').read)\r
-    u = @host + 'original_pictures'\r
-    begin\r
-      r = RestClient.post(u, \r
-        {:original_picture => {:file  => b}, :auth_token => @auth}.to_json, \r
-        :content_type => :json, :accept => :json\r
-      )\r
-      o = JSON.parse r\r
-      oid = o['id']\r
-    rescue\r
-      puts ' failed: ' + r.to_s\r
+  def prepare_speech_balloon speech_balloon\r
+    element_name = 'speech_balloons'\r
+    puts 'sb:' + e['id'].to_s\r
+    src_sb_name = @src_speech_balloon_templates[e['speech_balloon_template_id']]['name']\r
+    puts 'speech_balloon_template:' + e['speech_balloon_template_id'].to_s + '(' + src_sb_name + ')'\r
+    if dsb = @dest_speech_balloon_templates[src_sb_name]\r
+      puts 'speech_balloon_template ok(' + dsb['id'].to_s + ')'\r
+    else\r
+      puts 'no speech_balloon_template'\r
+      c = false\r
+      return\r
+    end\r
+    src_sp_md5 = @src_system_pictures[e['balloon']['system_picture_id']]['md5']\r
+    puts 'balloon picture:' + e['balloon']['system_picture_id'].to_s + '(' + src_sp_md5 + ')'\r
+    if dsp = @dest_system_pictures[src_sp_md5]\r
+      puts 'balloon picture ok(' + dsp['id'].to_s + ')'\r
+    else\r
+      puts 'no balloon picture'\r
+      c = false\r
+      return\r
     end\r
-    oid\r
+    src_wf_name = @src_writing_formats[e['speech']['writing_format_id']]['name']\r
+    puts 'speech writing_format:' + e['speech']['writing_format_id'].to_s + '(' + src_wf_name + ')'\r
+    if dwf = @dest_writing_formats[src_wf_name]\r
+      puts 'speech writing_format ok(' + dwf['id'].to_s + ')'\r
+    else\r
+      puts 'no speech writing_format'\r
+      c = false\r
+      return\r
+    end\r
+    e['speech_balloon_template_id'] = dsb['id']\r
+    e["speech_balloon_template_settings"] = e["settings"]\r
+    e.delete 'settings'\r
+    e["speech_balloon_template_classname"] = dsb["classname"]\r
+    e.delete 'classname'\r
+    #e.delete 'speech_balloon_template'\r
+    balloon = e['balloon']\r
+    e.delete 'balloon'\r
+    balloon.delete 'id'\r
+    balloon.delete 'speech_balloon_id'\r
+    balloon["speech_balloon_template_settings"] = e["settings"]\r
+    balloon.delete 'settings'\r
+    balloon['system_picture_id'] = dsp['id']\r
+    balloon['speech_balloon_template_id'] = dsb['id']\r
+    balloon["speech_balloon_template_classname"] = dsb["classname"]\r
+    \r
+    speech = e['speech']\r
+    e.delete 'speech'\r
+    speech.delete 'id'\r
+    speech.delete 'speech_balloon_id'\r
+    speech["speech_balloon_template_settings"] = e["settings"]\r
+    speech.delete 'settings'\r
+    speech['speech_balloon_template_id'] = dsb['id']\r
+    speech["speech_balloon_template_classname"] = dsb["classname"]\r
+    speech['writing_format_id'] = dwf['id']\r
+#      speech["writing_format_classname"] = 'Pettanr' + dwf["classname"]\r
+    speech["writing_format_classname"] = dwf["classname"]\r
+    \r
+    e['balloon_attributes'] = balloon\r
+    e['speech_attributes'] = speech\r
   end\r
   \r
-  def publish oid, lgid, rp\r
-    res = nil\r
-    u = @host + 'resource_pictures'\r
-    attr = {\r
-      :original_picture_id => oid, \r
-      :original_picture_license_group => {\r
-        :original_picture_id => oid, :license_group_id => lgid\r
-      }, \r
-      :resource_picture => {\r
-        :original_picture_id => oid, \r
-        :license_id => rp['license_id'], \r
-        :artist_name => rp['artist_name'], \r
-        :system_picture_id => rp['system_picture_id'], \r
-        :license_group_classname => rp['license_group_classname'], \r
-        :license_group_settings => rp['license_group_settings'], \r
-        :credit_picture_settings => rp['credit_picture_settings'], \r
-        :license_settings => rp['license_settings']\r
-      }, \r
-      :auth_token => @auth \r
-    }\r
-    begin\r
-      r = RestClient.post(u, \r
-        attr.to_json,\r
-        :content_type => :json, :accept => :json\r
-      )\r
-      res = JSON.parse r\r
-    rescue\r
-      puts ' failed: ' + r.to_s\r
+  def prepare_ground_color ground_color\r
+    element_name = 'ground_colors'\r
+    puts 'ground_color:' + ground_color['id'].to_s\r
+  end\r
+  \r
+  def prepare_ground_picture ground_picture\r
+    element_name = 'ground_pictures'\r
+    puts 'ground_picture:' + ground_picture['id'].to_s\r
+    rps = self.resource_picture ground_picture['picture']['md5'], @dest_host, @dest_auth\r
+    if rps.any?\r
+      rp = rps.first\r
+      puts 'picture ok(' + rp['id'].to_s + ')'\r
+    else\r
+      puts 'no picture'\r
+      c = false\r
+      return\r
     end\r
-    res\r
+    #e['license_id'] = dl['id']\r
+    ground_picture['picture_id'] = rp['id']\r
+    #e.delete 'license'\r
+  end\r
+  \r
+  def add_attribute panel_json, attribute\r
+    eid = e['id']\r
+    e.delete 'id'\r
+    e.delete 'panel_id'\r
+    panel_json[element_name + '_attributes'] ||= {}\r
+    panel_json[element_name + '_attributes']['new' + eid.to_s] = e\r
   end\r
   \r
-  def publish_all\r
-    each_opset do |imgfile, lsname, formname, attr|\r
-      puts 'uploading: ' + imgfile\r
-      oid = self.upload imgfile\r
-      next unless oid\r
-      puts 'success: ' + oid.to_s\r
-      ls = @licenses[lsname]\r
-      unless ls\r
-        puts 'not detect licenses: ' + lsname.to_s\r
-        next\r
+  def each_panel\r
+    self.panels(@src_host, @src_email, @src_token).each do |key, panel_json|\r
+      puts 'source panel:' + key.to_s\r
+      c = true\r
+      panel_json['panel_pictures'].each do |panel_picture|\r
+        self.prepare_panel_picture panel_picture\r
+        self.add_attribute panel_json, panel_picture\r
+      end\r
+      panel_json['speech_balloons'].each do |speech_balloon|\r
+        self.prepare_speech_balloon speech_balloon\r
+      end\r
+      panel_json['ground_colors'].each do |ground_color|\r
+        self.prepare_ground_color ground_color\r
       end\r
-      lsid = ls['id']\r
-      lgid = ls['license_group_id'].to_i\r
-      lg = @license_groups[lgid]\r
-      en = lg['classname']\r
-      puts 'building: ' + formname\r
-      rp = self.resource_picture oid, lgid, lsid, en, formname, attr\r
-      next unless rp\r
-      puts 'publishing: ' + lsname\r
-      r = self.publish oid, lgid, rp\r
-      puts 'success: ' + r['id'].to_s\r
+      panel_json['ground_pictures'].each do |ground_picture|\r
+        self.prepare_ground_picture ground_picture\r
+      end\r
+      next unless c\r
+      puts '============ importable'\r
+      panel_json.delete 'id'\r
+      panel_json.delete 'author'\r
+      panel_json.delete 'author_id'\r
+      panel_json.delete "created_at"\r
+      panel_json.delete 'updated_at'\r
+      yield panel_json\r
     end\r
   end\r
   \r
 end\r
 \r
-u = Importer.new src_host, src_auth, dest_host, dest_auth\r
+u = Importer.new src_host, src_email, src_token, dest_host, dest_email, dest_token\r
 \r
 u.each_panel do |panel_json|\r
-    u = dest_host + 'panels'\r
- File.open('/Sites/panel_create.json', 'w') do |f|\r
+  u = dest_host + 'panels'\r
+  # write log\r
+  File.open('/Sites/panel_create.json', 'w') do |f|\r
    f.write JSON.pretty_generate(panel_json)\r
- end\r
-    begin\r
-      r = RestClient.post(u, \r
-        {:json => panel_json, :auth_token => dest_auth}.to_json, \r
-        :content_type => :json, :accept => :json\r
-      )\r
-      res = JSON.parse r\r
-    rescue\r
-      puts ' failed: ' + r.to_s\r
-    end\r
-   # break\r
+  end\r
+  begin\r
+    r = RestClient.post(u, \r
+      {:json => panel_json}.to_json, \r
+      :content_type => :json, :accept => :json, :email => dest_email, :token => dest_token\r
+    )\r
+    res = JSON.parse r\r
+  rescue\r
+    puts ' failed: ' + r.to_s\r
+  end\r
 end\r
 \r
 \r
index c902cb4..3bc80a6 100644 (file)
@@ -4,16 +4,16 @@ require 'fileutils'
 require 'json'\r
 \r
 if ARGV.size < 1\r
-  puts "preup.rb dirname {license.json}"\r
+  puts "preup.rb default.attr"\r
   exit\r
 end\r
 \r
-dirname = File.expand_path ARGV[0]\r
-ls = if ARGV.size > 1 and File.exist?(ARGV[1]) \r
-  ARGV[1]\r
-else\r
-  nil\r
-end\r
+dirname = File.expand_path(File.dirname(ARGV[0]))\r
+default_attr_file = ARGV[0]\r
+\r
+puts dirname\r
+puts default_attr_file\r
+default_attr = JSON.parse(File.open(default_attr_file, 'r').read)\r
 \r
 Dir.glob(dirname + '/*') do |fn|\r
   ext = File.extname(fn).downcase\r
@@ -21,30 +21,9 @@ Dir.glob(dirname + '/*') do |fn|
   case ext\r
   when '.png', '.gif', '.jpeg'\r
     puts fn\r
-    d = File.dirname(fn) + '/' + bn\r
-    Dir.mkdir(d) unless File.exist?(d)\r
-    FileUtils.cp fn, d + '/' + File.basename(fn)\r
-    if ls\r
-      puts 'with license:' + ls\r
-      lsfn = d + '/' + File.basename(ls)\r
-      attrfn = d + '/attributes.json'\r
-      if File.exist?(attrfn) \r
-        puts 'get attributes.json'\r
-        attr = nil\r
-        File.open(attrfn, 'r') do |f|\r
-          attr = JSON.parse(f.read)\r
-        end\r
-        json = JSON.parse(open(ls).read)\r
-        if json['attributes'] and attr\r
-          json['attributes'] = attr\r
-        end\r
-        File.open(lsfn, 'w') do |f|\r
-          f.write JSON.pretty_generate(json)\r
-        end\r
-      else\r
-        FileUtils.cp ls, lsfn\r
-      end\r
-    end\r
+    custom_attr_file = File.dirname(fn) + '/' + bn + '.json'\r
+    FileUtils.cp(default_attr_file, custom_attr_file) unless File.exist?(custom_attr_file) \r
+    custom_attr = JSON.parse(File.open(custom_attr_file, 'r').read)\r
   end\r
 end\r
 \r
index aa56f49..e8fa6ed 100644 (file)
@@ -7,23 +7,23 @@ require 'json'
 require 'base64'\r
 \r
 if ARGV.size < 1\r
-  puts "uploader.rb host dirname attr.json lsname auth"\r
+  puts "uploader.rb host dirname license_name email token"\r
   puts "upload on child dirs"\r
   exit\r
 end\r
 \r
 host = ARGV[0]\r
 dirname = ARGV[1]\r
-attr_fn = ARGV[2]\r
-lsname = ARGV[3]\r
+lsname = ARGV[2]\r
+email = ARGV[3]\r
 auth = ARGV[4]\r
 \r
 class Uploader\r
-  def initialize host, dirname, attr_fn, lsname, auth\r
+  def initialize host, dirname, lsname, email, auth\r
     @host = host\r
     @dirname = dirname\r
-    @attr_fn = attr_fn\r
     @lsname = lsname\r
+    @email = email\r
     @auth = auth\r
     @licenses = self.licenses\r
     @license_groups = self.license_groups\r
@@ -32,18 +32,18 @@ class Uploader
   def licenses\r
     res = {}\r
     u = @host + 'licenses.json'\r
-    r = RestClient.get(u)\r
+    r = RestClient.get(u, {email: @email, token: @auth})\r
     ary = JSON.parse r\r
     ary['list'].each do |l|\r
       res[l['name']] = l\r
     end\r
     res\r
   end\r
-\r
+  \r
   def license_groups\r
     res = {}\r
     u = @host + 'license_groups.json'\r
-    r = RestClient.get(u)\r
+    r = RestClient.get(u, {email: @email, token: @auth})\r
     ary = JSON.parse r\r
     ary['list'].each do |l|\r
       res[l['id'].to_i] = l\r
@@ -51,20 +51,15 @@ class Uploader
     res\r
   end\r
   \r
-  def each_subdir\r
-    Dir.glob File.expand_path(@dirname) + '/*' do |filename|\r
-      if File.directory?(filename)\r
-        yield filename\r
-      end\r
-    end\r
-  end\r
-  \r
   def each_op\r
     Dir.glob File.expand_path(@dirname) + '/*' do |fn|\r
       ext = File.extname(fn).downcase\r
+      bn = File.basename(fn, ".*")\r
       case ext\r
       when '.png', '.gif', '.jpeg'\r
-        yield fn\r
+        custom_attr_file = File.dirname(fn) + '/' + bn + '.json'\r
+        attr = JSON.parse(File.open(custom_attr_file).read)\r
+        yield fn, attr\r
       end\r
     end\r
   end\r
@@ -75,8 +70,8 @@ class Uploader
     u = @host + 'original_pictures'\r
     begin\r
       r = RestClient.post(u, \r
-        {:original_picture => {:file  => b}, :auth_token => @auth}.to_json, \r
-        :content_type => :json, :accept => :json\r
+        {:original_picture => {:file  => b}}.to_json, \r
+        :content_type => :json, :accept => :json, :email => @email, :token => @auth\r
       )\r
       o = JSON.parse r\r
       oid = o['id']\r
@@ -95,41 +90,14 @@ class Uploader
       :license_id => lsid, \r
       :license_group_module_name => en, \r
       :license_settings => attr, \r
-      :auth_token => @auth \r
-    }\r
-    begin\r
-      r = RestClient.post(u, \r
-        param.to_json,\r
-        :content_type => :json, :accept => :json\r
-      )\r
-      rp = JSON.parse r\r
-    rescue\r
-      puts ' failed: ' + u.to_s\r
-      puts param\r
-      puts r.to_s\r
-    end\r
-    rp\r
-  end\r
-  \r
-  #confirm\r
-  def resource_picture oid, lgid, lsid, en, formname, attr\r
-    rp = nil\r
-    u = @host + en.tableize + '/attributes'\r
-    attr['license_id'] = lsid\r
-    param = {\r
-      :original_picture_id => oid, \r
-      :original_picture_license_group => {\r
-        :original_picture_id => oid, :license_group_id => lgid\r
-      }, \r
-      :auth_token => @auth \r
     }\r
-    param[:attributes] = attr\r
     begin\r
       r = RestClient.post(u, \r
         param.to_json,\r
-        :content_type => :json, :accept => :json\r
+        :content_type => :json, :accept => :json, :email => @email, :token => @auth\r
       )\r
-      rp = JSON.parse r\r
+      resp = JSON.parse r\r
+      rp = resp['item']\r
     rescue\r
       puts ' failed: ' + u.to_s\r
       puts param\r
@@ -147,12 +115,11 @@ class Uploader
         :original_picture_id => oid, :license_group_id => lgid\r
       }, \r
       :resource_picture => rp, \r
-      :auth_token => @auth \r
     }\r
     begin\r
       r = RestClient.post(u, \r
         attr.to_json,\r
-        :content_type => :json, :accept => :json\r
+        :content_type => :json, :accept => :json, :email => @email, :token => @auth\r
       )\r
       res = JSON.parse r\r
     rescue\r
@@ -162,8 +129,7 @@ class Uploader
   end\r
   \r
   def publish_all\r
-    attr = JSON.parse(File.open(@attr_fn).read)\r
-    each_op do |imgfile|\r
+    each_op do |imgfile, attr|\r
       puts 'uploading: ' + imgfile\r
       oid = self.upload imgfile\r
       next unless oid\r
@@ -186,7 +152,6 @@ class Uploader
   \r
 end\r
 \r
-u = Uploader.new host, dirname, attr_fn, lsname, auth\r
-\r
+u = Uploader.new host, dirname, lsname, email, auth\r
 u.publish_all\r
 \r
index 720cb2b..063e191 100644 (file)
@@ -37,7 +37,7 @@ module Manifest
         end
         
         def has_alias_action
-          @alias.any?
+          @alias and @alias.any?
         end
         
         def alias_action
index dec4beb..873755d 100644 (file)
@@ -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])
index a736a71..f7a2b10 100644 (file)
@@ -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