# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. # # This Source Code Form is "Incompatible With Secondary Licenses", as # defined by the Mozilla Public License, v. 2.0. package Bugzilla::Extension::Mageia; use strict; use base qw(Bugzilla::Extension); use Bugzilla::Bug; use Bugzilla::Field; use Bugzilla::User; use Bugzilla::Extension::Mageia::Util; use Email::Address; use Encode qw(encode); our $VERSION = '0.10'; # sysadmin-bugs@ml.mageia.org user ID = 175. use constant SYSADMIN_USER_ID => 175; sub bug_end_of_create_validators { my ($self, $args) = @_; # If a user enters 'validated_update' as keyword, # automatically CC sysadmin-bugs@ml.mageia.org. my $keywords = $args->{params}->{keywords}; if (grep { $_->name eq 'validated_update' } @$keywords) { my $cc_list = $args->{params}->{cc}; if (!grep { $_ == SYSADMIN_USER_ID } @$cc_list) { push(@$cc_list, SYSADMIN_USER_ID); } } } sub bug_end_of_update { my ($self, $args) = @_; my $bug = $args->{bug}; my $dbh = Bugzilla->dbh; # If a user enters 'validated_update' as keyword, # automatically CC sysadmin-bugs@ml.mageia.org. my $new_keywords_str = $args->{changes}->{keywords}->[1]; if ($new_keywords_str) { my @new_keywords = split(/[,\s]+/, $new_keywords_str); if (grep { $_ eq 'validated_update' } @new_keywords) { if (!grep { $_->id == SYSADMIN_USER_ID } @{$bug->cc_users}) { # Safer to clear the cache and let Bugzilla regenerate them if needed. delete $bug->{cc_users}; delete $bug->{cc}; $dbh->do('INSERT INTO cc (bug_id, who) VALUES (?, ?)', undef, ($bug->id, SYSADMIN_USER_ID)); # We also have to update the bug history to reflect this change. my $changed_cc = $args->{changes}->{cc}; my $sysadmin_login = user_id_to_login(SYSADMIN_USER_ID); if ($changed_cc->[1]) { $changed_cc->[1] .= ", $sysadmin_login"; } else { $changed_cc->[1] = $sysadmin_login; } my $field_id = get_field_id('cc'); $dbh->do('DELETE FROM bugs_activity WHERE bug_id = ? AND bug_when = ? AND fieldid = ?', undef, ($bug->id, $args->{timestamp}, $field_id)); LogActivityEntry($bug->id, 'cc', $changed_cc->[0] || '', $changed_cc->[1], Bugzilla->user->id, $args->{timestamp}); } } } } sub mailer_before_send { my ($self, $args) = @_; my $email = $args->{email}; # Include the changer's name in the "From:" field. if (my $changer = $email->header('X-Bugzilla-Who')) { $changer = Bugzilla::User->new({ name => $changer }); my $changer_name = $changer ? $changer->name : undef; my $address = Email::Address->new($changer_name, $email->header('From')); $email->header_set('From', encode("MIME_Header", $address->format)); } } __PACKAGE__->NAME;