Merge remote branch 'kc/new/pending_qa/enh/bug_3644' into kcmaster
authorChris Cormack <chrisc@catalyst.net.nz>
Sat, 9 Apr 2011 07:16:45 +0000 (19:16 +1200)
committerChris Cormack <chrisc@catalyst.net.nz>
Sat, 9 Apr 2011 07:16:45 +0000 (19:16 +1200)
1  2 
C4/Biblio.pm
C4/Koha.pm

diff --combined C4/Biblio.pm
index 135dd91,146fc82..7b72411
mode 100644,100755..100755
@@@ -1326,10 -1326,10 +1326,10 @@@ ISBNs stored in differents places depen
  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 = "";
@@@ -1366,10 -1366,10 +1366,10 @@@ The note are stored in differents place
  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 = "";
@@@ -1406,12 -1406,12 +1406,12 @@@ The subjects are stored in differents p
  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;
@@@ -1479,12 -1479,12 +1479,12 @@@ sub GetMarcAuthors 
      # 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;
      }
@@@ -1599,12 -1599,12 +1599,12 @@@ The series are stored in differents pla
  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;
@@@ -2397,40 -2397,6 +2397,40 @@@ sub PrepareItemrecordDisplay 
                          -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\" />";
                  }
diff --combined C4/Koha.pm
@@@ -1051,7 -1051,7 +1051,7 @@@ sub GetAuthorisedValueCategories 
      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;
@@@ -1203,21 -1203,22 +1203,22 @@@ sub GetNormalizedUPC 
   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;
              }
          }
@@@ -1237,10 -1238,10 +1238,10 @@@ sub GetNormalizedISBN 
      }
      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;
              }
          }
@@@ -1290,7 -1290,10 +1290,10 @@@ sub GetNormalizedOCLCNumber 
      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 {