diff --git a/doc/conf/LSobject/LSsearch.docbook b/doc/conf/LSobject/LSsearch.docbook index 701ea756..8d07532c 100644 --- a/doc/conf/LSobject/LSsearch.docbook +++ b/doc/conf/LSobject/LSsearch.docbook @@ -47,6 +47,11 @@ configuration des &LSobjects;, dans la variable LSsearch ), 'col2' => array( 'label' => 'label column 2', + 'generateFunction' => '[fonction de génération]', + 'additionalAttrs' => array('[attr1]', '[attr2]', ...) + ), + 'col3' => array( + 'label' => 'label column 3', 'LSformat' => '[LSformat]', 'alternativeLSformats' => array ( '[LSformat 1]', @@ -59,7 +64,7 @@ configuration des &LSobjects;, dans la variable LSsearch '[LSprofile 1]', '[LSprofile 2]' ) - ) + ), ), 'customActions' => array ( // Configuration des customActions pour les recherches de ce type d'objet @@ -306,6 +311,24 @@ contexte dans lequel cette recherche est effectuée. + + generateFunction + + Le nom d'une fonction qui sera utilisée pour générer la valeur d'affichage de + cette colonne. La fonction prendra en paramètre une référence de l'objet + LSsearchEntry et retournera la valeur de la colonne. + + + + + additionalAttrs + + Un tableau de nom d'attributs à inclure dans le resultat de la recherche LDAP. + Ce tableau permet notamment d'inclure les attributs nécessaires au bon fonctionnement + de la fonction generateFunction. + + + cssStyle diff --git a/public_html/includes/class/class.LSsearch.php b/public_html/includes/class/class.LSsearch.php index b5b154e3..bfcbeb40 100644 --- a/public_html/includes/class/class.LSsearch.php +++ b/public_html/includes/class/class.LSsearch.php @@ -798,20 +798,26 @@ class LSsearch { // Extra Columns if ($this -> params['extraDisplayedColumns'] && is_array($this -> config['extraDisplayedColumns'])) { foreach ($this -> config['extraDisplayedColumns'] as $id => $conf) { - $attrs=getFieldInFormat($conf['LSformat']); - if(is_array($conf['alternativeLSformats'])) { - foreach ($conf['alternativeLSformats'] as $format) { - $attrs=array_merge($attrs,getFieldInFormat($format)); + $attrs=array(); + if (isset($conf['LSformat'])) { + $attrs=getFieldInFormat($conf['LSformat']); + if(is_array($conf['alternativeLSformats'])) { + foreach ($conf['alternativeLSformats'] as $format) { + $attrs=array_merge($attrs,getFieldInFormat($format)); + } + } + else { + $attrs=array_merge($attrs,getFieldInFormat($conf['alternativeLSformats'])); + } + if(isset($conf['formaterLSformat'])) { + $attrs=array_unique(array_merge($attrs,getFieldInFormat($conf['formaterLSformat']))); + if(($key = array_search('val', $attrs)) !== false) { + unset($attrs[$key]); + } } } - else { - $attrs=array_merge($attrs,getFieldInFormat($conf['alternativeLSformats'])); - } - if(isset($conf['formaterLSformat'])) { - $attrs=array_unique(array_merge($attrs,getFieldInFormat($conf['formaterLSformat']))); - if(($key = array_search('val', $attrs)) !== false) { - unset($attrs[$key]); - } + if(isset($conf['additionalAttrs'])) { + $attrs=array_unique(array_merge($attrs,(is_array($conf['additionalAttrs'])?$conf['additionalAttrs']:array($conf['additionalAttrs'])))); } if(is_array($retval['attributes'])) { $retval['attributes']=array_merge($attrs,$retval['attributes']); diff --git a/public_html/includes/class/class.LSsearchEntry.php b/public_html/includes/class/class.LSsearchEntry.php index 49245414..afbaec40 100644 --- a/public_html/includes/class/class.LSsearchEntry.php +++ b/public_html/includes/class/class.LSsearchEntry.php @@ -196,25 +196,32 @@ class LSsearchEntry { if(isset($this -> cache[$key])) { return $this -> cache[$key]; } - $ret=$this -> getFData($this->LSsearch->extraDisplayedColumns[$key]['LSformat']); - if (empty($ret) && is_array($this->LSsearch->extraDisplayedColumns[$key]['alternativeLSformats'])) { - foreach($this->LSsearch->extraDisplayedColumns[$key]['alternativeLSformats'] as $format) { - $ret=$this -> getFData($format); - if (!empty($ret)) break; - } + if (isset($this->LSsearch->extraDisplayedColumns[$key]['generateFunction'])) { + if (!is_callable($this->LSsearch->extraDisplayedColumns[$key]['generateFunction'])) + return False; + $ret=call_user_func_array($this->LSsearch->extraDisplayedColumns[$key]['generateFunction'],array(&$this)); } - if (!empty($ret) && isset($this->LSsearch->extraDisplayedColumns[$key]['formaterLSformat'])) { - $this -> registerOtherValue('val',$ret); - $ret=$this -> getFData($this->LSsearch->extraDisplayedColumns[$key]['formaterLSformat']); - } - if (!empty($ret) && isset($this->LSsearch->extraDisplayedColumns[$key]['formaterFunction'])) { - if (is_callable($this->LSsearch->extraDisplayedColumns[$key]['formaterFunction'])) { - $ret=call_user_func($this->LSsearch->extraDisplayedColumns[$key]['formaterFunction'],$ret); + else { + $ret=$this -> getFData($this->LSsearch->extraDisplayedColumns[$key]['LSformat']); + if (empty($ret) && is_array($this->LSsearch->extraDisplayedColumns[$key]['alternativeLSformats'])) { + foreach($this->LSsearch->extraDisplayedColumns[$key]['alternativeLSformats'] as $format) { + $ret=$this -> getFData($format); + if (!empty($ret)) break; + } } - else { - $func=$this->LSsearch->extraDisplayedColumns[$key]['formaterFunction']; - if(is_array($func)) $func=print_r($func,1); - LSerror::addErrorCode('LSsearchEntry_01',array('func' => $func, 'column' => $key)); + if (!empty($ret) && isset($this->LSsearch->extraDisplayedColumns[$key]['formaterLSformat'])) { + $this -> registerOtherValue('val',$ret); + $ret=$this -> getFData($this->LSsearch->extraDisplayedColumns[$key]['formaterLSformat']); + } + if (!empty($ret) && isset($this->LSsearch->extraDisplayedColumns[$key]['formaterFunction'])) { + if (is_callable($this->LSsearch->extraDisplayedColumns[$key]['formaterFunction'])) { + $ret=call_user_func($this->LSsearch->extraDisplayedColumns[$key]['formaterFunction'],$ret); + } + else { + $func=$this->LSsearch->extraDisplayedColumns[$key]['formaterFunction']; + if(is_array($func)) $func=print_r($func,1); + LSerror::addErrorCode('LSsearchEntry_01',array('func' => $func, 'column' => $key)); + } } } $this -> cache[$key] = $ret;