use Config;
use Search::Elasticsearch;
use Try::Tiny;
-use YAML;
+use YAML qw/LoadFile/;
use C4::Output;
use C4::Auth;
"RisExportAdditionalFields",
"UpdateItemWhenLostFromHoldList",
"MarcFieldsToOrder",
- "MarcItemFieldsToOrder"
+ "MarcItemFieldsToOrder",
+ "UpdateitemLocationOnCheckin",
+ "ItemsDeniedRenewal"
);
my @bad_yaml_prefs;
foreach my $syspref (@yaml_prefs) {
);
}
}
+
+# Circ rule warnings
+{
+ my $dbh = C4::Context->dbh;
+ my $units = $dbh->selectall_arrayref(
+ q|SELECT branchcode, categorycode, itemtype, lengthunit FROM issuingrules WHERE lengthunit NOT IN ( 'days', 'hours' ); |,
+ { Slice => {} }
+ );
+
+ if (@$units) {
+ $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_array(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(
## ------------------------------------------
-## Koha time line code
-
-#get file location
+## Koha contributions
my $docdir;
if ( defined C4::Context->config('docdir') ) {
$docdir = C4::Context->config('docdir');
$docdir = C4::Context->config('intranetdir') . '/docs';
}
+## Release teams
+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);
+my $development_version = ( $minor eq '05' || $minor eq '11' ) ? 0 : 1;
+$template->param( short_version => $short_version );
+$template->param( development_version => $development_version );
+
+## Contributors
+my $contributors =
+ -e "$docdir" . "/contributors.yaml"
+ ? LoadFile( "$docdir" . "/contributors.yaml" )
+ : {};
+for my $version ( sort { $a <=> $b } keys %{$teams->{team}} ) {
+ for my $role ( keys %{ $teams->{team}->{$version} } ) {
+ my $normalized_role = "$role";
+ $normalized_role =~ s/s$//;
+ if ( ref( $teams->{team}->{$version}->{$role} ) eq 'ARRAY' ) {
+ for my $contributor ( @{ $teams->{team}->{$version}->{$role} } ) {
+ my $name = $contributor->{name};
+ # Add role to contributors
+ push @{ $contributors->{$name}->{roles}->{$normalized_role} },
+ $version;
+ # Add openhub to teams
+ if ( exists( $contributors->{$name}->{openhub} ) ) {
+ $contributor->{openhub} = $contributors->{$name}->{openhub};
+ }
+ }
+ }
+ elsif ( $role ne 'release_date' ) {
+ my $name = $teams->{team}->{$version}->{$role}->{name};
+ # Add role to contributors
+ push @{ $contributors->{$name}->{roles}->{$normalized_role} },
+ $version;
+ # Add openhub to teams
+ if ( exists( $contributors->{$name}->{openhub} ) ) {
+ $teams->{team}->{$version}->{$role}->{openhub} =
+ $contributors->{$name}->{openhub};
+ }
+ }
+ else {
+ $teams->{team}->{$version}->{$role} = DateTime->from_epoch( epoch => $teams->{team}->{$version}->{$role});
+ }
+ }
+}
+
+## Create last name ordered array of people from contributors
+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};
+
+$template->param( contributors => \@people );
+$template->param( maintenance_team => $teams->{team}->{$dev_team} );
+$template->param( release_team => $teams->{team}->{$short_version} );
+
+## Timeline
if ( open( my $file, "<:encoding(UTF-8)", "$docdir" . "/history.txt" ) ) {
my $i = 0;