Bug 3137: (follow-up) Rename using 'collapse', remove syspref lettering and fix guara...
[srvgit] / about.pl
index 1020490..f0ae48d 100755 (executable)
--- a/about.pl
+++ b/about.pl
@@ -37,7 +37,7 @@ use YAML qw/LoadFile/;
 use C4::Output;
 use C4::Auth;
 use C4::Context;
-use C4::Installer;
+use C4::Installer::PerlModules;
 
 use Koha;
 use Koha::DateUtils qw(dt_from_string output_pref);
@@ -159,13 +159,21 @@ my $warnPrefBiblioAddsAuthorities = ( $prefAutoCreateAuthorities && ( !$prefBibl
 my $prefEasyAnalyticalRecords  = C4::Context->preference('EasyAnalyticalRecords');
 my $prefUseControlNumber  = C4::Context->preference('UseControlNumber');
 my $warnPrefEasyAnalyticalRecords  = ( $prefEasyAnalyticalRecords  && $prefUseControlNumber );
-my $warnPrefAnonymousPatron = (
+
+my $AnonymousPatron = C4::Context->preference('AnonymousPatron');
+my $warnPrefAnonymousPatronOPACPrivacy = (
     C4::Context->preference('OPACPrivacy')
-        and not C4::Context->preference('AnonymousPatron')
+        and not $AnonymousPatron
+);
+my $warnPrefAnonymousPatronAnonSuggestions = (
+    C4::Context->preference('AnonSuggestions')
+        and not $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 $anonymous_patron = Koha::Patrons->find( $AnonymousPatron );
+my $warnPrefAnonymousPatronAnonSuggestions_PatronDoesNotExist = ( $AnonymousPatron && C4::Context->preference('AnonSuggestions') && not $anonymous_patron );
+
+my $warnPrefAnonymousPatronOPACPrivacy_PatronDoesNotExist = ( not $anonymous_patron and Koha::Patrons->search({ privacy => 2 })->count );
 
 my $errZebraConnection = C4::Context->Zconn("biblioserver",0)->errcode();
 
@@ -222,35 +230,6 @@ if ( ! C4::Context->config('tmp_path') ) {
     }
 }
 
-# Test QueryParser configuration sanity
-if ( C4::Context->preference( 'UseQueryParser' ) ) {
-    # Get the QueryParser configuration file name
-    my $queryparser_file          = C4::Context->config( 'queryparser_config' );
-    my $queryparser_fallback_file = '/etc/koha/searchengine/queryparser.yaml';
-    # Check QueryParser is functional
-    my $QParser = C4::Context->queryparser();
-    my $queryparser_error = {};
-    if ( ! defined $QParser || ref($QParser) ne 'Koha::QueryParser::Driver::PQF' ) {
-        # Error initializing the QueryParser object
-        # Get the used queryparser.yaml file path to report the user
-        $queryparser_error->{ fallback } = ( defined $queryparser_file ) ? 0 : 1;
-        $queryparser_error->{ file }     = ( defined $queryparser_file )
-                                                ? $queryparser_file
-                                                : $queryparser_fallback_file;
-        # Report error data to the template
-        $template->param( QueryParserError => $queryparser_error );
-    } else {
-        # Check for an absent queryparser_config entry in koha-conf.xml
-        if ( ! defined $queryparser_file ) {
-            # Not an error but a warning for the missing entry in koha-conf-xml
-            push @xml_config_warnings, {
-                    error => 'queryparser_entry_missing',
-                    file  => $queryparser_fallback_file
-            };
-        }
-    }
-}
-
 # Test Zebra facets configuration
 if ( !defined C4::Context->config('use_zebra_facets') ) {
     push @xml_config_warnings, { error => 'use_zebra_facets_entry_missing' };
@@ -444,6 +423,64 @@ $template->param( 'bad_yaml_prefs' => \@bad_yaml_prefs ) if @bad_yaml_prefs;
         );
     }
 }
+
+# Circ rule warnings
+{
+    my $dbh   = C4::Context->dbh;
+    my $units = Koha::CirculationRules->search({ rule_name => 'lengthunit', rule_value => { -not_in => ['days', 'hours'] } });
+
+    if ( $units->count ) {
+        $template->param(
+            warnIssuingRules => 1,
+            ir_units         => $units,
+        );
+    }
+}
+
+# Guarantor relationships warnings
+{
+    my $dbh   = C4::Context->dbh;
+    my ($bad_relationships_count) = $dbh->selectall_arrayref(q{
+        SELECT COUNT(*)
+        FROM (
+            SELECT relationship FROM borrower_relationships WHERE relationship='_bad_data'
+            UNION ALL
+            SELECT relationship FROM borrowers WHERE relationship='_bad_data') a
+    });
+
+    $bad_relationships_count = $bad_relationships_count->[0]->[0];
+
+    my $existing_relationships = $dbh->selectall_arrayref(q{
+          SELECT DISTINCT(relationship)
+          FROM (
+              SELECT relationship FROM borrower_relationships WHERE relationship IS NOT NULL
+              UNION ALL
+              SELECT relationship FROM borrowers WHERE relationship IS NOT NULL) a
+    });
+
+    my %valid_relationships = map { $_ => 1 } split( /,|\|/, C4::Context->preference('borrowerRelationship') );
+    $valid_relationships{ _bad_data } = 1; # we handle this case in another way
+
+    my $wrong_relationships = [ grep { !$valid_relationships{ $_->[0] } } @{$existing_relationships} ];
+    if ( @$wrong_relationships or $bad_relationships_count ) {
+
+        $template->param(
+            warnRelationships => 1,
+        );
+
+        if ( $wrong_relationships ) {
+            $template->param(
+                wrong_relationships => $wrong_relationships
+            );
+        }
+        if ($bad_relationships_count) {
+            $template->param(
+                bad_relationships_count => $bad_relationships_count,
+            );
+        }
+    }
+}
+
 my %versions = C4::Context::get_versions();
 
 $template->param(
@@ -459,8 +496,10 @@ $template->param(
     prefAutoCreateAuthorities => $prefAutoCreateAuthorities,
     warnPrefBiblioAddsAuthorities => $warnPrefBiblioAddsAuthorities,
     warnPrefEasyAnalyticalRecords  => $warnPrefEasyAnalyticalRecords,
-    warnPrefAnonymousPatron => $warnPrefAnonymousPatron,
-    warnPrefAnonymousPatron_PatronDoesNotExist => $warnPrefAnonymousPatron_PatronDoesNotExist,
+    warnPrefAnonymousPatronOPACPrivacy        => $warnPrefAnonymousPatronOPACPrivacy,
+    warnPrefAnonymousPatronAnonSuggestions    => $warnPrefAnonymousPatronAnonSuggestions,
+    warnPrefAnonymousPatronOPACPrivacy_PatronDoesNotExist     => $warnPrefAnonymousPatronOPACPrivacy_PatronDoesNotExist,
+    warnPrefAnonymousPatronAnonSuggestions_PatronDoesNotExist => $warnPrefAnonymousPatronAnonSuggestions_PatronDoesNotExist,
     errZebraConnection => $errZebraConnection,
     warnIsRootUser => $warnIsRootUser,
     warnNoActiveCurrency => $warnNoActiveCurrency,
@@ -490,6 +529,7 @@ foreach my $pm_type(@pm_types) {
                 current => ($pm_type eq 'current_pm' ? 1 : 0),
                 require => $stats->{'required'},
                 reqversion => $stats->{'min_ver'},
+                maxversion => $stats->{'max_ver'}
             }
         );
     }
@@ -531,7 +571,10 @@ if ( defined C4::Context->config('docdir') ) {
 }
 
 ## Release teams
-my $teams = LoadFile("$docdir"."/teams.yaml");
+my $teams =
+  -e "$docdir" . "/teams.yaml"
+  ? LoadFile( "$docdir" . "/teams.yaml" )
+  : {};
 my $dev_team = (sort {$b <=> $a} (keys %{$teams->{team}}))[0];
 my $short_version = substr($versions{'kohaVersion'},0,5);
 my $minor = substr($versions{'kohaVersion'},3,2);
@@ -560,7 +603,7 @@ for my $version ( sort { $a <=> $b } keys %{$teams->{team}} ) {
                 }
             }
         }
-        else {
+        elsif ( $role ne 'release_date' ) {
             my $name = $teams->{team}->{$version}->{$role}->{name};
             # Add role to contributors
             push @{ $contributors->{$name}->{roles}->{$normalized_role} },
@@ -571,6 +614,9 @@ for my $version ( sort { $a <=> $b } keys %{$teams->{team}} ) {
                   $contributors->{$name}->{openhub};
             }
         }
+        else {
+            $teams->{team}->{$version}->{$role} = DateTime->from_epoch( epoch => $teams->{team}->{$version}->{$role});
+        }
     }
 }
 
@@ -578,8 +624,8 @@ for my $version ( sort { $a <=> $b } keys %{$teams->{team}} ) {
 my @people = map {
     { name => $_, ( $contributors->{$_} ? %{ $contributors->{$_} } : () ) }
 } sort {
-    my ($alast) = $a =~ /(\S+)$/;
-    my ($blast) = $b =~ /(\S+)$/;
+    my ($alast) = ( split( /\s/, $a ) )[-1];
+    my ($blast) = ( split( /\s/, $b ) )[-1];
     lc($alast) cmp lc($blast)
 } keys %{$contributors};