Mercurial > hg > soundsoftware-site
diff app/models/mail_handler.rb @ 1295:622f24f53b42 redmine-2.3
Update to Redmine SVN revision 11972 on 2.3-stable branch
author | Chris Cannam |
---|---|
date | Fri, 14 Jun 2013 09:02:21 +0100 |
parents | 3e4c3460b6ca |
children | 4f746d8966dd |
line wrap: on
line diff
--- a/app/models/mail_handler.rb Fri Jun 14 09:01:12 2013 +0100 +++ b/app/models/mail_handler.rb Fri Jun 14 09:02:21 2013 +0100 @@ -1,5 +1,5 @@ # Redmine - project management software -# Copyright (C) 2006-2012 Jean-Philippe Lang +# Copyright (C) 2006-2013 Jean-Philippe Lang # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -38,7 +38,9 @@ # Status overridable by default @@handler_options[:allow_override] << 'status' unless @@handler_options[:issue].has_key?(:status) - @@handler_options[:no_permission_check] = (@@handler_options[:no_permission_check].to_s == '1' ? true : false) + @@handler_options[:no_account_notice] = (@@handler_options[:no_account_notice].to_s == '1') + @@handler_options[:no_notification] = (@@handler_options[:no_notification].to_s == '1') + @@handler_options[:no_permission_check] = (@@handler_options[:no_permission_check].to_s == '1') email.force_encoding('ASCII-8BIT') if email.respond_to?(:force_encoding) super(email) @@ -97,7 +99,10 @@ if logger && logger.info logger.info "MailHandler: [#{@user.login}] account created" end - Mailer.account_information(@user, @user.password).deliver + add_user_to_group(@@handler_options[:default_group]) + unless @@handler_options[:no_account_notice] + Mailer.account_information(@user, @user.password).deliver + end else if logger && logger.error logger.error "MailHandler: could not create account for [#{sender_email}]" @@ -107,7 +112,7 @@ else # Default behaviour, emails from unknown users are ignored if logger && logger.info - logger.info "MailHandler: ignoring email from unknown user [#{sender_email}]" + logger.info "MailHandler: ignoring email from unknown user [#{sender_email}]" end return false end @@ -264,7 +269,7 @@ if user.allowed_to?("add_#{obj.class.name.underscore}_watchers".to_sym, obj.project) addresses = [email.to, email.cc].flatten.compact.uniq.collect {|a| a.strip.downcase} unless addresses.empty? - watchers = User.active.find(:all, :conditions => ['LOWER(mail) IN (?)', addresses]) + watchers = User.active.where('LOWER(mail) IN (?)', addresses).all watchers.each {|w| obj.add_watcher(w)} end end @@ -338,7 +343,7 @@ }.delete_if {|k, v| v.blank? } if issue.new_record? && attrs['tracker_id'].nil? - attrs['tracker_id'] = issue.project.trackers.find(:first).try(:id) + attrs['tracker_id'] = issue.project.trackers.first.try(:id) end attrs @@ -396,18 +401,19 @@ assign_string_attribute_with_limit(user, 'login', email_address, User::LOGIN_LENGTH_LIMIT) names = fullname.blank? ? email_address.gsub(/@.*$/, '').split('.') : fullname.split - assign_string_attribute_with_limit(user, 'firstname', names.shift) - assign_string_attribute_with_limit(user, 'lastname', names.join(' ')) + assign_string_attribute_with_limit(user, 'firstname', names.shift, 30) + assign_string_attribute_with_limit(user, 'lastname', names.join(' '), 30) user.lastname = '-' if user.lastname.blank? password_length = [Setting.password_min_length.to_i, 10].max user.password = Redmine::Utils.random_hex(password_length / 2 + 1) user.language = Setting.default_language + user.mail_notification = 'only_my_events' unless user.valid? user.login = "user#{Redmine::Utils.random_hex(6)}" unless user.errors[:login].blank? user.firstname = "-" unless user.errors[:firstname].blank? - user.lastname = "-" unless user.errors[:lastname].blank? + (puts user.errors[:lastname];user.lastname = "-") unless user.errors[:lastname].blank? end user @@ -423,6 +429,9 @@ end if addr.present? user = self.class.new_user_from_attributes(addr, name) + if @@handler_options[:no_notification] + user.mail_notification = 'none' + end if user.save user else @@ -435,6 +444,19 @@ end end + # Adds the newly created user to default group + def add_user_to_group(default_group) + if default_group.present? + default_group.split(',').each do |group_name| + if group = Group.named(group_name).first + group.users << @user + elsif logger + logger.warn "MailHandler: could not add user to [#{group_name}], group not found" + end + end + end + end + # Removes the email body of text after the truncation configurations. def cleanup_body(body) delimiters = Setting.mail_handler_body_delimiters.to_s.split(/[\r\n]+/).reject(&:blank?).map {|s| Regexp.escape(s)} @@ -455,7 +477,7 @@ } if assignee.nil? && keyword.match(/ /) firstname, lastname = *(keyword.split) # "First Last Throwaway" - assignee ||= assignable.detect {|a| + assignee ||= assignable.detect {|a| a.is_a?(User) && a.firstname.to_s.downcase == firstname && a.lastname.to_s.downcase == lastname }