|
Lines 35-41
C4::Installer
Link Here
|
| 35 |
my $all_languages = getAllLanguages(); |
35 |
my $all_languages = getAllLanguages(); |
| 36 |
my $error = $installer->load_db_schema(); |
36 |
my $error = $installer->load_db_schema(); |
| 37 |
my $list = $installer->sql_file_list('en', 'marc21', { optional => 1, mandatory => 1 }); |
37 |
my $list = $installer->sql_file_list('en', 'marc21', { optional => 1, mandatory => 1 }); |
| 38 |
my ($fwk_language, $error_list) = $installer->load_sql_in_order($all_languages, @$list); |
38 |
my ($fwk_language, $error_list) = $installer->load_sql_in_order(@$list); |
| 39 |
$installer->set_version_syspref(); |
39 |
$installer->set_version_syspref(); |
| 40 |
$installer->set_marcflavour_syspref('MARC21'); |
40 |
$installer->set_marcflavour_syspref('MARC21'); |
| 41 |
|
41 |
|
|
Lines 173-178
sub marc_framework_sql_list {
Link Here
|
| 173 |
|
173 |
|
| 174 |
$cell{"frameworks"} = \@fwks; |
174 |
$cell{"frameworks"} = \@fwks; |
| 175 |
$cell{"label"} = ucfirst($requirelevel); |
175 |
$cell{"label"} = ucfirst($requirelevel); |
|
|
176 |
$cell{label} =~ s/\.i18n$//; # remove extension from label |
| 176 |
$cell{"code"} = lc($requirelevel); |
177 |
$cell{"code"} = lc($requirelevel); |
| 177 |
push @fwklist, \%cell; |
178 |
push @fwklist, \%cell; |
| 178 |
} |
179 |
} |
|
Lines 250-255
sub sample_data_sql_list {
Link Here
|
| 250 |
|
251 |
|
| 251 |
$cell{"frameworks"} = \@fwks; |
252 |
$cell{"frameworks"} = \@fwks; |
| 252 |
$cell{"label"} = ucfirst($requirelevel); |
253 |
$cell{"label"} = ucfirst($requirelevel); |
|
|
254 |
$cell{label} =~ s/\.i18n$//; # remove extension from label |
| 253 |
$cell{"code"} = lc($requirelevel); |
255 |
$cell{"code"} = lc($requirelevel); |
| 254 |
push @levellist, \%cell; |
256 |
push @levellist, \%cell; |
| 255 |
} |
257 |
} |
|
Lines 313-319
sub load_db_schema {
Link Here
|
| 313 |
|
315 |
|
| 314 |
=head2 load_sql_in_order |
316 |
=head2 load_sql_in_order |
| 315 |
|
317 |
|
| 316 |
my ($fwk_language, $list) = $installer->load_sql_in_order($all_languages, @sql_list); |
318 |
my ($list) = $installer->load_sql_in_order(@sql_list); |
| 317 |
|
319 |
|
| 318 |
Given a list of SQL scripts supplied in C<@sql_list>, loads each of them |
320 |
Given a list of SQL scripts supplied in C<@sql_list>, loads each of them |
| 319 |
into the database and sets the FrameworksLoaded system preference to names |
321 |
into the database and sets the FrameworksLoaded system preference to names |
|
Lines 332-345
The return value C<$list> is an arrayref containing a hashref for each
Link Here
|
| 332 |
a list of hashrefs containing a list of each script load and any error |
334 |
a list of hashrefs containing a list of each script load and any error |
| 333 |
messages associated with the loading of each script. |
335 |
messages associated with the loading of each script. |
| 334 |
|
336 |
|
| 335 |
B<FIXME:> The C<$fwk_language> code probably doesn't belong and needs to be |
|
|
| 336 |
moved to a different method. |
| 337 |
|
| 338 |
=cut |
337 |
=cut |
| 339 |
|
338 |
|
| 340 |
sub load_sql_in_order { |
339 |
sub load_sql_in_order { |
| 341 |
my $self = shift; |
340 |
my $self = shift; |
| 342 |
my $all_languages = shift; |
|
|
| 343 |
my @sql_list = @_; |
341 |
my @sql_list = @_; |
| 344 |
|
342 |
|
| 345 |
my $lang; |
343 |
my $lang; |
|
Lines 377-391
sub load_sql_in_order {
Link Here
|
| 377 |
chop $systempreference; |
375 |
chop $systempreference; |
| 378 |
my @list; |
376 |
my @list; |
| 379 |
map { push @list, { "level" => $_, "fwklist" => $hashlevel{$_} } } keys %hashlevel; |
377 |
map { push @list, { "level" => $_, "fwklist" => $hashlevel{$_} } } keys %hashlevel; |
| 380 |
my $fwk_language; |
|
|
| 381 |
for my $each_language (@$all_languages) { |
| 382 |
|
| 383 |
# warn "CODE".$each_language->{'language_code'}; |
| 384 |
# warn "LANG:".$lang; |
| 385 |
if ( $lang eq $each_language->{'language_code'} ) { |
| 386 |
$fwk_language = $each_language->{language_locale_name}; |
| 387 |
} |
| 388 |
} |
| 389 |
my $updateflag = |
378 |
my $updateflag = |
| 390 |
$self->{'dbh'}->do( |
379 |
$self->{'dbh'}->do( |
| 391 |
"UPDATE systempreferences set value=\"$systempreference\" where variable='FrameworksLoaded'" |
380 |
"UPDATE systempreferences set value=\"$systempreference\" where variable='FrameworksLoaded'" |
|
Lines 397-403
sub load_sql_in_order {
Link Here
|
| 397 |
my $rq = $self->{'dbh'}->prepare($string); |
386 |
my $rq = $self->{'dbh'}->prepare($string); |
| 398 |
$rq->execute; |
387 |
$rq->execute; |
| 399 |
} |
388 |
} |
| 400 |
return ($fwk_language, \@list); |
389 |
return \@list; |
| 401 |
} |
390 |
} |
| 402 |
|
391 |
|
| 403 |
=head2 set_marcflavour_syspref |
392 |
=head2 set_marcflavour_syspref |
|
Lines 495-501
sub load_sql {
Link Here
|
| 495 |
. ( $self->{user} ? " -u $self->{user} " : "" ) |
484 |
. ( $self->{user} ? " -u $self->{user} " : "" ) |
| 496 |
. ( $self->{password} ? " -p'$self->{password}'" : "" ) |
485 |
. ( $self->{password} ? " -p'$self->{password}'" : "" ) |
| 497 |
. " $self->{dbname} "; |
486 |
. " $self->{dbname} "; |
| 498 |
$error = qx($strcmd --default-character-set=utf8 <$filename 2>&1 1>/dev/null); |
487 |
$error = _run_mysql_file($strcmd, $filename); |
| 499 |
} elsif ( $self->{dbms} eq 'Pg' ) { |
488 |
} elsif ( $self->{dbms} eq 'Pg' ) { |
| 500 |
$cmd = qx(which psql 2>/dev/null || whereis psql 2>/dev/null); |
489 |
$cmd = qx(which psql 2>/dev/null || whereis psql 2>/dev/null); |
| 501 |
chomp $cmd; |
490 |
chomp $cmd; |
|
Lines 520-525
sub load_sql {
Link Here
|
| 520 |
return $error; |
509 |
return $error; |
| 521 |
} |
510 |
} |
| 522 |
|
511 |
|
|
|
512 |
sub _run_mysql_file { |
| 513 |
my ($cmd, $filename) = @_; |
| 514 |
my $i18n_drop='DROP FUNCTION IF EXISTS i18n;'; |
| 515 |
my $i18n_fake='CREATE FUNCTION i18n (d text) '. |
| 516 |
'RETURNS text DETERMINISTIC RETURN d;'; |
| 517 |
my $utf8= '--default-character-set=utf8'; |
| 518 |
my $error=''; |
| 519 |
if( $filename =~ /installer\/data\/mysql\/en\//i || |
| 520 |
$filename !~ /\.i18n\/[^\/]+\.sql$/i ) { #en or old style |
| 521 |
$error= qx($cmd $utf8 -e '$i18n_drop $i18n_fake' 2>&1 1>/dev/null); |
| 522 |
#make sure i18n does not translate |
| 523 |
$error.= qx($cmd $utf8 <$filename 2>&1 1>/dev/null); |
| 524 |
#run sql with inserts |
| 525 |
} |
| 526 |
else { #new i18n style: redefine i18n function and run english insert |
| 527 |
foreach my $f ($filename, _tr_sql_fname($filename) ) { |
| 528 |
$error.= qx($cmd $utf8 <$f 2>&1 1>/dev/null); |
| 529 |
} |
| 530 |
} |
| 531 |
return $error; |
| 532 |
} |
| 533 |
|
| 534 |
sub _tr_sql_fname { |
| 535 |
#Convert native name to English equivalent |
| 536 |
#Translating subfolder names is still needed |
| 537 |
my $file= shift; |
| 538 |
$file=~ s/\.i18n(\/[^\/]+)$/$1/; #strip i18n from last subfolder |
| 539 |
$file=~ s/(?<=installer\/data\/mysql\/)[^\/]+/en/; |
| 540 |
#paranoid lookbehind or just being cautious :) change language to en |
| 541 |
my $trans= { '1-obligatoire' => 'mandatory', '2-optionel' => 'optional', |
| 542 |
'obligatoire' => 'mandatory', 'optionel' => 'optional', |
| 543 |
'1-obligatorisk' => 'mandatory', '2-valgfritt' => 'optional', |
| 544 |
'obligatorisk' => 'mandatory', 'valgfritt' => 'optional', |
| 545 |
'necessari' => 'mandatory', 'opzionali' => 'optional', |
| 546 |
}; |
| 547 |
foreach my $sub (keys %$trans) { |
| 548 |
my $t=$trans->{lc $sub}; |
| 549 |
$file=~ s/(installer\/data\/mysql\/.*)\/$sub\//$1\/$t\//gi; |
| 550 |
#again ensure that we are only in last part of path |
| 551 |
} |
| 552 |
return $file; |
| 553 |
} |
| 554 |
|
| 523 |
=head2 get_file_path_from_name |
555 |
=head2 get_file_path_from_name |
| 524 |
|
556 |
|
| 525 |
my $filename = $installer->get_file_path_from_name('script_name'); |
557 |
my $filename = $installer->get_file_path_from_name('script_name'); |