|
Lines 42-48
use Koha::Caches;
Link Here
|
| 42 |
use Koha::Authority::Types; |
42 |
use Koha::Authority::Types; |
| 43 |
use Koha::Acquisition::Currencies; |
43 |
use Koha::Acquisition::Currencies; |
| 44 |
use Koha::Biblio::Metadata; |
44 |
use Koha::Biblio::Metadata; |
|
|
45 |
use Koha::Biblio::DeletedMetadata; |
| 45 |
use Koha::Biblio::Metadatas; |
46 |
use Koha::Biblio::Metadatas; |
|
|
47 |
use Koha::Biblio::DeletedMetadatas; |
| 46 |
use Koha::SearchEngine; |
48 |
use Koha::SearchEngine; |
| 47 |
use Koha::Libraries; |
49 |
use Koha::Libraries; |
| 48 |
|
50 |
|
|
Lines 257-263
sub AddBiblio {
Link Here
|
| 257 |
_koha_marc_update_biblioitem_cn_sort( $record, $olddata, $frameworkcode ); |
259 |
_koha_marc_update_biblioitem_cn_sort( $record, $olddata, $frameworkcode ); |
| 258 |
|
260 |
|
| 259 |
# now add the record |
261 |
# now add the record |
| 260 |
ModBiblioMarc( $record, $biblionumber, $frameworkcode ) unless $defer_marc_save; |
262 |
ModBiblioMarc( $record, $biblionumber, $biblioitemnumber, $frameworkcode ) unless $defer_marc_save; |
| 261 |
|
263 |
|
| 262 |
# update OAI-PMH sets |
264 |
# update OAI-PMH sets |
| 263 |
if(C4::Context->preference("OAI-PMH:AutoUpdateSets")) { |
265 |
if(C4::Context->preference("OAI-PMH:AutoUpdateSets")) { |
|
Lines 335-341
sub ModBiblio {
Link Here
|
| 335 |
_koha_marc_update_biblioitem_cn_sort( $record, $oldbiblio, $frameworkcode ); |
337 |
_koha_marc_update_biblioitem_cn_sort( $record, $oldbiblio, $frameworkcode ); |
| 336 |
|
338 |
|
| 337 |
# update the MARC record (that now contains biblio and items) with the new record data |
339 |
# update the MARC record (that now contains biblio and items) with the new record data |
| 338 |
&ModBiblioMarc( $record, $biblionumber, $frameworkcode ); |
340 |
&ModBiblioMarc( $record, $biblionumber, $biblioitemnumber, $frameworkcode ); |
| 339 |
|
341 |
|
| 340 |
# modify the other koha tables |
342 |
# modify the other koha tables |
| 341 |
_koha_modify_biblio( $dbh, $oldbiblio, $frameworkcode ); |
343 |
_koha_modify_biblio( $dbh, $oldbiblio, $frameworkcode ); |
|
Lines 426-432
sub DelBiblio {
Link Here
|
| 426 |
$sth->execute($biblionumber); |
428 |
$sth->execute($biblionumber); |
| 427 |
while ( my $biblioitemnumber = $sth->fetchrow ) { |
429 |
while ( my $biblioitemnumber = $sth->fetchrow ) { |
| 428 |
|
430 |
|
| 429 |
# delete this biblioitem |
431 |
#Handle biblio_metadata and deletedbiblio_metadata first before biblioitems operations CASCADE there |
|
|
432 |
$error = _koha_delete_biblio_metadata( $dbh, $biblioitemnumber, $biblionumber ); |
| 433 |
return $error if $error; |
| 434 |
|
| 430 |
$error = _koha_delete_biblioitems( $dbh, $biblioitemnumber ); |
435 |
$error = _koha_delete_biblioitems( $dbh, $biblioitemnumber ); |
| 431 |
return $error if $error; |
436 |
return $error if $error; |
| 432 |
} |
437 |
} |
|
Lines 436-441
sub DelBiblio {
Link Here
|
| 436 |
# delete cascade will prevent deletedbiblioitems rows |
441 |
# delete cascade will prevent deletedbiblioitems rows |
| 437 |
# from being generated by _koha_delete_biblioitems |
442 |
# from being generated by _koha_delete_biblioitems |
| 438 |
$error = _koha_delete_biblio( $dbh, $biblionumber ); |
443 |
$error = _koha_delete_biblio( $dbh, $biblionumber ); |
|
|
444 |
return $error if $error; |
| 439 |
|
445 |
|
| 440 |
logaction( "CATALOGUING", "DELETE", $biblionumber, "biblio" ) if C4::Context->preference("CataloguingLog"); |
446 |
logaction( "CATALOGUING", "DELETE", $biblionumber, "biblio" ) if C4::Context->preference("CataloguingLog"); |
| 441 |
|
447 |
|
|
Lines 1311-1317
sub GetMarcBiblio {
Link Here
|
| 1311 |
$sth->execute($biblionumber); |
1317 |
$sth->execute($biblionumber); |
| 1312 |
my $row = $sth->fetchrow_hashref; |
1318 |
my $row = $sth->fetchrow_hashref; |
| 1313 |
my $biblioitemnumber = $row->{'biblioitemnumber'}; |
1319 |
my $biblioitemnumber = $row->{'biblioitemnumber'}; |
| 1314 |
my $marcxml = GetXmlBiblio( $biblionumber ); |
1320 |
my $marcxml = GetXmlBiblio( $biblioitemnumber ); |
| 1315 |
$marcxml = StripNonXmlChars( $marcxml ); |
1321 |
$marcxml = StripNonXmlChars( $marcxml ); |
| 1316 |
my $frameworkcode = GetFrameworkCode($biblionumber); |
1322 |
my $frameworkcode = GetFrameworkCode($biblionumber); |
| 1317 |
MARC::File::XML->default_record_format( C4::Context->preference('marcflavour') ); |
1323 |
MARC::File::XML->default_record_format( C4::Context->preference('marcflavour') ); |
|
Lines 1339-1363
sub GetMarcBiblio {
Link Here
|
| 1339 |
|
1345 |
|
| 1340 |
=head2 GetXmlBiblio |
1346 |
=head2 GetXmlBiblio |
| 1341 |
|
1347 |
|
| 1342 |
my $marcxml = GetXmlBiblio($biblionumber); |
1348 |
my $marcxml = GetXmlBiblio($biblioitemnumber); |
| 1343 |
|
1349 |
|
| 1344 |
Returns biblio_metadata.metadata/marcxml of the biblionumber passed in parameter. |
1350 |
Returns biblio_metadata.metadata/marcxml of the biblioitemnumber passed in parameter. |
| 1345 |
The XML should only contain biblio information (item information is no longer stored in marcxml field) |
1351 |
The XML should only contain biblio information (item information is no longer stored in marcxml field) |
| 1346 |
|
1352 |
|
| 1347 |
=cut |
1353 |
=cut |
| 1348 |
|
1354 |
|
| 1349 |
sub GetXmlBiblio { |
1355 |
sub GetXmlBiblio { |
| 1350 |
my ($biblionumber) = @_; |
1356 |
my ($biblioitemnumber, $biblionumber) = @_; |
| 1351 |
my $dbh = C4::Context->dbh; |
1357 |
my $dbh = C4::Context->dbh; |
| 1352 |
return unless $biblionumber; |
1358 |
return unless ($biblionumber || $biblioitemnumber); |
|
|
1359 |
|
| 1360 |
my @args; |
| 1361 |
my @pks; |
| 1362 |
if ($biblioitemnumber) { |
| 1363 |
push(@pks, 'biblioitemnumber = ?'); |
| 1364 |
push(@args, $biblioitemnumber); |
| 1365 |
} |
| 1366 |
if ($biblionumber) { |
| 1367 |
push(@pks, 'biblionumber = ?'); |
| 1368 |
push(@args, $biblionumber); |
| 1369 |
} |
| 1353 |
my ($marcxml) = $dbh->selectrow_array( |
1370 |
my ($marcxml) = $dbh->selectrow_array( |
| 1354 |
q| |
1371 |
|
| 1355 |
SELECT metadata |
1372 |
"SELECT metadata\n". |
| 1356 |
FROM biblio_metadata |
1373 |
"FROM biblio_metadata\n". |
| 1357 |
WHERE biblionumber=? |
1374 |
"WHERE\n". |
| 1358 |
AND format='marcxml' |
1375 |
" ".join(" AND ", @pks)."\n". |
| 1359 |
AND marcflavour=? |
1376 |
" AND format='marcxml'\n". |
| 1360 |
|, undef, $biblionumber, C4::Context->preference('marcflavour') |
1377 |
" AND marcflavour=?\n" |
|
|
1378 |
|
| 1379 |
, undef, @args, C4::Context->preference('marcflavour') |
| 1361 |
); |
1380 |
); |
| 1362 |
return $marcxml; |
1381 |
return $marcxml; |
| 1363 |
} |
1382 |
} |
|
Lines 3438-3448
sub _koha_delete_biblioitems {
Link Here
|
| 3438 |
return; |
3457 |
return; |
| 3439 |
} |
3458 |
} |
| 3440 |
|
3459 |
|
|
|
3460 |
=head2 _koha_delete_biblio_metadata |
| 3461 |
|
| 3462 |
$error = _koha_delete_biblio_metadata($dbh, $biblioitemnumber, $biblionumber); |
| 3463 |
|
| 3464 |
Internal sub for deleting from biblio_metadata table -- also saves to deletedbiblio_metadata |
| 3465 |
|
| 3466 |
C<$dbh> - the database handle |
| 3467 |
C<$biblioitemnumber> - the biblioitemnumber of the biblio_metadata to be deleted |
| 3468 |
|
| 3469 |
=cut |
| 3470 |
|
| 3471 |
# FIXME: add error handling |
| 3472 |
|
| 3473 |
sub _koha_delete_biblio_metadata { |
| 3474 |
my ( $dbh, $biblioitemnumber ) = @_; |
| 3475 |
|
| 3476 |
my $m = Koha::Biblio::Metadatas->find({biblioitemnumber => $biblioitemnumber}); |
| 3477 |
die "_koha_delete_biblio_metadata($biblioitemnumber):> No biblio_metadata-row!" unless $m; |
| 3478 |
|
| 3479 |
my $dm = Koha::Biblio::DeletedMetadata->new( $m->_result->{_column_data} ); |
| 3480 |
$dm->store; |
| 3481 |
$m->delete(); |
| 3482 |
return undef; |
| 3483 |
} |
| 3484 |
|
| 3441 |
=head1 UNEXPORTED FUNCTIONS |
3485 |
=head1 UNEXPORTED FUNCTIONS |
| 3442 |
|
3486 |
|
| 3443 |
=head2 ModBiblioMarc |
3487 |
=head2 ModBiblioMarc |
| 3444 |
|
3488 |
|
| 3445 |
&ModBiblioMarc($newrec,$biblionumber,$frameworkcode); |
3489 |
&ModBiblioMarc($newrec,$biblionumber,$biblioitemnumber,$frameworkcode); |
| 3446 |
|
3490 |
|
| 3447 |
Add MARC XML data for a biblio to koha |
3491 |
Add MARC XML data for a biblio to koha |
| 3448 |
|
3492 |
|
|
Lines 3453-3459
Function exported, but should NOT be used, unless you really know what you're do
Link Here
|
| 3453 |
sub ModBiblioMarc { |
3497 |
sub ModBiblioMarc { |
| 3454 |
# pass the MARC::Record to this function, and it will create the records in |
3498 |
# pass the MARC::Record to this function, and it will create the records in |
| 3455 |
# the marcxml field |
3499 |
# the marcxml field |
| 3456 |
my ( $record, $biblionumber, $frameworkcode ) = @_; |
3500 |
my ( $record, $biblionumber, $biblioitemnumber, $frameworkcode ) = @_; |
| 3457 |
if ( !$record ) { |
3501 |
if ( !$record ) { |
| 3458 |
carp 'ModBiblioMarc passed an undefined record'; |
3502 |
carp 'ModBiblioMarc passed an undefined record'; |
| 3459 |
return; |
3503 |
return; |
|
Lines 3500-3505
sub ModBiblioMarc {
Link Here
|
| 3500 |
} |
3544 |
} |
| 3501 |
|
3545 |
|
| 3502 |
my $metadata = { |
3546 |
my $metadata = { |
|
|
3547 |
biblioitemnumber => $biblioitemnumber, |
| 3503 |
biblionumber => $biblionumber, |
3548 |
biblionumber => $biblionumber, |
| 3504 |
format => 'marcxml', |
3549 |
format => 'marcxml', |
| 3505 |
marcflavour => C4::Context->preference('marcflavour'), |
3550 |
marcflavour => C4::Context->preference('marcflavour'), |