OSDN Git Service

add editor
[pettanr/pettanr.git] / app / controllers / sheets_controller.rb
1 class SheetsController < ApplicationController
2   if Manifest.manifest.magic_numbers['run_mode'] == 0
3     before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
4     before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
5   else
6     before_filter :authenticate_reader, :only => [:index, :show, :play, :story_sheets, :stories, :sheet_panels, :panels, :by_story, :by_panel, :by_author]
7     before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
8     before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
9   end
10
11   def self.model
12     Sheet
13   end
14   
15   def index
16     public_list
17   end
18   
19   def story_sheets
20     has_many_list
21   end
22   
23   def stories
24     has_many_list
25   end
26   
27   def sheet_panels
28     has_many_list
29   end
30   
31   def panels
32     has_many_list
33   end
34   
35   def by_story
36     filter_list
37   end
38   
39   def by_panel
40     filter_list
41   end
42   
43   def by_author
44     filter_list
45   end
46   
47   def show
48     @item = Sheet.show(params[:id], @operators)
49
50     respond_to do |format|
51       format.html {
52         if @operators.author
53           @new_panel_items = assist_items('panel', 'private_list')
54           @new_panel_filer = assist_filer 'panel', @new_panel_items
55           
56           @new_story_items = assist_items('story', 'private_list')
57           @new_story_filer = assist_filer 'story', @new_story_items
58           @fresh_story_items = assist_items('story_sheet', 'private_list').map {|ss| ss.story}
59           @fresh_story_filer = assist_filer 'story', @fresh_story_items
60         end
61       }
62       format_prof format
63       format.json { render json: @item.to_json(Sheet.show_json_opt) }
64       format.atom 
65       format.rss 
66     end
67   end
68
69   def play
70     @item = self.class.model.show(params[:id], @operators)
71     action_name = params[:action]
72     @action = self.class.controller.open(action_name, params, @operators)
73     @items = @action.list.items @item
74     respond_to do |format|
75       format.html {
76         @count = @action.list.count @item
77         @prev_offset = @action.list.prev_offset @item
78         @next_offset = @action.list.next_offset @item
79         if @operators.author
80           @new_panel_items = assist_items('panel', 'private_list')
81           @new_panel_filer = assist_filer 'panel', @new_panel_items
82         end
83       }
84       format.json { render json: @items.to_json(self.class.model.list_json_opt) }
85     end
86   end
87   
88   def count
89     @sheet = {:count => Sheet.visible_count}
90     respond_to do |format|
91       format.json { render json: @sheet.to_json }
92     end
93   end
94   
95   def new
96     @sheet = Sheet.new
97     @sheet.supply_default
98     respond_to do |format|
99       format.html
100       format.js
101       format.json { render json: @sheet.to_json(Sheet.show_json_opt) }
102     end
103   end
104
105   def edit
106     @sheet = Sheet.edit(params[:id], @operators)
107     respond_to do |format|
108       format.html 
109       format.js
110     end
111   end
112
113   def create
114     @sheet = Sheet.new
115     @sheet.supply_default 
116     jsn = nil
117     if params[:json]
118       jsn = JSON.parse_no_except(params[:json])
119     end
120     @prm = params[:sheet] || jsn
121
122     respond_to do |format|
123       if @sheet.store @prm, @operators
124         flash[:notice] = I18n.t('flash.notice.created', :model => Sheet.model_name.human)
125         format.html { redirect_to @sheet }
126         format.json { render json: @sheet.to_json(Sheet.show_json_opt), status: :created, location: @sheet }
127       else
128         flash[:notice] = I18n.t('flash.notice.not_created', :model => Sheet.model_name.human)
129         format.html { render action: "new" }
130         format.json { render json: @sheet.errors, status: :unprocessable_entity }
131       end
132     end
133   end
134
135   def update
136     @sheet = Sheet.edit(params[:id], @operators)
137     jsn = nil
138     if params[:json]
139       jsn = JSON.parse(params[:json])
140     end
141     @prm = params[:sheet] || jsn
142     respond_to do |format|
143       if @sheet.store @prm, @operators
144         flash[:notice] = I18n.t('flash.notice.updated', :model => Sheet.model_name.human)
145         format.html { redirect_to @sheet }
146         format.json { head :ok }
147       else
148         flash[:notice] = I18n.t('flash.notice.not_updated', :model => Sheet.model_name.human)
149         format.html { render action: "edit" }
150         format.json { render json: @sheet.errors, status: :unprocessable_entity }
151       end
152     end
153   end
154
155   def destroy
156     @sheet = Sheet.edit(params[:id], @operators)
157     respond_to do |format|
158       if @sheet.destroy_with_sheet_panel
159         flash[:notice] = I18n.t('flash.notice.destroyed', :model => Sheet.model_name.human)
160         format.html { redirect_to '/home/sheets' }
161         format.json { head :ok }
162       else
163         flash[:notice] = I18n.t('flash.notice.not_destroyed', :model => Sheet.model_name.human)
164         format.html { redirect_to @sheet }
165         format.json { render json: @sheet.errors, status: :unprocessable_entity }
166       end
167     end
168   end
169 end