[Koha-patches] [PATCH] BZ4104: Removes tagging in staff client

matthias.meusburger at biblibre.com matthias.meusburger at biblibre.com
Mon Feb 8 13:46:32 CET 2010


From: Matthias Meusburger <matthias.meusburger at biblibre.com>

---
 .../prog/en/includes/doc-head-close.inc            |    1 -
 koha-tmpl/intranet-tmpl/prog/en/js/tags.js         |  158 ----------
 .../prog/en/modules/basket/basket.tmpl             |   80 +-----
 tags/tags.pl                                       |  327 --------------------
 4 files changed, 3 insertions(+), 563 deletions(-)
 delete mode 100644 koha-tmpl/intranet-tmpl/prog/en/js/tags.js
 delete mode 100755 tags/tags.pl

diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc
index d4c7846..845ceeb 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc
+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc
@@ -43,7 +43,6 @@
 <!-- TMPL_IF NAME="js_page" -->
     <script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/js/pages/<!-- TMPL_VAR NAME="js_page" -->"></script>
 <!-- /TMPL_IF -->
-<script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/js/tags.js"></script>
 
 <!-- TMPL_IF NAME="js_widgets" -->
     <!-- TMPL_LOOP NAME="js_widgets" -->
diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/tags.js b/koha-tmpl/intranet-tmpl/prog/en/js/tags.js
deleted file mode 100644
index 9c117d0..0000000
--- a/koha-tmpl/intranet-tmpl/prog/en/js/tags.js
+++ /dev/null
@@ -1,158 +0,0 @@
-if (typeof KOHA == "undefined" || !KOHA) {
-    var KOHA = {};
-}
-
-/**
-* A namespace for Tags related functions.
-* readCookie is expected to already be declared.  That's why the assignment below is unscoped.
-* readCookie should be from basket.js or undefined.
-
-$.ajaxSetup({
-	url: "/cgi-bin/koha/tags/tags.pl",
-	type: "POST",
-	dataType: "script"
-});
-*/
-if (typeof(readCookie) == "undefined") {
-	readCookie = function (name) { // from http://www.quirksmode.org/js/cookies.html
-		var nameEQ = name + "=";
-		var ca = document.cookie.split(';');
-		for (var i=0;i < ca.length;i++) {
-			var c = ca[i];
-			while (c.charAt(0)==' '){ c = c.substring(1,c.length); }
-			if (c.indexOf(nameEQ) == 0){ return c.substring(nameEQ.length,c.length); }
-		}
-		return null;
-	}
-}
-KOHA.Tags = {
-	add_tag_button: function(){
-		var mybibnum = $(this).attr("title");
-		var mynewtag = "newtag" + mybibnum;
-		var mytagid = "#" + mynewtag;
-		var mydata = {CGISESSID: readCookie('CGISESSID')};	// Someday this should be OPACSESSID
-		mydata[mynewtag] = $(mytagid).val();	// need [bracket] for variable property id
-		var response;	// AJAX from server will assign value to response.
-		$.post(
-			"/cgi-bin/koha/tags/tags.pl",
-			mydata,
-			function(data){
-				// alert("AJAX Response: " + data);
-				eval(data);
-				// alert("counts: " + response["added"] + response["deleted"] + response["errors"]);
-				KOHA.Tags.set_tag_status(
-					mytagid + "_status",
-					KOHA.Tags.common_status(response["added"], response["deleted"], response["errors"])
-				);
-				if (response.alerts) {
-					alert(response.alerts.join("\n\n"));
-				}
-			},
-			'script'
-		);
-		return false;
-	},
-	common_status : function(addcount, delcount, errcount) {
-	    var cstat = "";
-	    if (addcount && addcount > 0) {cstat += _("Added ")   + addcount + (addcount==1 ? _(" tag") : _(" tags")) + ".  " ;}
-	    if (delcount && delcount > 0) {cstat += _("Deleted ") + delcount + (delcount==1 ? _(" tag") : _(" tags")) + ".  " ;}
-	    if (errcount && errcount > 0) {cstat += (errcount==1 ? _("ERROR") : errcount + _(" ERRORS")) + _(" during operation.");}
-	    return cstat;
-	},
-	set_tag_status : function(tagid, newstatus) {
-		$(tagid).html(newstatus);
-		$(tagid).css({display:"inline"});
-	},
-	append_tag_status : function(tagid, newstatus) {
-		$(tagid).append(newstatus);
-		$(tagid).css({display:"inline"});
-	},
-
-	tag_message: {
-	tagsdisabled : function(arg) {return (_("Sorry, tags are not enabled on this system."));},
-	scrubbed_all_bad : function(arg) {return (_("Error! Your tag was entirely markup code.  It was NOT added.  Please try again with plain text."));},
-	badparam : function(arg) {return (_("Error! Illegal parameter '" +arg+ "'."));},
-	scrubbed : function(arg) {return (_("Note: your tag contained markup code that was removed. The tag was added as '" +arg+ "'."));},
-    failed_add_tag : function(arg) {return (_("Error! The add_tag operation failed on '" +arg+ "'.  Note: you can only tag an item with a given term once.  Check 'My Tags' to see your current tags."));},
-    failed_delete  : function(arg) {return (_("Error! You cannot delete the tag '" +arg+ "'.  Note: you can only delete your own tags."));},
-	login : function(arg) {return (_("You must be logged in to add tags."));}
-	},
-
-    // Used to tag multiple items at once.  The main difference
-    // is that status is displayed on a per item basis.
-    add_multitags_button : function(bibarray, tag){
-		var mydata = {CGISESSID: readCookie('CGISESSID')};	// Someday this should be OPACSESSID
-        for (var i = 0; i < bibarray.length; i++) {
-            var mynewtag = "newtag" + bibarray[i];
-            mydata[mynewtag] = tag;
-        }
-		var response;	// AJAX from server will assign value to response.
-		$.post(
-			"/cgi-bin/koha/tags/tags.pl",
-			mydata,
-			function(data){
-				eval(data);
-                $(".tagstatus").empty();
-                var bibErrors = false;
-
-                // Display the status for each tagged bib
-                for (var i = 0; i < bibarray.length; i++) {
-                    var bib = bibarray[i];
-                    var mytagid = "#newtag" + bib;
-                    var status = "";
-
-                    // Number of tags added.
-                    if (response[bib]) {
-                        var added = response[bib]["added"];
-                        if (added > 0) {
-                            status = "Added " + added + (added == 1 ? " tag" : " tags") + ".  ";
-    				        KOHA.Tags.set_tag_status(mytagid + "_status", status);
-                        }
-
-                        // Show a link that opens an error dialog, if necessary.
-                        var errors = response[bib]["errors"];
-                        if (errors.length > 0) {
-                            bibErrors = true;    
-                            var errid = "tagerr_" + bib;
-                            var errstat = "<a id=\"" + errid + "\" class=\"tagerror\" href=\"#\">";
-                            errstat += "Error" + (errors.length > 1 ? "s" : "") + " adding tag.";
-                            errstat += "</a>";
-        				    KOHA.Tags.append_tag_status(mytagid + "_status", errstat);
-                            var errmsg = "";
-                            for (var e = 0; e < errors.length; e++){
-                                if (e) {
-                                    errmsg += "\n\n";
-                                }
-                                errmsg += errors[e];
-                            }
-                            $("#" + errid).click(function(){
-                                alert(errmsg);
-                            });
-                        }
-                    }
-                }
-
-                if (bibErrors || response["global_errors"]) {
-                    var msg = "";
-                    if (bibErrors) {
-                        msg = "Unable to add one or more tags.";
-                    }
-
-                    // Show global errors in a dialog.
-                    if (response["global_errors"]) {
-                        var global_errors = response["global_errors"];
-                        var msg;
-                        for (var e = 0; e < global_errors.length; e++) {
-                            msg += "\n\n";
-                            msg += response.alerts[global_errors[e]];
-                        }
-                    }
-                    alert(msg);
-                }
-			},
-			'script'
-		);
-		return false;
-    }
-};
-
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tmpl
index 8cf9c5b..9257162 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tmpl
@@ -1,6 +1,6 @@
 <!-- TMPL_INCLUDE NAME="doc-head-open.inc" -->
-<!-- TMPL_IF NAME="LibraryNameTitle" --><!-- TMPL_VAR NAME="LibraryNameTitle" --><!-- TMPL_ELSE -->Koha Online<!-- /TMPL_IF --> Catalog &rsaquo; Your Cart
-    <!-- TMPL_IF NAME="print_basket" --></title>
+<title><!-- TMPL_IF NAME="LibraryNameTitle" --><!-- TMPL_VAR NAME="LibraryNameTitle" --><!-- TMPL_ELSE -->Koha Online<!-- /TMPL_IF --> Catalog &rsaquo; Your Cart</title>
+    <!-- TMPL_IF NAME="print_basket" -->
 
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <link rel="shortcut icon" href="<!-- TMPL_VAR NAME="themelang" -->/includes/favicon.ico" type="image/x-icon" />
@@ -44,48 +44,6 @@ function placeHold () {
 
 
 
-var MSG_NO_TAG_SPECIFIED = _("No tag was specified.");
-
-function tagSelected() {
-    var bibs = document.getElementById('records').value;
-    if (bibs) {
-        $("#tagsel_tag").hide();
-        $("#tag_hides").hide();
-        $("#tagsel_form").show();
-    } else {
-        alert(MSG_NO_RECORD_SELECTED);
-    }
-}
-
-function tagCanceled() {
-    $("#tagsel_form").hide();
-    $("#tagsel_tag").show();
-    $("#tag_hides").show();
-}
-
-function tagAdded() {
-    var checkedBoxes = $("input:checkbox:checked");
-    if (!$(checkedBoxes).size()) {
-        alert(MSG_NO_RECORD_SELECTED);
-        return false;
-    }
-
-    var tag = $("#tagsel_new").val();
-    if (!tag || (tag == "")) {
-        alert(MSG_NO_TAG_SPECIFIED);
-        return false;
-    }
-
-    var bibs = [];
-    for (var i = 0; i < $(checkedBoxes).size(); i++) {
-        var box = $(checkedBoxes).get(i);
-        bibs[i] = $(box).val();
-    }
-
-    KOHA.Tags.add_multitags_button(bibs, tag);
-    return false;
-}
-
 	$(document).ready(function(){
 		$("#CheckAll").click(function(){
 		var checked = [];
@@ -107,16 +65,6 @@ function tagAdded() {
 	    });
         $(".holdsep").text("| ");
         $(".hold").text(_("Place Hold"));
-        <!-- TMPL_IF NAME="TagsEnabled" -->
-        <!-- TMPL_IF NAME="TagsInputOnList" -->
-          $(".tagsep").text("| ");
-          $("#tagsel_tag").text(_("Tag"));
-          $("#tagsel_button").click(function(){
-              tagAdded();
-              return false;
-          });
-        <!-- /TMPL_IF -->
-        <!-- /TMPL_IF -->
 	});
 
 
@@ -159,7 +107,7 @@ function tagAdded() {
 	    </span></span>
 	</li>
 	<li>
-	    <span id="delete" class="yui-button yui-link-button"><span class="first-child">
+	    <span id="hide" class="yui-button yui-link-button"><span class="first-child">
 		<a class="hide" href="basket.pl" onclick="quit(); return false;">Hide Window</a>
 	    </span></span>
 	</li>
@@ -169,8 +117,6 @@ function tagAdded() {
 
 <!-- TMPL_IF NAME="verbose" -->
 	<!-- TMPL_UNLESS NAME="print_basket" --><p style="padding: 7px 0; border-top : 1px solid #E8E8E8;"><a id="CheckAll" href="#">Select All</a> <a id="CheckNone" href="#">Clear All</a> | <b>Selected items :</b>
-<span id="tag_hides">
-<a href="#" onclick="delSelRecords(); return false;">Remove</a>
 
 <!-- TMPL_IF NAME="loggedinusername" -->
      | <a href="#" onclick="addSelToShelf(); return false;">Add to a list</a>
@@ -180,16 +126,6 @@ function tagAdded() {
      | <a href="#" onclick="placeHold(); return false;">Place Hold</a>
 <!-- /TMPL_IF -->
 
-     <span class="tagsep"></span>
-     <a href="#" onclick="tagSelected(); return false;"><span id="tagsel_tag"></span></a>
-</span>
-     <span id="tagsel_form" style="display:none">
-       <label for="tagsel_new" style="display:inline">New&nbsp;Tag:</label>
-       <input name="tagsel_new" id="tagsel_new" maxlength="100" style="display:inline"/>
-       <input id="tagsel_button" name="tagsel_button" class="input tagsel_button" title="tagsel_button"
-           type="submit" value="Add" style="display:inline" />
-       <a href="#" id="tagsel_cancel" onclick="tagCanceled(); return false;" style="display:inline">Cancel</a>
-     </span>
 </p><!-- /TMPL_UNLESS -->
             <form action="basket.pl" method="get" name="bookbag_form" id="bookbag_form">
     <!-- TMPL_LOOP NAME="BIBLIO_RESULTS" -->
@@ -348,7 +284,6 @@ function tagAdded() {
     <a id="CheckAll" href="#">Select All</a>
     <a id="CheckNone" href="#">Clear All</a>
     | <b>Selected items :</b>
-<span id="tag_hides">
 <a href="#" onclick="delSelRecords(); return false;">Remove</a>
 
 <!-- TMPL_IF NAME="loggedinusername" -->
@@ -360,14 +295,6 @@ function tagAdded() {
 <!-- /TMPL_IF -->
 
 
-     <span class="tagsep"></span><a href="#" onclick="tagSelected(); return false;"><span id="tagsel_tag"></span></a>
-</span>
-     <span id="tagsel_form" style="display:none">
-       <label for="tagsel_new" style="display:inline">New&nbsp;Tag:</label>
-       <input name="tagsel_new" id="tagsel_new" maxlength="100"  style="display:inline"/>
-       <input id="tagsel_button" name="tagsel_button" class="input tagsel_button" title="tagsel_button" type="submit" value="Add"  style="display:inline"/>
-       <a href="#" id="tagsel_cancel" onclick="tagCanceled(); return false;" style="display:inline">Cancel</a>
-     </span>
 <!-- /TMPL_UNLESS -->
 </p>
     <table id="itemst">
@@ -402,7 +329,6 @@ function tagAdded() {
                         <!-- /TMPL_IF -->
 						    <!-- 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" -->&amp;rft.btitle=<!-- TMPL_VAR NAME="title" 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>
-    <div id="newtag<!-- TMPL_VAR NAME="biblionumber">_status" class="tagstatus results_summary" style="display:none">Tag status here.</div>
 
 						</td>
             <td><!-- TMPL_VAR name="description" --></td>
diff --git a/tags/tags.pl b/tags/tags.pl
deleted file mode 100755
index bfce9cc..0000000
--- a/tags/tags.pl
+++ /dev/null
@@ -1,327 +0,0 @@
-#!/usr/bin/perl
-
-# Copyright 2000-2002 Katipo Communications
-#
-# 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., 59 Temple Place,
-# Suite 330, Boston, MA  02111-1307 USA
-
-
-=head1 
-
-TODO :: Description here
-
-C4::Scrubber is used to remove all markup content from the sumitted text.
-
-=cut
-
-use strict;
-use warnings;
-use CGI;
-use CGI::Cookie; # need to check cookies before having CGI parse the POST request
-
-use C4::Auth qw(:DEFAULT check_cookie_auth);
-use C4::Context;
-use C4::Debug;
-use C4::Output 3.02 qw(:html :ajax pagination_bar);
-use C4::Dates qw(format_date);
-use C4::Scrubber;
-use C4::Biblio;
-use C4::Tags qw(add_tag get_approval_rows get_tag_rows remove_tag);
-
-my %newtags = ();
-my @deltags = ();
-my %counts  = ();
-my @errors  = ();
-my $perBibResults = {};
-
-# Indexes of @errors that do not apply to a particular biblionumber.
-my @globalErrorIndexes = ();
-
-sub ajax_auth_cgi ($) {     # returns CGI object
-	my $needed_flags = shift;
-	my %cookies = fetch CGI::Cookie;
-	my $input = CGI->new;
-	my $sessid = $cookies{'CGISESSID'}->value || $input->param('CGISESSID');
-	my ($auth_status, $auth_sessid) = check_cookie_auth($sessid, $needed_flags);
-	$debug and
-	print STDERR "($auth_status, $auth_sessid) = check_cookie_auth($sessid," . Dumper($needed_flags) . ")\n";
-	if ($auth_status ne "ok") {
-		output_with_http_headers $input, undef,
-		"window.alert('Your CGI session cookie ($sessid) is not current.  " .
-		"Please refresh the page and try again.');\n", 'js';
-		exit 0;
-	}
-	$debug and print STDERR "AJAX request: " . Dumper($input),
-		"\n(\$auth_status,\$auth_sessid) = ($auth_status,$auth_sessid)\n";
-	return $input;
-}
-
-# The trick here is to support multiple tags added to multiple bilbios in one POST.
-# The HTML might not use this, but it makes it more web-servicey from the start.
-# So the name of param has to have biblionumber built in.
-# For lack of anything more compelling, we just use "newtag[biblionumber]"
-# We split the value into tags at comma and semicolon
-
-my $is_ajax = is_ajax();
-my $openadds = C4::Context->preference('TagsModeration') ? 0 : 1;
-my $query = ($is_ajax) ? &ajax_auth_cgi({}) : CGI->new();
-unless (C4::Context->preference('TagsEnabled')) {
-	push @errors, {+ tagsdisabled=>1 };
-    push @globalErrorIndexes, $#errors;
-} else {
-	foreach ($query->param) {
-		if (/^newtag(.*)/) {
-			my $biblionumber = $1;
-			unless ($biblionumber =~ /^\d+$/) {
-				$debug and warn "$_ references non numerical biblionumber '$biblionumber'";
-				push @errors, {+'badparam' => $_ };
-                push @globalErrorIndexes, $#errors;
-				next;
-			}
-			$newtags{$biblionumber} = $query->param($_);
-		} elsif (/^del(\d+)$/) {
-			push @deltags, $1;
-		}
-	}
-}
-
-my $add_op = (scalar(keys %newtags) + scalar(@deltags)) ? 1 : 0;
-my ($template, $loggedinuser, $cookie);
-if ($is_ajax) {
-	$loggedinuser = C4::Context->userenv->{'id'};  # must occur AFTER auth
-	$debug and print STDERR "op: $loggedinuser\n";
-} else {
-	($template, $loggedinuser, $cookie) = get_template_and_user({
-		template_name   => "tags/tags.tmpl",
-		query           => $query,
-		type            => "intranet",
-		authnotrequired => ($add_op ? 0 : 1),	# auth required to add tags
-		debug           => 1,
-	});
-}
-
-if ($add_op) {
-	unless ($loggedinuser) {
-		push @errors, {+'login' => 1 };
-        push @globalErrorIndexes, $#errors;
-		%newtags=();	# zero out any attempted additions
-		@deltags=();	# zero out any attempted deletions
-	}
-}
-
-my $scrubber;
-my @newtags_keys = (keys %newtags);
-if (scalar @newtags_keys) {
-	$scrubber = C4::Scrubber->new();
-	foreach my $biblionumber (@newtags_keys) {
-        my $bibResults = {adds=>0, errors=>[]};
-		my @values = split /[;,]/, $newtags{$biblionumber};
-		foreach (@values) {
-			s/^\s*(.+)\s*$/$1/;
-			my $clean_tag = $scrubber->scrub($_);
-			unless ($clean_tag eq $_) {
-				if ($clean_tag =~ /\S/) {
-					push @errors, {scrubbed=>$clean_tag};
-					push @{$bibResults->{errors}}, {scrubbed=>$clean_tag};
-				} else {
-					push @errors, {scrubbed_all_bad=>1};
-					push @{$bibResults->{errors}}, {scrubbed_all_bad=>1};
-					next;	# we don't add it if there's nothing left!
-				}
-			}
-			my $result = ($openadds) ?
-				add_tag($biblionumber,$clean_tag,$loggedinuser,$loggedinuser) : # pre-approved
-				add_tag($biblionumber,$clean_tag,$loggedinuser)   ;
-			if ($result) {
-				$counts{$biblionumber}++;
-                $bibResults->{adds}++;
-			} else {
-				push @errors, {failed_add_tag=>$clean_tag};
-				push @{$bibResults->{errors}}, {failed_add_tag=>$clean_tag};
-				$debug and warn "add_tag($biblionumber,$clean_tag,$loggedinuser...) returned bad result (" . (defined $result ? $result : 'UNDEF') .")";
-			}
-		}
-        $perBibResults->{$biblionumber} = $bibResults;
-	}
-}
-my $dels = 0;
-foreach (@deltags) {
-	if (remove_tag($_,$loggedinuser)) {
-		$dels++;
-	} else {
-		push @errors, {failed_delete=>$_};
-	}
-}
-
-if ($is_ajax) {
-	my $sum = 0;
-	foreach (values %counts) {$sum += $_;}
-	my $js_reply = sprintf("response = {\n\tadded: %d,\n\tdeleted: %d,\n\terrors: %d",$sum,$dels,scalar @errors);
-
-    # If no add attempts were made, flag global errors.
-    if (@globalErrorIndexes) {
-        $js_reply .= ",\n\tglobal_errors: [";
-        my $first = 1;
-        foreach (@globalErrorIndexes) {
-            $js_reply .= "," unless $first;
-            $first = 0;
-            $js_reply .= "\n\t\t$_";
-        }
-        $js_reply .= "\n\t]";
-    }
-    
-	my $err_string = '';
-	if (scalar @errors) {
-		$err_string = ",\n\talerts: [";	# open response_function
-		my $i = 1;
-		foreach (@errors) {
-			my $key = (keys %$_)[0];
-			$err_string .= "\n\t\t KOHA.Tags.tag_message.$key(\"" . $_->{$key} . '")';
-			if($i < scalar @errors){ $err_string .= ","; }
-			$i++;
-		}
-		$err_string .= "\n\t]\n";	# close response_function
-	}
-
-    # Add per-biblionumber results for use on results page
-    my $js_perbib = "";
-    for my $bib (keys %$perBibResults) {
-        my $bibResult = $perBibResults->{$bib};
-        my $js_bibres = ",\n\t$bib: {\n\t\tadded: $bibResult->{adds}";
-        $js_bibres .= ",\n\t\terrors: [";
-        my $i = 0;
-        foreach (@{$bibResult->{errors}}) {
-            $js_bibres .= "," if ($i);
-			my $key = (keys %$_)[0];
-			$js_bibres .= "\n\t\t\t KOHA.Tags.tag_message.$key(\"" . $_->{$key} . '")';
-            $i++;
-        }
-        $js_bibres .= "\n\t\t]\n\t}";
-        $js_perbib .= $js_bibres;
-    }
-
-	output_with_http_headers($query, undef, "$js_reply\n$err_string\n$js_perbib\n};", 'js');
-	exit;
-}
-
-my $results = [];
-my $my_tags = [];
-
-if ($loggedinuser) {
-	$my_tags = get_tag_rows({borrowernumber=>$loggedinuser});
-	foreach (@$my_tags) {
-		my $biblio = GetBiblioData($_->{biblionumber});
-		$_->{bib_summary} = $biblio->{title}; 
-		($biblio->{author}) and $_->{bib_summary} .= " by " . $biblio->{author};
-		my $date = $_->{date_created} || '';
-		$date =~ /\s+(\d{2}\:\d{2}\:\d{2})/;
-		$_->{time_created_display} = $1;
-		$_->{date_created_display} = format_date($_->{date_created});
-	}
-}
-
-$template->param(tagsview => 1,
-dateformat => C4::Context->preference("dateformat"));
-
-if ($add_op) {
-	my $adds = 0;
-	for (values %counts) {$adds += $_;}
-	$template->param(
-		add_op => 1,
-		added_count => $adds,
-		deleted_count => $dels,
-	);
-} else {
-	my ($arg,$limit,$mine);
-	my $hardmax = 100;	# you might disagree what this value should be, but there definitely should be a max
-	$limit = $query->param('limit') || $hardmax;
-    $mine =  $query->param('mine') || 0; # set if the patron want to see only his own tags.
-	($limit =~ /^\d+$/ and $limit <= $hardmax) or $limit = $hardmax;
-	$template->param(limit => $limit);
-	my $arghash = {approved=>1, limit=>$limit, 'sort'=>'-weight_total'};
-    $arghash->{'borrowernumber'} = $loggedinuser if $mine;
-	# ($openadds) or $arghash->{approved} = 1;
-	if ($arg = $query->param('tag')) {
-		$arghash->{term} = $arg;
-	} elsif ($arg = $query->param('biblionumber')) {
-		$arghash->{biblionumber} = $arg;
-	}
-	$results = get_approval_rows($arghash);
-
-	my $count = scalar @$results;
-	$template->param(TAGLOOP_COUNT => $count, mine => $mine);
-	# Here we make a halfhearted attempt to separate the tags into "strata" based on weight_total
-	# FIXME: code4lib probably has a better algorithm, iirc
-	# FIXME: when we get a better algorithm, move to C4
-	my $maxstrata = 5;
-	my $strata = 1;
-	my $previous = 0;
-	my $chunk = ($count/$maxstrata)/2;
-	my $total = 0;
-	my %cloud;
-	foreach (reverse @$results) {
-		my $current = $_->{weight_total};
-		$total++;
-		$cloud{$strata}++;
-		if ($current == $previous) {
-			$_->{cloudweight} = $strata;
-			next;
-		} 
-		if ($strata < $maxstrata and 
-			($cloud{$strata} > $chunk or 
-			$count-$total <= $maxstrata-$strata)) {
-			$strata++;
-		}
-		$_->{cloudweight} = $strata;
-		$previous = $current;
-	}
-}
-(scalar @errors  ) and $template->param(ERRORS  => \@errors);
-my @orderedresult = sort { $a->{'term'} cmp $b->{'term'} } @$results;
-(scalar @$results) and $template->param(TAGLOOP => \@orderedresult );
-(scalar @$my_tags) and $template->param(MY_TAGS => $my_tags);
-
-output_html_with_http_headers $query, $cookie, $template->output;
-__END__
-
-=head1 EXAMPLE AJAX POST PARAMETERS
-
-CGISESSID	7c6288263107beb320f70f78fd767f56
-newtag396	fire,+<a+href="foobar.html">foobar</a>,+<img+src="foo.jpg"+/>
-
-So this request is trying to add 3 tags to biblio #396.  The CGISESSID is the same as that the browser would
-typically communicate using cookies.  If it is valid, the server will split the value of "newtag396" and 
-process the components for addition.  In this case the intended tags are:
-	fire
-	<a+href="foobar.html">foobar</a>
-	<img src="foo.jpg" />
-
-The first tag is acceptable.  The second will be scrubbed of markup, resulting in the tag "foobar".  
-The third tag is all markup, and will be rejected.  
-
-=head1 EXAMPLE AJAX JSON response
-
-response = {
-	added: 2,
-	deleted: 0,
-	errors: 2,
-	alerts: [
-		 KOHA.Tags.tag_message.scrubbed("foobar"),
- 		 KOHA.Tags.tag_message.scrubbed_all_bad("1"),
- 	],
-};
-
-=cut
-
-- 
1.6.3.3




More information about the Koha-patches mailing list