@@ -, +, @@ --- 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(-) --- a/C4/Tags.pm +++ a/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__ --- a/koha-tmpl/opac-tmpl/prog/en/css/opac.css +++ a/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; } + */ --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-tags.tt +++ a/koha-tmpl/opac-tmpl/prog/en/modules/opac-tags.tt @@ -21,26 +21,6 @@