From e00a2bc886f86638a600030ebf98877db7a059fd Mon Sep 17 00:00:00 2001 From: "mkanat%bugzilla.org" <> Date: Tue, 20 Mar 2007 02:39:14 +0000 Subject: Bug 374330: Make it possible for installation templates to be text or HTML Patch By Max Kanat-Alexander (module owner) a=mkanat --- Bugzilla/Install/Util.pm | 71 ++++++++++++++++++++++--------- checksetup.pl | 4 +- setup.cgi | 21 ++++++--- template/en/default/setup/strings.html.pl | 45 ++++++++++++++++++++ template/en/default/setup/strings.txt.pl | 22 +++++++++- 5 files changed, 135 insertions(+), 28 deletions(-) create mode 100644 template/en/default/setup/strings.html.pl 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 +=item C -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 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 '
';
 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 '
'; + +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 + +# This is just like strings.txt.pl, but for HTML templates (used by +# setup.cgi). + +%strings = ( + footer => "", + + # This is very simple. It doesn't support the skinning system. + header => < + + + Installation and Setup for Bugzilla ##bz_ver## + + + +

Installation and Setup for Bugzilla ##bz_ver##

+
+ +

Perl Version: ##perl_ver##

+

OS: ##os_name## ##os_ver##

+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 + # 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; -- cgit v1.2.3-24-g4f1b