OSDN Git Service

a24fd71ced243f3bec2dfd770913dc47e529ffee
[pettanr/pettanr.git] / app / controllers / panels_controller.rb
1 class PanelsController < ApplicationController
2   if Manifest.manifest.magic_numbers['run_mode'] == 0
3     before_filter :authenticate_user, :only => [:new, :edit, :create, :update, :destroy, :catch]
4     before_filter :authenticate_author, :only => [:new, :edit, :create, :update, :destroy, :catch]
5   else
6     before_filter :authenticate_reader, :only => [
7       :index, :show, :by_scroll, :by_sheet, :by_author, :by_speech_balloon_template, :count, :count_by_scroll, :count_by_sheet, :count_by_author, :count_by_speech_balloon_template
8     ]
9     before_filter :authenticate_user, :only => [:new, :edit, :create, :update, :destroy, :catch]
10     before_filter :authenticate_author, :only => [:new, :edit, :create, :update, :destroy, :catch]
11   end
12   
13   def self.model
14     Panel
15   end
16   private
17   def panel_list
18     set_list
19     list_result = @list.open(@operators, 
20       {:id => params[:id], :page => params[:page], :page_size => params[:page_size]}
21     )
22     @items = list_result.items 
23     @pager = list_result.paginate
24     respond_to do |format|
25       format.html 
26       format.json { render json: @items.to_json }
27       format.atom 
28       format.rss
29     end
30   end
31   public
32   def index
33     if params[:mode] == 'filer'
34       filer_list
35     else
36       panel_list
37     end
38   end
39   
40   def by_scroll
41     filer_list
42   end
43   
44   def by_sheet
45     filer_list
46   end
47   
48   def by_author
49     filer_list
50   end
51   
52   def by_speech_balloon_template
53     filer_list
54   end
55   
56   def show_html_format format
57     format.html {
58       if @operators.author
59         @new_scroll_items = assist_items('scroll', 'private')
60         @fresh_scroll_items = assist_items('scroll_panel', 'private').map {|sp| sp.scroll}
61       end
62     }
63   end
64   
65   def show
66     set_show
67     respond_to do |format|
68       show_html_format format
69       show_prof_format format
70       show_json_format_for_root format
71     end
72   end
73
74   def count
75     list_count
76   end
77   
78   def count_by_scroll
79     list_count
80   end
81   
82   def count_by_sheet
83     list_count
84   end
85   
86   def count_by_author
87     list_count
88   end
89   
90   def count_by_speech_balloon_template
91     list_count
92   end
93   
94   def new
95     set_new
96     respond_to do |format|
97       format.html {
98         @editor = Editor::PanelEditor.new @item, @operators
99         render :template => @editor.template_name, :locals => {
100           :editor => @editor
101         }
102       }
103       format.json { render json: @item.to_json }
104     end
105   end
106   
107   def edit
108     set_edit
109     respond_to do |format|
110       format.html {
111         @editor = Editor::PanelEditor.new @item, @operators
112         render :template => @editor.template_name, :locals => {
113           :editor => @editor
114         }
115       }
116       format.json { render json: @item.to_json }
117     end
118   end
119   
120   def create
121     set_model
122     @item = @my_model_class.new
123 #    @item.boosts 'post'
124     jsn = nil
125     if params[:json]
126       jsn = JSON.parse_no_except(params[:json])
127     end
128     @prm = if params[:panel] == nil or params[:panel].empty?
129        jsn
130     else
131        params[:panel]
132     end
133     @item.class.fold_extend_settings @prm
134     #@item.refresh
135     respond_to do |format|
136       if @item.store @prm, @operators
137         created_html_format format
138         created_json_format format
139       else
140         format.html {
141           flash[:notice] = I18n.t('flash.notice.not_created', :model => @my_model_class.model_name.human)
142           @editor = Editor::PanelEditor.new @item, @operators
143           render :template => @editor.template_name, :locals => {
144             :editor => @editor
145           }
146         }
147         not_created_json_format format
148       end
149     end
150   end
151   
152   def update
153     @item = Panel.edit(params[:id], @operators)
154     @item.boost
155     jsn = nil
156     if params[:json]
157       jsn = JSON.parse(params[:json])
158     end
159     @prm = params[:panel] || jsn
160     self.model.fold_extend_settings @prm
161     @item.attributes = @prm
162     @item.refresh
163     respond_to do |format|
164       if @item.store @item.packed_attributes, @operators
165         updated_html_format format
166         updated_json_format format
167       else
168         format.html {
169           flash[:notice] = I18n.t('flash.notice.not_updated', :model => @my_model_class.model_name.human)
170           @editor = Editor::PanelEditor.new @item, @operators
171           render :template => @editor.template_name, :locals => {
172             :editor => @editor
173           }
174         }
175         not_updated_json_format format
176       end
177     end
178   end
179   
180   def destroy
181     @item = Panel.edit(params[:id], @operators)
182     respond_to do |format|
183       Panel.transaction do
184         if @item.destroy_with_elements
185           flash[:notice] = I18n.t('flash.notice.destroyed', :model => Panel.model_name.human)
186           format.html { redirect_to '/home/panels' }
187           format.json { head :ok }
188         else
189           flash[:notice] = I18n.t('flash.notice.not_destroyed', :model => Panel.model_name.human)
190           format.html { redirect_to @item }
191           format.json { render json: @item.errors, status: :unprocessable_entity }
192         end
193       end
194     end
195   end
196   
197   def catch
198     @item = Panel.edit(params[:id], @operators)
199
200     respond_to do |format|
201       @operators.author.working_panel_id = @item.id
202       if @operators.author.save
203         format.html { redirect_to @item }
204       else
205       end
206     end
207   end
208
209 end