From: hdl Date: Fri, 6 Apr 2007 14:48:45 +0000 (+0000) Subject: Code Cleaning : AuthoritiesMARC. X-Git-Tag: dev_week~337 X-Git-Url: http://git.rot13.org/?a=commitdiff_plain;h=b767f50c8f4d9216db2be82ed8c0b92e170d1db0;p=koha.git Code Cleaning : AuthoritiesMARC. --- diff --git a/C4/AuthoritiesMarc.pm b/C4/AuthoritiesMarc.pm index 07eff34186..9e670ea42f 100644 --- a/C4/AuthoritiesMarc.pm +++ b/C4/AuthoritiesMarc.pm @@ -23,7 +23,7 @@ use C4::Koha; use MARC::Record; use C4::Biblio; use C4::Search; -#use ZOOM; + use vars qw($VERSION @ISA @EXPORT); # set the version for version checking @@ -31,30 +31,44 @@ $VERSION = 0.01; @ISA = qw(Exporter); @EXPORT = qw( - &AUTHgettagslib - &AUTHfindsubfield - &AUTHfind_authtypecode - - &AUTHaddauthority - &AUTHmodauthority - &AUTHdelauthority - &AUTHaddsubfield - &AUTHgetauthority - &AUTHfind_marc_from_kohafield - &AUTHgetauth_type - &AUTHcount_usage - &getsummary - &authoritysearch - &XMLgetauthority - + &GetTagsLabels + &GetAuthType + &GetAuthTypeCode + &GetAuthMARCFromKohaField &AUTHhtml2marc + + &AddAuthority + &ModAuthority + &DelAuthority + &GetAuthority + &GetAuthorityXML + + &CountUsage + &CountUsageChildren + &SearchAuthorities + + &BuildSummary &BuildUnimarcHierarchies &BuildUnimarcHierarchy + &merge - &FindDuplicate + &FindDuplicateAuthority ); -sub AUTHfind_marc_from_kohafield { +=head2 GetAuthMARCFromKohaField + +=over 4 + +( $tag, $subfield ) = &GetAuthMARCFromKohaField ($kohafield,$authtypecode); +returns tag and subfield linked to kohafield + +Comment : +Suppose Kohafield is only linked to ONE subfield +=back + +=cut +sub GetAuthMARCFromKohaField { +#AUTHfind_marc_from_kohafield my ( $kohafield,$authtypecode ) = @_; my $dbh=C4::Context->dbh; return 0, 0 unless $kohafield; @@ -67,7 +81,17 @@ sub AUTHfind_marc_from_kohafield { return ($tagfield,$tagsubfield); } -sub authoritysearch { +=head2 SearchAuthorities + +=over 4 + +(\@finalresult, $nbresults)= &SearchAuthorities($tags, $and_or, $excluding, $operator, $value, $offset,$length,$authtypecode,$sortby) +returns ref to array result and count of results returned + +=back + +=cut +sub SearchAuthorities { my ($tags, $and_or, $excluding, $operator, $value, $offset,$length,$authtypecode,$sortby) = @_; my $dbh=C4::Context->dbh; my $query; @@ -120,6 +144,7 @@ sub authoritysearch { } ##Add how many queries generated $query= $and.$query.$q2; + ## Adding order $query=' @or @attr 7=1 @attr 1=Heading 0 @or @attr 7=1 @attr 1=Heading-Entity 1'.$query if ($sortby eq "HeadingAsc"); $query=' @or @attr 7=2 @attr 1=Heading 0 @or @attr 7=1 @attr 1=Heading-Entity 1'.$query if ($sortby eq "HeadingDsc"); warn $query; @@ -131,13 +156,10 @@ sub authoritysearch { my $i; $oAuth[0]=C4::Context->Zconn("authorityserver" , 1); my $Anewq= new ZOOM::Query::PQF($query,$oAuth[0]); - # $Anewq->sortby("1=Heading i< 1=Heading-Entity i< "); - # $Anewq->sortby("1=Heading i< 1=Heading-Entity i< "); my $oAResult; $oAResult= $oAuth[0]->search($Anewq) ; while (($i = ZOOM::event(\@oAuth)) != 0) { my $ev = $oAuth[$i-1]->last_event(); - # warn("Authority ", $i-1, ": event $ev (", ZOOM::event_str($ev), ")\n"); last if $ev == ZOOM::Event::ZEND; } my($error, $errmsg, $addinfo, $diagset) = $oAuth[0]->error_x(); @@ -157,59 +179,32 @@ sub authoritysearch { ##Find authid and linkid fields ##we may be searching multiple authoritytypes. ## FIXME this assumes that all authid and linkid fields are the same for all authority types - # my ($authidfield,$authidsubfield)=AUTHfind_marc_from_kohafield($dbh,"auth_header.authid",$authtypecode[0]); - # my ($linkidfield,$linkidsubfield)=AUTHfind_marc_from_kohafield($dbh,"auth_header.linkid",$authtypecode[0]); + # my ($authidfield,$authidsubfield)=GetAuthMARCFromKohaField($dbh,"auth_header.authid",$authtypecode[0]); + # my ($linkidfield,$linkidsubfield)=GetAuthMARCFromKohaField($dbh,"auth_header.linkid",$authtypecode[0]); while (($counter < $nbresults) && ($counter < ($offset + $length))) { ##Here we have to extract MARC record and $authid from ZEBRA AUTHORITIES my $rec=$oAResult->record($counter); my $marcdata=$rec->raw(); my $authrecord; - my $linkid; - my @linkids; my $separator=C4::Context->preference('authoritysep'); - my $linksummary=" ".$separator; - - $authrecord = MARC::File::USMARC::decode($marcdata); - + $authrecord = MARC::File::USMARC::decode($marcdata); my $authid=$authrecord->field('001')->data(); - # if ($authrecord->field($linkidfield)){ - # my @fields=$authrecord->field($linkidfield); - # - # # foreach my $field (@fields){ - # # # $linkid=$field->subfield($linkidsubfield) ; - # # # if ($linkid){ ##There is a linked record add fields to produce summary - # # # my $linktype=AUTHfind_authtypecode($dbh,$linkid); - # # # my $linkrecord=AUTHgetauthority($dbh,$linkid); - # # # $linksummary.="
    ".getsummary($dbh,$linkrecord,$linkid,$linktype).".".$separator; - # # # } - # # } - # }# - - my $summary=getsummary($authrecord,$authid,$authtypecode); - # $summary="".$summary."." if ($intranet); - # $summary="".$summary."." if ($intranet); - # if ($linkid && $linksummary ne " ".$separator){ - # $summary="".$summary."".$linksummary; - # } - my $query_auth_tag = "SELECT auth_tag_to_report FROM auth_types WHERE authtypecode=?"; - my $sth = $dbh->prepare($query_auth_tag); - $sth->execute($authtypecode); - my $auth_tag_to_report = $sth->fetchrow; - my %newline; - $newline{summary} = $summary; - $newline{authid} = $authid; - # $newline{linkid} = $linkid; - # $newline{reported_tag} = $reported_tag; - # $newline{used} =0; - # $newline{biblio_fields} = $tags_using_authtype; - $newline{even} = $counter % 2; - $counter++; - push @finalresult, \%newline; + my $summary=BuildSummary($authrecord,$authid,$authtypecode); + my $query_auth_tag = "SELECT auth_tag_to_report FROM auth_types WHERE authtypecode=?"; + my $sth = $dbh->prepare($query_auth_tag); + $sth->execute($authtypecode); + my $auth_tag_to_report = $sth->fetchrow; + my %newline; + $newline{summary} = $summary; + $newline{authid} = $authid; + $newline{even} = $counter % 2; + $counter++; + push @finalresult, \%newline; }## while counter ### for (my $z=0; $z<@finalresult; $z++){ - my $count=AUTHcount_usage($finalresult[$z]{authid}); + my $count=CountUsage($finalresult[$z]{authid}); $finalresult[$z]{used}=$count; }# all $z's @@ -221,7 +216,17 @@ NOLUCK: return (\@finalresult, $nbresults); } -sub AUTHcount_usage { +=head2 CountUsage + +=over 4 + +$count= &CountUsage($authid) +counts Usage of Authid in bibliorecords. + +=back + +=cut +sub CountUsage { my ($authid) = @_; ### try ZOOM search here my $oConnection=C4::Context->Zconn("biblioserver",1); @@ -239,7 +244,32 @@ sub AUTHcount_usage { return ($result); } -sub AUTHfind_authtypecode { +=head2 CountUsageChildren + +=over 4 + +$count= &CountUsageChildren($authid) +counts Usage of narrower terms of Authid in bibliorecords. + +=back + +=cut +sub CountUsageChildren { + my ($authid) = @_; +} + +=head2 GetAuthTypeCode + +=over 4 + +$authtypecode= &GetAuthTypeCode($authid) +returns authtypecode of an authid + +=back + +=cut +sub GetAuthTypeCode { +#AUTHfind_authtypecode my ($authid) = @_; my $dbh=C4::Context->dbh; my $sth = $dbh->prepare("select authtypecode from auth_header where authid=?"); @@ -248,7 +278,33 @@ sub AUTHfind_authtypecode { return $authtypecode; } -sub AUTHgettagslib { +=head2 GetTagsLabels + +=over 4 + +$tagslabel= &GetTagsLabels($forlibrarian,$authtypecode) +returns a ref to hashref of authorities tag and subfield structure. + +tagslabel usage : +$tagslabel->{$tag}->{$subfield}->{'attribute'} +where attribute takes values in : + lib + tab + mandatory + repeatable + authorised_value + authtypecode + value_builder + kohafield + seealso + hidden + isurl + link + +=back + +=cut +sub GetTagsLabels { my ($forlibrarian,$authtypecode)= @_; my $dbh=C4::Context->dbh; $authtypecode="" unless $authtypecode; @@ -318,16 +374,23 @@ ORDER BY tagfield,tagsubfield" return $res; } -sub AUTHaddauthority { +=head2 AddAuthority + +=over 4 + +$authid= &AddAuthority($record, $authid,$authtypecode) +returns authid of the newly created authority + +Either Create Or Modify existing authority. + +=back + +=cut +sub AddAuthority { # pass the MARC::Record to this function, and it will create the records in the authority table my ($record,$authid,$authtypecode) = @_; my $dbh=C4::Context->dbh; my $leader=' a ';##Fixme correct leader as this one just adds utf8 to MARC21 -#substr($leader,8,1)=$leadercode; -# $record->leader($leader); -# my ($authfield,$authidsubfield)=AUTHfind_marc_from_kohafield($dbh,"auth_header.authid",$authtypecode); -# my ($authfield2,$authtypesubfield)=AUTHfind_marc_from_kohafield($dbh,"auth_header.authtypecode",$authtypecode); -# my ($linkidfield,$linkidsubfield)=AUTHfind_marc_from_kohafield($dbh,"auth_header.linkid",$authtypecode); # if authid empty => true add, find a new authid number if (!$authid) { @@ -339,36 +402,92 @@ sub AUTHaddauthority { ##Both authid and authtypecode is expected to be in the same field. Modify if other requirements arise $record->add_fields('001',$authid) unless $record->field('001'); $record->add_fields('152','','','b'=>$authtypecode) unless $record->field('152'); - # $record->add_fields('100','','','b'=>$authtypecode); warn $record->as_formatted; $dbh->do("lock tables auth_header WRITE"); $sth=$dbh->prepare("insert into auth_header (authid,datecreated,authtypecode,marc) values (?,now(),?,?)"); $sth->execute($authid,$authtypecode,$record->as_usmarc); $sth->finish; - }else{ - ##Modified record reinsertid -# my $idfield=$record->field('001'); -# $record->delete_field($idfield); $record->add_fields('001',$authid) unless ($record->field('001')); + $record->add_fields('100',$authid) unless ($record->field('100')); $record->add_fields('152','','','b'=>$authtypecode) unless ($record->field('152')); -# $record->add_fields($authfield,$authid); -# $record->add_fields($authfield2,'','',$authtypesubfield=>$authtypecode); -# warn $record->as_formatted; $dbh->do("lock tables auth_header WRITE"); my $sth=$dbh->prepare("update auth_header set marc=? where authid=?"); $sth->execute($record->as_usmarc,$authid); $sth->finish; - } - $dbh->do("unlock tables"); - ModZebra($authid,'specialUpdate',"authorityserver"); + } + $dbh->do("unlock tables"); + ModZebra($authid,'specialUpdate',"authorityserver"); - return ($authid); + return ($authid); } -sub XMLgetauthority { - # Returns MARC::XML of the authority passed in parameter. +=head2 DelAuthority + +=over 4 + +$authid= &DelAuthority($authid) +Deletes $authid + +=back + +=cut + + +sub DelAuthority { + my ($authid) = @_; + my $dbh=C4::Context->dbh; + + ModZebra($authid,"recordDelete","authorityserver"); + $dbh->do("delete from auth_header where authid=$authid") ; + +} + +sub ModAuthority { + my ($authid,$record,$authtypecode,$merge)=@_; + my $dbh=C4::Context->dbh; + my ($oldrecord)=&GetAuthority($authid); + if ($oldrecord eq $record) { + return; + } + my $sth=$dbh->prepare("update auth_header set marc=? where authid=?"); + #Now rewrite the $record to table with an add + $authid=AddAuthority($record,$authid,$authtypecode); + + +### If a library thinks that updating all biblios is a long process and wishes to leave that to a cron job to use merge_authotities.p +### they should have a system preference "dontmerge=1" otherwise by default biblios will be updated +### the $merge flag is now depreceated and will be removed at code cleaning + if (C4::Context->preference('dontmerge') ){ + # save the file in localfile/modified_authorities + my $cgidir = C4::Context->intranetdir ."/cgi-bin"; + unless (opendir(DIR,"$cgidir")) { + $cgidir = C4::Context->intranetdir."/"; + } + + my $filename = $cgidir."/localfile/modified_authorities/$authid.authid"; + open AUTH, "> $filename"; + print AUTH $authid; + close AUTH; + } else { + &merge($authid,$record,$authid,$record); + } + return $authid; +} + +=head2 GetAuthorityXML + +=over 4 + +$marcxml= &GetAuthorityXML( $authid) +returns xml form of record $authid + +=back + +=cut +sub GetAuthorityXML { + # Returns MARC::XML of the authority passed in parameter. my ( $authid ) = @_; my $dbh=C4::Context->dbh; my $sth = @@ -381,91 +500,58 @@ sub XMLgetauthority { } -sub AUTHgetauthority { -# Returns MARC::Record of the biblio passed in parameter. +=head2 GetAuthority + +=over 4 + +$record= &GetAuthority( $authid) +Returns MARC::Record of the authority passed in parameter. + +=back + +=cut +sub GetAuthority { my ($authid)=@_; my $dbh=C4::Context->dbh; my $sth=$dbh->prepare("select marc from auth_header where authid=?"); $sth->execute($authid); my ($marc) = $sth->fetchrow; my $record=MARC::File::USMARC::decode($marc); - return ($record); } -sub AUTHgetauth_type { - my ($authtypecode) = @_; - my $dbh=C4::Context->dbh; - my $sth=$dbh->prepare("select * from auth_types where authtypecode=?"); - $sth->execute($authtypecode); - return $sth->fetchrow_hashref; -} +=head2 GetAuthType -sub AUTHmodauthority { - my ($authid,$record,$authtypecode,$merge)=@_; - my $dbh=C4::Context->dbh; - my ($oldrecord)=&AUTHgetauthority($authid); - if ($oldrecord eq $record) { - return; - } -my $sth=$dbh->prepare("update auth_header set marc=? where authid=?"); -#warn find if linked records exist and delete them -my($linkidfield,$linkidsubfield)=AUTHfind_marc_from_kohafield("auth_header.linkid",$authtypecode); - -if ($oldrecord->field($linkidfield)){ -my @fields=$oldrecord->field($linkidfield); - foreach my $field (@fields){ -my $linkid=$field->subfield($linkidsubfield) ; - if ($linkid){ - ##Modify the record of linked - my $linkrecord=AUTHgetauthority($linkid); - my $linktypecode=AUTHfind_authtypecode($linkid); - my ( $linkidfield2,$linkidsubfield2)=AUTHfind_marc_from_kohafield("auth_header.linkid",$linktypecode); - my @linkfields=$linkrecord->field($linkidfield2); - foreach my $linkfield (@linkfields){ - if ($linkfield->subfield($linkidsubfield2) eq $authid){ - $linkrecord->delete_field($linkfield); - $sth->execute($linkrecord->as_usmarc,$linkid); - ModZebra($linkid,'specialUpdate',"authorityserver"); - } - }#foreach linkfield - } - }#foreach linkid -} -#Now rewrite the $record to table with an add -$authid=AUTHaddauthority($record,$authid,$authtypecode); +=over 4 +$result= &GetAuthType( $authtypecode) +If $authtypecode is not "" then + Returns hashref to authtypecode information +else + returns ref to array of hashref information of all Authtypes -### If a library thinks that updating all biblios is a long process and wishes to leave that to a cron job to use merge_authotities.p -### they should have a system preference "dontmerge=1" otherwise by default biblios will be updated -### the $merge flag is now depreceated and will be removed at code cleaning +=back -if (C4::Context->preference('dontmerge') ){ -# save the file in localfile/modified_authorities - my $cgidir = C4::Context->intranetdir ."/cgi-bin"; - unless (opendir(DIR,"$cgidir")) { - $cgidir = C4::Context->intranetdir."/"; +=cut +sub GetAuthType { + my ($authtypecode) = @_; + my $dbh=C4::Context->dbh; + my $sth; + if ($authtypecode){ + $sth=$dbh->prepare("select * from auth_types where authtypecode=?"); + $sth->execute($authtypecode); + } else { + $sth=$dbh->prepare("select * from auth_types"); + $sth->execute; + } + my $res=$sth->fetchall_arrayref({}); + if (scalar(@$res)==1){ + return $res->[0]; + } else { + return $res; } - - my $filename = $cgidir."/localfile/modified_authorities/$authid.authid"; - open AUTH, "> $filename"; - print AUTH $authid; - close AUTH; -} else { - &merge($authid,$record,$authid,$record); -} -return $authid; } -sub AUTHdelauthority { - my ($authid,$keep_biblio) = @_; - my $dbh=C4::Context->dbh; -# if the keep_biblio is set to 1, then authority entries in biblio are preserved. - -ModZebra($authid,"recordDelete","authorityserver"); - $dbh->do("delete from auth_header where authid=$authid") ; - -} sub AUTHhtml2marc { my ($rtags,$rsubfields,$rvalues,%indicators) = @_; @@ -514,8 +600,20 @@ sub AUTHhtml2marc { return $record; } +=head2 FindDuplicateAuthority + +=over 4 + +$record= &FindDuplicateAuthority( $record, $authtypecode) +return $authid,Summary if duplicate is found. + +Comments : an improvement would be to return All the records that match. -sub FindDuplicate { +=back + +=cut + +sub FindDuplicateAuthority { my ($record,$authtypecode)=@_; # warn "IN for ".$record->as_formatted; @@ -525,139 +623,160 @@ sub FindDuplicate { $sth->execute($authtypecode); my ($auth_tag_to_report) = $sth->fetchrow; $sth->finish; -# warn "record :".$record->as_formatted." authtattoreport :$auth_tag_to_report"; - # build a request for authoritysearch +# warn "record :".$record->as_formatted." auth_tag_to_report :$auth_tag_to_report"; + # build a request for SearchAuthorities my $query='at='.$authtypecode.' '; map {$query.= " and he=\"".$_->[1]."\"" if ($_->[0]=~/[A-z]/)} $record->field($auth_tag_to_report)->subfields() if $record->field($auth_tag_to_report); my ($error,$results)=SimpleSearch($query,"authorityserver"); # there is at least 1 result => return the 1st one if (@$results>0) { my $marcrecord = MARC::File::USMARC::decode($results->[0]); - return $marcrecord->field('001')->data,getsummary($marcrecord,$marcrecord->field('001')->data,$authtypecode); + return $marcrecord->field('001')->data,BuildSummary($marcrecord,$marcrecord->field('001')->data,$authtypecode); } # no result, returns nothing return; } -sub getsummary{ -## give this a Marc record to return summary -my ($record,$authid,$authtypecode)=@_; - -my $dbh=C4::Context->dbh; -# my $authtypecode = AUTHfind_authtypecode($dbh,$authid); - my $authref = getauthtype($authtypecode); - my $summary = $authref->{summary}; - my @fields = $record->fields(); -# chop $tags_using_authtype; # FIXME: why commented out? - my $reported_tag; - - # if the library has a summary defined, use it. Otherwise, build a standard one - if ($summary) { - my @fields = $record->fields(); -# $reported_tag = '$9'.$result[$counter]; - foreach my $field (@fields) { - my $tag = $field->tag(); - my $tagvalue = $field->as_string(); - $summary =~ s/\[(.?.?.?.?)$tag\*(.*?)]/$1$tagvalue$2\[$1$tag$2]/g; - if ($tag<10) { - if ($tag eq '001') { - $reported_tag.='$3'.$field->data(); - } +=head2 BuildSummary - } else { - my @subf = $field->subfields; - for my $i (0..$#subf) { - my $subfieldcode = $subf[$i][0]; - my $subfieldvalue = $subf[$i][1]; - my $tagsubf = $tag.$subfieldcode; - $summary =~ s/\[(.?.?.?.?)$tagsubf(.*?)]/$1$subfieldvalue$2\[$1$tagsubf$2]/g; -# if ($tag eq $auth_tag_to_report) { -# $reported_tag.='$'.$subfieldcode.$subfieldvalue; -# } - } - } - } - $summary =~ s/\[(.*?)]//g; - $summary =~ s/\n/
/g; - } else { - my $heading; # = $authref->{summary}; - my $altheading; - my $seeheading; - my $see; - my @fields = $record->fields(); - if (C4::Context->preference('marcflavour') eq 'UNIMARC') { - # construct UNIMARC summary, that is quite different from MARC21 one - # accepted form - foreach my $field ($record->field('2..')) { - $heading.= $field->as_string(); - } - # rejected form(s) - foreach my $field ($record->field('4..')) { - $summary.= "   ".$field->as_string()."
"; - $summary.= "      see: ".$heading."
"; - } - # see : - foreach my $field ($record->field('5..')) { - $summary.= "   ".$field->as_string()."
"; - $summary.= "      see: ".$heading."
"; - } - # // form - foreach my $field ($record->field('7..')) { - $seeheading.= "      see also: ".$field->as_string()."
"; - $altheading.= "   ".$field->as_string()."
"; - $altheading.= "      see also: ".$heading."
"; - } - $summary = "".$heading."
".$seeheading.$altheading.$summary; - } else { - # construct MARC21 summary - foreach my $field ($record->field('1..')) { - if ($record->field('100')) { - $heading.= $field->as_string('abcdefghjklmnopqrstvxyz68'); - } elsif ($record->field('110')) { - $heading.= $field->as_string('abcdefghklmnoprstvxyz68'); - } elsif ($record->field('111')) { - $heading.= $field->as_string('acdefghklnpqstvxyz68'); - } elsif ($record->field('130')) { - $heading.= $field->as_string('adfghklmnoprstvxyz68'); - } elsif ($record->field('148')) { - $heading.= $field->as_string('abvxyz68'); - } elsif ($record->field('150')) { - # $heading.= $field->as_string('abvxyz68'); - $heading.= $field->as_formatted(); - my $tag=$field->tag(); - $heading=~s /^$tag//g; - $heading =~s /\_/\$/g; - } elsif ($record->field('151')) { - $heading.= $field->as_string('avxyz68'); - } elsif ($record->field('155')) { - $heading.= $field->as_string('abvxyz68'); - } elsif ($record->field('180')) { - $heading.= $field->as_string('vxyz68'); - } elsif ($record->field('181')) { - $heading.= $field->as_string('vxyz68'); - } elsif ($record->field('182')) { - $heading.= $field->as_string('vxyz68'); - } elsif ($record->field('185')) { - $heading.= $field->as_string('vxyz68'); - } else { - $heading.= $field->as_string(); - } - } #See From - foreach my $field ($record->field('4..')) { - $seeheading.= "   ".$field->as_string()."
"; - $seeheading.= "      see: ".$seeheading."
"; - } #See Also - foreach my $field ($record->field('5..')) { - $altheading.= "      see also: ".$field->as_string()."
"; - $altheading.= "   ".$field->as_string()."
"; - $altheading.= "      see also: ".$altheading."
"; - } - $summary.=$heading.$seeheading.$altheading; - } +=over 4 + +$text= &BuildSummary( $record, $authid, $authtypecode) +return HTML encoded Summary + +Comment : authtypecode can be infered from both record and authid. +Moreover, authid can also be inferred from $record. +Would it be interesting to delete those things. + +=back + +=cut + +sub BuildSummary{ +## give this a Marc record to return summary + my ($record,$authid,$authtypecode)=@_; + my $dbh=C4::Context->dbh; + my $authref = GetAuthType($authtypecode); + my $summary = $authref->{summary}; + my @fields = $record->fields(); + my $reported_tag; + # if the library has a summary defined, use it. Otherwise, build a standard one + if ($summary) { + my @fields = $record->fields(); + # $reported_tag = '$9'.$result[$counter]; + foreach my $field (@fields) { + my $tag = $field->tag(); + my $tagvalue = $field->as_string(); + $summary =~ s/\[(.?.?.?.?)$tag\*(.*?)]/$1$tagvalue$2\[$1$tag$2]/g; + if ($tag<10) { + if ($tag eq '001') { + $reported_tag.='$3'.$field->data(); + } + } else { + my @subf = $field->subfields; + for my $i (0..$#subf) { + my $subfieldcode = $subf[$i][0]; + my $subfieldvalue = $subf[$i][1]; + my $tagsubf = $tag.$subfieldcode; + $summary =~ s/\[(.?.?.?.?)$tagsubf(.*?)]/$1$subfieldvalue$2\[$1$tagsubf$2]/g; } + } + } + $summary =~ s/\[(.*?)]//g; + $summary =~ s/\n/
/g; + } else { + my $heading; # = $authref->{summary}; + my $altheading; + my $seeheading; + my $see; + my @fields = $record->fields(); + if (C4::Context->preference('marcflavour') eq 'UNIMARC') { + # construct UNIMARC summary, that is quite different from MARC21 one + # accepted form + foreach my $field ($record->field('2..')) { + $heading.= $field->as_string(); + } + # rejected form(s) + foreach my $field ($record->field('4..')) { + $summary.= "   ".$field->as_string()."
"; + $summary.= "      see: ".$heading."
"; + } + # see : + foreach my $field ($record->field('5..')) { + $summary.= "   ".$field->as_string()."
"; + $summary.= "      see: ".$heading."
"; + } + # // form + foreach my $field ($record->field('7..')) { + $seeheading.= "      see also: ".$field->as_string()."
"; + $altheading.= "   ".$field->as_string()."
"; + $altheading.= "      see also: ".$heading."
"; + } + $summary = "".$heading."
".$seeheading.$altheading.$summary; + } else { + # construct MARC21 summary + foreach my $field ($record->field('1..')) { + if ($record->field('100')) { + $heading.= $field->as_string('abcdefghjklmnopqrstvxyz68'); + } elsif ($record->field('110')) { + $heading.= $field->as_string('abcdefghklmnoprstvxyz68'); + } elsif ($record->field('111')) { + $heading.= $field->as_string('acdefghklnpqstvxyz68'); + } elsif ($record->field('130')) { + $heading.= $field->as_string('adfghklmnoprstvxyz68'); + } elsif ($record->field('148')) { + $heading.= $field->as_string('abvxyz68'); + } elsif ($record->field('150')) { + # $heading.= $field->as_string('abvxyz68'); + $heading.= $field->as_formatted(); + my $tag=$field->tag(); + $heading=~s /^$tag//g; + $heading =~s /\_/\$/g; + } elsif ($record->field('151')) { + $heading.= $field->as_string('avxyz68'); + } elsif ($record->field('155')) { + $heading.= $field->as_string('abvxyz68'); + } elsif ($record->field('180')) { + $heading.= $field->as_string('vxyz68'); + } elsif ($record->field('181')) { + $heading.= $field->as_string('vxyz68'); + } elsif ($record->field('182')) { + $heading.= $field->as_string('vxyz68'); + } elsif ($record->field('185')) { + $heading.= $field->as_string('vxyz68'); + } else { + $heading.= $field->as_string(); + } + } #See From + foreach my $field ($record->field('4..')) { + $seeheading.= "   ".$field->as_string()."
"; + $seeheading.= "      see: ".$seeheading."
"; + } #See Also + foreach my $field ($record->field('5..')) { + $altheading.= "      see also: ".$field->as_string()."
"; + $altheading.= "   ".$field->as_string()."
"; + $altheading.= "      see also: ".$altheading."
"; + } + $summary.=$heading.$seeheading.$altheading; + } + } return $summary; } +=head2 BuildUnimarcHierarchies + +=over 4 + +$text= &BuildUnimarcHierarchies( $authid, $force) +return text containing trees for hierarchies +for them to be stored in auth_header + +Example of text: +122,1314,2452;1324,2342,3,2452 + +=back + +=cut sub BuildUnimarcHierarchies{ my $authid = shift @_; # warn "authid : $authid"; @@ -665,18 +784,17 @@ sub BuildUnimarcHierarchies{ my @globalresult; my $dbh=C4::Context->dbh; my $hierarchies; - my $data = AUTHgetheader($authid); - + my $data = GetHeaderAuthority($authid); if ($data->{'authtrees'} and not $force){ return $data->{'authtrees'}; } elsif ($data->{'authtrees'}){ $hierarchies=$data->{'authtrees'}; } else { - my $record = AUTHgetauthority($authid); + my $record = GetAuthority($authid); my $found; foreach my $field ($record->field('550')){ if ($field->subfield('5') && $field->subfield('5') eq 'g'){ - my $parentrecord = AUTHgetauthority($field->subfield('3')); + my $parentrecord = GetAuthority($field->subfield('3')); my $localresult=$hierarchies; my $trees; $trees = BuildUnimarcHierarchies($field->subfield('3')); @@ -697,75 +815,128 @@ sub BuildUnimarcHierarchies{ #Unless there is no ancestor, I am alone. $hierarchies="$authid" unless ($hierarchies); } - AUTHsavetrees($authid,$hierarchies); + AddAuthorityTrees($authid,$hierarchies); return $hierarchies; } +=head2 BuildUnimarcHierarchy + +=over 4 + +$ref= &BuildUnimarcHierarchy( $record, $class,$authid) +return a hashref in order to display hierarchy for record and final Authid $authid + +"loopparents" +"loopchildren" +"class" +"loopauthid" +"current_value" +"value" + +"ifparents" +"ifchildren" +Those two latest ones should disappear soon. + +=back + +=cut sub BuildUnimarcHierarchy{ - my $record = shift @_; - my $class = shift @_; - my $authid_constructed = shift @_; - my $authid=$record->subfield('250','3'); - my %cell; - my $parents=""; my $children=""; - my (@loopparents,@loopchildren); - foreach my $field ($record->field('550')){ - if ($field->subfield('5') && $field->subfield('a')){ - if ($field->subfield('5') eq 'h'){ - push @loopchildren, { "childauthid"=>$field->subfield('3'),"childvalue"=>$field->subfield('a')}; - }elsif ($field->subfield('5') eq 'g'){ - push @loopparents, { "parentauthid"=>$field->subfield('3'),"parentvalue"=>$field->subfield('a')}; - } - # brothers could get in there with an else - } - } - $cell{"ifparents"}=1 if (scalar(@loopparents)>0); - $cell{"ifchildren"}=1 if (scalar(@loopchildren)>0); - $cell{"loopparents"}=\@loopparents if (scalar(@loopparents)>0); - $cell{"loopchildren"}=\@loopchildren if (scalar(@loopchildren)>0); - $cell{"class"}=$class; - $cell{"loopauthid"}=$authid; - $cell{"current_value"} =1 if $authid eq $authid_constructed; - $cell{"value"}=$record->subfield('250',"a"); - return \%cell; + my $record = shift @_; + my $class = shift @_; + my $authid_constructed = shift @_; + my $authid=$record->subfield('250','3'); + my %cell; + my $parents=""; my $children=""; + my (@loopparents,@loopchildren); + foreach my $field ($record->field('550')){ + if ($field->subfield('5') && $field->subfield('a')){ + if ($field->subfield('5') eq 'h'){ + push @loopchildren, { "childauthid"=>$field->subfield('3'),"childvalue"=>$field->subfield('a')}; + }elsif ($field->subfield('5') eq 'g'){ + push @loopparents, { "parentauthid"=>$field->subfield('3'),"parentvalue"=>$field->subfield('a')}; + } + # brothers could get in there with an else + } + } + $cell{"ifparents"}=1 if (scalar(@loopparents)>0); + $cell{"ifchildren"}=1 if (scalar(@loopchildren)>0); + $cell{"loopparents"}=\@loopparents if (scalar(@loopparents)>0); + $cell{"loopchildren"}=\@loopchildren if (scalar(@loopchildren)>0); + $cell{"class"}=$class; + $cell{"loopauthid"}=$authid; + $cell{"current_value"} =1 if $authid eq $authid_constructed; + $cell{"value"}=$record->subfield('250',"a"); + return \%cell; } -sub AUTHgetheader{ - my $authid = shift @_; - my $sql= "SELECT * from auth_header WHERE authid = ?"; - my $dbh=C4::Context->dbh; - my $rq= $dbh->prepare($sql); - $rq->execute($authid); - my $data= $rq->fetchrow_hashref; - return $data; +=head2 GetHeaderAuthority + +=over 4 + +$ref= &GetHeaderAuthority( $authid) +return a hashref in order auth_header table data + +=back + +=cut +sub GetHeaderAuthority{ + my $authid = shift @_; + my $sql= "SELECT * from auth_header WHERE authid = ?"; + my $dbh=C4::Context->dbh; + my $rq= $dbh->prepare($sql); + $rq->execute($authid); + my $data= $rq->fetchrow_hashref; + return $data; } -sub AUTHsavetrees{ - my $authid = shift @_; - my $trees = shift @_; - my $sql= "UPDATE IGNORE auth_header set authtrees=? WHERE authid = ?"; - my $dbh=C4::Context->dbh; - my $rq= $dbh->prepare($sql); - $rq->execute($trees,$authid); +=head2 AddAuthorityTrees + +=over 4 + +$ref= &AddAuthorityTrees( $authid, $trees) +return success or failure + +=back + +=cut + +sub AddAuthorityTrees{ + my $authid = shift @_; + my $trees = shift @_; + my $sql= "UPDATE IGNORE auth_header set authtrees=? WHERE authid = ?"; + my $dbh=C4::Context->dbh; + my $rq= $dbh->prepare($sql); + return $rq->execute($trees,$authid); } +=head2 merge + +=over 4 + +$ref= &merge(mergefrom,$MARCfrom,$mergeto,$MARCto) + + +Could add some feature : Migrating from a typecode to an other for instance. +Then we should add some new parameter : bibliotargettag, authtargettag + +=back + +=cut sub merge { my ($mergefrom,$MARCfrom,$mergeto,$MARCto) = @_; my $dbh=C4::Context->dbh; - my $authtypecodefrom = AUTHfind_authtypecode($mergefrom); - my $authtypecodeto = AUTHfind_authtypecode($mergeto); + my $authtypecodefrom = GetAuthTypeCode($mergefrom); + my $authtypecodeto = GetAuthTypeCode($mergeto); # return if authority does not exist my @X = $MARCfrom->fields(); return if $#X == -1; @X = $MARCto->fields(); return if $#X == -1; - - # search the tag to report my $sth = $dbh->prepare("select auth_tag_to_report from auth_types where authtypecode=?"); $sth->execute($authtypecodefrom); my ($auth_tag_to_report) = $sth->fetchrow; - + my @record_to; @record_to = $MARCto->field($auth_tag_to_report)->subfields() if $MARCto->field($auth_tag_to_report); my @record_from; @@ -774,59 +945,102 @@ sub merge { # search all biblio tags using this authority. $sth = $dbh->prepare("select distinct tagfield from marc_subfield_structure where authtypecode=?"); $sth->execute($authtypecodefrom); -my @tags_using_authtype; + my @tags_using_authtype; while (my ($tagfield) = $sth->fetchrow) { push @tags_using_authtype,$tagfield."9" ; } - # now, find every biblio using this authority -### try ZOOM search here -my $oConnection=C4::Context->Zconn("biblioserver"); -my $query; -$query= "an= ".$mergefrom; -my $oResult = $oConnection->search(new ZOOM::Query::CCL2RPN( $query, $oConnection )); -my $count=$oResult->size() if ($oResult); -my @reccache; -my $z=0; -while ( $z<$count ) { -my $rec; - $rec=$oResult->record($z); - my $marcdata = $rec->raw(); -push @reccache, $marcdata; -$z++; -} -$oResult->destroy(); -foreach my $marc(@reccache){ - -my $update; + # now, find every biblio using this authority + my $oConnection=C4::Context->Zconn("biblioserver"); + my $query; + $query= "an= ".$mergefrom; + my $oResult = $oConnection->search(new ZOOM::Query::CCL2RPN( $query, $oConnection )); + my $count=$oResult->size() if ($oResult); + my @reccache; + my $z=0; + while ( $z<$count ) { + my $rec; + $rec=$oResult->record($z); + my $marcdata = $rec->raw(); + push @reccache, $marcdata; + $z++; + } + $oResult->destroy(); + foreach my $marc(@reccache){ + my $update; my $marcrecord; $marcrecord = MARC::File::USMARC::decode($marc); foreach my $tagfield (@tags_using_authtype){ - $tagfield=substr($tagfield,0,3); - my @tags = $marcrecord->field($tagfield); - foreach my $tag (@tags){ - my $tagsubs=$tag->subfield("9"); -#warn "$tagfield:$tagsubs:$mergefrom"; - if ($tagsubs== $mergefrom) { - - $tag->update("9" =>$mergeto); - foreach my $subfield (@record_to) { -# warn "$subfield,$subfield->[0],$subfield->[1]"; + $tagfield=substr($tagfield,0,3); + my @tags = $marcrecord->field($tagfield); + foreach my $tag (@tags){ + my $tagsubs=$tag->subfield("9"); + #warn "$tagfield:$tagsubs:$mergefrom"; + if ($tagsubs== $mergefrom) { + $tag->update("9" =>$mergeto); + foreach my $subfield (@record_to) { + # warn "$subfield,$subfield->[0],$subfield->[1]"; $tag->update($subfield->[0] =>$subfield->[1]); - }#for $subfield + }#for $subfield } - $marcrecord->delete_field($tag); - $marcrecord->add_fields($tag); + $marcrecord->delete_field($tag); + $marcrecord->add_fields($tag); $update=1; - }#for each tag + }#for each tag }#foreach tagfield - my $oldbiblio = TransformMarcToKoha($dbh,$marcrecord,"") ; - if ($update==1){ - # FIXME : this NEWmodbiblio does not exist anymore... - &ModBiblio($marcrecord,$oldbiblio->{'biblionumber'},GetFrameworkCode($oldbiblio->{'biblionumber'})) ; - } - -}#foreach $marc + my $oldbiblio = TransformMarcToKoha($dbh,$marcrecord,"") ; + if ($update==1){ + &ModBiblio($marcrecord,$oldbiblio->{'biblionumber'},GetFrameworkCode($oldbiblio->{'biblionumber'})) ; + } + + }#foreach $marc + # now, find every other authority linked with this authority +# my $oConnection=C4::Context->Zconn("authorityserver"); +# my $query; +# # att 9210 Auth-Internal-authtype +# # att 9220 Auth-Internal-LN +# # ccl.properties to add for authorities +# $query= "= ".$mergefrom; +# my $oResult = $oConnection->search(new ZOOM::Query::CCL2RPN( $query, $oConnection )); +# my $count=$oResult->size() if ($oResult); +# my @reccache; +# my $z=0; +# while ( $z<$count ) { +# my $rec; +# $rec=$oResult->record($z); +# my $marcdata = $rec->raw(); +# push @reccache, $marcdata; +# $z++; +# } +# $oResult->destroy(); +# foreach my $marc(@reccache){ +# my $update; +# my $marcrecord; +# $marcrecord = MARC::File::USMARC::decode($marc); +# foreach my $tagfield (@tags_using_authtype){ +# $tagfield=substr($tagfield,0,3); +# my @tags = $marcrecord->field($tagfield); +# foreach my $tag (@tags){ +# my $tagsubs=$tag->subfield("9"); +# #warn "$tagfield:$tagsubs:$mergefrom"; +# if ($tagsubs== $mergefrom) { +# $tag->update("9" =>$mergeto); +# foreach my $subfield (@record_to) { +# # warn "$subfield,$subfield->[0],$subfield->[1]"; +# $tag->update($subfield->[0] =>$subfield->[1]); +# }#for $subfield +# } +# $marcrecord->delete_field($tag); +# $marcrecord->add_fields($tag); +# $update=1; +# }#for each tag +# }#foreach tagfield +# my $authoritynumber = TransformMarcToKoha($dbh,$marcrecord,"") ; +# if ($update==1){ +# &ModAuthority($marcrecord,$authoritynumber,GetAuthTypeCode($authoritynumber)) ; +# } +# +# }#foreach $marc }#sub END { } # module clean-up code here (global destructor) @@ -842,6 +1056,9 @@ Paul POULAIN paul.poulain@free.fr # $Id$ # $Log$ +# Revision 1.45 2007/04/06 14:48:45 hdl +# Code Cleaning : AuthoritiesMARC. +# # Revision 1.44 2007/04/05 12:17:55 btoumi # add "sort by" with heading-entity in authorities search # @@ -908,7 +1125,7 @@ Paul POULAIN paul.poulain@free.fr # # Revision 1.28.2.17 2007/02/05 13:16:08 hdl # Removing Link from AuthoritiesMARC summary (caused a problem owed to the API differences between opac and intranet) -# + removing $dbh in authoritysearch +# + removing $dbh in SearchAuthorities # + adding links in templates on summaries to go to full view. # (no more links in popup authorities. or should we add it ?) # @@ -928,7 +1145,7 @@ Paul POULAIN paul.poulain@free.fr # Using search for an= for an authority-Number. # # Revision 1.28.2.12 2007/01/09 13:51:31 hdl -# Bug Fixing : AUTHcount_usage used *synchronous* connection where biblio used ****asynchronous**** one. +# Bug Fixing : CountUsage used *synchronous* connection where biblio used ****asynchronous**** one. # First try to get it work. # # Revision 1.28.2.11 2007/01/05 14:37:26 btoumi diff --git a/authorities/auth_finder.pl b/authorities/auth_finder.pl index 2efb1fe856..0a17d51439 100755 --- a/authorities/auth_finder.pl +++ b/authorities/auth_finder.pl @@ -64,7 +64,7 @@ if ($op eq "do_search") { $resultsperpage= $query->param('resultsperpage'); $resultsperpage = 19 if(!defined $resultsperpage); - my ($results,$total) = authoritysearch(\@marclist,\@and_or, + my ($results,$total) = SearchAuthorities(\@marclist,\@and_or, \@excluding, \@operator, \@value, $startfrom*$resultsperpage, $resultsperpage,$authtypecode);# $orderby); diff --git a/authorities/authorities-home.pl b/authorities/authorities-home.pl index 8043e66f4b..c68001ae1b 100755 --- a/authorities/authorities-home.pl +++ b/authorities/authorities-home.pl @@ -62,7 +62,7 @@ if ($op eq "do_search") { my $startfrom = $query->param('startfrom') || 1; my $resultsperpage = $query->param('resultsperpage') || 19; - my ($results,$total) = authoritysearch( + my ($results,$total) = SearchAuthorities( \@marclist, \@and_or, \@excluding, @@ -146,7 +146,7 @@ if ($op eq "do_search") { } elsif ($op eq "delete") { - &AUTHdelauthority($authid, 1); + &DelAuthority($authid, 1); ($template, $loggedinuser, $cookie) = get_template_and_user({template_name => "authorities/authorities-home.tmpl", diff --git a/authorities/authorities.pl b/authorities/authorities.pl index 085a964866..6b1d86f01c 100755 --- a/authorities/authorities.pl +++ b/authorities/authorities.pl @@ -349,7 +349,7 @@ my $linkid=$input->param('linkid'); my $authtypecode = $input->param('authtypecode'); my $dbh = C4::Context->dbh; -$authtypecode = &AUTHfind_authtypecode($authid) if !$authtypecode; +$authtypecode = &GetAuthTypeCode($authid) if !$authtypecode; my ($template, $loggedinuser, $cookie) @@ -361,17 +361,17 @@ my ($template, $loggedinuser, $cookie) debug => 1, }); $template->param(nonav => $nonav,index=>$myindex,authtypecode=>$authtypecode,); -$tagslib = AUTHgettagslib(1,$authtypecode); +$tagslib = GetTagsLabels(1,$authtypecode); my $record=-1; my $encoding=""; -$record = AUTHgetauthority($authid) if ($authid); +$record = GetAuthority($authid) if ($authid); my ($oldauthnumtagfield,$oldauthnumtagsubfield); my ($oldauthtypetagfield,$oldauthtypetagsubfield); $is_a_modif=0; if ($authid) { - $is_a_modif=1; - ($oldauthnumtagfield,$oldauthnumtagsubfield) = &AUTHfind_marc_from_kohafield("auth_header.authid",$authtypecode); - ($oldauthtypetagfield,$oldauthtypetagsubfield) = &AUTHfind_marc_from_kohafield("auth_header.authtypecode",$authtypecode); + $is_a_modif=1; + ($oldauthnumtagfield,$oldauthnumtagsubfield) = &GetAuthMARCFromKohaField("auth_header.authid",$authtypecode); + ($oldauthtypetagfield,$oldauthtypetagsubfield) = &GetAuthMARCFromKohaField("auth_header.authtypecode",$authtypecode); } #------------------------------------------------------------------------------------------------------------------------------ @@ -387,39 +387,32 @@ if ($op eq "add") { my @indicator = $input->param('indicator'); my $xml = TransformHtmlToXml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag); # warn $record->as_formatted; - warn $xml; +# warn $xml; my $record=MARC::Record->new_from_xml($xml,'UTF-8',(C4::Context->preference("marcflavour") eq "UNIMARC"?"UNIMARCAUTH":C4::Context->preference("marcflavour"))); $record->encoding('UTF-8'); #warn $record->as_formatted; # check for a duplicate - my ($duplicateauthid,$duplicateauthvalue) = C4::AuthoritiesMarc::FindDuplicate($record,$authtypecode) if ($op eq "add") && (!$is_a_modif); + my ($duplicateauthid,$duplicateauthvalue) = FindDuplicateAuthority($record,$authtypecode) if ($op eq "add") && (!$is_a_modif); warn "duplicate:$duplicateauthid,$duplicateauthvalue"; my $confirm_not_duplicate = $input->param('confirm_not_duplicate'); # it is not a duplicate (determined either by Koha itself or by user checking it's not a duplicate) if (!$duplicateauthid or $confirm_not_duplicate) { # warn "noduplicate"; - if ($is_a_modif ) { - $authid=AUTHmodauthority($authid,$record,$authtypecode,1); - } else { - ($authid) = AUTHaddauthority($record,$authid,$authtypecode); - - } - # now, redirect to detail page -# if ($nonav){ -#warn ($myindex,$nonav); -# print $input->redirect("auth_finder.pl?index=$myindex&nonav=$nonav&authtypecode=$authtypecode"); -# }else{ - print $input->redirect("detail.pl?authid=$authid"); -# } - exit; + if ($is_a_modif ) { + $authid=ModAuthority($authid,$record,$authtypecode,1); + } else { + ($authid) = AddAuthority($record,$authid,$authtypecode); + } + print $input->redirect("detail.pl?authid=$authid"); + exit; } else { # it may be a duplicate, warn the user and do nothing - build_tabs ($template, $record, $dbh,$encoding); - build_hidden_data; - $template->param(authid =>$authid, - duplicateauthid => $duplicateauthid, - duplicateauthvalue => $duplicateauthvalue, - ); + build_tabs ($template, $record, $dbh,$encoding); + build_hidden_data; + $template->param(authid =>$authid, + duplicateauthid => $duplicateauthid, + duplicateauthvalue => $duplicateauthvalue, + ); } #------------------------------------------------------------------------------------------------------------------------------ } elsif ($op eq "addfield") { @@ -441,7 +434,7 @@ warn "duplicate:$duplicateauthid,$duplicateauthvalue"; build_tabs ($template, $record, $dbh,$encoding); build_hidden_data; $template->param( - authid => $authid,); + authid => $authid,); } elsif ($op eq "delete") { #------------------------------------------------------------------------------------------------------------------------------ @@ -464,11 +457,6 @@ if ($op eq "duplicate") authid => $authid , authtypecode=>$authtypecode, ); } -#unless ($op) { -# warn "BUILDING"; -# build_tabs ($template, $record, $dbh,$encoding); -# build_hidden_data; -#} $template->param( authid => $authid, authtypecode => $authtypecode, diff --git a/authorities/blinddetail-biblio-search.pl b/authorities/blinddetail-biblio-search.pl index 504a6985db..a468d1bdc1 100755 --- a/authorities/blinddetail-biblio-search.pl +++ b/authorities/blinddetail-biblio-search.pl @@ -57,13 +57,13 @@ my $dbh=C4::Context->dbh; my $authid = $query->param('authid'); my $index = $query->param('index'); my $tagid = $query->param('tagid'); -my $authtypecode = &AUTHfind_authtypecode($authid); -my $tagslib = &AUTHgettagslib(1,$authtypecode); +my $authtypecode = &GetAuthTypeCode($authid); +my $tagslib = &GetTagsLabels(1,$authtypecode); -my $auth_type = AUTHgetauth_type($authtypecode); +my $auth_type = GetAuthType($authtypecode); warn "XX = ".$auth_type->{auth_tag_to_report}; -my $record =AUTHgetauthority($authid); +my $record =GetAuthority($authid); warn "record auth :".$record->as_formatted; # open template my ($template, $loggedinuser, $cookie) @@ -80,67 +80,56 @@ my @loop_data =(); my $tag; my @loop_data =(); if ($authid) { - foreach my $field ($record->field($auth_type->{auth_tag_to_report})) { - my @subfields_data; - my @subf=$field->subfields; - # loop through each subfield - my %result; - for my $i (0..$#subf) { - $subf[$i][0] = "@" unless $subf[$i][0]; - $result{$subf[$i][0]}.=$subf[$i][1]."|"; - } - foreach (keys %result) { - my %subfield_data; - chop $result{$_}; - $subfield_data{marc_value}=$result{$_}; - $subfield_data{marc_subfield}=$_; + foreach my $field ($record->field($auth_type->{auth_tag_to_report})) { + my @subfields_data; + my @subf=$field->subfields; + # loop through each subfield + my %result; + for my $i (0..$#subf) { + $subf[$i][0] = "@" unless $subf[$i][0]; + $result{$subf[$i][0]}.=$subf[$i][1]."|"; + } + foreach (keys %result) { + my %subfield_data; + chop $result{$_}; + $subfield_data{marc_value}=$result{$_}; + $subfield_data{marc_subfield}=$_; # $subfield_data{marc_tag}=$field->tag(); - push(@subfields_data, \%subfield_data); - } - if ($#subfields_data>=0) { - my %tag_data; - $tag_data{tag}=$field->tag().' -'. $tagslib->{$field->tag()}->{lib}; - $tag_data{subfield} = \@subfields_data; - push (@loop_data, \%tag_data); - } - } + push(@subfields_data, \%subfield_data); + } + if ($#subfields_data>=0) { + my %tag_data; + $tag_data{tag}=$field->tag().' -'. $tagslib->{$field->tag()}->{lib}; + $tag_data{subfield} = \@subfields_data; + push (@loop_data, \%tag_data); + } + } } else { # authid is empty => the user want to empty the entry. - my @subfields_data; - foreach my $subfield ('a'..'z') { - my %subfield_data; - $subfield_data{marc_value}=''; - $subfield_data{marc_subfield}=$subfield; - push(@subfields_data, \%subfield_data); - } + my @subfields_data; + foreach my $subfield ('a'..'z') { + my %subfield_data; + $subfield_data{marc_value}=''; + $subfield_data{marc_subfield}=$subfield; + push(@subfields_data, \%subfield_data); + } # if ($#subfields_data>=0) { - my %tag_data; + my %tag_data; # $tag_data{tag}=$field->tag().' -'. $tagslib->{$field->tag()}->{lib}; - $tag_data{subfield} = \@subfields_data; - push (@loop_data, \%tag_data); + $tag_data{subfield} = \@subfields_data; + push (@loop_data, \%tag_data); # } } $template->param("0XX" =>\@loop_data); -# my $authtypes = getauthtypes; -# my @authtypesloop; -# foreach my $thisauthtype (keys %$authtypes) { -# my $selected = 1 if $thisauthtype eq $authtypecode; -# my %row =(value => $thisauthtype, -# selected => $selected, -# authtypetext => $authtypes->{$thisauthtype}{'authtypetext'}, -# ); -# push @authtypesloop, \%row; -# } $template->param(authid => $authid?$authid:"", -# authtypesloop => \@authtypesloop, - index => $index, - tagid => $tagid, - intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), - intranetstylesheet => C4::Context->preference("intranetstylesheet"), - IntranetNav => C4::Context->preference("IntranetNav"), - ); + index => $index, + tagid => $tagid, + intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), + intranetstylesheet => C4::Context->preference("intranetstylesheet"), + IntranetNav => C4::Context->preference("IntranetNav"), + ); output_html_with_http_headers $query, $cookie, $template->output; diff --git a/authorities/detail-biblio-search.pl b/authorities/detail-biblio-search.pl index edb2eb273c..dda7144c64 100755 --- a/authorities/detail-biblio-search.pl +++ b/authorities/detail-biblio-search.pl @@ -58,10 +58,10 @@ my $dbh=C4::Context->dbh; my $authid = $query->param('authid'); my $index = $query->param('index'); -my $authtypecode = &AUTHfind_authtypecode($dbh,$authid); -my $tagslib = &AUTHgettagslib($dbh,1,$authtypecode); +my $authtypecode = &GetAuthTypeCode($authid); +my $tagslib = &GetTagsLabels(1,$authtypecode); -my $record =AUTHgetauthority($dbh,$authid); +my $record =GetAuthority($authid); # open template my ($template, $loggedinuser, $cookie) = get_template_and_user({template_name => "authorities/detail-biblio-search.tmpl", @@ -119,52 +119,6 @@ my $tag; } } $template->param("0XX" =>\@loop_data); -# } -# now, build item tab ! -# the main difference is that datas are in lines and not in columns : thus, we build the first, then the values... -# loop through each tag -# warning : we may have differents number of columns in each row. Thus, we first build a hash, complete it if necessary -# then construct template. -# my @fields = $record->fields(); -# my %witness; #---- stores the list of subfields used at least once, with the "meaning" of the code -# my @big_array; -# foreach my $field (@fields) { -# next if ($field->tag()<10); -# my @subf=$field->subfields; -# my %this_row; -# # loop through each subfield -# for my $i (0..$#subf) { -# next if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{tab} ne 10); -# $witness{$subf[$i][0]} = $tagslib->{$field->tag()}->{$subf[$i][0]}->{lib}; -# $this_row{$subf[$i][0]} =$subf[$i][1]; -# } -# if (%this_row) { -# push(@big_array, \%this_row); -# } -# } -# #fill big_row with missing datas -# foreach my $subfield_code (keys(%witness)) { -# for (my $i=0;$i<=$#big_array;$i++) { -# $big_array[$i]{$subfield_code}=" " unless ($big_array[$i]{$subfield_code}); -# } -# } -# # now, construct template ! -# my @item_value_loop; -# my @header_value_loop; -# for (my $i=0;$i<=$#big_array; $i++) { -# my $items_data; -# foreach my $subfield_code (keys(%witness)) { -# $items_data .="".$big_array[$i]{$subfield_code}.""; -# } -# my %row_data; -# $row_data{item_value} = $items_data; -# push(@item_value_loop,\%row_data); -# } -# foreach my $subfield_code (keys(%witness)) { -# my %header_value; -# $header_value{header_value} = $witness{$subfield_code}; -# push(@header_value_loop, \%header_value); -# } my $authtypes = getauthtypes; my @authtypesloop; diff --git a/authorities/detail.pl b/authorities/detail.pl index 2a46444689..8e96b6cc3b 100755 --- a/authorities/detail.pl +++ b/authorities/detail.pl @@ -19,7 +19,7 @@ =head1 NAME -etail.pl : script to show an authority in MARC format +detail.pl : script to show an authority in MARC format =head1 SYNOPSIS @@ -70,8 +70,8 @@ my $authid = $query->param('authid'); -my $authtypecode = &AUTHfind_authtypecode($authid); -my $tagslib = &AUTHgettagslib(1,$authtypecode); +my $authtypecode = &GetAuthTypeCode($authid); +my $tagslib = &GetTagsLabels(1,$authtypecode); my $record; if (C4::Context->preference("AuthDisplayHierarchy")){ @@ -85,8 +85,8 @@ if (C4::Context->preference("AuthDisplayHierarchy")){ my $cnt=0; my @loophierarchy; foreach my $element (@tree){ - my %cell; - my $elementdata = AUTHgetauthority($element); + my $cell; + my $elementdata = GetAuthority($element); $record= $elementdata if ($authid==$element); push @loophierarchy, BuildUnimarcHierarchy($elementdata,"child".$cnt, $authid); $cnt++; @@ -98,9 +98,9 @@ if (C4::Context->preference("AuthDisplayHierarchy")){ 'loophierarchies' =>\@loophierarchies, ); } else { - $record=AUTHgetauthority($authid); + $record=GetAuthority($authid); } -my $count = AUTHcount_usage($authid); +my $count = CountUsage($authid); # find the marc field/subfield used in biblio by this authority my $sth = $dbh->prepare("select distinct tagfield from marc_subfield_structure where authtypecode=?"); diff --git a/opac/opac-authorities-home.pl b/opac/opac-authorities-home.pl index 5fb1471b46..a7fa351983 100755 --- a/opac/opac-authorities-home.pl +++ b/opac/opac-authorities-home.pl @@ -67,7 +67,7 @@ if ( $op eq "do_search" ) { $resultsperpage = 19 if ( !defined $resultsperpage ); my @tags; my ( $results, $total, @fields ) = - authoritysearch( \@marclist, \@and_or, \@excluding, \@operator, + SearchAuthorities( \@marclist, \@and_or, \@excluding, \@operator, \@value, $startfrom * $resultsperpage, $resultsperpage, $authtypecode ); ( $template, $loggedinuser, $cookie ) = get_template_and_user( @@ -147,7 +147,7 @@ if ( $op eq "do_search" ) { } elsif ( $op eq "delete" ) { - &AUTHdelauthority( $authid, 1 ); + &DelAuthority( $authid, 1 ); ( $template, $loggedinuser, $cookie ) = get_template_and_user( { diff --git a/opac/opac-authoritiesdetail.pl b/opac/opac-authoritiesdetail.pl index 1c0a2ef504..6094eb1c2c 100755 --- a/opac/opac-authoritiesdetail.pl +++ b/opac/opac-authoritiesdetail.pl @@ -55,7 +55,7 @@ my $dbh = C4::Context->dbh; my $authid = $query->param('authid'); my $authtypecode = &AUTHfind_authtypecode( $authid ); -my $tagslib = &AUTHgettagslib( 1, $authtypecode ); +my $tagslib = &GetTagsLabels( 1, $authtypecode ); # open template my ( $template, $loggedinuser, $cookie ) = get_template_and_user( @@ -88,7 +88,7 @@ if ( C4::Context->preference("AuthDisplayHierarchy") ) { # warn "tree :$element"; my %cell; - my $elementdata = AUTHgetauthority( $element ); + my $elementdata = GetAuthority( $element ); $record = $elementdata if ( $authid == $element ); push @loophierarchy, BuildUnimarcHierarchy( $elementdata, "child" . $cnt, $authid ); @@ -103,9 +103,9 @@ if ( C4::Context->preference("AuthDisplayHierarchy") ) { } } else { - $record = AUTHgetauthority( $authid ); + $record = GetAuthority( $authid ); } -my $count = AUTHcount_usage($authid); +my $count = CountUsage($authid); # find the marc field/subfield used in biblio by this authority my $sth = diff --git a/opac/opac-main.pl b/opac/opac-main.pl index 72327164e4..6c1b59fd87 100755 --- a/opac/opac-main.pl +++ b/opac/opac-main.pl @@ -104,5 +104,9 @@ $template->param( $template->param( 'Disable_Dictionary' => C4::Context->preference("Disable_Dictionary") ) if ( C4::Context->preference("Disable_Dictionary") ); +$template->param( + 'OpacAuthorities' => 1 ); +$template->param( + 'OpacCloud' => 1 ); output_html_with_http_headers $input, $cookie, $template->output;