diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 152f68d2..88f4174b 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -100,11 +100,7 @@ class ApplicationController < ActionController::Base end def count_deferred_todos(todos_parent) - if todos_parent.nil? - count = 0 - else - count = todos_parent.todos.deferred.count - end + return todos_parent.nil? ? 0 : eval("@#{todos_parent.class.to_s.downcase}_deferred_counts[#{todos_parent.id}]") || 0 end # Convert a date object to the format specified in the user's preferences in @@ -284,7 +280,8 @@ class ApplicationController < ActionController::Base def init_not_done_counts(parents = ['project','context']) parents.each do |parent| - eval("@#{parent}_not_done_counts = @#{parent}_not_done_counts || current_user.todos.active.count(:group => :#{parent}_id)") + eval("@#{parent}_not_done_counts ||= current_user.todos.active.group('#{parent}_id').count") + eval("@#{parent}_deferred_counts ||= current_user.todos.deferred.group('#{parent}_id').count") end end diff --git a/app/controllers/contexts_controller.rb b/app/controllers/contexts_controller.rb index 2aabfc84..81b9d952 100644 --- a/app/controllers/contexts_controller.rb +++ b/app/controllers/contexts_controller.rb @@ -67,6 +67,7 @@ class ContextsController < ApplicationController respond_to do |format| format.js do @down_count = current_user.contexts.size + init_not_done_counts end format.xml do if @context.new_record? diff --git a/app/controllers/integrations_controller.rb b/app/controllers/integrations_controller.rb index 002b3d34..219068f5 100644 --- a/app/controllers/integrations_controller.rb +++ b/app/controllers/integrations_controller.rb @@ -2,7 +2,7 @@ class IntegrationsController < ApplicationController require 'mail' skip_before_filter :login_required, :only => [:cloudmailin, :search_plugin, :google_gadget] - + def index @page_title = 'TRACKS::Integrations' end @@ -27,11 +27,8 @@ class IntegrationsController < ApplicationController end def search_plugin - # TODO: ASSET PATH!! - @icon_data = [File.open(Rails.root + '/app/assets/images/done.png').read]. + @icon_data = [File.open(File.join(Rails.root, 'app', 'assets', 'images', 'done.png')).read]. pack('m').gsub(/\n/, '') - - render :layout => false end def google_gadget diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index e67f0bd0..5ce4ae41 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -182,7 +182,10 @@ class ProjectsController < ApplicationController @contexts = current_user.contexts respond_to do |format| - format.js { @down_count = current_user.projects.size } + format.js do + @down_count = current_user.projects.size + init_not_done_counts + end format.xml do if @project.new_record? render_failure @project.errors.to_xml.html_safe, 409 diff --git a/app/controllers/todos_controller.rb b/app/controllers/todos_controller.rb index 17eb5664..fca3a6e6 100644 --- a/app/controllers/todos_controller.rb +++ b/app/controllers/todos_controller.rb @@ -10,26 +10,6 @@ class TodosController < ApplicationController # :calendar, :auto_complete_for_predecessor, :remove_predecessor, :add_predecessor] protect_from_forgery :except => :check_deferred - - def with_parent_resource_scope(&block) - @feed_title = t('common.actions') - if (params[:context_id]) - @context = current_user.contexts.find_by_params(params) - @feed_title = @feed_title + t('todos.feed_title_in_context', :context => @context.name) - Todo.send :where, ['todos.context_id = ?', @context.id] do - yield - end - elsif (params[:project_id]) - @project = current_user.projects.find_by_params(params) - @feed_title = @feed_title + t('todos.feed_title_in_project', :project => @project.name) - @project_feed = true - Todo.send :where, ['todos.project_id = ?', @project.id] do - yield - end - else - yield - end - end def index @source_view = params['_source_view'] || 'todo' diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 05afee5b..b03d773e 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -200,7 +200,7 @@ module ApplicationHelper return content_tag(:li, t('sidebar.list_empty')).html_safe else return list.inject("") do |html, item| - link = (item.class == "Project") ? link_to_project( item ) : link_to_context(item) + link = item.is_a?(Project) ? link_to_project( item ) : link_to_context(item) html << content_tag(:li, link + " (" + count_undone_todos_phrase(item)+")") end.html_safe end diff --git a/app/models/todo.rb b/app/models/todo.rb index 9402491a..e43d8842 100644 --- a/app/models/todo.rb +++ b/app/models/todo.rb @@ -26,12 +26,12 @@ class Todo < ActiveRecord::Base scope :active, :conditions => { :state => 'active' } scope :active_or_hidden, :conditions => ["todos.state = ? OR todos.state = ?", 'active', 'project_hidden'] scope :not_completed, :conditions => ['NOT (todos.state = ?)', 'completed'] - scope :completed, :conditions => ["NOT (todos.completed_at IS NULL)"] - scope :deferred, :conditions => ["todos.completed_at IS NULL AND NOT (todos.show_from IS NULL)"] + scope :completed, :conditions => ["todos.state = ?", 'completed'] + scope :deferred, :conditions => ["todos.state = ?", 'deferred'] scope :blocked, :conditions => ['todos.state = ?', 'pending'] scope :pending, :conditions => ['todos.state = ?', 'pending'] - scope :deferred_or_blocked, :conditions => ["(todos.completed_at IS NULL AND NOT(todos.show_from IS NULL)) OR (todos.state = ?)", "pending"] - scope :not_deferred_or_blocked, :conditions => ["(todos.completed_at IS NULL) AND (todos.show_from IS NULL) AND (NOT todos.state = ?)", "pending"] + scope :deferred_or_blocked, :conditions => ["(todos.state = ?) OR (todos.state = ?)", "deferred", "pending"] + scope :not_deferred_or_blocked, :conditions => ["(NOT todos.state=?) AND (NOT todos.state = ?)", "deferred", "pending"] scope :hidden, :joins => "INNER JOIN contexts c_hidden ON c_hidden.id = todos.context_id", :conditions => ["todos.state = ? OR (c_hidden.hide = ? AND (todos.state = ? OR todos.state = ? OR todos.state = ?))", diff --git a/app/views/integrations/search_plugin.rxml b/app/views/integrations/search_plugin.xml.builder similarity index 100% rename from app/views/integrations/search_plugin.rxml rename to app/views/integrations/search_plugin.xml.builder diff --git a/app/views/layouts/standard.html.erb b/app/views/layouts/standard.html.erb index 3ea698e8..39523908 100644 --- a/app/views/layouts/standard.html.erb +++ b/app/views/layouts/standard.html.erb @@ -26,7 +26,7 @@ <%= auto_discovery_link_tag(:rss, {:controller => "todos", :action => "index", :format => 'rss', :token => "#{current_user.token}"}, {:title => t('layouts.next_actions_rss_feed')}) %> - +