OSDN Git Service

179c50055ffffbf21e9e9e2074251d7f6879ae60
[pettanr/pettanr.git] / lib / locmare / form.rb
1 require_dependency "locmare/form/field"
2 require_dependency "locmare/form/extend_field"
3
4 module Locmare
5   class FormBase
6     include FormModule
7     attr :manifest, :form_name, :item, :mounted, :operators, :template_dir, 
8       :fields
9     def initialize form_name, item, mounted, operators
10       @form_name = form_name
11       @item = item
12       @mounted = mounted
13       @operators = operators
14       
15       @manifest = LocalManifest.manifest.forms[@form_name]
16       @template_dir = 'templates/r/form/'
17       @fields = {}
18     end
19     
20     def fold_extend_settings params
21       @item.class.fold_extend_settings params[@item.item_name]
22     end
23     
24     def each_field
25       @manifest.field_names.each do |field_name| 
26         yield field_name, @fields[field_name]
27       end
28     end
29     
30     def template_file_name
31       "form"
32     end
33     
34     def template_name
35       self.template_dir + self.template_file_name
36     end
37     
38     def fields_template_name
39       self.template_dir + 'fields'
40     end
41     
42     def image_dir
43       '/images/'
44     end
45     
46   end
47   
48   class Form < FormBase
49     attr :submit
50     
51     def initialize form_name, item, mounted, submit, operators
52       super form_name, item, mounted, operators
53       @submit = submit
54       @item.boosts 'post'
55       self.init_fields
56     end
57     
58     def init_fields
59       @manifest.each_field do |field_name, field_manifest| 
60         if boost_name = @item.class.find_boost_name(field_name)
61           extend_form_name = @item.boosters[boost_name].model_name
62           extend_item = @item.boosters[boost_name].extend_item
63           @fields[field_name] = ExtendForm.new self, extend_form_name, extend_item, @mounted, @operators, field_name
64         else
65           @fields[field_name] = Field.new self, field_name, field_manifest
66         end
67       end
68     end
69     
70     def submit_name
71       if @item.new_record?
72         @item.table_name + '.submit.new'
73       else
74         @item.table_name + '.submit.edit'
75       end
76     end
77     
78     def submit_template_dir
79       self.template_dir + 'submit/'
80     end
81     
82     def submit_template_name
83       if @submit
84         self.submit_template_dir + 'submit'
85       else
86         self.submit_template_dir + 'none'
87       end
88     end
89     
90   end
91   
92   class ExtendForm < FormBase
93     include FieldModule
94     attr :parent, :field_name, :field, :label
95     
96     def initialize parent, form_name, item, mounted, operators, field_name
97       @parent = parent
98       @field_name = field_name
99       super form_name, item, mounted, operators
100       @field = Field.new @parent, @field_name, @parent.manifest.fields[@field_name]
101       @label = @field.label
102       self.init_fields
103     end
104     
105     def init_fields
106       @manifest.each_field do |field_name, field_manifest| 
107         @fields[field_name] = ExtendField.new self, field_name, field_manifest
108       end
109     end
110     
111     def template_file_name
112       "extend_form"
113     end
114     
115     def template_option
116       {:form=> self}
117     end
118     
119   end
120   
121 end
122