LSformElement :: select_object : Add sort feature (with sort and sortDirection parame...
authorBenjamin Renard <brenard@easter-eggs.com>
Tue, 30 Sep 2014 14:26:12 +0000 (16:26 +0200)
committerBenjamin Renard <brenard@easter-eggs.com>
Tue, 30 Sep 2014 14:26:19 +0000 (16:26 +0200)
doc/conf/LSattribute/LSattr_html/LSattr_html_select_object.docbook
public_html/includes/class/class.LSformElement_select_object.php

index 6808f3a..b0cd3c1 100644 (file)
@@ -12,7 +12,9 @@
      'object_type' => '[Type d'LSobject selectionnable]',
      'display_name_format' => '[LSformat du nom d'affichage des LSobjects]',
      'value_attribute' => '[Nom de l'attribut clé des LSobjects]'
-   )
+   ),
+   'sort' => [Booléen],
+   'sortDirection' => '[ASC|DESC]'
 ),]]>
 ...
 </programlisting>
       <simpara>Nom du type d'&LSobject; en référence.</simpara>
     </listitem>
   </varlistentry>
-</variablelist>
 
-<variablelist>
   <varlistentry>
     <term>display_name_format</term>
     <listitem>
       <simpara>&LSformat; du nom d'affichage des objets lors de leur sélection.</simpara>
     </listitem>
   </varlistentry>
-</variablelist>
 
-<variablelist>
   <varlistentry>
     <term>value_attribute</term>
     <listitem>
@@ -55,9 +53,7 @@
       <emphasis>uid</emphasis>).</simpara>
     </listitem>
   </varlistentry>
-</variablelist>
 
-<variablelist>
   <varlistentry>
     <term>filter</term>
     <listitem>
   </listitem>
 </varlistentry>
 
+<varlistentry>
+  <term>sort</term>
+  <listitem>
+    <simpara>Booléen définissant si la liste des objets choisis doit être
+    triée ou non (Vrai par défaut). Le trie est effectué sur les libellés
+    des objets choisis.</simpara>
+  </listitem>
+</varlistentry>
+
+<varlistentry>
+  <term>sortDirection</term>
+  <listitem>
+    <simpara>Mot clé déterminant le sens du trie des objets choisis.</simpara>
+    <simpara>Valeurs possibles : <literal>ASC</literal> ou <literal>DESC</literal> (<literal>ASC</literal> par défaut).</simpara>
+  </listitem>
+</varlistentry>
+
 </variablelist>
   
   
index 8e10f81..75f3af7 100644 (file)
@@ -89,6 +89,11 @@ class LSformElement_select_object extends LSformElement {
         LSselect :: loadDependenciesDisplay();
       }
     }
+
+    if (!isset($this -> params['html_options']['sort']) || $this -> params['html_options']['sort']) {
+      uasort($this -> values,array($this,'_sortTwoValues'));
+    }
+
     $return['html'] = $this -> fetchTemplate(NULL,array(
       'selectableObject' => $this -> selectableObject,
       'unrecognizedValues' => $this -> attr_html -> unrecognizedValues,
@@ -96,6 +101,26 @@ class LSformElement_select_object extends LSformElement {
     ));
     return $return;
   }
+
+   /**
+   * Function use with uasort to sort two values
+   *
+   * @param[in] $va string One value
+   * @param[in] $vb string One value
+   *
+   * @retval int Value for uasort
+   **/
+  private function _sortTwoValues(&$va,&$vb) {
+    if (isset($this -> params['html_options']['sortDirection']) && $this -> params['html_options']['sortDirection']=='DESC') {
+      $dir=-1;
+    }
+    else {
+      $dir=1;
+    }
+    if ($va == $vb) return 0;
+    $val = strcoll(strtolower($va), strtolower($vb));
+    return $val*$dir;
+  }
   
   /*
    * Return the values of the object form the session variable