diff --git a/Gemfile b/Gemfile index 6638f39b..e4f5bdad 100644 --- a/Gemfile +++ b/Gemfile @@ -17,16 +17,11 @@ gem "rubycas-client", "~>2.2.1" gem "ruby-openid", :require => "openid" gem "sqlite3" gem 'bcrypt-ruby', '~> 2.1.4' -gem 'htmlentities', '~> 4.3.0' gem "webrat", ">=0.7.0", :groups => [:cucumber, :test] gem "database_cleaner", ">=0.5.0", :groups => [:cucumber, :selenium] gem "cucumber-rails", "~>0.3.0", :groups => :cucumber -group :development do - gem "ruby-debug" -end - group :test do gem "flexmock" gem "ZenTest", ">=4.0.0" diff --git a/Gemfile.lock b/Gemfile.lock index 7b77064a..a952d7a4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -27,7 +27,6 @@ GEM bcrypt-ruby (2.1.4) builder (3.0.0) cgi_multipart_eof_fix (2.5.0) - columnize (0.3.4) cucumber (1.0.2) builder (>= 2.1.2) diff-lcs (>= 1.1.2) @@ -50,11 +49,8 @@ GEM hoe (2.12.0) rake (~> 0.8) hpricot (0.8.4) - htmlentities (4.3.0) httpclient (2.2.1) json (1.5.3) - linecache (0.46) - rbx-require-relative (> 0.0.4) memory_test_fix (0.1.3) mongrel (1.1.5) cgi_multipart_eof_fix (>= 2.4) @@ -73,16 +69,10 @@ GEM activesupport (= 2.3.14) rake (>= 0.8.3) rake (0.8.7) - rbx-require-relative (0.0.5) rspec (1.3.2) rspec-rails (1.3.4) rack (>= 1.0.0) rspec (~> 1.3.1) - ruby-debug (0.10.4) - columnize (>= 0.1) - ruby-debug-base (~> 0.10.4.0) - ruby-debug-base (0.10.4) - linecache (>= 0.3) ruby-openid (2.1.8) rubycas-client (2.2.1) activesupport @@ -117,14 +107,12 @@ DEPENDENCIES highline (~> 1.5.0) hoe hpricot - htmlentities (~> 4.3.0) memory_test_fix (~> 0.1.3) mongrel rack (= 1.1.0) rails (~> 2.3.12) rake (~> 0.8.7) rspec-rails (~> 1.3.3) - ruby-debug ruby-openid rubycas-client (~> 2.2.1) sanitize (~> 1.2.1) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 5f681aa4..821d1f79 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -33,6 +33,37 @@ class ProjectsController < ApplicationController end end + def review + ## select project that need reviewing + @projects_to_review = current_user.projects.select {|p| p.needs_review?(current_user)} + + ## select project that are stalled + @stalled_projects = current_user.projects.select {|p| p.stalled?} + + ## select project that are stalled + @blocked_projects = current_user.projects.select {|p| p.blocked?} + + + + + @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 + + @page_title = t('projects.list_reviews') + @count = @projects_to_review.count + @blocked_projects.count + @stalled_projects.count + + @no_projects = current_user.projects.empty? + current_user.projects.cache_note_counts + @new_project = current_user.projects.build + render + end + def done @source_view = params['_source_view'] || 'project_list' @page_title = t('projects.list_completed_projects') @@ -51,6 +82,13 @@ class ProjectsController < ApplicationController render end + def set_reviewed + @project = current_user.projects.find(params[:id]) + @project.last_reviewed = Time.now + @project.save + redirect_to :action => 'show' + end + def projects_and_actions @projects = current_user.projects.active respond_to do |format| diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 5773e5c8..aadb3303 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -67,4 +67,14 @@ module ProjectsHelper project_description end + def needsreview_class(item) + raise "item must be a Project " unless item.kind_of? Project + + if item.needs_review?(current_user) + return "needsreview" + else + return "needsnoreview" + end + end + end diff --git a/app/models/project.rb b/app/models/project.rb index c78e6ccb..a24f9f44 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -107,6 +107,34 @@ class Project < ActiveRecord::Base end end + def needs_review?(current_user) + return false unless !nil? + return true if last_reviewed.nil? + return (active? && (last_reviewed < current_user.time - current_user.prefs.review_period.days)) + end + + def blocked? + ## mutually exclusive for stalled and blocked + return false if stalled? + return false if completed? + is_blocked = true + todos.each do |t| + is_blocked = false if (!t.completed? && !t.deferred? && !t.pending?) + end + return is_blocked + end + + def stalled? + return true if todos.count == 0 + return false if completed? + is_stalled = true + todos.each do |t| + is_stalled = false if (!t.completed?) + end + return is_stalled + end + + def name=(value) self[:name] = value.gsub(/\s{2,}/, " ").strip end diff --git a/app/views/layouts/standard.html.erb b/app/views/layouts/standard.html.erb index 86409650..f47cfa96 100644 --- a/app/views/layouts/standard.html.erb +++ b/app/views/layouts/standard.html.erb @@ -64,6 +64,7 @@