# encoding: utf-8 # # Redmine plugin for Document Management System "Features" # # Copyright (C) 2011 Vít Jonáš # Copyright (C) 2011-16 Karel Pičman # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. require 'mailer' class DmsfMailer < Mailer layout 'mailer' def files_updated(user, project, files) if user && project && files.count > 0 files = files.select { |file| file.notify? } redmine_headers 'Project' => project.identifier if project @files = files @project = project message_id project set_language_if_valid user.language mail :to => user.mail, :subject => "[#{@project.name} - #{l(:menu_dmsf)}] #{l(:text_email_doc_updated_subject)}" end end def files_deleted(user, project, files) if user && files.count > 0 files = files.select { |file| file.notify? } redmine_headers 'Project' => project.identifier if project @files = files @project = project message_id project set_language_if_valid user.language mail :to => user.mail, :subject => "[#{@project.name} - #{l(:menu_dmsf)}] #{l(:text_email_doc_deleted_subject)}" end end def send_documents(project, user, email_params) zipped_content_data = open(email_params[:zipped_content], 'rb') { |io| io.read } redmine_headers 'Project' => project.identifier if project @body = email_params[:body] @links_only = email_params[:links_only] @folders = email_params[:folders] @files = email_params[:files] unless @links_only == '1' attachments['Documents.zip'] = { :content_type => 'application/zip', :content => zipped_content_data } end mail :to => email_params[:to], :cc => email_params[:cc], :subject => email_params[:subject], 'From' => email_params[:from] end def workflow_notification(user, workflow, revision, subject_id, text1_id, text2_id, notice = nil) if user && workflow && revision if revision.dmsf_file && revision.dmsf_file.project @project = revision.dmsf_file.project redmine_headers 'Project' => @project.identifier end set_language_if_valid user.language @user = user message_id workflow @workflow = workflow @revision = revision @text1 = l(text1_id, :name => workflow.name, :filename => revision.dmsf_file.name, :notice => notice) @text2 = l(text2_id) @notice = notice mail :to => user.mail, :subject => "[#{@project.name} - #{l(:field_label_dmsf_workflow)}] #{@workflow.name} #{l(subject_id)}" end end def self.get_notify_users(project, files = []) if files.present? notify_files = files.select { |file| file.notify? } return [] if notify_files.empty? end notify_members = project.members.select do |notify_member| notify_user = notify_member.user if notify_user == User.current && notify_user.pref.no_self_notified false else if notify_member.dmsf_mail_notification.nil? case notify_user.mail_notification when 'all' true when 'selected' notify_member.mail_notification? when 'only_my_events' author = false files.each do |file| if file.involved?(notify_user) author = true break end end author when 'only_owner', 'only_assigned' author = false files.each do |file| if file.owner?(notify_user) author = true break end end author else false end else notify_member.dmsf_mail_notification end end end notify_members.collect { |m| m.user }.uniq end end