Skip to content
Snippets Groups Projects
Commit 7713f7fe authored by Valery Sizov's avatar Valery Sizov
Browse files

Notification refactoring

parent f7859ec1
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -27,7 +27,6 @@ class Admin::UsersController < ApplicationController
 
respond_to do |format|
if @admin_user.save
Notify.new_user_email(@admin_user, params[:user][:password]).deliver
format.html { redirect_to [:admin, @admin_user], notice: 'User was successfully created.' }
format.json { render json: @admin_user, status: :created, location: @admin_user }
else
Loading
Loading
class ApplicationController < ActionController::Base
before_filter :authenticate_user!
before_filter :set_current_user_for_mailer
protect_from_forgery
helper_method :abilities, :can?
 
Loading
Loading
@@ -19,6 +20,10 @@ class ApplicationController < ActionController::Base
end
end
 
def set_current_user_for_mailer
MailerObserver.current_user = current_user
end
def abilities
@abilities ||= Six.new
end
Loading
Loading
Loading
Loading
@@ -67,10 +67,7 @@ class IssuesController < ApplicationController
def create
@issue = @project.issues.new(params[:issue])
@issue.author = current_user
if @issue.save && @issue.assignee != current_user
Notify.new_issue_email(@issue).deliver
end
@issue.save
 
respond_with(@issue)
end
Loading
Loading
Loading
Loading
@@ -12,10 +12,8 @@ class NotesController < ApplicationController
def create
@note = @project.notes.new(params[:note])
@note.author = current_user
if @note.save
notify if params[:notify] == '1'
end
@note.notify = true if params[:notify] == '1'
@note.save
 
respond_to do |format|
format.html {redirect_to :back}
Loading
Loading
@@ -35,22 +33,4 @@ class NotesController < ApplicationController
end
end
 
protected
def notify
@project.users.reject { |u| u.id == current_user.id } .each do |u|
case @note.noteable_type
when "Commit" then
Notify.note_commit_email(u, @note).deliver
when "Issue" then
Notify.note_issue_email(u, @note).deliver
when "MergeRequest"
true # someone should write email notification
when "Snippet"
true
else
Notify.note_wall_email(u, @note).deliver
end
end
end
end
class MailerObserver < ActiveRecord::Observer
observe :issue, :user, :note, :snippet
cattr_accessor :current_user
def after_create(model)
new_issue(model) if model.kind_of?(Issue)
new_user(model) if model.kind_of?(User)
new_note(model) if model.kind_of?(Note)
end
protected
def new_issue(issue)
if issue.assignee != current_user
Notify.new_issue_email(issue).deliver
end
end
def new_user(user)
Notify.new_user_email(user, user.password).deliver
end
def new_note(note)
return unless note.notify
note.project.users.reject { |u| u.id == current_user.id } .each do |u|
case note.noteable_type
when "Commit" then
Notify.note_commit_email(u, note).deliver
when "Issue" then
Notify.note_issue_email(u, note).deliver
when "MergeRequest"
true # someone should write email notification
when "Snippet"
true
else
Notify.note_wall_email(u, note).deliver
end
end
end
end
Loading
Loading
@@ -13,6 +13,7 @@ class Note < ActiveRecord::Base
:prefix => true
 
attr_protected :author, :author_id
attr_accessor :notify
 
validates_presence_of :project
 
Loading
Loading
@@ -35,6 +36,10 @@ class Note < ActiveRecord::Base
scope :inc_author, includes(:author)
 
mount_uploader :attachment, AttachmentUploader
def notify
@notify ||= false
end
end
# == Schema Information
#
Loading
Loading
Loading
Loading
@@ -23,7 +23,7 @@ module Gitlab
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
 
# Activate observers that should always be running.
# config.active_record.observers = :cacher, :garbage_collector, :forum_observer
config.active_record.observers = :mailer_observer
 
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment