-
Notifications
You must be signed in to change notification settings - Fork 5
/
doodles_controller.rb
114 lines (98 loc) · 3.36 KB
/
doodles_controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
class DoodlesController < ApplicationController
unloadable
before_filter :find_project, :except => [:show, :destroy, :update, :lock, :edit, :answer]
before_filter :find_doodle, :only => [:show, :destroy, :update, :lock, :edit, :answer]
before_filter :authorize
verify :method => :post, :only => [:lock, :answer], :redirect_to => { :action => :show }
helper :watchers
include WatchersHelper
def index
@doodles = @project.doodles.reverse
end
def new
end
def edit
end
def show
@author = @doodle.author
@responses = @doodle.responses
@winners = @doodle.winning_columns
# Give the current user an empty answer if she hasn't answered yet and the doodle is active
if @doodle.active? && User.current.allowed_to?(:answer_doodles, @project)
@response = @responses.find_by_author_id(User.current.id)
@response ||= DoodleAnswers.new :author => User.current
@response.answers ||= Array.new(@doodle.options.size, false)
@responses = @responses | [ @response ]
end
# Code later needed for comments
#@comments = @doodle.comments
#@comments.reverse! if User.current.wants_comments_in_reverse_order?
end
def destroy
end
def create
@doodle.attributes = params[:doodle]
@doodle.watcher_user_ids = params[:doodle]['watcher_user_ids']
@doodle.should_answer_ids = params[:doodle]['watcher_user_ids']
if @doodle.save
flash[:notice] = l(:notice_successful_create)
redirect_to :action => 'show', :id => @doodle
else
render :action => 'new', :project_id => @project
end
end
def update
@doodle.attributes = params[:doodle]
if @doodle.save
flash[:notice] = l(:doodle_update_successful)
redirect_to :action => 'show', :id => @doodle
else
flash[:warning] = l(:doodle_update_unsuccessful)
redirect_to :action => 'edit', :id => @doodle
end
end
def answer
unless @doodle.active?
flash[:error] = l(:doodle_inactive)
redirect_to :action => 'show', :id => @doodle
return
end
@user = User.current
params[:answers] ||= []
@answers = Array.new(@doodle.options.size) { |index| params[:answers].include?(index.to_s) }
@response = @doodle.responses.find_or_initialize_by_author_id(@user.id)
@response.answers = @answers
if @response.save
flash[:notice] = l(:doodle_update_successful)
redirect_to :action => 'show', :id => @doodle
else
flash[:warning] = l(:doodle_update_unsuccessful)
redirect_to :action => 'show', :id => @doodle
end
end
def lock
@doodle.update_attribute :locked, params[:locked]
redirect_to :action => 'show', :id => @doodle
end
def preview
if params[:doodle]
@doodle = Doodle.new(params[:doodle]).previewfy
unless @doodle.options.nil? || @doodle.options.empty?
@winners = []
@responses = [DoodleAnswers.new(:author => User.current, :answers => Array.new(@doodle.options.size, false))]
end
render :layout => false
end
end
private
def find_project
@project = Project.find(params[:project_id])
@doodle = Doodle.new(:project => @project, :author => User.current)
end
def find_doodle
@doodle = Doodle.find(params[:id], :include => [:project, :author, :responses, :should_answer])
@project = @doodle.project
rescue ActiveRecord::RecordNotFound
render_404
end
end