mirror of
https://gitlab.easter-eggs.com/ee/ldapsaisie.git
synced 2024-11-22 18:09:06 +01:00
LSobject : Add possibility to add extra displayed columns in search result
This commit is contained in:
parent
73c9b385f8
commit
33cef8be28
7 changed files with 142 additions and 2 deletions
|
@ -38,6 +38,20 @@ configuration des &LSobjects;, dans la variable <varname>LSsearch</varname>
|
|||
'predefinedFilters' => array(
|
||||
'filter1' => 'label filter1',
|
||||
'filter2' => 'label filter2'
|
||||
),
|
||||
'extraDisplayedColumns' => array(
|
||||
'col1' => array(
|
||||
'label' => 'label column 1',
|
||||
'LSformat' => '[LSformat]'
|
||||
),
|
||||
'col2' => array(
|
||||
'label' => 'label column 2',
|
||||
'LSformat' => '[LSformat]',
|
||||
'alternativeLSformats' => array (
|
||||
'[LSformat 1]',
|
||||
'[LSformat 2]'
|
||||
)
|
||||
)
|
||||
)
|
||||
);]]>
|
||||
</programlisting>
|
||||
|
@ -217,6 +231,44 @@ contexte dans lequel cette recherche est effectuée.</para>
|
|||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>extraDisplayedColumns</term>
|
||||
<listitem>
|
||||
<para>Tableau associatif contenant des colonnes supplémentaires à afficher dans les
|
||||
résultats de recherche. Les clés sont les identifiants des colonnes supplémentaires
|
||||
et les valeurs sont leur configuration définie à partir des paramètres suivant :</para>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry>
|
||||
<term>label</term>
|
||||
<listitem>
|
||||
<simpara>Le label de la colonne.</simpara>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>LSformat</term>
|
||||
<listitem>
|
||||
<simpara>Le &LSformat; d'affichage de la colonne. Ce format est composé à partir
|
||||
des attributs des objets LDAP dans leur format brut.</simpara>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>alternativeLSformats</term>
|
||||
<listitem>
|
||||
<simpara>Tableau des &LSformats; alternatifs à utiliser si le résultat du format
|
||||
principal est vide. Les formats définis dans cette liste sont essayés les uns
|
||||
après les autres et le premier &LSformat; retournant une valeur non-vide est
|
||||
utilisé.</simpara>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</para>
|
||||
|
||||
|
|
|
@ -143,6 +143,12 @@ $GLOBALS['LSobjects']['LSpeople'] = array (
|
|||
'predefinedFilters' => array (
|
||||
'(jpegPhoto=*)' => 'With photo',
|
||||
'(!(jpegPhoto=*))' => 'Without photo'
|
||||
),
|
||||
'extraDisplayedColumns' => array (
|
||||
'mail' => array (
|
||||
'label' => 'Mail',
|
||||
'LSformat' => '%{mail}'
|
||||
),
|
||||
)
|
||||
),
|
||||
|
||||
|
|
|
@ -60,7 +60,8 @@ class LSsearch {
|
|||
'nbObjectsByPage' => NB_LSOBJECT_LIST,
|
||||
'nbPageLinkByPage' => 10,
|
||||
'customInfos' => array(),
|
||||
'withoutCache' => false
|
||||
'withoutCache' => false,
|
||||
'extraDisplayedColumns' => false,
|
||||
);
|
||||
|
||||
// The cache of search parameters
|
||||
|
@ -365,7 +366,7 @@ class LSsearch {
|
|||
|
||||
// Sort By
|
||||
if (isset($params['sortBy']) && is_string($params['sortBy'])) {
|
||||
if (in_array($params['sortBy'],array('displayName','subDn'))) {
|
||||
if (in_array($params['sortBy'],array('displayName','subDn')) || ($this ->extraDisplayedColumns && isset($this ->extraDisplayedColumns[$params['sortBy']]))) {
|
||||
if ($this -> params['sortBy'] == $params['sortBy']) {
|
||||
$this -> toggleSortDirection();
|
||||
}
|
||||
|
@ -452,6 +453,11 @@ class LSsearch {
|
|||
}
|
||||
}
|
||||
|
||||
// Extra Columns
|
||||
if (isset($params['extraDisplayedColumns'])) {
|
||||
$this -> params['extraDisplayedColumns']=(bool)$params['extraDisplayedColumns'];
|
||||
}
|
||||
|
||||
// predefinedFilter
|
||||
if (isset($params['predefinedFilter'])) {
|
||||
if (is_string($params['predefinedFilter'])) {
|
||||
|
@ -788,6 +794,31 @@ class LSsearch {
|
|||
else {
|
||||
$retval['attributes']=$attrs;
|
||||
}
|
||||
|
||||
// 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));
|
||||
}
|
||||
}
|
||||
else {
|
||||
$attrs=array_merge($attrs,getFieldInFormat($conf['alternativeLSformats']));
|
||||
}
|
||||
if(is_array($retval['attributes'])) {
|
||||
$retval['attributes']=array_merge($attrs,$retval['attributes']);
|
||||
}
|
||||
else {
|
||||
$retval['attributes']=$attrs;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (is_array($retval['attributes'])) {
|
||||
$retval['attributes']=array_unique($retval['attributes']);
|
||||
}
|
||||
|
||||
$this -> _searchParams = $retval;
|
||||
}
|
||||
|
@ -1042,6 +1073,14 @@ class LSsearch {
|
|||
}
|
||||
return $retval;
|
||||
}
|
||||
elseif ($key=='extraDisplayedColumns') {
|
||||
if ($this->params['extraDisplayedColumns'] && is_array($this -> config['extraDisplayedColumns'])) {
|
||||
return $this -> config['extraDisplayedColumns'];
|
||||
}
|
||||
else {
|
||||
return False;
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw new Exception('Incorrect property !');
|
||||
}
|
||||
|
|
|
@ -174,6 +174,20 @@ class LSsearchEntry {
|
|||
}
|
||||
return;
|
||||
}
|
||||
elseif (is_array($this->LSsearch->extraDisplayedColumns) && array_key_exists($key,$this->LSsearch->extraDisplayedColumns)) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
$this -> cache[$key] = $ret;
|
||||
return $ret;
|
||||
}
|
||||
elseif (in_array($key,array_keys($this -> attrs))) {
|
||||
return $this -> attrs[$key];
|
||||
}
|
||||
|
|
|
@ -122,6 +122,11 @@ if (loadDir('../'.LS_OBJECTS_DIR) && loadDir('../'.LS_LOCAL_DIR.LS_OBJECTS_DIR))
|
|||
add($lay);
|
||||
}
|
||||
}
|
||||
if (is_array($conf['LSsearch']['extraDisplayedColumns'])) {
|
||||
foreach($conf['LSsearch']['extraDisplayedColumns'] as $cid => $cconf) {
|
||||
add($cconf['label']);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(is_array($conf['attrs'])) {
|
||||
|
|
|
@ -70,12 +70,35 @@
|
|||
{/if}
|
||||
</th>
|
||||
{/if}
|
||||
{if $LSsearch->extraDisplayedColumns}
|
||||
{foreach from=$LSsearch->extraDisplayedColumns item=conf key=cid}
|
||||
<th class='LSobject-list'>
|
||||
{if $LSsearch->sort}
|
||||
<a href='view.php?LSobject={$LSsearch->LSobject}&sortBy={$cid}&nocache={$smarty.now}'>
|
||||
{if $LSsearch->sortBy == $cid}
|
||||
<strong>{tr msg=$conf.label}</strong>
|
||||
<img src='{img name=$LSsearch->sortDirection}' class='LSobject-list-ordersense' alt='{$LSsearch->sortDirection}'/>
|
||||
{else}
|
||||
{tr msg=$conf.label}
|
||||
{/if}
|
||||
</a>
|
||||
{else}
|
||||
{tr msg=$conf.label}
|
||||
{/if}
|
||||
</th>
|
||||
{/foreach}
|
||||
{/if}
|
||||
<th class='LSobject-list'>{$LSsearch->label_actions}</th>
|
||||
</tr>
|
||||
{foreach from=$page.list item=object}
|
||||
<tr class='{cycle values="LSobject-list,LSobject-list LSobject-list-bis"}'>
|
||||
<td class='LSobject-list LSobject-list-names'><a href='view.php?LSobject={$LSsearch->LSobject}&dn={$object->dn|escape:'url'}' class='LSobject-list'>{$object->displayName}</a> </td>
|
||||
{if $LSsearch->displaySubDn}<td class='LSobject-list'>{$object->subDn}</td>{/if}
|
||||
{if $LSsearch->extraDisplayedColumns}
|
||||
{foreach from=$LSsearch->extraDisplayedColumns item=conf key=cid}
|
||||
<td class='LSobject-list'>{$object->$cid}</th>
|
||||
{/foreach}
|
||||
{/if}
|
||||
<td class='LSobject-list LSobject-list-actions'>
|
||||
{foreach from=$object->actions item=item}
|
||||
<a href='{$item.url}' class='LSobject-list-actions'><img src='{img name=$item.action}' alt='{$item.label}' title='{$item.label}'/></a>
|
||||
|
|
|
@ -109,6 +109,7 @@ if(LSsession :: startLSsession()) {
|
|||
LStemplate :: assign('pagetitle',$object -> getLabel());
|
||||
|
||||
$LSsearch = new LSsearch($LSobject,'LSview');
|
||||
$LSsearch -> setParam('extraDisplayedColumns',True);
|
||||
$LSsearch -> setParamsFormPostData();
|
||||
|
||||
$searchForm = array (
|
||||
|
|
Loading…
Reference in a new issue