richter 02/03/06 07:24:22
Modified: Embperl/Form Tag: Embperl2c Validate.pm
Embperl/Form/Validate/Rules Tag: Embperl2c Default.pm
eg/web/db Tag: Embperl2c addsel.epl
Log:
form validation
Revision Changes Path
No revision
No revision
1.1.2.7 +218 -23 embperl/Embperl/Form/Attic/Validate.pm
Index: Validate.pm
===================================================================
RCS file: /home/cvs/embperl/Embperl/Form/Attic/Validate.pm,v
retrieving revision 1.1.2.6
retrieving revision 1.1.2.7
diff -u -r1.1.2.6 -r1.1.2.7
--- Validate.pm 5 Mar 2002 21:55:23 -0000 1.1.2.6
+++ Validate.pm 6 Mar 2002 15:24:22 -0000 1.1.2.7
@@ -10,7 +10,7 @@
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
-# $Id: Validate.pm,v 1.1.2.6 2002/03/05 21:55:23 richter Exp $
+# $Id: Validate.pm,v 1.1.2.7 2002/03/06 15:24:22 richter Exp $
#
###################################################################################
@@ -20,7 +20,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = q$Id: Validate.pm,v 1.1.2.6 2002/03/05 21:55:23 richter Exp $;
+$VERSION = q$Id: Validate.pm,v 1.1.2.7 2002/03/06 15:24:22 richter Exp $;
=head1 NAME
@@ -349,7 +349,7 @@
$typeobj = $self -> newtype ($type) ;
foreach my $k (@$keys)
{
- $status = $typeobj -> validate ($k, $fdat -> {$name}, $frules,
\$i, $fdat, $pref) ;
+ $status = $typeobj -> validate ($k, $fdat -> {$k}, $frules, \$i,
$fdat, $pref) ;
last if (!$status) ;
}
}
@@ -372,24 +372,8 @@
{
if (@$status)
{
- my $txt ;
my $id = $status -> [0] ;
-
- my $n = $key ;
- $n = $frules -> [$name] if ($name) ;
- $status -> [0] = ref $n ? ($n -> {$language} || $n ->
{$default_language} || (each %$n)[1] || $key):$n ;
-
- if ($msg)
- {
- my $m = $frules -> [$msg] ;
- $txt = ref $m ? ($m -> {$language} || $m -> {$default_language}
|| (each %$m)[1] || undef):$m ;
- }
- else
- {
- $txt = $typeobj -> getmsg ($id, $language, $default_language) ;
- }
-
- push @$result, { id => $id, key => $key, ($txt?(msg => $txt):()),
param => $status} ;
+ push @$result, { typeobj => $typeobj, id => $id, key => $key,
($name?(name => $frules -> [$name]):()), ($msg?(msg => $frules -> [$msg]):()), param
=> $status} ;
}
last if (!$param{cont})
}
@@ -411,9 +395,51 @@
}
+sub build_message
+ {
+ my ($self, $id, $key, $name, $msg, $param, $typeobj, $pref, $epreq) = @_ ;
+
+ my $language = $pref -> {language} ;
+ my $default_language = $pref -> {default_language} ;
+ my $txt ;
+
+ my $name ||= $key ;
+ if (ref $name eq 'ARRAY')
+ {
+ my @names ;
+ foreach my $n (@$name)
+ {
+ push @names, ref $n ? ($n -> {$language} || $n -> {$default_language}
|| (each %$n)[1] || $key):$n ;
+ }
+ $name = join (', ', @names) ;
+ }
+ else
+ {
+ $name = ref $name ? ($name -> {$language} || $name -> {$default_language}
|| (each %$name)[1] || $key):$name ;
+ }
+
+ if ($msg)
+ {
+ $txt = ref $msg ? ($msg -> {$language} || $msg -> {$default_language} ||
(each %$msg)[1] || undef):$msg ;
+ }
+ else
+ {
+ $txt = $typeobj -> getmsg ($id, $language, $default_language) ;
+ }
+ $txt = $epreq -> gettext($id) if (!$txt && $epreq) ;
+ $txt ||= "Missing Message $id: %0 %1 %2 %3" ;
+ my $id = $param -> [0] ;
+ $param -> [0] = $name ;
+ $txt =~ s/%(\d+)/$param->[$1]/g ;
+ $param -> [0] = $id ;
+
+ return $txt ;
+ }
+
+
sub error_messages
{
- my ($self, $fdat, $pref) = @_ ;
+ my ($self, $fdat, $pref, $epreq) = @_ ;
my $result = $self -> validate ($fdat, $pref) ;
return [] if (!@$result) ;
@@ -421,8 +447,7 @@
my @msgs ;
foreach my $err (@$result)
{
- my $msg = $err -> {msg} || 'Unknown error in %1: is %1 should %2' ;
- $msg =~ s/%(\d+)/$err->{param}[$1]/g ;
+ my $msg = $self -> build_message ($err -> {id}, $err -> {key}, $err ->
{name}, $err -> {msg}, $err -> {param}, $err -> {typeobj}, $pref, $epreq) ;
push @msgs, $msg ;
}
@@ -430,6 +455,176 @@
}
+
+sub gather_script_code
+ {
+ my ($self, $frules, $pref, $epreq) = @_ ;
+
+ my %param ;
+ my $type ;
+ my $typeobj ;
+ my $i ;
+ my $keys = [] ;
+ my $key ;
+ my $status ;
+ my $name ;
+ my $msg ;
+ my $msgparam ;
+ my $language = $pref -> {language} ;
+ my $default_language = $pref -> {default_language} || 'en' ;
+ my $scriptcode = $self -> {scriptcode} ||= {} ;
+ my $script = '' ;
+ my $form = $self -> {form_id} ;
+
+ while ($i < @$frules)
+ {
+ my $method ;
+ my $action = $frules -> [$i++] ;
+ if (ref $action eq 'ARRAY')
+ {
+ $script .= $self -> gather_script_code ($action, $pref, $epreq) ;
+ }
+ elsif (ref $action eq 'CODE')
+ {
+ }
+ elsif ($action =~ /^-(.*?)$/)
+ {
+ if ($1 eq 'key')
+ {
+ $key = $frules->[$i++] ;
+ $keys = ref $key?$key:[$key] ;
+ $type = 'Default' ;
+ $typeobj = $self -> newtype ($type) ;
+ $name = undef ;
+ $msg = undef ;
+ }
+ if ($1 eq 'name')
+ {
+ $name = $i++ ;
+ }
+ if ($1 eq 'msg')
+ {
+ $msg = $i++ ;
+ }
+ elsif ($1 eq 'type')
+ {
+ $type = $frules->[$i++] ;
+ $typeobj = $self -> newtype ($type) ;
+ $method = 'getscript_validate' ;
+ }
+ else
+ {
+ $param{$1} = 1 ;
+ }
+ }
+ else
+ {
+ $method = 'getscript_' . $action ;
+ }
+
+ if ($method)
+ {
+ my $code ;
+ my $ret ;
+ my $k = "$type*$action" ;
+ if (!exists ($scriptcode -> {$k}))
+ {
+ if ($typeobj -> can ($method))
+ {
+ my $j = $i ;
+ ($code, $msgparam) = $typeobj -> $method ($frules, \$i, $pref) ;
+ $scriptcode -> {$k} = [$code, $msgparam, $i - $j] ;
+ }
+ else
+ {
+ $code = '' ;
+ $scriptcode -> {$k} = '' ;
+ }
+ }
+ else
+ {
+ if ($scriptcode -> {$k})
+ {
+ $code = $scriptcode -> {$k}[0] ;
+ $msgparam = $scriptcode -> {$k}[1] ;
+ $i += $scriptcode -> {$k}[2] ;
+ }
+ }
+
+ if ($code)
+ {
+ my $nametxt = $name?$frules -> [$name]:undef ;
+ my $msgtxt = $msg?$frules -> [$msg]:undef ;
+ my $setmsg = '' ;
+ if ($msgparam)
+ {
+ my $txt = $self -> build_message ($msgparam -> [0], $key,
$nametxt, $msgtxt, $msgparam, $typeobj, $pref, $epreq) ;
+ $setmsg = "msgs[i++]='$txt';"
+ }
+ if (!ref $key)
+ {
+
+ $script .= "obj = document.$form.$key ; if ($code) { $setmsg "
. ($param{fail}?'fail=1;break;':($param{cont}?'':'break;')) . "}\n" ;
+ }
+ else
+ {
+ foreach my $k (@$keys)
+ {
+ $script .= "obj = document.$form.$k ; if ($code) {" ;
+ }
+
+ $script .= " $setmsg " .
($param{fail}?'fail=1;break;':($param{cont}?'':'break;')) . "\n" ;
+ foreach my $k (@$keys)
+ {
+ $script .= "}" ;
+ }
+ }
+ }
+ }
+ }
+ if ($script)
+ {
+ return qq{
+do {
+$script
+} while (0) ; if (fail) break ;
+} ;
+ }
+ return '' ;
+ }
+
+
+
+
+sub get_script_code
+ {
+ my ($self, $pref, $epreq) = @_ ;
+
+ $pref ||= {} ;
+ $pref -> {language} ||= $epreq -> param -> language if ($epreq) ;
+
+ my $script ;
+ $script = $self -> gather_script_code ($self->{frules}, $pref, $epreq) ;
+
+ return qq{
+
+function epform_validate()
+ {
+ var msgs = new Array ;
+ var fail = 0 ;
+ var i = 0 ;
+ var obj ;
+
+ do {
+ $script ;
+ }
+ while (0) ;
+ if (i)
+ alert (msgs.join('\\n')) ;
+
+ }
+} ;
+ }
=pod
No revision
No revision
1.1.2.4 +41 -2 embperl/Embperl/Form/Validate/Rules/Attic/Default.pm
Index: Default.pm
===================================================================
RCS file: /home/cvs/embperl/Embperl/Form/Validate/Rules/Attic/Default.pm,v
retrieving revision 1.1.2.3
retrieving revision 1.1.2.4
diff -u -r1.1.2.3 -r1.1.2.4
--- Default.pm 5 Mar 2002 21:55:23 -0000 1.1.2.3
+++ Default.pm 6 Mar 2002 15:24:22 -0000 1.1.2.4
@@ -10,7 +10,7 @@
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
-# $Id: Default.pm,v 1.1.2.3 2002/03/05 21:55:23 richter Exp $
+# $Id: Default.pm,v 1.1.2.4 2002/03/06 15:24:22 richter Exp $
#
###################################################################################
@@ -20,7 +20,7 @@
use strict;
use vars qw($VERSION %error_messages %script_functions %prefixes);
-$VERSION = q$Id: Default.pm,v 1.1.2.3 2002/03/05 21:55:23 richter Exp $;
+$VERSION = q$Id: Default.pm,v 1.1.2.4 2002/03/06 15:24:22 richter Exp $;
%script_functions = ();
%prefixes = ();
@@ -29,6 +29,7 @@
(
de =>
{
+ validate_required => 'Bitte Felde %0 ausf�llen',
validate_eq => 'Falscher Inhalt \'%1\' des Feldes %0: Erwartet wird \'%2\'',
validate_lt => '%0 mu� kleiner als %2 sein',
validate_gt => '%0 mu� gr��er als %2 sein',
@@ -47,6 +48,7 @@
en =>
{
+ validate_required => 'Please enter a value in %0',
validate_eq => 'Wrong content \'%1\' of field %0: Expected \'%2\'',
validate_lt => '%0 must be less then %2',
validate_gt => '%0 must be greater then %2',
@@ -113,6 +115,15 @@
# --------------------------------------------------------------
+sub getscript_required
+ {
+ my ($self, $frules, $i, $pref) = @_ ;
+
+ return ('!obj.value', ['validate_required']) ;
+ }
+
+# --------------------------------------------------------------
+
sub validate_emptyok
{
my ($self, $key, $value, $frules, $i, $fdat, $pref) = @_ ;
@@ -122,6 +133,15 @@
# --------------------------------------------------------------
+sub getscript_emptyok
+ {
+ my ($self, $frules, $i, $pref) = @_ ;
+
+ return ('!obj.value') ;
+ }
+
+# --------------------------------------------------------------
+
sub validate_eq
{
my ($self, $key, $value, $frules, $i, $fdat, $pref) = @_ ;
@@ -132,6 +152,16 @@
# --------------------------------------------------------------
+sub getscript_eq
+ {
+ my ($self, $frules, $i, $pref) = @_ ;
+
+ my $should = $frules -> [$$i++] ;
+ return ("obj.value == '$should'", ['validate_eq', "+'obj.value'+", $should]) ;
+ }
+
+# --------------------------------------------------------------
+
sub validate_gt
{
my ($self, $key, $value, $frules, $i, $fdat, $pref) = @_ ;
@@ -203,6 +233,15 @@
# --------------------------------------------------------------
+sub getscript_length_min
+ {
+ my ($self, $frules, $i, $pref) = @_ ;
+
+ my $should = $frules -> [$$i++] ;
+ return ("obj.value.length < $should", ['validate_length_min',
"'+obj.value.length+'", $should]) ;
+ }
+
+# --------------------------------------------------------------
sub validate_length_eq
{
my ($self, $key, $value, $frules, $i, $fdat, $pref) = @_ ;
No revision
No revision
1.1.2.4 +20 -10 embperl/eg/web/db/Attic/addsel.epl
Index: addsel.epl
===================================================================
RCS file: /home/cvs/embperl/eg/web/db/Attic/addsel.epl,v
retrieving revision 1.1.2.3
retrieving revision 1.1.2.4
diff -u -r1.1.2.3 -r1.1.2.4
--- addsel.epl 1 Mar 2002 15:29:34 -0000 1.1.2.3
+++ addsel.epl 6 Mar 2002 15:24:22 -0000 1.1.2.4
@@ -5,22 +5,32 @@
$$langset -> Reset ;
while ($rec = $$langset -> Next)
{
- $rules{"category_$rec->{id}"} = {type => 'String', length_min => 5, emptyok =>
1, name => $rec -> {name}} ;
+ push @rules,
+ [
+ -key => "category_$rec->{id}",
+ -name => $rec -> {name},
+ 'emptyok',
+ length_min => 5
+ ] ;
+ push @keys, "category_$rec->{id}" ;
}
+
+
+
use Embperl::Form::Validate ;
-$epf = Embperl::Form::Validate -> new (\%rules) ;
+$epf = Embperl::Form::Validate -> new ([
+ -key => \@keys,
+ -name => { de => 'eine Kategorie', en =>
'one category' },
+ 'required',
+ @rules,
+ ]) ;
$Embperl::Form::Validate::objects{'addsel'} = $epf ;
-]
<script>
-[- ($a, $b) = $epf->sprint_scripting_code({Language => $r -> param -> language}) -]
-[+ do { local $escmode = 0 ; $a } +]
-function on_submit()
-{
-[+ do { local $escmode = 0 ; $b } +]
-}
+[+ do { local $escmode = 0 ; $epf -> get_script_code (undef, $r) } +]
</script>
[= addsel1 =]
@@ -33,9 +43,9 @@
</ul>
-<form action="[+ $r -> param -> uri +]" OnSubmit="[+ do { local $escmode = 0 ; $b
} +]">
+<form action="[+ $r -> param -> uri +]" OnSubmit="">
-<input type="button" onclick="on_submit()">
+<input type="button" onclick="epform_validate()"><br>
[= addsel2 =]<br>
[= addsel3 =]<br><br>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]