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