History: Tracker Field Validation
Source of version: 17
Copy to clipboard
! Tracker Field Validation !! jQuery Ajax validation It works perfectly with fields that take text input but is not really suited or relevant to fields that have pre-configured selections, etc. (drop downs). The Validation feature, under jQuery plugins and add-ons settings in the Features → Interface panel has to be enabled for this to work. When editing or adding a tracker field while configuring a tracker, you can choose a validation option: * __captcha__: Checks if the input text matches an antibot-captcha. * __distinct__: Checks if the input text has been used before in the tracker for this field - thus ensuring all tracker items can be unique with respect to the validated field * __pagename__: Checks if the input text matches an existing page name * __username__: Checks if username has been used already and is valid according to the rules configured in Tiki * __password__: Checks if the password is valid according to the rules configured in Tiki * __regex__: checks the entered text against any perl regular expression. Enter the regular expression as the "Validation parameter". (Do not include the starting and ending "/" enclosing the regular expression. These will be added automatically.) Not all validation methods require a "Validation parameter" to be set. Regardless of which validation method is selected, you can specify a default custom error message if desired, in "Validation error message:" {img src="display996" link="display996" width="400" rel="box[g]" imalign="center" desc="Click to expand" align="center" styleimage="border"} !!!Adding new custom validation procedures Developers can add new custom validation procedures in lib/validators. Each validator must be stored in a php file named "validator_nameofvalidator.php" and there must be a main function in the file with the general structure as follows: {CODE()} function validator_nameofvalidator($input, $parameter = '', $message = '') { … … … if ($error) { return tra($message); // error message to be shown } return true; // successful validation } {CODE} It is also necessary to add a line in file ''lib/core/Services/Tracker/Controller.php'' in the list of all validators {CODE(caption="lib/core/Services/Tracker/Controller.php" wrap="1" colors="php")} 'regex' => tr('Regular Expression (Pattern)'), 'username' => tr('User Name'), 'nameofvalidator' => tr('My Validator I Wrote by Myself'),{CODE} $parameter will be what is configured as the "Validation parameter:" in the tracker field settings, and $message is what is configured as the "Validation error message:" in the tracker field settings. You don't have to return $message as the error message if you don't want to (you can return any error message you want depending on the type of the error it is). !!Adding custom per-page validation It is possible to add custom validation in a wiki page which contains a Tracker plugin through jQuery. If the jQuery validation fails, it should set: nosubmitItemForm1 = true; for the first tracker plugin, nosubmitItemForm2 for the second, etc. It is necessary that this jQuery plugin is above the Tracker plugin. Example validation for a field of type "ins_fill" (Multiple Fill Fields available) which should start with a number: {CODE()}{JQ()} nosubmitItemForm1 = false; $('#editItemForm1').submit(function() { //alert('départ'); var valeurs = $('#ins_fill').val(); //alert('valeurs ' + valeurs); var listeValeurs = valeurs.split("\n"); var $errorCount = 0; var $errorDots = "<span id='errorfill' class='errorfill' style='white-space: nowrap; float: left '>"; // build a vertical string for pointing lines in error (optional) var $validPattern = /(^\s*\d+\s*,)|(^\s*$)/; // this pattern ensures the first item is a number (comma separated fields) for (var i in listeValeurs) { //alert(listeValeurs[i]); if ( listeValeurs[i].search($validPattern) != -1 ) { //alert("'"+listeValeurs[i]+"' est valide"); $errorDots += "<br />"; } else { $errorCount++; $errorDots += "× <br />"; } } $('#errorfill').remove(); $('label.errorspiral').remove(); // Let's not interfere with the error class which is controlled by jquery's validation feature $('#ins_fill').removeClass('errorspiral').css({'width':'99%'}); if( $errorCount == 0 ) { // C'est bon //alert('good'); nosubmitItemForm1 = false; } else { nosubmitItemForm1 = true; $('#ins_fill').before($errorDots+"</span>").css({'width':'90%'}).addClass('errorspiral'); $('#errorfill').css({'float':'left'}); alert("ERREUR" + "\n" + "La bonne syntaxe est : nombre,critère"+"\n"+"Nombre de lignes fautives : " + $errorCount); } if ( valeurs == '' ) { // Do our own detection of required field so we can have translated messages nosubmitItemForm1 = true; $('#ins_fill').addClass('errorspiral').after('<label class="errorspiral" for="ins_fill" generated="true">' + tr('This field is required') + '</label>'); nosubmitItemForm1 = true; } return false; });{JQ}{CODE}