mirror of
https://gitlab.easter-eggs.com/ee/ldapsaisie.git
synced 2024-11-22 09:59:06 +01:00
LSformElement_supannCompositeAttribute: add flexibility
- Add possibility to override parse/format value methods to handle different composite value formats - Add possibility to configure date components LDAP format
This commit is contained in:
parent
441b5d0af9
commit
88bb4eef49
2 changed files with 172 additions and 97 deletions
|
@ -315,6 +315,38 @@ function supannParseCompositeValue($val) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Format une valeur composite SUPANN
|
||||||
|
*
|
||||||
|
* Exemple de valeur en entrée :
|
||||||
|
*
|
||||||
|
* array (
|
||||||
|
* 'key1' => 'value1',
|
||||||
|
* 'key2' => 'value2',
|
||||||
|
* 'key3' => 'value3',
|
||||||
|
* )
|
||||||
|
*
|
||||||
|
* Exemple de valeur généré :
|
||||||
|
*
|
||||||
|
* [key1=value1][key2=value2][key3=value3]
|
||||||
|
*
|
||||||
|
* Les clés sont traitées dans l'ordre d'apparition dans le tableau et
|
||||||
|
* seul les clés avec une valeur non vide sont présentes dans le résultat.
|
||||||
|
*
|
||||||
|
* @author Benjamin Renard <brenard@easter-eggs.com>
|
||||||
|
*
|
||||||
|
* @param[in] $val Tableau associatif des valeurs
|
||||||
|
*
|
||||||
|
* @retval array Un tableau contenant key->value ou false en cas d'erreur
|
||||||
|
**/
|
||||||
|
function supannFormatCompositeValue($val) {
|
||||||
|
$retval = "";
|
||||||
|
foreach($val as $k => $v)
|
||||||
|
if (!is_empty($v))
|
||||||
|
$retval .= "[".$k."=".$v.']';
|
||||||
|
return $retval;
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* Fonctions relatives aux entités
|
* Fonctions relatives aux entités
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
|
|
|
@ -69,7 +69,6 @@ class LSformElement_supannCompositeAttribute extends LSformElement {
|
||||||
|
|
||||||
var $_postParsedData=null;
|
var $_postParsedData=null;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*
|
*
|
||||||
|
@ -103,10 +102,13 @@ class LSformElement_supannCompositeAttribute extends LSformElement {
|
||||||
|
|
||||||
case 'date':
|
case 'date':
|
||||||
case 'datetime':
|
case 'datetime':
|
||||||
$this -> components[$c]['format'] = 'd/m/Y';
|
$this -> components[$c]['timezone'] = LSconfig :: get('timezone', null, null, $this -> components[$c]);
|
||||||
|
$this -> components[$c]['naive'] = $this -> components[$c]['timezone'] == 'naive';
|
||||||
|
$this -> components[$c]['ldap_format'] = LSconfig :: get('format', null, null, $this -> components[$c]);
|
||||||
|
$this -> components[$c]['php_format'] = 'd/m/Y';
|
||||||
$this -> components[$c]['js_format'] = '%d/%m/%Y';
|
$this -> components[$c]['js_format'] = '%d/%m/%Y';
|
||||||
if (cconf['type'] == 'datetime') {
|
if (cconf['type'] == 'datetime') {
|
||||||
$this -> components[$c]['format'] .= ' H:i:s';
|
$this -> components[$c]['php_format'] .= ' H:i:s';
|
||||||
$this -> components[$c]['js_format'] .= ' %H:%M:%S';
|
$this -> components[$c]['js_format'] .= ' %H:%M:%S';
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -114,6 +116,36 @@ class LSformElement_supannCompositeAttribute extends LSformElement {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse une valeur composite gérer par ce type d'attribut
|
||||||
|
*
|
||||||
|
* Par défaut, cette méthode fait appel à la fonction supannParseCompositeValue()
|
||||||
|
* fournie par le LSaddon supann, mais elle peut-être réécrite (parrallèlement à
|
||||||
|
* la méthode formatCompositeValue()) pour supporter un autre format de valeur
|
||||||
|
* composite.
|
||||||
|
*
|
||||||
|
* @param $value string La valeur à parser
|
||||||
|
* @return array|null La valeur parsée, ou NULL en cas de problème
|
||||||
|
*/
|
||||||
|
public function parseCompositeValue($value) {
|
||||||
|
return supannParseCompositeValue($value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Format une valeur composite gérer par ce type d'attribut
|
||||||
|
*
|
||||||
|
* Par défaut, cette méthode fait appel à la fonction supannFormatCompositeValue()
|
||||||
|
* fournie par le LSaddon supann, mais elle peut-être réécrite (parrallèlement à
|
||||||
|
* la méthode parseCompositeValue()) pour supporter un autre format de valeur
|
||||||
|
* composite.
|
||||||
|
*
|
||||||
|
* @param $value string La valeur à parser
|
||||||
|
* @return array|null|false La valeur formatée, NULL en cas de valeur vide, ou False en cas de problème
|
||||||
|
*/
|
||||||
|
public function formatCompositeValue($value) {
|
||||||
|
return supannFormatCompositeValue($value);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retourne les infos d'affichage de l'élément
|
* Retourne les infos d'affichage de l'élément
|
||||||
*
|
*
|
||||||
|
@ -127,7 +159,7 @@ class LSformElement_supannCompositeAttribute extends LSformElement {
|
||||||
$parseValues=array();
|
$parseValues=array();
|
||||||
$invalidValues=array();
|
$invalidValues=array();
|
||||||
foreach($this -> values as $val) {
|
foreach($this -> values as $val) {
|
||||||
$keyValue=supannParseCompositeValue($val);
|
$keyValue = $this -> parseCompositeValue($val);
|
||||||
if ($keyValue) {
|
if ($keyValue) {
|
||||||
$parseValue=array('value' => $val);
|
$parseValue=array('value' => $val);
|
||||||
foreach($keyValue as $key => $value) {
|
foreach($keyValue as $key => $value) {
|
||||||
|
@ -247,10 +279,14 @@ class LSformElement_supannCompositeAttribute extends LSformElement {
|
||||||
|
|
||||||
case 'date':
|
case 'date':
|
||||||
case 'datetime':
|
case 'datetime':
|
||||||
$retval['datetime'] = ldapDate2DateTime($val, LSconfig :: get('timezone', null, 'string', $this -> components[$c]) == 'naive');
|
$retval['datetime'] = ldapDate2DateTime(
|
||||||
|
$val,
|
||||||
|
$this -> components[$c]['naive'],
|
||||||
|
$this -> components[$c]['ldap_format']
|
||||||
|
);
|
||||||
self :: log_trace("translateComponentValue($c, $val): datetime = ".varDump($retval['datetime']));
|
self :: log_trace("translateComponentValue($c, $val): datetime = ".varDump($retval['datetime']));
|
||||||
if ($retval['datetime']) {
|
if ($retval['datetime']) {
|
||||||
$retval['translated'] = $retval['datetime'] -> format($this -> components[$c]['format']);
|
$retval['translated'] = $retval['datetime'] -> format($this -> components[$c]['php_format']);
|
||||||
self :: log_trace("translateComponentValue($c, $val): translated = '".$retval['translated']."'");
|
self :: log_trace("translateComponentValue($c, $val): translated = '".$retval['translated']."'");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -302,114 +338,121 @@ class LSformElement_supannCompositeAttribute extends LSformElement {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
$count=0;
|
$count = 0;
|
||||||
$end=false;
|
$end = false;
|
||||||
$parseValues=array();
|
$parseValues = array();
|
||||||
$return[$this -> name]=array();
|
$return[$this -> name] = array();
|
||||||
while ($end==false) {
|
while ($end==false) {
|
||||||
$value="";
|
$value = array();
|
||||||
$parseValue=array();
|
$parseValue = array();
|
||||||
$errors=array();
|
$errors = array();
|
||||||
$unemptyComponents=array();
|
$unemptyComponents = array();
|
||||||
foreach ($this -> components as $c => $cconf) {
|
foreach ($this -> components as $c => $cconf) {
|
||||||
if (isset($_POST[$this -> name.'__'.$c][$count])) {
|
if (isset($_POST[$this -> name.'__'.$c][$count])) {
|
||||||
$parseValue[$c]=$_POST[$this -> name.'__'.$c][$count];
|
$parseValue[$c] = $_POST[$this -> name.'__'.$c][$count];
|
||||||
if ($cconf['required'] && empty($parseValue[$c])) {
|
if ($cconf['required'] && empty($parseValue[$c])) {
|
||||||
$errors[]=getFData(__('Component %{c} must be defined'),__($cconf['label']));
|
$errors[] = getFData(__('Component %{c} must be defined'),__($cconf['label']));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (empty($parseValue[$c])) {
|
if (empty($parseValue[$c])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$unemptyComponents[]=$c;
|
$unemptyComponents[] = $c;
|
||||||
switch ($cconf['type']) {
|
// Handle POST component value (by type)
|
||||||
case 'table':
|
switch ($cconf['type']) {
|
||||||
$pv = supannParseLabeledValue($parseValue[$c]);
|
case 'table':
|
||||||
self :: log_debug("supannParseLabeledValue(".$parseValue[$c].") == ".varDump($pv));
|
$pv = supannParseLabeledValue($parseValue[$c]);
|
||||||
if ($pv) {
|
self :: log_debug("supannParseLabeledValue(".$parseValue[$c].") == ".varDump($pv));
|
||||||
if (!supannValidateNomenclatureValue($cconf['table'],$pv['label'],$pv['value'])) {
|
if ($pv) {
|
||||||
|
if (!supannValidateNomenclatureValue($cconf['table'],$pv['label'],$pv['value'])) {
|
||||||
|
$errors[] = getFData(__('Invalid value for component %{c}.'), __($cconf['label']));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$errors[] = getFData(__('Unparsable value for component %{c}.'), __($cconf['label']));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'select':
|
||||||
|
if (!array_key_exists($parseValue[$c], $cconf['possible_values'])) {
|
||||||
$errors[] = getFData(__('Invalid value for component %{c}.'), __($cconf['label']));
|
$errors[] = getFData(__('Invalid value for component %{c}.'), __($cconf['label']));
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
else {
|
|
||||||
$errors[] = getFData(__('Unparsable value for component %{c}.'), __($cconf['label']));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'select':
|
case 'date':
|
||||||
if (!array_key_exists($parseValue[$c], $cconf['possible_values'])) {
|
case 'datetime':
|
||||||
$errors[] = getFData(__('Invalid value for component %{c}.'), __($cconf['label']));
|
$datetime = date_create_from_format($cconf['php_format'], $parseValue[$c]);
|
||||||
}
|
if ($datetime) {
|
||||||
break;
|
$parseValue[$c] = dateTime2LdapDate(
|
||||||
|
$datetime,
|
||||||
|
$this -> components[$c]['timezone'],
|
||||||
|
$this -> components[$c]['ldap_format']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$errors[] = getFData(__('Invalid value for component %{c}.'), __($cconf['label']));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 'date':
|
case 'codeEntite':
|
||||||
case 'datetime':
|
if (!supannValidateEntityId($parseValue[$c])) {
|
||||||
$datetime = date_create_from_format($cconf['format'], $parseValue[$c]);
|
$errors[] = getFData(__('Invalid value for component %{c}.'), __($cconf['label']));
|
||||||
if ($datetime) {
|
}
|
||||||
$parseValue[$c] = dateTime2LdapDate(
|
break;
|
||||||
$datetime,
|
|
||||||
LSconfig :: get('timezone', null, 'string', $cconf)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$errors[] = getFData(__('Invalid value for component %{c}.'), __($cconf['label']));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'codeEntite':
|
case 'parrainDN':
|
||||||
if (!supannValidateEntityId($parseValue[$c])) {
|
if (!supannValidateParrainDN($parseValue[$c])) {
|
||||||
$errors[] = getFData(__('Invalid value for component %{c}.'), __($cconf['label']));
|
$errors[] = getFData(__('Invalid value for component %{c}.'), __($cconf['label']));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case 'parrainDN':
|
// Check component value (if configured)
|
||||||
if (!supannValidateParrainDN($parseValue[$c])) {
|
if (isset($cconf['check_data']) && is_array($cconf['check_data'])) {
|
||||||
$errors[] = getFData(__('Invalid value for component %{c}.'), __($cconf['label']));
|
foreach($cconf['check_data'] as $ruleType => $rconf) {
|
||||||
}
|
$className='LSformRule_'.$ruleType;
|
||||||
break;
|
if (LSsession::loadLSclass($className)) {
|
||||||
}
|
$r=new $className();
|
||||||
|
if (!$r -> validate($parseValue[$c],$rconf,$this)) {
|
||||||
if (isset($cconf['check_data']) && is_array($cconf['check_data'])) {
|
if (isset($rconf['msg'])) {
|
||||||
foreach($cconf['check_data'] as $ruleType => $rconf) {
|
$errors[]=getFData(__($rconf['msg']),__($cconf['label']));
|
||||||
$className='LSformRule_'.$ruleType;
|
}
|
||||||
if (LSsession::loadLSclass($className)) {
|
else {
|
||||||
$r=new $className();
|
$errors[]=getFData(__('Invalid value for component %{c}.'),__($cconf['label']));
|
||||||
if (!$r -> validate($parseValue[$c],$rconf,$this)) {
|
}
|
||||||
if (isset($rconf['msg'])) {
|
|
||||||
$errors[]=getFData(__($rconf['msg']),__($cconf['label']));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$errors[]=getFData(__('Invalid value for component %{c}.'),__($cconf['label']));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
else {
|
||||||
else {
|
$errors[]=getFData(__("Can't validate value of component %{c}."),__($cconf['label']));
|
||||||
$errors[]=getFData(__("Can't validate value of component %{c}."),__($cconf['label']));
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$value[$c] = $parseValue[$c];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// end of value break
|
||||||
|
$end=true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
$value.="[".$c."=".$parseValue[$c].']';
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// end of value break
|
|
||||||
$end=true;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
// Format value
|
||||||
if (!$end) {
|
$value = $this -> formatCompositeValue($value);
|
||||||
if (!empty($unemptyComponents)) {
|
|
||||||
foreach($errors as $e) {
|
if (!$end) {
|
||||||
$this -> form -> setElementError($this -> attr_html,$e);
|
if (!empty($unemptyComponents)) {
|
||||||
|
foreach($errors as $e) {
|
||||||
|
$this -> form -> setElementError($this -> attr_html,$e);
|
||||||
|
}
|
||||||
|
$return[$this -> name][] = $value;
|
||||||
|
$parseValues[] = $parseValue;
|
||||||
}
|
}
|
||||||
$return[$this -> name][]=$value;
|
$count++;
|
||||||
$parseValues[]=$parseValue;
|
|
||||||
}
|
}
|
||||||
$count++;
|
|
||||||
}
|
}
|
||||||
}
|
$this -> _postParsedData = $parseValues;
|
||||||
$this -> _postParsedData=$parseValues;
|
return true;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue