@@ -, +, @@ installer files the other one). Check the repeatable_holidays table afterwards. The string --- C4/Installer.pm | 66 +++++++++++++++++++++++++++++++++++++------------- installer/install.pl | 14 +++------- 2 files changed, 53 insertions(+), 27 deletions(-) --- a/C4/Installer.pm +++ a/C4/Installer.pm @@ -35,7 +35,7 @@ C4::Installer 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); + my ($fwk_language, $error_list) = $installer->load_sql_in_order(@$list); $installer->set_version_syspref(); $installer->set_marcflavour_syspref('MARC21'); @@ -173,6 +173,7 @@ sub marc_framework_sql_list { $cell{"frameworks"} = \@fwks; $cell{"label"} = ucfirst($requirelevel); + $cell{label} =~ s/\.i18n$//; # remove extension from label $cell{"code"} = lc($requirelevel); push @fwklist, \%cell; } @@ -250,6 +251,7 @@ sub sample_data_sql_list { $cell{"frameworks"} = \@fwks; $cell{"label"} = ucfirst($requirelevel); + $cell{label} =~ s/\.i18n$//; # remove extension from label $cell{"code"} = lc($requirelevel); push @levellist, \%cell; } @@ -313,7 +315,7 @@ sub load_db_schema { =head2 load_sql_in_order - my ($fwk_language, $list) = $installer->load_sql_in_order($all_languages, @sql_list); + my ($list) = $installer->load_sql_in_order(@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 @@ -332,14 +334,10 @@ The return value C<$list> is an arrayref containing a hashref for each a list of hashrefs containing a list of each script load and any error messages associated with the loading of each script. -B The C<$fwk_language> code probably doesn't belong and needs to be -moved to a different method. - =cut sub load_sql_in_order { my $self = shift; - my $all_languages = shift; my @sql_list = @_; my $lang; @@ -377,15 +375,6 @@ sub load_sql_in_order { chop $systempreference; my @list; map { push @list, { "level" => $_, "fwklist" => $hashlevel{$_} } } keys %hashlevel; - my $fwk_language; - for my $each_language (@$all_languages) { - - # warn "CODE".$each_language->{'language_code'}; - # warn "LANG:".$lang; - if ( $lang eq $each_language->{'language_code'} ) { - $fwk_language = $each_language->{language_locale_name}; - } - } my $updateflag = $self->{'dbh'}->do( "UPDATE systempreferences set value=\"$systempreference\" where variable='FrameworksLoaded'" @@ -397,7 +386,7 @@ sub load_sql_in_order { my $rq = $self->{'dbh'}->prepare($string); $rq->execute; } - return ($fwk_language, \@list); + return \@list; } =head2 set_marcflavour_syspref @@ -495,7 +484,7 @@ sub load_sql { . ( $self->{user} ? " -u $self->{user} " : "" ) . ( $self->{password} ? " -p'$self->{password}'" : "" ) . " $self->{dbname} "; - $error = qx($strcmd --default-character-set=utf8 <$filename 2>&1 1>/dev/null); + $error = _run_mysql_file($strcmd, $filename); } elsif ( $self->{dbms} eq 'Pg' ) { $cmd = qx(which psql 2>/dev/null || whereis psql 2>/dev/null); chomp $cmd; @@ -520,6 +509,49 @@ sub load_sql { return $error; } +sub _run_mysql_file { + my ($cmd, $filename) = @_; + my $i18n_drop='DROP FUNCTION IF EXISTS i18n;'; + my $i18n_fake='CREATE FUNCTION i18n (d text) '. + 'RETURNS text DETERMINISTIC RETURN d;'; + my $utf8= '--default-character-set=utf8'; + my $error=''; + if( $filename =~ /installer\/data\/mysql\/en\//i || + $filename !~ /\.i18n\/[^\/]+\.sql$/i ) { #en or old style + $error= qx($cmd $utf8 -e '$i18n_drop $i18n_fake' 2>&1 1>/dev/null); + #make sure i18n does not translate + $error.= qx($cmd $utf8 <$filename 2>&1 1>/dev/null); + #run sql with inserts + } + else { #new i18n style: redefine i18n function and run english insert + foreach my $f ($filename, _tr_sql_fname($filename) ) { + $error.= qx($cmd $utf8 <$f 2>&1 1>/dev/null); + } + } + return $error; +} + +sub _tr_sql_fname { + #Convert native name to English equivalent + #Translating subfolder names is still needed + my $file= shift; + $file=~ s/\.i18n(\/[^\/]+)$/$1/; #strip i18n from last subfolder + $file=~ s/(?<=installer\/data\/mysql\/)[^\/]+/en/; + #paranoid lookbehind or just being cautious :) change language to en + my $trans= { '1-obligatoire' => 'mandatory', '2-optionel' => 'optional', + 'obligatoire' => 'mandatory', 'optionel' => 'optional', + '1-obligatorisk' => 'mandatory', '2-valgfritt' => 'optional', + 'obligatorisk' => 'mandatory', 'valgfritt' => 'optional', + 'necessari' => 'mandatory', 'opzionali' => 'optional', + }; + foreach my $sub (keys %$trans) { + my $t=$trans->{lc $sub}; + $file=~ s/(installer\/data\/mysql\/.*)\/$sub\//$1\/$t\//gi; + #again ensure that we are only in last part of path + } + return $file; +} + =head2 get_file_path_from_name my $filename = $installer->get_file_path_from_name('script_name'); --- a/installer/install.pl +++ a/installer/install.pl @@ -18,14 +18,11 @@ my $query = new CGI; my $step = $query->param('step'); my $language = $query->param('language'); -my ( $template, $loggedinuser, $cookie ); - -my $all_languages = getAllLanguages(); - if ( defined($language) ) { C4::Templates::setlanguagecookie( $query, $language, "install.pl?step=1" ); } -( $template, $loggedinuser, $cookie ) = get_template_and_user( + +my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { template_name => "installer/step" . ( $step ? $step : 1 ) . ".tmpl", query => $query, @@ -201,11 +198,8 @@ elsif ( $step && $step == 3 ) { # 1ST install, 3rd sub-step : insert the SQL files the user has selected # - my ($fwk_language, $list) = $installer->load_sql_in_order($all_languages, $query->param('framework')); - $template->param( - "fwklanguage" => $fwk_language, - "list" => $list - ); + my $list = $installer->load_sql_in_order( $query->param('framework') ); + $template->param( "list" => $list ); $template->param( "$op" => 1 ); } elsif ( $op && $op eq 'selectframeworks' ) { --