[Top][All Lists]
[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)