#-- # Copyright (C) 2007 Dimitrij Denissenko # Please read LICENSE document for more information. #++ class TicketObserver < ActiveRecord::Observer observe Ticket # Subscribe current user # Subscribe assigned user def before_save(ticket) if ticket.subscribe_current_user ticket.add_subscriber(User.current) end if RetroCM[:ticketing][:subscription][:subscribe_on_assignement] && ticket.assigned_user_id && ( ticket.new_record? || ticket.changed_attributes.key?('Assigned user') ) ticket.assigned_user.reload if ticket.assigned_user_id != ticket.assigned_user.id ticket.add_subscriber(ticket.assigned_user) end end # Update ticket cache def after_save(ticket) ticket_cache = ticket.project.existing_tickets if ticket_cache[ticket.id].blank? || ticket_cache[ticket.id][:state] != ticket.state.id || ticket_cache[ticket.id][:summary] != ticket.summary ticket_cache.merge!(ticket.id => {:state => ticket.state.id, :summary => ticket.summary}) ticket.project.update_attribute(:existing_tickets, ticket_cache) end end # Send out notifications to subscribers def after_create(ticket) ticket.permitted_subscribers.each do |user| Notifications.queue_ticket_creation_note(ticket, :recipients => user.email) end end # Remove reference from ticket cache def before_destroy(ticket) ticket_cache = ticket.project.existing_tickets ticket_cache.delete(ticket.id) ticket.project.update_attribute(:existing_tickets, ticket_cache) end end