blob: b9a846cf2e73d20f71a0372b09b0c3e0e66c3dc3 [file] [log] [blame]
# More information:
# * {EPF Wiki Data model}[link:files/doc/DATAMODEL.html]
#--######################################################################
# Copyright (c) 2006 Logica
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
#
# Onno van der Straaten:: initial implementation
#++######################################################################
# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
class Notifier < ActionMailer::Base
def welcome_pw_confirmationlink(user, request_host = ENV['EPFWIKI_HOST'])
content_type "text/html"
@recipients = user.email
@from = ENV['EPFWIKI_REPLY_ADDRESS']
@subject = "[" + ENV['EPFWIKI_APP_NAME'] + "] Welcome"
@body['user'] = user
@body['admin'] = User.find_central_admin
@body['subject'] = @subject
@body['request_host'] = request_host
end
def lost_password(user, urls)
content_type "text/html"
@recipients = user.email
@from = ENV['EPFWIKI_REPLY_ADDRESS']
@subject = "[" + ENV['EPFWIKI_APP_NAME'] + "] New Password"
@body['user'] = user
@body['admin'] = User.find_central_admin
@body['cnt'] = User.count
@body['urls'] = urls
end
def error_report(exception, trace, session, params, env, sent_on = Time.now)
content_type "text/html"
@recipients = User.find_central_admin.email
@from = ENV['EPFWIKI_REPLY_ADDRESS']
@subject = "[Error] exception in #{env['REQUEST_URI']}"
@sent_on = sent_on
@body["exception"] = exception
@body["trace"] = trace
@body["session"] = session
@body["params"] = params
@body["env"] = env
end
def summary(params, runtime = Time.now)
content_type "text/html"
case params[:type]
when 'D' # daily
starttime = (runtime - 1.day).at_beginning_of_day
endtime = runtime.at_beginning_of_day
@bcc = email_addresses_4_report(User.find_all_by_notify_daily(1))
subject_text = 'Daily'
when 'W' # weekly
starttime = (runtime - 1.week).at_beginning_of_week
endtime = runtime.at_beginning_of_week
@bcc = email_addresses_4_report(User.find_all_by_notify_weekly(1))
subject_text = 'Weekly'
when 'M' # monthly
starttime = (runtime - 1.month).at_beginning_of_month
endtime = runtime.at_beginning_of_month
@bcc = email_addresses_4_report(User.find_all_by_notify_monthly(1))
subject_text = 'Monthly'
else
raise 'Report type is required'
end
@bcc = email_addresses_4_report(params[:user]) unless params[:user].blank?
@subject = "[#{ENV['EPFWIKI_APP_NAME']}] #{subject_text} Summary"
items = UserVersion.find(:all, :conditions => ['created_on > ? and created_on < ?', starttime, endtime ]) +
Comment.find(:all, :conditions => ['created_on > ? and created_on < ?', starttime, endtime ]) +
Upload.find(:all, :conditions => ['created_on > ? and created_on < ?', starttime, endtime ]) +
Wiki.find(:all, :conditions => ['created_on > ? and created_on < ?', starttime, endtime ])+
Update.find(:all, :conditions => ['created_on > ? and created_on < ?', starttime, endtime ]) +
User.find(:all, :conditions => ['created_on > ? and created_on < ?', starttime, endtime ]) +
WikiPage.find(:all, :conditions => ['created_on > ? and created_on < ? and tool=?', starttime, endtime, 'Wiki'])
Checkout.find(:all)
items.sort_by {|item|item.created_on}
@body['wikis'] = []
items.each do |item|
logger.debug("item: #{item.inspect}")
w = nil
case item.class.name
when Comment.name then w = item.site
when Wiki.name then w = item
when Update.name then w = item.wiki
when Checkout.name then w = item.site
when Version.name then w = item.wiki
end
@body['wikis'] << w if !w.nil?
end
@body['wikis'] = @body['wikis'].uniq
@from = ENV['EPFWIKI_REPLY_ADDRESS']
@sent_on = Time.now
@body['runtime'] = runtime
@body['endtime'] = endtime
@body['starttime'] = starttime
@body['contributions'] = items
@body['subject'] = subject
@body['admin'] = User.find_central_admin
@body['host'] = ENV['EPFWIKI_HOST']
@body['items'] = items
end
def env_to(user, session, params, env, sent_on = Time.now)
content_type "text/html"
@recipients = user.email
@from = ENV['EPFWIKI_REPLY_ADDRESS']
@subject = "[" + ENV['EPFWIKI_APP_NAME'] + "] " + params[:action]
@sent_on = sent_on
@body["session"] = session
@body["params"] = params
@body["env"] = env
end
def site_status(update, subject)
content_type "text/html"
@from = ENV['EPFWIKI_REPLY_ADDRESS']
@body['admin'] = User.find_central_admin
@subject = "[#{ENV['EPFWIKI_APP_NAME']}] #{subject}"
@body['subject'] = @subject
@recipients = update.user.email
@cc = @body['admin'].email
@body['update'] = update
end
def notification(theUsers, subject, introduction, text, request_host = ENV['EPFWIKI_HOST'])
@from = ENV['EPFWIKI_REPLY_ADDRESS']
content_type "text/html"
@subject = "[#{ENV['EPFWIKI_APP_NAME']}] #{subject}"
@bcc = email_addresses_4_report(theUsers)
@body['link'] = "<a href=\"http://#{request_host}/users/account\">#{ENV['EPFWIKI_APP_NAME']}</a>"
@body['introduction'] = introduction
@body['text'] = text
@body['admin'] = User.find_central_admin
@body['subject'] = @subject
end
# TODO replace with notification
def email(theUsers, theSubject, theFilePaths, theText, cc = nil)
@from = ENV['EPFWIKI_REPLY_ADDRESS']
@cc = email_addresses_4_report(cc) unless cc.nil?
content_type "text/html"
@subject = "[" + ENV['EPFWIKI_APP_NAME'] + "] " + theSubject
@recipients = email_addresses_4_report(theUsers)
@body['text'] = theText
@body['admin'] = User.find_central_admin
for filePath in theFilePaths
attachment :content_type => "application/zip", :body => File.open(filePath, "rb") {|io| io.read}, :filename => filePath.split("/").last
end
end
def contributions_processed(user, contributions)
@recipients = email_addresses_4_report(user)
content_type "text/html"
@body['contributions'] = contributions
@body['admin'] = User.find_central_admin
@body['user'] = user
@from = ENV['EPFWIKI_REPLY_ADDRESS']
@bcc = email_addresses_4_report(@body['admin'])
@subject = "[#{ENV['EPFWIKI_APP_NAME']}] Your contribution has been processed"
@body['subject'] = @subject
end
def authorisation_problem(user, session, params, env)
user = User.new(:name => 'Unknown', :email => 'Unknown') if user.nil?
content_type 'text/html'
@body['admin'] = User.find_central_admin
@recipients = email_addresses_4_report(@body['admin'])
@from = ENV['EPFWIKI_REPLY_ADDRESS']
@subject = "[#{ENV['EPFWIKI_APP_NAME']}] Autorisation Problem Detected"
@body['session'] = session
@body['params'] = params
@body['env'] = env
@body['subject'] = @subject
@body['user'] = user
end
def feedback(feedback)
content_type 'text/html'
@body['admin'] = User.find_central_admin
@recipients = email_addresses_4_report(@body['admin'])
@from = ENV['EPFWIKI_REPLY_ADDRESS']
@subject = "[#{ENV['EPFWIKI_APP_NAME']}] Feedback Posted"
@body['subject'] = @subject
@body['feedback'] = feedback
@body['anywiki'] = Wiki.find(:first, :conditions => ['obsolete_on is null'])
end
end