Commit a3cbf561 authored by myk%mozilla.org's avatar myk%mozilla.org

Partial fix for bug 302669: rewrites Attachment.pm to provide a real Attachment class; r=lpsolit

parent a094f0eb
......@@ -354,7 +354,9 @@ sub attachments {
my ($self) = @_;
return $self->{'attachments'} if exists $self->{'attachments'};
return [] if $self->{'error'};
$self->{'attachments'} = Bugzilla::Attachment::query($self->{bug_id});
$self->{'attachments'} =
Bugzilla::Attachment->get_attachments_by_bug($self->bug_id);
return $self->{'attachments'};
}
......
......@@ -347,26 +347,26 @@ sub validate {
# can_see_bug() will refer to old settings.
if (!$requestee->can_see_bug($bug_id)) {
ThrowUserError("flag_requestee_unauthorized",
{ flag_type => $flag->{'type'},
requestee => $requestee,
bug_id => $bug_id,
attach_id =>
$flag->{target}->{attachment}->{id} });
{ flag_type => $flag->{'type'},
requestee => $requestee,
bug_id => $bug_id,
attachment => $flag->{target}->{attachment}
});
}
# Throw an error if the target is a private attachment and
# the requestee isn't in the group of insiders who can see it.
if ($flag->{target}->{attachment}->{exists}
if ($flag->{target}->{attachment}
&& $cgi->param('isprivate')
&& Param("insidergroup")
&& !$requestee->in_group(Param("insidergroup")))
{
ThrowUserError("flag_requestee_unauthorized_attachment",
{ flag_type => $flag->{'type'},
requestee => $requestee,
bug_id => $bug_id,
attach_id =>
$flag->{target}->{attachment}->{id} });
{ flag_type => $flag->{'type'},
requestee => $requestee,
bug_id => $bug_id,
attachment => $flag->{target}->{attachment}
});
}
}
}
......@@ -532,7 +532,9 @@ sub create {
$flag->{'id'} = (&::FetchOneColumn() || 0) + 1;
# Insert a record for the flag into the flags table.
my $attach_id = $flag->{'target'}->{'attachment'}->{'id'} || "NULL";
my $attach_id =
$flag->{target}->{attachment} ? $flag->{target}->{attachment}->{id}
: "NULL";
my $requestee_id = $flag->{'requestee'} ? $flag->{'requestee'}->id : "NULL";
&::SendSQL("INSERT INTO flags (id, type_id,
bug_id, attach_id,
......@@ -807,7 +809,8 @@ sub FormToNewFlags {
{ 'type_id' => $type_id,
'target_type' => $target->{'type'},
'bug_id' => $target->{'bug'}->{'id'},
'attach_id' => $target->{'attachment'}->{'id'},
'attach_id' => $target->{'attachment'} ?
$target->{'attachment'}->{'id'} : undef,
'is_active' => 1 });
# Do not create a new flag of this type if this flag type is
......@@ -902,15 +905,18 @@ sub get_target {
my $target = { 'exists' => 0 };
if ($attach_id) {
$target->{'attachment'} = new Bugzilla::Attachment($attach_id);
$target->{'attachment'} = Bugzilla::Attachment->get($attach_id);
if ($bug_id) {
# Make sure the bug and attachment IDs correspond to each other
# (i.e. this is the bug to which this attachment is attached).
$bug_id == $target->{'attachment'}->{'bug_id'}
|| return { 'exists' => 0 };
if (!$target->{'attachment'}
|| $target->{'attachment'}->{'bug_id'} != $bug_id)
{
return { 'exists' => 0 };
}
}
$target->{'bug'} = GetBug($target->{'attachment'}->{'bug_id'});
$target->{'exists'} = $target->{'attachment'}->{'exists'};
$target->{'bug'} = GetBug($bug_id);
$target->{'exists'} = 1;
$target->{'type'} = "attachment";
}
elsif ($bug_id) {
......@@ -937,20 +943,21 @@ Sends an email notification about a flag being created or fulfilled.
sub notify {
my ($flag, $template_file) = @_;
my $attachment_is_private = $flag->{'target'}->{'attachment'} ?
$flag->{'target'}->{'attachment'}->{'isprivate'} : undef;
# If the target bug is restricted to one or more groups, then we need
# to make sure we don't send email about it to unauthorized users
# on the request type's CC: list, so we have to trawl the list for users
# not in those groups or email addresses that don't have an account.
if ($flag->{'target'}->{'bug'}->{'restricted'}
|| $flag->{'target'}->{'attachment'}->{'isprivate'})
{
if ($flag->{'target'}->{'bug'}->{'restricted'} || $attachment_is_private) {
my @new_cc_list;
foreach my $cc (split(/[, ]+/, $flag->{'type'}->{'cc_list'})) {
my $ccuser = Bugzilla::User->new_from_login($cc) || next;
next if $flag->{'target'}->{'bug'}->{'restricted'}
&& !$ccuser->can_see_bug($flag->{'target'}->{'bug'}->{'id'});
next if $flag->{'target'}->{'attachment'}->{'isprivate'}
next if $attachment_is_private
&& Param("insidergroup")
&& !$ccuser->in_group(Param("insidergroup"));
push(@new_cc_list, $cc);
......
......@@ -37,7 +37,7 @@
[% IF !attachment.isprivate || canseeprivate %]
<tr [% "class=\"bz_private\"" IF attachment.isprivate %]>
<td valign="top">
<a href="attachment.cgi?id=[% attachment.attachid %]">[% attachment.description FILTER html FILTER obsolete(attachment.isobsolete) %]</a>
<a href="attachment.cgi?id=[% attachment.id %]">[% attachment.description FILTER html FILTER obsolete(attachment.isobsolete) %]</a>
</td>
<td valign="top">
......@@ -49,11 +49,11 @@
</td>
<td valign="top">
<a href="mailto:[% attachment.submitter.email FILTER html %]">
[% attachment.submitter.name || attachment.submitter.login FILTER html %]
<a href="mailto:[% attachment.attacher.email FILTER html %]">
[% attachment.attacher.name || attachment.attacher.login FILTER html %]
</a>
</td>
<td valign="top">[% attachment.date FILTER time %]</td>
<td valign="top">[% attachment.attached FILTER time %]</td>
<td valign="top">[% attachment.datasize FILTER unitconvert %]</td>
[% IF show_attachment_flags %]
......@@ -75,9 +75,9 @@
[% END %]
<td valign="top">
<a href="attachment.cgi?id=[% attachment.attachid %]&amp;action=edit">Edit</a>
<a href="attachment.cgi?id=[% attachment.id %]&amp;action=edit">Edit</a>
[% IF attachment.ispatch && patchviewerinstalled %]
| <a href="attachment.cgi?id=[% attachment.attachid %]&amp;action=diff">Diff</a>
| <a href="attachment.cgi?id=[% attachment.id %]&amp;action=diff">Diff</a>
[% END %]
[% Hook.process("action") %]
</td>
......
......@@ -73,8 +73,8 @@
ispatch="1"
[% END %]
>
<attachid>[% a.attachid %]</attachid>
<date>[% a.date FILTER time FILTER xml %]</date>
<attachid>[% a.id %]</attachid>
<date>[% a.attached FILTER time FILTER xml %]</date>
<desc>[% a.description FILTER xml %]</desc>
<ctype>[% a.contenttype FILTER xml %]</ctype>
[% FOREACH flag = a.flags %]
......
......@@ -368,7 +368,7 @@
'bug/show.xml.tmpl' => [
'VERSION',
'a.attachid',
'a.id',
'field',
],
......@@ -458,7 +458,7 @@
],
'attachment/list.html.tmpl' => [
'attachment.attachid',
'attachment.id',
'flag.status',
'bugid',
],
......
......@@ -442,7 +442,7 @@
You asked [% requestee.identity FILTER html %]
for <code>[% flag_type.name FILTER html %]</code> on [% terms.bug %]
[% bug_id FILTER html -%]
[% IF attach_id %], attachment [% attach_id FILTER html %][% END %],
[% IF attachment %], attachment [% attachment.id FILTER html %][% END %],
but that [% terms.bug %] has been restricted to users in certain groups,
and the user you asked isn't in all the groups to which
the [% terms.bug %] has been restricted.
......@@ -455,11 +455,10 @@
You asked [% requestee.identity FILTER html %]
for <code>[% flag_type.name FILTER html %]</code> on
[%+ terms.bug %] [%+ bug_id FILTER html %],
attachment [% attach_id FILTER html %], but that attachment is restricted
to users
in the [% Param("insidergroup") FILTER html %] group, and the user
you asked isn't in that group. Please choose someone else to ask,
or ask an administrator to add the user to the group.
attachment [% attachment.id FILTER html %], but that attachment
is restricted to users in the [% Param("insidergroup") FILTER html %] group,
and the user you asked isn't in that group. Please choose someone else
to ask, or ask an administrator to add the user to the group.
[% ELSIF error == "flag_type_cc_list_invalid" %]
[% title = "Flag Type CC List Invalid" %]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment