OSDN Git Service

t#32374:add panel copy at sheet
authoryasushiito <yas@pen-chan.jp>
Sat, 2 Nov 2013 06:17:15 +0000 (15:17 +0900)
committeryasushiito <yas@pen-chan.jp>
Sat, 2 Nov 2013 06:17:15 +0000 (15:17 +0900)
app/models/sheet.rb
app/models/sheet_panel.rb
app/views/sheets/show.html.erb

index f16d8ee..b24e920 100644 (file)
@@ -283,6 +283,7 @@ class Sheet < ActiveRecord::Base
     Sheet.transaction do
       self.sheet_elements.each do |elm|
         elm.new_sheet = self
+        elm.boost au
       end
       res = self.save
       unless validate_child
@@ -326,10 +327,28 @@ class Sheet < ActiveRecord::Base
     r
   end
   
+  def copyable?
+    r = true
+    Sheet.each_element_class_names do |n|
+      self.elements_by_class_name(n).each do |elm|
+        next if elm.copyable?
+        r = false
+        break
+      end
+      break unless r
+    end
+    r
+  end
+  
   def copy
     attr = self.copy_attributes
     Sheet.each_element_class_names do |n|
-      attr.merge! Sheet.class_name_to_class(n).panelize(self.elements_by_class_name(n).map {|elm|  elm.copy_attributes})
+      element_attr = Sheet.class_name_to_class(n).panelize(
+        self.elements_by_class_name(n).map {|elm|
+          elm.copy_attributes.merge elm.panel_attributes
+        }
+      )
+      attr.merge! element_attr
     end
     attr
   end
index cc91abf..b1b48ff 100644 (file)
@@ -2,6 +2,7 @@ class SheetPanel < ActiveRecord::Base
   belongs_to :author
   belongs_to :panel
   belongs_to :sheet
+  accepts_nested_attributes_for :panel, :allow_destroy => true
   
   validates :sheet_id, :numericality => {:allow_blank => true}
   validates :panel_id, :numericality => {:allow_blank => true}
@@ -216,11 +217,38 @@ class SheetPanel < ActiveRecord::Base
       r = self.attributes
       r.delete 'id'
       r.delete 'sheet_id'
+      r.delete 'panel_id'   # create panel
       r.delete 'created_at'
       r.delete 'updated_at'
       r
     end
-    
+  
+  def copyable?
+    if self.panel and self.panel.publish? == false
+      false
+    else
+      true
+    end
+  end
+  
+  def boost au
+    if self.panel
+      self.panel.author_id = au.id
+      self.panel.panel_elements.each do |elm|
+        elm.new_panel = self
+        elm.boost
+      end
+    end
+  end
+  
+  def panel_attributes
+    if self.panel
+      {'panel_attributes' => self.panel.copy}
+    else
+      {}
+    end
+  end
+  
   def self.new_t sheet_id
     r = SheetPanel.max_t(sheet_id)
     r.blank? ? 0 : r.to_i + 1
index 0b297fe..5caa8e9 100644 (file)
@@ -4,19 +4,23 @@
 
 <%= render 'standard', :sheet => @sheet, :author => @author %>
 
+<% if @author %>
+  <% if @sheet.copyable? %>
+    <h2><%= t('sheets.show.copy') -%></h2>
+    <%= form_for(Sheet.new, :html => {:jqform => 'pettanr-sheet-form'}) do |f| %>
+
+      <%= hidden_field_tag "json", @sheet.copy().to_json %>
+      <div>
+        <%= submit_tag t('sheets.show.inspire') -%>
+      </div>
+    <% end %>
+  <% end %>
+<% end %>
+
 <% if @sheet.own? @author %>
   <%= link_to t('link.edit'), edit_sheet_path(@sheet) %>
   <%= link_to t('link.destroy'), sheet_path(@sheet), :method => :delete %>
 
-  <h2><%= t('sheets.show.copy') -%></h2>
-  <%= form_for(Sheet.new, :html => {:jqform => 'pettanr-sheet-form'}) do |f| %>
-
-    <%= hidden_field_tag "json", @sheet.copy().to_json %>
-    <div>
-      <%= submit_tag t('sheets.show.inspire') -%>
-    </div>
-  <% end %>
-  
   <h3><%= t('sheet_panels.append.new_panels') -%></h3>
   <table>
     <% @new_panels.each do |panel| %>