OSDN Git Service

add url validator
[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       Panel.transaction do
97         if @panel.store
98           format.html { redirect_to @panel, notice: 'Panel was successfully created.' }
99           format.json { render json: @panel, status: :created, location: @panel }
100         else
101           format.html { render action: "new" }
102           format.json { render json: @panel.errors, status: :unprocessable_entity }
103         end
104       end
105     end
106   end
107
108   # PUT /panels/1
109   # PUT /panels/1.json
110   def update
111     @panel = Panel.find(params[:id])
112     if @panel.own? @author
113       respond_to do |format|
114         Panel.transaction do
115           if params[:panel][:t] and params[:panel][:t].to_i != @panel.t
116             @panel.move_to params[:panel][:t].to_i
117           end
118           if @panel.update_attributes(params[:panel])
119             format.html { redirect_to @panel, notice: 'Panel was successfully updated.' }
120             format.json { head :ok }
121           else
122             format.html { render action: "edit" }
123             format.json { render json: @panel.errors, status: :unprocessable_entity }
124           end
125         end
126       end
127     else
128       format.html { render action: "edit" }
129       format.json { render json: @panel.errors, status: :unprocessable_entity }
130     end
131   end
132
133   # DELETE /panels/1
134   # DELETE /panels/1.json
135   def destroy
136     @panel = Panel.find(params[:id])
137     if @panel.own? @author
138       respond_to do |format|
139         Panel.transaction do
140           @panel.destroy_and_shorten
141           format.html { redirect_to panels_url }
142           format.json { head :ok }
143         end
144       end
145     else
146       format.html { render action: "edit" }
147       format.json { render json: @panel.errors, status: :unprocessable_entity }
148     end
149   end
150   
151   def move
152     @panel = Panel.find(params[:id])
153     @new_seq = params[:panel][:t].to_i
154     respond_to do |format|
155       Panel.transaction do
156         if @panel.move_to(@new_t)
157           format.html { redirect_to @panel, notice: 'Panel was successfully moved.' }
158           format.json { head :ok }
159         else
160           format.html { render action: "show" }
161           format.json { render json: @panel.errors, status: :unprocessable_entity }
162         end
163       end
164     end
165   end
166   
167 end