X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debbugs%2FCGI.pm;h=d51b9be0a469c5503f4e3648964c36bb2bb31e27;hb=45f1672bfee50ef8c2ec5938979ee409c5c3db87;hp=1ba47996744eeb2ec4358db4da55910e30d9ba8e;hpb=46fa42780ecb746d7bec2fb01190b05584b9283e;p=debbugs.git diff --git a/Debbugs/CGI.pm b/Debbugs/CGI.pm index 1ba4799..d51b9be 100644 --- a/Debbugs/CGI.pm +++ b/Debbugs/CGI.pm @@ -35,12 +35,16 @@ use warnings; use strict; use vars qw($VERSION $DEBUG %EXPORT_TAGS @EXPORT_OK @EXPORT); use base qw(Exporter); + use Debbugs::URI; use HTML::Entities; use Debbugs::Common qw(getparsedaddrs make_list); use Params::Validate qw(validate_with :types); + use Debbugs::Config qw(:config); use Debbugs::Status qw(splitpackages isstrongseverity); +use Debbugs::User qw(); + use Mail::Address; use POSIX qw(ceil); use Storable qw(dclone); @@ -70,6 +74,7 @@ BEGIN{ util => [qw(cgi_parameters quitcgi), ], forms => [qw(option_form form_options_and_normal_param)], + usertags => [qw(add_user)], misc => [qw(maint_decode)], package_search => [qw(@package_search_key_order %package_search_keys)], #status => [qw(getbugstatus)], @@ -191,7 +196,7 @@ width and height are passed. sub version_url{ my %params = validate_with(params => \@_, - spec => {package => {type => SCALAR, + spec => {package => {type => SCALAR|ARRAYREF, }, found => {type => ARRAYREF, default => [], @@ -292,7 +297,7 @@ sub quitcgi { } -=head HTML +=head1 HTML =head2 htmlize_packagelinks @@ -350,8 +355,10 @@ our @package_search_key_order = (package => 'in package', submitter => 'submitted by', owner => 'owned by', status => 'with status', + affects => 'which affect package', correspondent => 'with mail from', newest => 'newest bugs', + bugs => 'in bug', ); our %package_search_keys = @package_search_key_order; @@ -393,11 +400,15 @@ sub package_links { } my @links = (); for my $type (qw(src package)) { - push @links, map {(munge_url('pkgreport.cgi?', + push @links, map {my $t_type = $type; + if ($_ =~ s/^src://) { + $t_type = 'src'; + } + (munge_url('pkgreport.cgi?', %options, - $type => $_, + $t_type => $_, ), - $_); + ($t_type eq 'src'?'src:':'').$_); } make_list($param{$type}) if exists $param{$type}; } for my $type (qw(maint owner submitter correspondent)) { @@ -528,6 +539,11 @@ the split links with commas and spaces. sub maybelink { my ($links,$regex,$join) = @_; + if (not defined $regex and not defined $join) { + $links =~ s{(.*?)((?:(?:ftp|http|https)://[\S~-]+?/?)?)([\)\'\:\.\,]?(?:\s|\.<|$))} + {html_escape($1).(length $2?q().html_escape($2).q():'').html_escape($3)}geimo; + return $links; + } $join = ' ' if not defined $join; my @return; my @segments; @@ -628,6 +644,38 @@ sub bug_linklist{ } +sub add_user { + my ($user,$usertags,$bug_usertags,$seen_users,$cats,$hidden) = @_; + $seen_users = {} if not defined $seen_users; + $bug_usertags = {} if not defined $bug_usertags; + $usertags = {} if not defined $usertags; + $cats = {} if not defined $cats; + $hidden = {} if not defined $hidden; + return if exists $seen_users->{$user}; + $seen_users->{$user} = 1; + + my $u = Debbugs::User::get_user($user); + + my %vis = map { $_, 1 } @{$u->{"visible_cats"}}; + for my $c (keys %{$u->{"categories"}}) { + $cats->{$c} = $u->{"categories"}->{$c}; + $hidden->{$c} = 1 unless defined $vis{$c}; + } + for my $t (keys %{$u->{"tags"}}) { + $usertags->{$t} = [] unless defined $usertags->{$t}; + push @{$usertags->{$t}}, @{$u->{"tags"}->{$t}}; + } + + %{$bug_usertags} = (); + for my $t (keys %{$usertags}) { + for my $b (@{$usertags->{$t}}) { + $bug_usertags->{$b} = [] unless defined $bug_usertags->{$b}; + push @{$bug_usertags->{$b}}, $t; + } + } +} + + =head1 Forms @@ -823,7 +871,8 @@ sub option_form{ if (defined $value and $o_value eq $value) { $selected = ' selected'; } - $output .= qq(\n); + $output .= q(\n); } return $output; }; @@ -833,6 +882,8 @@ sub option_form{ return Debbugs::Text::fill_in_template(template=>$param{template}, (exists $param{language}?(language=>$param{language}):()), variables => $variables, + hole_var => {'&html_escape' => \&html_escape, + }, ); }