X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Fshare%2Fhtml%2FElements%2FValidateCustomFields;h=e1f744ff549101adfcdd291532caa09a70434c52;hb=44dd00a3ff974a17999e86e64488e996edc71e3c;hp=0253e1cbcdb5cdecf6adc26a1605466c8cb58014;hpb=b4b0c7e72d7eaee2fbfc7022022c9698323203dd;p=freeside.git diff --git a/rt/share/html/Elements/ValidateCustomFields b/rt/share/html/Elements/ValidateCustomFields index 0253e1cbc..e1f744ff5 100644 --- a/rt/share/html/Elements/ValidateCustomFields +++ b/rt/share/html/Elements/ValidateCustomFields @@ -1,40 +1,40 @@ %# BEGIN BPS TAGGED BLOCK {{{ -%# +%# %# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# +%# +%# This software is Copyright (c) 1996-2019 Best Practical Solutions, LLC +%# +%# %# (Except where explicitly superseded by other copyright notices) -%# -%# +%# +%# %# LICENSE: -%# +%# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. -%# +%# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. -%# +%# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# +%# +%# %# CONTRIBUTION SUBMISSION POLICY: -%# +%# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) -%# +%# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that @@ -43,50 +43,72 @@ %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. -%# +%# %# END BPS TAGGED BLOCK }}} <%INIT> my ($valid, @res) = (1, ()); $CustomFields->GotoFirstItem; + +my $CFArgs = _ParseObjectCustomFieldArgs( $ARGSRef )->{ref($Object)}{$Object->Id || 0} || {}; + while ( my $CF = $CustomFields->Next ) { - my $field = $NamePrefix . $CF->Id . "-Value"; + my $submitted = $CFArgs->{$CF->Id}; + # Pick the first grouping + $submitted = $submitted ? $submitted->{(keys %$submitted)[0]} : {}; - my $value; - if ($ARGSRef->{"${field}s-Magic"} and exists $ARGSRef->{"${field}s"}) { - $value = $ARGSRef->{"${field}s"}; + # If we don't have a value and we don't see the Magic, then we're not + # submitting a field. + next if not $ValidateUnsubmitted + and not exists $submitted->{"Value"} + and not exists $submitted->{"Upload"} + and not exists $submitted->{"Values"} + and not $submitted->{"Values-Magic"}; - # We only validate Single Combos -- multis can never be user input - next if ref $value; - } - else { - $value = $ARGSRef->{$field}; - } - $m->notes(('Field-' . $CF->Id) => $value); + # We only validate Single Combos -- multis can never be user input + next if $submitted->{"Values-Magic"} and exists $submitted->{"Values"} + and ref $submitted->{"Values"}; - my @values = (); - if ( ref $value eq 'ARRAY' ) { - @values = @$value; - } elsif ( $CF->Type =~ /text/i ) { - @values = ($value); - } else { - @values = split /\r*\n/, ( defined $value ? $value : ''); + $m->notes(('Field-' . $CF->Id) => $submitted->{Values} // $submitted->{Value}); + + my @values = _NormalizeObjectCustomFieldValue( + CustomField => $CF, + Value => ($submitted->{Values} // $submitted->{Value} // $submitted->{Upload}), + ); + if ($CF->Type =~ /^Date(?:Time)?$/) { + if (not @values) { + my $values = $Object->CustomFieldValues($CF->Id); + while (my $ocfv = $values->Next) { + push @values, $ocfv->Content; + } + } + @values = grep { + my $DateObj = RT::Date->new ( $session{'CurrentUser'} ); + $DateObj->Set( + Format => 'unknown', + Value => $_, + ($CF->Type eq "Date" ? (Timezone => 'utc') : ()) + ); + $DateObj->IsSet + } @values; } - @values = grep $_ ne '', - map { - s/\r+\n/\n/g; - s/^\s+//; - s/\s+$//; - $_; + push @values, '' unless @values; + + for my $value( @values ) { + if ($value) { + my $ref = { Content => $value }; + my ($ok, $msg) = $CF->_CanonicalizeValue( $ref ); + unless ($ok) { + $m->notes( ( 'InvalidField-' . $CF->Id ) => $msg ); + push @res, $CF->Name .': '. $msg; + $valid = 0; + } } - grep defined, @values; - @values = ('') unless @values; - foreach my $value( @values ) { next if $CF->MatchPattern($value); my $msg = loc("Input must match [_1]", $CF->FriendlyPattern); $m->notes( ('InvalidField-' . $CF->Id) => $msg ); - push @res, $msg; + push @res, $CF->Name .': '. $msg; $valid = 0; } } @@ -94,7 +116,8 @@ $m->notes('ValidFields', $valid); return wantarray? ($valid, @res): $valid; <%ARGS> +$Object => RT::Ticket->new( $session{'CurrentUser'}) $CustomFields $ARGSRef -$NamePrefix => "Object-RT::Ticket--CustomField-" +$ValidateUnsubmitted => 0