From 8c3330bf328a44a0530fd0d8b06629123742033f Mon Sep 17 00:00:00 2001 From: Robin Sheat Date: Wed, 18 Jul 2012 17:29:38 +0200 Subject: [PATCH] Bug 7642 - fix the lost display of tag sizes This fixes the display of different sized words for differently popular tags. It is a bit of a refactor of that part of the system, moving logic to more sensible places (and removing an unused method on the way.) Note that it isn't an attempt to reproduce what was there previously, just to do something similar, and in an easier to change fashion. Sponsored-By: New Zealand Educational Institute --- C4/Tags.pm | 66 +++++++++++++--------- koha-tmpl/opac-tmpl/prog/en/css/opac.css | 42 ++++++++++++++ koha-tmpl/opac-tmpl/prog/en/modules/opac-tags.tt | 22 +------- opac/opac-tags.pl | 29 +--------- t/db_dependent/Tags.t | 55 +++++++++++++++++- 5 files changed, 137 insertions(+), 77 deletions(-) diff --git a/C4/Tags.pm b/C4/Tags.pm index 4786b2c..69d6090 100644 --- a/C4/Tags.pm +++ b/C4/Tags.pm @@ -39,7 +39,6 @@ BEGIN { &delete_tag_row_by_id &remove_tag &delete_tag_rows_by_ids - &rectify_weights &get_approval_rows &blacklist &whitelist @@ -47,6 +46,7 @@ BEGIN { &approval_counts &get_count_by_tag_status &get_filters + stratify_tags ); # %EXPORT_TAGS = (); $ext_dict = C4::Context->preference('TagsExternalDictionary'); @@ -490,33 +490,6 @@ sub get_tag { # by tag_id return $sth->fetchrow_hashref; } -sub rectify_weights { - my $dbh = C4::Context->dbh; - my $sth; - my $query = " - SELECT term,biblionumber,count(*) as count - FROM tags_all - "; - (@_) and $query .= " WHERE term =? "; - $query .= " GROUP BY term,biblionumber "; - $sth = $dbh->prepare($query); - if (@_) { - $sth->execute(shift); - } else { - $sth->execute(); - } - my $results = $sth->fetchall_arrayref({}) or return undef; - my %tally = (); - foreach (@$results) { - _set_weight($_->{count},$_->{term},$_->{biblionumber}); - $tally{$_->{term}} += $_->{count}; - } - foreach (keys %tally) { - _set_weight_total($tally{$_},$_); - } - return ($results,\%tally); -} - sub increment_weights { increment_weight(@_); increment_weight_total(shift); @@ -594,6 +567,43 @@ sub add_tag { # biblionumber,term,[borrowernumber,approvernumber] } } +# This takes a set of tags, as returned by C and divides +# them up into a number of "strata" based on their weight. This is useful +# to display them in a number of different sizes. +# +# Usage: +# ($min, $max) = stratify_tags($strata, $tags); +# $stratum: the number of divisions you want +# $tags: the tags, as provided by get_approval_rows +# $min: the minumum stratum value +# $max: the maximum stratum value. This may be the same as $min if there +# is only one weight. Beware of divide by zeros. +# This will add a field to the tag called "stratum" containing the calculated +# value. +sub stratify_tags { + my ( $strata, $tags ) = @_; + + my ( $min, $max ); + foreach (@$tags) { + my $w = $_->{weight_total}; + $min = $w if ( !defined($min) || $min > $w ); + $max = $w if ( !defined($max) || $max < $w ); + } + + # normalise min to zero + $max = $max - $min; + my $orig_min = $min; + $min = 0; + + # if min and max are the same, just make it 1 + my $span = ( $strata - 1 ) / ( $max || 1 ); + foreach (@$tags) { + my $w = $_->{weight_total}; + $_->{stratum} = int( ( $w - $orig_min ) * $span ); + } + return ( $min, $max ); +} + 1; __END__ diff --git a/koha-tmpl/opac-tmpl/prog/en/css/opac.css b/koha-tmpl/opac-tmpl/prog/en/css/opac.css index 1e5b0c6..bb277f5 100644 --- a/koha-tmpl/opac-tmpl/prog/en/css/opac.css +++ b/koha-tmpl/opac-tmpl/prog/en/css/opac.css @@ -2609,6 +2609,47 @@ ul.ui-tabs-nav li { box-shadow: 1px 1px 3px 0 #666; } +/* different sizes for different tags in opac-tags.tt */ +.tagweight0 { + font-size: 12px; + display: inline; +} + +.tagweight1 { + font-size: 14px; +} + +.tagweight2 { + font-size: 16px; +} + +.tagweight3 { + font-size: 18px; +} + +.tagweight4 { + font-size: 20px; +} + +.tagweight5 { + font-size: 22px; +} + +.tagweight6 { + font-size: 24px; +} + +.tagweight7 { + font-size: 26px; +} + +.tagweight8 { + font-size: 28px; +} + +.tagweight9 { + font-size: 30px; +} /* ## BABELTHEQUE ## */ /* Uncomment if babeltheque configuration no contains these lines */ /* @@ -2757,4 +2798,5 @@ ul.ui-tabs-nav li { color: #FFFFCC; } + */ diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-tags.tt b/koha-tmpl/opac-tmpl/prog/en/modules/opac-tags.tt index c76b726..ca053b8 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-tags.tt +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-tags.tt @@ -21,26 +21,6 @@