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'); |