sub GetMarcISBN {
my ( $record, $marcflavour ) = @_;
my $scope;
- if ( $marcflavour eq "MARC21" ) {
- $scope = '020';
- } else { # assume unimarc if not marc21
+ if ( $marcflavour eq "UNIMARC" ) {
$scope = '010';
+ } else { # assume marc21 if not unimarc
+ $scope = '020';
}
my @marcisbns;
my $isbn = "";
sub GetMarcNotes {
my ( $record, $marcflavour ) = @_;
my $scope;
- if ( $marcflavour eq "MARC21" ) {
- $scope = '5..';
- } else { # assume unimarc if not marc21
+ if ( $marcflavour eq "UNIMARC" ) {
$scope = '3..';
+ } else { # assume marc21 if not unimarc
+ $scope = '5..';
}
my @marcnotes;
my $note = "";
sub GetMarcSubjects {
my ( $record, $marcflavour ) = @_;
my ( $mintag, $maxtag );
- if ( $marcflavour eq "MARC21" ) {
- $mintag = "600";
- $maxtag = "699";
- } else { # assume unimarc if not marc21
+ if ( $marcflavour eq "UNIMARC" ) {
$mintag = "600";
$maxtag = "611";
+ } else { # assume marc21 if not unimarc
+ $mintag = "600";
+ $maxtag = "699";
}
my @marcsubjects;
# tagslib useful for UNIMARC author reponsabilities
my $tagslib =
&GetMarcStructure( 1, '' ); # FIXME : we don't have the framework available, we take the default framework. May be buggy on some setups, will be usually correct.
- if ( $marcflavour eq "MARC21" ) {
- $mintag = "700";
- $maxtag = "720";
- } elsif ( $marcflavour eq "UNIMARC" ) { # assume unimarc if not marc21
+ if ( $marcflavour eq "UNIMARC" ) {
$mintag = "700";
$maxtag = "712";
+ } elsif ( $marcflavour eq "MARC21" || $marcflavour eq "NORMARC" ) { # assume marc21 or normarc if not unimarc
+ $mintag = "700";
+ $maxtag = "720";
} else {
return;
}
sub GetMarcSeries {
my ( $record, $marcflavour ) = @_;
my ( $mintag, $maxtag );
- if ( $marcflavour eq "MARC21" ) {
- $mintag = "440";
- $maxtag = "490";
- } else { # assume unimarc if not marc21
+ if ( $marcflavour eq "UNIMARC" ) {
$mintag = "600";
$maxtag = "619";
+ } else { # assume marc21 if not unimarc
+ $mintag = "440";
+ $maxtag = "490";
}
my @marcseries;
-tabindex => '',
-multiple => 0,
);
+ } elsif ( $tagslib->{$tag}->{$subfield}->{value_builder} ) {
+ # opening plugin
+ my $plugin = C4::Context->intranetdir . "/cataloguing/value_builder/" . $tagslib->{$tag}->{$subfield}->{'value_builder'};
+ if (do $plugin) {
+ my $temp;
+ my $extended_param = plugin_parameters( $dbh, $temp, $tagslib, $subfield_data{id}, undef );
+ my ( $function_name, $javascript ) = plugin_javascript( $dbh, $temp, $tagslib, $subfield_data{id}, undef );
+ $subfield_data{random} = int(rand(1000000)); # why do we need 2 different randoms?
+ my $index_subfield = int(rand(1000000));
+ $subfield_data{id} = "tag_".$tag."_subfield_".$subfield."_".$index_subfield;
+ $subfield_data{marc_value} = qq[<input tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255"
+ onfocus="Focus$function_name($subfield_data{random}, '$subfield_data{id}');"
+ onblur=" Blur$function_name($subfield_data{random}, '$subfield_data{id}');" />
+ <a href="#" class="buttonDot" onclick="Clic$function_name('$subfield_data{id}'); return false;" title="Tag Editor">...</a>
+ $javascript];
+ } else {
+ warn "Plugin Failed: $plugin";
+ $subfield_data{marc_value} = qq(<input tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" />); # supply default input form
+ }
+ }
+ elsif ( $tag eq '' ) { # it's an hidden field
+ $subfield_data{marc_value} = qq(<input type="hidden" tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" value="$defaultvalue" />);
+ }
+ elsif ( $tagslib->{$tag}->{$subfield}->{'hidden'} ) { # FIXME: shouldn't input type be "hidden" ?
+ $subfield_data{marc_value} = qq(<input type="text" tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" value="$defaultvalue" />);
+ }
+ elsif ( length($defaultvalue) > 100
+ or (C4::Context->preference("marcflavour") eq "UNIMARC" and
+ 300 <= $tag && $tag < 400 && $subfield eq 'a' )
+ or (C4::Context->preference("marcflavour") eq "MARC21" and
+ 500 <= $tag && $tag < 600 )
+ ) {
+ # oversize field (textarea)
+ $subfield_data{marc_value} = qq(<textarea tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255">$defaultvalue</textarea>\n");
} else {
$subfield_data{marc_value} = "<input type=\"text\" name=\"field_value\" value=\"$defaultvalue\" size=\"50\" maxlength=\"255\" />";
}
my $sth = $dbh->prepare("SELECT DISTINCT category FROM authorised_values ORDER BY category");
$sth->execute;
my @results;
- while (my $category = $sth->fetchrow_array) {
+ while (defined (my $category = $sth->fetchrow_array) ) {
push @results, $category;
}
return \@results;
my ($record,$marcflavour) = @_;
my (@fields,$upc);
- if ($marcflavour eq 'MARC21') {
- @fields = $record->field('024');
+ if ($marcflavour eq 'UNIMARC') {
+ @fields = $record->field('072');
foreach my $field (@fields) {
- my $indicator = $field->indicator(1);
my $upc = _normalize_match_point($field->subfield('a'));
- if ($indicator == 1 and $upc ne '') {
+ if ($upc ne '') {
return $upc;
}
}
+
}
- else { # assume unimarc if not marc21
- @fields = $record->field('072');
+ else { # assume marc21 if not unimarc
+ @fields = $record->field('024');
foreach my $field (@fields) {
+ my $indicator = $field->indicator(1);
my $upc = _normalize_match_point($field->subfield('a'));
- if ($upc ne '') {
+ if ($indicator == 1 and $upc ne '') {
return $upc;
}
}
}
return undef unless $record;
- if ($marcflavour eq 'MARC21') {
- @fields = $record->field('020');
+ if ($marcflavour eq 'UNIMARC') {
+ @fields = $record->field('010');
foreach my $field (@fields) {
- $isbn = $field->subfield('a');
+ my $isbn = $field->subfield('a');
if ($isbn) {
return _isbn_cleanup($isbn);
} else {
}
}
}
- else { # assume unimarc if not marc21
- @fields = $record->field('010');
+ else { # assume marc21 if not unimarc
+ @fields = $record->field('020');
foreach my $field (@fields) {
- my $isbn = $field->subfield('a');
+ $isbn = $field->subfield('a');
if ($isbn) {
return _isbn_cleanup($isbn);
} else {
}
}
}
-
}
sub GetNormalizedEAN {
my ($record,$marcflavour) = @_;
my (@fields,$ean);
- if ($marcflavour eq 'MARC21') {
- @fields = $record->field('024');
+ if ($marcflavour eq 'UNIMARC') {
+ @fields = $record->field('073');
foreach my $field (@fields) {
- my $indicator = $field->indicator(1);
$ean = _normalize_match_point($field->subfield('a'));
- if ($indicator == 3 and $ean ne '') {
+ if ($ean ne '') {
return $ean;
}
}
}
- else { # assume unimarc if not marc21
- @fields = $record->field('073');
+ else { # assume marc21 if not unimarc
+ @fields = $record->field('024');
foreach my $field (@fields) {
+ my $indicator = $field->indicator(1);
$ean = _normalize_match_point($field->subfield('a'));
- if ($ean ne '') {
+ if ($indicator == 3 and $ean ne '') {
return $ean;
}
}
my ($record,$marcflavour) = @_;
my (@fields,$oclc);
- if ($marcflavour eq 'MARC21') {
+ if ($marcflavour eq 'UNIMARC') {
+ # TODO: add UNIMARC fields
+ }
+ else { # assume marc21 if not unimarc
@fields = $record->field('035');
foreach my $field (@fields) {
$oclc = $field->subfield('a');
}
}
}
- else { # TODO: add UNIMARC fields
- }
}
sub _normalize_match_point {