X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debbugs%2FCGI.pm;h=d51b9be0a469c5503f4e3648964c36bb2bb31e27;hb=5675f516e72951e15cafa1fa72e1d7ff88bb4d80;hp=1ba47996744eeb2ec4358db4da55910e30d9ba8e;hpb=6f2cf73da85b74a1bd6a178e4dc5e2477e8c77bc;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,
+ },
);
}