LP#1361266 Patron self-registration form accepts date of birth in wrong format
authorMichael Peters <mpeters@emeralddata.net>
Thu, 4 Dec 2014 20:56:53 +0000 (15:56 -0500)
committerJason Stephenson <jstephenson@mvlc.org>
Fri, 4 Sep 2015 15:52:26 +0000 (11:52 -0400)
This patch applys some basic javascript to validate that a date entered is
at least in ISO 8601 format.  This prevents someone from entering "cupcake"
or 55/66/6666 as a valid date of birth by validating the stgu.dob input
at the time of submission.

Signed-off-by: Michael Peters <mpeters@emeralddata.net>
Signed-off-by: Josh Stompro <stomproj@larl.org>
Signed-off-by: Jason Stephenson <jstephenson@mvlc.org>
Open-ILS/src/templates/opac/parts/js.tt2
Open-ILS/src/templates/opac/register.tt2

index ed68480..f9600a5 100644 (file)
@@ -1,6 +1,20 @@
 <!-- JS imports, etc.  -->
 <script type="text/javascript" src="[% ctx.media_prefix %]/js/ui/default/opac/simple.js"></script>
 
+<!-- DOB validation for Patron Registration in OPAC -->
+<script type="text/javascript">
+    function dobValidate(input) {
+        var validformat = /^(19|20)\d\d([- /.])(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])$/
+        var returnval = false
+        if (!validformat.test(input.value))
+            alert("You have entered an invalid date, or an improperly formatted date.  Please enter Date of Birth in YYYY-MM-DD or YYYY/MM/DD format and try again.")
+        else
+            returnval = true
+        if (returnval == false) input.select()
+        return returnval
+}
+</script>
+
 [%- IF ctx.use_stripe %]
 <script type="text/javascript">unHideMe($("pay_fines_now"));[%# the DOM is loaded now, right? %]</script>
 [% END -%]
index cb04055..3c2d637 100644 (file)
@@ -42,7 +42,7 @@ register_fields = [
 # The dojo date widget in the patron edit UI only accepts default 
 # values in ISO8601 format.  It will not accept locale-shaped dates.
 IF !ctx.register.settings.stgu.dob.example;
-    ctx.register.settings.stgu.dob.example = l('YYYY-MM-DD');
+    ctx.register.settings.stgu.dob.example = l('YYYY-MM-DD or YYYY/MM/DD');
 END;
 
 %]
@@ -96,7 +96,7 @@ END;
                 ) | html %]</h4>
         [% END %]
 
-        <form method='POST'>
+        <form method='POST' onSubmit="return dobValidate(document.getElementById('stgu.dob'))">
             <table>
                 <tr>
                     <td>
@@ -141,7 +141,8 @@ FOR field_def IN register_fields;
     </td>
     <td>
         <input 
-            type='text' 
+            type='text'
+            id='[% field_path %]'
             name='[% field_path %]'
             value='[% value || CGI.param(field_path) | html %]'/>
         [% IF require %]