diff --git a/tracks/app/controllers/projects_controller.rb b/tracks/app/controllers/projects_controller.rb index b73ddb57..9aa7de1b 100644 --- a/tracks/app/controllers/projects_controller.rb +++ b/tracks/app/controllers/projects_controller.rb @@ -65,6 +65,8 @@ class ProjectsController < ApplicationController def update params['project'] ||= {} if params['project']['state'] + @state_changed = @project.state != params['project']['state'] + logger.info "@state_changed: #{@project.state} == #{params['project']['state']} != #{@state_changed}" @project.transition_to(params['project']['state']) params['project'].delete('state') end @@ -81,6 +83,9 @@ class ProjectsController < ApplicationController else @project_not_done_counts[@project.id] = @project.reload().not_done_todo_count(:include_project_hidden_todos => true) end + @active_projects_count = @user.projects.count(:conditions => "state = 'active'") + @hidden_projects_count = @user.projects.count(:conditions => "state = 'hidden'") + @completed_projects_count = @user.projects.count(:conditions => "state = 'completed'") render elsif boolean_param('update_status') render :action => 'update_status' @@ -101,15 +106,13 @@ class ProjectsController < ApplicationController end end - # Methods for changing the sort order of the projects in the list - # def order - params["list-projects"].each_with_index do |id, position| - if check_user_matches_project_user(id) - Project.update(id, :position => position + 1) - end - end + project_ids = params["list-active-projects"] || params["list-hidden-projects"] || params["list-completed-projects"] + projects = @user.projects.update_positions( project_ids ) render :nothing => true + rescue + notify :error, $! + redirect_to :action => 'index' end protected @@ -118,6 +121,9 @@ class ProjectsController < ApplicationController lambda do init_project_hidden_todo_counts @page_title = "TRACKS::List Projects" + @active_projects = @projects.select{ |p| p.active? } + @hidden_projects = @projects.select{ |p| p.hidden? } + @completed_projects = @projects.select{ |p| p.completed? } render end end @@ -148,18 +154,7 @@ class ProjectsController < ApplicationController @project = @user.projects.find_by_params(params) render :text => 'Project not found', :status => 404 if @project.nil? end - - def check_user_matches_project_user(id) - @project = Project.find_by_id_and_user_id(id, @user.id) - if @user == @project.user - return @project - else - @project = nil - notify :warning, "Project and session user mis-match: #{@project.user_id} and #{@user.id}!" - render :text => '' - end - end - + def check_user_return_item item = Todo.find( params['id'] ) if @user == item.user diff --git a/tracks/app/controllers/users_controller.rb b/tracks/app/controllers/users_controller.rb index b6f0e625..da371e1d 100644 --- a/tracks/app/controllers/users_controller.rb +++ b/tracks/app/controllers/users_controller.rb @@ -138,12 +138,12 @@ class UsersController < ApplicationController end def update_password - if do_change_password_for(@user) - redirect_to :controller => 'preferences' - else - redirect_to :action => 'change_password' - notify :warning, "There was a problem saving the password. Please retry." - end + @user.change_password(params[:updateuser][:password], params[:updateuser][:password_confirmation]) + notify :notice, "Password updated." + redirect_to :controller => 'preferences' + rescue Exception => error + notify :error, error.message + redirect_to :action => 'change_password' end def change_auth_type @@ -224,19 +224,6 @@ class UsersController < ApplicationController redirect_to :controller => 'preferences', :action => 'index' end - protected - - def do_change_password_for(user) - user.change_password(params[:updateuser][:password], params[:updateuser][:password_confirmation]) - if user.save - notify :notice, "Password updated." - return true - else - notify :error, 'There was a problem saving the password. Please retry.' - return false - end - end - private def get_new_user diff --git a/tracks/app/helpers/projects_helper.rb b/tracks/app/helpers/projects_helper.rb index f91d8a61..e0d7f482 100644 --- a/tracks/app/helpers/projects_helper.rb +++ b/tracks/app/helpers/projects_helper.rb @@ -1,12 +1,12 @@ module ProjectsHelper -def get_listing_sortable_options - { - :tag => 'div', - :handle => 'handle', - :complete => visual_effect(:highlight, 'list-projects'), - :url => order_projects_path - } -end + def get_listing_sortable_options(list_container_id) + { + :tag => 'div', + :handle => 'handle', + :complete => visual_effect(:highlight, list_container_id), + :url => order_projects_path + } + end end diff --git a/tracks/app/models/project.rb b/tracks/app/models/project.rb index 5ea67b50..84022914 100644 --- a/tracks/app/models/project.rb +++ b/tracks/app/models/project.rb @@ -9,7 +9,7 @@ class Project < ActiveRecord::Base validates_does_not_contain :name, :string => '/', :message => "cannot contain the slash ('/') character" validates_does_not_contain :name, :string => ',', :message => "cannot contain the comma (',') character" - acts_as_list :scope => :user + acts_as_list :scope => 'user_id = #{user_id} AND state = \'#{state}\'' acts_as_state_machine :initial => :active, :column => 'state' extend NamePartFinder include Tracks::TodoList diff --git a/tracks/app/models/user.rb b/tracks/app/models/user.rb index 2ceccb2c..d884308f 100644 --- a/tracks/app/models/user.rb +++ b/tracks/app/models/user.rb @@ -30,6 +30,13 @@ class User < ActiveRecord::Base find_by_url_friendly_name(params['project']) end end + def update_positions(project_ids) + project_ids.each_with_index do |id, position| + project = self.detect { |p| p.id == id.to_i } + raise "Project id #{id} not associated with user id #{@user.id}." if project.nil? + project.update_attribute(:position, position + 1) + end + end end has_many :todos, :order => 'completed_at DESC, todos.created_at DESC', @@ -110,6 +117,7 @@ class User < ActiveRecord::Base def change_password(pass,pass_confirm) self.password = pass self.password_confirmation = pass_confirm + save! end def crypt_word diff --git a/tracks/app/views/contexts/_context_listing.rhtml b/tracks/app/views/contexts/_context_listing.rhtml index c824d14e..8af019ff 100644 --- a/tracks/app/views/contexts/_context_listing.rhtml +++ b/tracks/app/views/contexts/_context_listing.rhtml @@ -1,6 +1,6 @@ <% context = context_listing %>