From 84982d8b04f6232d4eaa38fde78e8bfa67d496bb Mon Sep 17 00:00:00 2001
From: Tiago Mello <timello@gmail.com>
Date: Sun, 19 Feb 2012 15:36:22 -0200
Subject: Bug 722580: Move 'ReviewBoard' and 'Rietveld' BugUrl sub-classes to a
 new 'MoreBugUrl' extension. r/a=LpSolit

---
 extensions/MoreBugUrl/Config.pm                    | 19 +++++++++
 extensions/MoreBugUrl/Extension.pm                 | 43 +++++++++++++++++++++
 extensions/MoreBugUrl/disabled                     |  0
 extensions/MoreBugUrl/lib/ReviewBoard.pm           | 42 ++++++++++++++++++++
 extensions/MoreBugUrl/lib/Rietveld.pm              | 45 ++++++++++++++++++++++
 .../user-error-bug_url_invalid_tracker.html.tmpl   | 10 +++++
 6 files changed, 159 insertions(+)
 create mode 100644 extensions/MoreBugUrl/Config.pm
 create mode 100644 extensions/MoreBugUrl/Extension.pm
 create mode 100644 extensions/MoreBugUrl/disabled
 create mode 100644 extensions/MoreBugUrl/lib/ReviewBoard.pm
 create mode 100644 extensions/MoreBugUrl/lib/Rietveld.pm
 create mode 100644 extensions/MoreBugUrl/template/en/default/hook/global/user-error-bug_url_invalid_tracker.html.tmpl

(limited to 'extensions/MoreBugUrl')

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
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>
-- 
cgit v1.2.1