diff --git a/trunk/conf/LSobjects/config.LSobjects.LSeepeople.php b/trunk/conf/LSobjects/config.LSobjects.LSeepeople.php
index c7996279..c3c72aeb 100644
--- a/trunk/conf/LSobjects/config.LSobjects.LSeepeople.php
+++ b/trunk/conf/LSobjects/config.LSobjects.LSeepeople.php
@@ -406,6 +406,12 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'label' => _('Mot de passe'),
'ldap_type' => 'password',
'html_type' => 'password',
+ 'html_options' => array(
+ 'generationTool' => true,
+ 'autoGenerate' => false,
+ 'chars' => 'abcdefgh',
+ 'lenght' => 5
+ ),
'required' => 1,
'rights' => array(
'self' => 'w',
diff --git a/trunk/includes/class/class.LSformElement_password.php b/trunk/includes/class/class.LSformElement_password.php
index b4220638..63b48dd4 100644
--- a/trunk/includes/class/class.LSformElement_password.php
+++ b/trunk/includes/class/class.LSformElement_password.php
@@ -67,7 +67,29 @@ class LSformElement_password extends LSformElement {
function getDisplay(){
$return = $this -> getLabelInfos();
if (!$this -> isFreeze()) {
- $return['html'] = "\n";
+ $numberId=rand();
+ $value_txt='';
+ $input_type='password';
+ $autogenerate_html='';
+ $class_txt='';
+
+ // AutoGenerate
+ if (($this -> params['html_options']['generationTool'])||(!isset($this -> params['html_options']['generationTool']))) {
+ if (($this -> params['html_options']['autoGenerate'])&&(empty($this -> values))) {
+ $value_txt="value='".$this->generatePassword()."'";
+ $input_type='text';
+ }
+ $class_txt="class='LSformElement_password_generate'";
+ $id = "LSformElement_password_generate_btn_".$this -> name."_".$numberId;
+ $autogenerate_html = "\n";
+ }
+
+ $id = "LSformElement_password_".$this -> name."_".$numberId;
+ $return['html'] = "\n";
+ $return['html'] .= $autogenerate_html;
+ $id = "LSformElement_password_view_btn_".$this -> name."_".$numberId;
+ $return['html'] .= "\n";
+
if (!empty($this -> values)) {
$return['html'] .= "* "._('Modification uniquement').".";
}
@@ -83,6 +105,28 @@ class LSformElement_password extends LSformElement {
}
return $return;
}
+
+ function generatePassword() {
+ if (isset($this -> params['html_options']['chars'])) {
+ $chars=$this -> params['html_options']['chars'];
+ }
+ else {
+ $chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-';
+ }
+ $nbChars=strlen($chars);
+
+ if (isset($this -> params['html_options']['lenght'])) {
+ $lenght=$this -> params['html_options']['lenght'];
+ }
+ else {
+ $lenght=8;
+ }
+ $retVal='';
+ for($i=0;$i<$lenght;$i++){
+ $retVal.=$chars[rand(0,$nbChars-1)];
+ }
+ return $retVal;
+ }
}
?>
diff --git a/trunk/includes/js/LSform.js b/trunk/includes/js/LSform.js
index a63ab31c..6d560b5c 100644
--- a/trunk/includes/js/LSform.js
+++ b/trunk/includes/js/LSform.js
@@ -24,6 +24,16 @@ var LSform = new Class({
el.addEvent('click',this.onImageDeleteBtnClick.bind(this,el));
}, this);
+ this.LSformElement_password_generate_inputHistory = [];
+ $$('img.LSformElement_password_generate_btn').each(function(el) {
+ el.addEvent('click',this.onLSformElement_password_generate_btnClick.bind(this,el));
+ }, this);
+
+ $$('img.LSformElement_password_view_btn').each(function(el) {
+ el.addEvent('click',this.onLSformElement_password_view_btnClick.bind(this,el));
+ }, this);
+ this.initialiseLSformElement_password_generate();
+
this.initialiseLSformElement_select_object();
},
@@ -37,6 +47,12 @@ var LSform = new Class({
}, this);
},
+ initialiseLSformElement_password_generate: function() {
+ $$('input.LSformElement_password_generate').each(function(el) {
+ el.addEvent('keyup',this.onLSformElement_password_generate_inputKeyUp.bind(this,el));
+ }, this);
+ },
+
zoomImg: function(event, src) {
new Event(event).stop();
varLSsmoothbox.openImg(src);
@@ -58,20 +74,21 @@ var LSform = new Class({
img: img.id
};
LSdebug(data);
- varLSdefault.loadingImgDisplay(img);
+ data.imgload = varLSdefault.loadingImgDisplay(img);
new Ajax('index_ajax.php', {data: data, onComplete: this.onAddFieldBtnClickComplete.bind(this)}).request();
},
onAddFieldBtnClickComplete: function(responseText, responseXML) {
- varLSdefault.loadingImgHide();
var data = Json.evaluate(responseText);
LSdebug(data);
if ( data ) {
if ( typeof(data.LSerror) != "undefined" ) {
+ varLSdefault.loadingImgHide();
varLSdefault.displayError(data.LSerror);
return;
}
- else {
+ else {
+ varLSdefault.loadingImgHide(data.imgload);
var li = new Element('li');
var img = $(data.img);
li.setHTML(data.html);
@@ -148,7 +165,6 @@ var LSform = new Class({
onLSformElement_select_object_addBtnClickComplete: function(responseText, responseXML) {
var data = Json.evaluate(responseText);
- LSdebug(data);
if ( data ) {
if ( typeof(data.LSerror) != "undefined" ) {
varLSdefault.displayError(data.LSerror);
@@ -196,6 +212,86 @@ var LSform = new Class({
LSformElement_select_object_deleteBtn: function(img) {
img.getParent().remove();
+ },
+
+ onLSformElement_password_generate_btnClick: function(img) {
+ var getAttrNameAndId = /LSformElement_password_generate_btn_(.*)_([0-9]*)/
+ var getAttrNameAndIdValues = getAttrNameAndId.exec(img.id);
+ var attrName = getAttrNameAndIdValues[1];
+ var fieldId = 'LSformElement_password_' + attrName + '_' + getAttrNameAndIdValues[2];
+
+ var data = {
+ template: 'LSform',
+ action: 'generatePassword',
+ attribute: attrName,
+ objecttype: $('LSform_objecttype').value,
+ idform: $('LSform_idform').value,
+ fieldId: fieldId
+ };
+ data.imgload=varLSdefault.loadingImgDisplay(img);
+ new Ajax('index_ajax.php', {data: data, onComplete: this.onLSformElement_password_generate_btnClickComplete.bind(this)}).request();
+ },
+
+ onLSformElement_password_generate_btnClickComplete: function(responseText, responseXML) {
+ var data = Json.evaluate(responseText);
+ if ( data ) {
+ if ( typeof(data.LSerror) != "undefined" ) {
+ varLSdefault.loadingImgHide();
+ varLSdefault.displayError(data.LSerror);
+ return;
+ }
+ else {
+ varLSdefault.loadingImgHide(data.imgload);
+ this.changeInputType($(data.fieldId),'text');
+ $(data.fieldId).value=data.generatePassword;
+ this.LSformElement_password_generate_inputHistory[data.fieldId]=data.generatePassword;
+ }
+ }
+ },
+
+ onLSformElement_password_generate_inputKeyUp: function(input) {
+ if (input.type=='text') {
+ if((this.LSformElement_password_generate_inputHistory[input.id]!=input.value)&&(typeof(this.LSformElement_password_generate_inputHistory[input.id])!='undefined')&&(this.LSformElement_password_generate_inputHistory[input.id]!='')) {
+ this.onLSformElement_password_generate_inputModify(input);
+ }
+ }
+ },
+
+ onLSformElement_password_generate_inputModify: function(input) {
+ input.value='';
+ input = this.changeInputType(input,'password');
+ this.LSformElement_password_generate_inputHistory[input.id]='';
+ input.focus();
+ },
+
+ onLSformElement_password_view_btnClick: function(img) {
+ var getAttrNameAndId = /LSformElement_password_view_btn_(.*)_([0-9]*)/
+ var getAttrNameAndIdValues = getAttrNameAndId.exec(img.id);
+ var attrName = getAttrNameAndIdValues[1];
+ var fieldId = 'LSformElement_password_' + attrName + '_' + getAttrNameAndIdValues[2];
+
+ input = $(fieldId);
+
+ if (input.type=='password') {
+ input = this.changeInputType(input,'text');
+ }
+ else {
+ input = this.changeInputType(input,'password');
+ }
+ input.focus();
+ },
+
+ changeInputType: function(input,newType) {
+ var newInput = new Element('input');
+ newInput.setProperty('name',input.getProperty('name'));
+ newInput.setProperty('type',newType);
+ newInput.setProperty('class',input.getProperty('class'));
+ newInput.setProperty('id',input.getProperty('id'));
+ newInput.setProperty('value',input.getProperty('value'));
+ newInput.injectAfter(input);
+ input.remove();
+ this.initialiseLSformElement_password_generate();
+ return newInput;
}
});
diff --git a/trunk/index_ajax.php b/trunk/index_ajax.php
index 2aef553c..7d400449 100644
--- a/trunk/index_ajax.php
+++ b/trunk/index_ajax.php
@@ -23,7 +23,7 @@ switch($_REQUEST['template']) {
$list = $GLOBALS['LSsession'] -> getSubDnLdapServerOptions($_SESSION['LSsession_topDn']);
if (is_string($list)) {
$list="";
- $data = array('list_topDn' => $list, 'imgload' => $_REQUEST['imgload']);
+ $data = array('list_topDn' => $list);
}
else if (is_array($list)){
$data = array('LSerror' => $GLOBALS['LSerror']->getErrors());
@@ -59,7 +59,7 @@ switch($_REQUEST['template']) {
}
break;
case 'refreshField':
- if ((isset($_REQUEST['attribute'])) && (isset($_REQUEST['objecttype'])) && (isset($_REQUEST['objectdn'])) && (isset($_REQUEST['idform'])) && (isset($_REQUEST['imgload'])) ) {
+ if ((isset($_REQUEST['attribute'])) && (isset($_REQUEST['objecttype'])) && (isset($_REQUEST['objectdn'])) && (isset($_REQUEST['idform'])) ) {
$object = new $_REQUEST['objecttype']();
//$object -> loadData($_REQUEST['objectdn']);
$form = $object -> getForm($_REQUEST['idform']);
@@ -67,14 +67,31 @@ switch($_REQUEST['template']) {
$val = $field -> getDisplay(true);
if ( $val ) {
$data = array(
- 'html' => $val['html'],
- 'imgload' => $_REQUEST['imgload']
+ 'html' => $val['html']
);
}
else {
$data = array(
- 'LSerror' => $GLOBALS['LSerror']->getErrors(),
- 'imgload' => $_REQUEST['imgload']
+ 'LSerror' => $GLOBALS['LSerror']->getErrors()
+ );
+ }
+ }
+ break;
+ case 'generatePassword':
+ if ((isset($_REQUEST['attribute'])) && (isset($_REQUEST['objecttype'])) && (isset($_REQUEST['fieldId'])) && (isset($_REQUEST['idform'])) ) {
+ $object = new $_REQUEST['objecttype']();
+ $form = $object -> getForm($_REQUEST['idform']);
+ $field=$form -> getElement($_REQUEST['attribute']);
+ $val = $field -> generatePassword();
+ if ( $val ) {
+ $data = array(
+ 'generatePassword' => $val,
+ 'fieldId' => $_REQUEST['fieldId']
+ );
+ }
+ else {
+ $data = array(
+ 'LSerror' => $GLOBALS['LSerror']->getErrors()
);
}
}
@@ -84,7 +101,7 @@ switch($_REQUEST['template']) {
case 'LSrelation':
switch($_REQUEST['action']) {
case 'refreshSession':
- if ((isset($_REQUEST['id'])) && (isset($_REQUEST['href'])) && (isset($_REQUEST['imgload']))) {
+ if ((isset($_REQUEST['id'])) && (isset($_REQUEST['href'])) ) {
if (isset($_SESSION['LSrelation'][$_REQUEST['id']])) {
$conf = $_SESSION['LSrelation'][$_REQUEST['id']];
if ($GLOBALS['LSsession']->loadLSobject($conf['objectType'])) {
@@ -121,7 +138,6 @@ switch($_REQUEST['template']) {
else {
$GLOBALS['LSerror'] -> addErrorCode(1012);
}
- $data['imgload'] = $_REQUEST['imgload'];
}
else {
$GLOBALS['LSerror'] -> addErrorCode(1012);
@@ -129,7 +145,7 @@ switch($_REQUEST['template']) {
}
break;
case 'refreshList':
- if ((isset($_REQUEST['id'])) && (isset($_REQUEST['imgload']))) {
+ if (isset($_REQUEST['id'])) {
if (isset($_SESSION['LSrelation'][$_REQUEST['id']])) {
$conf = $_SESSION['LSrelation'][$_REQUEST['id']];
if ($GLOBALS['LSsession']->loadLSobject($conf['objectType'])) {
@@ -177,7 +193,6 @@ switch($_REQUEST['template']) {
else {
$GLOBALS['LSerror'] -> addErrorCode(1012);
}
- $data['imgload'] = $_REQUEST['imgload'];
}
else {
$GLOBALS['LSerror'] -> addErrorCode(1012);
@@ -185,7 +200,7 @@ switch($_REQUEST['template']) {
}
break;
case 'deleteByDisplayValue':
- if ((isset($_REQUEST['id'])) && (isset($_REQUEST['value'])) && (isset($_REQUEST['imgload']))) {
+ if ((isset($_REQUEST['id'])) && (isset($_REQUEST['value']))) {
if (isset($_SESSION['LSrelation'][$_REQUEST['id']])) {
$conf = $_SESSION['LSrelation'][$_REQUEST['id']];
if ($GLOBALS['LSsession']->loadLSobject($conf['objectType'])) {
@@ -232,7 +247,6 @@ switch($_REQUEST['template']) {
else {
$GLOBALS['LSerror'] -> addErrorCode(1012);
}
- $data['imgload'] = $_REQUEST['imgload'];
}
else {
$GLOBALS['LSerror'] -> addErrorCode(1012);
@@ -254,7 +268,6 @@ switch($_REQUEST['template']) {
$_SESSION['LSselect'][$_REQUEST['objecttype']][]=$_REQUEST['objectdn'];
}
}
- $data=$_REQUEST['imgload'];
break;
case 'dropLSselectobject-item':
if ((isset($_REQUEST['objecttype'])) && (isset($_REQUEST['objectdn']))) {
@@ -268,10 +281,9 @@ switch($_REQUEST['template']) {
$_SESSION['LSselect'][$_REQUEST['objecttype']]=$result;
}
}
- $data=$_REQUEST['imgload'];
break;
case 'refreshSession':
- if ((isset($_REQUEST['objecttype'])) && (isset($_REQUEST['values'])) && (isset($_REQUEST['imgload'])) && (isset($_REQUEST['href'])) ) {
+ if ((isset($_REQUEST['objecttype'])) && (isset($_REQUEST['values'])) && (isset($_REQUEST['href'])) ) {
$_SESSION['LSselect'][$_REQUEST['objecttype']]=array();
$values=json_decode($_REQUEST['values'],false);
if (is_array($values)) {
@@ -280,7 +292,6 @@ switch($_REQUEST['template']) {
}
}
$data=array(
- 'imgload' => $_REQUEST['imgload'],
'href' => $_REQUEST['href'],
'values' => $values
);
@@ -288,8 +299,7 @@ switch($_REQUEST['template']) {
else {
$GLOBALS['LSerror'] -> addErrorCode(1012);
$data = array(
- 'LSerror' => $GLOBALS['LSerror']->getErrors(),
- 'imgload' => $_REQUEST['imgload']
+ 'LSerror' => $GLOBALS['LSerror']->getErrors()
);
}
break;
@@ -301,6 +311,10 @@ if ($GLOBALS['LSerror']->errorsDefined()) {
$data['LSerror'] = $GLOBALS['LSerror']->getErrors();
}
+if (isset($_REQUEST['imgload'])) {
+ $data['imgload'] = $_REQUEST['imgload'];
+}
+
$debug_txt = debug_print(true);
if ($debug_txt != "") {
$data['LSdebug'] = $debug_txt;
diff --git a/trunk/templates/css/LSform.css b/trunk/templates/css/LSform.css
index 29ea7674..9e5d94a8 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_select_object_deleteBtn, img.LSformElement_password_view_btn, img.LSformElement_password_generate_btn {
cursor: pointer;
}
diff --git a/trunk/templates/images/generate.png b/trunk/templates/images/generate.png
new file mode 100644
index 00000000..67de2c6c
Binary files /dev/null and b/trunk/templates/images/generate.png differ