diff options
author | David Lawrence <dkl@mozilla.com> | 2015-09-03 05:59:39 +0200 |
---|---|---|
committer | David Lawrence <dkl@mozilla.com> | 2015-09-03 05:59:39 +0200 |
commit | a6c5ec6f935a9bd17e99f5b3190b1af9eb350018 (patch) | |
tree | edf4fc7d162825f28a67fe555f42c21b841bb5d4 /extensions/BMO/lib/Reports | |
parent | 3cc9c7365577f62e1b7c0693225dffb6f153b92f (diff) | |
download | bugzilla-a6c5ec6f935a9bd17e99f5b3190b1af9eb350018.tar.gz bugzilla-a6c5ec6f935a9bd17e99f5b3190b1af9eb350018.tar.xz |
Bug 1196508: Intern Request Metric Dashboard
Diffstat (limited to 'extensions/BMO/lib/Reports')
-rw-r--r-- | extensions/BMO/lib/Reports/Internship.pm | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/extensions/BMO/lib/Reports/Internship.pm b/extensions/BMO/lib/Reports/Internship.pm new file mode 100644 index 000000000..cad403d09 --- /dev/null +++ b/extensions/BMO/lib/Reports/Internship.pm @@ -0,0 +1,119 @@ +# 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::BMO::Reports::Internship; +use strict; +use warnings; + +use Bugzilla::Error; +use Bugzilla::Bug; +use Bugzilla::Product; +use Bugzilla::Component; + +sub report { + my ($vars) = @_; + my $user = Bugzilla->user; + + $user->in_group('hr') + || ThrowUserError('auth_failure', { group => 'hr', + action => 'run', + object => 'internship_dashboard' }); + + my $product = Bugzilla::Product->check({ name => 'Recruiting', cache => 1 }); + my $component = Bugzilla::Component->new({ product => $product, name => 'Intern', cache => 1 }); + + # find all open internship bugs + my $bugs = Bugzilla::Bug->match({ + product_id => $product->id, + component_id => $component->id, + resolution => '', + }); + + # filter bugs based on visibility and re-bless + $user->visible_bugs($bugs); + $bugs = [ + map { bless($_, 'InternshipBug') } + grep { $user->can_see_bug($_->id) } + @$bugs + ]; + + $vars->{bugs} = $bugs; +} + +1; + +package InternshipBug; +use strict; +use warnings; + +use base qw(Bugzilla::Bug); + +use Bugzilla::Comment; +use Bugzilla::Util qw(trim); + +sub _extract { + my ($self) = @_; + return if exists $self->{internship_data}; + $self->{internship_data} = {}; + + # we only need the first comment + my $comment = Bugzilla::Comment->match({ + bug_id => $self->id, + LIMIT => 1, + })->[0]->body; + + # extract just what we need + # changing the comment will break this + + if ($comment =~ /Hiring Manager:\s+(.+)\nTeam:\n/s) { + $self->{internship_data}->{hiring_manager} = trim($1); + } + if ($comment =~ /\nVP Authority:\s+(.+)\nProduct Line:\n/s) { + $self->{internship_data}->{scvp} = trim($1); + } + if ($comment =~ /\nProduct Line:\s+(.+)\nLevel 1/s) { + $self->{internship_data}->{product_line} = trim($1); + } + if ($comment =~ /\nBusiness Need:\s+(.+)\nPotential Project:\n/s) { + $self->{internship_data}->{business_need} = trim($1); + } + if ($comment =~ /\nName:\s+(.+)$/s) { + $self->{internship_data}->{intern_name} = trim($1); + } +} + +sub hiring_manager { + my ($self) = @_; + $self->_extract(); + return $self->{internship_data}->{hiring_manager}; +} + +sub scvp { + my ($self) = @_; + $self->_extract(); + return $self->{internship_data}->{scvp}; +} + +sub business_need { + my ($self) = @_; + $self->_extract(); + return $self->{internship_data}->{business_need}; +} + +sub product_line { + my ($self) = @_; + $self->_extract(); + return $self->{internship_data}->{product_line}; +} + +sub intern_name { + my ($self) = @_; + $self->_extract(); + return $self->{internship_data}->{intern_name}; +} + +1; |