X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=C4%2FInstaller.pm;h=43fd724bf2a6ae886e6645544cce34253ac54647;hb=574f46fb19a933a6ef25d32423785cafc378213c;hp=ca9e4bec03dce0f638d17de8dcd64b39735291f7;hpb=1f32ecbc8ed9374c7fe7ecf89e48f310db1eab61;p=koha_gimpoz diff --git a/C4/Installer.pm b/C4/Installer.pm old mode 100644 new mode 100755 index ca9e4bec03..43fd724bf2 --- a/C4/Installer.pm +++ b/C4/Installer.pm @@ -30,35 +30,25 @@ C4::Installer =head1 SYNOPSIS -use C4::Installer; - -my $installer = C4::Installer->new(); - -my $all_languages = getAllLanguages(); - -my $error = $installer->load_db_schema(); - -my $list = $installer->sql_file_list('en', 'marc21', { optional => 1, mandatory => 1 }); - -my ($fwk_language, $error_list) = $installer->load_sql_in_order($all_languages, @$list); - -$installer->set_version_syspref(); - -$installer->set_marcflavour_syspref('MARC21'); - -$installer->set_indexing_engine(0); + use C4::Installer; + my $installer = C4::Installer->new(); + my $all_languages = getAllLanguages(); + my $error = $installer->load_db_schema(); + my $list = $installer->sql_file_list('en', 'marc21', { optional => 1, mandatory => 1 }); + my ($fwk_language, $error_list) = $installer->load_sql_in_order($all_languages, @$list); + $installer->set_version_syspref(); + $installer->set_marcflavour_syspref('MARC21'); + $installer->set_indexing_engine(0); =head1 DESCRIPTION +=cut + =head1 METHODS =head2 new -=over 4 - -my $installer = C4::Installer->new(); - -=back + my $installer = C4::Installer->new(); Creates a new installer. @@ -90,11 +80,7 @@ sub new { =head2 marcflavour_list -=over 4 - -my ($marcflavours) = $installer->marcflavour_list($lang); - -=back + my ($marcflavours) = $installer->marcflavour_list($lang); Return a arrayref of the MARC flavour sets available for the specified language C<$lang>. Returns 'undef' if a directory @@ -115,11 +101,8 @@ sub marcflavour_list { =head2 marc_framework_sql_list -=over 4 - -my ($defaulted_to_en, $list) = $installer->marc_framework_sql_list($lang, $marcflavour); - -=back + my ($defaulted_to_en, $list) = + $installer->marc_framework_sql_list($lang, $marcflavour); Returns in C<$list> a structure listing the filename, description, section, and mandatory/optional status of MARC framework scripts available for C<$lang> @@ -200,11 +183,7 @@ sub marc_framework_sql_list { =head2 sample_data_sql_list -=over 4 - -my ($defaulted_to_en, $list) = $installer->sample_data_sql_list($lang); - -=back + my ($defaulted_to_en, $list) = $installer->sample_data_sql_list($lang); Returns in C<$list> a structure listing the filename, description, section, and mandatory/optional status of sample data scripts available for C<$lang>. @@ -281,11 +260,7 @@ sub sample_data_sql_list { =head2 sql_file_list -=over 4 - -my $list = $installer->sql_file_list($lang, $marcflavour, $subset_wanted); - -=back + my $list = $installer->sql_file_list($lang, $marcflavour, $subset_wanted); Returns an arrayref containing the filepaths of installer SQL scripts available for laod. The C<$lang> and C<$marcflavour> arguments @@ -320,11 +295,7 @@ sub sql_file_list { =head2 load_db_schema -=over 4 - -my $error = $installer->load_db_schema(); - -=back + my $error = $installer->load_db_schema(); Loads the SQL script that creates Koha's tables and indexes. The return value is a string containing error messages reported by the @@ -343,11 +314,7 @@ sub load_db_schema { =head2 load_sql_in_order -=over 4 - -my ($fwk_language, $list) = $installer->load_sql_in_order($all_languages, @sql_list); - -=back + my ($fwk_language, $list) = $installer->load_sql_in_order($all_languages, @sql_list); Given a list of SQL scripts supplied in C<@sql_list>, loads each of them into the database and sets the FrameworksLoaded system preference to names @@ -358,15 +325,15 @@ directory path). This means that dependencies among the scripts are to be resolved by carefully naming them, keeping in mind that the directory name does *not* currently count. -FIXME: this is a rather delicate way of dealing with dependencies between - the install scripts. +B this is a rather delicate way of dealing with dependencies between +the install scripts. The return value C<$list> is an arrayref containing a hashref for each "level" or directory containing SQL scripts; the hashref in turns contains a list of hashrefs containing a list of each script load and any error messages associated with the loading of each script. -FIXME: The C<$fwk_language> code probably doesn't belong and needs to be +B The C<$fwk_language> code probably doesn't belong and needs to be moved to a different method. =cut @@ -387,6 +354,9 @@ sub load_sql_in_order { $request->execute; my ($systempreference) = $request->fetchrow; $systempreference = '' unless defined $systempreference; # avoid warning + # Make sure the global sysprefs.sql file is loaded first + my $globalsysprefs = C4::Context->config('intranetdir') . "/installer/data/$self->{dbms}/sysprefs.sql"; + unshift(@fnames, $globalsysprefs); foreach my $file (@fnames) { # warn $file; undef $/; @@ -433,11 +403,7 @@ sub load_sql_in_order { =head2 set_marcflavour_syspref -=over 4 - -$installer->set_marcflavour_syspref($marcflavour); - -=back + $installer->set_marcflavour_syspref($marcflavour); Set the 'marcflavour' system preference. The incoming C<$marcflavour> references to a subdirectory of @@ -466,11 +432,7 @@ sub set_marcflavour_syspref { =head2 set_indexing_engine -=over 4 - -$installer->set_indexing_engine($nozebra); - -=back + $installer->set_indexing_engine($nozebra); Sets system preferences related to the indexing engine. The C<$nozebra> argument is a boolean; @@ -495,11 +457,7 @@ sub set_indexing_engine { =head2 set_version_syspref -=over 4 - -$installer->set_version_syspref(); - -=back + $installer->set_version_syspref(); Set or update the 'Version' system preference to the current Koha software version. @@ -526,24 +484,20 @@ sub set_version_syspref { =head2 load_sql -=over 4 - -my $error = $installer->load_sql($filename); - -=back + my $error = $installer->load_sql($filename); Runs a the specified SQL using the DB's command-line SQL tool, and returns any strings sent to STDERR by the command-line tool. -FIXME: there has been a long-standing desire to - replace this with an SQL loader that goes - through DBI; partly for portability issues - and partly to improve error handling. +B there has been a long-standing desire to +replace this with an SQL loader that goes +through DBI; partly for portability issues +and partly to improve error handling. -FIXME: even using the command-line loader, some more - basic error handling should be added - deal - with missing files, e.g. +B even using the command-line loader, some more +basic error handling should be added - deal +with missing files, e.g. =cut @@ -554,8 +508,13 @@ sub load_sql { my $datadir = C4::Context->config('intranetdir') . "/installer/data/$self->{dbms}"; my $error; my $strcmd; + my $cmd; if ( $self->{dbms} eq 'mysql' ) { - $strcmd = "mysql " + $cmd = qx(which mysql 2>/dev/null || whereis mysql 2>/dev/null); + chomp $cmd; + $cmd = $1 if ($cmd && $cmd =~ /^(.+?)[\r\n]+$/); + $cmd = 'mysql' if (!$cmd || !-x $cmd); + $strcmd = "$cmd " . ( $self->{hostname} ? " -h $self->{hostname} " : "" ) . ( $self->{port} ? " -P $self->{port} " : "" ) . ( $self->{user} ? " -u $self->{user} " : "" ) @@ -563,7 +522,11 @@ sub load_sql { . " $self->{dbname} "; $error = qx($strcmd --default-character-set=utf8 <$filename 2>&1 1>/dev/null); } elsif ( $self->{dbms} eq 'Pg' ) { - $strcmd = "psql " + $cmd = qx(which psql 2>/dev/null || whereis psql 2>/dev/null); + chomp $cmd; + $cmd = $1 if ($cmd && $cmd =~ /^(.+?)[\r\n]+$/); + $cmd = 'psql' if (!$cmd || !-x $cmd); + $strcmd = "$cmd " . ( $self->{hostname} ? " -h $self->{hostname} " : "" ) . ( $self->{port} ? " -p $self->{port} " : "" ) . ( $self->{user} ? " -U $self->{user} " : "" ) @@ -575,18 +538,16 @@ sub load_sql { # report the import a failure although it really succeded -fbcit } # errors thrown while loading installer data should be logged - warn "C4::Installer::load_sql returned the following errors while attempting to load $filename:\n"; - warn $error; + if($error) { + warn "C4::Installer::load_sql returned the following errors while attempting to load $filename:\n"; + warn "$error"; + } return $error; } =head2 get_file_path_from_name -=over 4 - -my $filename = $installer->get_file_path_from_name('script_name'); - -=back + my $filename = $installer->get_file_path_from_name('script_name'); searches through the set of known SQL scripts and finds the fully qualified path name for the script that mathches the input. @@ -628,7 +589,7 @@ sub get_file_path_from_name { C4::Installer is a refactoring of logic originally from installer/installer.pl, which was originally written by Henri-Damien Laurant. -Koha Developement team +Koha Development Team Galen Charlton