client-side validation
This commit is contained in:
parent
7649a52134
commit
43a82b487e
|
@ -141,6 +141,8 @@ main license and authors:
|
|||
|
||||
lib/fpdf.php A 2008 Olivier Plathey
|
||||
lib/font/Vera* B 2003 Bitstream, Inc.
|
||||
templates/lib/wz_tooltip.js C Walter Zorn
|
||||
templates/lib/jquery*.js D 2010 John Resig, Paul Bakaus, Fred Heusschen
|
||||
templates/lib/*wz_tooltip.js C Walter Zorn
|
||||
lib/3rdParty/phpseclib C Jim Wigginton
|
||||
templates/lib/*jquery*.js D 2010 John Resig, Paul Bakaus, Fred Heusschen
|
||||
templates/lib/*jquery-validationEngine-*.js D 2010 Cedric Dugas and Olivier Refalo
|
||||
|
||||
|
|
|
@ -36,14 +36,20 @@ $Id$
|
|||
*/
|
||||
abstract class htmlElement {
|
||||
|
||||
const OPTION_ALIGN = 0;
|
||||
|
||||
/** align to top */
|
||||
const ALIGN_TOP = 0;
|
||||
/** align to left */
|
||||
const ALIGN_LEFT = 1;
|
||||
/** align to right */
|
||||
const ALIGN_RIGHT = 2;
|
||||
/** align to bottom */
|
||||
const ALIGN_BOTTOM = 3;
|
||||
/** align to center */
|
||||
const ALIGN_CENTER = 4;
|
||||
|
||||
/** validation rule to allow only numbers ([0-9]+) */
|
||||
const VALIDATE_NUMERIC = 'numeric';
|
||||
|
||||
/** alignment when inside a table */
|
||||
public $alignment = null;
|
||||
/** colspan if inside a table */
|
||||
|
@ -351,6 +357,10 @@ class htmlInputField extends htmlElement {
|
|||
private $isEnabled = true;
|
||||
/** indicates that the value should be saved in obfuscated form */
|
||||
private $obfuscate = false;
|
||||
/** required field */
|
||||
protected $required = false;
|
||||
/** validation rule */
|
||||
private $validationRule = null;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
|
@ -389,8 +399,20 @@ class htmlInputField extends htmlElement {
|
|||
$this->fieldValue = $values[$this->fieldName][0];
|
||||
}
|
||||
}
|
||||
$validators = array();
|
||||
if ($this->required) {
|
||||
$validators[] = 'required';
|
||||
}
|
||||
if ($this->validationRule != null) {
|
||||
$validators[] = 'custom[' . $this->validationRule . ']';
|
||||
}
|
||||
// print input field
|
||||
$class = '';
|
||||
if (sizeof($validators) > 0) {
|
||||
$class = ' class="validate[' . implode(',', $validators) . ']"';
|
||||
}
|
||||
$name = ' name="' . $this->fieldName . '"';
|
||||
$id = ' id="inputField_' . $this->fieldName . '"';
|
||||
$value = '';
|
||||
if ($this->fieldValue != null) {
|
||||
$value = ' value="' . $this->fieldValue . '"';
|
||||
|
@ -410,7 +432,7 @@ class htmlInputField extends htmlElement {
|
|||
if (!$this->isEnabled) {
|
||||
$disabled = ' disabled';
|
||||
}
|
||||
echo '<input type="' . $inputType . '"' . $name . $value . $maxLength . $size . $fieldTabIndex . $disabled . '>';
|
||||
echo '<input type="' . $inputType . '"' . $class . $name . $id . $value . $maxLength . $size . $fieldTabIndex . $disabled . '>';
|
||||
if ($this->obfuscate) {
|
||||
return array($this->fieldName => 'text_obfuscated');
|
||||
}
|
||||
|
@ -464,6 +486,25 @@ class htmlInputField extends htmlElement {
|
|||
$this->obfuscate = $obfuscate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies if the input field is required.
|
||||
*
|
||||
* @param boolean $required required
|
||||
*/
|
||||
public function setRequired($required) {
|
||||
$this->required = $required;
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies the validation rule (e.g. htmlElement::VALIDATE_NUMERIC) for this field.
|
||||
* This rule is checked on client side when the input field looses focus.
|
||||
*
|
||||
* @param boolean $rule rule name
|
||||
*/
|
||||
public function setValidationRule($rule) {
|
||||
$this->validationRule = $rule;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -477,8 +518,6 @@ class htmlTableExtendedInputField extends htmlInputField {
|
|||
private $label;
|
||||
/** help ID */
|
||||
private $helpID;
|
||||
/** required field */
|
||||
private $required = false;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
|
@ -527,15 +566,6 @@ class htmlTableExtendedInputField extends htmlInputField {
|
|||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies if this input field must be filled.
|
||||
*
|
||||
* @param boolean $required required or not
|
||||
*/
|
||||
public function setRequired($required) {
|
||||
$this->required = $required;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1159,7 +1159,12 @@ class accountContainer {
|
|||
*/
|
||||
private function printPageHeader() {
|
||||
include '../main_header.php';
|
||||
echo "<form enctype=\"multipart/form-data\" action=\"edit.php\" method=\"post\">\n";
|
||||
echo '<script type="text/javascript">';
|
||||
echo 'jQuery(document).ready(function() {';
|
||||
echo ' jQuery("#inputForm").validationEngine();';
|
||||
echo '});';
|
||||
echo '</script>';
|
||||
echo "<form id=\"inputForm\" enctype=\"multipart/form-data\" action=\"edit.php\" method=\"post\">\n";
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1086,13 +1086,10 @@ class posixAccount extends baseModule implements passwordService {
|
|||
$return->addElement($uidInput, true);
|
||||
$commonName = '';
|
||||
if (isset($this->attributes['cn'][0])) $commonName = $this->attributes['cn'][0];
|
||||
$cnInput = new htmlTableExtendedInputField(_("Common name"), 'cn', $commonName, 'cn');
|
||||
$cnInput->setRequired(true);
|
||||
$return->addElement($cnInput, true);
|
||||
$return->addElement(new htmlTableExtendedInputField(_("Common name"), 'cn', $commonName, 'cn'), true);
|
||||
$uidNumber = '';
|
||||
if (isset($this->attributes['uidNumber'][0])) $uidNumber = $this->attributes['uidNumber'][0];
|
||||
$uidNumberInput = new htmlTableExtendedInputField(_('UID number'), 'uidNumber', $uidNumber, 'uidNumber');
|
||||
$uidNumberInput->setRequired(true);
|
||||
$uidNumberInput->setFieldMaxLength(20);
|
||||
$return->addElement($uidNumberInput, true);
|
||||
$gecos = '';
|
||||
|
|
|
@ -305,6 +305,7 @@ class shadowAccount extends baseModule implements passwordService {
|
|||
$pwdWarnInput = new htmlTableExtendedInputField(_('Password warning'), 'shadowWarning', $shWarning, 'shadowWarning');
|
||||
$pwdWarnInput->setFieldMaxLength(4);
|
||||
$pwdWarnInput->setFieldSize(5);
|
||||
$pwdWarnInput->setValidationRule(htmlElement::VALIDATE_NUMERIC);
|
||||
$return->addElement($pwdWarnInput, true);
|
||||
|
||||
$shPwdExpiration = '';
|
||||
|
@ -312,6 +313,7 @@ class shadowAccount extends baseModule implements passwordService {
|
|||
$pwdExpInput = new htmlTableExtendedInputField(_('Password expiration'), 'shadowInactive', $shPwdExpiration, 'shadowInactive');
|
||||
$pwdExpInput->setFieldMaxLength(4);
|
||||
$pwdExpInput->setFieldSize(5);
|
||||
$pwdExpInput->setValidationRule(htmlElement::VALIDATE_NUMERIC);
|
||||
$return->addElement($pwdExpInput, true);
|
||||
|
||||
$shMinAge = '';
|
||||
|
@ -319,6 +321,7 @@ class shadowAccount extends baseModule implements passwordService {
|
|||
$minAgeInput = new htmlTableExtendedInputField(_('Minimum password age'), 'shadowMin', $shMinAge, 'shadowMin');
|
||||
$minAgeInput->setFieldMaxLength(5);
|
||||
$minAgeInput->setFieldSize(5);
|
||||
$minAgeInput->setValidationRule(htmlElement::VALIDATE_NUMERIC);
|
||||
$return->addElement($minAgeInput, true);
|
||||
|
||||
$shMaxAge = '';
|
||||
|
@ -326,6 +329,7 @@ class shadowAccount extends baseModule implements passwordService {
|
|||
$maxAgeInput = new htmlTableExtendedInputField(_('Maximum password age'), 'shadowMax', $shMaxAge, 'shadowMax');
|
||||
$maxAgeInput->setFieldMaxLength(5);
|
||||
$maxAgeInput->setFieldSize(5);
|
||||
$maxAgeInput->setValidationRule(htmlElement::VALIDATE_NUMERIC);
|
||||
$return->addElement($maxAgeInput, true);
|
||||
|
||||
$expirationDate = " - ";
|
||||
|
|
|
@ -0,0 +1,165 @@
|
|||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||
Copyright (C) 2010 Cedric Dugas and Olivier Refalo
|
||||
2011 Roland Gruber
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
*/
|
||||
|
||||
|
||||
.inputContainer {
|
||||
position: relative;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.formError {
|
||||
position: absolute;
|
||||
top: 300px;
|
||||
left: 300px;
|
||||
display: block;
|
||||
z-index: 5000;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.ajaxSubmit {
|
||||
padding: 20px;
|
||||
background: #55ea55;
|
||||
border: 1px solid #999;
|
||||
display: none
|
||||
}
|
||||
|
||||
.formError .formErrorContent {
|
||||
width: 100%;
|
||||
background: #ee4f01;
|
||||
position:relative;
|
||||
z-index:5001;
|
||||
color: #fff;
|
||||
font-family: tahoma;
|
||||
font-size: 12px;
|
||||
border: 2px solid #ddd;
|
||||
box-shadow: 0 0 6px #000;
|
||||
-moz-box-shadow: 0 0 6px #000;
|
||||
-webkit-box-shadow: 0 0 6px #000;
|
||||
padding: 4px 10px 4px 10px;
|
||||
border-radius: 6px;
|
||||
-moz-border-radius: 6px;
|
||||
-webkit-border-radius: 6px;
|
||||
}
|
||||
|
||||
.greenPopup .formErrorContent {
|
||||
background: #33be40;
|
||||
}
|
||||
|
||||
.blackPopup .formErrorContent {
|
||||
background: #393939;
|
||||
color: #FFF;
|
||||
}
|
||||
|
||||
.formError .formErrorArrow {
|
||||
width: 15px;
|
||||
margin: -2px 0 0 13px;
|
||||
position:relative;
|
||||
z-index: 5006;
|
||||
}
|
||||
|
||||
.formError .formErrorArrowBottom {
|
||||
box-shadow: none;
|
||||
-moz-box-shadow: none;
|
||||
-webkit-box-shadow: none;
|
||||
margin: 0px 0 0 12px;
|
||||
top:2px;
|
||||
}
|
||||
|
||||
.formError .formErrorArrow div {
|
||||
border-left: 2px solid #ddd;
|
||||
border-right: 2px solid #ddd;
|
||||
box-shadow: 0 2px 3px #444;
|
||||
-moz-box-shadow: 0 2px 3px #444;
|
||||
-webkit-box-shadow: 0 2px 3px #444;
|
||||
font-size: 0px;
|
||||
height: 1px;
|
||||
background: #ee4f01;
|
||||
margin: 0 auto;
|
||||
line-height: 0;
|
||||
font-size: 0;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.formError .formErrorArrowBottom div {
|
||||
box-shadow: none;
|
||||
-moz-box-shadow: none;
|
||||
-webkit-box-shadow: none;
|
||||
}
|
||||
|
||||
.greenPopup .formErrorArrow div {
|
||||
background: #33be40;
|
||||
}
|
||||
|
||||
.blackPopup .formErrorArrow div {
|
||||
background: #393939;
|
||||
color: #FFF;
|
||||
}
|
||||
|
||||
.formError .formErrorArrow .line10 {
|
||||
width: 15px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.formError .formErrorArrow .line9 {
|
||||
width: 13px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.formError .formErrorArrow .line8 {
|
||||
width: 11px;
|
||||
}
|
||||
|
||||
.formError .formErrorArrow .line7 {
|
||||
width: 9px;
|
||||
}
|
||||
|
||||
.formError .formErrorArrow .line6 {
|
||||
width: 7px;
|
||||
}
|
||||
|
||||
.formError .formErrorArrow .line5 {
|
||||
width: 5px;
|
||||
}
|
||||
|
||||
.formError .formErrorArrow .line4 {
|
||||
width: 3px;
|
||||
}
|
||||
|
||||
.formError .formErrorArrow .line3 {
|
||||
width: 1px;
|
||||
border-left: 2px solid #ddd;
|
||||
border-right: 2px solid #ddd;
|
||||
border-bottom: 0 solid #ddd;
|
||||
}
|
||||
|
||||
.formError .formErrorArrow .line2 {
|
||||
width: 3px;
|
||||
border: none;
|
||||
background: #ddd;
|
||||
}
|
||||
|
||||
.formError .formErrorArrow .line1 {
|
||||
width: 1px;
|
||||
border: none;
|
||||
background: #ddd;
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||
Copyright (C) 2010 Cedric Dugas and Olivier Refalo
|
||||
2011 Roland Gruber
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
*/
|
||||
?>
|
||||
|
||||
(function($){
|
||||
$.fn.validationEngineLanguage = function(){
|
||||
};
|
||||
$.validationEngineLanguage = {
|
||||
newLang: function(){
|
||||
$.validationEngineLanguage.allRules = {
|
||||
"required": {
|
||||
"regex": "none",
|
||||
"alertText": "<?php echo _('This field is required.'); ?>",
|
||||
},
|
||||
"numeric": {
|
||||
"regex": /^[0-9]+$/,
|
||||
"alertText": "<?php echo _('Please enter a number.') ?>"
|
||||
},
|
||||
};
|
||||
}
|
||||
};
|
||||
$.validationEngineLanguage.newLang();
|
||||
})(jQuery);
|
|
@ -57,7 +57,9 @@ $jsDirName = dirname(__FILE__) . '/lib';
|
|||
$jsDir = dir($jsDirName);
|
||||
$jsFiles = array();
|
||||
while ($jsEntry = $jsDir->read()) {
|
||||
if (substr($jsEntry, strlen($jsEntry) - 3, 3) != '.js') continue;
|
||||
if ((substr($jsEntry, strlen($jsEntry) - 3, 3) != '.js') && (substr($jsEntry, strlen($jsEntry) - 4, 4) != '.php')) {
|
||||
continue;
|
||||
}
|
||||
$jsFiles[] = $jsEntry;
|
||||
}
|
||||
sort($jsFiles);
|
||||
|
|
Loading…
Reference in New Issue