From ee5c730f44bc12e1d25ccd7b786e3018b84dee63 Mon Sep 17 00:00:00 2001 From: Walter Cruz Date: Tue, 23 Sep 2008 17:06:14 -0300 Subject: [PATCH] Ading a sort by number of tasks option --- app/controllers/projects_controller.rb | 7 +++++++ app/models/user.rb | 6 ++++++ app/views/projects/_project_state_group.rhtml | 14 +++++++++++++- config/routes.rb | 4 ++++ 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index bf84e44d..ed2128de 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -186,6 +186,13 @@ class ProjectsController < ApplicationController init_not_done_counts(['project']) end + def actionize + @state = params['state'] + @projects = current_user.projects.actionize(:state => @state) if @state + @contexts = current_user.contexts + init_not_done_counts(['project']) + end + protected def render_projects_html diff --git a/app/models/user.rb b/app/models/user.rb index bf84bbd3..4b1f41e7 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -51,6 +51,12 @@ class User < ActiveRecord::Base self.update_positions(projects.map{ |p| p.id }) return projects end + def actionize(scope_conditions = {}) + projects = find(:all, :conditions => scope_conditions) + projects.sort!{ |x,y| y.todos.count(:state == 'active') <=> x.todos.count(:state == 'active') } + self.update_positions(projects.map{ |p| p.id }) + return projects + end end has_many :active_projects, :class_name => 'Project', diff --git a/app/views/projects/_project_state_group.rhtml b/app/views/projects/_project_state_group.rhtml index 6fe6ef21..c4a0f0b1 100644 --- a/app/views/projects/_project_state_group.rhtml +++ b/app/views/projects/_project_state_group.rhtml @@ -11,9 +11,21 @@ end end %> + +
+ <%= link_to("Sort By number of tasks", actionize_projects_path(:state => state), + :class => "actionize_link", :title => "Sort these projects by number of tasks") %> + <% apply_behavior '.actionize_link:click', :prevent_default => true do |page, element| + page.confirming 'Are you sure that you want to sort these projects by the number of tasks? This will replace the existing sort order.' do + page << "tasksSort = this.up('.tasks_sort'); + tasksSort.startWaiting();" + page << remote_to_href(:complete => "tasksSort.stopWaiting()") + end + end + %>
<%= render :partial => 'project_listing', :collection => project_state_group %>
<%= sortable_element "list-#{state}-projects", get_listing_sortable_options("list-#{state}-projects") %> - \ No newline at end of file + diff --git a/config/routes.rb b/config/routes.rb index a4eb29e3..4c1e69a6 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -28,6 +28,10 @@ ActionController::Routing::Routes.draw do |map| projects.resources :todos, :name_prefix => "project_" end + map.resources :projects, :collection => {:order => :post, :actionize => :post} do |projects| + projects.resources :todos, :name_prefix => "project_" + end + map.resources :todos, :member => {:toggle_check => :put, :toggle_star => :put}, :collection => {:check_deferred => :post, :filter_to_context => :post, :filter_to_project => :post}