Bug 18541: (QA follow-up) Fix wrong variable name ($layout_xml vs $print_layout_xml)
[koha.git] / about.pl
index cf8ab4f..1fd28e4 100755 (executable)
--- a/about.pl
+++ b/about.pl
 # You should have received a copy of the GNU General Public License
 # along with Koha; if not, see <http://www.gnu.org/licenses>.
 
-use strict;
-use warnings;
+use Modern::Perl;
 
 use CGI qw ( -utf8 );
+use List::MoreUtils qw/ any /;
 use LWP::Simple;
 use XML::Simple;
 use Config;
@@ -33,6 +33,13 @@ use C4::Auth;
 use C4::Context;
 use C4::Installer;
 
+use Koha;
+use Koha::Acquisition::Currencies;
+use Koha::Patrons;
+use Koha::Caches;
+use Koha::Config::SysPrefs;
+use C4::Members::Statistics;
+
 #use Smart::Comments '####';
 
 my $query = new CGI;
@@ -47,20 +54,60 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
     }
 );
 
-my $kohaVersion   = C4::Context::KOHAVERSION;
-my $osVersion     = `uname -a`;
 my $perl_path = $^X;
 if ($^O ne 'VMS') {
     $perl_path .= $Config{_exe} unless $perl_path =~ m/$Config{_exe}$/i;
 }
-my $perlVersion   = $];
-my $mysqlVersion  = `mysql -V`;
-my $apacheVersion = `httpd -v 2> /dev/null`;
-$apacheVersion = `httpd2 -v 2> /dev/null` unless $apacheVersion;
-$apacheVersion = (`/usr/sbin/apache2 -V`)[0] unless $apacheVersion;
+
 my $zebraVersion = `zebraidx -V`;
 
+# Check running PSGI env
+if ( any { /(^psgi\.|^plack\.)/i } keys %ENV ) {
+    $template->param(
+        is_psgi => 1,
+        psgi_server => ($ENV{ PLACK_ENV }) ? "Plack ($ENV{PLACK_ENV})" :
+                       ($ENV{ MOD_PERL })  ? "mod_perl ($ENV{MOD_PERL})" :
+                                             'Unknown'
+    );
+}
+
+# Memcached configuration
+my $memcached_servers   = $ENV{MEMCACHED_SERVERS} || C4::Context->config('memcached_servers');
+my $memcached_namespace = $ENV{MEMCACHED_NAMESPACE} || C4::Context->config('memcached_namespace') // 'koha';
+
+my $cache = Koha::Caches->get_instance;
+my $effective_caching_method = ref($cache->cache);
+# Memcached may have been running when plack has been initialized but could have been stopped since
+# FIXME What are the consequences of that??
+my $is_memcached_still_active = $cache->set_in_cache('test_for_about_page', "just a simple value");
+
+my $where_is_memcached_config = 'nowhere';
+if ( $ENV{MEMCACHED_SERVERS} and C4::Context->config('memcached_servers') ) {
+    $where_is_memcached_config = 'both';
+} elsif ( $ENV{MEMCACHED_SERVERS} and not C4::Context->config('memcached_servers') ) {
+    $where_is_memcached_config = 'ENV_only';
+} elsif ( C4::Context->config('memcached_servers') ) {
+    $where_is_memcached_config = 'config_only';
+}
+
+$template->param(
+    effective_caching_method => $effective_caching_method,
+    memcached_servers   => $memcached_servers,
+    memcached_namespace => $memcached_namespace,
+    is_memcached_still_active => $is_memcached_still_active,
+    where_is_memcached_config => $where_is_memcached_config,
+    memcached_running   => Koha::Caches->get_instance->memcached_cache,
+);
+
 # Additional system information for warnings
+
+my $warnStatisticsFieldsError;
+my $prefStatisticsFields = C4::Context->preference('StatisticsFields');
+if ($prefStatisticsFields) {
+    $warnStatisticsFieldsError = $prefStatisticsFields
+        unless ( $prefStatisticsFields eq C4::Members::Statistics->get_fields() );
+}
+
 my $prefAutoCreateAuthorities = C4::Context->preference('AutoCreateAuthorities');
 my $prefBiblioAddsAuthorities = C4::Context->preference('BiblioAddsAuthorities');
 my $warnPrefBiblioAddsAuthorities = ( $prefAutoCreateAuthorities && ( !$prefBiblioAddsAuthorities) );
@@ -73,11 +120,15 @@ my $warnPrefAnonymousPatron = (
         and not C4::Context->preference('AnonymousPatron')
 );
 
+my $anonymous_patron = Koha::Patrons->find( C4::Context->preference('AnonymousPatron') );
+my $warnPrefAnonymousPatron_PatronDoesNotExist = ( not $anonymous_patron and Koha::Patrons->search({ privacy => 2 })->count );
+
 my $errZebraConnection = C4::Context->Zconn("biblioserver",0)->errcode();
 
 my $warnIsRootUser   = (! $loggedinuser);
 
-my $warnNoActiveCurrency = (! defined C4::Budgets->GetCurrency());
+my $warnNoActiveCurrency = (! defined Koha::Acquisition::Currencies->get_active);
+
 my @xml_config_warnings;
 
 my $context = new C4::Context;
@@ -148,6 +199,25 @@ if ( (C4::Context->config('zebra_auth_index_mode') eq 'grs1') && ($context->{'se
     };
 }
 
+if ( ! defined C4::Context->config('log4perl_conf') ) {
+    push @xml_config_warnings, {
+        error => 'log4perl_entry_missing'
+    }
+}
+
+if ( ! defined C4::Context->config('upload_path') ) {
+    if ( Koha::Config::SysPrefs->find('OPACBaseURL')->value ) {
+        # OPACBaseURL seems to be set
+        push @xml_config_warnings, {
+            error => 'uploadpath_entry_missing'
+        }
+    } else {
+        push @xml_config_warnings, {
+            error => 'uploadpath_and_opacbaseurl_entry_missing'
+        }
+    }
+}
+
 # Test QueryParser configuration sanity
 if ( C4::Context->preference( 'UseQueryParser' ) ) {
     # Get the QueryParser configuration file name
@@ -190,30 +260,94 @@ if ( !defined C4::Context->config('use_zebra_facets') ) {
     }
 }
 
+# Sco Patron should not contain any other perms than circulate => self_checkout
+if (  C4::Context->preference('WebBasedSelfCheck')
+      and C4::Context->preference('AutoSelfCheckAllowed')
+) {
+    my $userid = C4::Context->preference('AutoSelfCheckID');
+    my $all_permissions = C4::Auth::get_user_subpermissions( $userid );
+    my ( $has_self_checkout_perm, $has_other_permissions );
+    while ( my ( $module, $permissions ) = each %$all_permissions ) {
+        if ( $module eq 'circulate' ) {
+            while ( my ( $permission, $flag ) = each %$permissions ) {
+                if ( $permission eq 'self_checkout' ) {
+                    $has_self_checkout_perm = 1;
+                } else {
+                    $has_other_permissions = 1;
+                }
+            }
+        } else {
+            $has_other_permissions = 1;
+        }
+    }
+    $template->param(
+        AutoSelfCheckPatronDoesNotHaveSelfCheckPerm => not ( $has_self_checkout_perm ),
+        AutoSelfCheckPatronHasTooManyPerm => $has_other_permissions,
+    );
+}
+
+{
+    my $dbh       = C4::Context->dbh;
+    my $patrons = $dbh->selectall_arrayref(
+        q|select b.borrowernumber from borrowers b join deletedborrowers db on b.borrowernumber=db.borrowernumber|,
+        { Slice => {} }
+    );
+    my $biblios = $dbh->selectall_arrayref(
+        q|select b.biblionumber from biblio b join deletedbiblio db on b.biblionumber=db.biblionumber|,
+        { Slice => {} }
+    );
+    my $items = $dbh->selectall_arrayref(
+        q|select i.itemnumber from items i join deleteditems di on i.itemnumber=di.itemnumber|,
+        { Slice => {} }
+    );
+    my $checkouts = $dbh->selectall_arrayref(
+        q|select i.issue_id from issues i join old_issues oi on i.issue_id=oi.issue_id|,
+        { Slice => {} }
+    );
+    my $holds = $dbh->selectall_arrayref(
+        q|select r.reserve_id from reserves r join old_reserves o on r.reserve_id=o.reserve_id|,
+        { Slice => {} }
+    );
+    if ( @$patrons or @$biblios or @$items or @$checkouts or @$holds ) {
+        $template->param(
+            has_ai_issues => 1,
+            ai_patrons    => $patrons,
+            ai_biblios    => $biblios,
+            ai_items      => $items,
+            ai_checkouts  => $checkouts,
+            ai_holds      => $holds,
+        );
+    }
+}
+my %versions = C4::Context::get_versions();
+
 $template->param(
-    kohaVersion   => $kohaVersion,
-    osVersion     => $osVersion,
+    kohaVersion   => $versions{'kohaVersion'},
+    osVersion     => $versions{'osVersion'},
     perlPath      => $perl_path,
-    perlVersion   => $perlVersion,
+    perlVersion   => $versions{'perlVersion'},
     perlIncPath   => [ map { perlinc => $_ }, @INC ],
-    mysqlVersion  => $mysqlVersion,
-    apacheVersion => $apacheVersion,
+    mysqlVersion  => $versions{'mysqlVersion'},
+    apacheVersion => $versions{'apacheVersion'},
     zebraVersion  => $zebraVersion,
     prefBiblioAddsAuthorities => $prefBiblioAddsAuthorities,
     prefAutoCreateAuthorities => $prefAutoCreateAuthorities,
     warnPrefBiblioAddsAuthorities => $warnPrefBiblioAddsAuthorities,
     warnPrefEasyAnalyticalRecords  => $warnPrefEasyAnalyticalRecords,
     warnPrefAnonymousPatron => $warnPrefAnonymousPatron,
+    warnPrefAnonymousPatron_PatronDoesNotExist => $warnPrefAnonymousPatron_PatronDoesNotExist,
     errZebraConnection => $errZebraConnection,
     warnIsRootUser => $warnIsRootUser,
     warnNoActiveCurrency => $warnNoActiveCurrency,
+    warnNoTemplateCaching => ( C4::Context->config('template_cache_dir') ? 0 : 1 ),
     xml_config_warnings => \@xml_config_warnings,
+    warnStatisticsFieldsError => $warnStatisticsFieldsError,
 );
 
 my @components = ();
 
 my $perl_modules = C4::Installer::PerlModules->new;
-$perl_modules->version_info;
+$perl_modules->versions_info;
 
 my @pm_types = qw(missing_pm upgrade_pm current_pm);