-sub remove_tag ($;$) {
- my $tag_id = shift or return undef;
- my $user_id = (@_) ? shift : undef;
- my $rows = (defined $user_id) ?
- get_tag_rows({tag_id=>$tag_id, borrowernumber=>$user_id}) :
- get_tag_rows({tag_id=>$tag_id}) ;
- $rows or return 0;
- (scalar(@$rows) == 1) or return undef; # should never happen (duplicate ids)
- my $row = shift(@$rows);
- ($tag_id == $row->{tag_id}) or return 0;
- my $tags = get_tags({term=>$row->{term}, biblionumber=>$row->{biblionumber}});
- my $index = shift(@$tags);
- $debug and print STDERR
- sprintf "remove_tag: tag_id=>%s, biblionumber=>%s, weight=>%s, weight_total=>%s\n",
- $row->{tag_id}, $row->{biblionumber}, $index->{weight}, $index->{weight_total};
- if ($index->{weight} <= 1) {
- delete_tag_index($row->{term},$row->{biblionumber});
- } else {
- decrement_weight($row->{term},$row->{biblionumber});
- }
- if ($index->{weight_total} <= 1) {
- delete_tag_approval($row->{term});
- } else {
- decrement_weight_total($row->{term});
- }
- delete_tag_row_by_id($tag_id);
-}