SUPANN : Ajout du support de l'attribut supannRoleEntite
authorBenjamin Renard <brenard@easter-eggs.com>
Fri, 10 Aug 2012 10:31:06 +0000 (12:31 +0200)
committerBenjamin Renard <brenard@easter-eggs.com>
Fri, 10 Aug 2012 10:36:30 +0000 (12:36 +0200)
public_html/conf/LSaddons/config.LSaddons.supann.php
public_html/images/default/LSformElement_supannRoleEntite_label_SUPANN.png [new file with mode: 0644]
public_html/includes/addons/LSaddons.supann.php
public_html/includes/class/class.LSattr_html_supannRoleEntite.php [new file with mode: 0644]
public_html/includes/class/class.LSformElement_supannRoleEntite.php [new file with mode: 0644]
public_html/templates/default/LSformElement_supannRoleEntite.tpl [new file with mode: 0644]
public_html/templates/default/LSformElement_supannRoleEntite_field.tpl [new file with mode: 0644]

index 03d19ee..990ed44 100644 (file)
@@ -35,6 +35,9 @@ define('LS_SUPANN_FIRSTNAME_ATTR','givenName');
 // Type de LSobject correspondant aux entites SUPANN
 define('LS_SUPANN_LSOBJECT_ENTITE_TYPE','LSsupannEntite');
 
+// Format d'affichage du nom courts d'une entites SUPANN
+define('LS_SUPANN_LSOBJECT_ENTITE_FORMAT_SHORTNAME','%{ou}');
+
 // DN de l'entite SUPANN correspondant à l'etablissement
 define('LS_SUPANN_ETABLISSEMENT_DN','supannCodeEntite=XXX,ou=structures,dc=univ,dc=fr');
 
@@ -42,4 +45,217 @@ define('LS_SUPANN_ETABLISSEMENT_DN','supannCodeEntite=XXX,ou=structures,dc=univ,
 // Exemple : 0753742K
 define('LS_SUPANN_ETABLISSEMENT_UAI','0753742K');
 
+// Table de données des roles generiques
+$GLOBALS['supannRoleGenerique'] = array (
+  "D00" => "MINISTRE",
+  "D01" => "DIRECTEUR DU CABINET",
+  "D02" => "DIRECTEUR ADJOINT DU CABINET",
+  "D10" => "DIRECTEUR  AC",
+  "D11" => "DELEGUE AC",
+  "D12" => "DELEGUE REGIONAL A LA RECH. ET TECHN.",
+  "D21" => "DIRECTEUR DE RECHERCHE",
+  "D22" => "DIRECTEUR SCIENTIFIQUE",
+  "D23" => "DIRECTEUR DE PROJET",
+  "D30" => "Directeur",
+  "D32" => "Directeur des études",
+  "D34" => "Directeur de la Recherche",
+  "D35" => "Doyen",
+  "D40" => "SOUS-DIRECTEUR",
+  "D60" => "DIRECTEUR DE DEPARTEMENT",
+  "D70" => "DOYEN DE L'IGEN",
+  "D71" => "DOYEN DE L'IGB",
+  "D80" => "DIRECTEUR GENERAL AC",
+  "D81" => "DIR GEN AC, SECRETAIRE GENERAL ADJOINT",
+  "D90" => "HAUT FONCTIONNAIRE DE DEFENSE",
+  "F01" => "CHEF DU CABINET",
+  "F02" => "CHEF ADJOINT DU CABINET",
+  "F10" => "CHEF DE SERVICE",
+  "F11" => "CHEF DE SERVICE ADJOINT AU DIRECTEUR",
+  "F12" => "CHEF DU SERVICE DE l'IGAENR",
+  "F20" => "CHEF DE MISSION",
+  "F21" => "CHEF DE LA MISSION",
+  "F22" => "CHEF DE SERVICE ADJOINT AU DIR GEN",
+  "F30" => "CHEF DE DIVISION",
+  "F40" => "CHEF DE DEPARTEMENT",
+  "F42" => "chef des services administratifs",
+  "F50" => "CHEF DE CENTRE",
+  "F60" => "CHEF DE BUREAU",
+  "F61" => "CHEF DE CELLULE",
+  "F62" => "CHEF DU CABINET DU SECRETAIRE GENERAL",
+  "F70" => "CHEF D'EXPLOITATION",
+  "F71" => "CHEF D'EQUIPE",
+  "F73" => "CHEF DU SERVICE INTERIEUR",
+  "F74" => "CHEF DE SECTION",
+  "F75" => "CHEF DE SITE",
+  "F76" => "CHEF DE CUISINE",
+  "H10" => "CHARGE DU SERVICE",
+  "H11" => "CHARGE DE SOUS-DIRECTION",
+  "H20" => "CHARGE DE MISSION AUPRES DU MINISTRE",
+  "H30" => "CHARGE DE MISSION AUPRES DU DIR CAB",
+  "H40" => "CHARGE DE MISSION",
+  "H70" => "CHARGE DU SECRETARIAT DU DIRECTEUR",
+  "H75" => "CHARGE DU SECRETERIAT DU DRRT",
+  "H80" => "CHARGE DE GESTION ADMINIS. ET COMPTABLE",
+  "J01" => "ADJOINT AU CHEF DE CABINET",
+  "J04" => "ADJOINT AU DIRECTEUR GENERAL AC",
+  "J05" => "ADJOINT AU DIRECTEUR",
+  "J06" => "ADJOINT AU DELEGUE AC",
+  "J07" => "ADJOINT AU DRRT",
+  "J10" => "ADJOINT AU CHEF DE SERVICE",
+  "J11" => "ADJOINT AU CHARGE DU SERVICE",
+  "J12" => "ADJOINT AU SOUS-DIRECTEUR",
+  "J13" => "ADJOINT AU CHARGE DE SOUS-DIRECTION",
+  "J20" => "ADJOINT AU CHEF DE MISSION",
+  "J21" => "ADJOINT AU CHEF DE LA MISSION",
+  "J30" => "ADJOINT AU CHEF DE DIVISION",
+  "J31" => "ADJOINT AU CHEF DE DEPARTEMENT",
+  "J32" => "ADJOINT AU DIRECTEUR DE DEPARTEMENT",
+  "J33" => "ADJOINT AU CHEF DE CENTRE",
+  "J34" => "ADJOINT AU CHEF DE BUREAU",
+  "J35" => "A CHEF AU CHEF DE SECTION",
+  "J36" => "ADJOINT AU CHEF DE CELLULE",
+  "J40" => "ADJOINT AU RESPONSABLE DE CELLULE",
+  "J41" => "ADJOINT AU RESPONSABLE DE L'UNITE",
+  "J42" => "ADJOINT AU RESPONSABLE DE POLE",
+  "J50" => "ADJOINT AU RESPONSABLE D'ATELIER",
+  "J60" => "Directeur adjoint",
+  "J61" => "Chef de service adjoint",
+  "J62" => "Directeur des études adjoint",
+  "J63" => "Directeur de la Recherche adjoint",
+  "J63" => "Directeur scientifique adjoint",
+  "M01" => "COLLABORATEUR EXTERIEUR",
+  "N00" => "CONSEILLER AUPRES DU MINISTRE",
+  "N01" => "CONSEILLER",
+  "N02" => "CONSEILLER DU CABINET",
+  "N03" => "CONSEILLER TECHNIQUE DU CABINET",
+  "N10" => "CONSEILLER D'ETABLISSEMENTS",
+  "N11" => "CONSEILLER PEDAGOGIQUE",
+  "N20" => "CONSEILLER TECHNIQUE",
+  "N50" => "COORDONNATEUR",
+  "P00" => "PRESIDENT",
+  "P01" => "PRESIDENT D'ASSOCIATION",
+  "P10" => "VICE-PRESIDENT",
+  "P50" => "SECRETAIRE GENERAL",
+  "P51" => "Secrétaire Général adjoint",
+  "P60" => "SECRETAIRE GENERAL AC",
+  "P70" => "Administrateur",
+  "P71" => "Administrateur provisoire",
+  "R00" => "RESPONSABLE",
+  "R01" => "RESPONSABLE DE CELLULE",
+  "R02" => "RESPONSABLE DE DEPARTEMENT",
+  "R10" => "RESPONSABLE DE MISSION",
+  "R20" => "RESPONSABLE DE POLE",
+  "R21" => "RESPONSABLE DE SECTEUR",
+  "R22" => "RESPONSABLE D'UNITE",
+  "R30" => "RESPONSABLE DE SERVICES TECHNIQUES",
+  "R31" => "RESPONSABLE EPI",
+  "R33" => "RESPONSABLE D'ATELIER",
+  "R40" => "Responsable admnistratif",
+  "R41" => "Responsable de diplôme",
+  "R42" => "Responsable pédagogique",
+  "R43" => "Responsable de programme",
+  "R80" => "RESPONSABLE UGARH",
+  "R81" => "ADJOINT(E) RESP UGARH",
+  "S01" => "Encadrant Tuteur",
+  "S10" => "Membre titulaire, Membre",
+  "S11" => "Membre suppléant",
+  "S12" => "Membre consultatif",
+  "S13" => "Participant",
+  "S14" => "Représentant      / Représentant étudiant",
+  "S15" => "Délégué",
+  "S16" => "Correspondant",
+  "S17" => "Coordonnateur scientifique",
+  "S20" => "Partenaire",
+  "S21" => "Personnalité extérieure",
+  "T01" => "ASSISTANT DE SERVICE SOCIAL",
+  "T02" => "INFIRMIER",
+  "T12" => "AMINISTRATEUR  DE DONNEES",
+  "T13" => "HUISSIER",
+  "T14" => "AGENT D'ACCUEIL",
+  "T15" => "HOTESSE D'ACCUEIL",
+  "T16" => "AGENT TECHNIQUE",
+  "T17" => "CHARGE DE COM, REL PUBLIQUE OU PRESSE",
+  "T18" => "ALLOCATAIRE D'EMPLOIS",
+  "T19" => "ANALYSTE",
+  "T22" => "ASSISTANT DE DIRECTION",
+  "T24" => "ASSISTANT TECHNIQUE",
+  "T25" => "CHARGE D'ETUDES",
+  "T26" => "CHEF DE PROJET",
+  "T27" => "CHEF DE PROJET INFORMATIQUE",
+  "T29" => "CONCEPTEUR REDACTEUR SITE WEB",
+  "T30" => "CONDUCTEUR AUTOMOBILE",
+  "T31" => "CONSEILLER SCIENTIFIQUE ET  TECHNIQUE",
+  "T32" => "CONTROLEUR  DE GESTION",
+  "T34" => "CORRESPONDANT INFORMATIQUE",
+  "T35" => "DEVELOPPEUR D'APPLICATIONS",
+  "T36" => "DOCUMENTALISTE - ARCHIVISTE",
+  "T37" => "GESTIONNAIRE",
+  "T39" => "GESTIONNAIRE DE PARC INF & TELECOM",
+  "T40" => "GESTIONNAIRE GRH",
+  "T41" => "GESTIONNAIRE DE RESTAURANT ADMINISTRATIF",
+  "T42" => "GESTIONNAIRE FINANCIER",
+  "T43" => "INFOGRAPHISTE - MAQUETTISTE (PAO)",
+  "T44" => "INFORMATICIEN BUREAUTIQUE",
+  "T45" => "INFORMATICIEN D'EXPLOITATION",
+  "T46" => "INFORMATICIEN SYSTEMES ET RESEAUX",
+  "T47" => "INGENIEUR PEDAGOGIQUE OU EN FORM PROF",
+  "T48" => "MECANICIEN",
+  "T49" => "OPERATEUR",
+  "T50" => "OUVRIER",
+  "T51" => "AGENT DE PREMIERE INTERVENTION",
+  "T52" => "PERSONNEL DE RESTAURATION",
+  "T54" => "REDACTEUR",
+  "T55" => "REPROGRAPHISTE",
+  "T56" => "RESPONSABLE PRODUCTION ET SYSTEMES",
+  "T57" => "SECRETAIRE",
+  "T58" => "SECRETAIRE PARTICULIER",
+  "T59" => "SECRETAIRE MEDICAL",
+  "T60" => "CHARGE DE MARCHES PUBLICS",
+  "T61" => "CHARGE DE  GESTION  FINANCIERE",
+  "T62" => "CHARGE DE PROGRAMMATION BUDGETAIRE",
+  "T63" => "TECHNICIEN CONSEIL HYGIENE ET SECURITE",
+  "T64" => "TECHNICIEN EXPLOITATION- MAINTENANCE",
+  "T65" => "AGENT COMPTABLE",
+  "T66" => "GESTIONNAIRE D'ETABLISSEMENT",
+  "T80" => "Maîtrise d'ouvrage des SI",
+  "T81" => "Maîtrise' d'œuvre des SI",
+  "T82" => "AQSSI",
+  "T83" => "RSSI",
+  "T84" => "CSSI (Correspondant/Chargé de SSI)",
+  "X00" => "MEDIATEUR",
+  "X01" => "MEDECIN",
+  "X10" => "EXPERT PEDAGOGIQUE",
+  "X11" => "EXPERT CREDIT IMPOT RECHERCHE",
+  "X30" => "CHAUFFEUR UTILITAIRE",
+  "X31" => "CHAUFFEUR DE MINISTRE",
+  "X32" => "CHAUFFEUR DU CABINET",
+  "X33" => "CHAUFFEUR DE DIRECTION",
+  "X40" => "CONTROLEUR FINANCIER",
+  "X50" => "JURISTE",
+  "X51" => "Correspondant I&L",
+  "X60" => "SECRETAIRE DE  CABINET",
+  "X70" => "ACMO H&S",
+  "X71" => "Chargé de service de prévention H&S",
+  "X80" => "Assesseur"
+);
+
+$GLOBALS['supannTypeEntite'] = array (
+  "S101" => "Conseil d'Administration",
+  "S312" => "Centre de recherche"
+);
+
+// Table de tranduction des roles dans les entites
+$GLOBALS['supannTranslateRoleEntiteValueDirectory'] = array(
+  "SUPANN" => array (
+    "role" => $GLOBALS['supannRoleGenerique'],
+    "type" => $GLOBALS['supannTypeEntite']
+  )
+);
+
+// Table des fonctions de tranduction des roles dans les entites
+$GLOBALS['supannTranslateFunctionDirectory'] = array(
+  "no" => array(
+    "code" => "supanGetEntiteNameById"
+  )
+);
 ?>
diff --git a/public_html/images/default/LSformElement_supannRoleEntite_label_SUPANN.png b/public_html/images/default/LSformElement_supannRoleEntite_label_SUPANN.png
new file mode 100644 (file)
index 0000000..78ba578
Binary files /dev/null and b/public_html/images/default/LSformElement_supannRoleEntite_label_SUPANN.png differ
index c3db27b..b99a981 100644 (file)
@@ -29,7 +29,9 @@ LSerror :: defineError('SUPANN_SUPPORT_01',
 LSerror :: defineError('SUPANN_SUPPORT_02',
   _("SUPANN Support : The LSobject type %{type} does not exist. Can't work with entities..")
 );
-
+LSerror :: defineError('SUPANN_SUPPORT_03',
+  _("SUPANN Support : The global array %{array} is not defined.")
+);
 
 // Autres erreurs
 LSerror :: defineError('SUPANN_01',
@@ -53,6 +55,7 @@ LSerror :: defineError('SUPANN_02',
       'LS_SUPANN_LASTNAME_ATTR',
       'LS_SUPANN_FIRSTNAME_ATTR',
       'LS_SUPANN_LSOBJECT_ENTITE_TYPE',
+      'LS_SUPANN_LSOBJECT_ENTITE_FORMAT_SHORTNAME',
       'LS_SUPANN_ETABLISSEMENT_UAI',
       'LS_SUPANN_ETABLISSEMENT_DN'
     );
@@ -64,6 +67,19 @@ LSerror :: defineError('SUPANN_02',
       }
     }
 
+    $MUST_DEFINE_ARRAY= array(
+      'supannRoleGenerique',
+      'supannTypeEntite',
+      'supannTranslateRoleEntiteValueDirectory',
+      'supannTranslateFunctionDirectory',
+    );
+    foreach($MUST_DEFINE_ARRAY as $array) {
+      if ( !isset($GLOBALS[$array]) || !is_array($GLOBALS[$array])) {
+        LSerror :: addErrorCode('SUPANN_SUPPORT_01',$array);
+        $retval=false;
+      }
+    }
+
     if ( defined('LS_SUPANN_LSOBJECT_ENTITE_TYPE') ) {
       if ( ! LSsession :: loadLSobject( LS_SUPANN_LSOBJECT_ENTITE_TYPE ) ) {
         LSerror :: addErrorCode('SUPANN_SUPPORT_02', LS_SUPANN_LSOBJECT_ENTITE_TYPE);
@@ -219,4 +235,145 @@ LSerror :: defineError('SUPANN_02',
     return $retval;
   }
 
+ /**
+  * Parse une valeur composite SUPANN
+  *
+  * Exemple de valeur :
+  *
+  *    [key1=value][key2=value][key3=value]
+  *
+  * @author Benjamin Renard <brenard@easter-eggs.com>
+  *
+  * @param[in] $val La valeur composite
+  *
+  * @retval array Un tableau contenant key->value ou false en cas d'erreur
+  **/
+  function supannParseCompositeValue($val) {
+    if (preg_match_all('/\[([^=]*)=([^\]]*)\]/',$val,$matches)) {
+      $parseValue=array();
+      for($i=0;$i<count($matches[0]);$i++) {
+        $parseValue[$matches[1][$i]]=$matches[2][$i];
+      }
+      return $parseValue;
+    }
+    return;
+  }
+
+ /**
+  * Retourne une eventuelle fonction de traduction d'une valeur
+  * en fonction de son label et de sa cle.
+  *
+  * Utilise la table $GLOBALS['supannTranslateFunctionDirectory']
+  *
+  * @param[in] $label Le label de la valeur
+  * @param[in] $key La cle de la valeur
+  *
+  * @retval string|false Le nom de la fonction de traduction ou false
+  **/
+  function supannTranslateRoleEntiteFunction($label,$key) {
+    if (isset($GLOBALS['supannTranslateFunctionDirectory'][$label][$key])) {
+      return $GLOBALS['supannTranslateFunctionDirectory'][$label][$key];
+    }
+    return;
+  }
+
+
+ /**
+  * Retourne le nom court d'une entite en fonction de son identifiant
+  *
+  * Fonction utilise comme fonction de traduction dans la fonction 
+  * supannTranslateRoleEntiteValue()
+  *
+  * @param[in] $label Le label de la valeur
+  * @param[in] $key La cle de la valeur
+  * @param[in] $value La valeur : l'identifiant de l'entite (supannCodeEntite)
+  *
+  * @retval string Le nom de l'entite
+  **/
+  function supanGetEntiteNameById($label,$key,$value) {
+    if (LSsession::loadLSobject(LS_SUPANN_LSOBJECT_ENTITE_TYPE)) {
+      $type=LS_SUPANN_LSOBJECT_ENTITE_TYPE;
+      $e = new $type();
+      $list=$e -> listObjectsName("(supannCodeEntite=$value)",NULL,array(),LS_SUPANN_LSOBJECT_ENTITE_FORMAT_SHORTNAME);
+      if (count($list)==1) {
+        return array(
+          'translated' => array_pop($list),
+          'label' => $label
+        );
+      }
+    }
+    return array(
+      'translated' => getFData(__("%{value} (unrecognized value)"),$value),
+      'label' => $label
+    );
+  }
+
+ /**
+  * Parse une valeur a etiquette SUPANN
+  *
+  * Exemple de valeur :
+  *
+  *    {SUPANN}S410
+  *
+  * @param[in] $val La valeur
+  *
+  * @retval array Un tableau cle->valeur contenant label et value ou False
+  **/
+  function supannParseLabeledValue($value) {
+    if (preg_match('/^\{([^\}]*)\}(.*)$/',$value,$m)) {
+      return array(
+        'label'=>$m[1],
+        'value'=>$m[2]
+      );
+    }
+    return;
+  }
+
+ /**
+  * Traduit une valeur en fonction de sa cle extrait d'un attribut
+  * supannRoleEntite.
+  *
+  * @param[in] $key La cle
+  * @param[in] $value La valeur
+  *
+  * @retval array Un tableau cle->valeur contenant label et translated ou False
+  **/
+  function supannTranslateRoleEntiteValue($key,$value) {
+    $label='no';
+    $pl=supannParseLabeledValue($value);
+    if ($pl) {
+      $label=$pl['label'];
+      $value=$pl['value'];
+    }
+
+    // Translate by method
+    if (supannTranslateRoleEntiteFunction($label,$key)) {
+      $func = supannTranslateRoleEntiteFunction($label,$key);
+      if (function_exists($func)) {
+        try {
+          return $func($label,$key,$value);
+        }
+        catch (Exception $e) {
+          return;
+        }
+      }
+      else {
+        return;
+      }
+    }
+    // Translate by directory
+    elseif (isset($GLOBALS['supannTranslateRoleEntiteValueDirectory'][$label][$key][$value])) {
+      return array(
+        'translated' => $GLOBALS['supannTranslateRoleEntiteValueDirectory'][$label][$key][$value],
+        'label' => $label
+     );
+    }
+    else {
+      return array(
+        'label' => $label,
+        'translated' => $value
+      );
+    }
+  }
+
 ?>
diff --git a/public_html/includes/class/class.LSattr_html_supannRoleEntite.php b/public_html/includes/class/class.LSattr_html_supannRoleEntite.php
new file mode 100644 (file)
index 0000000..c2178e1
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+/*******************************************************************************
+ * Copyright (C) 2007 Easter-eggs
+ * http://ldapsaisie.labs.libre-entreprise.org
+ *
+ * Author: See AUTHORS file in top-level directory.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+******************************************************************************/
+
+/**
+ * Type d'attribut HTML supannRoleEntite
+ *
+ * @author Benjamin Renard <brenard@easter-eggs.com>
+ */
+class LSattr_html_supannRoleEntite extends LSattr_html {
+
+  var $LSformElement_type = 'supannRoleEntite';
+  
+}
+
+?>
diff --git a/public_html/includes/class/class.LSformElement_supannRoleEntite.php b/public_html/includes/class/class.LSformElement_supannRoleEntite.php
new file mode 100644 (file)
index 0000000..5813efe
--- /dev/null
@@ -0,0 +1,77 @@
+<?php
+/*******************************************************************************
+ * Copyright (C) 2007 Easter-eggs
+ * http://ldapsaisie.labs.libre-entreprise.org
+ *
+ * Author: See AUTHORS file in top-level directory.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+******************************************************************************/
+
+LSsession :: loadLSclass('LSformElement');
+LSsession :: loadLSaddon('supann');
+
+/**
+ * Element supannRoleEntite d'un formulaire pour LdapSaisie
+ *
+ * Cette classe définis les éléments supannRoleEntite des formulaires.
+ * Elle étant la classe basic LSformElement.
+ *
+ * @author Benjamin Renard <brenard@easter-eggs.com>
+ */
+
+class LSformElement_supannRoleEntite extends LSformElement {
+
+  var $template = 'LSformElement_supannRoleEntite.tpl';
+  var $fieldTemplate = 'LSformElement_supannRoleEntite_field.tpl';
+
+ /**
+  * Retourne les infos d'affichage de l'élément
+  * 
+  * Cette méthode retourne les informations d'affichage de l'élement
+  *
+  * @retval array
+  */
+  function getDisplay(){
+    $return = $this -> getLabelInfos();
+
+    $parseValues=array();
+    foreach($this -> values as $val) {
+      $keyValue=supannParseCompositeValue($val);
+      if ($keyValue) {
+        $parseValue=array();
+        foreach($keyValue as $key => $value) {
+          $parseValue[$key]=array(
+            'value' => $value
+          );
+          $tr=supannTranslateRoleEntiteValue($key,$value);
+          if ($tr) {
+            if($tr['translated'])
+              $parseValue[$key]['translated']=$tr['translated'];
+            if($tr['label'])
+              $parseValue[$key]['label']=$tr['label'];
+          }
+        }
+        $parseValues[]=$parseValue;
+      }
+    }
+
+    $return['html'] = $this -> fetchTemplate(NULL,array('parseValues' => $parseValues));
+    return $return;
+  }
+
+}
+
+?>
diff --git a/public_html/templates/default/LSformElement_supannRoleEntite.tpl b/public_html/templates/default/LSformElement_supannRoleEntite.tpl
new file mode 100644 (file)
index 0000000..06390a0
--- /dev/null
@@ -0,0 +1,23 @@
+<ul class='LSform{if $multiple && !$freeze} LSformElement_multiple'{/if}' id='{$attr_name}'>
+  {if $parseValues}
+    {foreach from=$parseValues item=parseValue}
+      {if $parseValue.role.translated}{assign var=role value=$parseValue.role.translated}{else}{assign var=role value=$parseValue.role.value}{/if}
+      {if $parseValue.role.label!="no"}{assign var=label_role value=$parseValue.role.label}{else}{assign var=label_role value=""}{/if}
+      {if $parseValue.type.translated}{assign var=type value=$parseValue.type.translated}{else}{assign var=type value=$parseValue.type.value}{/if}
+      {if $parseValue.type.label!="no"}{assign var=label_type value=$parseValue.type.label}{else}{assign var=label_type value=""}{/if}
+      {if $parseValue.code.translated}{assign var=code value=$parseValue.code.translated}{else}{assign var=code value=$parseValue.code.value}{/if}
+      {if $parseValue.code.label!="no"}{assign var=label_code value=$parseValue.code.label}{else}{assign var=label_code value=""}{/if}
+      <li>{include file=$fieldTemplate}</li>
+    {foreachelse}
+      {assign var=value value=""}
+      <li>{include file=$fieldTemplate}</li>
+    {/foreach}
+  {else}
+    {foreach from=$values item=value}
+      <li>{include file=$fieldTemplate}</li>
+    {foreachelse}
+      {assign var=value value=""} 
+      <li>{include file=$fieldTemplate}</li>
+    {/foreach}
+  {/if}
+</ul>
diff --git a/public_html/templates/default/LSformElement_supannRoleEntite_field.tpl b/public_html/templates/default/LSformElement_supannRoleEntite_field.tpl
new file mode 100644 (file)
index 0000000..d755c73
--- /dev/null
@@ -0,0 +1,13 @@
+{if $freeze}
+  {if $value or $parseValue}
+    {if $parseValue}
+      <span class='LSformElement_supannRoleEntite'>{if $label_role}<img src='{$LS_IMAGES_DIR}/LSformElement_supannRoleEntite_label_{$label_role}.png' alt='[{$label_role}]' title='{$label_role}' /> {/if}<span title='{$parseValue.role.value}'>{$role}</span> : {if $label_code}<img src='{$LS_IMAGES_DIR}/LSformElement_supannRoleEntite_label_{$label_code}.png' alt='[{$label_code}]' title='{$label_code}' /> {/if}<span title='{$parseValue.code.value}'>{$code}</span> ({if $label_type}<img src='{$LS_IMAGES_DIR}/LSformElement_supannRoleEntite_label_{$label_type}.png' alt='[{$label_type}]' title='{$label_type}' /> {/if}<span title='{$parseValue.type.value}'>{$type}</span>)</span> 
+    {else}
+      <span class='LSformElement_supannRoleEntite_unparsed'>{$value}</span>
+    {/if}
+  {else}
+    {$noValueTxt}
+  {/if}
+{else}
+<input type='text' name='{$attr_name}[]' class='LSformElement_text' value="{$value}" autocomplete="off"/>
+{/if}