From 12c6f77c24a02dbb0c3ee8903cac278a382a9327 Mon Sep 17 00:00:00 2001 From: Robin Sheat Date: Sat, 29 Sep 2012 11:34:32 +1200 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 Signed-off-by: Marc Veron Works as expected. --- C4/Tags.pm | 94 ++++++++++++---------- koha-tmpl/opac-tmpl/ccsr/en/css/opac.css | 41 ++++++++++ koha-tmpl/opac-tmpl/prog/en/css/opac.css | 41 ++++++++++ koha-tmpl/opac-tmpl/prog/en/modules/opac-tags.tt | 22 +---- opac/opac-tags.pl | 29 +------ t/db_dependent/Tags.t | 53 +++++++++++- 6 files changed, 189 insertions(+), 91 deletions(-) diff --git a/C4/Tags.pm b/C4/Tags.pm index 85613e0..65062f5 100644 --- a/C4/Tags.pm +++ b/C4/Tags.pm @@ -33,21 +33,21 @@ use vars qw($ext_dict $select_all @fields); BEGIN { $VERSION = 3.07.00.049; @ISA = qw(Exporter); - @EXPORT_OK = qw( - &get_tag &get_tags &get_tag_rows - &add_tags &add_tag - &delete_tag_row_by_id - &remove_tag - &delete_tag_rows_by_ids - &rectify_weights - &get_approval_rows - &blacklist - &whitelist - &is_approved - &approval_counts - &get_count_by_tag_status - &get_filters - ); + @EXPORT_OK = qw( + &get_tag &get_tags &get_tag_rows + &add_tags &add_tag + &delete_tag_row_by_id + &remove_tag + &delete_tag_rows_by_ids + &get_approval_rows + &blacklist + &whitelist + &is_approved + &approval_counts + &get_count_by_tag_status + &get_filters + stratify_tags + ); # %EXPORT_TAGS = (); $ext_dict = C4::Context->preference('TagsExternalDictionary'); if ($debug) { @@ -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; - 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/ccsr/en/css/opac.css b/koha-tmpl/opac-tmpl/ccsr/en/css/opac.css index 7510396..ef1b84b 100644 --- a/koha-tmpl/opac-tmpl/ccsr/en/css/opac.css +++ b/koha-tmpl/opac-tmpl/ccsr/en/css/opac.css @@ -2657,3 +2657,44 @@ body#opac-main #opacmainuserblockmobile { .mobile_only { display : none; } + +/* different sizes for different tags in opac-tags.tt */ +.tagweight0 { + font-size: 12px; +} + +.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; +} diff --git a/koha-tmpl/opac-tmpl/prog/en/css/opac.css b/koha-tmpl/opac-tmpl/prog/en/css/opac.css index 8610573..92f8b02 100644 --- a/koha-tmpl/opac-tmpl/prog/en/css/opac.css +++ b/koha-tmpl/opac-tmpl/prog/en/css/opac.css @@ -2767,3 +2767,44 @@ body#opac-main #opacmainuserblockmobile { .mobile_only { display : none; } + +/* different sizes for different tags in opac-tags.tt */ +.tagweight0 { + font-size: 12px; +} + +.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; +} 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 b91d3d1..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 @@