[Koha-patches] [PATCH] [PATCH][3.2][Replace Previous] (bug #1578) Add the (quasi)full COinS(Zotero) support

Nahuel ANGELINETTI nahuel at biblibre.com
Thu Jan 8 11:40:08 CET 2009


A mistake was is in this patch, i'll resend it in a couple of minutes.

Le Thu,  8 Jan 2009 11:38:01 +0100,
Nahuel ANGELINETTI <nahuel.angelinetti at biblibre.com> a écrit :

> this patch do a lot of things :
>  * Add the function GetCOinSBiblio in C4::Biblio, return the COinS
> value that must be put in a span title This will be usefull for
> OpenURL support.
> 
>  * Replace the span in opac-detail, and put the var get from
> GetCOinSBiblio
>  * Fix an <img> tag that wasn't autoclosed
>  * Add the COinS in search result
>  * Full COinS support of UNIMARC, the MARC21 support should be
> improved to provide all kind of document types ---
>  C4/Biblio.pm                                       |  118
> ++++++++++++++++++++ .../opac-tmpl/prog/en/modules/opac-detail.tmpl
> |   15 ++- .../opac-tmpl/prog/en/modules/opac-results.tmpl    |    6
> +- opac/opac-detail.pl                                |    7 +-
>  opac/opac-search.pl                                |    2 +
>  5 files changed, 135 insertions(+), 13 deletions(-)
> 
> diff --git a/C4/Biblio.pm b/C4/Biblio.pm
> index d8d5dfe..9f1c228 100644
> --- a/C4/Biblio.pm
> +++ b/C4/Biblio.pm
> @@ -62,6 +62,7 @@ BEGIN {
>  		GetMarcUrls
>  		&GetUsedMarcStructure
>  		&GetXmlBiblio
> +        &GetCOinSBiblio
>  
>  		&GetAuthorisedValueDesc
>  		&GetMarcStructure
> @@ -884,6 +885,123 @@ sub GetXmlBiblio {
>      return $marcxml;
>  }
>  
> +=head2 GetCOinSBiblio
> +
> +=over 4
> +
> +my $coins = GetCOinSBiblio($biblionumber);
> +
> +Returns the COinS(a span) which can be included in a biblio record
> +
> +=back
> +
> +=cut
> +
> +sub GetCOinSBiblio {
> +    my ( $biblionumber ) = @_;
> +    my $record = GetMarcBiblio($biblionumber);
> +
> +    # get the coin format
> +    my $pos7 = substr $record->leader(), 7,1;
> +    my $pos6 = substr $record->leader(), 6,1;
> +    my $mtx;
> +    my $genre;
> +    my ($aulast, $aufirst) = ('','');
> +    my $oauthors;
> +    my $title;
> +    my $pubyear;
> +    my $isbn;
> +    my $issn;
> +    my $publisher;
> +
> +    if ( C4::Context->preference("marcflavour") eq "UNIMARC" ){
> +        my $fmts6;
> +        my $fmts7;
> +        %$fmts6 = (
> +                    'a' => 'book',
> +                    'b' => 'manuscript',
> +                    'c' => 'book',
> +                    'd' => 'manuscript',
> +                    'e' => 'map',
> +                    'f' => 'map',
> +                    'g' => 'film',
> +                    'i' => 'audioRecording',
> +                    'j' => 'audioRecording',
> +                    'k' => 'artwork',
> +                    'l' => 'document',
> +                    'm' => 'computerProgram',
> +                    'r' => 'document',
> +
> +                );
> +        %$fmts7 = (
> +                    'a' => 'journalArticle',
> +                    's' => 'journal',
> +                );
> +
> +        $genre =  $fmts6->{$pos6} ? $fmts6->{$pos6} : 'book' ;
> +
> +        if( $genre eq 'book' ){
> +            $genre =  $fmts7->{$pos7} if $fmts7->{$pos7};
> +        }
> +
> +        ##### We must transform mtx to a valable mtx and document
> type ####
> +        if( $genre eq 'book' ){
> +            $mtx = 'book';
> +        }elsif( $genre eq 'journal' ){
> +            $mtx = 'journal';
> +        }elsif( $genre eq 'journalArticle' ){
> +            $mtx = 'journal';
> +            $genre = 'article';
> +        }else{
> +            $mtx = 'dc';
> +        }
> +
> +        $genre = ($mtx eq 'dc') ? "&amp;rft.type=$genre" :
> "&amp;rft.genre=$genre"; +
> +        # Setting datas
> +        $aulast     = $record->subfield('700','a');
> +        $aufirst    = $record->subfield('700','b');
> +        $oauthors   = "&amp;rft.au=$aufirst $aulast";
> +        # others authors
> +        if($record->field('200')){
> +            for my $au ($record->field('200')->subfield('g')){
> +                $oauthors .= "&amp;rft.au=$au";
> +            }
> +        }
> +        $title      = ( $mtx eq 'dc' ) ?
> "&amp;rft.title=".$record->subfield('200','a') :
> +
> "&amp;rft.title=".$record->subfield('200','a')."&amp;rft.btitle=".$record->subfield('200','a');
> +        $pubyear    = $record->subfield('210','d');
> +        $publisher  = $record->subfield('210','c');
> +        $isbn       = $record->subfield('010','a');
> +        $issn       = $record->subfield('011','a');
> +    }else{
> +        # MARC21 need some improve
> +        my $fmts;
> +        $mtx = 'book';
> +        $genre = "&amp;rft.genre=book";
> +
> +        # Setting datas
> +        $oauthors .= "&amp;rft.au=".$record->subfield('100','a');
> +        # others authors
> +        if($record->field('700')){
> +            for my $au ($record->field('700')->subfield('a')){
> +                $oauthors .= "&amp;rft.au=$au";
> +            }
> +        }
> +        $title      =
> "&amp;rft.btitle=".$record->subfield('245','a');
> +        $pubyear    = $record->subfield('260','c') or "";
> +        $publisher  = $record->subfield('260','b') or "";
> +        $isbn       = $record->subfield('020','a') or "";
> +        $issn       = $record->subfield('022','a') or "";
> +
> +    }
> +    my $coins_value =
> "ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3A$mtx$genre$title&amp;rft.isbn=$isbn&amp;rft.issn=$issn&amp;rft.aulast=$aulast&amp;rft.aufirst=$aufirst$oauthors&amp;rft.pub=$publisher&amp;rft.date=$pubyear";
> +    $coins_value =~ s/(\ |&[^a])/\+/g;
> +    #<!-- TMPL_VAR NAME="ocoins_format" -->&amp;rft.au=<!-- TMPL_VAR
> NAME="author" -->&amp;rft.btitle=<!-- TMPL_VAR NAME="title"
> -->&amp;rft.date=<!-- TMPL_VAR NAME="publicationyear"
> -->&amp;rft.pages=<!-- TMPL_VAR NAME="pages" -->&amp;rft.isbn=<!--
> TMPL_VAR NAME=amazonisbn -->&amp;rft.aucorp=&amp;rft.place=<!--
> TMPL_VAR NAME="place" -->&amp;rft.pub=<!-- TMPL_VAR
> NAME="publishercode" -->&amp;rft.edition=<!-- TMPL_VAR NAME="edition"
> -->&amp;rft.series=<!-- TMPL_VAR NAME="series" -->&amp;rft.genre=" +
> +    return $coins_value;
> +}
> +
>  =head2 GetAuthorisedValueDesc
>  
>  =over 4
> diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl
> b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl index
> 45a9780..5130653 100644 ---
> a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl +++
> b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl @@ -113,11
> +113,14 @@ 
>      <!-- TMPL_IF NAME="pages" --><span class="results_summary"><span
> class="label">Physical details:</span> <!-- TMPL_VAR NAME="pages" -->
> <!-- TMPL_VAR NAME="illus" --> <!-- TMPL_VAR NAME="size"
> --></span><!-- /TMPL_IF --> <!-- COinS / OpenURL -->
> -    <!-- TMPL_IF NAME="ocoins_format" -->
> -    <span class="Z3988"
> title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3A<!--
> TMPL_VAR NAME="ocoins_format" -->&amp;rft.au=<!-- TMPL_VAR
> NAME="author" -->&amp;rft.btitle=<!-- TMPL_VAR NAME="title"
> -->&amp;rft.date=<!-- TMPL_VAR NAME="publicationyear"
> -->&amp;rft.pages=<!-- TMPL_VAR NAME="pages" -->&amp;rft.isbn=<!--
> TMPL_VAR NAME=amazonisbn -->&amp;rft.aucorp=&amp;rft.place=<!--
> TMPL_VAR NAME="place" -->&amp;rft.pub=<!-- TMPL_VAR
> NAME="publishercode" -->&amp;rft.edition=<!-- TMPL_VAR NAME="edition"
> -->&amp;rft.series=<!-- TMPL_VAR NAME="series"
> -->&amp;rft.genre="></span><!-- /TMPL_IF -->
> -    <!-- TMPL_IF name="isbn" -->
> -    <!-- unAPI <abbr/> tag -->
> -    <span class="results_summary"><span class="label">ISBN:
> </span><abbr class="unapi-id" title="koha:isbn:<!-- TMPL_VAR
> NAME="isbn" -->"><!-- TMPL_VAR NAME="isbn"
> --></abbr></span><!-- /TMPL_IF -->
> +    <!-- TMPL_IF NAME="ocoins" -->
> +    <span class="Z3988" title="<!-- TMPL_VAR NAME="ocoins"
> -->"></span>
> +    <!-- TMPL_ELSE -->
> +        <!-- TMPL_IF name="isbn" -->
> +            <!-- unAPI <abbr/> tag -->
> +            <span class="results_summary"><span class="label">ISBN:
> </span><abbr class="unapi-id" title="koha:isbn:<!-- TMPL_VAR
> NAME="isbn" -->"><!-- TMPL_VAR NAME="isbn" --></abbr></span>
> +        <!-- /TMPL_IF -->
> +    <!-- /TMPL_IF -->
>      <!-- TMPL_IF name="issn" -->
>      <span class="results_summary"><span
> class="label">ISSN:</span><!-- TMPL_VAR NAME="issn" --></span>
> <!-- /TMPL_IF --> @@ -152,7 +155,7 @@
>      <!-- TMPL_IF name="copyrightdate" -->
>      <span class="results_summary"><span class="label">Year :
> </span><!-- TMPL_VAR NAME="copyrightdate" --></span> <!-- /TMPL_IF -->
> -    <!-- TMPL_UNLESS NAME="item-level_itypes" --><img src="<!--
> TMPL_VAR NAME="imageurl" -->" alt="<!-- TMPL_VAR NAME="description"
> -->" title="<!-- TMPL_VAR NAME="description" -->">
> +    <!-- TMPL_UNLESS NAME="item-level_itypes" --><img src="<!--
> TMPL_VAR NAME="imageurl" -->" alt="<!-- TMPL_VAR NAME="description"
> -->" title="<!-- TMPL_VAR NAME="description" -->" /> <span
> class="results_summary"><span class="label">Item type : </span> <!--
> TMPL_IF name="description" --> <!-- TMPL_VAR NAME="description" -->
> diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl
> b/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl index
> d23a64f..9647f0c 100644 ---
> a/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl +++
> b/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl @@ -203,6
> +203,10 @@ $(document).ready(function(){ <!-- /TMPL_IF --> 
>  				<td>
> +                <!-- TMPL_IF NAME="coins" -->
> +                    <!-- COinS / OpenURL --><span class="Z3988"
> title="<!-- TMPL_VAR NAME="coins" -->">aaa</span>
> +                <!-- /TMPL_IF -->
> +
>  				<!-- TMPL_IF
> NAME="XSLTResultsDisplay" --> <!-- TMPL_VAR NAME="XSLTResultsRecord"
> --> <!-- TMPL_ELSE -->
> @@ -223,7 +227,7 @@ $(document).ready(function(){
>                          <!-- TMPL_IF name="size" --> <!-- TMPL_VAR
> name="size" --><!-- /TMPL_IF --> <!-- TMPL_IF name="timestamp" -->
> <i>(modified on <!-- TMPL_VAR name="timestamp" -->)</i><!-- /TMPL_IF
> --> </span>
> -                <!-- TMPL_IF NAME="copyrightdate" --><span
> class="results_summary"><span class="label">Date:</span><!-- TMPL_VAR
> NAME="copyrightdate" --></span><!-- COinS / OpenURL --><span
> class="Z3988"
> title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.au=<!--
> TMPL_VAR NAME="author_nospan" -->&amp;rft.btitle=<!-- TMPL_VAR
> NAME="title_nospan" ESCAPE="url" -->&amp;rft.date=<!-- TMPL_VAR
> NAME="publicationyear" -->&amp;rft.tpages=<!-- TMPL_VAR NAME="size"
> -->&amp;rft.isbn=<!-- TMPL_VAR NAME="isbn"  ESCAPE="url"
> -->&amp;rft.aucorp=&amp;rft.place=<!-- TMPL_VAR NAME="place"
> -->&amp;rft.pub=<!-- TMPL_VAR NAME="publisher" ESCAPE="url"
> -->&amp;rft.edition=<!-- TMPL_VAR NAME="edition"
> -->&amp;rft.series=<!-- TMPL_VAR NAME="series"
> -->&amp;rft.genre="></span><!-- /TMPL_IF -->
> +                <!-- TMPL_IF NAME="copyrightdate" --><span
> class="results_summary"><span class="label">Date:</span><!-- TMPL_VAR
> NAME="copyrightdate" --></span><!-- /TMPL_IF --> <span
> class="results_summary"> <span class="label">Availability:</span>
> diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl
> index de61ce3..794dea7 100755
> --- a/opac/opac-detail.pl
> +++ b/opac/opac-detail.pl
> @@ -188,13 +188,8 @@ foreach ( keys %{$dat} ) {
>  }
>  
>  # COinS format FIXME: for books Only
> -my $coins_format;
> -my $fmt = substr $record->leader(), 6,2;
> -my $fmts;
> -$fmts->{'am'} = 'book';
> -$coins_format = $fmts->{$fmt};
>  $template->param(
> -	ocoins_format => $coins_format,
> +    ocoins => GetCOinSBiblio($biblionumber),
>  );
>  
>  my $reviews = getreviews( $biblionumber, 1 );
> diff --git a/opac/opac-search.pl b/opac/opac-search.pl
> index e5e916d..13c3b59 100755
> --- a/opac/opac-search.pl
> +++ b/opac/opac-search.pl
> @@ -370,6 +370,7 @@ my $total; # the total results for the whole set
>  my $facets; # this object stores the faceted results that display on
> the left-hand of the results page my @results_array;
>  my $results_hashref;
> +my @coins;
>  
>  if ($tag) {
>  	my $taglist = get_tags({term=>$tag, approved=>1});
> @@ -432,6 +433,7 @@ for (my $i=0;$i<=@servers;$i++) {
>  			}
>  		}
>  		foreach (@newresults) {
> +            $_->{coins} = GetCOinSBiblio($_->{'biblionumber'});
>  			my $clean = $_->{isbn} or next;
>  			unless (
>  				$clean =~ /\b(\d{13})\b/ or



More information about the Koha-patches mailing list