OSDN Git Service

change form manifest
[pettanr/pettanr.git] / lib / locmare / form.rb
index 4f3bc9b..29aacc5 100644 (file)
@@ -4,19 +4,40 @@ require_dependency "locmare/form/extend_field"
 module Locmare
   class FormBase
     include FormModule
-    attr :manifest, :form_name, :item, :mounted, :operators, :template_dir, 
+    attr :manifest, :form_name, :use_name, :item, :mounted, :operators, :template_dir, 
       :fields
-    def initialize form_name, item, mounted, operators
-      @form_name = form_name
+    def initialize form_name_with_sub_form, use_name, item, mounted, operators
+      if form_name_with_sub_form =~ /\./
+        @sub_form_names = form_name_with_sub_form.split '.'
+        @form_name = @sub_form_names.last
+        @root_form_name = @sub_form_names.shift
+      else
+        @sub_form_names = []
+        @form_name = form_name_with_sub_form
+        @root_form_name = @form_name
+      end
+      @use_name = use_name
       @item = item
       @mounted = mounted
       @operators = operators
       
-      @manifest = LocalManifest.manifest.forms[@form_name]
+      @manifest = LocalManifest.manifest.forms[@form_name].uses[@use_name]
       @template_dir = 'templates/r/form/'
       @fields = {}
     end
     
+    def fold_extend_settings params
+      @item.class.fold_extend_settings params[@item.item_name]
+    end
+    
+    def sub_form_name
+      @sub_form_names.map{|name| '[' + name + '_attributes' + ']'}.join
+    end
+    
+    def form_field_name field_name
+      @root_form_name + self.sub_form_name + '[' + field_name + ']'
+    end
+    
     def each_field
       @manifest.field_names.each do |field_name| 
         yield field_name, @fields[field_name]
@@ -44,19 +65,25 @@ module Locmare
   class Form < FormBase
     attr :submit
     
-    def initialize form_name, item, mounted, submit, operators
-      super form_name, item, mounted, operators
+    def initialize form_name, use_name, item, mounted, submit, operators
+      super form_name, use_name, item, mounted, operators
       @submit = submit
       @item.boosts 'post'
       self.init_fields
     end
     
     def init_fields
-      @manifest.each_field do |field_name, field_manifest| 
-        if boost_name = @item.class.find_boost_name(field_name)
-          extend_form_name = @item.boosters[boost_name].model_name
+      @manifest.each_field do |field_name, field_manifest|
+        boost_name = @item.class.find_boost_name(field_name)
+        extend_model = if boost_name 
+          @item.boosters[boost_name].extend_model
+        else
+          nil
+        end
+        if boost_name and extend_model # field is extend setting AND template has a extend model
+          extend_form_name = @item.boosters[boost_name].item_name
           extend_item = @item.boosters[boost_name].extend_item
-          @fields[field_name] = ExtendForm.new self, extend_form_name, extend_item, @mounted, @operators, field_name
+          @fields[field_name] = ExtendForm.new self, extend_form_name, @use_name, extend_item, @mounted, @operators, field_name
         else
           @fields[field_name] = Field.new self, field_name, field_manifest
         end
@@ -89,10 +116,10 @@ module Locmare
     include FieldModule
     attr :parent, :field_name, :field, :label
     
-    def initialize parent, form_name, item, mounted, operators, field_name
+    def initialize parent, form_name, use_name, item, mounted, operators, field_name
       @parent = parent
       @field_name = field_name
-      super form_name, item, mounted, operators
+      super form_name, use_name, item, mounted, operators
       @field = Field.new @parent, @field_name, @parent.manifest.fields[@field_name]
       @label = @field.label
       self.init_fields
@@ -104,6 +131,11 @@ module Locmare
       end
     end
     
+    def form_field_name extend_field_name
+      # parent is field
+      @parent.form_field_name(@field_name)  + '[' + extend_field_name + ']'
+    end
+    
     def template_file_name
       "extend_form"
     end