]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 496855: Hooks for sanitycheck.cgi
authormkanat%bugzilla.org <>
Mon, 21 Sep 2009 22:10:07 +0000 (22:10 +0000)
committermkanat%bugzilla.org <>
Mon, 21 Sep 2009 22:10:07 +0000 (22:10 +0000)
Patch by Bradley Baetz <bbaetz@acm.org> r=mkanat, a=mkanat

Bugzilla/Hook.pm
extensions/example/code/sanitycheck-check.pl [new file with mode: 0644]
extensions/example/code/sanitycheck-repair.pl [new file with mode: 0644]
extensions/example/template/en/admin/sanitycheck/messages-statuses.html.tmpl [new file with mode: 0644]
sanitycheck.cgi
template/en/default/admin/sanitycheck/messages.html.tmpl

index 2eda8d856df14b4a692cefdf7ab086d616e061ad..42f3583c5c6dd8d9804be890c13a07afa88232cb 100644 (file)
@@ -556,6 +556,34 @@ Params:
 
 =back
 
+=head2 sanitycheck-check
+
+This hook allows for extra sanity checks to be added, for use by
+F<sanitycheck.cgi>.
+
+Params:
+
+=over
+
+=item C<status> - a CODEREF that allows status messages to be displayed
+to the user. (F<sanitycheck.cgi>'s C<Status>)
+
+=back
+
+=head2 sanitycheck-repair
+
+This hook allows for extra sanity check repairs to be made, for use by
+F<sanitycheck.cgi>.
+
+Params:
+
+=over
+
+=item C<status> - a CODEREF that allows status messages to be displayed
+to the user. (F<sanitycheck.cgi>'s C<Status>)
+
+=back
+
 =head2 webservice
 
 This hook allows you to add your own modules to the WebService. (See
diff --git a/extensions/example/code/sanitycheck-check.pl b/extensions/example/code/sanitycheck-check.pl
new file mode 100644 (file)
index 0000000..1008338
--- /dev/null
@@ -0,0 +1,44 @@
+# -*- Mode: perl; indent-tabs-mode: nil -*-
+#
+# The contents of this file are subject to the Mozilla Public
+# License Version 1.1 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS
+# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# rights and limitations under the License.
+#
+# The Original Code is the Bugzilla Example Plugin.
+#
+# The Initial Developer of the Original Code is ITA Softwware.
+# Portions created by the Initial Developer are Copyright (C) 2009
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s): Bradley Baetz <bbaetz@everythingsolved.com>
+
+use strict;
+
+my $dbh = Bugzilla->dbh;
+my $sth;
+
+my $status = Bugzilla->hook_args->{'status'};
+
+# Check that all users are Australian
+$status->('example_check_au_user');
+
+my $sth = $dbh->prepare("SELECT userid, login_name
+                           FROM profiles
+                          WHERE login_name NOT LIKE '%.au'");
+$sth->execute;
+
+my $seen_nonau = 0;
+while (my ($userid, $login, $numgroups) = $sth->fetchrow_array) {
+    $status->('example_check_au_user_alert',
+              { userid => $userid, login => $login },
+              'alert');
+    $seen_nonau = 1;
+}
+
+$status->('example_check_au_user_prompt') if $seen_nonau;
diff --git a/extensions/example/code/sanitycheck-repair.pl b/extensions/example/code/sanitycheck-repair.pl
new file mode 100644 (file)
index 0000000..f9ad0b3
--- /dev/null
@@ -0,0 +1,38 @@
+# -*- Mode: perl; indent-tabs-mode: nil -*-
+#
+# The contents of this file are subject to the Mozilla Public
+# License Version 1.1 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS
+# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# rights and limitations under the License.
+#
+# The Original Code is the Bugzilla Example Plugin.
+#
+# The Initial Developer of the Original Code is ITA Software.
+# Portions created by the Initial Developer are Copyright (C) 2009
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s): Bradley Baetz <bbaetz@everythingsolved.com>
+
+use strict;
+
+use Bugzilla;
+
+my $cgi = Bugzilla->cgi;
+my $dbh = Bugzilla->dbh;
+
+my $status = Bugzilla->hook_args->{'status'};
+
+if ($cgi->param('example_repair_au_user')) {
+    $status->('example_repair_au_user_start');
+
+    #$dbh->do("UPDATE profiles
+    #             SET login_name = CONCAT(login_name, '.au')
+    #           WHERE login_name NOT LIKE '%.au'");
+
+    $status->('example_repair_au_user_end');
+}
diff --git a/extensions/example/template/en/admin/sanitycheck/messages-statuses.html.tmpl b/extensions/example/template/en/admin/sanitycheck/messages-statuses.html.tmpl
new file mode 100644 (file)
index 0000000..8a825e5
--- /dev/null
@@ -0,0 +1,35 @@
+[%# -*- Mode: perl; indent-tabs-mode: nil -*-
+  #
+  # The contents of this file are subject to the Mozilla Public
+  # License Version 1.1 (the "License"); you may not use this file
+  # except in compliance with the License. You may obtain a copy of
+  # the License at http://www.mozilla.org/MPL/
+  #
+  # Software distributed under the License is distributed on an "AS
+  # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+  # implied. See the License for the specific language governing
+  # rights and limitations under the License.
+  #
+  # The Original Code is the Bugzilla Example Plugin.
+  #
+  # The Initial Developer of the Original Code is ITA Software
+  # Portions created by the Initial Developer are Copyright (C) 2009
+  # the Initial Developer. All Rights Reserved.
+  #
+  # Contributor(s): Bradley Baetz <bbaetz@everythingsolved.com>
+  #%]
+
+[% IF    san_tag == "example_check_au_user" %]
+  <em>EXAMPLE PLUGIN</em> - Checking for non-Australian users.
+[% ELSIF san_tag == "example_check_au_user_alert" %]
+  User &lt;[% login FILTER html %]&gt; isn't Australian.
+  [% IF user.in_group('editusers') %]
+    <a href="editusers.cgi?id=[% userid FILTER none %]">Edit this user</a>.
+  [% END %]
+[% ELSIF san_tag == "example_check_au_user_prompt" %]
+  <a href="sanitycheck.cgi?example_repair_au_user=1">Fix these users</a>.
+[% ELSIF san_tag == "example_repair_au_user_start" %]
+  <em>EXAMPLE PLUGIN</em> - OK, would now make users Australian.
+[% ELSIF san_tag == "example_repair_au_user_end" %]
+  <em>EXAMPLE PLUGIN</em> - Users would now be Australian.
+[% END %]
index 69ab80faf93f79794ab69fcdd145323ee76b93fe..f5ba1024ff7de39a9182eabb1d90771ce8273ed5 100755 (executable)
@@ -31,8 +31,9 @@ use lib qw(. lib);
 use Bugzilla;
 use Bugzilla::Bug;
 use Bugzilla::Constants;
-use Bugzilla::Util;
 use Bugzilla::Error;
+use Bugzilla::Hook;
+use Bugzilla::Util;
 use Bugzilla::Status;
 
 ###########################################################################
@@ -383,6 +384,15 @@ if ($cgi->param('remove_old_whine_targets')) {
     Status('whines_obsolete_target_deletion_end');
 }
 
+###########################################################################
+# Repair hook
+###########################################################################
+
+Bugzilla::Hook::process("sanitycheck-repair", { status => \&Status });
+
+###########################################################################
+# Checks
+###########################################################################
 Status('checks_start');
 
 ###########################################################################
@@ -1061,6 +1071,12 @@ foreach my $target (['groups', 'id', MAILTO_GROUP],
 }
 Status('whines_obsolete_target_fix') if $display_repair_whines_link;
 
+###########################################################################
+# Check hook
+###########################################################################
+
+Bugzilla::Hook::process("sanitycheck-check", { status => \&Status });
+
 ###########################################################################
 # End
 ###########################################################################
index b67e5982d54f3efe92954f9affec69dd621e67a0..c3d5daacde234fad998e08a78f83a3cb41b6f9bc 100644 (file)
     <a href="sanitycheck.cgi?remove_old_whine_targets=1">Click here to
     remove old users/groups</a>
 
+  [% ELSE %]
+    [% message = Hook.process("statuses") %]
+
+    [% IF message %]
+      [% message FILTER none %]
+    [% ELSE %]
+      The status message string <code>[% san_tag FILTER html %]</code>
+      was not found. Please send email to [% Param("maintainer") %] describing
+      the steps taken to obtain this message.
+    [% END %]
+
   [% END %]
 [% END %]