Commit 61ac61f0 authored by mkanat%bugzilla.org's avatar mkanat%bugzilla.org

Bug 357315: Add the ability to create <textarea> fields

Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=LpSolit
parent e2ced369
...@@ -120,6 +120,7 @@ use File::Basename; ...@@ -120,6 +120,7 @@ use File::Basename;
FIELD_TYPE_FREETEXT FIELD_TYPE_FREETEXT
FIELD_TYPE_SINGLE_SELECT FIELD_TYPE_SINGLE_SELECT
FIELD_TYPE_MULTI_SELECT FIELD_TYPE_MULTI_SELECT
FIELD_TYPE_TEXTAREA
USAGE_MODE_BROWSER USAGE_MODE_BROWSER
USAGE_MODE_CMDLINE USAGE_MODE_CMDLINE
...@@ -342,6 +343,7 @@ use constant FIELD_TYPE_UNKNOWN => 0; ...@@ -342,6 +343,7 @@ use constant FIELD_TYPE_UNKNOWN => 0;
use constant FIELD_TYPE_FREETEXT => 1; use constant FIELD_TYPE_FREETEXT => 1;
use constant FIELD_TYPE_SINGLE_SELECT => 2; use constant FIELD_TYPE_SINGLE_SELECT => 2;
use constant FIELD_TYPE_MULTI_SELECT => 3; use constant FIELD_TYPE_MULTI_SELECT => 3;
use constant FIELD_TYPE_TEXTAREA => 4;
# The maximum number of days a token will remain valid. # The maximum number of days a token will remain valid.
use constant MAX_TOKEN_AGE => 3; use constant MAX_TOKEN_AGE => 3;
......
...@@ -126,6 +126,7 @@ use constant SQL_DEFINITIONS => { ...@@ -126,6 +126,7 @@ use constant SQL_DEFINITIONS => {
FIELD_TYPE_FREETEXT, { TYPE => 'varchar(255)' }, FIELD_TYPE_FREETEXT, { TYPE => 'varchar(255)' },
FIELD_TYPE_SINGLE_SELECT, { TYPE => 'varchar(64)', NOTNULL => 1, FIELD_TYPE_SINGLE_SELECT, { TYPE => 'varchar(64)', NOTNULL => 1,
DEFAULT => "'---'" }, DEFAULT => "'---'" },
FIELD_TYPE_TEXTAREA, { TYPE => 'MEDIUMTEXT' },
}; };
# Field definitions for the fields that ship with Bugzilla. # Field definitions for the fields that ship with Bugzilla.
...@@ -254,7 +255,7 @@ sub _check_type { ...@@ -254,7 +255,7 @@ sub _check_type {
my $saved_type = $type; my $saved_type = $type;
# The constant here should be updated every time a new, # The constant here should be updated every time a new,
# higher field type is added. # higher field type is added.
(detaint_natural($type) && $type <= FIELD_TYPE_MULTI_SELECT) (detaint_natural($type) && $type <= FIELD_TYPE_TEXTAREA)
|| ThrowCodeError('invalid_customfield_type', { type => $saved_type }); || ThrowCodeError('invalid_customfield_type', { type => $saved_type });
return $type; return $type;
} }
......
...@@ -665,7 +665,11 @@ sub create { ...@@ -665,7 +665,11 @@ sub create {
}, },
# Wrap a displayed comment to the appropriate length # Wrap a displayed comment to the appropriate length
wrap_comment => \&Bugzilla::Util::wrap_comment, wrap_comment => [
sub {
my ($context, $cols) = @_;
return sub { wrap_comment($_[0], $cols) }
}, 1],
# We force filtering of every variable in key security-critical # We force filtering of every variable in key security-critical
# places; we have a none filter for people to use when they # places; we have a none filter for people to use when they
......
...@@ -312,11 +312,11 @@ sub diff_strings { ...@@ -312,11 +312,11 @@ sub diff_strings {
} }
sub wrap_comment { sub wrap_comment {
my ($comment) = @_; my ($comment, $cols) = @_;
my $wrappedcomment = ""; my $wrappedcomment = "";
# Use 'local', as recommended by Text::Wrap's perldoc. # Use 'local', as recommended by Text::Wrap's perldoc.
local $Text::Wrap::columns = COMMENT_COLS; local $Text::Wrap::columns = $cols || COMMENT_COLS;
# Make words that are longer than COMMENT_COLS not wrap. # Make words that are longer than COMMENT_COLS not wrap.
local $Text::Wrap::huge = 'overflow'; local $Text::Wrap::huge = 'overflow';
# Don't mess with tabs. # Don't mess with tabs.
...@@ -332,6 +332,7 @@ sub wrap_comment { ...@@ -332,6 +332,7 @@ sub wrap_comment {
} }
} }
chomp($wrappedcomment); # Text::Wrap adds an extra newline at the end.
return $wrappedcomment; return $wrappedcomment;
} }
......
...@@ -317,6 +317,12 @@ dl dl > dt { ...@@ -317,6 +317,12 @@ dl dl > dt {
padding-left: 1em; padding-left: 1em;
} }
/* For bug fields */
.uneditable_textarea {
white-space: pre;
font-family: monospace;
}
div.user_match { div.user_match {
margin-bottom: 1em; margin-bottom: 1em;
} }
......
...@@ -76,7 +76,14 @@ ...@@ -76,7 +76,14 @@
[% IF field.type == constants.FIELD_TYPE_MULTI_SELECT %] [% IF field.type == constants.FIELD_TYPE_MULTI_SELECT %]
<input type="hidden" name="defined_[% field.name FILTER html %]"> <input type="hidden" name="defined_[% field.name FILTER html %]">
[% END %] [% END %]
[% CASE constants.FIELD_TYPE_TEXTAREA %]
[% INCLUDE global/textarea.html.tmpl
id = field.name name = field.name minrows = 4 maxrows = 8
cols = 60 defaultcontent = value %]
[% END %] [% END %]
[% ELSIF field.type == constants.FIELD_TYPE_TEXTAREA %]
<div class="uneditable_textarea">[% value FILTER wrap_comment(60)
FILTER html %]</div>
[% ELSE %] [% ELSE %]
[% value.join(', ') FILTER html %] [% value.join(', ') FILTER html %]
[% END %] [% END %]
......
...@@ -82,6 +82,7 @@ ...@@ -82,6 +82,7 @@
${constants.FIELD_TYPE_FREETEXT} => "Free Text", ${constants.FIELD_TYPE_FREETEXT} => "Free Text",
${constants.FIELD_TYPE_SINGLE_SELECT} => "Drop Down", ${constants.FIELD_TYPE_SINGLE_SELECT} => "Drop Down",
${constants.FIELD_TYPE_MULTI_SELECT} => "Multiple-Selection Box", ${constants.FIELD_TYPE_MULTI_SELECT} => "Multiple-Selection Box",
${constants.FIELD_TYPE_TEXTAREA} => "Large Text Box",
} %] } %]
[% status_descs = { "UNCONFIRMED" => "UNCONFIRMED", [% status_descs = { "UNCONFIRMED" => "UNCONFIRMED",
......
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