summaryrefslogtreecommitdiffstats
path: root/Bugzilla/Install/Util.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Bugzilla/Install/Util.pm')
-rw-r--r--Bugzilla/Install/Util.pm71
1 files changed, 52 insertions, 19 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>