Commit 3776f86e authored by Simon Green's avatar Simon Green

Bug 466178 - Add an INTEGER custom field type

r=glob, a=justdave
parent 64f44ef1
......@@ -158,6 +158,9 @@ sub VALIDATORS {
elsif ($field->type == FIELD_TYPE_TEXTAREA) {
$validator = \&_check_textarea_field;
}
elsif ($field->type == FIELD_TYPE_INTEGER) {
$validator = \&_check_integer_field;
}
else {
$validator = \&_check_default_field;
}
......@@ -2110,6 +2113,27 @@ sub _check_textarea_field {
return $text;
}
sub _check_integer_field {
my ($invocant, $value, $field) = @_;
$value = defined($value) ? trim($value) : '';
if ($value eq '') {
return 0;
}
my $orig_value = $value;
if (!detaint_signed($value)) {
ThrowUserError("number_not_integer",
{field => $field, num => $orig_value});
}
elsif ($value > MAX_INT_32) {
ThrowUserError("number_too_large",
{field => $field, num => $orig_value, max_num => MAX_INT_32});
}
return $value;
}
sub _check_relationship_loop {
# Generates a dependency tree for a given bug. Calls itself recursively
# to generate sub-trees for the bug's dependencies.
......
......@@ -111,8 +111,9 @@ use Memoize;
FIELD_TYPE_BUG_ID
FIELD_TYPE_BUG_URLS
FIELD_TYPE_KEYWORDS
FIELD_TYPE_INTEGER
FIELD_TYPE_HIGHEST_PLUS_ONE
EMPTY_DATETIME_REGEX
ABNORMAL_SELECTS
......@@ -398,9 +399,10 @@ use constant FIELD_TYPE_BUG_ID => 6;
use constant FIELD_TYPE_BUG_URLS => 7;
use constant FIELD_TYPE_KEYWORDS => 8;
use constant FIELD_TYPE_DATE => 9;
use constant FIELD_TYPE_INTEGER => 10;
# Add new field types above this line, and change the below value in the
# obvious fashion
use constant FIELD_TYPE_HIGHEST_PLUS_ONE => 10;
use constant FIELD_TYPE_HIGHEST_PLUS_ONE => 11;
use constant EMPTY_DATETIME_REGEX => qr/^[0\-:\sA-Za-z]+$/;
......
......@@ -153,6 +153,7 @@ use constant SQL_DEFINITIONS => {
FIELD_TYPE_DATETIME, { TYPE => 'DATETIME' },
FIELD_TYPE_DATE, { TYPE => 'DATE' },
FIELD_TYPE_BUG_ID, { TYPE => 'INT3' },
FIELD_TYPE_INTEGER, { TYPE => 'INT4', NOTNULL => 1, DEFAULT => 0 },
};
# Field definitions for the fields that ship with Bugzilla.
......
......@@ -35,11 +35,13 @@
[% Hook.process('start_field_column') %]
[% IF editable %]
[% SWITCH field.type %]
[% CASE constants.FIELD_TYPE_FREETEXT %]
[% CASE [ constants.FIELD_TYPE_FREETEXT
constants.FIELD_TYPE_INTEGER ] %]
<input id="[% field.name FILTER html %]" class="text_input"
name="[% field.name FILTER html %]"
value="[% value FILTER html %]" size="40"
maxlength="[% constants.MAX_FREETEXT_LENGTH FILTER none %]"
[% ' pattern="\d+"' IF field.type == constants.FIELD_TYPE_INTEGER %]
[% ' aria-required="true"' IF field.is_mandatory %]>
[% CASE [constants.FIELD_TYPE_DATETIME, constants.FIELD_TYPE_DATE] %]
[% size = (field.type == constants.FIELD_TYPE_DATE) ? 10 : 20 %]
......
......@@ -41,6 +41,7 @@
[% field_types = { ${constants.FIELD_TYPE_UNKNOWN} => "Unknown Type",
${constants.FIELD_TYPE_FREETEXT} => "Free Text",
${constants.FIELD_TYPE_INTEGER} => "Integer",
${constants.FIELD_TYPE_SINGLE_SELECT} => "Drop Down",
${constants.FIELD_TYPE_MULTI_SELECT} => "Multiple-Selection Box",
${constants.FIELD_TYPE_TEXTAREA} => "Large Text Box",
......
......@@ -1366,6 +1366,12 @@
Either no products have been defined to enter [% terms.bugs %] against or you have not
been given access to any.
[% ELSIF error == "number_not_integer" %]
[% title = "Integer Value Required" %]
The value '[% num FILTER html %]' in the
<em>[% field_descs.$field FILTER html %]</em> field
is not an integer value (i.e. a whole number).
[% ELSIF error == "number_not_numeric" %]
[% title = "Numeric Value Required" %]
The value '[% num FILTER html %]' in the
......
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