Bug 30055: Use /patrons for patron's cards
[koha-ffzg.git] / about.pl
index 2135399..55ffc37 100755 (executable)
--- a/about.pl
+++ b/about.pl
@@ -24,25 +24,26 @@ use Modern::Perl;
 
 use CGI qw ( -utf8 );
 use DateTime::TimeZone;
-use File::Spec;
-use File::Slurp;
-use List::MoreUtils qw/ any /;
-use LWP::Simple;
-use Module::Load::Conditional qw(can_load);
-use XML::Simple;
-use Config;
+use File::Slurp qw( read_file );
+use List::MoreUtils qw( any );
+use Module::Load::Conditional qw( can_load );
+use Config qw( %Config );
 use Search::Elasticsearch;
-use Try::Tiny;
-use YAML qw/LoadFile/;
+use Try::Tiny qw( catch try );
+use YAML::XS;
+use Encode;
 
-use C4::Output;
-use C4::Auth;
+use C4::Output qw( output_html_with_http_headers );
+use C4::Auth qw( get_template_and_user get_user_subpermissions );
 use C4::Context;
 use C4::Installer::PerlModules;
 
 use Koha;
-use Koha::DateUtils qw(dt_from_string output_pref);
+use Koha::DateUtils qw( dt_from_string output_pref );
 use Koha::Acquisition::Currencies;
+use Koha::BackgroundJob;
+use Koha::BiblioFrameworks;
+use Koha::Email;
 use Koha::Patron::Categories;
 use Koha::Patrons;
 use Koha::Caches;
@@ -50,21 +51,17 @@ use Koha::Config::SysPrefs;
 use Koha::Illrequest::Config;
 use Koha::SearchEngine::Elasticsearch;
 use Koha::Logger;
+use Koha::Filter::MARC::ViewPolicy;
 
 use C4::Members::Statistics;
 
-
-#use Smart::Comments '####';
-
-my $query = new CGI;
+my $query = CGI->new;
 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
     {
         template_name   => "about.tt",
         query           => $query,
         type            => "intranet",
-        authnotrequired => 0,
         flagsrequired   => { catalogue => 1 },
-        debug           => 1,
     }
 );
 
@@ -195,6 +192,20 @@ my $warnPrefAnonymousPatronAnonSuggestions_PatronDoesNotExist = ( $AnonymousPatr
 
 my $warnPrefAnonymousPatronOPACPrivacy_PatronDoesNotExist = ( not $anonymous_patron and Koha::Patrons->search({ privacy => 2 })->count );
 
+my $warnPrefKohaAdminEmailAddress = !Koha::Email->is_valid(C4::Context->preference('KohaAdminEmailAddress'));
+
+my $c = Koha::Items->filter_by_visible_in_opac->count;
+my @warnings = C4::Context->dbh->selectrow_array('SHOW WARNINGS');
+my $warnPrefOpacHiddenItems = $warnings[2];
+
+my $invalid_yesno = Koha::Config::SysPrefs->search(
+    {
+        type  => 'YesNo',
+        value => { -or => { 'is' => undef, -not_in => [ "1", "0" ] } }
+    }
+);
+$template->param( invalid_yesno => $invalid_yesno );
+
 my $errZebraConnection = C4::Context->Zconn("biblioserver",0)->errcode();
 
 my $warnIsRootUser   = (! $loggedinuser);
@@ -203,8 +214,6 @@ my $warnNoActiveCurrency = (! defined Koha::Acquisition::Currencies->get_active)
 
 my @xml_config_warnings;
 
-my $context = new C4::Context;
-
 if (    C4::Context->config('zebra_bib_index_mode')
     and C4::Context->config('zebra_bib_index_mode') eq 'grs1' )
 {
@@ -217,9 +226,10 @@ if (    C4::Context->config('zebra_auth_index_mode')
     push @xml_config_warnings, { error => 'zebra_auth_index_mode_is_grs1' };
 }
 
+my $authorityserver = C4::Context->zebraconfig('authorityserver');
 if( (   C4::Context->config('zebra_auth_index_mode')
     and C4::Context->config('zebra_auth_index_mode') eq 'dom' )
-    && ( $context->{'server'}->{'authorityserver'}->{'config'} !~ /zebra-authorities-dom.cfg/ ) )
+    && ( $authorityserver->{config} !~ /zebra-authorities-dom.cfg/ ) )
 {
     push @xml_config_warnings, {
         error => 'zebra_auth_index_mode_mismatch_warn'
@@ -309,6 +319,31 @@ if ( C4::Context->preference('ILLModule') ) {
     $template->param( warnILLConfiguration => $warnILLConfiguration );
 }
 
+{
+    # XSLT sysprefs
+    my @xslt_prefs = qw(
+        OPACXSLTDetailsDisplay
+        OPACXSLTListsDisplay
+        OPACXSLTResultsDisplay
+        XSLTDetailsDisplay
+        XSLTListsDisplay
+        XSLTResultsDisplay
+    );
+    my @warnXSLT;
+    for my $p ( @xslt_prefs ) {
+        my $xsl_filename = C4::XSLT::get_xsl_filename( $p );
+        next if -e $xsl_filename;
+        push @warnXSLT,
+          {
+            syspref  => $p,
+            value    => C4::Context->preference("$p"),
+            filename => $xsl_filename
+          };
+    }
+
+    $template->param( warnXSLT => \@warnXSLT ) if @warnXSLT;
+}
+
 if ( C4::Context->preference('SearchEngine') eq 'Elasticsearch' ) {
     # Check ES configuration health and runtime status
 
@@ -336,6 +371,7 @@ if ( C4::Context->preference('SearchEngine') eq 'Elasticsearch' ) {
         #       fetch the list of available indexes (e.g. plugins, etc)
         $es_status->{nodes} = $es_conf->{nodes};
         my $es = Search::Elasticsearch->new({ nodes => $es_conf->{nodes} });
+        my $es_status->{version} = $es->info->{version}->{number};
 
         foreach my $index ( @indexes ) {
             my $count;
@@ -419,7 +455,7 @@ my @bad_yaml_prefs;
 foreach my $syspref (@yaml_prefs) {
     my $yaml = C4::Context->preference( $syspref );
     if ( $yaml ) {
-        eval { YAML::Load( "$yaml\n\n" ); };
+        eval { YAML::XS::Load( Encode::encode_utf8("$yaml\n\n") ); };
         if ($@) {
             push @bad_yaml_prefs, $syspref;
         }
@@ -519,10 +555,47 @@ $template->param( 'bad_yaml_prefs' => \@bad_yaml_prefs ) if @bad_yaml_prefs;
 }
 
 {
-    # Test 'key' config for Pseudonymization
-    $template->param( config_key_no_set => 1 )
+    # Test 'bcrypt_settings' config for Pseudonymization
+    $template->param( config_bcrypt_settings_no_set => 1 )
       if C4::Context->preference('Pseudonymization')
-      and not C4::Context->config('key');
+      and not C4::Context->config('bcrypt_settings');
+}
+
+{
+    my @frameworkcodes = Koha::BiblioFrameworks->search->get_column('frameworkcode');
+    my @hidden_biblionumbers;
+    push @frameworkcodes, ""; # it's not in the biblio_frameworks table!
+    for my $frameworkcode ( @frameworkcodes ) {
+        my $shouldhidemarc_opac = Koha::Filter::MARC::ViewPolicy->should_hide_marc(
+            {
+                frameworkcode => $frameworkcode,
+                interface     => "opac"
+            }
+        );
+        push @hidden_biblionumbers, { frameworkcode => $frameworkcode, interface => 'opac' }
+          if $shouldhidemarc_opac->{biblionumber};
+
+        my $shouldhidemarc_intranet = Koha::Filter::MARC::ViewPolicy->should_hide_marc(
+            {
+                frameworkcode => $frameworkcode,
+                interface     => "intranet"
+            }
+        );
+        push @hidden_biblionumbers, { frameworkcode => $frameworkcode, interface => 'intranet' }
+          if $shouldhidemarc_intranet->{biblionumber};
+    }
+    $template->param( warnHiddenBiblionumbers => \@hidden_biblionumbers );
+}
+
+{
+    # BackgroundJob - test connection to message broker
+    eval {
+        Koha::BackgroundJob->connect;
+    };
+    if ( $@ ) {
+        warn $@;
+        $template->param( warnConnectBroker => $@ );
+    }
 }
 
 my %versions = C4::Context::get_versions();
@@ -544,6 +617,8 @@ $template->param(
     warnPrefAnonymousPatronAnonSuggestions    => $warnPrefAnonymousPatronAnonSuggestions,
     warnPrefAnonymousPatronOPACPrivacy_PatronDoesNotExist     => $warnPrefAnonymousPatronOPACPrivacy_PatronDoesNotExist,
     warnPrefAnonymousPatronAnonSuggestions_PatronDoesNotExist => $warnPrefAnonymousPatronAnonSuggestions_PatronDoesNotExist,
+    warnPrefKohaAdminEmailAddress => $warnPrefKohaAdminEmailAddress,
+    warnPrefOpacHiddenItems => $warnPrefOpacHiddenItems,
     errZebraConnection => $errZebraConnection,
     warnIsRootUser => $warnIsRootUser,
     warnNoActiveCurrency => $warnNoActiveCurrency,
@@ -618,7 +693,7 @@ if ( defined C4::Context->config('docdir') ) {
 ## Release teams
 my $teams =
   -e "$docdir" . "/teams.yaml"
-  ? LoadFile( "$docdir" . "/teams.yaml" )
+  ? YAML::XS::LoadFile( "$docdir" . "/teams.yaml" )
   : {};
 my $dev_team = (sort {$b <=> $a} (keys %{$teams->{team}}))[0];
 my $short_version = substr($versions{'kohaVersion'},0,5);
@@ -630,8 +705,9 @@ $template->param( development_version => $development_version );
 ## Contributors
 my $contributors =
   -e "$docdir" . "/contributors.yaml"
-  ? LoadFile( "$docdir" . "/contributors.yaml" )
+  ? YAML::XS::LoadFile( "$docdir" . "/contributors.yaml" )
   : {};
+delete $contributors->{_others_};
 for my $version ( sort { $a <=> $b } keys %{$teams->{team}} ) {
     for my $role ( keys %{ $teams->{team}->{$version} } ) {
         my $normalized_role = "$role";
@@ -669,10 +745,15 @@ for my $version ( sort { $a <=> $b } keys %{$teams->{team}} ) {
 my @people = map {
     { name => $_, ( $contributors->{$_} ? %{ $contributors->{$_} } : () ) }
 } sort {
-    my ($alast) = ( split( /\s/, $a ) )[-1];
-    my ($blast) = ( split( /\s/, $b ) )[-1];
-    lc($alast) cmp lc($blast)
-} keys %{$contributors};
+  my ($alast) = $a =~ /(\S+)$/;
+  my ($blast) = $b =~ /(\S+)$/;
+  my $cmp = lc($alast||"") cmp lc($blast||"");
+  return $cmp if $cmp;
+
+  my ($a2last) = $a =~ /(\S+)\s\S+$/;
+  my ($b2last) = $b =~ /(\S+)\s\S+$/;
+  lc($a2last||"") cmp lc($b2last||"");
+} keys %$contributors;
 
 $template->param( contributors => \@people );
 $template->param( maintenance_team => $teams->{team}->{$dev_team} );