| Class | PickerController |
| In: |
app/controllers/picker_controller.rb
|
| Parent: | ApplicationController |
選択部品を制御する:
| PICKER_RETURN_TO | = | { :list_share => {:controller => "list", :action => "edit"}, :picker_test => {:controller => "picker", :action => "test"}, }.with_indifferent_access | allow registered return_to only; do not redirect to an arbitrary url | |
| PICKER_ERROR_RETURN_TO | = | "/" |
企業を検索する。
# File app/controllers/picker_controller.rb, line 119
119: def company
120: with_picker_scope(Company) do
121: search :companies
122: pass_params
123: end
124: end
グループを検索する。
# File app/controllers/picker_controller.rb, line 111
111: def group
112: with_picker_scope(Group) do
113: search :groups
114: pass_params
115: end
116: end
一括で検索する。
# File app/controllers/picker_controller.rb, line 158
158: def lump
159: set_mode_options
160: case params[:mode]
161: when "group"
162: lump_group
163: when "personal_group"
164: lump_personal_group
165: else
166: person
167: end
168: end
メールアドレスを検索する。
# File app/controllers/picker_controller.rb, line 171
171: def mail
172: picker_session = session[:picker] || {}
173: params[:mail] ||= picker_session[:mail_before_picker] || {}
174: params[:mail][:field_type] ||= "to"
175: if params[:mail][:recipients].is_a?(Hash)
176: params[:mail][:recipients] = params[:mail][:recipients].keys
177: end
178: # set params["commit"] too when mode changed
179: if !params["commit"] && params["pick"]
180: flash[:pick] = {
181: :field => params[:return_field],
182: :mail => params[:mail],
183: }
184: x_close_or_redirect_to return_to_url
185: return
186: end
187:
188: @mail_field_type_list = [
189: [s_("Picker|Mail Field Type|To"), "to"],
190: [s_("Picker|Mail Field Type|Cc"), "cc"],
191: [s_("Picker|Mail Field Type|Bcc"), "bcc"],
192: ]
193:
194: @select_more_columns_from_people = ",people.mail_address"
195: if params[:mail][:recipients]
196: if params[:mail][:recipients].is_a?(Hash)
197: params[:mail][:recipients] = params[:mail][:recipients].keys
198: elsif params[:mail][:recipients].is_a?(String)
199: params[:mail][:recipients] = params[:mail][:recipients].split(/,/)
200: end
201: @recipients = Person.find(params[:mail][:recipients].map(&:to_i)).select(&:receive_mail?)
202: else
203: @recipients = []
204: end
205:
206: unless params["commit"]
207: %w"company organization group".each do |key|
208: if params[key]
209: key_id, = params[key].keys
210: case key_id
211: when /\Aopen(\d+)/
212: params["#{key}_id"] = $1
213: when /\Apick(\d+)/
214: params["#{key}_id"] = $1
215: @recipients += key.classify.constantize.find($1.to_i).people.find(:all, :conditions => "mail_address IS NOT NULL").select(&:receive_mail?)
216: end
217: end
218: end
219: if params["person"]
220: key_id, = params["person"].keys
221: person = Person.find(key_id, :conditions => "mail_address IS NOT NULL")
222: if person.receive_mail?
223: @recipients << person
224: end
225: end
226: @recipients.uniq!
227: if params["unset"]
228: key_id, = params["unset"].keys
229: key_id = key_id.to_i
230: @recipients.delete_if do |person|
231: person.id == key_id
232: end
233: end
234: end
235:
236: lump
237: end
組織を検索する。
# File app/controllers/picker_controller.rb, line 127
127: def organization
128: with_picker_scope(Company, Organization) do
129: if company = search_by_id(:company)
130: search_under company, :organizations
131: end
132: pass_params :company
133: end
134: end
個人を検索する。
# File app/controllers/picker_controller.rb, line 137
137: def person
138: with_picker_scope(Company, Organization, Person) do
139: if company = search_by_id(:company)
140: if organization = search_by_id(:organization, company)
141: search_under organization, :people
142: end
143: end
144: pass_params :company, :organization
145: end
146: end
選択を行う。
# File app/controllers/picker_controller.rb, line 96
96: def pick
97: flash[:pick] = {
98: :field => params[:return_field],
99: :group => params[:group_id],
100: :personal_group => params[:personal_group_id],
101: :company => params[:company_id],
102: :organization => params[:organization_id],
103: :person => params[:person_id],
104: :post => params[:post_id],
105: :lump_pick => params[:lump_pick],
106: }
107: x_close_or_redirect_to return_to_url
108: end
役職を検索する。
# File app/controllers/picker_controller.rb, line 149
149: def post
150: with_picker_scope(Company, Post) do
151: company = search_by_id :company
152: search_under company, :posts
153: pass_params :company
154: end
155: end
モデルとして指定されたテーブルを検索する。
# File app/controllers/picker_controller.rb, line 240
240: def record
241: @record_id, @record_name, @record_code = fields = params[:record_field].split(",")
242: case fields.size
243: when 2, 3
244: if !params[:commit] && params[:pick] # done
245: record = {
246: :record_id => params[@record_id],
247: :record_name => params[@record_name],
248: }
249: record[:record_code] = params[@record_code] if @record_code
250: flash[:pick] = {
251: :field => params[:return_field],
252: :record => record
253: }
254: x_close_or_redirect_to return_to_url
255: return
256: end
257: pass_params
258: [:pick, :action].each do |key|
259: @pass_params_form[key] = "record"
260: end
261: [:record_field, :record_model].each do |key|
262: @pass_params_form[key] = params[key]
263: end
264: else
265: raise "wrong number of subject fields"
266: end
267: {:name => 1, :code => 2}.each do |key, i|
268: unless (value = params["record_#{key}"]).blank?
269: record_model = params[:record_model].classify.constantize
270: if @records
271: @records &= find_like(record_model, fields[i], value)
272: else
273: @records = find_like(record_model, fields[i], value)
274: end
275: end
276: end
277: end
(試験用)
# File app/controllers/picker_controller.rb, line 26
26: def test
27: @current_view = "view_main"
28: @sub_view = "view_picker"
29:
30: if flash[:pick]
31: case flash[:pick][:field]
32: when "group"
33: @group = Group.find(flash[:pick][:group])
34: when "company"
35: @company = Company.find(flash[:pick][:company])
36: when "organization"
37: @organization = Organization.find(flash[:pick][:organization])
38: when "organization,company"
39: @organization = Organization.find(flash[:pick][:organization])
40: @company = Company.find(flash[:pick][:company])
41: when "person"
42: @person = Person.find(flash[:pick][:person])
43: when "person,organization"
44: @person = Person.find(flash[:pick][:person])
45: @organization = Organization.find(flash[:pick][:organization])
46: when "person,organization,company"
47: @person = Person.find(flash[:pick][:person])
48: @organization = Organization.find(flash[:pick][:organization])
49: @company = Company.find(flash[:pick][:company])
50: when "post"
51: @post = Post.find(flash[:pick][:post])
52: when "lump"
53: case flash[:pick][:lump_pick]
54: when "company"
55: lump = @company = Company.find(flash[:pick][:company])
56: when "organization"
57: lump = @organization = Organization.find(flash[:pick][:organization])
58: when "group"
59: lump = @group = Group.find(flash[:pick][:group])
60: when "personal_group"
61: lump = @personal_group = PersonalGroup.find(flash[:pick][:personal_group])
62: when "person"
63: lump = @person = Person.find(flash[:pick][:person])
64: end
65: @people_ids = lump.id
66: @people_names = lump.name
67: when "lump_people"
68: case flash[:pick][:lump_pick]
69: when "company"
70: people = Company.find(flash[:pick][:company]).people
71: when "organization"
72: people = Organization.find(flash[:pick][:organization]).people
73: when "group"
74: people = Group.find(flash[:pick][:group]).people
75: when "personal_group"
76: people = PersonalGroup.find(flash[:pick][:personal_group]).people
77: when "person"
78: people = [Person.find(flash[:pick][:person])]
79: end
80: @people_ids = people.map(&:id).join(", ")
81: @people_names = people.map(&:name).join(", ")
82: when "mail"
83: if flash[:pick][:mail]
84: @mail = flash[:pick][:mail]
85: if @mail[:recipients]
86: @recipients = Person.find(@mail[:recipients])
87: end
88: end
89: when "record"
90: @record = flash[:pick][:record] || {}
91: end
92: end
93: end