Frédéric Demians
6b8be20497
This patch solves the situation that news is in another language than the Koha interface AND makes that themelanguage routine is always called the same way in order to prevent mixed display. It fixes also a bug related to language preselection based on web browser prefered language. September 9: Adjusted with input of Frederic Demians. Septembre 10: Avoid circular dependency, as pointed by Chris Cormack. Templates related functions are moved from C4::Output to C4::Templates Signed-off-by: Alex Arnaud <alex.arnaud@biblibre.com> Signed-off-by: Ian Walls <ian.walls@bywatersolutions.com> Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
205 lines
7.1 KiB
Perl
Executable file
205 lines
7.1 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
|
|
#
|
|
# 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., 59 Temple Place,
|
|
# Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
|
|
use strict;
|
|
use warnings;
|
|
use C4::Auth;
|
|
use C4::Output;
|
|
use C4::Biblio; # GetMarcBiblio GetXmlBiblio
|
|
use CGI;
|
|
use C4::Koha; # GetItemTypes
|
|
use C4::Branch; # GetBranches
|
|
|
|
my $query = new CGI;
|
|
my $op=$query->param("op") || '';
|
|
my $filename=$query->param("filename");
|
|
my $dbh=C4::Context->dbh;
|
|
my $marcflavour = C4::Context->preference("marcflavour");
|
|
|
|
my ($template, $loggedinuser, $cookie)
|
|
= get_template_and_user
|
|
(
|
|
{
|
|
template_name => "tools/export.tmpl",
|
|
query => $query,
|
|
type => "intranet",
|
|
authnotrequired => 0,
|
|
flagsrequired => {tools => 'export_catalog'},
|
|
debug => 1,
|
|
}
|
|
);
|
|
|
|
my $limit_ind_branch=(C4::Context->preference('IndependantBranches') &&
|
|
C4::Context->userenv &&
|
|
C4::Context->userenv->{flags} % 2 !=1 &&
|
|
C4::Context->userenv->{branch}?1:0);
|
|
my $branches = GetBranches($limit_ind_branch);
|
|
my $branch = $query->param("branch") || '';
|
|
if ( C4::Context->preference("IndependantBranches") ) {
|
|
$branch = C4::Context->userenv->{'branch'};
|
|
}
|
|
|
|
if ($op eq "export") {
|
|
binmode(STDOUT,":utf8");
|
|
print $query->header( -type => 'application/octet-stream',
|
|
-charset => 'utf-8',
|
|
-attachment=>$filename);
|
|
|
|
my $StartingBiblionumber = $query->param("StartingBiblionumber");
|
|
my $EndingBiblionumber = $query->param("EndingBiblionumber");
|
|
my $output_format = $query->param("output_format");
|
|
my $itemtype = $query->param("itemtype");
|
|
my $start_callnumber = $query->param("start_callnumber");
|
|
my $end_callnumber = $query->param("end_callnumber");
|
|
my $start_accession = ($query->param("start_accession")) ? C4::Dates->new($query->param("start_accession")) : '' ;
|
|
my $end_accession = ($query->param("end_accession")) ? C4::Dates->new($query->param("end_accession")) : '' ;
|
|
my $dont_export_items = $query->param("dont_export_item");
|
|
my $strip_nonlocal_items = $query->param("strip_nonlocal_items");
|
|
my $dont_export_fields = $query->param("dont_export_fields");
|
|
my @sql_params;
|
|
|
|
my $items_filter =
|
|
$branch || $start_callnumber || $end_callnumber ||
|
|
$start_accession || $end_accession ||
|
|
($itemtype && C4::Context->preference('item-level_itypes'));
|
|
my $query = $items_filter ?
|
|
"SELECT DISTINCT biblioitems.biblionumber
|
|
FROM biblioitems JOIN items
|
|
USING (biblionumber) WHERE 1"
|
|
:
|
|
"SELECT biblioitems.biblionumber FROM biblioitems WHERE biblionumber >0 ";
|
|
|
|
if ( $StartingBiblionumber ) {
|
|
$query .= " AND biblioitems.biblionumber >= ? ";
|
|
push @sql_params, $StartingBiblionumber;
|
|
}
|
|
|
|
if ( $EndingBiblionumber ) {
|
|
$query .= " AND biblioitems.biblionumber <= ? ";
|
|
push @sql_params, $EndingBiblionumber;
|
|
}
|
|
|
|
if ($branch) {
|
|
$query .= " AND homebranch = ? ";
|
|
push @sql_params, $branch;
|
|
}
|
|
|
|
if ($start_callnumber) {
|
|
$query .= " AND itemcallnumber <= ? ";
|
|
push @sql_params, $start_callnumber;
|
|
}
|
|
|
|
if ($end_callnumber) {
|
|
$query .= " AND itemcallnumber >= ? ";
|
|
push @sql_params, $end_callnumber;
|
|
}
|
|
if ($start_accession) {
|
|
$query .= " AND dateaccessioned >= ? ";
|
|
push @sql_params, $start_accession->output('iso');
|
|
}
|
|
|
|
if ($end_accession) {
|
|
$query .= " AND dateaccessioned <= ? ";
|
|
push @sql_params, $end_accession->output('iso');
|
|
}
|
|
|
|
if ( $itemtype ) {
|
|
$query .= (C4::Context->preference('item-level_itypes')) ? " AND items.itype = ? " : " AND biblioitems.itemtype = ?";
|
|
push @sql_params, $itemtype;
|
|
}
|
|
my $sth = $dbh->prepare($query);
|
|
$sth->execute(@sql_params);
|
|
|
|
while (my ($biblionumber) = $sth->fetchrow) {
|
|
my $record = eval{ GetMarcBiblio($biblionumber); };
|
|
# FIXME: decide how to handle records GetMarcBiblio can't parse or retrieve
|
|
if ($@) {
|
|
next;
|
|
}
|
|
next if not defined $record;
|
|
C4::Biblio::EmbedItemsInMarcBiblio($record, $biblionumber) unless $dont_export_items;
|
|
if ($strip_nonlocal_items || $limit_ind_branch) {
|
|
my ( $homebranchfield, $homebranchsubfield ) =
|
|
GetMarcFromKohaField( 'items.homebranch', '' );
|
|
for my $itemfield ($record->field($homebranchfield)){
|
|
# if stripping nonlocal items, use loggedinuser's branch if they didn't select one
|
|
$branch = C4::Context->userenv->{'branch'} unless $branch;
|
|
$record->delete_field($itemfield) if($itemfield->subfield($homebranchsubfield) ne $branch) ;
|
|
}
|
|
}
|
|
|
|
if ( $dont_export_fields ) {
|
|
my @fields = split " ", $dont_export_fields;
|
|
foreach ( @fields ) {
|
|
/^(\d*)(\w)?$/;
|
|
my $field = $1;
|
|
my $subfield = $2;
|
|
# skip if this record doesn't have this field
|
|
next if not defined $record->field($field);
|
|
if( $subfield ) {
|
|
$record->field($field)->delete_subfields($subfield);
|
|
}
|
|
else {
|
|
$record->delete_field($record->field($field));
|
|
}
|
|
}
|
|
}
|
|
if ( $output_format eq "xml" ) {
|
|
print $record->as_xml_record($marcflavour);
|
|
}
|
|
else {
|
|
print $record->as_usmarc();
|
|
}
|
|
}
|
|
exit;
|
|
|
|
} # if export
|
|
|
|
else {
|
|
|
|
my $itemtypes = GetItemTypes;
|
|
my @itemtypesloop;
|
|
foreach my $thisitemtype (sort keys %$itemtypes) {
|
|
my %row =
|
|
(
|
|
value => $thisitemtype,
|
|
description => $itemtypes->{$thisitemtype}->{'description'},
|
|
);
|
|
push @itemtypesloop, \%row;
|
|
}
|
|
my @branchloop;
|
|
for my $thisbranch (
|
|
sort { $branches->{$a}->{branchname} cmp $branches->{$b}->{branchname} }
|
|
keys %{$branches}
|
|
) {
|
|
push @branchloop,
|
|
{ value => $thisbranch,
|
|
selected => $thisbranch eq $branch,
|
|
branchname => $branches->{$thisbranch}->{'branchname'},
|
|
};
|
|
}
|
|
|
|
$template->param(
|
|
branchloop => \@branchloop,
|
|
itemtypeloop => \@itemtypesloop,
|
|
DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),
|
|
);
|
|
|
|
output_html_with_http_headers $query, $cookie, $template->output;
|
|
}
|