summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormkanat%bugzilla.org <>2007-03-20 03:39:14 +0100
committermkanat%bugzilla.org <>2007-03-20 03:39:14 +0100
commite00a2bc886f86638a600030ebf98877db7a059fd (patch)
tree029bf1f1b4bf5170dfbb260c856aacfc36b6bd35
parentba5a5c404b8ef0b71efd873e604184ab90ebff94 (diff)
downloadbugzilla-e00a2bc886f86638a600030ebf98877db7a059fd.tar.gz
bugzilla-e00a2bc886f86638a600030ebf98877db7a059fd.tar.xz
Bug 374330: Make it possible for installation templates to be text or HTML
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> (module owner) a=mkanat
-rw-r--r--Bugzilla/Install/Util.pm71
-rwxr-xr-xchecksetup.pl4
-rw-r--r--setup.cgi21
-rw-r--r--template/en/default/setup/strings.html.pl45
-rw-r--r--template/en/default/setup/strings.txt.pl22
5 files changed, 135 insertions, 28 deletions
diff --git a/Bugzilla/Install/Util.pm b/Bugzilla/Install/Util.pm
index b02c435e5..bb5a84dfd 100644
--- a/Bugzilla/Install/Util.pm
+++ b/Bugzilla/Install/Util.pm
@@ -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>
diff --git a/checksetup.pl b/checksetup.pl
index aff7bb796..81eab9b87 100755
--- a/checksetup.pl
+++ b/checksetup.pl
@@ -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(
diff --git a/setup.cgi b/setup.cgi
index c31db382c..7b4aa4554 100644
--- 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
index 000000000..583a37abd
--- /dev/null
+++ b/template/en/default/setup/strings.html.pl
@@ -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;
+
diff --git a/template/en/default/setup/strings.txt.pl b/template/en/default/setup/strings.txt.pl
index 0942bb0e9..b4768771c 100644
--- a/template/en/default/setup/strings.txt.pl
+++ b/template/en/default/setup/strings.txt.pl
@@ -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;