|
Lines 140-146
sub new {
Link Here
|
| 140 |
MaxCount => C4::Context->preference("OAI-PMH:MaxCount"), |
140 |
MaxCount => C4::Context->preference("OAI-PMH:MaxCount"), |
| 141 |
granularity => 'YYYY-MM-DD', |
141 |
granularity => 'YYYY-MM-DD', |
| 142 |
earliestDatestamp => '0001-01-01', |
142 |
earliestDatestamp => '0001-01-01', |
| 143 |
deletedRecord => 'no', |
143 |
deletedRecord => C4::Context->preference("OAI-PMH:DeletedRecord") || 'no', |
| 144 |
); |
144 |
); |
| 145 |
|
145 |
|
| 146 |
# FIXME - alas, the description element is not so simple; to validate |
146 |
# FIXME - alas, the description element is not so simple; to validate |
|
Lines 240-245
sub new {
Link Here
|
| 240 |
|
240 |
|
| 241 |
# __END__ C4::OAI::Record |
241 |
# __END__ C4::OAI::Record |
| 242 |
|
242 |
|
|
|
243 |
package C4::OAI::DeletedRecord; |
| 244 |
|
| 245 |
use strict; |
| 246 |
use warnings; |
| 247 |
use HTTP::OAI; |
| 248 |
use HTTP::OAI::Metadata::OAI_DC; |
| 249 |
|
| 250 |
use base ("HTTP::OAI::Record"); |
| 251 |
|
| 252 |
sub new { |
| 253 |
my ($class, $timestamp, $setSpecs, %args) = @_; |
| 254 |
|
| 255 |
my $self = $class->SUPER::new(%args); |
| 256 |
|
| 257 |
$timestamp =~ s/ /T/, $timestamp .= 'Z'; |
| 258 |
$self->header( new HTTP::OAI::Header( |
| 259 |
status => 'deleted', |
| 260 |
identifier => $args{identifier}, |
| 261 |
datestamp => $timestamp, |
| 262 |
) ); |
| 263 |
|
| 264 |
foreach my $setSpec (@$setSpecs) { |
| 265 |
$self->header->setSpec($setSpec); |
| 266 |
} |
| 267 |
|
| 268 |
return $self; |
| 269 |
} |
| 270 |
|
| 271 |
# __END__ C4::OAI::DeletedRecord |
| 272 |
|
| 243 |
|
273 |
|
| 244 |
|
274 |
|
| 245 |
package C4::OAI::GetRecord; |
275 |
package C4::OAI::GetRecord; |
|
Lines 266-272
sub new {
Link Here
|
| 266 |
my ($biblionumber) = $args{identifier} =~ /^$prefix(.*)/; |
296 |
my ($biblionumber) = $args{identifier} =~ /^$prefix(.*)/; |
| 267 |
$sth->execute( $biblionumber ); |
297 |
$sth->execute( $biblionumber ); |
| 268 |
my ($marcxml, $timestamp); |
298 |
my ($marcxml, $timestamp); |
|
|
299 |
my $deleted = 0; |
| 269 |
unless ( ($marcxml, $timestamp) = $sth->fetchrow ) { |
300 |
unless ( ($marcxml, $timestamp) = $sth->fetchrow ) { |
|
|
301 |
$sth = $dbh->prepare(" |
| 302 |
SELECT biblionumber, timestamp |
| 303 |
FROM deletedbiblio |
| 304 |
WHERE biblionumber=? " ); |
| 305 |
$sth->execute( $biblionumber ); |
| 306 |
|
| 307 |
unless ( ($marcxml, $timestamp) = $sth->fetchrow ) { |
| 308 |
|
| 270 |
return HTTP::OAI::Response->new( |
309 |
return HTTP::OAI::Response->new( |
| 271 |
requestURL => $repository->self_url(), |
310 |
requestURL => $repository->self_url(), |
| 272 |
errors => [ new HTTP::OAI::Error( |
311 |
errors => [ new HTTP::OAI::Error( |
|
Lines 274-281
sub new {
Link Here
|
| 274 |
message => "There is no biblio record with this identifier", |
313 |
message => "There is no biblio record with this identifier", |
| 275 |
) ] , |
314 |
) ] , |
| 276 |
); |
315 |
); |
|
|
316 |
} else { |
| 317 |
$deleted = 1; |
| 318 |
} |
| 277 |
} |
319 |
} |
| 278 |
|
|
|
| 279 |
my $oai_sets = GetOAISetsBiblio($biblionumber); |
320 |
my $oai_sets = GetOAISetsBiblio($biblionumber); |
| 280 |
my @setSpecs; |
321 |
my @setSpecs; |
| 281 |
foreach (@$oai_sets) { |
322 |
foreach (@$oai_sets) { |
|
Lines 283-291
sub new {
Link Here
|
| 283 |
} |
324 |
} |
| 284 |
|
325 |
|
| 285 |
#$self->header( HTTP::OAI::Header->new( identifier => $args{identifier} ) ); |
326 |
#$self->header( HTTP::OAI::Header->new( identifier => $args{identifier} ) ); |
| 286 |
$self->record( C4::OAI::Record->new( |
327 |
($deleted == 1) ? $self->record( C4::OAI::DeletedRecord->new( |
|
|
328 |
$timestamp, \@setSpecs, %args ) ) |
| 329 |
: $self->record( C4::OAI::Record->new( |
| 287 |
$repository, $marcxml, $timestamp, \@setSpecs, %args ) ); |
330 |
$repository, $marcxml, $timestamp, \@setSpecs, %args ) ); |
| 288 |
|
|
|
| 289 |
return $self; |
331 |
return $self; |
| 290 |
} |
332 |
} |
| 291 |
|
333 |
|
|
Lines 316-334
sub new {
Link Here
|
| 316 |
} |
358 |
} |
| 317 |
my $max = $repository->{koha_max_count}; |
359 |
my $max = $repository->{koha_max_count}; |
| 318 |
my $sql = " |
360 |
my $sql = " |
| 319 |
SELECT biblioitems.biblionumber, biblioitems.timestamp |
361 |
(SELECT biblioitems.biblionumber, timestamp |
| 320 |
FROM biblioitems |
362 |
FROM biblioitems |
| 321 |
"; |
363 |
"; |
| 322 |
$sql .= " JOIN oai_sets_biblios ON biblioitems.biblionumber = oai_sets_biblios.biblionumber " if defined $set; |
364 |
$sql .= " JOIN oai_sets_biblios ON biblioitems.biblionumber = oai_sets_biblios.biblionumber " if defined $set; |
| 323 |
$sql .= " WHERE DATE(timestamp) >= ? AND DATE(timestamp) <= ? "; |
365 |
$sql .= " WHERE DATE(timestamp) >= ? AND DATE(timestamp) <= ? "; |
| 324 |
$sql .= " AND oai_sets_biblios.set_id = ? " if defined $set; |
366 |
$sql .= " AND oai_sets_biblios.set_id = ? " if defined $set; |
| 325 |
$sql .= " |
367 |
$sql .= ") UNION |
|
|
368 |
(SELECT deletedbiblio.biblionumber, timestamp FROM deletedbiblio"; |
| 369 |
$sql .= " JOIN oai_sets_biblios ON deletedbiblio.biblionumber = oai_sets_biblios.biblionumber " if defined $set; |
| 370 |
$sql .= " WHERE DATE(timestamp) >= ? AND DATE(timestamp) <= ? "; |
| 371 |
$sql .= " AND oai_sets_biblios.set_id = ? " if defined $set; |
| 372 |
|
| 373 |
$sql .= ") ORDER BY biblionumber |
| 326 |
LIMIT " . ($max+1) . " |
374 |
LIMIT " . ($max+1) . " |
| 327 |
OFFSET $token->{offset} |
375 |
OFFSET $token->{offset} |
| 328 |
"; |
376 |
"; |
| 329 |
my $sth = $dbh->prepare( $sql ); |
377 |
my $sth = $dbh->prepare( $sql ); |
| 330 |
my @bind_params = ($token->{'from'}, $token->{'until'}); |
378 |
my @bind_params = ($token->{'from'}, $token->{'until'}); |
| 331 |
push @bind_params, $set->{'id'} if defined $set; |
379 |
push @bind_params, $set->{'id'} if defined $set; |
|
|
380 |
push @bind_params, ($token->{'from'}, $token->{'until'}); |
| 381 |
push @bind_params, $set->{'id'} if defined $set; |
| 332 |
$sth->execute( @bind_params ); |
382 |
$sth->execute( @bind_params ); |
| 333 |
|
383 |
|
| 334 |
my $count = 0; |
384 |
my $count = 0; |
|
Lines 473-492
sub new {
Link Here
|
| 473 |
} |
523 |
} |
| 474 |
my $max = $repository->{koha_max_count}; |
524 |
my $max = $repository->{koha_max_count}; |
| 475 |
my $sql = " |
525 |
my $sql = " |
| 476 |
SELECT biblioitems.biblionumber, biblioitems.marcxml, biblioitems.timestamp |
526 |
(SELECT biblioitems.biblionumber, marcxml, timestamp |
| 477 |
FROM biblioitems |
527 |
FROM biblioitems |
| 478 |
"; |
528 |
"; |
| 479 |
$sql .= " JOIN oai_sets_biblios ON biblioitems.biblionumber = oai_sets_biblios.biblionumber " if defined $set; |
529 |
$sql .= " JOIN oai_sets_biblios ON biblioitems.biblionumber = oai_sets_biblios.biblionumber " if defined $set; |
| 480 |
$sql .= " WHERE DATE(timestamp) >= ? AND DATE(timestamp) <= ? "; |
530 |
$sql .= " WHERE DATE(timestamp) >= ? AND DATE(timestamp) <= ? "; |
| 481 |
$sql .= " AND oai_sets_biblios.set_id = ? " if defined $set; |
531 |
$sql .= " AND oai_sets_biblios.set_id = ? " if defined $set; |
| 482 |
$sql .= " |
532 |
$sql .= ") UNION |
|
|
533 |
(SELECT deletedbiblio.biblionumber, null as marcxml, timestamp FROM deletedbiblio"; |
| 534 |
$sql .= " JOIN oai_sets_biblios ON deletedbiblio.biblionumber = oai_sets_biblios.biblionumber " if defined $set; |
| 535 |
$sql .= " WHERE DATE(timestamp) >= ? AND DATE(timestamp) <= ? "; |
| 536 |
$sql .= " AND oai_sets_biblios.set_id = ? " if defined $set; |
| 537 |
|
| 538 |
$sql .= ") ORDER BY biblionumber |
| 483 |
LIMIT " . ($max + 1) . " |
539 |
LIMIT " . ($max + 1) . " |
| 484 |
OFFSET $token->{offset} |
540 |
OFFSET $token->{offset} |
| 485 |
"; |
541 |
"; |
| 486 |
|
|
|
| 487 |
my $sth = $dbh->prepare( $sql ); |
542 |
my $sth = $dbh->prepare( $sql ); |
| 488 |
my @bind_params = ($token->{'from'}, $token->{'until'}); |
543 |
my @bind_params = ($token->{'from'}, $token->{'until'}); |
| 489 |
push @bind_params, $set->{'id'} if defined $set; |
544 |
push @bind_params, $set->{'id'} if defined $set; |
|
|
545 |
push @bind_params, ($token->{'from'}, $token->{'until'}); |
| 546 |
push @bind_params, $set->{'id'} if defined $set; |
| 490 |
$sth->execute( @bind_params ); |
547 |
$sth->execute( @bind_params ); |
| 491 |
|
548 |
|
| 492 |
my $count = 0; |
549 |
my $count = 0; |
|
Lines 509-519
sub new {
Link Here
|
| 509 |
foreach (@$oai_sets) { |
566 |
foreach (@$oai_sets) { |
| 510 |
push @setSpecs, $_->{spec}; |
567 |
push @setSpecs, $_->{spec}; |
| 511 |
} |
568 |
} |
| 512 |
$self->record( C4::OAI::Record->new( |
569 |
if ($marcxml) { |
| 513 |
$repository, $marcxml, $timestamp, \@setSpecs, |
570 |
$self->record( C4::OAI::Record->new( |
| 514 |
identifier => $repository->{ koha_identifier } . ':' . $biblionumber, |
571 |
$repository, $marcxml, $timestamp, \@setSpecs, |
| 515 |
metadataPrefix => $token->{metadata_prefix} |
572 |
identifier => $repository->{ koha_identifier } . ':' . $biblionumber, |
| 516 |
) ); |
573 |
metadataPrefix => $token->{metadata_prefix} |
|
|
574 |
) ); |
| 575 |
} else { |
| 576 |
$self->record( C4::OAI::DeletedRecord->new( |
| 577 |
$timestamp, \@setSpecs, identifier => $repository->{ koha_identifier } . ':' . $biblionumber ) ); |
| 578 |
} |
| 517 |
} |
579 |
} |
| 518 |
|
580 |
|
| 519 |
return $self; |
581 |
return $self; |
| 520 |
- |
|
|