%#
%# COPYRIGHT:
%#
-%# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2019 Best Practical Solutions, LLC
%# <sales@bestpractical.com>
%#
%# (Except where explicitly superseded by other copyright notices)
}
</%init>
<& /Admin/Elements/Header, Title => $title &>
-<& /Admin/Elements/ToolTabs,
- current_tab => 'Admin/Tools/Configuration.html',
- current_subtab => 'Admin/Tools/Configuration.html',
- Title => $title &>
+<& /Elements/Tabs &>
<&|/Widgets/TitleBox, title => loc("RT Configuration") &>
<table border="0" cellspacing="0" cellpadding="5" width="100%" class="collection">
<%PERL>
my $index_conf;
foreach my $key ( RT->Config->Options( Overridable => undef, Sorted => 0 ) ) {
- my $val = RT->Config->Get( $key );
+ my $val = RT->Config->GetObfuscated( $key, $session{'CurrentUser'} );
next unless defined $val;
my $meta = RT->Config->Meta( $key );
<tr class="<% $index_conf%2 ? 'oddline' : 'evenline'%>">
<td class="collection-as-table"><% $key %></td>
<td class="collection-as-table">
-% if ( $key =~ /Password(?!Length)/i ) {
-<em>Password not printed</em>\
-% } elsif ( !ref $val ) {
-<% "$val" %>\
-% } elsif ( ref $val eq 'ARRAY' ) {
-<% join ', ', @$val %>\
-% } elsif ( ref $val eq 'HASH' ) {
-<% join ', ', %$val %>\
+% if ( $key =~ /Password/i and $key !~ /MinimumPasswordLength|AllowLoginPasswordAutoComplete/ ) {
+<em><% loc('Password not printed' ) %></em>\
% } else {
-<% ref $val %>\
+<% stringify($val) |n %>\
% }
</td>
<td class="collection-as-table" style="white-space: nowrap">
-% if ( $description =~ /^.*site config$/ ) {
+% if ( $meta->{'Source'}{'SiteConfig'} ) {
<span style="font-weight: bold"><% $description %></span>
% } else {
<% $description %>
<td class="collection-as-table">RT::<% $key %></td>
<td class="collection-as-table">
% if ( $key =~ /Password(?!Length)/i ) {
-<em>Password not printed</em>
+<em><% loc('Password not printed' ) %></em>\
% } else {
<% ${'RT::'.$key} %>
% }
my $count;
my $class = 'RT::' . $type;
$class =~ s/Privileged|Unprivileged//;
- my $collection = $class->new($RT::SystemUser);
+ my $collection = $class->new(RT->SystemUser);
$collection->UnLimit;
+ $collection->FindAllRows; # find disabled
if ($type =~ /PrivilegedUsers/) {
$user_count = $collection->CountAll;
$collection->LimitToPrivileged;
<&|/Widgets/TitleBox, title => loc("Mason template search order") &>
<ol>
-% foreach my $path ( map { $_->[1] } $m->interp->comp_root_array ) {
+% foreach my $path ( RT::Interface::Web->ComponentRoots ) {
+<li><% $path %></li>
+% }
+</ol>
+</&>
+
+<&|/Widgets/TitleBox, title => loc("Static file search order") &>
+<ol>
+% foreach my $path ( (map {$_->{root}} RT->Config->Get('StaticRoots')),
+% RT::Interface::Web->StaticRoots ) {
<li><% $path %></li>
% }
</ol>
</ol>
</&>
+<&|/Widgets/TitleBox, title=> loc("Loaded config files") &>
+<ol>
+% foreach my $config (RT->Config->LoadedConfigs) {
+% if ($config->{site}) {
+<li><strong><% $config->{filename} %></strong></li>
+% } else {
+<li><% $config->{filename} %></li>
+% }
+% }
+</ol>
+</&>
+
+<&|/Widgets/TitleBox, title=> loc("Logging summary") &>
+ <& /Admin/Elements/LoggingSummary &>
+</&>
+
</td>
</table>
+<&|/Widgets/TitleBox, title => loc("Global Attributes") &>
+<table border="0" cellspacing="0" cellpadding="5" width="100%" class="collection">
+<tr class="collection-as-table">
+<th class="collection-as-table"><&|/l&>Name</&></th>
+<th class="collection-as-table"><&|/l&>Value</&></th>
+</tr>
+% my $attrs = $RT::System->Attributes;
+% my $index_size = 0;
+% while ( my $attr = $attrs->Next ) {
+% next if $attr->Name eq 'UpgradeHistory';
+<tr class="<% $index_size%2 ? 'oddline' : 'evenline'%>">
+% if ($attr->Name eq 'UserLogo') {
+% my $content = $attr->Content;
+% $content->{data} = defined $content->{data} ? 'DATA' : 'undef'
+% if exists $content->{data};
+<td><% $attr->Name %></td><td><% stringify($content) |n %></td>
+% } else {
+<td><% $attr->Name %></td><td><% stringify($attr->Content) |n %></td>
+% }
+</tr>
+% $index_size++;
+% }
+</table>
+</&>
+
+
+<&|/Widgets/TitleBox, title => loc("Loaded RT Extensions")&>
+<table border="0" cellspacing="0" cellpadding="5" width="100%" class="collection">
+<tr class="collection-as-table">
+<th class="collection-as-table"><&|/l&>Extension</&></th>
+<th class="collection-as-table"><&|/l&>Version</&></th>
+% my $row = 0;
+% foreach my $pluginName (grep $_, RT->Config->Get('Plugins')) {
+% my $plugin = RT::Plugin->new( name => $pluginName );
+<tr class="<% $row++ %2 ? 'oddline' : 'evenline'%>">
+<td class="collection-as-table"><%$plugin->Name%></td>
+<td class="collection-as-table"><%$plugin->Version%></td>
+</tr>
+% }
+</table>
+</&>
+
<&|/Widgets/TitleBox, title => loc("Loaded perl modules")&>
<table border="0" cellspacing="0" cellpadding="5" width="100%" class="collection">
<tr class="collection-as-table">
<%$ver%>
</td>
<td class="collection-as-table">
- <% $INC{$distfile} %>
+ <% $INC{$distfile} || '' %>
</td>
</tr>
% }
</table>
</&>
+<&|/Widgets/TitleBox, title => loc("RT upgrade history")&>
+<& /Admin/Elements/UpgradeHistory &>
+</&>
+
<&|/Widgets/TitleBox, title => loc("Perl configuration") &>
% require Config;
<pre>
<% Config::myconfig() %>
</pre>
</&>
+
+<&|/Widgets/TitleBox, title=> loc("Environment variables") &>
+<table border="0" cellspacing="0" cellpadding="5" width="100%" class="collection">
+<tr class="collection-as-table">
+<th class="collection-as-table"><&|/l&>Variable</&></th>
+<th class="collection-as-table"><&|/l&>Value</&></th>
+</tr>
+% my $row = 0;
+% for my $key (sort keys %ENV) {
+<tr class="collection-as-table <% $row++ %2 ? 'oddline' : 'evenline'%>">
+<td class="collection-as-table"><% $key %></td>
+<td class="collection-as-table"><% $ENV{$key} %></td>
+</tr>
+% }
+</table>
+</&>
+
+<&|/Widgets/TitleBox, title => loc("Operating System") &>
+<table border="0" cellspacing="0" cellpadding="5" width="100%" class="collection">
+<tr class="collection-as-table evenline">
+<td class="collection-as-table">Deployment type</td>
+<td class="collection-as-table"><%
+ $INC{'mod_perl.pm'} ? "mod_perl" :
+ $INC{'FCGI.pm'} ? "fastcgi" :
+ "standalone" %>
+</td>
+</tr>
+<%perl>
+my @os = (
+ "Distribution" => 'lsb_release --all',
+ "uname -a" => 'uname -a',
+ "SELinux status" => 'getenforce',
+ "Apache" => [map { "$_ -V" } qw(apache2ctl apachectl httpdctl)],
+ "nginx" => 'nginx -V 2>&1',
+ "lighttpd" => 'lighttpd -V',
+);
+my @os_info;
+
+while (my ($name, $cmd) = splice @os, 0, 2) {
+ $cmd = [$cmd] unless ref $cmd eq 'ARRAY';
+ for my $run (@$cmd) {
+ $run .= " </dev/null";
+ $run .= " 2>/dev/null" unless $run =~ /2>/;
+ my $result = `$run`;
+ if (defined $result and $result =~ /\S/) {
+ push @os_info, $name => $result;
+ last;
+ }
+ }
+}
+my $row = 1;
+</%perl>
+% while (my ($name, $output) = splice @os_info, 0, 2) {
+<tr class="collection-as-table <% $row++ % 2 ? "oddline" : "evenline" %>">
+<td class="collection-as-table"><% $name %></td>
+<td class="collection-as-table" style="white-space: pre-wrap; font-family: monospace"><% $output %></td>
+</tr>
+% }
+</table>
+</&>
+
+<%INIT>
+use Data::Dumper;
+local $Data::Dumper::Terse = 1;
+local $Data::Dumper::Indent = 2;
+
+sub stringify {
+ my $value = shift;
+ my $output = Dumper $value;
+ RT::Interface::Web::EscapeHTML(\$output);
+ $output =~ s/ / /g;
+ $output =~ s!\n!<br />!g;
+ return $output;
+}
+</%INIT>