Tomas Cohen Arazi
daf2ebc4f5
This patch makes Koha <-> Zebra use MARCXML for the serialization when using DOM, and USMARC for GRS-1. * The following functions are modified to set the Zebra record syntax according to the current sysprefs and configuration: - C4::Context->Zconn - C4::Context-_new_Zconn * A new function 'new_record_from_zebra' is introduced, which checks the context we are in, and creates the MARC::Record object using the right constructor. The following packages get touched to make use of the new function: - C4::Search - C4::AuthoritiesMarc and the same happens to the UI scripts that make use of them (both in the OPAC and STAFF interfaces). * Calls to the unsafe ZOOM::Record->render()[1] method are removed. Due to this last change the code for building facets was rewritten. And for performance on the facets creation I pushed higher version dependencies for MARC::File::XML and MARC::Record (we rely on MARC::Field->as_string). * Calls to MARC::Record->new_from_xml and MARC::Record->new_from_usmarc are wrapped with eval for catching problems [2]. * As of bug 3087, UNIMARC uses the 'unimarc' record syntax. this case is correctly handled. * As of bug 7818 misc/migration_tools/rebuild_zebra.pl behaves like: - bib_index_mode (defaults to 'grs1' if not specified) - auth_index_mode (defaults to 'dom') here we do exactly the same. To test: - prove t/db_dependent/Search.t should pass. - Searching should remain functional. - Indexing and searching for a big record should work (that's what the unit tests do). - Test an index scan search (on the staff interface): Search > More options > Check "Scan indexes". - Enable 'itemBarcodeFallbackSearch' and try to circulate any word, it shouldn't break. - Searching for a biblio in a new subscription shouldn't break. - Running bulkmarcimport.pl shouldn't break. - And so on... for the rest of the .pl files. [1] http://search.cpan.org/~mirk/Net-Z3950-ZOOM/lib/ZOOM.pod#render() [2] a record that cannot be parsed by MARC::Record is simply skipped (bug 10684) Sponsored-by: Universidad Nacional de Cordoba Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> Signed-off-by: Galen Charlton <gmc@esilibrary.com>
145 lines
4.1 KiB
Perl
Executable file
145 lines
4.1 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
|
|
#origninally script to provide intranet (librarian) advanced search facility
|
|
#now script to do searching for acquisitions
|
|
|
|
# Copyright 2000-2002 Katipo Communications
|
|
# Copyright 2008-2009 BibLibre SARL
|
|
#
|
|
# This file is part of Koha.
|
|
#
|
|
# Koha is free software; you can redistribute it and/or modify it under the
|
|
# terms of the GNU General Public License as published by the Free Software
|
|
# Foundation; either version 2 of the License, or (at your option) any later
|
|
# version.
|
|
#
|
|
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License along
|
|
# with Koha; if not, write to the Free Software Foundation, Inc.,
|
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
=head1 NAME
|
|
|
|
neworderbiblio.pl
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
this script allows to perform a new order from an existing record.
|
|
|
|
=head1 CGI PARAMETERS
|
|
|
|
=over 4
|
|
|
|
=item search
|
|
the title the librarian has typed to search an existing record.
|
|
|
|
=item q
|
|
the keyword the librarian has typed to search an existing record.
|
|
|
|
=item author
|
|
the author of the new record.
|
|
|
|
=item num
|
|
the number of result per page to display
|
|
|
|
=item booksellerid
|
|
the id of the bookseller this script has to add an order.
|
|
|
|
=item basketno
|
|
the basket number to know on which basket this script have to add a new order.
|
|
|
|
=back
|
|
|
|
=cut
|
|
|
|
use strict;
|
|
#use warnings; FIXME - Bug 2505
|
|
|
|
use C4::Search;
|
|
use CGI;
|
|
use C4::Bookseller qw/ GetBookSellerFromId /;
|
|
use C4::Biblio;
|
|
use C4::Auth;
|
|
use C4::Output;
|
|
use C4::Koha;
|
|
use C4::Members qw/ GetMember /;
|
|
use C4::Budgets qw/ GetBudgetHierarchy /;
|
|
|
|
my $input = new CGI;
|
|
|
|
#getting all CGI params into a hash.
|
|
my $params = $input->Vars;
|
|
|
|
my $page = $params->{'page'} || 1;
|
|
my $query = $params->{'q'};
|
|
my $results_per_page = $params->{'num'} || 20;
|
|
my $booksellerid = $params->{'booksellerid'};
|
|
my $basketno = $params->{'basketno'};
|
|
my $sub = $params->{'sub'};
|
|
my $bookseller = GetBookSellerFromId($booksellerid);
|
|
|
|
# getting the template
|
|
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
|
|
{
|
|
template_name => "acqui/neworderbiblio.tmpl",
|
|
query => $input,
|
|
type => "intranet",
|
|
authnotrequired => 0,
|
|
flagsrequired => { acquisition => 'order_manage' },
|
|
}
|
|
);
|
|
|
|
# Searching the catalog.
|
|
|
|
# find results
|
|
my ( $error, $marcresults, $total_hits ) = SimpleSearch( $query, $results_per_page * ( $page - 1 ), $results_per_page );
|
|
|
|
if (defined $error) {
|
|
$template->param(
|
|
query_error => $error,
|
|
basketno => $basketno,
|
|
booksellerid => $bookseller->{'id'},
|
|
name => $bookseller->{'name'},
|
|
);
|
|
output_html_with_http_headers $input, $cookie, $template->output;
|
|
exit;
|
|
}
|
|
|
|
my @results;
|
|
|
|
foreach my $result ( @{$marcresults} ) {
|
|
my $marcrecord = C4::Search::new_record_from_zebra( 'biblioserver', $result );
|
|
my $biblio = TransformMarcToKoha( C4::Context->dbh, $marcrecord, '' );
|
|
|
|
$biblio->{booksellerid} = $booksellerid;
|
|
push @results, $biblio;
|
|
|
|
}
|
|
|
|
my $borrower= GetMember('borrowernumber' => $loggedinuser);
|
|
my $budgets = GetBudgetHierarchy(q{},$borrower->{branchcode},$borrower->{borrowernumber});
|
|
my $has_budgets = 0;
|
|
foreach my $r (@{$budgets}) {
|
|
if (!defined $r->{budget_amount} || $r->{budget_amount} == 0) {
|
|
next;
|
|
}
|
|
$has_budgets = 1;
|
|
last;
|
|
}
|
|
|
|
$template->param(
|
|
has_budgets => $has_budgets,
|
|
basketno => $basketno,
|
|
booksellerid => $bookseller->{'id'},
|
|
name => $bookseller->{'name'},
|
|
resultsloop => \@results,
|
|
total => $total_hits,
|
|
query => $query,
|
|
pagination_bar => pagination_bar( "$ENV{'SCRIPT_NAME'}?q=$query&booksellerid=$booksellerid&basketno=$basketno&", getnbpages( $total_hits, $results_per_page ), $page, 'page' ),
|
|
);
|
|
|
|
# BUILD THE TEMPLATE
|
|
output_html_with_http_headers $input, $cookie, $template->output;
|