summaryrefslogtreecommitdiffstats
path: root/extensions/MoreBugUrl
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/MoreBugUrl')
-rw-r--r--extensions/MoreBugUrl/Config.pm19
-rw-r--r--extensions/MoreBugUrl/Extension.pm43
-rw-r--r--extensions/MoreBugUrl/disabled0
-rw-r--r--extensions/MoreBugUrl/lib/ReviewBoard.pm42
-rw-r--r--extensions/MoreBugUrl/lib/Rietveld.pm45
-rw-r--r--extensions/MoreBugUrl/template/en/default/hook/global/user-error-bug_url_invalid_tracker.html.tmpl10
6 files changed, 159 insertions, 0 deletions
diff --git a/extensions/MoreBugUrl/Config.pm b/extensions/MoreBugUrl/Config.pm
new file mode 100644
index 000000000..b5af9c00e
--- /dev/null
+++ b/extensions/MoreBugUrl/Config.pm
@@ -0,0 +1,19 @@
+# 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::MoreBugUrl;
+use strict;
+
+use constant NAME => 'MoreBugUrl';
+
+use constant REQUIRED_MODULES => [
+];
+
+use constant OPTIONAL_MODULES => [
+];
+
+__PACKAGE__->NAME;
diff --git a/extensions/MoreBugUrl/Extension.pm b/extensions/MoreBugUrl/Extension.pm
new file mode 100644
index 000000000..715316585
--- /dev/null
+++ b/extensions/MoreBugUrl/Extension.pm
@@ -0,0 +1,43 @@
+# 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::MoreBugUrl;
+use strict;
+use base qw(Bugzilla::Extension);
+
+use constant MORE_SUB_CLASSES => qw(
+ Bugzilla::Extension::MoreBugUrl::ReviewBoard
+ Bugzilla::Extension::MoreBugUrl::Rietveld
+);
+
+# We need to update bug_see_also table because both
+# Rietveld and ReviewBoard were originally under Bugzilla/BugUrl/.
+sub install_update_db {
+ my $dbh = Bugzilla->dbh;
+
+ my $should_rename = $dbh->selectrow_array(
+ q{SELECT 1 FROM bug_see_also
+ WHERE class IN ('Bugzilla::BugUrl::Rietveld',
+ 'Bugzilla::BugUrl::ReviewBoard')});
+
+ if ($should_rename) {
+ my $sth = $dbh->prepare('UPDATE bug_see_also SET class = ?
+ WHERE class = ?');
+ $sth->execute('Bugzilla::Extension::MoreBugUrl::ReviewBoard',
+ 'Bugzilla::BugUrl::ReviewBoard');
+
+ $sth->execute('Bugzilla::Extension::MoreBugUrl::Rietveld',
+ 'Bugzilla::BugUrl::Rietveld');
+ }
+}
+
+sub bug_url_sub_classes {
+ my ($self, $args) = @_;
+ push @{ $args->{sub_classes} }, MORE_SUB_CLASSES;
+}
+
+__PACKAGE__->NAME;
diff --git a/extensions/MoreBugUrl/disabled b/extensions/MoreBugUrl/disabled
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/extensions/MoreBugUrl/disabled
diff --git a/extensions/MoreBugUrl/lib/ReviewBoard.pm b/extensions/MoreBugUrl/lib/ReviewBoard.pm
new file mode 100644
index 000000000..7628dd314
--- /dev/null
+++ b/extensions/MoreBugUrl/lib/ReviewBoard.pm
@@ -0,0 +1,42 @@
+# 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::MoreBugUrl::ReviewBoard;
+use strict;
+use base qw(Bugzilla::BugUrl);
+
+###############################
+#### Methods ####
+###############################
+
+sub should_handle {
+ my ($class, $uri) = @_;
+ return ($uri->path =~ m|/r/\d+/?$|) ? 1 : 0;
+}
+
+sub _check_value {
+ my $class = shift;
+
+ my $uri = $class->SUPER::_check_value(@_);
+
+ # Review Board URLs have only one form (the trailing slash is optional):
+ # http://reviews.reviewboard.org/r/111/
+
+ # Make sure there are no query parameters.
+ $uri->query(undef);
+ # And remove any # part if there is one.
+ $uri->fragment(undef);
+
+ # make sure the trailing slash is present
+ if ($uri->path !~ m|/$|) {
+ $uri->path($uri->path . '/');
+ }
+
+ return $uri;
+}
+
+1;
diff --git a/extensions/MoreBugUrl/lib/Rietveld.pm b/extensions/MoreBugUrl/lib/Rietveld.pm
new file mode 100644
index 000000000..0c52892e2
--- /dev/null
+++ b/extensions/MoreBugUrl/lib/Rietveld.pm
@@ -0,0 +1,45 @@
+# 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::MoreBugUrl::Rietveld;
+use strict;
+use base qw(Bugzilla::BugUrl);
+
+###############################
+#### Methods ####
+###############################
+
+sub should_handle {
+ my ($class, $uri) = @_;
+ return ($uri->authority =~ /\.appspot\.com$/i
+ and $uri->path =~ m#^/\d+(?:/|/show)?$#) ? 1 : 0;
+}
+
+sub _check_value {
+ my ($class, $uri) = @_;
+
+ $uri = $class->SUPER::_check_value($uri);
+
+ # Rietveld URLs have three forms:
+ # http(s)://example.appspot.com/1234
+ # http(s)://example.appspot.com/1234/
+ # http(s)://example.appspot.com/1234/show
+ if ($uri->path =~ m#^/(\d+)(?:/|/show)$#) {
+ # This is the shortest standard URL form for Rietveld issues,
+ # and so we reduce all URLs to this.
+ $uri->path('/' . $1);
+ }
+
+ # Make sure there are no query parameters.
+ $uri->query(undef);
+ # And remove any # part if there is one.
+ $uri->fragment(undef);
+
+ return $uri;
+}
+
+1;
diff --git a/extensions/MoreBugUrl/template/en/default/hook/global/user-error-bug_url_invalid_tracker.html.tmpl b/extensions/MoreBugUrl/template/en/default/hook/global/user-error-bug_url_invalid_tracker.html.tmpl
new file mode 100644
index 000000000..e0cf6be8e
--- /dev/null
+++ b/extensions/MoreBugUrl/template/en/default/hook/global/user-error-bug_url_invalid_tracker.html.tmpl
@@ -0,0 +1,10 @@
+[%# 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.
+ #%]
+
+<li>A Review Board review request.</li>
+<li>An issue in a Rietveld installation.</li>