X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FImportExportFramework.pm;h=b81b393b7d2d0b36e26cc1e8bd674123a9183911;hb=37f3807442ce1136a57e6fec76648994ada7a5cb;hp=7f29e51fd131e4660f9beddecab88857c0ccc0f7;hpb=689bc191540e6d55dcf98046c2225691ce4233c0;p=koha.git diff --git a/C4/ImportExportFramework.pm b/C4/ImportExportFramework.pm old mode 100755 new mode 100644 index 7f29e51fd1..b81b393b7d --- a/C4/ImportExportFramework.pm +++ b/C4/ImportExportFramework.pm @@ -31,7 +31,7 @@ use C4::Debug; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); BEGIN { - $VERSION = 3.03; # set version for version checking + $VERSION = 3.07.00.049; # set version for version checking require Exporter; @ISA = qw(Exporter); @EXPORT = qw( @@ -322,6 +322,7 @@ sub _export_table_csv my $data; while (my $hashRef = $sth->fetchrow_hashref) { for (@fields) { + $hashRef->{$_} =~ s/[\r\n]//g; $$strCSV .= '"' . $hashRef->{$_} . '",'; } chop $$strCSV; @@ -761,7 +762,7 @@ sub _parseSQLLine my $line; my $numLines = 0; while (<$dom>) { - chomp $_; + s/[\r\n]+$//; $line = $_; # we don't want to execute any sql statement, only the ones dealing with frameworks next unless ($line =~ /^\s*(?i:DELETE\s+FROM|INSERT\s+INTO)\s+(?:marc_tag_structure|marc_subfield_structure)/); @@ -775,7 +776,7 @@ sub _parseSQLLine my $stmt = SQL::Statement->new($line, $parser); my $where = $stmt->where(); if ($where && $where->op() eq '=' && $line =~ /^\s*DELETE/) { - $line =~ s/frameworkcode='.+?'/frameworkcode='$frameworkcode';/ unless ($_ =~ /frameworkcode='$frameworkcode'/); + $line =~ s/frameworkcode='.*?'/frameworkcode='$frameworkcode';/ unless ($_ =~ /frameworkcode='$frameworkcode'/); } else { my @arrFields; my @arrValues; @@ -816,7 +817,7 @@ sub _parseSQLLine if ($error) { $line .= ';' unless ($line =~ /;$/); if ($line =~ /^\s*DELETE/) { - $line =~ s/frameworkcode='.+?'/frameworkcode='$frameworkcode'/ unless ($_ =~ /frameworkcode='$frameworkcode'/); + $line =~ s/frameworkcode='.*?'/frameworkcode='$frameworkcode'/ unless ($_ =~ /frameworkcode='$frameworkcode'/); } elsif ($line =~ /^\s*INSERT\s+INTO\s+(.*?)\s+\((.*?frameworkcode.*?)\)\s+VALUES\s+\((.+)\)\s*;\s*$/) { my $table = $1; my $fields = $2; @@ -1133,6 +1134,7 @@ sub _import_table_csv my ($dbh, $table, $frameworkcode, $dom, $PKArray, $fields2Delete, $fields) = @_; my $row = ''; + my $partialRow = ''; my $numFields = @$fields; my $fieldsNameRead = 0; my @arrData; @@ -1145,10 +1147,21 @@ sub _import_table_csv my $pos = 0; while (<$dom>) { $row = $_; + # Check whether the line has an unfinished field, i.e., a field with CR/LF in its data + if ($row =~ /,"[^"]*[\r\n]+$/ || $row =~ /^[^"]+[\r\n]+$/) { + $row =~ s/[\r\n]+$//; + $partialRow .= $row; + next; + } + if ($partialRow) { + $row = $partialRow . $row; + $partialRow = ''; + } + # Line OK, process it if ($row =~ /(?:".*?",?)+/) { @arrData = split('","', $row); $arrData[0] = substr($arrData[0], 1) if ($arrData[0] =~ /^"/); - chomp $arrData[$#arrData]; + $arrData[$#arrData] =~ s/[\r\n]+$//; chop $arrData[$#arrData] if ($arrData[$#arrData] =~ /"$/); if (@arrData) { if ($arrData[0] eq '#-#' && $arrData[$#arrData] eq '#-#') {