Commit e00a2bc8 authored by mkanat%bugzilla.org's avatar mkanat%bugzilla.org

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
parent ba5a5c40
...@@ -34,13 +34,13 @@ use Safe; ...@@ -34,13 +34,13 @@ use Safe;
use base qw(Exporter); use base qw(Exporter);
our @EXPORT_OK = qw( our @EXPORT_OK = qw(
display_version_and_os get_version_and_os
indicate_progress indicate_progress
install_string install_string
vers_cmp vers_cmp
); );
sub display_version_and_os { sub get_version_and_os {
# Display version information # Display version information
my @os_details = POSIX::uname; my @os_details = POSIX::uname;
# 0 is the name of the OS, 2 is the major version, # 0 is the name of the OS, 2 is the major version,
...@@ -50,11 +50,10 @@ sub display_version_and_os { ...@@ -50,11 +50,10 @@ sub display_version_and_os {
$os_name = Win32::GetOSName(); $os_name = Win32::GetOSName();
} }
# $os_details[3] is the minor version. # $os_details[3] is the minor version.
print install_string('version_and_os', { bz_ver => BUGZILLA_VERSION, return { bz_ver => BUGZILLA_VERSION,
perl_ver => sprintf('%vd', $^V), perl_ver => sprintf('%vd', $^V),
os_name => $os_name, os_name => $os_name,
os_ver => $os_details[3] }) os_ver => $os_details[3] };
. "\n";
} }
sub indicate_progress { sub indicate_progress {
...@@ -75,18 +74,18 @@ sub install_string { ...@@ -75,18 +74,18 @@ sub install_string {
my $path = _cache()->{template_include_path}; my $path = _cache()->{template_include_path};
my $string_template; 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) { foreach my $dir (@$path) {
my $file = "$dir/setup/strings.txt.pl"; my $base = "$dir/setup/strings";
next unless -e $file; $string_template = _get_string_from_file($string_id, "$base.html.pl")
my $safe = new Safe; if is_web();
$safe->rdo($file); $string_template = _get_string_from_file($string_id, "$base.txt.pl")
my %strings = %{$safe->varglob('strings')}; if !$string_template;
$string_template = $strings{$string_id}; last if defined $string_template;
last if $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 ||= {}; $vars ||= {};
my @replace_keys = keys %$vars; my @replace_keys = keys %$vars;
...@@ -236,6 +235,34 @@ sub vers_cmp { ...@@ -236,6 +235,34 @@ sub vers_cmp {
# Helper Subroutines # # 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. # Used by template_include_path.
sub _add_language_set { sub _add_language_set {
my ($array, $lang, $templatedir) = @_; my ($array, $lang, $templatedir) = @_;
...@@ -307,6 +334,12 @@ sub is_tainted { ...@@ -307,6 +334,12 @@ sub is_tainted {
return not eval { my $foo = join('',@_), kill 0; 1; }; 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__ __END__
=head1 NAME =head1 NAME
...@@ -331,10 +364,10 @@ export them. ...@@ -331,10 +364,10 @@ export them.
=over =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, Returns a hash containing information about what version of Bugzilla we're
what perl version we're using, and what OS we're running on. running, what perl version we're using, and what OS we're running on.
=item C<indicate_progress> =item C<indicate_progress>
......
...@@ -54,7 +54,7 @@ BEGIN { chdir dirname($0); } ...@@ -54,7 +54,7 @@ BEGIN { chdir dirname($0); }
use lib "."; use lib ".";
use Bugzilla::Constants; use Bugzilla::Constants;
use Bugzilla::Install::Requirements; 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 require 5.008001 if ON_WINDOWS; # for CGI 2.93 or higher
...@@ -78,7 +78,7 @@ pod2usage({-verbose => 1, -exitval => 1}) if $switch{'help'}; ...@@ -78,7 +78,7 @@ pod2usage({-verbose => 1, -exitval => 1}) if $switch{'help'};
my $answers_file = $ARGV[0]; my $answers_file = $ARGV[0];
my $silent = $answers_file && !$switch{'verbose'}; 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-- # Check required --MODULES--
my $module_results = check_requirements(!$silent); my $module_results = check_requirements(!$silent);
Bugzilla::Install::Requirements::print_module_instructions( Bugzilla::Install::Requirements::print_module_instructions(
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
# rights and limitations under the License. # rights and limitations under the License.
# #
# The Initial Developer of the Original Code is Everything Solved. # 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. # Everything Solved. All Rights Reserved.
# #
# The Original Code is the Bugzilla Bug Tracking System. # The Original Code is the Bugzilla Bug Tracking System.
...@@ -20,6 +20,9 @@ ...@@ -20,6 +20,9 @@
use strict; use strict;
use lib "."; use lib ".";
#################
# Initial Setup #
#################
# The order of these "use" statements is important--we have to have # 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 # CGI before we have CGI::Carp. Without CGI::Carp, "use 5.008" will just throw
...@@ -37,14 +40,22 @@ use 5.008; ...@@ -37,14 +40,22 @@ use 5.008;
use Bugzilla::Constants; use Bugzilla::Constants;
require 5.008001 if ON_WINDOWS; require 5.008001 if ON_WINDOWS;
use Bugzilla::Install::Requirements; 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; local $| = 1;
my $cgi = new CGI; my $cgi = new CGI;
$cgi->charset('UTF-8'); $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); my $module_results = check_requirements(1);
Bugzilla::Install::Requirements::print_module_instructions($module_results, 1); Bugzilla::Install::Requirements::print_module_instructions($module_results, 1);
\ No newline at end of file print '</pre>';
print install_string('footer');
\ No newline at end of file
# 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;
# 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 # This file contains a single hash named %strings, which is used by the
# installation code to display strings before Template-Toolkit can safely # installation code to display strings before Template-Toolkit can safely
# be loaded. # be loaded.
...@@ -9,8 +27,8 @@ ...@@ -9,8 +27,8 @@
# Please keep the strings in alphabetical order by their name. # Please keep the strings in alphabetical order by their name.
%strings = ( %strings = (
version_and_os => "* This is Bugzilla ##bz_ver## on perl ##perl_ver##\n" header => "* This is Bugzilla ##bz_ver## on perl ##perl_ver##\n"
. "* Running on ##os_name## ##os_ver##", . "* Running on ##os_name## ##os_ver##",
); );
1; 1;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment