summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrédéric Buclin <LpSolit@gmail.com>2010-07-18 19:17:26 +0200
committerFrédéric Buclin <LpSolit@gmail.com>2010-07-18 19:17:26 +0200
commit2addcaadedfe714bd0502911cc85cdab24736465 (patch)
tree0e58e2ce48866cdf7198d7d45df1348bf1e0859a
parentaef5cb18c3f2f6e1a438faed08e944af9db4847c (diff)
downloadbugzilla-2addcaadedfe714bd0502911cc85cdab24736465.tar.gz
bugzilla-2addcaadedfe714bd0502911cc85cdab24736465.tar.xz
Bug 119703: Create an attachment by pasting it into a text field
r/a=mkanat
-rw-r--r--Bugzilla/Attachment.pm56
-rw-r--r--Bugzilla/Config/Attachment.pm5
-rw-r--r--Bugzilla/DB/Schema.pm2
-rw-r--r--Bugzilla/Field.pm1
-rw-r--r--Bugzilla/Install/DB.pm19
-rw-r--r--Bugzilla/WebService/Bug.pm35
-rw-r--r--Bugzilla/WebService/Constants.pm4
-rwxr-xr-xattachment.cgi5
-rw-r--r--bugzilla.dtd1
-rw-r--r--docs/en/xml/using.xml10
-rw-r--r--js/attachment.js12
-rwxr-xr-xpost_bug.cgi7
-rw-r--r--template/en/default/admin/params/attachment.html.tmpl4
-rw-r--r--template/en/default/attachment/create.html.tmpl8
-rw-r--r--template/en/default/attachment/createformcontents.html.tmpl30
-rw-r--r--template/en/default/attachment/edit.html.tmpl44
-rw-r--r--template/en/default/attachment/list.html.tmpl5
-rw-r--r--template/en/default/bug/create/create.html.tmpl3
-rw-r--r--template/en/default/bug/show.xml.tmpl1
-rw-r--r--template/en/default/global/code-error.html.tmpl6
-rw-r--r--template/en/default/global/field-descs.none.tmpl1
-rw-r--r--template/en/default/global/user-error.html.tmpl14
-rw-r--r--xt/lib/Bugzilla/Test/Search/Constants.pm6
23 files changed, 93 insertions, 186 deletions
diff --git a/Bugzilla/Attachment.pm b/Bugzilla/Attachment.pm
index 0f91d29c4..f63973875 100644
--- a/Bugzilla/Attachment.pm
+++ b/Bugzilla/Attachment.pm
@@ -83,7 +83,6 @@ sub DB_COLUMNS {
isobsolete
ispatch
isprivate
- isurl
mimetype
modification_time
submitter_id),
@@ -107,14 +106,13 @@ use constant UPDATE_COLUMNS => qw(
use constant VALIDATORS => {
bug => \&_check_bug,
description => \&_check_description,
+ filename => \&_check_filename,
ispatch => \&Bugzilla::Object::check_boolean,
isprivate => \&_check_is_private,
- isurl => \&_check_is_url,
mimetype => \&_check_content_type,
};
use constant UPDATE_VALIDATORS => {
- filename => \&_check_filename,
isobsolete => \&Bugzilla::Object::check_boolean,
};
@@ -268,21 +266,6 @@ sub ispatch {
=over
-=item C<isurl>
-
-whether or not the attachment is a URL
-
-=back
-
-=cut
-
-sub isurl {
- my $self = shift;
- return $self->{isurl};
-}
-
-=over
-
=item C<isobsolete>
whether or not the attachment is obsolete
@@ -527,7 +510,7 @@ sub _check_bug {
sub _check_content_type {
my ($invocant, $content_type) = @_;
- $content_type = 'text/plain' if (ref $invocant && ($invocant->isurl || $invocant->ispatch));
+ $content_type = 'text/plain' if (ref $invocant && $invocant->ispatch);
my $legal_types = join('|', LEGAL_CONTENT_TYPES);
if (!$content_type or $content_type !~ /^($legal_types)\/.+$/) {
ThrowUserError("invalid_content_type", { contenttype => $content_type });
@@ -541,17 +524,8 @@ sub _check_data {
my ($invocant, $params) = @_;
my $data = $params->{data};
- if ($params->{isurl}) {
- ($data && $data =~ m#^(http|https|ftp)://\S+#)
- || ThrowUserError('attachment_illegal_url', { url => $data });
+ $params->{filesize} = ref $data ? -s $data : length($data);
- $params->{mimetype} = 'text/plain';
- $params->{ispatch} = 0;
- $params->{filesize} = length($data);
- }
- else {
- $params->{filesize} = ref $data ? -s $data : length($data);
- }
Bugzilla::Hook::process('attachment_process_data', { data => \$data,
attributes => $params });
@@ -576,11 +550,7 @@ sub _check_description {
}
sub _check_filename {
- my ($invocant, $filename, $is_url) = @_;
-
- $is_url = $invocant->isurl if ref $invocant;
- # No file is attached, so it has no name.
- return '' if $is_url;
+ my ($invocant, $filename) = @_;
$filename = trim($filename);
$filename || ThrowUserError('file_not_specified');
@@ -612,15 +582,6 @@ sub _check_is_private {
return $is_private;
}
-sub _check_is_url {
- my ($invocant, $is_url) = @_;
-
- if ($is_url && !Bugzilla->params->{'allow_attach_url'}) {
- ThrowCodeError('attachment_url_disabled');
- }
- return $is_url ? 1 : 0;
-}
-
=pod
=head2 Class Methods
@@ -783,8 +744,6 @@ Params: takes a hashref with the following keys:
attachment is a patch.
C<isprivate> - boolean (optional, default false) - true if
the attachment is private.
- C<isurl> - boolean (optional, default false) - true if the
- attachment is a URL pointing to some external ressource.
Returns: The new attachment object.
@@ -852,7 +811,6 @@ sub run_create_validators {
$params->{data} = $class->_check_data($params);
$params = $class->SUPER::run_create_validators($params);
- $params->{filename} = $class->_check_filename($params->{filename}, $params->{isurl});
$params->{creation_ts} ||= Bugzilla->dbh->selectrow_array('SELECT LOCALTIMESTAMP(0)');
$params->{modification_time} = $params->{creation_ts};
$params->{submitter_id} = Bugzilla->user->id || ThrowCodeError('invalid_user');
@@ -917,8 +875,8 @@ sub remove_from_db {
$dbh->bz_start_transaction();
$dbh->do('DELETE FROM flags WHERE attach_id = ?', undef, $self->id);
$dbh->do('DELETE FROM attach_data WHERE id = ?', undef, $self->id);
- $dbh->do('UPDATE attachments SET mimetype = ?, ispatch = ?, isurl = ?, isobsolete = ?
- WHERE attach_id = ?', undef, ('text/plain', 0, 0, 1, $self->id));
+ $dbh->do('UPDATE attachments SET mimetype = ?, ispatch = ?, isobsolete = ?
+ WHERE attach_id = ?', undef, ('text/plain', 0, 1, $self->id));
$dbh->bz_commit_transaction();
}
@@ -930,7 +888,7 @@ sub remove_from_db {
sub get_content_type {
my $cgi = Bugzilla->cgi;
- return 'text/plain' if ($cgi->param('ispatch') || $cgi->param('attachurl'));
+ return 'text/plain' if ($cgi->param('ispatch') || $cgi->param('attach_text'));
my $content_type;
if (!defined $cgi->param('contenttypemethod')) {
diff --git a/Bugzilla/Config/Attachment.pm b/Bugzilla/Config/Attachment.pm
index ed4c4e459..e6e3b7f3d 100644
--- a/Bugzilla/Config/Attachment.pm
+++ b/Bugzilla/Config/Attachment.pm
@@ -58,11 +58,6 @@ sub get_param_list {
type => 'b',
default => 0
},
- {
- name => 'allow_attach_url',
- type => 'b',
- default => 0
- },
{
name => 'maxattachmentsize',
diff --git a/Bugzilla/DB/Schema.pm b/Bugzilla/DB/Schema.pm
index a00a7b9d9..a4d44d191 100644
--- a/Bugzilla/DB/Schema.pm
+++ b/Bugzilla/DB/Schema.pm
@@ -453,8 +453,6 @@ use constant ABSTRACT_SCHEMA => {
DEFAULT => 'FALSE'},
isprivate => {TYPE => 'BOOLEAN', NOTNULL => 1,
DEFAULT => 'FALSE'},
- isurl => {TYPE => 'BOOLEAN', NOTNULL => 1,
- DEFAULT => 'FALSE'},
],
INDEXES => [
attachments_bug_id_idx => ['bug_id'],
diff --git a/Bugzilla/Field.pm b/Bugzilla/Field.pm
index c0e88fc37..484d6536a 100644
--- a/Bugzilla/Field.pm
+++ b/Bugzilla/Field.pm
@@ -238,7 +238,6 @@ use constant DEFAULT_FIELDS => (
buglist => 1},
{name => 'content', desc => 'Content'},
{name => 'attach_data.thedata', desc => 'Attachment data'},
- {name => 'attachments.isurl', desc => 'Attachment is a URL'},
{name => "owner_idle_time", desc => "Time Since Assignee Touched"},
{name => 'see_also', desc => "See Also",
type => FIELD_TYPE_BUG_URLS},
diff --git a/Bugzilla/Install/DB.pm b/Bugzilla/Install/DB.pm
index 225e862de..33f37208f 100644
--- a/Bugzilla/Install/DB.pm
+++ b/Bugzilla/Install/DB.pm
@@ -429,10 +429,6 @@ sub update_table_definitions {
# PUBLIC is a reserved word in Oracle.
$dbh->bz_rename_column('series', 'public', 'is_public');
- # 2005-09-28 bugreport@peshkin.net Bug 149504
- $dbh->bz_add_column('attachments', 'isurl',
- {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 0});
-
# 2005-10-21 LpSolit@gmail.com - Bug 313020
$dbh->bz_add_column('namedqueries', 'query_type',
{TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 0});
@@ -630,6 +626,9 @@ sub update_table_definitions {
$dbh->bz_alter_column('products', 'allows_unconfirmed',
{ TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'TRUE' });
+ # 2010-07-18 LpSolit@gmail.com - Bug 119703
+ _remove_attachment_isurl();
+
################################################################
# New --TABLE-- changes should go *** A B O V E *** this point #
################################################################
@@ -3401,6 +3400,18 @@ sub _fix_series_creator_fk {
}
}
+sub _remove_attachment_isurl {
+ my $dbh = Bugzilla->dbh;
+
+ if ($dbh->bz_column_info('attachments', 'isurl')) {
+ # Now all attachments must have a filename.
+ $dbh->do('UPDATE attachments SET filename = ? WHERE isurl = 1',
+ undef, 'url.txt');
+ $dbh->bz_drop_column('attachments', 'isurl');
+ $dbh->do("DELETE FROM fielddefs WHERE name='attachments.isurl'");
+ }
+}
+
1;
__END__
diff --git a/Bugzilla/WebService/Bug.pm b/Bugzilla/WebService/Bug.pm
index 78709d81e..6065ee493 100644
--- a/Bugzilla/WebService/Bug.pm
+++ b/Bugzilla/WebService/Bug.pm
@@ -623,7 +623,6 @@ sub add_attachment {
mimetype => $params->{content_type},
ispatch => $params->{is_patch},
isprivate => $params->{is_private},
- isurl => $params->{is_url},
});
my $comment = $params->{comment} || '';
$attachment->bug->add_comment($comment,
@@ -846,7 +845,6 @@ sub _attachment_to_hash {
content_type => $self->type('string', $attach->contenttype),
is_private => $self->type('int', $attach->isprivate),
is_obsolete => $self->type('int', $attach->isobsolete),
- is_url => $self->type('int', $attach->isurl),
is_patch => $self->type('int', $attach->ispatch),
creator => $self->type('string', $attach->attacher->login),
attacher => $self->type('string', $attach->attacher->login),
@@ -1231,13 +1229,6 @@ group called the "insidergroup"), False otherwise.
C<boolean> True if the attachment is obsolete, False otherwise.
-=item C<is_url>
-
-C<boolean> True if the attachment is a URL instead of actual data,
-False otherwise. Note that such attachments only happen when the
-Bugzilla installation has at some point had the C<allow_attach_url>
-parameter enabled.
-
=item C<is_patch>
C<boolean> True if the attachment is a patch, False otherwise.
@@ -1279,6 +1270,9 @@ C<creator>.
=item In Bugzilla B<4.0>, the C<description> return value was renamed to
C<summary>.
+=item In Bugzilla B<4.2>, the C<is_url> return value was removed
+(this attribute no longer exists for attachments).
+
=back
=back
@@ -2163,13 +2157,6 @@ to the "insidergroup"), False if the attachment should be public.
Defaults to False if not specified.
-=item C<is_url>
-
-C<boolean> True if the attachment is just a URL, pointing to data elsewhere.
-If so, the C<data> item should just contain the URL.
-
-Defaults to False if not specified.
-
=back
=item B<Returns>
@@ -2193,11 +2180,6 @@ You tried to attach a file that was larger than Bugzilla will accept.
You specified a C<content_type> argument that was blank, not a valid
MIME type, or not a MIME type that Bugzilla accepts for attachments.
-=item 602 (Illegal URL)
-
-You specified C<is_url> as True, but the data that you attempted
-to attach was not a valid URL.
-
=item 603 (File Name Not Specified)
You did not specify a valid for the C<file_name> argument.
@@ -2206,10 +2188,15 @@ You did not specify a valid for the C<file_name> argument.
You did not specify a value for the C<summary> argument.
-=item 605 (URL Attaching Disabled)
+=back
+
+=item B<History>
+
+=over
+
+=item Added in Bugzilla B<4.0>.
-You attempted to attach a URL, setting C<is_url> to True,
-but this Bugzilla does not support attaching URLs.
+=item The C<is_url> parameter was removed in Bugzilla B<4.2>.
=back
diff --git a/Bugzilla/WebService/Constants.pm b/Bugzilla/WebService/Constants.pm
index aec2b9855..f77c54c85 100644
--- a/Bugzilla/WebService/Constants.pm
+++ b/Bugzilla/WebService/Constants.pm
@@ -124,10 +124,10 @@ use constant WS_ERROR_CODE => {
# Attachment errors are 600-700.
file_too_large => 600,
invalid_content_type => 601,
- attachment_illegal_url => 602,
+ # Error 602 attachment_illegal_url no longer exists.
file_not_specified => 603,
missing_attachment_description => 604,
- attachment_url_disabled => 605,
+ # Error 605 attachment_url_disabled no longer exists.
# Errors thrown by the WebService itself. The ones that are negative
# conform to http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php
diff --git a/attachment.cgi b/attachment.cgi
index ca82bc463..5bb2a8537 100755
--- a/attachment.cgi
+++ b/attachment.cgi
@@ -478,12 +478,11 @@ sub insert {
my $attachment = Bugzilla::Attachment->create(
{bug => $bug,
creation_ts => $timestamp,
- data => scalar $cgi->param('attachurl') || $cgi->upload('data'),
+ data => scalar $cgi->param('attach_text') || $cgi->upload('data'),
description => scalar $cgi->param('description'),
- filename => $cgi->param('attachurl') ? '' : scalar $cgi->upload('data'),
+ filename => $cgi->param('attach_text') ? 'attachment.txt' : scalar $cgi->upload('data'),
ispatch => scalar $cgi->param('ispatch'),
isprivate => scalar $cgi->param('isprivate'),
- isurl => scalar $cgi->param('attachurl'),
mimetype => $content_type,
});
diff --git a/bugzilla.dtd b/bugzilla.dtd
index b449d6ba4..2fa990494 100644
--- a/bugzilla.dtd
+++ b/bugzilla.dtd
@@ -64,7 +64,6 @@
isobsolete (0|1) #IMPLIED
ispatch (0|1) #IMPLIED
isprivate (0|1) #IMPLIED
- isurl (0|1) #IMPLIED
>
<!ELEMENT attachid (#PCDATA)>
<!ELEMENT date (#PCDATA)>
diff --git a/docs/en/xml/using.xml b/docs/en/xml/using.xml
index 23207938e..0dbff34bc 100644
--- a/docs/en/xml/using.xml
+++ b/docs/en/xml/using.xml
@@ -862,14 +862,20 @@
</para>
<para>
- Also, if the administrator turned on the <quote>allow_attach_url</quote>
- parameter, you can enter the URL pointing to the attachment instead of
+ Also, you can enter the URL pointing to the attachment instead of
uploading the attachment itself. For example, this is useful if you want to
point to an external application, a website or a very large file. Note that
there is no guarantee that the source file will always be available, nor
that its content will remain unchanged.
</para>
+ <para>
+ Another way to attach data is to paste text directly in the text field,
+ and Bugzilla will convert it into an attachment. This is pretty useful
+ when you do copy and paste, and you don't want to put the text in a temporary
+ file first.
+ </para>
+
<section id="patchviewer">
<title>Patch Viewer</title>
diff --git a/js/attachment.js b/js/attachment.js
index 314e4acb1..dfa6d472d 100644
--- a/js/attachment.js
+++ b/js/attachment.js
@@ -53,13 +53,13 @@ function setContentTypeDisabledState(form)
form.contenttypeentry.disabled = isdisabled;
}
-function URLFieldHandler() {
- var field_attachurl = document.getElementById("attachurl");
+function TextFieldHandler() {
+ var field_text = document.getElementById("attach_text");
var greyfields = new Array("data", "ispatch", "autodetect",
"list", "manual", "contenttypeselection",
"contenttypeentry");
var i, thisfield;
- if (field_attachurl.value.match(/^\s*$/)) {
+ if (field_text.value.match(/^\s*$/)) {
for (i = 0; i < greyfields.length; i++) {
thisfield = document.getElementById(greyfields[i]);
if (thisfield) {
@@ -78,7 +78,7 @@ function URLFieldHandler() {
function DataFieldHandler() {
var field_data = document.getElementById("data");
- var greyfields = new Array("attachurl");
+ var greyfields = new Array("attach_text");
var i, thisfield;
if (field_data.value.match(/^\s*$/)) {
for (i = 0; i < greyfields.length; i++) {
@@ -102,9 +102,9 @@ function clearAttachmentFields() {
document.getElementById('data').value = '';
DataFieldHandler();
- if ((element = document.getElementById('attachurl'))) {
+ if ((element = document.getElementById('attach_text'))) {
element.value = '';
- URLFieldHandler();
+ TextFieldHandler();
}
document.getElementById('description').value = '';
/* Fire onchange so that the disabled state of the content-type
diff --git a/post_bug.cgi b/post_bug.cgi
index 956856b12..74d26af2b 100755
--- a/post_bug.cgi
+++ b/post_bug.cgi
@@ -183,7 +183,7 @@ if (defined $cgi->param('version')) {
# after the bug is filed.
# Add an attachment if requested.
-if (defined($cgi->upload('data')) || $cgi->param('attachurl')) {
+if (defined($cgi->upload('data')) || $cgi->param('attach_text')) {
$cgi->param('isprivate', $cgi->param('commentprivacy'));
# Must be called before create() as it may alter $cgi->param('ispatch').
@@ -198,12 +198,11 @@ if (defined($cgi->upload('data')) || $cgi->param('attachurl')) {
$attachment = Bugzilla::Attachment->create(
{bug => $bug,
creation_ts => $timestamp,
- data => scalar $cgi->param('attachurl') || $cgi->upload('data'),
+ data => scalar $cgi->param('attach_text') || $cgi->upload('data'),
description => scalar $cgi->param('description'),
- filename => $cgi->param('attachurl') ? '' : scalar $cgi->upload('data'),
+ filename => $cgi->param('attach_text') ? 'attachment.txt' : scalar $cgi->upload('data'),
ispatch => scalar $cgi->param('ispatch'),
isprivate => scalar $cgi->param('isprivate'),
- isurl => scalar $cgi->param('attachurl'),
mimetype => $content_type,
});
};
diff --git a/template/en/default/admin/params/attachment.html.tmpl b/template/en/default/admin/params/attachment.html.tmpl
index 159588625..69f62e9be 100644
--- a/template/en/default/admin/params/attachment.html.tmpl
+++ b/template/en/default/admin/params/attachment.html.tmpl
@@ -60,10 +60,6 @@
allow_attachment_deletion => "If this option is on, administrators will be able to delete " _
"the content of attachments.",
- allow_attach_url => "If this option is on, it will be possible to " _
- "specify a URL when creating an attachment and " _
- "treat the URL itself as if it were an attachment.",
-
maxattachmentsize => "The maximum size (in kilobytes) of attachments to be stored " _
"in the database. If a file larger than this size is attached " _
"to ${terms.abug}, $terms.Bugzilla will look at the " _
diff --git a/template/en/default/attachment/create.html.tmpl b/template/en/default/attachment/create.html.tmpl
index f440f4583..7ca4d4bba 100644
--- a/template/en/default/attachment/create.html.tmpl
+++ b/template/en/default/attachment/create.html.tmpl
@@ -34,10 +34,16 @@
header = header
subheader = subheader
style_urls = [ 'skins/standard/attachment.css' ]
- javascript_urls = [ "js/attachment.js", "js/util.js" ]
+ javascript_urls = [ "js/attachment.js", "js/util.js", "js/TUI.js" ]
doc_section = "attachments.html"
%]
+<script type="text/javascript">
+<!--
+TUI_hide_default('attachment_text_field');
+-->
+</script>
+
<form name="entryform" method="post" action="attachment.cgi"
enctype="multipart/form-data"
onsubmit="return validateAttachmentForm(this)">
diff --git a/template/en/default/attachment/createformcontents.html.tmpl b/template/en/default/attachment/createformcontents.html.tmpl
index ad3a25bc6..9d2fa9f48 100644
--- a/template/en/default/attachment/createformcontents.html.tmpl
+++ b/template/en/default/attachment/createformcontents.html.tmpl
@@ -21,29 +21,27 @@
# Marc Schumann <wurblzap@gmail.com>
#%]
-<tr>
+<tr class="attachment_data">
<th><label for="data">File</label>:</th>
<td>
- <em>Enter the path to the file on your computer.</em><br>
- <input type="file" id="data" name="data" size="50"
- [% IF Param("allow_attach_url") %]
- onchange="DataFieldHandler()"
- [% END %]
- >
+ <em>Enter the path to the file on your computer</em> (or
+ <a id="attachment_data_controller" href="javascript:TUI_toggle_class('attachment_text_field');
+ javascript:TUI_toggle_class('attachment_data')"
+ >paste text as attachment</a>).<br>
+ <input type="file" id="data" name="data" size="50" onchange="DataFieldHandler()">
</td>
</tr>
-[% IF Param("allow_attach_url") %]
-<tr class="expert_fields">
- <th><label for="attachurl">AttachURL</label>:</th>
+<tr class="attachment_text_field">
+ <th><label for="attach_text">File</label>:</th>
<td>
- <em>URL to be attached instead.</em><br>
- <input type="text" id="attachurl" name="attachurl" size="60"
- maxlength="2000"
- onkeyup="URLFieldHandler()" onblur="URLFieldHandler()">
+ <em>Paste the text to be added as an attachment</em> (or
+ <a id="attachment_text_field_controller" href="javascript:TUI_toggle_class('attachment_text_field');
+ javascript:TUI_toggle_class('attachment_data')"
+ >attach a file</a>).<br>
+ <textarea id="attach_text" name="attach_text" cols="80" rows="15"
+ onkeyup="TextFieldHandler()" onblur="TextFieldHandler()"></textarea>
</td>
</tr>
-</tbody>
-[% END %]
<tr>
<th><label for="description">Description</label>:</th>
<td>
diff --git a/template/en/default/attachment/edit.html.tmpl b/template/en/default/attachment/edit.html.tmpl
index 6a98a7f05..d1861a7d3 100644
--- a/template/en/default/attachment/edit.html.tmpl
+++ b/template/en/default/attachment/edit.html.tmpl
@@ -68,19 +68,17 @@
<span class="bz_edit">(<a href="javascript:toggle_attachment_details_visibility()">edit</a>)</span>
[% END %]
</div>
- [% IF NOT attachment.isurl %]
- <div class="details">
- [% attachment.filename FILTER html %] ([% attachment.contenttype FILTER html %])
- [% IF attachment.datasize %]
- [%+ attachment.datasize FILTER unitconvert %]
- [% ELSE %]
- <em>deleted</em>
- [% END %], created by [%+ INCLUDE global/user.html.tmpl who = attachment.attacher %]
- [% IF attachment.isprivate %]
- <span class="bz_private">Only visible to <strong>[% Param('insidergroup') FILTER html %]</strong></span>
- [% END %]
- </div>
- [% END %]
+ <div class="details">
+ [% attachment.filename FILTER html %] ([% attachment.contenttype FILTER html %])
+ [% IF attachment.datasize %]
+ [%+ attachment.datasize FILTER unitconvert %]
+ [% ELSE %]
+ <em>deleted</em>
+ [% END %], created by [%+ INCLUDE global/user.html.tmpl who = attachment.attacher %]
+ [% IF attachment.isprivate %]
+ <span class="bz_private">Only visible to <strong>[% Param('insidergroup') FILTER html %]</strong></span>
+ [% END %]
+ </div>
</div>
<div id="attachment_information_edit">
<span class="bz_hide">
@@ -99,12 +97,6 @@
%]
</div>
- [% IF attachment.isurl %]
- <input type="hidden" name="filename"
- value="[% attachment.filename FILTER html %]">
- <input type="hidden" name="contenttypeentry"
- value="[% attachment.contenttype FILTER html %]">
- [% ELSE %]
<div id="attachment_filename">
<label for="filename">Filename:</label>
<input type="text" size="20" class="text block[% editable_or_hide %]"
@@ -138,7 +130,7 @@
[%+ 'checked="checked"' IF attachment.ispatch %]>
<label for="ispatch">patch</label>
</div>
- [% END %]
+
<div class="readonly">
<div class="checkboxes">
<div id="attachment_isobsolete">
@@ -168,18 +160,6 @@
<div id="attachment_view_window">
[% IF !attachment.datasize %]
<div><b>The content of this attachment has been deleted.</b></div>
- [% ELSIF attachment.isurl %]
- <div>
- <a href="[% attachment.data FILTER html %]">
- [% IF attachment.datasize < 120 %]
- [% attachment.data FILTER html %]
- [% ELSE %]
- [% attachment.data FILTER truncate(80) FILTER html %]
- &nbsp;...
- [% attachment.data.match(".*(.{20})$").0 FILTER html %]
- [% END %]
- </a>
- </div>
[% ELSIF !Param("allow_attachment_display") %]
<div id="view_disabled" >
<p><b>
diff --git a/template/en/default/attachment/list.html.tmpl b/template/en/default/attachment/list.html.tmpl
index 89eef1836..33d9a6c04 100644
--- a/template/en/default/attachment/list.html.tmpl
+++ b/template/en/default/attachment/list.html.tmpl
@@ -68,9 +68,8 @@ function toggle_display(link) {
[% obsolete_attachments = obsolete_attachments + 1 %]
[% END %]
<tr id="a[% count %]" class="[% "bz_contenttype_" _ attachment.contenttype
- FILTER css_class_quote UNLESS attachment.isurl %]
+ FILTER css_class_quote %]
[% " bz_patch" IF attachment.ispatch %]
- [% " bz_url" IF attachment.isurl %]
[% " bz_private" IF attachment.isprivate %]
[% " bz_tr_obsolete bz_default_hidden"
IF attachment.isobsolete %]">
@@ -87,8 +86,6 @@ function toggle_display(link) {
([% attachment.datasize FILTER unitconvert %],
[% IF attachment.ispatch %]
patch)
- [% ELSIF attachment.isurl %]
- url)
[% ELSE %]
[%+ attachment.contenttype FILTER html %])
[% END %]
diff --git a/template/en/default/bug/create/create.html.tmpl b/template/en/default/bug/create/create.html.tmpl
index 43fa1646e..425d82343 100644
--- a/template/en/default/bug/create/create.html.tmpl
+++ b/template/en/default/bug/create/create.html.tmpl
@@ -170,7 +170,8 @@ TUI_alternates['expert_fields'] = 'Show Advanced Fields';
// Hide the Advanced Fields by default, unless the user has a cookie
// that specifies otherwise.
TUI_hide_default('expert_fields');
-
+// Also hide the "Paste text as attachment" textarea by default.
+TUI_hide_default('attachment_text_field');
-->
</script>
diff --git a/template/en/default/bug/show.xml.tmpl b/template/en/default/bug/show.xml.tmpl
index 2349602dc..152f3e0a9 100644
--- a/template/en/default/bug/show.xml.tmpl
+++ b/template/en/default/bug/show.xml.tmpl
@@ -89,7 +89,6 @@
isobsolete="[% a.isobsolete FILTER xml %]"
ispatch="[% a.ispatch FILTER xml %]"
isprivate="[% a.isprivate FILTER xml %]"
- isurl="[% a.isurl FILTER xml %]"
>
<attachid>[% a.id %]</attachid>
<date>[% a.attached FILTER time("%Y-%m-%d %T %z") FILTER xml %]</date>
diff --git a/template/en/default/global/code-error.html.tmpl b/template/en/default/global/code-error.html.tmpl
index dd05c239a..e507c584f 100644
--- a/template/en/default/global/code-error.html.tmpl
+++ b/template/en/default/global/code-error.html.tmpl
@@ -37,11 +37,7 @@
[% DEFAULT title = "Internal Error" %]
[% error_message = BLOCK %]
- [% IF error == "attachment_url_disabled" %]
- [% title = "Attachment URL Disabled" %]
- You cannot attach a URL. This feature is currently disabled.
-
- [% ELSIF error == "auth_invalid_email" %]
+ [% IF error == "auth_invalid_email" %]
[% title = "Invalid Email Address" %]
We received an email address (<b>[% addr FILTER html %]</b>)
that didn't pass our syntax checking for a legal email address,
diff --git a/template/en/default/global/field-descs.none.tmpl b/template/en/default/global/field-descs.none.tmpl
index 2ef558ce4..741eecf83 100644
--- a/template/en/default/global/field-descs.none.tmpl
+++ b/template/en/default/global/field-descs.none.tmpl
@@ -108,7 +108,6 @@
"attachments.ispatch" => "Attachment is patch",
"attachments.isobsolete" => "Attachment is obsolete",
"attachments.isprivate" => "Attachment is private",
- "attachments.isurl" => "Attachment is a URL",
"attachments.submitter" => "Attachment creator",
"blocked" => "Blocks",
"bug_file_loc" => "URL",
diff --git a/template/en/default/global/user-error.html.tmpl b/template/en/default/global/user-error.html.tmpl
index 0f094b3a5..8380f7f0c 100644
--- a/template/en/default/global/user-error.html.tmpl
+++ b/template/en/default/global/user-error.html.tmpl
@@ -222,11 +222,6 @@
[% title = "Attachment Deletion Disabled" %]
Attachment deletion is disabled on this installation.
- [% ELSIF error == "attachment_illegal_url" %]
- [% title = "Illegal Attachment URL" %]
- <em>[% url FILTER html %]</em> is not a legal URL for attachments.
- It must start either with http://, https:// or ftp://.
-
[% ELSIF error == "attachment_removed" %]
[% title = "Attachment Removed" %]
The attachment you are attempting to access has been removed.
@@ -582,13 +577,8 @@
[%# Hack to get the max value between both limits %]
[%+ max_limit.nsort.last FILTER html %] KB. <br>
We recommend that you store your attachment elsewhere
- [% IF Param("allow_attach_url") %]
- and then specify the URL to this file on the attachment
- creation page in the <b>AttachURL</b> field.
- [% ELSE %]
- and then insert the URL to it in a comment, or in the URL field
- for this [% terms.bug %].
- [% END %]
+ and then paste the URL to this file on the attachment
+ creation page in the appropriate text field.
<br>Alternately, if your attachment is an image, you could convert
it to a compressible format like JPG or PNG and try again.
diff --git a/xt/lib/Bugzilla/Test/Search/Constants.pm b/xt/lib/Bugzilla/Test/Search/Constants.pm
index 2b3534f8b..b509cf76b 100644
--- a/xt/lib/Bugzilla/Test/Search/Constants.pm
+++ b/xt/lib/Bugzilla/Test/Search/Constants.pm
@@ -128,13 +128,8 @@ use constant FLAG_FIELDS => {
# These are fields that we don't test. Test::More will mark these
# "TODO & SKIP", and not run tests for them at all.
#
-# attachments.isurl can't easily be supported by us, but it's basically
-# identical to isprivate and isobsolete for searching, so that's not a big
-# loss.
-#
# We don't support days_elapsed or owner_idle_time yet.
use constant SKIP_FIELDS => qw(
- attachments.isurl
owner_idle_time
days_elapsed
);
@@ -1183,7 +1178,6 @@ use constant INJECTION_BROKEN_FIELD => {
'attachments.isobsolete' => { db_skip => ['Pg'] },
'attachments.ispatch' => { db_skip => ['Pg'] },
'attachments.isprivate' => { db_skip => ['Pg'] },
- 'attachments.isurl' => { db_skip => ['Pg'] },
blocked => { db_skip => ['Pg'] },
bug_id => { db_skip => ['Pg'] },
cclist_accessible => { db_skip => ['Pg'] },