koha-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Koha-cvs] koha/C4 AuthoritiesMarc.pm [hdl_auth]


From: Henri-Damien LAURENT
Subject: [Koha-cvs] koha/C4 AuthoritiesMarc.pm [hdl_auth]
Date: Fri, 19 May 2006 21:46:56 +0000

CVSROOT:        /sources/koha
Module name:    koha
Branch:         hdl_auth
Changes by:     Henri-Damien LAURENT <address@hidden>   06/05/19 21:46:56

Modified files:
        C4             : AuthoritiesMarc.pm 

Log message:
        First try on BuildHierarchies
        Strange bug : authoritysearch returns some results where none should 
be. reason : I search for a record with ONE tag with two subfields matching two 
different requirements.
        It returns me all the records containing tags matching either One 
requirement or the other.
        
        My termination condition is thus never reached.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/koha/koha/C4/AuthoritiesMarc.pm.diff?only_with_tag=hdl_auth&tr1=1.9.2.17.4.1&tr2=1.9.2.17.4.2&r1=text&r2=text

Patches:
Index: koha/C4/AuthoritiesMarc.pm
diff -u koha/C4/AuthoritiesMarc.pm:1.9.2.17.4.1 
koha/C4/AuthoritiesMarc.pm:1.9.2.17.4.2
--- koha/C4/AuthoritiesMarc.pm:1.9.2.17.4.1     Fri May 19 14:58:15 2006
+++ koha/C4/AuthoritiesMarc.pm  Fri May 19 21:46:56 2006
@@ -52,6 +52,9 @@
        &MARCaddword &MARCdelword
        &char_decode
        &FindDuplicate
+       &BuildSummary
+       &BuildUnimarcHierarchies
+       &BuildUnimarcHierarchy
  );
 
 sub authoritysearch {
@@ -1024,11 +1027,12 @@
                        }
                        # see :
                        foreach my $field ($record->field('5..')) {
-                               if ($field->subfield('5') eq 'g'){
+                       
+                               if (($field->subfield('5')) && 
($field->subfield('a')) && ($field->subfield('5') eq 'g')) {
                                  $broaderterms.= '<span class="BT"> <a 
href="detail.pl?authid='.$field->subfield('3').'">'.$field->subfield('a')."</a></span>
 \n";
-                               } elsif ($field->subfield('5') eq 'h'){
+                               } elsif (($field->subfield('5')) && 
($field->subfield('a')) && ($field->subfield('5') eq 'h')){
                                  $narrowerterms.= '<span class="NT"><a 
href="detail.pl?authid='.$field->subfield('3').'">'.$field->subfield('a')."</a></span>
 \n";
-                               } else {
+                               } elsif ($field->subfield('a')) {
                                  $seealso.= '<span class="RT"><a 
href="detail.pl?authid='.$field->subfield('3').'">'.$field->subfield('a')."</a></span>
 \n";
                                }
                        }
@@ -1048,6 +1052,68 @@
        warn "buildsummary : $summary";
        return $summary;
 }
+sub BuildUnimarcHierarchies{
+       my $authid = shift @_;
+       my $hierarchies =shift @_;
+       my $dbh=C4::Context->dbh;
+       my $record = AUTHgetauthority($dbh,$authid);
+       my $authtypecode = AUTHfind_authtypecode($dbh,$authid);
+       if (@$hierarchies){
+         foreach my $element (@$hierarchies){
+           $element = BuildUnimarcHierarchy($record).$element;
+               warn "element :".$element;
+         }
+       } else {
+         push @$hierarchies,BuildUnimarcHierarchy($record);
+       }
+       while (my 
($result,$total)=authoritysearch($dbh,['5503','5505'],['and','and'],'',['=','='],[$authid,'h'],0,100,$authtypecode))
  {
+       warn "total : $total";
+#        foreach my $parentauthid (map { $_->{'authid'} } @$result){warn 
$parentauthid;}
+         if ($total){
+           foreach my $parentauthid (map { $_->{'authid'} } @$result){
+                 my $parentrecord = AUTHgetauthority($dbh,$parentauthid);
+                 print $parentauthid;
+                 print $parentrecord->as_formatted;
+#                foreach my $element (@$hierarchies){
+#             warn "element :".$element;
+#                }
+#            $hierarchies = BuildUnimarcHierarchies($authid,$hierarchies);
+           } 
+               last;
+         } else {
+          last;
+         }
+       }
+       return $hierarchies;
+}
+sub BuildUnimarcHierarchy{
+       my $record = shift @_;
+       my $authid=$record->subfield('250','3');
+       my $parents=""; my $children="";
+       foreach my $field ($record->fields('550')){
+               if ($field->subfield('5') && $field->subfield('a')){
+                 if ($field->subfield('5') eq 'h'){
+#                        warn "5 eq h \n authid : $authid authid fils : 
".$field->subfield('3')." value:".$field->subfield('a');
+                         $children .= '<div 
id="'.$authid.$field->subfield('3').'c" class="child"> <a 
href="detail.pl?authid='.$field->subfield('3').'">'.$field->subfield('a').'</a></div>
+                         ';
+                 }elsif ($field->subfield('5') eq 'g'){
+#                        warn "5 eq g \n authid : $authid authid fils : 
".$field->subfield('3')." value:".$field->subfield('a');
+                         $parents = '<div 
id="'.$authid.$field->subfield('3').'p" class="parent"> <a 
href="detail.pl?authid='.$field->subfield('3').'">'.$field->subfield('a').'</a></div>
+                         '.$parents;
+                 }
+               }
+               # brothers could get in there with an else
+       }
+       my $hierarchy= 
+         ($parents?
+               $parents."<sup><a 
onclick=\"showParents('$authid')\">+</a></sup><a 
href=\"detail.pl?auhtid=".$authid.'\">':
+               "").
+         $record->field('250')->subfield('a').
+      ($children?"</a><sub><a 
onclick=\"showChildren('$authid')\">+</a></sub><br/>
+                       ".$children:"");
+       $hierarchy='<div id="'.$authid.'" class="element">'.$hierarchy.'</div>';
+       return $hierarchy;
+}
 
 END { }       # module clean-up code here (global destructor)
 
@@ -1061,8 +1127,15 @@
 
 =cut
 
-# $Id: AuthoritiesMarc.pm,v 1.9.2.17.4.1 2006/05/19 14:58:15 hdl Exp $
+# $Id: AuthoritiesMarc.pm,v 1.9.2.17.4.2 2006/05/19 21:46:56 hdl Exp $
 # $Log: AuthoritiesMarc.pm,v $
+# Revision 1.9.2.17.4.2  2006/05/19 21:46:56  hdl
+# First try on BuildHierarchies
+# Strange bug : authoritysearch returns some results where none should be. 
reason : I search for a record with ONE tag with two subfields matching two 
different requirements.
+# It returns me all the records containing tags matching either One 
requirement or the other.
+#
+# My termination condition is thus never reached.
+#
 # Revision 1.9.2.17.4.1  2006/05/19 14:58:15  hdl
 # Adding a new summary taht builds on the fly a summary with BT, NT and 
related terms and Unused forms.
 # (French valid ATM)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]