class PeopleController < ApplicationController helper TasksHelper before_filter :authorize, :except => [:index, :search, :show] before_filter :get_person, :only => [:show, :update, :edit, :confirm, :delete] before_filter :get_companies, :only => [:edit, :new, :update, :create] verify :method => :post, :only => [:create, :update, :delete], :redirect_to => {:action => :index} cache_sweeper :people_sweeper, :only => [:update, :delete] in_place_edit_for :person, :notes def index @paginator, @people = paginate :person, :per_page => 10, :select => 'id, last_name, first_name', :order => 'last_name, first_name' @page_title = "People (page #{@paginator.current.number})" end def search # Get the search term from the querystring and put # percentage signs round it so it can be used with a LIKE query term = "%#{params[:term]}%" @paginator, @people = paginate :person, :per_page => 10, :select => 'id, last_name, first_name', :order => 'last_name, first_name', :conditions => ['last_name LIKE :term or first_name LIKE :term OR notes LIKE :term OR keywords LIKE :term', {:term => term}] @page_title = "Search results (page #{@paginator.current.number})" render :action => 'index' end def show get_person unless read_fragment({}) fragment = handle_text_fragment("title") { @person.full_name } @page_title = "Profile for " + fragment end def edit @page_title = "Editing " + @person.full_name @address = @person.address || Address.new end def update @person.address = Address.from_street_1_and_post_code(params[:address]) @address = @person.address || Address.new if @person.update_attributes(params[:person]) redirect_to_index 'Person updated successfully' else @page_title = "Editing " + @person.full_name render :action => 'edit' end end def new @page_title = "Add a new person" @person = Person.new @address = Address.new end def create @person = Person.new(params[:person]) @person.address = Address.from_street_1_and_post_code(params[:address]) @address = @person.address || Address.new if @person.save redirect_to_index 'Person added successfully' else @page_title = "Add a new person" render :action => 'new' end end def confirm prompt = "Do you really want to delete #{@person.full_name}?" confirm_delete @person, prompt end def delete do_delete(@person) end private def get_person @person = Person.find(params[:id], :include => [:company, :address, :tasks], :order => 'tasks.complete ASC, tasks.start DESC') end private def get_companies @companies = Company.find(:all, :order => 'name') end end