OSDN Git Service

527fcf06fa7f6e8044911d7d496aa0555e710253
[pettanr/pettanr.git] / app / controllers / panels_controller.rb
1 class PanelsController < ApplicationController
2   layout 'test' if Pettanr::TestLayout
3   before_filter :authenticate_user!, :only => [:index, :show, :new, :edit, :create, :update, :destroy]
4   before_filter :authenticate_admin!, :only => [:list, :browse]
5
6   private
7   
8   def treat_param panel
9     panel.author_id = @author.id
10   end
11   
12   public
13   
14   # GET /panels
15   # GET /panels.json
16   def index
17     @page = Panel.page params[:page]
18     @page_size = Panel.page_size params[:page_size]
19     @panels = Panel.list({}, @page, @page_size)
20
21     respond_to do |format|
22       format.html # index.html.erb
23       format.json { render json: @panels.to_json(Panel.list_json_opt) }
24     end
25   end
26
27   # GET /panels/1
28   # GET /panels/1.json
29   def show
30     @panel = Panel.show(params[:id], @author)
31
32     respond_to do |format|
33       format.html # show.html.erb
34       format.json { render json: @panel.to_json(Panel.show_json_include_opt) }
35       format.jsonp {
36         render :json => "callback(" + @panel.to_json(Panel.show_json_include_opt) + ");"
37       }
38     end
39   end
40
41   def count
42     @panel = {:count => Panel.visible_count}
43     respond_to do |format|
44       format.json { render json: @panel.to_json }
45     end
46   end
47   
48   def list
49     @panels = Panel.all :order => 'updated_at'
50
51     respond_to do |format|
52       format.html { render layout: 'system' }
53       format.json { render json: @panels }
54     end
55   end
56
57   def browse
58     @panel = Panel.find(params[:id])
59
60     respond_to do |format|
61       format.html { render layout: 'system' }
62     end
63   end
64
65   def new
66     @panel = Panel.new
67     @panel.supply_default @author
68
69     respond_to do |format|
70       format.html # new.html.erb
71       format.js
72       format.json { render json: @panel }
73     end
74   end
75
76   def edit
77     @panel = Panel.show(params[:id], @author)
78     respond_to do |format|
79       format.html
80       format.js
81     end
82   end
83
84   # POST /panels
85   # POST /panels.json
86   def create
87     if params[:json]
88       jsn = JSON.parse(params[:json])
89     end
90     @prm = params[:panel] || jsn
91     @panel = Panel.new(@prm)
92     treat_param @panel
93 #    @comic = Comic.find @panel.comic_id
94
95     respond_to do |format|
96       if @panel.store
97         format.html { redirect_to @panel, notice: 'Panel was successfully created.' }
98         format.json { render json: @panel, status: :created, location: @panel }
99       else
100         format.html { render action: "new" }
101         format.json { render json: @panel.errors, status: :unprocessable_entity }
102       end
103     end
104   end
105
106   # PUT /panels/1
107   # PUT /panels/1.json
108   def update
109     @panel = Panel.find(params[:id])
110     if @panel.own? @author
111       if params[:json]
112         jsn = JSON.parse(params[:json])
113       end
114       @prm = params[:panel] || jsn
115       respond_to do |format|
116         Panel.transaction do
117           if params[:panel][:t] and params[:panel][:t].to_i != @panel.t
118             @panel.move_to params[:panel][:t].to_i
119           end
120           @panel.attributes = @prm
121           if @panel.store
122             format.html { redirect_to @panel, notice: 'Panel was successfully updated.' }
123             format.json { head :ok }
124           else
125             format.html { render action: "edit" }
126             format.json { render json: @panel.errors, status: :unprocessable_entity }
127           end
128         end
129       end
130     else
131       format.html { render action: "edit" }
132       format.json { render json: @panel.errors, status: :unprocessable_entity }
133     end
134   end
135
136   # DELETE /panels/1
137   # DELETE /panels/1.json
138   def destroy
139     @panel = Panel.find(params[:id])
140     if @panel.own? @author
141       respond_to do |format|
142         Panel.transaction do
143           @panel.destroy_and_shorten
144           format.html { redirect_to panels_url }
145           format.json { head :ok }
146         end
147       end
148     else
149       format.html { render action: "edit" }
150       format.json { render json: @panel.errors, status: :unprocessable_entity }
151     end
152   end
153   
154   def move
155     @panel = Panel.find(params[:id])
156     @new_seq = params[:panel][:t].to_i
157     respond_to do |format|
158       Panel.transaction do
159         if @panel.move_to(@new_t)
160           format.html { redirect_to @panel, notice: 'Panel was successfully moved.' }
161           format.json { head :ok }
162         else
163           format.html { render action: "show" }
164           format.json { render json: @panel.errors, status: :unprocessable_entity }
165         end
166       end
167     end
168   end
169   
170 end