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'] .= "\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