Bug 18736: (QA follow-up) Cosmetic changes
[koha.git] / C4 / Installer.pm
index 1e6768e..a1c4714 100644 (file)
@@ -26,6 +26,13 @@ use C4::Installer::PerlModules;
 use DBI;
 use Koha;
 
+use vars qw(@ISA @EXPORT);
+BEGIN {
+    require Exporter;
+    @ISA = qw( Exporter );
+    push @EXPORT, qw( foreign_key_exists index_exists column_exists );
+};
+
 =head1 NAME
 
 C4::Installer
@@ -68,8 +75,17 @@ sub new {
     $self->{'port'}     = C4::Context->config("port");
     $self->{'user'}     = C4::Context->config("user");
     $self->{'password'} = C4::Context->config("pass");
+    $self->{'tls'} = C4::Context->config("tls");
+    if( $self->{'tls'} && $self->{'tls'} eq 'yes' ) {
+        $self->{'ca'} = C4::Context->config('ca');
+        $self->{'cert'} = C4::Context->config('cert');
+        $self->{'key'} = C4::Context->config('key');
+        $self->{'tlsoptions'} = ";mysql_ssl=1;mysql_ssl_client_key=".$self->{key}.";mysql_ssl_client_cert=".$self->{cert}.";mysql_ssl_ca_file=".$self->{ca};
+        $self->{'tlscmdline'} =  " --ssl-cert ". $self->{cert} . " --ssl-key " . $self->{key} . " --ssl-ca ".$self->{ca}." "
+    }
     $self->{'dbh'} = DBI->connect("DBI:$self->{dbms}:dbname=$self->{dbname};host=$self->{hostname}" .
-                                  ( $self->{port} ? ";port=$self->{port}" : "" ),
+                                  ( $self->{port} ? ";port=$self->{port}" : "" ).
+                                  ( $self->{tlsoptions} ? $self->{tlsoptions} : ""),
                                   $self->{'user'}, $self->{'password'});
     $self->{'language'} = undef;
     $self->{'marcflavour'} = undef;
@@ -136,15 +152,15 @@ sub marc_framework_sql_list {
         map {
             my $name = substr( $_, 0, -4 );
             open my $fh, "<:encoding(UTF-8)", "$dir/$requirelevel/$name.txt";
-            my $lines = <$fh>;
-            $lines =~ s/\n|\r/<br \/>/g;
-            $lines = Encode::encode('UTF-8', $lines) unless ( Encode::is_utf8($lines) );
+            my $line = <$fh>;
+            $line = Encode::encode('UTF-8', $line) unless ( Encode::is_utf8($line) );
+            my @lines = split /\n/, $line;
             my $mandatory = ($requirelevel =~ /(mandatory|requi|oblig|necess)/i);
             push @frameworklist,
               {
                 'fwkname'        => $name,
                 'fwkfile'        => "$dir/$requirelevel/$_",
-                'fwkdescription' => $lines,
+                'fwkdescription' => \@lines,
                 'checked'        => ( ( $frameworksloaded{$_} || $mandatory ) ? 1 : 0 ),
                 'mandatory'      => $mandatory,
               };
@@ -213,15 +229,15 @@ sub sample_data_sql_list {
         map {
             my $name = substr( $_, 0, -4 );
             open my $fh , "<:encoding(UTF-8)", "$dir/$requirelevel/$name.txt";
-            my $lines = <$fh>;
-            $lines =~ s/\n|\r/<br \/>/g;
-            $lines = Encode::encode('UTF-8', $lines) unless ( Encode::is_utf8($lines) );
+            my $line = <$fh>;
+            $line = Encode::encode('UTF-8', $line) unless ( Encode::is_utf8($line) );
+            my @lines = split /\n/, $line;
             my $mandatory = ($requirelevel =~ /(mandatory|requi|oblig|necess)/i);
             push @frameworklist,
               {
                 'fwkname'        => $name,
                 'fwkfile'        => "$dir/$requirelevel/$_",
-                'fwkdescription' => $lines,
+                'fwkdescription' => \@lines,
                 'checked'        => ( ( $frameworksloaded{$_} || $mandatory ) ? 1 : 0 ),
                 'mandatory'      => $mandatory,
               };
@@ -301,12 +317,16 @@ sub load_sql_in_order {
     # Make sure subtag_registry.sql is loaded second
     my $subtag_registry = C4::Context->config('intranetdir') . "/installer/data/$self->{dbms}/mandatory/subtag_registry.sql";
     unshift(@fnames, $subtag_registry);
+    # Make sure authorised value categories are loaded at the beginning
+    my $av_cat = C4::Context->config('intranetdir') . "/installer/data/$self->{dbms}/mandatory/auth_val_cat.sql";
+    unshift(@fnames, $av_cat);
     # 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);
     push @fnames, C4::Context->config('intranetdir') . "/installer/data/mysql/userflags.sql";
     push @fnames, C4::Context->config('intranetdir') . "/installer/data/mysql/userpermissions.sql";
     push @fnames, C4::Context->config('intranetdir') . "/installer/data/mysql/audio_alerts.sql";
+    push @fnames, C4::Context->config('intranetdir') . "/installer/data/mysql/account_offset_types.sql";
     foreach my $file (@fnames) {
         #      warn $file;
         undef $/;
@@ -443,7 +463,6 @@ sub load_sql {
     if( $dup_stderr ) {
         warn "C4::Installer::load_sql returned the following errors while attempting to load $filename:\n";
         $error = $dup_stderr;
-
     }
 
     return $error;
@@ -487,6 +506,36 @@ sub get_file_path_from_name {
 
 }
 
+sub foreign_key_exists {
+    my ( $table_name, $constraint_name ) = @_;
+    my $dbh = C4::Context->dbh;
+    my (undef, $infos) = $dbh->selectrow_array(qq|SHOW CREATE TABLE $table_name|);
+    return $infos =~ m|CONSTRAINT `$constraint_name` FOREIGN KEY|;
+}
+
+sub index_exists {
+    my ( $table_name, $key_name ) = @_;
+    my $dbh = C4::Context->dbh;
+    my ($exists) = $dbh->selectrow_array(
+        qq|
+        SHOW INDEX FROM $table_name
+        WHERE key_name = ?
+        |, undef, $key_name
+    );
+    return $exists;
+}
+
+sub column_exists {
+    my ( $table_name, $column_name ) = @_;
+    my $dbh = C4::Context->dbh;
+    my ($exists) = $dbh->selectrow_array(
+        qq|
+        SHOW COLUMNS FROM $table_name
+        WHERE Field = ?
+        |, undef, $column_name
+    );
+    return $exists;
+}
 
 =head1 AUTHOR