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

Henri-Damien LAURENT laurenthdl at alinto.com
Fri May 19 23:46:56 CEST 2006


CVSROOT:	/sources/koha
Module name:	koha
Branch: 	hdl_auth
Changes by:	Henri-Damien LAURENT <hdl at savannah.gnu.org>	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)





More information about the Koha-cvs mailing list