Bug 6933 [REVISED] Add a view of titles with a particular tag to the staff client
authorOwen Leonard <oleonard@myacpl.org>
Wed, 28 Sep 2011 16:44:26 +0000 (12:44 -0400)
committerPaul Poulain <paul.poulain@biblibre.com>
Thu, 2 Feb 2012 08:46:01 +0000 (09:46 +0100)
- Adds a new page to the tags moderation section for viewing all the
  titles tagged with a particular term.
- Adds display of approved tags to the catalog detail page matching the opac
  view. Adding tags from the detail view not implemented.

Follow-up adds tags display to XSLT detail view

Areas for improvement:

- I think it would be better to show "Also tagged with:" and exclude
  the current tag from the list of titles tagged with a particular tag.
- It would be nice to be able to show unapproved tags (and some idication of
  their status) along with approved tags on the detail page if the user had
  TagsModeration permission.

Signed-off-by: Nicole C. Engard <nengard@bywatersolutions.com>
Signed-off-by: Paul Poulain <paul.poulain@biblibre.com>

catalogue/detail.pl
koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt
koha-tmpl/intranet-tmpl/prog/en/modules/tags/list.tt [new file with mode: 0644]
koha-tmpl/intranet-tmpl/prog/en/modules/tags/review.tt
tags/list.pl [new file with mode: 0755]

index fcf1f2b..db38551 100755 (executable)
@@ -35,6 +35,7 @@ use C4::Serials;
 use C4::XISBN qw(get_xisbns get_biblionumber_from_isbn);
 use C4::External::Amazon;
 use C4::Search;                # enabled_staff_search_views
+use C4::Tags qw(get_tags);
 use C4::VirtualShelves;
 use C4::XSLT;
 use C4::Images;
@@ -395,4 +396,16 @@ if (C4::Context->preference('OPACBaseURL')){
      $template->param( OpacUrl => C4::Context->preference('OPACBaseURL') );
 }
 
+# Displaying tags
+
+my $tag_quantity;
+if (C4::Context->preference('TagsEnabled') and $tag_quantity = C4::Context->preference('TagsShowOnDetail')) {
+    $template->param(
+        TagsEnabled => 1,
+        TagsShowOnDetail => $tag_quantity
+    );
+    $template->param(TagLoop => get_tags({biblionumber=>$biblionumber, approved=>1,
+                                'sort'=>'-weight', limit=>$tag_quantity}));
+}
+
 output_html_with_http_headers $query, $cookie, $template->output;
index 38a26c9..80e04a9 100644 (file)
@@ -102,6 +102,18 @@ function verify_images() {
             [% END %]
             </span>
         [% END %]
+        [% IF ( TagsEnabled &&  TagsShowOnDetail &&  TagLoop ) %]
+                <span class="results_summary"><span class="label">Tags:</span>
+                    [% FOREACH TagLoo IN TagLoop %]
+                        [% IF ( CAN_user_tools_moderate_tags ) %]
+                        <a href="/cgi-bin/koha/tags/list.pl?tag=[% TagLoo.term |url %]">[% TagLoo.term |html %]</a>
+                        [% ELSE %]
+                        [% TagLoo.term |html %]
+                        [% END %]
+                        <span class="weight">([% TagLoo.weight_total %])</span>[% IF ( loop.last ) %][% ELSE %], [% END %]
+                    [% END %]
+                    </span>
+        [% END %]
         [% IF ( holdcount ) %]<span class="results_summary"><span class="label">Holds:</span> <span class="holdcount"><a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% biblionumber %]">[% holdcount %]</a></span></span>[% ELSE %][% END %]
 
         [% IF ( AmazonEnabled ) %][% IF ( AmazonCoverImages ) %]</div><div class="yui-u" id="bookcoverimg">
@@ -220,9 +232,24 @@ function verify_images() {
                </ul>
                </li>
         [% END %]
+        [% IF ( TagsEnabled &&  TagsShowOnDetail &&  TagLoop ) %]
+                <li><strong>Tags:</strong>
+                    <ul id="tagslist">
+                    [% FOREACH TagLoo IN TagLoop %]
+                        <li>
+                        [% IF ( CAN_user_tools_moderate_tags ) %]
+                        <a href="/cgi-bin/koha/tags/list.pl?tag=[% TagLoo.term |url %]">[% TagLoo.term |html %]</a>
+                        [% ELSE %]
+                        [% TagLoo.term |html %]
+                        [% END %]
+                        <span class="weight">([% TagLoo.weight_total %])</span>[% IF ( loop.last ) %][% ELSE %], [% END %]</li>
+                    [% END %]
+                    </ul></li>
+        [% END %]
             [% IF ( holdcount ) %]<li><strong>Holds:</strong> <span class="holdcount"><a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% biblionumber %]">[% holdcount %]</a></span></li>[% ELSE %][% END %]
         </ul>
                [% END %]
+
 </div>
 </div>
 <div id="bibliodetails" class="toptabs">
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tags/list.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/tags/list.tt
new file mode 100644 (file)
index 0000000..05fd452
--- /dev/null
@@ -0,0 +1,103 @@
+[% INCLUDE 'doc-head-open.inc' %]
+<title>Koha &rsaquo; Tools &rsaquo; Tags &rsaquo; [% IF ( do_it ) %]Review &rsaquo; [% ELSE %]Review Tags[% END %]</title>
+[% INCLUDE 'doc-head-close.inc' %]
+<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.tablesorter.min.js"></script>
+<script type="text/javascript">
+//<![CDATA[
+    $.tablesorter.addParser({
+        id: 'articles',
+        is: function(s) {return false;  },
+        format: function(s) { return s.toLowerCase().replace(/^(the|an|a) /,''); },
+        type: 'text'
+    });
+    $(document).ready(function() {
+        $(".delete").click(function (event) {
+            $(this).parent().parent().parent().addClass("selected");
+            var answer = confirm(_("Are you sure you want to remove the tag from this title?"));
+                if (!answer){
+                    $("tr").removeClass("selected");
+                    event.preventDefault();
+                }
+        });
+        $("#itemst").tablesorter({
+            sortList: [[0,0]],
+            headers: { 0: { sorter: 'articles' },1: { sorter: false },2:{sorter:false}}
+        });
+    });
+//]]>
+</script>
+<style type="text/css">
+tr.selected { background-color : #FFFFCC; } tr.selected td { background-color : transparent; }</style>
+</head>
+<body>
+[% INCLUDE 'header.inc' %]
+[% INCLUDE 'cat-search.inc' %]
+
+<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a> &rsaquo; <a href="/cgi-bin/koha/tags/review.pl">Tags</a> &rsaquo; Results for tag <i>[% tag %]</i></div>
+
+<div id="doc3" class="yui-t2">
+ <div id="bd">
+  <div id="yui-main">
+  <div class="yui-b">
+[% IF ( titles ) %]
+<h3>Titles tagged with the term <i>[% tag %]</i></h3>
+<table id="itemst">
+       <thead><tr>
+           <th>Title</th>
+           <th>Location</th>
+           <th>&nbsp;</th>
+        </tr></thead>
+
+        [% FOREACH title IN titles %]
+            [% IF ( title.even ) %]
+                <tr class="highlight">
+            [% ELSE %]
+                <tr>
+            [% END %]
+            <td>[% INCLUDE 'biblio-default-view.inc' biblionumber = title.biblionumber %][% title.title |html %][% FOREACH subtitl IN title.subtitle %] [% subtitl.subfield %][% END %]</a>
+            [% title.author %]
+            <p>[% IF ( title.publishercode ) %]- [% title.publishercode|html %]
+            [% IF ( title.place ) %] [% title.place %][% END %][% END %]
+            [% IF ( title.pages ) %] - [% title.pages %][% IF ( title.size ) %] [% title.size %]
+            [% END %]
+            [% END %]</p>
+            [% IF ( title.notes ) %]
+            <p>[% title.notes |html%]</p>[% END %]
+            [% IF ( title.TagLoop ) %]<p style="font-size:90%"><strong>Tagged with:</strong> [% FOREACH TagLoo IN title.TagLoop %]
+            <a href="/cgi-bin/koha/tags/list.pl?tag=[% TagLoo.term %]">[% TagLoo.term |html %]</a> <span class="weight">([% TagLoo.weight_total %])</span>[% IF ( loop.last ) %][% ELSE %], [% END %]
+            [% END %]</p>
+            [% END %]
+            </td>
+            <td>[% IF ( title.items ) %]<ul style="font-size:80%">[% FOREACH item IN title.items %]
+                <li>
+                    [% item.branchname %] [% item.location_description %]
+                    [% IF ( item.itemcallnumber ) %]
+                        ([% item.itemcallnumber %])
+                    [% END %]
+                </li>
+                [% END %]</ul>[% ELSE %]This record has no items.[% END %]
+             </td>
+             <td><form method="post" action="/cgi-bin/koha/tags/list.pl"><input type="hidden" name="op" value="del" /><input type="hidden" name="tag" value="[% tag %]" /><input type="hidden" name="tag_id" value="[% title.tag_id %]" /><input type="submit" class="delete" value="Remove tag" /></form></td>
+            </tr>
+        [% END %]
+    </table>
+[% ELSE %]
+       <div class="dialog message">There are no titles tagged with the term <i>[% tag %]</i></div>
+[% END %]
+</form>
+ </div>
+ </div>
+ <div class="yui-b">
+  <ul>
+    <li><a href="/cgi-bin/koha/tags/review.pl?approved=1">Approved tags</a>
+    </li>
+    <li><a href="/cgi-bin/koha/tags/review.pl?approved=-1">Rejected tags</a>
+    </li>
+    <li><a href="/cgi-bin/koha/tags/review.pl?approved=0">Pending tags</a>
+    </li>
+    <li><a href="/cgi-bin/koha/tags/review.pl?approved=all">All tags</a>
+    </li>
+  </ul>
+ </div>
+</div>
+[% INCLUDE 'intranet-bottom.inc' %]
\ No newline at end of file
index 5d025af..843f7ca 100644 (file)
@@ -217,7 +217,7 @@ td input,td input[type="submit"] { font-size: 85%; padding: 1px; }
                [% ELSE %]<td class="pending">
                [% END %]
            </td>
-           <td>[% tagloo.term %]
+           <td><a href="/cgi-bin/koha/tags/list.pl?tag=[% tagloo.term %]">[% tagloo.term %]</a>
            </td>
                <td>[% tagloo.weight_total %]
            </td>
diff --git a/tags/list.pl b/tags/list.pl
new file mode 100755 (executable)
index 0000000..7b16ce5
--- /dev/null
@@ -0,0 +1,81 @@
+#!/usr/bin/perl
+
+# Copyright 2011 Athens County Public Libraries
+#
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+use warnings;
+use strict;
+use CGI;
+
+use C4::Auth qw(:DEFAULT check_cookie_auth);
+use C4::Biblio;
+use C4::Context;
+use C4::Dates qw(format_date);
+use C4::Items;
+use C4::Koha;
+use C4::Tags 0.03 qw(get_tags remove_tag get_tag_rows);
+use C4::Output;
+
+my $needed_flags = { tools => 'moderate_tags' }; # FIXME: replace when more specific permission is created.
+
+my $query        = CGI->new;
+my $op           = $query->param('op') || '';
+my $biblionumber = $query->param('biblionumber');
+my $tag          = $query->param('tag');
+my $tag_id       = $query->param('tag_id');
+
+my ($template, $borrowernumber, $cookie) = get_template_and_user({
+        template_name => "tags/list.tmpl",
+        query => $query,
+        type => "intranet",
+        debug => 1,
+        authnotrequired => 0,
+        flagsrequired => $needed_flags,
+});
+
+if( $op eq "del" ){
+        remove_tag($tag_id);
+        print $query->redirect("/cgi-bin/koha/tags/list.pl?tag=$tag");
+} else {
+
+my $marcflavour = C4::Context->preference('marcflavour');
+my @results;
+
+if ($tag) {
+        my $taglist = get_tag_rows({term=>$tag});
+        for ( @{$taglist} ) {
+        my $dat                 = &GetBiblioData($_->{biblionumber});
+        my $record              = &GetMarcBiblio($_->{biblionumber});
+        $dat->{'subtitle'}      = GetRecordValue('subtitle', $record, GetFrameworkCode($_->{biblionumber}));
+        my @items               = GetItemsInfo( $_->{biblionumber} );
+        $dat->{biblionumber}    = $_->{biblionumber};
+        $dat->{tag_id}          = $_->{tag_id};
+        $dat->{items}           = \@items;
+        $dat->{TagLoop}         = get_tags({biblionumber=>$_->{biblionumber}, 'sort'=>'-weight',limit=>10 });
+        push( @results, $dat );
+    }
+
+my $resultsarray = \@results;
+
+$template->param(
+    tag => $tag,
+    titles => $resultsarray,
+);
+}
+}
+
+output_html_with_http_headers $query, $cookie, $template->output;