diff --git a/trunk/includes/class/class.LSformElement_password.php b/trunk/includes/class/class.LSformElement_password.php index b6661af8..c7d5087e 100644 --- a/trunk/includes/class/class.LSformElement_password.php +++ b/trunk/includes/class/class.LSformElement_password.php @@ -89,6 +89,10 @@ class LSformElement_password extends LSformElement { $return['html'] .= $autogenerate_html; $id = "LSformElement_password_view_btn_".$this -> name."_".$numberId; $return['html'] .= "\n"; + if (!$this -> attr_html -> attribute -> ldapObject-> isNew()) { + $id = "LSformElement_password_verify_btn_".$this -> name."_".$numberId; + $return['html'] .= "\"".('Vérifier\n"; + } if (!empty($this -> values)) { $return['html'] .= "* "._('Modification uniquement')."."; @@ -109,6 +113,13 @@ class LSformElement_password extends LSformElement { function generatePassword() { return generatePassword($this -> params['html_options']['chars'],$this -> params['html_options']['lenght']); } + + function verifyPassword($pwd) { + if ($this -> attr_html -> attribute -> ldapObject -> isNew()) { + return false; + } + return $GLOBALS['LSsession'] -> checkUserPwd($this -> attr_html -> attribute -> ldapObject,$pwd); + } } ?> diff --git a/trunk/includes/class/class.LSldapObject.php b/trunk/includes/class/class.LSldapObject.php index 62a09bce..2f367cb3 100644 --- a/trunk/includes/class/class.LSldapObject.php +++ b/trunk/includes/class/class.LSldapObject.php @@ -574,7 +574,7 @@ class LSldapObject { * @param[in] $basedn string DN de base pour la recherche * @param[in] $params array Paramètres de recherche au format Net_LDAP2::search() * - * @retval array Tableau d'objet correspondant au resultat de la recherche + * @retval array Tableau d'objets correspondant au resultat de la recherche */ function listObjects($filter='',$basedn=NULL,$params=array()) { $retInfos=array(); @@ -769,6 +769,17 @@ class LSldapObject { return $retInfos; } + + /** + * Recherche un objet à partir de la valeur exact de son RDN + * + * @author Benjamin Renard + * + * @param[in] $name string Valeur de son RDN + * @param[in] $basedn string Le DN de base de la recherche + * + * @retval array Tableau d'objets correspondant au resultat de la recherche + */ function searchObject($name,$basedn=NULL) { $filter = $this -> config['rdn'].'='.$name; return $this -> listObjects($filter,$basedn); @@ -864,6 +875,8 @@ class LSldapObject { /** * Retourne le type de l'objet * + * @author Benjamin Renard + * * @retval string Le type de l'objet ($this -> type_name) */ function getType() { @@ -873,6 +886,8 @@ class LSldapObject { /** * Retourne qui est l'utilisateur par rapport à cet object * + * @author Benjamin Renard + * * @retval string 'admin'/'self'/'user' pour Admin , l'utilisateur lui même ou un simple utilisateur */ function whoami() { @@ -884,6 +899,8 @@ class LSldapObject { /** * Retourne le label de l'objet * + * @author Benjamin Renard + * * @retval string Le label de l'objet ($this -> config['label']) */ function getLabel() { @@ -894,11 +911,24 @@ class LSldapObject { /** * Supprime l'objet dans l'annuaire * + * @author Benjamin Renard + * * @retval boolean True si l'objet à été supprimé, false sinon */ function remove() { return $GLOBALS['LSldap'] -> remove($this -> getDn()); } + + /** + * L'objet est-il nouveau + * + * @author Benjamin Renard + * + * @retval boolean True si l'objet est nouveau, false sinon + */ + function isNew() { + return (!$this -> dn); + } } ?> diff --git a/trunk/includes/js/LSform.js b/trunk/includes/js/LSform.js index cb0ce1d0..d377f9f3 100644 --- a/trunk/includes/js/LSform.js +++ b/trunk/includes/js/LSform.js @@ -32,7 +32,14 @@ var LSform = new Class({ $$('img.LSformElement_password_view_btn').each(function(el) { el.addEvent('click',this.onLSformElement_password_view_btnClick.bind(this,el)); }, this); + + this.LSformElement_password_background_color = []; + this.initialiseLSformElement_password_generate(); + + $$('img.LSformElement_password_verify_btn').each(function(el) { + el.addEvent('click',this.onLSformElement_password_verify_btnClick.bind(this,el)); + }, this); this.initialiseLSformElement_select_object(); }, @@ -49,6 +56,8 @@ var LSform = new Class({ initialiseLSformElement_password_generate: function() { $$('input.LSformElement_password_generate').each(function(el) { + this.LSformElement_password_background_color[el.id] = el.getStyle('background-color'); + el.addEvent('click',this.onLSformElement_password_verify_inputClick.bind(this,el)); el.addEvent('keyup',this.onLSformElement_password_generate_inputKeyUp.bind(this,el)); }, this); }, @@ -219,7 +228,7 @@ var LSform = new Class({ var getAttrNameAndIdValues = getAttrNameAndId.exec(img.id); var attrName = getAttrNameAndIdValues[1]; var fieldId = 'LSformElement_password_' + attrName + '_' + getAttrNameAndIdValues[2]; - var viewBtnId = 'LSformElement_password_view_btn_userPassword_' + getAttrNameAndIdValues[2]; + var viewBtnId = 'LSformElement_password_view_btn_' + attrName + '_' + getAttrNameAndIdValues[2]; var data = { template: 'LSform', @@ -301,6 +310,54 @@ var LSform = new Class({ input.remove(); this.initialiseLSformElement_password_generate(); return newInput; + }, + + onLSformElement_password_verify_btnClick: function(img) { + var getAttrNameAndId = /LSformElement_password_verify_btn_(.*)_([0-9]*)/ + var getAttrNameAndIdValues = getAttrNameAndId.exec(img.id); + var attrName = getAttrNameAndIdValues[1]; + var fieldId = 'LSformElement_password_' + attrName + '_' + getAttrNameAndIdValues[2]; + var verifyBtnId = 'LSformElement_password_verify_btn_' + attrName + '_' + getAttrNameAndIdValues[2]; + + var data = { + template: 'LSform', + action: 'verifyPassword', + attribute: attrName, + objecttype: $('LSform_objecttype').value, + idform: $('LSform_idform').value, + fieldId: fieldId, + fieldValue: $(fieldId).value, + objectdn: $('LSform_objectdn').value + }; + LSdebug(data); + data.imgload=varLSdefault.loadingImgDisplay(img); + new Ajax('index_ajax.php', {data: data, onComplete: this.onLSformElement_password_verify_btnClickComplete.bind(this)}).request(); + }, + + onLSformElement_password_verify_btnClickComplete: function(responseText, responseXML) { + var data = Json.evaluate(responseText); + if ( data ) { + if ( typeof(data.LSerror) != "undefined" ) { + varLSdefault.loadingImgHide(data.imgload); + varLSdefault.displayError(data.LSerror); + return; + } + else { + varLSdefault.loadingImgHide(data.imgload); + if (data.verifyPassword) { + // ok + $(data.fieldId).setStyle('background-color','#73F386'); + } + else { + // nok + $(data.fieldId).setStyle('background-color','#f59a67'); + } + } + } + }, + + onLSformElement_password_verify_inputClick: function(input) { + input.setStyle('background-color',this.LSformElement_password_background_color[input.id]); } }); diff --git a/trunk/index_ajax.php b/trunk/index_ajax.php index 313b8e8b..085ff355 100644 --- a/trunk/index_ajax.php +++ b/trunk/index_ajax.php @@ -101,6 +101,19 @@ if (!isset($_ERRORS)) { } } break; + case 'verifyPassword': + if ((isset($_REQUEST['attribute'])) && (isset($_REQUEST['objecttype'])) && (isset($_REQUEST['fieldId'])) && (isset($_REQUEST['fieldValue'])) && (isset($_REQUEST['idform'])) && (isset($_REQUEST['objectdn'])) ) { + $object = new $_REQUEST['objecttype'](); + $form = $object -> getForm($_REQUEST['idform']); + $object -> loadData($_REQUEST['objectdn']); + $field=$form -> getElement($_REQUEST['attribute']); + $val = $field -> verifyPassword($_REQUEST['fieldValue']); + $data = array( + 'verifyPassword' => $val, + 'fieldId' => $_REQUEST['fieldId'] + ); + } + break; } break; case 'LSrelation': diff --git a/trunk/templates/css/LSform.css b/trunk/templates/css/LSform.css index 9e5d94a8..50773db3 100644 --- a/trunk/templates/css/LSform.css +++ b/trunk/templates/css/LSform.css @@ -74,6 +74,6 @@ li.LSformElement_select_object_addBtn { text-align: center; } -img.LSformElement_select_object_deleteBtn, img.LSformElement_password_view_btn, img.LSformElement_password_generate_btn { +img.LSformElement_select_object_deleteBtn, img.LSformElement_password_view_btn, img.LSformElement_password_generate_btn, img.LSformElement_password_verify_btn { cursor: pointer; } diff --git a/trunk/templates/images/verify.png b/trunk/templates/images/verify.png new file mode 100644 index 00000000..4c8204af Binary files /dev/null and b/trunk/templates/images/verify.png differ