Class: ProjectsController
- Inherits:
-
ApplicationController
show all
- Defined in:
- app/controllers/projects_controller.rb
Instance Method Summary
(collapse)
#admin_login_required, #boolean_param, #cas_enabled?, cas_enabled?, #check_for_deprecated_password_hash, #count_deferred_todos, #count_undone_todos, #count_undone_todos_phrase, #create_todo_from_recurring_todo, #enable_mobile_content_negotiation, #for_autocomplete, #format_date, #format_dependencies_as_json_for_auto_complete, #get_done_this_month, #get_done_this_week, #get_done_today, #handle_unverified_request, #init_data_for_sidebar, #init_not_done_counts, #init_project_hidden_todo_counts, #markdown, #mobile?, #notify, openid_enabled?, #openid_enabled?, #parse_date_per_user_prefs, prefered_auth?, #prefered_auth?, #redirect_back_or_home, #render_failure, #set_charset, #set_locale, #set_session_expiration, #set_time_zone, #set_zindex_counter
#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
- (Object) actionize
265
266
267
268
269
270
|
# File 'app/controllers/projects_controller.rb', line 265
def actionize
@state = params['state']
@projects = current_user.projects.actionize(:state => @state) if @state
@contexts = current_user.contexts
init_not_done_counts(['project'])
end
|
- (Object) all_done_todos
287
288
289
290
291
292
293
294
295
|
# File 'app/controllers/projects_controller.rb', line 287
def all_done_todos
@source_view = 'project'
@project = current_user.projects.find(params[:id])
@page_title = t('projects.all_completed_tasks_title', :project_name => @project.name)
@done = @project.todos.completed.paginate :page => params[:page], :per_page => 20, :order => 'completed_at DESC', :include => Todo::DEFAULT_INCLUDES
@count = @done.size
render :template => 'todos/all_done'
end
|
- (Object) alphabetize
258
259
260
261
262
263
|
# File 'app/controllers/projects_controller.rb', line 258
def alphabetize
@state = params['state']
@projects = current_user.projects.alphabetize(:state => @state) if @state
@contexts = current_user.contexts
init_not_done_counts(['project'])
end
|
- (Object) create
Example XML usage: curl -H ‘Accept: application/xml’ -H ‘Content-Type:
application/xml’
-u username:password
-d ‘new project_name’
http://our.tracks.host/projects
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
# File 'app/controllers/projects_controller.rb', line 127
def create
if params[:format] == 'application/xml' && params['exception']
render_failure "Expected post format is valid xml like so: <request><project><name>project name</name></project></request>."
return
end
@project = current_user.projects.build
params_are_invalid = true
if (params['project'] || (params['request'] && params['request']['project']))
@project.attributes = params['project'] || params['request']['project']
params_are_invalid = false
end
@go_to_project = params['go_to_project']
@saved = @project.save
@project_not_done_counts = { @project.id => 0 }
@active_projects_count = current_user.projects.active.count
@contexts = current_user.contexts
respond_to do |format|
format.js { @down_count = current_user.projects.size }
format.xml do
if @project.new_record? && params_are_invalid
render_failure "Expected post format is valid xml like so: <request><project><name>project name</name></project></request>."
elsif @project.new_record?
render_failure @project.errors.full_messages.join(', ')
else
head :created, :location => project_url(@project), :text => @project.id
end
end
format.html {redirect_to :action => 'index'}
end
end
|
- (Object) default_context_filter
382
383
384
385
386
387
388
389
390
391
392
393
|
# File 'app/controllers/projects_controller.rb', line 382
def default_context_filter
p = params['project']
p = params['request']['project'] if p.nil? && params['request']
p = {} if p.nil?
default_context_name = p['default_context_name']
p.delete('default_context_name')
unless default_context_name.blank?
default_context = current_user.contexts.find_or_create_by_name(default_context_name)
p['default_context_id'] = default_context.id
end
end
|
- (Object) destroy
236
237
238
239
240
241
242
243
244
245
246
247
|
# File 'app/controllers/projects_controller.rb', line 236
def destroy
@project.recurring_todos.each {|rt| rt.remove_from_project!}
@project.destroy
respond_to do |format|
format.js {
@down_count = current_user.projects.size
update_state_counts
}
format.xml { render :text => "Deleted project #{@project.name}" }
end
end
|
- (Object) done
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'app/controllers/projects_controller.rb', line 56
def done
@source_view = params['_source_view'] || 'project_list'
@page_title = t('projects.list_completed_projects')
page = params[:page] || 1
projects_per_page = 20
@projects = current_user.projects.completed.paginate :page => page, :per_page => projects_per_page
@count = @projects.count
@total = current_user.projects.completed.count
@no_projects = @projects.empty?
@range_low = (page.to_i-1) * projects_per_page + 1
@range_high = @range_low + @projects.size - 1
init_not_done_counts(['project'])
end
|
- (Object) done_todos
272
273
274
275
276
277
278
279
280
281
282
283
284
285
|
# File 'app/controllers/projects_controller.rb', line 272
def done_todos
@source_view = 'project'
@project = current_user.projects.find(params[:id])
@page_title = t('projects.completed_tasks_title', :project_name => @project.name)
completed_todos = @project.todos.completed
@done_today = get_done_today(completed_todos)
@done_this_week = get_done_this_week(completed_todos)
@done_this_month = get_done_this_month(completed_todos)
@count = @done_today.size + @done_this_week.size + @done_this_month.size
render :template => 'todos/done'
end
|
- (Object) edit
230
231
232
233
234
|
# File 'app/controllers/projects_controller.rb', line 230
def edit
respond_to do |format|
format.js
end
end
|
- (Object) feed_options
364
365
366
|
# File 'app/controllers/projects_controller.rb', line 364
def feed_options
Project.feed_options(current_user)
end
|
- (Object) index
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/projects_controller.rb', line 10
def index
@source_view = params['_source_view'] || 'project_list'
@new_project = current_user.projects.build
if params[:projects_and_actions]
projects_and_actions
else
@contexts = current_user.contexts.all
init_not_done_counts(['project'])
init_project_hidden_todo_counts(['project'])
if params[:only_active_with_no_next_actions]
@projects = current_user.projects.active.select { |p| count_undone_todos(p) == 0 }
else
@projects = current_user.projects.all
end
respond_to do |format|
format.html &render_projects_html
format.m &render_projects_mobile
format.xml { render :xml => @projects.to_xml( :except => :user_id ) }
format. &
format.atom &render_atom_feed
format.text &render_text_feed
format.autocomplete { render :text => for_autocomplete(current_user.projects.uncompleted, params[:term]) }
end
end
end
|
- (Object) order
249
250
251
252
253
254
255
256
|
# File 'app/controllers/projects_controller.rb', line 249
def order
project_ids = params["container_project"]
@projects = current_user.projects.update_positions( project_ids )
render :nothing => true
rescue
notify :error, $!
redirect_to :action => 'index'
end
|
- (Object) projects_and_actions
79
80
81
82
83
84
85
86
|
# File 'app/controllers/projects_controller.rb', line 79
def projects_and_actions
@projects = current_user.projects.active
respond_to do |format|
format.text {
render :action => 'index_text_projects_and_actions', :layout => false, :content_type => Mime::TEXT
}
end
end
|
- (Object) render_atom_feed
355
356
357
358
359
360
361
362
|
# File 'app/controllers/projects_controller.rb', line 355
def render_atom_feed
lambda do
render_atom_feed_for @projects, :feed => feed_options,
:item => { :description => lambda { |p| @template.summary(p) },
:title => :name,
:author => lambda { |p| nil } }
end
end
|
- (Object) render_project_mobile
334
335
336
337
338
339
340
341
342
343
344
345
|
# File 'app/controllers/projects_controller.rb', line 334
def render_project_mobile
lambda do
if @project.default_context.nil?
@project_default_context = t('projects.no_default_context')
else
@project_default_context = t('projects.default_context', :context => @project.default_context.name)
end
cookies[:mobile_url]= {:value => request.request_uri, :secure => SITE_CONFIG['secure_cookies']}
@mobile_from_project = @project.id
render :action => 'project_mobile'
end
end
|
- (Object) render_projects_html
308
309
310
311
312
313
314
315
316
317
318
319
320
321
|
# File 'app/controllers/projects_controller.rb', line 308
def render_projects_html
lambda do
@page_title = t('projects.list_projects')
@count = current_user.projects.count
@active_projects = current_user.projects.active
@hidden_projects = current_user.projects.hidden
@completed_projects = current_user.projects.completed.find(:all, :limit => 10)
@completed_count = current_user.projects.completed.count
@no_projects = current_user.projects.empty?
current_user.projects.cache_note_counts
@new_project = current_user.projects.build
render
end
end
|
- (Object) render_projects_mobile
323
324
325
326
327
328
329
330
331
332
|
# File 'app/controllers/projects_controller.rb', line 323
def render_projects_mobile
lambda do
@active_projects = current_user.projects.active
@hidden_projects = current_user.projects.hidden
@completed_projects = current_user.projects.completed
@down_count = @active_projects.size + @hidden_projects.size + @completed_projects.size
cookies[:mobile_url]= {:value => request.request_uri, :secure => SITE_CONFIG['secure_cookies']}
render :action => 'index_mobile'
end
end
|
347
348
349
350
351
352
353
|
# File 'app/controllers/projects_controller.rb', line 347
def
lambda do
@projects, :feed => feed_options,
:title => :name,
:item => { :description => lambda { |p| @template.summary(p) } }
end
end
|
- (Object) render_text_feed
368
369
370
371
372
|
# File 'app/controllers/projects_controller.rb', line 368
def render_text_feed
lambda do
render :action => 'index', :layout => false, :content_type => Mime::TEXT
end
end
|
- (Object) review
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'app/controllers/projects_controller.rb', line 36
def review
@page_title = t('projects.list_reviews')
@projects = current_user.projects.all
@contexts = current_user.contexts.all
@projects_to_review = current_user.projects.select {|p| p.needs_review?(current_user)}
@stalled_projects = current_user.projects.select {|p| p.stalled?}
@blocked_projects = current_user.projects.select {|p| p.blocked?}
@current_projects = current_user.projects.uncompleted.select {|p| not(p.needs_review?(current_user))}
init_not_done_counts(['project'])
init_project_hidden_todo_counts(['project'])
current_user.projects.cache_note_counts
@page_title = t('projects.list_reviews')
@count = @projects_to_review.count + @blocked_projects.count + @stalled_projects.count + @current_projects.count
@no_projects = current_user.projects.empty?
@new_project = current_user.projects.build
end
|
- (Object) set_project_from_params
374
375
376
|
# File 'app/controllers/projects_controller.rb', line 374
def set_project_from_params
@project = current_user.projects.find_by_params(params)
end
|
- (Object) set_reviewed
73
74
75
76
77
|
# File 'app/controllers/projects_controller.rb', line 73
def set_reviewed
@project.last_reviewed = Time.zone.now
@project.save
redirect_to :action => 'show'
end
|
- (Object) set_source_view
378
379
380
|
# File 'app/controllers/projects_controller.rb', line 378
def set_source_view
@source_view = params['_source_view'] || 'project'
end
|
- (Object) show
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
115
116
117
118
119
|
# File 'app/controllers/projects_controller.rb', line 88
def show
@max_completed = current_user.prefs.show_number_completed
unless mobile?
@page_title = t('projects.page_title', :project => @project.name)
@not_done = @project.todos.active_or_hidden(:include => Todo::DEFAULT_INCLUDES)
@deferred = @project.todos.deferred(:include => Todo::DEFAULT_INCLUDES)
@pending = @project.todos.pending(:include => Todo::DEFAULT_INCLUDES)
@done = @project.todos.find_in_state(:all, :completed,
:order => "todos.completed_at DESC", :limit => current_user.prefs.show_number_completed, :include => Todo::DEFAULT_INCLUDES)
@count = @not_done.size
@down_count = @count + @deferred.size + @pending.size
@next_project = current_user.projects.next_from(@project)
@previous_project = current_user.projects.previous_from(@project)
@default_tags = @project.default_tags
@new_note = current_user.notes.new
@new_note.project_id = @project.id
@contexts = current_user.contexts
respond_to do |format|
format.html
format.m &render_project_mobile
format.xml {
render :xml => @project.to_xml(:except => :user_id) { |xml|
xml.not_done { @not_done.each { |child| child.to_xml(:builder => xml, :skip_instruct => true) } }
xml.deferred { @deferred.each { |child| child.to_xml(:builder => xml, :skip_instruct => true) } }
xml.pending { @pending.each { |child| child.to_xml(:builder => xml, :skip_instruct => true) } }
xml.done { @done.each { |child| child.to_xml(:builder => xml, :skip_instruct => true) } }
}
}
end
end
|
- (Object) update
Edit the details of the project
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
|
# File 'app/controllers/projects_controller.rb', line 163
def update
template = ""
params['project'] ||= {}
if params['project']['state']
@new_state = params['project']['state']
@state_changed = @project.state != @new_state
params['project'].delete('state')
end
success_text = if params['field'] == 'name' && params['value']
params['project']['id'] = params['id']
params['project']['name'] = params['value']
end
@project.attributes = params['project']
@saved = @project.save
if @saved
@project.transition_to(@new_state) if @state_changed
if boolean_param('wants_render')
if (@project.hidden?)
@project_project_hidden_todo_counts = Hash.new
@project_project_hidden_todo_counts[@project.id] = @project.reload().todos.active_or_hidden.count
else
@project_not_done_counts = Hash.new
@project_not_done_counts[@project.id] = @project.reload().todos.active_or_hidden.count
end
@contexts = current_user.contexts
update_state_counts
template = 'projects/update.js.erb'
elsif boolean_param('update_status')
template = 'projects/update_status.js.rjs'
elsif boolean_param('update_default_context')
@initial_context_name = @project.default_context.name
template = 'projects/update_default_context.js.rjs'
elsif boolean_param('update_default_tags')
template = 'projects/update_default_tags.js.rjs'
elsif boolean_param('update_project_name')
@projects = current_user.projects
template = 'projects/update_project_name.js.rjs'
else
render :text => success_text || 'Success'
return
end
else
template = 'projects/update.js.erb'
end
respond_to do |format|
format.js { render :template => template }
format.html { redirect_to :action => 'index'}
format.xml {
if @saved
render :xml => @project.to_xml( :except => :user_id )
else
render :text => "Error on update: #{@project.errors.full_messages.inject("") {|v, e| v + e + " " }}", :status => 409
end
}
end
end
|
- (Object) update_state_counts
299
300
301
302
303
304
305
306
|
# File 'app/controllers/projects_controller.rb', line 299
def update_state_counts
@active_projects_count = current_user.projects.active.count
@hidden_projects_count = current_user.projects.hidden.count
@completed_projects_count = current_user.projects.completed.count
@show_active_projects = @active_projects_count > 0
@show_hidden_projects = @hidden_projects_count > 0
@show_completed_projects = @completed_projects_count > 0
end
|