From 0a57a68a87b2d3e08a4191c42475fbf974a5303a Mon Sep 17 00:00:00 2001 From: Reinier Balt Date: Tue, 11 Jun 2013 11:12:21 +0200 Subject: [PATCH] Project and context view can now be grouped by context and project (using view menu) --- app/controllers/application_controller.rb | 5 +++++ app/controllers/contexts_controller.rb | 4 ++++ app/controllers/projects_controller.rb | 4 +++- app/controllers/todos_controller.rb | 1 - app/helpers/todos_helper.rb | 12 ++++++------ app/views/contexts/_context.html.erb | 2 +- app/views/contexts/show.html.erb | 6 +++++- app/views/projects/_project.html.erb | 5 +---- app/views/projects/show.html.erb | 9 ++++++++- config/locales/en.yml | 1 + 10 files changed, 34 insertions(+), 15 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index bc2ec16a..84e77b55 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -20,6 +20,7 @@ class ApplicationController < ActionController::Base before_filter :set_time_zone before_filter :set_zindex_counter before_filter :set_locale + append_before_filter :set_group_view_by prepend_before_filter :login_required prepend_before_filter :enable_mobile_content_negotiation after_filter :set_charset @@ -290,4 +291,8 @@ class ApplicationController < ActionController::Base render :template => 'todos/done' end + def set_group_view_by + @group_view_by = params['_group_view_by'] || cookies['group_view_by'] || 'context' + end + end diff --git a/app/controllers/contexts_controller.rb b/app/controllers/contexts_controller.rb index 98cb3dea..e8761822 100644 --- a/app/controllers/contexts_controller.rb +++ b/app/controllers/contexts_controller.rb @@ -42,6 +42,7 @@ class ContextsController < ApplicationController @max_completed = current_user.prefs.show_number_completed @done = @context.todos.completed.limit(@max_completed).reorder("todos.completed_at DESC, todos.created_at DESC").includes(Todo::DEFAULT_INCLUDES) @not_done_todos = @context.todos.active.reorder("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) @@ -49,6 +50,9 @@ class ContextsController < ApplicationController @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| diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 13cb3572..ac978c05 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -131,12 +131,14 @@ class ProjectsController < ApplicationController @not_done_todos = @project.todos.active_or_hidden.includes(Todo::DEFAULT_INCLUDES) @deferred_todos = @project.todos.deferred.includes(Todo::DEFAULT_INCLUDES) @pending_todos = @project.todos.pending.includes(Todo::DEFAULT_INCLUDES) + @contexts_to_show = current_user.contexts.active + @projects_to_show = [@project] @done = {} @done = @project.todos.completed. reorder("todos.completed_at DESC"). limit(current_user.prefs.show_number_completed). - includes(Todo::DEFAULT_INCLUDES) unless current_user.prefs.show_number_completed == 0 + includes(Todo::DEFAULT_INCLUDES) unless @max_completed == 0 @count = @not_done_todos.size @down_count = @count + @deferred_todos.size + @pending_todos.size diff --git a/app/controllers/todos_controller.rb b/app/controllers/todos_controller.rb index e44aeb38..57378de1 100644 --- a/app/controllers/todos_controller.rb +++ b/app/controllers/todos_controller.rb @@ -3,7 +3,6 @@ class TodosController < ApplicationController skip_before_filter :login_required, :only => [:index, :tag] prepend_before_filter :login_or_feed_token_required, :only => [:index, :tag] append_before_filter :find_and_activate_ready, :only => [:index, :list_deferred] - append_before_filter :set_group_view_by, :only => [:index, :tag, :create, :list_deferred, :destroy, :defer, :update, :toggle_check] protect_from_forgery :except => :check_deferred diff --git a/app/helpers/todos_helper.rb b/app/helpers/todos_helper.rb index 6d1b8a95..ca830024 100644 --- a/app/helpers/todos_helper.rb +++ b/app/helpers/todos_helper.rb @@ -21,13 +21,13 @@ module TodosHelper end end - def show_grouped_todos + def show_grouped_todos(settings = {}) collection = (@group_view_by == 'context') ? @contexts_to_show : @projects_to_show - render(:partial => collection, :locals => { :settings => { + render(:partial => collection, :locals => { :settings => settings.reverse_merge!({ :collapsible => true, :show_empty_containers => @show_empty_containers, :parent_container_type => @group_view_by - }}) + })}) end def default_collection_settings @@ -80,14 +80,14 @@ module TodosHelper :locals => {:settings => settings.reverse_merge!(default_collection_settings)} end - def show_todos_without_project(todos_without_project) + def show_todos_without_project(todos_without_project, settings = {}) render :partial => 'todos/collection', :object => todos_without_project, - :locals => {:settings => { + :locals => {:settings => settings.reverse_merge!({ :collapsible => true, :container_name => "without_project", :parent_container_type => "home" - } + }) } end diff --git a/app/views/contexts/_context.html.erb b/app/views/contexts/_context.html.erb index dab212aa..ceb8d908 100644 --- a/app/views/contexts/_context.html.erb +++ b/app/views/contexts/_context.html.erb @@ -3,7 +3,7 @@ # invalidate the cache every day because of staleness or # rendering of "due in x days" that change without touching updated at of the todo cache [context, @source_view, current_user.date.strftime("%Y%m%d"), @tag_name] do -%> +-%> <%= render :partial => 'todos/collection', :object => @not_done, diff --git a/app/views/contexts/show.html.erb b/app/views/contexts/show.html.erb index 4913b736..0c6c5d1e 100644 --- a/app/views/contexts/show.html.erb +++ b/app/views/contexts/show.html.erb @@ -2,9 +2,13 @@ suffix_completed = t('contexts.last_completed_in_context', :number=>prefs.show_number_completed) deferred_pending_options = {:append_descriptor => nil, :parent_container_type => 'context'} done_todo_options = {:append_descriptor => suffix_completed, :suppress_context => true, :parent_container_type => 'context'} + show_empty_containers = (@group_view_by == 'context') -%>
- <%= render :partial => @context, :locals => { :settings => {:collapsible => false, :show_empty_containers => true, :parent_container_type => 'context' }} %> + <%= show_grouped_todos({:collapsible => false, :show_empty_containers => show_empty_containers, :parent_container_type => 'context'}) %> + <% if @group_view_by == 'project' -%> + <%= show_todos_without_project(@todos_without_project, {:collapsible => false, :parent_container_type => 'context', :title_param => @context.name}) -%> + <% end -%> <%= show_deferred_pending_todos(@deferred_todos, @pending_todos, deferred_pending_options) %> diff --git a/app/views/projects/_project.html.erb b/app/views/projects/_project.html.erb index 536c714c..3a8b2246 100644 --- a/app/views/projects/_project.html.erb +++ b/app/views/projects/_project.html.erb @@ -2,11 +2,8 @@ @not_done = @not_done_todos.select {|t| t.project_id == project.id } # invalidate the cache every day because of staleness or # rendering of "due in x days" that change without touching updated at of the todo -cache [project, @source_view, current_user.date.strftime("%Y%m%d")] do +cache [project, @source_view, current_user.date.strftime("%Y%m%d"), @tag_name] do -%> - <% if source_view_is :project -%> - <%= render :partial => "project_settings_container", :locals => {:project => project} %> - <% end -%> <%= title = source_view_is(:project) ? t('projects.actions_in_project_title') : show_project_name(project) diff --git a/app/views/projects/show.html.erb b/app/views/projects/show.html.erb index add4d028..6b777649 100644 --- a/app/views/projects/show.html.erb +++ b/app/views/projects/show.html.erb @@ -5,11 +5,18 @@ :suppress_project => true, :parent_container_type => 'project' } + if @not_done_todos.count == 0 + # force project view so one empty container will be shown with an empty message + @group_view_by = 'project' + end + show_empty_containers = (@group_view_by == 'project') -%>
<%= project_next_prev %> - <%= render :partial => @project, :locals => {:settings => {:collapsible => false, :show_empty_containers => true, :parent_container_type => 'project' }} %> + <%= render :partial => "project_settings_container", :locals => {:project => @project} %> + + <%= show_grouped_todos({:collapsible => false, :show_empty_containers => show_empty_containers, :parent_container_type => 'project' }) %> <%= show_deferred_pending_todos(@deferred_todos, @pending_todos, deferred_pending_options) %> diff --git a/config/locales/en.yml b/config/locales/en.yml index b0279b07..7e430a3e 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -452,6 +452,7 @@ en: home_completed: Completed actions tag_completed: "Completed actions tagged with '%{param}'" home_without_project: "Actions without project" + context_without_project: "Actions without project in %{param}" project_project: "Actions in this project" project_deferred_pending: Deferred/pending actions in this project context_deferred_pending: Deferred/pending actions in this context