Add visibleTo parameter to extra displayed columns
authorBenjamin Renard <brenard@easter-eggs.com>
Wed, 25 Jan 2017 14:39:06 +0000 (15:39 +0100)
committerBenjamin Renard <brenard@easter-eggs.com>
Wed, 25 Jan 2017 14:39:06 +0000 (15:39 +0100)
doc/conf/LSobject/LSsearch.docbook
public_html/includes/class/class.LSsearch.php
public_html/includes/class/class.LSsession.php
public_html/templates/default/viewSearch.tpl

index d387a32..8d7ee3a 100644 (file)
@@ -54,6 +54,10 @@ configuration des &LSobjects;, dans la variable <varname>LSsearch</varname>
       'formaterLSformat' => '[LSformat]',
       'formaterFunction' => '[fonction de formatage]',
       'cssStyle' => '[CSS style]',
+      'visibleTo' => array (
+        '[LSprofile 1]',
+        '[LSprofile 2]'
+      )
     )
   ),
   'customActions' =>  array (
@@ -304,6 +308,14 @@ contexte dans lequel cette recherche est effectuée.</para>
         </listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term>visibleTo</term>
+        <listitem>
+          <simpara>Ce paramètre permet de restreindre la visibilité de cette colonne aux seuls
+          &LSprofiles; spécifiés. S'il est omis, la colonne sera visible pour tous.</simpara>
+        </listitem>
+      </varlistentry>
+
     </variablelist>
   </listitem>
 </varlistentry>
index d3ddc4e..b5b154e 100644 (file)
@@ -1088,6 +1088,18 @@ class LSsearch {
         return False;
       }
     }
+    elseif ($key=='visibleExtraDisplayedColumns') {
+      if ($this->params['extraDisplayedColumns'] && is_array($this -> config['extraDisplayedColumns'])) {
+        $ret=array();
+        foreach($this->config['extraDisplayedColumns'] as $col => $conf) {
+          if (isset($conf['visibleTo']) && !LSsession :: isLSprofiles($this -> basedn, $conf['visibleTo'])) {
+            continue;
+          }
+          $ret[$col]=$conf;
+        }
+        return $ret;
+      }
+    }
     else {
       throw new Exception('Incorrect property !');
     }
index fc184fb..338b0d8 100644 (file)
@@ -1796,9 +1796,9 @@ class LSsession {
   /**
    * Dit si l'utilisateur est du profil pour le DN spécifié
    *
-   * @param[in] string $profile de l'objet
    * @param[in] string $dn DN de l'objet
-   * 
+   * @param[in] string $profile Profil
+   *
    * @retval boolean True si l'utilisateur est du profil sur l'objet, false sinon.
    */
   public static function isLSprofile($dn,$profile) {
@@ -1814,6 +1814,22 @@ class LSsession {
     }
     return;
   }
+
+  /**
+   * Dit si l'utilisateur est d'au moins un des profils pour le DN spécifié
+   *
+   * @param[in] string $dn DN de l'objet
+   * @param[in] string $profiles Profils
+   *
+   * @retval boolean True si l'utilisateur est d'au moins un profil sur l'objet, false sinon.
+   */
+  public static function isLSprofiles($dn,$profiles) {
+    foreach ($profiles as $profile) {
+      if (self :: isLSprofile($dn,$profile))
+        return true;
+    }
+    return false;
+  }
   
   /**
    * Retourne qui est l'utilisateur par rapport Ã  l'object
index 0025a4b..6bd16d2 100644 (file)
@@ -71,7 +71,7 @@
         </th>
       {/if}
       {if $LSsearch->extraDisplayedColumns}
-        {foreach from=$LSsearch->extraDisplayedColumns item=conf key=cid}
+        {foreach from=$LSsearch->visibleExtraDisplayedColumns item=conf key=cid}
         <th class='LSobject-list'{if $conf.cssStyle} style="{$conf.cssStyle}"{/if}>
         {if $LSsearch->sort}
           <a href='view.php?LSobject={$LSsearch->LSobject}&amp;sortBy={$cid}&amp;nocache={$smarty.now}'>
@@ -95,7 +95,7 @@
         <td class='LSobject-list LSobject-list-names'><a href='view.php?LSobject={$LSsearch->LSobject}&amp;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}
+          {foreach from=$LSsearch->visibleExtraDisplayedColumns item=conf key=cid}
           <td class='LSobject-list'{if $conf.cssStyle} style="{$conf.cssStyle}"{/if}>{$object->$cid}</td>
           {/foreach}
         {/if}
     </tr>
     {foreachelse}
       <tr class='LSobject-list'>
-        <td colspan='{if $LSsearch->extraDisplayedColumns}{count($LSsearch->extraDisplayedColumns)+3}{else}3{/if}' class='LSobject-list-without-result'>
+        <td colspan='{if $LSsearch->extraDisplayedColumns}{count($LSsearch->visibleExtraDisplayedColumns)+3}{else}3{/if}' class='LSobject-list-without-result'>
           {$LSsearch->label_no_result}
         </td>
       </tr>