summaryrefslogtreecommitdiffstats
path: root/extensions/BMO/lib
diff options
context:
space:
mode:
authorDavid Lawrence <dkl@mozilla.com>2015-09-03 05:59:39 +0200
committerDavid Lawrence <dkl@mozilla.com>2015-09-03 05:59:39 +0200
commita6c5ec6f935a9bd17e99f5b3190b1af9eb350018 (patch)
treeedf4fc7d162825f28a67fe555f42c21b841bb5d4 /extensions/BMO/lib
parent3cc9c7365577f62e1b7c0693225dffb6f153b92f (diff)
downloadbugzilla-a6c5ec6f935a9bd17e99f5b3190b1af9eb350018.tar.gz
bugzilla-a6c5ec6f935a9bd17e99f5b3190b1af9eb350018.tar.xz
Bug 1196508: Intern Request Metric Dashboard
Diffstat (limited to 'extensions/BMO/lib')
-rw-r--r--extensions/BMO/lib/Reports/Internship.pm119
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;