Class: ContextsController
Instance Method Summary
collapse
#admin_login_required, #admin_or_self_login_required, #all_done_todos_for, #boolean_param, cas_enabled?, #cas_enabled?, #count_deferred_todos, #count_undone_todos, #count_undone_todos_phrase, #done_todos_for, #enable_mobile_content_negotiation, #for_autocomplete, #format_date, #format_dependencies_as_json_for_auto_complete, #handle_unverified_request, #init_data_for_sidebar, #init_hidden_todo_counts, #init_not_done_counts, #mobile?, #notify, #openid_enabled?, openid_enabled?, #parse_date_per_user_prefs, prefered_auth?, #prefered_auth?, #redirect_back_or_home, #render_failure, #sanitize, #set_group_view_by, #set_locale, #set_session_expiration, #set_time_zone, #set_zindex_counter, #todo_xml_params
Methods included from Common
like_operator, #set_theme
#access_denied, #authorize?, #basic_auth_denied, #current_user, #get_basic_auth_data, #get_current_user, #logged_in?, #login_from_cookie, #login_optional, #login_or_feed_token_required, #login_required, #logout_user, #prefs, #protect?, #redirect_back_or_default, #redirect_to_login, #set_current_user, #store_location
Instance Method Details
#all_done_todos ⇒ Object
162
163
164
|
# File 'app/controllers/contexts_controller.rb', line 162
def all_done_todos
all_done_todos_for current_user.contexts.find(params[:id])
end
|
#context_params ⇒ Object
168
169
170
|
# File 'app/controllers/contexts_controller.rb', line 168
def context_params
params.require(:context).permit(:name, :position, :state)
end
|
#create ⇒ Object
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
# File 'app/controllers/contexts_controller.rb', line 69
def create
if params[:format] == 'application/xml' && params['exception']
render_failure "Expected post format is valid xml like so: <context><name>context name</name></context>.", 400
return
end
@context = current_user.contexts.build(context_params)
@context.hide! if params['context_state'] && params['context_state']['hide'] == '1'
@saved = @context.save
@context_not_done_counts = { @context.id => 0 }
respond_to do |format|
format.js do
@down_count = current_user.contexts.size
init_not_done_counts
init_hidden_todo_counts(['context'])
end
format.xml do
if @context.new_record?
render_failure @context.errors.full_messages.to_xml(root: "errors", skip_types: true).html_safe, 409
else
head :created, :location => context_url(@context)
end
end
end
end
|
#destroy ⇒ Object
Fairly self-explanatory; deletes the context If the context contains
actions, you’ll get a warning dialogue. If you choose to go ahead, any
actions in the context will also be deleted.
133
134
135
136
137
138
139
140
141
142
143
144
145
|
# File 'app/controllers/contexts_controller.rb', line 133
def destroy
@context.recurring_todos.each(&:clear_todos_association) unless @context.recurring_todos.nil?
@context.destroy
respond_to do |format|
format.js do
@down_count = current_user.contexts.size
update_state_counts
end
format.xml { render :body => "Deleted context #{@context.name}" }
end
end
|
#done_todos ⇒ Object
158
159
160
|
# File 'app/controllers/contexts_controller.rb', line 158
def done_todos
done_todos_for current_user.contexts.find(params[:id])
end
|
#edit ⇒ Object
123
124
125
126
127
128
|
# File 'app/controllers/contexts_controller.rb', line 123
def edit
@context = Context.find(params[:id])
respond_to do |format|
format.js
end
end
|
#feed_options ⇒ Object
227
228
229
|
# File 'app/controllers/contexts_controller.rb', line 227
def feed_options
Context.feed_options(current_user)
end
|
#index ⇒ Object
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
|
# File 'app/controllers/contexts_controller.rb', line 9
def index
@all_contexts = current_user.contexts
@active_contexts = current_user.contexts.active
@hidden_contexts = current_user.contexts.hidden
@closed_contexts = current_user.contexts.closed
unless request.format == :autocomplete
init_not_done_counts(['context'])
init_hidden_todo_counts(['context'])
end
respond_to do |format|
format.html &render_contexts_html
format.m &render_contexts_mobile
format.xml { render :xml => @all_contexts.to_xml(:root => :contexts, :except => :user_id) }
format.any(:rss, :atom) do
@feed_title = 'Tracks Contexts'
@feed_description = "Lists all the contexts for #{current_user.display_name}"
end
format.text do
['Content-Type'] = Mime[:text].to_s
render :action => 'index', :layout => false, :content_type => Mime[:text]
end
format.autocomplete &render_autocomplete
end
end
|
#init ⇒ Object
237
238
239
240
|
# File 'app/controllers/contexts_controller.rb', line 237
def init
@source_view = params['_source_view'] || 'context'
end
|
#order ⇒ Object
Methods for changing the sort order of the contexts in the list
149
150
151
152
153
154
155
156
|
# File 'app/controllers/contexts_controller.rb', line 149
def order
context_ids = params["container_context"]
@projects = current_user.contexts.update_positions(context_ids)
head :ok
rescue
notify :error, $!
redirect_to :action => 'index'
end
|
#process_params_for_update ⇒ Object
242
243
244
245
246
247
248
249
250
251
252
|
# File 'app/controllers/contexts_controller.rb', line 242
def process_params_for_update
params['context'] ||= {}
@success_text = if params['field'] == 'name' && params['value']
params['context']['id'] = params['id']
params['context']['name'] = params['value']
end
@original_context_state = @context.state
@new_state = params['context']['state']
params['context'].delete('state')
end
|
#render_autocomplete ⇒ Object
221
222
223
224
225
|
# File 'app/controllers/contexts_controller.rb', line 221
def render_autocomplete
lambda do
render :body => for_autocomplete(current_user.contexts, params[:term])
end
end
|
#render_context_mobile ⇒ Object
210
211
212
213
214
215
216
217
218
219
|
# File 'app/controllers/contexts_controller.rb', line 210
def render_context_mobile
lambda do
@page_title = "TRACKS::List actions in " + @context.name
@not_done = @not_done_todos.select { |t| t.context_id == @context.id }
@down_count = @not_done.size
cookies[:mobile_url] = { :value => request.fullpath, :secure => SITE_CONFIG['secure_cookies'] }
@mobile_from_context = @context.id
render
end
end
|
#render_contexts_html ⇒ Object
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
|
# File 'app/controllers/contexts_controller.rb', line 183
def render_contexts_html
lambda do
@page_title = "TRACKS::List Contexts"
@no_active_contexts = @active_contexts.empty?
@no_hidden_contexts = @hidden_contexts.empty?
@no_closed_contexts = @closed_contexts.empty?
@active_count = @active_contexts.size
@hidden_count = @hidden_contexts.size
@closed_count = @closed_contexts.size
@count = @active_count + @hidden_count + @closed_count
@new_context = current_user.contexts.build
render
end
end
|
#render_contexts_mobile ⇒ Object
199
200
201
202
203
204
205
206
207
208
|
# File 'app/controllers/contexts_controller.rb', line 199
def render_contexts_mobile
lambda do
@page_title = "TRACKS::List Contexts"
@active_contexts = current_user.contexts.active
@hidden_contexts = current_user.contexts.hidden
@down_count = @active_contexts.size + @hidden_contexts.size
cookies[:mobile_url] = { :value => request.fullpath, :secure => SITE_CONFIG['secure_cookies'] }
render
end
end
|
#set_context_from_params ⇒ Object
231
232
233
234
235
|
# File 'app/controllers/contexts_controller.rb', line 231
def set_context_from_params
@context = current_user.contexts.find(params[:id])
rescue
@context = nil
end
|
#set_state_for_update(new_state) ⇒ Object
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
|
# File 'app/controllers/contexts_controller.rb', line 254
def set_state_for_update(new_state)
begin
unless @original_context_state == new_state
if new_state == 'active'
@context.activate!
elsif new_state == 'hidden'
@context.hide!
elsif new_state == 'closed'
@context.close!
end
end
return true
rescue AASM::InvalidTransition
@context.errors.add(:state, "cannot be changed. The context cannot be closed if you have uncompleted actions in this context")
return false
end
end
|
#show ⇒ Object
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
|
# File 'app/controllers/contexts_controller.rb', line 36
def show
set_context_from_params
unless @context.nil?
@max_completed = current_user.prefs.show_number_completed
@done = @context.todos.completed.limit(@max_completed).reorder(Arel.sql("todos.completed_at DESC, todos.created_at DESC")).includes(Todo::DEFAULT_INCLUDES)
@not_done_todos = @context.todos.active_or_hidden.not_project_hidden.reorder(Arel.sql('todos.due IS NULL, todos.due ASC, todos.created_at ASC')).includes(Todo::DEFAULT_INCLUDES)
@todos_without_project = @not_done_todos.select { |t| t.project.nil? }
@deferred_todos = @context.todos.deferred.includes(Todo::DEFAULT_INCLUDES)
@pending_todos = @context.todos.pending.includes(Todo::DEFAULT_INCLUDES)
@projects = current_user.projects
@contexts = current_user.contexts
@projects_to_show = @projects.active
@contexts_to_show = [@context]
@count = @not_done_todos.count + @deferred_todos.count + @pending_todos.count
@page_title = "TRACKS::Context: #{@context.name}"
respond_to do |format|
format.html
format.m &render_context_mobile
format.xml { render :xml => @context.to_xml(:root => :context, :except => :user_id) }
end
else
respond_to do |format|
format.html { render :body => 'Context not found', :status => 404 }
format.xml { render :xml => '<error>Context not found</error>', :status => 404 }
end
end
end
|
#update ⇒ Object
Edit the details of the context
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
# File 'app/controllers/contexts_controller.rb', line 95
def update
process_params_for_update
@context.attributes = context_params
@saved = @context.save
@state_saved = set_state_for_update(@new_state)
@saved &&= @state_saved
if @saved
@state_changed = (@original_context_state != @context.state)
@new_state = @context.state if @state_changed
@active_contexts = current_user.contexts.active
@hidden_contexts = current_user.contexts.hidden
@closed_contexts = current_user.contexts.closed
end
respond_to do |format|
format.js
format.xml do
if @saved
render :xml => @context.to_xml(:except => :user_id)
else
render :body => "Error on update: #{@context.errors.full_messages.inject("") { |v, e| v + e + " " }}", :status => 409
end
end
end
end
|
#update_state_counts ⇒ Object
174
175
176
177
178
179
180
181
|
# File 'app/controllers/contexts_controller.rb', line 174
def update_state_counts
@active_contexts_count = current_user.contexts.active.count
@hidden_contexts_count = current_user.contexts.hidden.count
@closed_contexts_count = current_user.contexts.closed.count
@show_active_contexts = @active_contexts_count > 0
@show_hidden_contexts = @hidden_contexts_count > 0
@show_closed_contexts = @closed_contexts_count > 0
end
|