ignore ssl certificate errors
[Biblio-Z3950.git] / CROSBI.pm
index f5b0dce..2c9b9ab 100644 (file)
--- a/CROSBI.pm
+++ b/CROSBI.pm
@@ -8,6 +8,7 @@ use Data::Dump qw/dump/;
 use DBI;
 use utf8;
 
+use Scraper;
 use base 'Scraper';
 
 my $debug = $ENV{DEBUG} || 0;
@@ -47,6 +48,9 @@ sub usemap {{
 =cut
 
 my $dbname = 'bibliografija';
+my $pg_user = $ENV{PGUSER} || '';
+my $pg_passwd = $ENV{PGPASSWD} || '';
+my $pg_host = $ENV{PGHOST} || '';
 my @and;
 my @exec;
 
@@ -86,7 +90,7 @@ inner join rad_ustanova using (id) -- sifra
                        my $query = shift;
                        warn "## parse_fti [$query]";
                        my $fti;
-                       if ( $query =~ s/^(fti_.+):// ) {
+                       if ( $query =~ s/^(fti_.+):\s*// ) {
                                $fti = $1;
                        } else {
                                warn "INVALID QUERY no fti_xxx: [$query]";
@@ -96,8 +100,11 @@ inner join rad_ustanova using (id) -- sifra
 
                        my @or;
                        foreach my $f ( split(/,/,$fti) ) {
-                               push @or, "$f @@ to_tsquery(?)";
-                               push @exec, $tsquery;
+#                              push @or, "$f @@ to_tsquery('english',?)";
+#                              push @exec, $tsquery;
+
+                               push @or, "$f @@ to_tsquery('english',?) or $f @@ to_tsquery('croatian',?)";
+                               push @exec, $tsquery, $tsquery;
                        };
                        push @and, "( " . join(" or ", @or) . ")";
                }
@@ -110,8 +117,10 @@ inner join rad_ustanova using (id) -- sifra
                parse_fti $query;
        } else { # no " AND " in query
                my $tsquery = join(' & ', split(/\s+/,$query) );
-               push @and, "( fti_au @@ to_tsquery(?) or fti_pr @@ to_tsquery(?) )";
-               push @exec, $tsquery,  $tsquery;
+#              push @and, "( fti_au @@ to_tsquery('english',?) or fti_pr @@ to_tsquery('english',?) )";
+#              push @exec, $tsquery,  $tsquery;
+               push @and, "( fti_au @@ to_tsquery('english',?) or fti_pr @@ to_tsquery('english',?) or fti_au @@ to_tsquery('croatian',?) or fti_pr @@ to_tsquery('croatian',?) )";
+               push @exec, $tsquery,  $tsquery, $tsquery,  $tsquery;
        }
 
 
@@ -119,7 +128,7 @@ inner join rad_ustanova using (id) -- sifra
 
 warn "XXX SQL = ",$sql, dump( @exec );
 
-       my $dbh = DBI->connect_cached("dbi:Pg:dbname=$dbname", '', '', {AutoCommit => 0});
+       my $dbh = DBI->connect_cached("dbi:Pg:dbname=$dbname;host=$pg_host", $pg_user, $pg_passwd, {AutoCommit => 0});
 
        my $sth = $dbh->prepare( $sql );
 
@@ -338,9 +347,9 @@ sub next_marc {
        }
 
        # fake date for Koha import
-       $marc->add_fields(260,' ',' ',
-               c => $row->{godina},
-       );
+       #$marc->add_fields(260,' ',' ',
+       #       c => $row->{godina},
+       #);
 
        $marc->add_fields(300,' ',' ',
                a => page_range('',$row->{stranica_prva},$row->{stranica_zadnja}),
@@ -412,7 +421,7 @@ sub next_marc {
                        my $delimiter = shift @_;
                        my ( $before,$after ) = ( '', '' );
                        ( $before, $value, $after ) = @$value if ( ref $value eq 'ARRAY' );
-                       $out .= $last_delimiter . $value if $value;
+                       $out .= $last_delimiter . $before . $value . $after if $value;
                        $last_delimiter = $delimiter || last;
                }
                warn "### [$out]";
@@ -425,8 +434,8 @@ sub next_marc {
        $marc->add_fields(773,'0',' ',
                t => $row->{casopis},
                x => $row->{issn},
-               g => combine( $row->{volumen}, ' ', [ '(', $row->{godina}, ')' ], ', ', $row->{broj}, ' ;', page_range(' str. ',$row->{stranica_prva}, $row->{stranica_zadnja}) ),
 #              g => "$row->{volumen} ($row->{godina}), $row->{broj} ;" . page_range(' str. ',$row->{stranica_prva}, $row->{stranica_zadnja}),
+               g => combine( $row->{volumen}, ' ', [ '(', $row->{godina}, ')' ], ', ', $row->{broj}, ' ;', page_range(' str. ',$row->{stranica_prva}, $row->{stranica_zadnja}) ),
        );
 
        } elsif ( $self->{_table} =~ m/rknjiga/ ) {
@@ -440,7 +449,7 @@ sub next_marc {
                h => $row->{ukupno_stranica},
                n => $row->{uredink},
                z => $row->{isbn},
-               g => page_range(' str. ',$row->{stranica_prva}, $row->{stranica_zadnja}),
+               g => page_range('str. ',$row->{stranica_prva}, $row->{stranica_zadnja}),
        );
 
        } elsif ( $self->{_table} =~ m/zbornik/ ) {
@@ -454,7 +463,13 @@ sub next_marc {
                h => $row->{ukupno_stranica},
                n => $row->{uredink},
                z => $row->{isbn},
-               g => page_range(' str. ',$row->{stranica_prva}, $row->{stranica_zadnja}),
+               g => page_range('str. ',$row->{stranica_prva}, $row->{stranica_zadnja}),
+       );
+
+       } elsif ( $self->{_table} =~ m/ostalo/ ) {
+
+       $marc->add_fields(773,'0',' ',
+               t => $row->{izvornik},
        );
 
        } else {
@@ -488,7 +503,7 @@ sub next_marc {
 
        my @f942 = (
                c => $f942c->{ $self->{_table} } || die "ERROR no table $self->{_table} in ".dump($f942c),
-       );
+       ) if $self->{_table} !~ m/ostalo/;
 
        if ( $row->{status_rada} ) {
                push @f942, (
@@ -523,6 +538,10 @@ sub next_marc {
 
                push @f942, v => $row->{vrst_recenzije};
 
+       } elsif ( $self->{_table} =~ m/ostalo/ ) {
+
+               # XXX 
+
        } else {
                die "ERROR _table $self->{_table}";
        }