diff --git a/ChangeLog b/ChangeLog index 64695b954..602ae21b3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -69,6 +69,8 @@ $Id$ - patch #2985068 [engines] Fix parsing of PBXT status, thanks to Madhura Jayaratne. - patch #2986073 [interface] Convert upload progress bar to jQuery, thanks to Philip Frank. +- patch #2983960 [interface] Add javascript validation of datetime input, + thanks to 3.3.3.0 (not yet released) - patch #2982480 [navi] Do not group if there would be one table in group, diff --git a/js/tbl_change.js b/js/tbl_change.js index 97c9bf766..60b75d192 100644 --- a/js/tbl_change.js +++ b/js/tbl_change.js @@ -55,6 +55,175 @@ function nullify(theType, urlField, md5Field, multi_edit) } // end of the 'nullify()' function +/** + * javascript DateTime format validation. + * its used to prevent adding default (0000-00-00 00:00:00) to database when user enter wrong values + * Start of validation part + */ +//function checks the number of days in febuary +function daysInFebruary (year){ + return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 ); +} +//function to convert single digit to double digit +function fractionReplace(num) +{ + num=parseInt(num); + var res="00"; + switch(num) + { + case 1:res= "01";break; + case 2:res= "02";break; + case 3:res= "03";break; + case 4:res= "04";break; + case 5:res= "05";break; + case 6:res= "06";break; + case 7:res= "07";break; + case 8:res= "08";break; + case 9:res= "09";break; + } + return res; +} + +/* function to check the validity of date +* The following patterns are accepted in this validation (accepted in mysql as well) +* 1) 2001-12-23 +* 2) 2001-1-2 +* 3) 02-12-23 +* 4) And instead of using '-' the following punctuations can be used (+,.,*,^,@,/) All these are accepted by mysql as well. Therefore no issues +*/ +function isDate(val,tmstmp) +{ + val=val.replace(/[.|*|^|+|//|@]/g,'-'); + var arrayVal=val.split("-"); + for(var a=0;adaysInFebruary(year)) + return false; + if(val.substring(0,pos+2).length==2) + { + if(val.substring(0,pos+2).length==2) + year=parseInt("20"+val.substring(0,pos+2)); + else + year=parseInt("19"+val.substring(0,pos+2)); + } + if(tmstmp==true) + { + if(year<1978) return false; + if(year>2038||(year>2037&&day>19&&month>=1)||(year>2037&&month>1)) return false; + } + } + else + return false; + return true; +} + +/* function to check the validity of time +* The following patterns are accepted in this validation (accepted in mysql as well) +* 1) 2:3:4 +* 2) 2:23:43 +*/ +function isTime(val) +{ + var arrayVal=val.split(":"); + for(var a=0;a +
> $vrow) { - + $vrow) { // d a t e t i m e // // Current date should not be set as default if the field is NULL - // for the current row, but do not put here the current datetime - // if there is a default value (the real default value will be set + // for the current row, but do not put here the current datetime + // if there is a default value (the real default value will be set // in the Default value logic below) // Note: (tested in MySQL 4.0.16): when lang is some UTF-8, @@ -411,10 +412,9 @@ foreach ($rows as $row_id => $vrow) { if (-1 === $field['len']) { $field['len'] = PMA_DBI_field_len($vresult, $i); } - - $unnullify_trigger = $chg_evt_handler . "=\"return unNullify('" - . PMA_escapeJsString($field['Field_md5']) . "', '" - . PMA_escapeJsString($jsvkey) . "')\""; + //Call validation when the form submited... + $unnullify_trigger = $chg_evt_handler . "=\"return Validator('". PMA_escapeJsString($field['Field_md5']) . "', '" + . PMA_escapeJsString($jsvkey) . "','".$field['pma_type']."')\""; // Use an MD5 as an array index to avoid having special characters in the name atttibute (see bug #1746964 ) $field_name_appendix = $vkey . '[' . $field['Field_md5'] . ']'; @@ -439,7 +439,7 @@ foreach ($rows as $row_id => $vrow) { > - + $vrow) { ) { $default_function = $cfg['DefaultFunctions']['pk_char36']; } - + // this is set only when appropriate and is always true if (isset($field['display_binary_as_hex'])) { $default_function = 'UNHEX'; } - + // loop on the dropdown array and print all available options for that field. foreach ($dropdown as $each_dropdown){ echo ' $vrow) { // foreign key in a drop-down $onclick .= '4, '; } elseif ($foreigners && isset($foreigners[$field['Field']]) && $foreignData['foreign_link'] == true) { - // foreign key with a browsing icon + // foreign key with a browsing icon $onclick .= '6, '; } else { $onclick .= '5, '; diff --git a/themes/darkblue_orange/css/theme_right.css.php b/themes/darkblue_orange/css/theme_right.css.php index 2a78ca87a..38743e3d3 100644 --- a/themes/darkblue_orange/css/theme_right.css.php +++ b/themes/darkblue_orange/css/theme_right.css.php @@ -1284,3 +1284,8 @@ table#serverconnection_trg_local { width: 85%; padding: 0.1em; } +/** + * Validation error message styles + */ +.invalid_value +{background:#F00;} \ No newline at end of file diff --git a/themes/original/css/theme_right.css.php b/themes/original/css/theme_right.css.php index acb2c7d57..34c505227 100644 --- a/themes/original/css/theme_right.css.php +++ b/themes/original/css/theme_right.css.php @@ -1216,3 +1216,8 @@ table#serverconnection_src_local, table#serverconnection_trg_local { float:left; } +/** + * Validation error message styles + */ +.invalid_value +{background:#F00;} \ No newline at end of file