Koha-clms/Koha/Installer.pm

88 lines
2.1 KiB
Perl

package Koha::Installer;
use Modern::Perl;
require Koha;
require Koha::Database;
require Koha::Config;
=head1 API
=head2 Class methods
=head3 needs_update
Determines if an update is needed by checking
the database version, the code version, and whether
there are any atomic updates available.
=cut
sub needs_update {
my $needs_update = 1;
my $dbh = Koha::Database::dbh();
my $sql = "SELECT value FROM systempreferences WHERE variable = 'Version'";
my $sth = $dbh->prepare($sql);
$sth->execute();
my $row = $sth->fetchrow_arrayref();
my $db_version = $row->[0];
my $koha_version = Koha->version;
my $code_version = TransformToNum($koha_version);
if ( $db_version && $db_version == $code_version ) {
$needs_update = 0;
}
#NOTE: We apply atomic updates even when the DB and code versions align
my $atomic_updates = get_atomic_updates();
if (@$atomic_updates) {
$needs_update = 1;
}
return $needs_update;
}
=head3 TransformToNum
Transform the Koha version from a 4 parts string
to a number, with just 1 .
=cut
sub TransformToNum {
my $version = shift;
# remove the 3 last . to have a Perl number
$version =~ s/(.*\..*)\.(.*)\.(.*)/$1$2$3/;
return $version;
}
=head3 get_atomic_updates
Get atomic database updates
=cut
sub get_atomic_updates {
my @atomic_upate_files;
my $conf_fname = Koha::Config->guess_koha_conf;
my $config = Koha::Config->get_instance($conf_fname);
my $intranetdir = $config->{config}->{intranetdir};
# if there is anything in the atomicupdate, read and execute it.
my $update_dir = $intranetdir . '/installer/data/mysql/atomicupdate/';
opendir( my $dirh, $update_dir );
my @stuff = sort readdir $dirh;
foreach my $file (@stuff) {
next if $file !~ /\.(perl|pl)$/; #skip other files
next if $file eq 'skeleton.perl' || $file eq 'skeleton.pl'; # skip the skeleton files
push @atomic_upate_files, $file;
}
return \@atomic_upate_files;
}
1;