]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 374330: Make it possible for installation templates to be text or HTML
authormkanat%bugzilla.org <>
Tue, 20 Mar 2007 02:39:14 +0000 (02:39 +0000)
committermkanat%bugzilla.org <>
Tue, 20 Mar 2007 02:39:14 +0000 (02:39 +0000)
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> (module owner) a=mkanat

Bugzilla/Install/Util.pm
checksetup.pl
setup.cgi
template/en/default/setup/strings.html.pl [new file with mode: 0644]
template/en/default/setup/strings.txt.pl

index b02c435e501f1c00d4784fc93296ffac11202c62..bb5a84dfd68c4a9412a38f0d5971fea180b9054f 100644 (file)
@@ -34,13 +34,13 @@ use Safe;
 
 use base qw(Exporter);
 our @EXPORT_OK = qw(
-    display_version_and_os
+    get_version_and_os
     indicate_progress
     install_string
     vers_cmp
 );
 
-sub display_version_and_os {
+sub get_version_and_os {
     # Display version information
     my @os_details = POSIX::uname;
     # 0 is the name of the OS, 2 is the major version,
@@ -50,11 +50,10 @@ sub display_version_and_os {
         $os_name = Win32::GetOSName();
     }
     # $os_details[3] is the minor version.
-    print install_string('version_and_os', { bz_ver   => BUGZILLA_VERSION,
-                                             perl_ver => sprintf('%vd', $^V),
-                                             os_name  => $os_name,
-                                             os_ver   => $os_details[3] })
-           . "\n";
+    return { bz_ver   => BUGZILLA_VERSION,
+             perl_ver => sprintf('%vd', $^V),
+             os_name  => $os_name,
+             os_ver   => $os_details[3] };
 }
 
 sub indicate_progress {
@@ -75,18 +74,18 @@ sub install_string {
     my $path = _cache()->{template_include_path};
     
     my $string_template;
-    # Find the first set of templates that defines this string.
+    # Find the first template that defines this string.
     foreach my $dir (@$path) {
-        my $file = "$dir/setup/strings.txt.pl";
-        next unless -e $file;
-        my $safe = new Safe;
-        $safe->rdo($file);
-        my %strings = %{$safe->varglob('strings')};
-        $string_template = $strings{$string_id};
-        last if $string_template;
+        my $base = "$dir/setup/strings";
+        $string_template = _get_string_from_file($string_id, "$base.html.pl")
+            if is_web();
+        $string_template = _get_string_from_file($string_id, "$base.txt.pl")
+            if !$string_template;
+        last if defined $string_template;
     }
     
-    die "No language defines the string '$string_id'" if !$string_template;
+    die "No language defines the string '$string_id'"
+        if !defined $string_template;
 
     $vars ||= {};
     my @replace_keys = keys %$vars;
@@ -236,6 +235,34 @@ sub vers_cmp {
 # Helper Subroutines #
 ######################
 
+# Tells us if we're running in a web interface (Usually, this means
+# we're running in setup.cgi as opposed to checksetup.pl, but sometimes
+# this function *might* get called from within normal Bugzilla code.)
+sub is_web {
+    # When this is called, we may or may not have all of our required
+    # perl modules installed.
+    #
+    # The way this is written works for all of these circumstances:
+    #   * We're in checksetup.pl, before and after requirements-checking
+    #   * We're in setup.cgi, before and after requirements-checking
+    #   * We're in email_in.pl, the WebService interface, or something else
+    #     (That's primarily what the "return 0" check below is for.)
+    my $usage_mode = eval { Bugzilla->usage_mode };
+    return 0 if (defined $usage_mode && $usage_mode != USAGE_MODE_BROWSER);
+    return i_am_cgi();
+}
+
+# Used by install_string
+sub _get_string_from_file {
+    my ($string_id, $file) = @_;
+    
+    return undef if !-e $file;
+    my $safe = new Safe;
+    $safe->rdo($file);
+    my %strings = %{$safe->varglob('strings')};
+    return $strings{$string_id};
+}
+
 # Used by template_include_path.
 sub _add_language_set {
     my ($array, $lang, $templatedir) = @_;
@@ -307,6 +334,12 @@ sub is_tainted {
     return not eval { my $foo = join('',@_), kill 0; 1; };
 }
 
+sub i_am_cgi {
+    # I use SERVER_SOFTWARE because it's required to be
+    # defined for all requests in the CGI spec.
+    return exists $ENV{'SERVER_SOFTWARE'} ? 1 : 0;
+}
+
 __END__
 
 =head1 NAME
@@ -331,10 +364,10 @@ export them.
 
 =over
 
-=item C<display_version_and_os>
+=item C<get_version_and_os>
 
-Prints out some text lines, saying what version of Bugzilla we're running,
-what perl version we're using, and what OS we're running on.
+Returns a hash containing information about what version of Bugzilla we're
+running, what perl version we're using, and what OS we're running on.
 
 =item C<indicate_progress>
 
index aff7bb796a2a836b406e3b2d300ea798b70e8b7a..81eab9b8761bd60bb1bcdc7818d175c0e1a6cdb4 100755 (executable)
@@ -54,7 +54,7 @@ BEGIN { chdir dirname($0); }
 use lib ".";
 use Bugzilla::Constants;
 use Bugzilla::Install::Requirements;
-use Bugzilla::Install::Util qw(display_version_and_os);
+use Bugzilla::Install::Util qw(install_string get_version_and_os);
 
 require 5.008001 if ON_WINDOWS; # for CGI 2.93 or higher
 
@@ -78,7 +78,7 @@ pod2usage({-verbose => 1, -exitval => 1}) if $switch{'help'};
 my $answers_file = $ARGV[0];
 my $silent = $answers_file && !$switch{'verbose'};
 
-display_version_and_os() unless $silent;
+print(install_string('header', get_version_and_os()) . "\n") unless $silent;
 # Check required --MODULES--
 my $module_results = check_requirements(!$silent);
 Bugzilla::Install::Requirements::print_module_instructions(
index c31db382cfc492d6a43f010124ea42b3765fc4db..7b4aa4554188f9d8b0cd8db2fb588cf7a78cf8b3 100644 (file)
--- a/setup.cgi
+++ b/setup.cgi
@@ -10,7 +10,7 @@
 # rights and limitations under the License.
 #
 # The Initial Developer of the Original Code is Everything Solved.
-# Portions created by Everything Solved are Copyright (C) 2006
+# Portions created by Everything Solved are Copyright (C) 2007
 # Everything Solved. All Rights Reserved.
 #
 # The Original Code is the Bugzilla Bug Tracking System.
@@ -20,6 +20,9 @@
 use strict;
 use lib ".";
 
+#################
+# Initial Setup #
+#################
 
 # The order of these "use" statements is important--we have to have
 # CGI before we have CGI::Carp. Without CGI::Carp, "use 5.008" will just throw
@@ -37,14 +40,22 @@ use 5.008;
 use Bugzilla::Constants;
 require 5.008001 if ON_WINDOWS;
 use Bugzilla::Install::Requirements;
-use Bugzilla::Install::Util qw(display_version_and_os);
+use Bugzilla::Install::Util qw(install_string get_version_and_os);
 
 local $| = 1;
 
 my $cgi = new CGI;
 $cgi->charset('UTF-8');
-print $cgi->header(-type => 'text/plain');
+print $cgi->header();
+print install_string('header', get_version_and_os());
 
-display_version_and_os();
+######################
+# Check Requirements #
+######################
+
+print '<pre>';
 my $module_results = check_requirements(1);
-Bugzilla::Install::Requirements::print_module_instructions($module_results, 1);
\ No newline at end of file
+Bugzilla::Install::Requirements::print_module_instructions($module_results, 1);
+print '</pre>';
+
+print install_string('footer');
\ No newline at end of file
diff --git a/template/en/default/setup/strings.html.pl b/template/en/default/setup/strings.html.pl
new file mode 100644 (file)
index 0000000..583a37a
--- /dev/null
@@ -0,0 +1,45 @@
+# 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 Initial Developer of the Original Code is Everything Solved.
+# Portions created by Everything Solved are Copyright (C) 2007
+# Everything Solved. All Rights Reserved.
+#
+# The Original Code is the Bugzilla Bug Tracking System.
+#
+# Contributor(s): Max Kanat-Alexander <mkanat@bugzilla.org>
+
+# This is just like strings.txt.pl, but for HTML templates (used by
+# setup.cgi).
+
+%strings = (
+    footer => "</div></body></html>",
+
+    # This is very simple. It doesn't support the skinning system.
+    header => <<END_HTML
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
+                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+    <title>Installation and Setup for Bugzilla ##bz_ver##</title>
+    <link href="skins/standard/global.css" rel="stylesheet" type="text/css" />
+</head>
+<body id="bugzilla-installation">
+    <h1>Installation and Setup for Bugzilla ##bz_ver##</h1>
+    <div id="bugzilla-body">
+    
+        <p><strong>Perl Version</strong>: ##perl_ver##</p>
+        <p><strong>OS</strong>: ##os_name## ##os_ver##</p>
+END_HTML
+,
+);
+
+1;
+
index 0942bb0e955b24925f11f3fcbbb5bf2bf1055a65..b4768771c1be8d3efd8862d8675e1b428e425685 100644 (file)
@@ -1,3 +1,21 @@
+# 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 Initial Developer of the Original Code is Everything Solved.
+# Portions created by Everything Solved are Copyright (C) 2007
+# Everything Solved. All Rights Reserved.
+#
+# The Original Code is the Bugzilla Bug Tracking System.
+#
+# Contributor(s): Max Kanat-Alexander <mkanat@bugzilla.org>
+
 # This file contains a single hash named %strings, which is used by the
 # installation code to display strings before Template-Toolkit can safely
 # be loaded.
@@ -9,8 +27,8 @@
 # Please keep the strings in alphabetical order by their name.
 
 %strings = (
-    version_and_os => "* This is Bugzilla ##bz_ver## on perl ##perl_ver##\n"
-                      . "* Running on ##os_name## ##os_ver##",
+    header => "* This is Bugzilla ##bz_ver## on perl ##perl_ver##\n"
+            . "* Running on ##os_name## ##os_ver##",
 );
 
 1;