LSaddon :: supann : redesign and improve this addon

This commit is contained in:
Benjamin Renard 2014-11-20 00:44:41 +01:00
parent 391018e492
commit 53ef8436d4
28 changed files with 4366 additions and 2874 deletions

View file

@ -45,8 +45,41 @@ define('LS_SUPANN_ETABLISSEMENT_DN','supannCodeEntite=XXX,ou=structures,dc=univ,
// Exemple : 0753742K // Exemple : 0753742K
define('LS_SUPANN_ETABLISSEMENT_UAI','0753742K'); define('LS_SUPANN_ETABLISSEMENT_UAI','0753742K');
// Table de données des roles generiques /*
$GLOBALS['supannRoleGenerique'] = array ( * Nomenclatures SUPANN
*
* Tableau stockant les nomenclautures utilisées.
*
* Doc SUPANN :
* https://services.renater.fr/documentation/supann/2009/documentcomplet#nomenclatures
*
* $GLOBALS['supannNomenclatures'] = array (
* '[ETIQUETTE]' => array (
* '[table1] => array (
* '[key1]' => '[label1],
* '[key2]' => '[label2],
* [...]
* )
* ),
* );
*
* [ETIQUETTE] : l'étiquette de la valeur
* [table] : le nom de la table :
* - roleGenerique : les rôles génériques
* - typeEntite : les types d'entités
* - empCorps : les corps d'appartenances des personnels
* - codeEtablissement : les codes d'établissement
* - etuRegimeInscription : les régimes d'inscription étudiant
* - etuSecteurDisciplinaire : les secteurs disciplinaires de dîplomes ou d'enseignements
* - etuTypeDiplome : les types de diplôme
* - etuDiplome : les diplômes
* - etuEtape : les étapes des enseignements
* - etuElementPedagogique : les éléments pédagogiques
*
*/
$GLOBALS['supannNomenclatures'] = array (
'SUPANN' => array (
'roleGenerique' => array (
"D00" => "MINISTRE", "D00" => "MINISTRE",
"D01" => "DIRECTEUR DU CABINET", "D01" => "DIRECTEUR DU CABINET",
"D02" => "DIRECTEUR ADJOINT DU CABINET", "D02" => "DIRECTEUR ADJOINT DU CABINET",
@ -237,9 +270,8 @@ $GLOBALS['supannRoleGenerique'] = array (
"X70" => "ACMO H&S", "X70" => "ACMO H&S",
"X71" => "Chargé de service de prévention H&S", "X71" => "Chargé de service de prévention H&S",
"X80" => "Assesseur" "X80" => "Assesseur"
); ),
'typeEntite' => array (
$GLOBALS['supannTypeEntite'] = array (
"C000" => "Bureau du président", "C000" => "Bureau du président",
"C010" => "Groupement d'Intérêt Scientifique (GIS)", "C010" => "Groupement d'Intérêt Scientifique (GIS)",
"C020" => "Aide à la conception de produits pédagogiques", "C020" => "Aide à la conception de produits pédagogiques",
@ -329,25 +361,10 @@ $GLOBALS['supannTypeEntite'] = array (
"S312" => "Centre de recherche", "S312" => "Centre de recherche",
"S330" => "Campus", "S330" => "Campus",
"S340" => "Plate-forme de recherche ou plateau technique", "S340" => "Plate-forme de recherche ou plateau technique",
);
// Table de tranduction des roles dans les entites
$GLOBALS['supannTranslateRoleEntiteValueDirectory'] = array(
"SUPANN" => array (
"role" => $GLOBALS['supannRoleGenerique'],
"type" => $GLOBALS['supannTypeEntite']
) )
); ),
'UAI' => array (
// Table des fonctions de tranduction des roles dans les entites 'codeEtablissement' => array (
$GLOBALS['supannTranslateFunctionDirectory'] = array(
"no" => array(
"code" => "supanGetEntiteNameById"
)
);
// Table des code UAI
$GLOBALS['tableCodeUAI'] = array(
"0133774G" => "Ecole Centrale de Marseille", "0133774G" => "Ecole Centrale de Marseille",
"0840985P" => "Ecole de Gestion et de Commerce d'Avignon", "0840985P" => "Ecole de Gestion et de Commerce d'Avignon",
"0130230E" => "ECOLE DE L'AIR", "0130230E" => "ECOLE DE L'AIR",
@ -707,9 +724,746 @@ $GLOBALS['tableCodeUAI'] = array(
"0911975C" => "UNIVERSITE EVRY VAL D ESSONNE", "0911975C" => "UNIVERSITE EVRY VAL D ESSONNE",
"0921204J" => "UNIVERSITE PARIS 10", "0921204J" => "UNIVERSITE PARIS 10",
"0911101C" => "UNIVERSITE PARIS 11", "0911101C" => "UNIVERSITE PARIS 11",
)
),
'SISE' => array (
'etuRegimeInscription' => array (
'01' => "PARENTS ELEVANT 3 ENFANTS",
'02' => "SPORTIFS DE HAUT NIVEAU",
'03' => "CADRES PLUS DE 5 ANS",
'04' => "BAC +2 & 5 ANS PRATIQUE PROF",
'09' => "AUTRES DISPENSES",
'10' => "FORMATION INITIALE HORS APPRENTISSAGE",
'11' => "REPRISE ETUDES NON FINANCEE SANS CONV",
'12' => "CONTRAT APPRENTISSAGE",
'20' => "FORMATION CONTINUE HORS CONTRAT PROF",
'21' => "FORMATION CONTINUE DIPLOMANTE",
'22' => "CONTRAT DE PROFESSIONNALISATION",
'51' => "PARENTS AYANT 3 ENFANTS",
'52' => "SPORTIFS HAUT NIVEAU",
'53' => "CADRES PLUS DE 5 ANS",
'54' => "BAC+2 ET 5A PRATIQUE PROFESSIONNELLE",
'55' => "BAC PROFESSIONNEL ET 7A PRTIQUE PROF",
'56' => "CAP-BEP ET 8A PRATIQUE PROFESSIONNELLE",
'57' => "CONTRAT DRT PRIV +5A ANCIEN (3 CONCOURS)",
'59' => "AUTRES DISPENSES",
'61' => "FORM PERMANENTE - FEMMES ELEVANT 3 ENFTS",
'62' => "FORM PERMANENTE - SPORTIFS HAUT NIVEAU",
'63' => "FORM PERMANENTE - CADRES PLUS DE 5 ANS",
'64' => "FORM PERMANENTE - BAC+2 & 5A PRAT PROF",
'69' => "FORM PERMANENTE - AUTRES DISPENSES",
'71' => "FORM CONTINUE - FEMMES ELEVANT 3 ENFTS",
'72' => "FORM CONTINUE - SPORTIFS HAUT NIVEAU",
'73' => "FORM CONTINUE - CADRES PLUS DE 5 ANS",
'74' => "FORM CONTINUE - BAC+2 & 5A PRAT PROF",
'79' => "FORM CONTINUE - AUTRES DISPENSES",
'90' => "STAGIAIRES EN SITUATION",
),
'etuSecteurDisciplinaire' => array (
'01' => "MATHEMATIQUES",
'02' => "PHYSIQUE",
'03' => "CHIMIE",
'04' => "MATHEMATIQUES APPLIQUEES ET SCIENCES SOCIALES (M.A.S.S.)",
'05' => "SCIENCES DE L'UNIVERS",
'06' => "SCIENCES DE LA VIE",
'07' => "MEDECINE",
'08' => "ODONTOLOGIE",
'09' => "PHARMACIE",
'10' => "S.T.A.P.S.",
'11' => "MECANIQUE, GENIE MECANIQUE",
'12' => "GENIE CIVIL",
'13' => "GENIE DES PROCEDES",
'14' => "INFORMATIQUE",
'15' => "ELECTRONIQUE, GENIE ELECTRIQUE",
'16' => "SCIENCES ET TECHNOLOGIE INDUSTRIELLES",
'17' => "SCIENCES DU LANGAGE - LINGUISTIQUE",
'18' => "LANGUES ET LITTERATURES ANCIENNES",
'19' => "LANGUES ET LITTERATURES FRANCAISES",
'20' => "LITTERATURE GENERALE ET COMPAREE",
'21' => "ARTS",
'22' => "FRANCAIS, LANGUE ETRANGERE",
'23' => "LANGUES ET LITTERATURES ETRANGERES",
'24' => "LANGUES ETRANGERES APPLIQUEES",
'25' => "CULTURES ET LANGUES REGIONALES",
'26' => "PHILOSOPHIE, EPISTEMOLOGIE",
'27' => "HISTOIRE",
'28' => "GEOGRAPHIE",
'29' => "AMENAGEMENT",
'30' => "ARCHEOLOGIE, ETHNOLOGIE, PREHISTOIRE",
'31' => "SCIENCES RELIGIEUSES",
'32' => "PSYCHOLOGIE",
'33' => "SOCIOLOGIE, DEMOGRAPHIE",
'34' => "SCIENCES DE L'EDUCATION",
'35' => "SCIENCES DE L'INFORMATION ET LA COMMUNICATION",
'36' => "SCIENCES JURIDIQUES",
'37' => "SCIENCES POLITIQUES",
'38' => "SCIENCES ECONOMIQUES",
'39' => "SCIENCES DE GESTION",
'40' => "ADMINISTRATION ECONOMIQUE ET SOCIALE (A.E.S.)",
'41' => "FORMATION GENERALE AUX METIERS DE L'INGENIEUR",
'42' => "MATHEMATIQUE ET INFORMATIQUE",
'43' => "PHYSIQUE ET CHIMIE",
'50' => "THEOLOGIE CATHOLIQUE",
'61' => "PLURI DROIT - SCIENCES POLITIQUES",
'62' => "PLURI SCIENCES ECONOMIQUES ET GESTION",
'63' => "PLURI DROIT - SCIENCES ECONOMIQUES - AES",
'64' => "PLURI LETTRES - SCIENCES DU LANGAGE - ARTS",
'65' => "PLURI LANGUES",
'66' => "PLURI SCIENCES HUMAINES ET SOCIALES",
'67' => "PLURI LETTRES - LANGUES - SC HUMAINES",
'68' => "PLURI SCIENCES FONDAMENTALES ET APPLICATIONS",
'69' => "PLURI SC DE LA VIE, DE LA SANTE, DE LA TERRE ET DE L'UNIVERS",
'70' => "PLURI SCIENCES",
'71' => "PLURI SANTE",
'80' => "VETERINAIRE",
'90' => "INTERDISCIPLINAIRE",
'AA' => "En attente d'attribution",
'-' => "SANS OBJET",
),
'etuTypeDiplome' => array (
'01' => "DIPLOME UNIVERSITE GENERIQUE",
'02' => "CERTIFICAT D'ECOLE",
'03' => "HABILITATION A DIRIGER DES RECHERCHES",
'04' => "DU TYPE DOCTORAT (INST CATHOLIQUES)",
'05' => "DIPLOME INTERNATIONAL",
'06' => "POST-DUT",
'07' => "MASTERE SPECIALISE",
'08' => "MASTERS OF",
'09' => "AUTRES DIPLOMES",
'AC' => "CAPACITE EN DROIT",
'CA' => "DEUG RENOVE",
'CB' => "DUT",
'CC' => "DEUG",
'CD' => "DEUST",
'CI' => "DEUST IUP",
'CJ' => "DEUP",
'CK' => "DEUG IUP",
'CL' => "DIPLOME NAT DE TECHN SPECIAL (DNTS)",
'CP' => "DEUG INTERMEDIAIRE LMD",
'CX' => "PREMIER CYCLE DES ETUDES MEDICALES PCEM",
'CY' => "1ERE ANNEE COMMUNE AUX ETUDES DE SANTE",
'CZ' => "DIPLOME DE FORMATION GENERALE SANTE",
'DA' => "LICENCE RENOVEE",
'DB' => "LIC BI-DISCIPLINAIRE",
'DC' => "LICENCE",
'DJ' => "LICENCE IUP",
'DK' => "PREPARATION CAPEPS",
'DP' => "LICENCE PROFESSIONNELLE",
'DU' => "PREPARATION CPE",
'DV' => "PREPARATION CRPE",
'DW' => "PREPARATION CAPES",
'DX' => "PREPARATION CAPLP",
'DY' => "PREPARATION CAPET",
'DZ' => "PREPARATION CAPES",
'EA' => "MAITRISE RENOVEE",
'EB' => "MAITRISE BI-DISCIPLINAIRE",
'EC' => "MAITRISE",
'ED' => "MST",
'EE' => "MAITRISE DE SCIENCES ET GESTION (MSG)",
'EF' => "MAIT. INFOR. APPL. GESTION ENTR. (MIAGE)",
'EJ' => "MAITRISE IUP",
'EK' => "CERTIFICATION CAPEPS",
'EL' => "MSBM - C1",
'EM' => "MSBM - C2",
'EN' => "MAITRISE DE SCIENCES BIOL. ET MEDICALE",
'EP' => "MAITRISE INTERMEDIAIRE LMD",
'ER' => "DIP PREP RECH BIOMEDICALE (DPRB) - C1",
'ES' => "PREPARATION SPECIALISATION ENS TITULAIRE",
'ET' => "CERTIFICATION AGREGATION",
'EU' => "CERTIFICATION CPE",
'EV' => "CERTIFICATION CRPE",
'EW' => "CERTIFICATION CAPES",
'EX' => "CERTIFICATION CAPLP",
'EY' => "CERTIFICATION CAPET",
'EZ' => "PREPARATION AGREGATION",
'FC' => "DIPLOME D'ETUDE APPROFONDIE (DEA)",
'FD' => "DESS",
'FE' => "MAGISTERE",
'FF' => "DIPLOME DE RECHERCHE TECHNOLOGIQUE (DRT)",
'FH' => "DE DOCTEUR EN PHARMACIE",
'FI' => "FORMATION D'INGENIEUR CLASSIQUE",
'FJ' => "DE DOCTEUR EN CHIRURGIE DENTAIRE",
'FK' => "DIPL FIN 2 CYCLE ETUDES PHARMACEUTIQUES",
'FL' => "DIPL FIN 2 CYCLE ETUDES ODONTOLOGIQUES",
'FM' => "DIPLÔME INGENIEUR CONJOINT",
'FN' => "FORM D'INGENIEUR EN PARTENARIAT(EX NFI)",
'FX' => "DEUX. CYCLE DES ETUDES MEDICALES (DCEM)",
'GD' => "DE DOCTEUR EN PHARMACIE",
'GF' => "CES (CHIR. DENT. A)",
'GG' => "CES CHIRURGIE DENTAIRE",
'HH' => "CES (CHIR. DENT.B)",
'IB' => "DE DOCTEUR EN MEDECINE",
'IC' => "DIPL FIN 2 CYCLE ETUDES MEDICALES",
'IX' => "QUALIFICATION MEDECINE GENERALE",
'JB' => "C.E.C.S.M.O.",
'JC' => "DES PHARMACIE",
'JD' => "DES MEDECINE",
'JF' => "DES ODONTOLOGIE",
'KG' => "CAPACITE MEDECINE",
'LP' => "LICENCE PLURIDISCIPLINAIRE",
'MA' => "DESC MEDECINE GROUPE 1",
'MB' => "DESC MEDECINE GROUPE 2",
'MC' => "DESC MEDECINE",
'MD' => "DESC BIOLOGIE MEDICALE",
'NA' => "AUTRES DIPL. NATIONAUX NIV. FORM. BAC",
'NB' => "AUTRES DIPL. NATIONAUX NIV. FORM. BAC+1",
'NC' => "AUTRES DIPL. NATIONAUX NIV. FORM. BAC+2",
'ND' => "AUTRES DIPL. NATIONAUX NIV. FORM. BAC+3",
'NE' => "AUTRES DIPL. NATIONAUX NIV. FORM. BAC+4",
'NF' => "AUTRES DIPL. NATIONAUX NIV. FORM. BAC+5",
'PA' => "CERTIFICAT CAPACITE ORTHOPHONISTE",
'PB' => "CERTIFICAT CAPACITE ORTHOPTISTE",
'PC' => "DIPLOME D'ETAT AUDIO-PROTHESISTE",
'PD' => "DIPLOME D'ETAT PSYCHOMOTRICIEN",
'PE' => "DIPLOME D'ETAT SAGE-FEMME",
'PF' => "DIPL ETAT DE MASSEUR-KINESATHERAPEUTE",
'PG' => "DIPLOME ETAT ERGOTHERAPEUTE",
'PH' => "DIPLOME ETAT TECHN ANALYSES BIOMEDICALES",
'PJ' => "DIPLÔME D'ETAT INFIRMIER",
'PK' => "DIPL ETAT MANIPULATEUR ELECTRADIOL MEDIC",
'RA' => "DIPLOME VISE NIVEAU BAC+5 GRADE MASTER",
'RB' => "DIPLOME VISE NIVEAU BAC+5",
'RC' => "DIPLOME VISE NIVEAU BAC+4",
'RD' => "DIPLOME VISE NIVEAU BAC+3",
'RE' => "DIPLOME VISE NIVEAU BAC+2",
'RF' => "CYCLE PREPARATOIRE MANAGEMENT",
'SA' => "DOCTORAT VETERINAIRE",
'SB' => "DIPL ETUDES FONDAMENTALES VETERINAIRES",
'SC' => "INTERNAT VETERINAIRE",
'SD' => "DIPL ETUDES SPECIALISEES VETERINAIRES",
'SE' => "CERTIF ETUDES APPROFONDIES VETERINAIRES",
'TA' => "BAC CANONIQUE THEOLOGIE",
'TB' => "LIC CANONIQUE THEOLOGIE",
'TC' => "DOCT CANONIQUE THEOLOGIE",
'TD' => "BAC CANONIQUE PHILOSOPHIE",
'TE' => "LIC CANONIQUE PHILOSOPHIE",
'TF' => "DOCT CANONIQUE PHILOSOPHIE",
'TG' => "LIC CANONIQUE DROIT CANONIQUE",
'TH' => "DOCT CANONIQUE DROIT CANONIQUE",
'TJ' => "BAC CANONIQUE SCIENCES SOCIALES",
'TK' => "LIC CANONIQUE SCIENCES SOCIALES",
'TL' => "DOCT CANONIQUE SCIENCES SOCIALES",
'TM' => "BAC CANONIQUE DROIT CANONIQUE",
'TN' => "CERTIFICAT EN THEOLOGIE",
'TP' => "MASTER CANONIQUE",
'UA' => "DIPLOME UNIV OU ETAB NIVEAU BAC",
'UB' => "DIPLOME UNIV OU ETAB NIVEAU BAC + 1",
'UC' => "DIPLOME UNIV OU ETAB NIVEAU BAC + 2",
'UD' => "DIPLOME UNIV OU ETAB NIVEAU BAC + 3",
'UE' => "DIPLOME UNIV OU ETAB NIVEAU BAC + 4",
'UF' => "DIPLOME UNIV OU ETAB NIVEAU BAC + 5",
'UR' => "MASTERS DAUPHINE",
'US' => "DIPLOME EPHE",
'UT' => "DIPLOME ENS",
'UU' => "DIPLOME EHESS",
'UV' => "DIPLOME ENSAE",
'UW' => "DIPLOME PARIS-DAUPHINE CYCLE1",
'UX' => "DIPLOME INSTITUT ETUDES POLITIQUES",
'UY' => "CERTIFICAT ETUDES JUDICIAIRES",
'UZ' => "DIPLOME COMMERCE",
'VA' => "CONCOURS ADMINISTRATIF NIV. FORM. BAC",
'VB' => "CONCOURS ADMINISTRATIF NIV. FORM. BAC+1",
'VC' => "CONCOURS ADMINISTRATIF NIV. FORM. BAC+2",
'VD' => "CONCOURS ADMINISTRATIF NIV. FORM. BAC+3",
'VE' => "CONCOURS ADMINISTRATIF NIV. FORM. BAC+4",
'VF' => "PREPARATION CONCOURS ENSEIGNEMENT",
'WA' => "DIPLOME PAR LE GOUVERNEMENT",
'WB' => "DIPLÔME ARCHITECTE DE L'INSA",
'XA' => "LICENCE (LMD)",
'XB' => "MASTER (LMD)",
'XC' => "MASTER INGENIEUR",
'XD' => "MASTER ENSEIGNEMENT",
'XE' => "CPGE INTEGREE UNIVERSITES",
'XF' => "DU FORMATION ADAPTEE ENSEIGNEMENT",
'YA' => "DOCTORAT D'UNIVERSITE",
'YB' => "DOCTORAT D'UNIVERSITE (GENERIQUE)",
'YI' => "FORMATION INGENIEUR SPECIALISE",
'YJ' => "DIS MEDECINE",
'YL' => "DIS PHARMACIE",
'YM' => "ATTEST. FORMATION SPECIALISEE (AFS)",
'YN' => "ATTEST. FORM. SPECIALISEE APPROF. (AFSA)",
'YP' => "ATTESTATION ETUDES APPROF. CH. DENTAIRE",
'YQ' => "DIPLOME FORMATION MEDICALE SPECIALISEE",
'YR' => "DIPL FORM MEDICALE SPECIAL APPROFONDIE",
'ZA' => "DIPLOME PREP AUX ETUDES COMPTABLES",
'ZB' => "DIPLOME ETUDES COMPTABLES",
'ZC' => "DIPLOME SUPERIEUR ETUDES COMPTABLES",
'ZD' => "DIPLOME NATIONAL D'OENOLOGIE",
'ZE' => "CERT APTITUDE ENSEIG SPECIALISE (UNIV)",
'ZF' => "DIPLOME COMPTABILITE ET DE GESTION",
'ZG' => "DIPL SUP COMPTABILITE ET DE GESTION",
'ZH' => "CERTIFICATS DE COMPETENCES",
)
),
'NCORPS' => array (
'empCorps' => array (
'002' => "PERSONNEL DIRECTION DE 1ERE CATEGORIE",
'003' => "PERSONNEL DIRECTION DE 2EME CATEGORIE",
'004' => "PERSONNEL DE DIRECTION",
'006' => "DIRECTEUR DE CROUS",
'007' => "DIRECTEUR DE CLOUS",
'008' => "DIRECTEUR DE CRDP",
'009' => "PRESIDENT DU CONSEIL DE L'AERES",
'010' => "DIRECTEUR D'EPN",
'011' => "DIR. ADJOINT ET SECRETAIRE GENERAL D'EPN",
'012' => "DIRECTEUR DU SIEC",
'020' => "RECTEUR",
'021' => "SECRETAIRE GENERAL D'ACADEMIE",
'022' => "SECRETAIRE GENERAL D'A.S.U.",
'023' => "SECRETAIRE GENERAL D'UNIVERSITE",
'024' => "AGENT COMPTABLE D'UNIVERSITE",
'025' => "AGT CPT D'EPCSCP",
'026' => "AGENT COMPTABLE DE CROUS",
'027' => "DIRECTEUR ACADEMIE DE PARIS",
'030' => "ADM;DE L'EN, DE L'ENS SUP ET DE LA RECH",
'031' => "C.A.S.U",
'032' => "ATTACHE A.S.U",
'033' => "SECRETAIRE ADMINISTRATIF (SASU) NV.ST.",
'034' => "SECRETAIRE A.S.U",
'036' => "CONSEILLER A.U",
'037' => "ATTACHE A.U",
'039' => "SECRETAIRE A.U.",
'041' => "INTENDANT UNIVERSITAIRE",
'042' => "ATTACHE I.U",
'044' => "SECRETAIRE I.U.",
'045' => "AGENT DE SERVICE DES ETABS D'ENSEIGN.",
'046' => "AIDE D'ECONOMAT",
'047' => "OUVRIER ENTRETIEN ACCUEIL DES ETABS ENS.",
'050' => "ATTACHE ADMIN EDUC NAT ET ENS SUP",
'051' => "ATTACHE D'ADMINISTRATION DE L'ETAT",
'054' => "SECRETAIRE ADMINISTRATIF",
'055' => "SECRETAIRE ADMINISTRATIF ",
'056' => " ADJ. ADM DE L'EN ET DE L'ENS SUP ",
'070' => "TECHNICIEN DE LABORATOIRE ENS.SUP.",
'071' => "AIDE TECHNIQUE DE LABORATOIRE ENS. SUP.",
'072' => "AIDE DE LABORATOIRE ENS. SUP.",
'073' => "GARCON DE LABORATOIRE ENS. SUP.",
'074' => "TECHNICIEN DE LABO DES ET. SC. (A.S)",
'075' => "AIDE TECHNIQUE DE LABORAT. DES ET. SC.",
'076' => "AIDE DE LABORATOIRE (ANC.ST)",
'077' => "GARCON DE LABORATOIRE",
'083' => "TECHNICIEN DE LABORATOIRE (1994)",
'084' => "TECHNICIEN DE LABORATOIRE (1992)",
'085' => "AIDE TECHNIQUE DE LAB. (N.ST)",
'086' => "AIDE DE LABORATOIRE (N.STATUT)",
'087' => "AGENT TECHNIQUE DE LABORATOIRE",
'088' => "ADJ.TECH. LAB DES ETAB. ENS",
'101' => "INSPECTEUR GENERAL DE L'ADMINISTRATION",
'102' => "INSPECTEUR GENERAL DE L'EDUCATION NAT.",
'103' => "INSPECTEUR GENERAL DES BIBLIOTHEQUES",
'104' => "INSP. PEDAG. REGIONAL / INSP. D'ACADEMIE",
'105' => "INSPECTEUR D'ACADEMIE DIR. SERV. DEPART.",
'106' => "INSPECTEUR D'ACADEMIE ADJOINT",
'107' => "INSPECTEUR D'ACADEMIE",
'108' => "INSP.D'ACADEMIE/INSP.PEDAG. REGIONAL",
'110' => "INSPECT. DE L'APPRENTISSAGE COMMISSIONNE",
'111' => "INSPECTEUR DE L'ENSEIGNEMENT TECHNIQUE",
'112' => "INSPECTEUR D'ORIENTATION ET D'INFORMATIO",
'113' => "INSPECTEUR DEPARTEMENTAL DE L'E.N.",
'114' => "INSPECTEUR PRINCIPAL DE L'ENSEIG. TECH.",
'115' => "INSPECTEUR DE L'EDUCATION NATIONALE",
'116' => "INSPECTEUR DE LA JEUNESSE ET DES SPORTS",
'120' => "INPECTEUR GENERAL DE L'ADM ET DE LA RECH",
'200' => "SECRETAIRE GENERAL DU MINISTERE",
'201' => "MINISTRE",
'202' => "SECRETAIRE D'ETAT",
'203' => "ADMINISTRATEUR CIVIL",
'204' => "DIRECTEUR GENERAL D'ADM. CENTRALE",
'205' => "DIRECTEUR D'ADMINISTRATION CENTRALE",
'206' => "CHEF DE SERVICE D'ADMINISTR. CENTRALE",
'207' => "SOUS-DIRECTEUR D'ADMINISTR. CENTRALE",
'208' => "DIRECTEUR ADJOINT D'ADMINISTR. CENTRALE",
'209' => "DELEGUE D'ADMINISTRATION CENTRALE",
'210' => "ATTACHE ADM.CENTRALE",
'211' => "SECRETAIRE ADMINISTRAT. ADM.CENTR.(A.ST)",
'212' => "ADJOINT ADMINISTRATIF ADM.CENTR.(N.S)",
'213' => "AGENT ADMINISTRATIF ADM.CENTR.",
'214' => "AGENT DE BUREAU ADM.CENTR.",
'215' => "AGENT TECHNIQUE DE BUREAU DE L'ADM. CENT",
'216' => "SECRETAIRE STENODACTYLOGRAPHE DE L'ADM.C",
'217' => "SECRETAIRE ADMINISTRATIF (SAC) NV.STATUT",
'218' => "DIRECTEUR DE PROJET ADMINIST. CENTRALE",
'219' => "CHEF DE MISSION D'ADMINIST.CENTRALE",
'220' => "ADJOINT ADMINISTRATIF DE L'AC",
'221' => "DIRECTEUR DE CNOUS",
'222' => "DIRECTEUR ADJOINT DE CNOUS",
'223' => "DIRECTEUR DE RECHERCHE DU CNRS",
'224' => "SOUS DIRECTEUR DE CNOUS",
'230' => "ADJOINT TECHNIQUE DE L'AC",
'231' => "CHEF DE SERVICE INTERIEUR",
'232' => "AGENT DE SERVICE DES ADMINISTR.CENTRALES",
'233' => "AGENT PRINCIPAL DES SERVICES TECHNIQUES",
'234' => "HUISSIER DES ADMINISTRATIONS CENTRALES",
'235' => "MAITRE-OUVRIER (NOUV. STATUT) ADM.CENTR.",
'236' => "CONTREMAITRE DE L'ADMINISTR. CENTRALE",
'237' => "OUVRIER PROFESSIONNEL (N.ST.) ADM. CENT.",
'238' => "OUVRIER PROFESSIONNEL DE L'ADM. CENTRALE",
'239' => "AGENT SUPERIEUR DE L'ADM. CENTRALE",
'240' => "CHEF DE GROUPE DE L'ADM. CENTRALE",
'241' => "MAITRE OUVRIER DE L'ADM. CENTRALE",
'245' => "EXPERT DE HAUT NIVEAU",
'251' => "ADJOINT ADMINISTRATIF A.C (A.C)",
'263' => "ADJOINT ADMINISTRATIF( RECHERCHE CNRS)",
'264' => "SECRET.D'ADMINISTR. ( RECHERCHE CNRS)",
'265' => "ATTACHE D'ADMINISTR. ( RECHERCHE CNRS)",
'275' => "ASSISTANT INGENIEUR ( RECHERCHE CNRS)",
'276' => "INGENIEUR D'ETUDES( RECHERCHE CNRS)",
'277' => "INGENIEUR DE RECHERCHE ( RECHERCHE CNRS)",
'278' => "ADJOINT TECHNIQUE ( RECHERCHE CNRS)",
'279' => "TECHNICIEN ( RECHERCHE CNRS)",
'280' => "INGENIEUR DES PONTS ET CHAUSSEES",
'281' => "ARCHITECTE ET URBANISME DE L'ETAT",
'282' => "INGENIEUR TRAVAUX PUBLICS DE L'ETAT",
'283' => "INGENIEUR DES TELECOMMUNICATIONS",
'284' => "ATTACHE INSEE",
'285' => "ADMINISTRATEUR INSEE",
'286' => "CHARGE DE MISSION INSEE",
'287' => "INGENIEUR EN CHEF TPE",
'288' => "MEDECIN INSPECTEUR DE SANTE PUBL. (N.ST)",
'289' => "INFIRMIERE D'ETAT ",
'290' => "INGENIEUR DES PONTS, EAUX ET FORETS",
'293' => "INGENIEUR EN CHEF DES TVX PUBLICS 2G",
'294' => "INGENIEUR EN CHEF DES TVX PUBLICS 1G",
'295' => "INGENIEUR DES MINES",
'296' => "CHARGE D'ETUDES DOCUMENTAIRES (CULTURE)",
'297' => "RESTAURATEURS SPECIALISTES",
'298' => "CHEF DE TRAVAUX D'ART",
'299' => "TECHNICIEN D'ART",
'300' => "PROFESSEUR DES UNIVERSITES",
'301' => "MAITRE DE CONFERENCES DES UNIVERSITES",
'302' => "MAITRE ASSISTANT",
'303' => "ASSISTANT AGREGE ET ASSIMILE",
'304' => "ASSISTANT NON AGREGE ET ASSIMILE",
'305' => "ASSISTANT DE L'ENSEIGNEMENT SUPERIEUR",
'310' => "PROF DES UNIV.- PRATICIEN HOSPITALIER",
'311' => "MAITRE DE CONF PRATICIEN HOSPITALIER ",
'312' => "CHEF DE TRAVAUX DES FACULTES",
'313' => "CHEF DE TRAVAUX UNIV-PRATICIEN HOSPITAL.",
'314' => "ASSISTANT DISCIPL. MED-BIOLOG. ET MIXTES",
'315' => "PROF UNIV-PRATICIEN HOSPITAL. CSERD",
'316' => "MAITRE DE CONF PRATICIEN HOSPITAL.CSERD ",
'317' => "PROF DU 1ER GRADE CHIR DENT ODONTO",
'318' => "PROF DU 2EME GRADE CHIR DENT ODONTO",
'330' => "ASTRONOME",
'331' => "PHYSICIEN",
'332' => "ASTRONOME ADJOINT",
'333' => "PHYSICIEN ADJOINT",
'334' => "ASTRONOME TITULAIRE",
'335' => "PHYSICIEN TITULAIRE",
'336' => "ASTRONOME ADJOINT (DECRET DU 31/07/1936)",
'337' => "PHYSICIEN ADJOINT (DECRET DU 25/12/1936)",
'338' => "AIDE-ASTRONOME",
'339' => "AIDE-PHYSICIEN",
'340' => "ASSISTANT D'OBSERVATOIRE",
'341' => "PROFESSEUR DE L'ECOLE CENTRALE 2E CAT.",
'342' => "PROFESSEUR DE L'ECOLE CENTRALE 1E CAT.",
'343' => "PROFESSEUR DU COLLEGE DE FRANCE",
'344' => "SS-DIR DE LABORAT. DU COLLEGE DE FRANCE",
'345' => "ASSISTANT DU COLLEGE DE FRANCE",
'346' => "SOUS-DIRECTEUR DE LABORATOIRE DES E.N.S.",
'347' => "CHEF DE TRAVAUX DE L'INSTIT.HYDROL.CLIM.",
'348' => "ASSISTANT DE L'INSTIT. HYDROL. CLIM.",
'350' => "PROF MUSEUM HISTOIRE NATURELLE",
'351' => "MAITRE DE CONF MUSEUM HISTOIRE NATURELLE",
'352' => "ASSISTANT MUSEUM HISTOIRE NATURELLE",
'353' => "DIRECTEUR D'ETUDES DE L'EHESS",
'354' => "MAITRE DE CONFERENCES DE L' EHESS",
'355' => "DIR. D'ETUDES EPHE ET ECOLE DES CHARTES",
'356' => "MAITRE DE CONF EPHE ET ECOLE DES CHARTES",
'357' => "PREP.-CHEF TRAVAUX LICENCIE EHESS/EPHE",
'358' => "PREP.-CH.TRAVAUX NON LICENCIE EHESS/EPHE",
'359' => "CONSEILLER TECH. & PEDAGO. SUPERIEU",
'360' => "PROFESSEUR DU CNAM",
'361' => "SOUS-DIRECTEUR DE LABORATOIRE DU CNAM",
'362' => "CHEF DE TRAVAUX DU CNAM",
'363' => "ASSISTANT DU CNAM",
'364' => "PROFESSEUR DE L'ENSAM",
'365' => "PROFESSEUR TECHNIQUE ADJOINT DE L'ENSAM",
'366' => "CHEF DE TRAVAUX PRATIQUES DE L'ENSAM",
'380' => "PROFESSEUR DES UNIVERSITES ASSOCIE ",
'381' => "MAITRE DE CONFERENCES DES UNIV. ASSOCIE",
'382' => "PROF ASSOCIE DES UNIV. DIS. MED. ",
'383' => "MAITRE DE CF ASSOCIE DES UNIV.DIS.MED. ",
'384' => "PROF ASSOCIE DES UNIV. DIS. ODONTO. ",
'385' => "MAITRE DE CF ASSOCIE DES UNIV.DIS.ODONT.",
'386' => "ASTRONOME ASSOCIE",
'387' => "PHYSICIEN ASSOCIE",
'388' => "ASTRONOME ADJOINT ASSOCIE",
'389' => "PHYSICIEN ADJOINT ASSOCIE",
'390' => "PROFESSEUR DU COLLEGE DE FRANCE ASSOCIE ",
'391' => "PROF MUSEUM HISTOIRE NATURELLE ASSOCIE ",
'392' => "MAITRE DE CONF MUSEUM HIST.NAT. ASSOCIE ",
'393' => "DIRECTEUR D'ETUDES DE L'EHESS ASSOCIE ",
'394' => "MAITRE DE CONF. DE L' EHESS ASSOCIE ",
'395' => "DIR.D'ETUDES EPHE-ECOL.CHARTES ASSOCIE ",
'396' => "MAITRE DE CONF EPHE-EC. CHARTES ASSOCIE ",
'397' => "PROFESSEUR DU CNAM ASSOCIE ",
'400' => "ECR INSTITUTEUR",
'402' => "ECR INSTRUCTEUR",
'404' => "ECR INSTITUTEUR SUPPLEANT",
'405' => "ECR PROFESSEUR DES ECOLES",
'406' => "ADM CONTR 1ER DEGRE SESSION EX 2014 PR",
'431' => "ECR PROFESSEUR D'EPS",
'432' => "ECR CHARGE D'ENSEIGNEMENT EPS",
'433' => "ECR PROFESSEUR ADJOINT D'EPS",
'450' => "ECR CHAIRE SUPERIEUR",
'451' => "ECR AGREGE",
'453' => "ECR PROFESSEUR CERTIFIE",
'454' => "ECR PROFESSEUR TECHNIQUE ADJOINT",
'456' => "ECR PROFESSEUR CHEF DE TRAVAUX DE LYCEE",
'457' => "ECR PROFESSEUR CHEF DE TRAVAUX DEGRE SUP",
'459' => "ECR PROFESSEUR D'ENS GENERAL DES COLLEGE",
'462' => "ECR CHARGE D'ENSEIGNEMENT HORS EPS",
'467' => "ECR ADJOINT D'ENSEIGNEMENT",
'471' => "ECR PROFESSEUR DE LYCEE PROF CHEF DE TRA",
'472' => "ECR PROFESSEUR D'ENS. GENERAL DE CET",
'473' => "ECR PROFESSEUR D'ENS. TECH THEOR DE CET",
'474' => "ECR PROFESSEUR TECH D'ENS. PRATIQ DE CET",
'475' => "ECR PROFESSEUR DE LYCEE PROF",
'476' => "ECR PROFESSEUR TECHNIQUE CHEF DE TRAVAUX",
'477' => "ECR PROFESSEUR TECHN. DE LYCEE TECHNIQUE",
'478' => "ECR PROFESSEUR DE CET",
'480' => "BENEFICIAIRE DE L'OBLIGATION D'EMPLOI",
'496' => "ECR MAITRE AUXILIAIRE",
'497' => "ADM CONTR 2ND DEGRE SESSION EX 2014 PR",
'520' => "PERSONNEL D'ORIENTATION (D-72)",
'521' => "PERSONNEL D'ORIENTATION",
'531' => "PROFESSEUR D'EPS",
'532' => "CHARGE D'ENSEIGNEMENT EPS",
'533' => "PROFESSEUR ADJOINT D'EPS",
'534' => "MAITRE D'EPS",
'550' => "PROFESSEUR DE CHAIRE SUPERIEURE",
'551' => "PROFESSEUR AGREGE",
'553' => "PROFESSEUR CERTIFIE",
'554' => "PROFESSEUR TECHNIQUE ADJOINT",
'555' => "PROFESSEUR TECHNIQUE ADJOINT D'ENNA",
'556' => "PROFESSEUR CHEF DE TRAVAUX DE LYCEE TECH",
'557' => "PROFESSEUR CHEF DE TRAVAUX DEGRE SUP",
'558' => "PROFESSEUR D'ENNA",
'559' => "PROFESSEUR D'ENS. GENERAL DES COLLEGES",
'562' => "CHARGE D'ENSEIGNEMENT HORS EPS",
'563' => "CONSEILLER PRINCIPAL D'EDUCATION",
'564' => "CONSEILLER D'EDUCATION",
'567' => "ADJOINT D'ENSEIGNEMENT",
'571' => "PROFESSEUR DE LYCEE PROF CHEF DE TRAVAUX",
'572' => "PROFESSEUR D'ENSEIGNEMENT DE CET",
'573' => "PROFESSEUR D'ENS. TECH THEORIQUE DE CET",
'574' => "PROFESSEUR TECHNIQUE D'ENS. PROF DE CET",
'575' => "PROFESSEUR DES LYCEES PROFESSIONNELS",
'576' => "PROFESSEUR TECHNIQUE CHEF DE TRAVAUX",
'577' => "PROFESSEUR TECHNIQUE DE LYCEE TECHNIQUE",
'578' => "PROFESSEUR DE CET",
'590' => "ELEVE PROFESSEUR",
'600' => "INSTITUTEUR",
'602' => "INSTRUCTEUR",
'604' => "INSTITUTEUR AUXILIAIRE SUPPLEANT",
'615' => "PROFESSEUR DES ECOLES",
'620' => "PERS. DIRECTION 1ERE CATEGORIE(CT)",
'621' => "PERS. DIRECTION 2EME CATEGORIE (CT)",
'622' => "PERS. DIRECTION (CT)",
'623' => "INSPECTEUR DE L'EN (CT)",
'624' => "PERSONNEL D'ORIENTATION (CT)",
'625' => "PROF D'EPS (CT)",
'626' => "CHARGE ENS EPS (CT)",
'627' => "PROFESSEUR DE CHAIRE SUPERIEURE",
'628' => "PROFESSEUR AGREGE (CT) ",
'629' => "PROFESSEUR CERTIFIE (CT)",
'630' => "PROF.D'ENS GEN DE COLLEGE (CT)",
'631' => "CONSEILLER PRINCIPAL D'EDUCATION (CT)",
'632' => "CONSEILLER D'EDUCATION (CT)",
'633' => "ADJOINT D'ENSEIGNEMENT (CT)",
'634' => "PROF LYCEES PROFESSIONNELS (CT)",
'635' => "INSTITUTEUR (CT)",
'636' => "PROFESSEUR DES ECOLES (CT)",
'637' => "SURVEILLANT (CT)",
'638' => "ADJOINT D'EDUCATION (CT)",
'639' => "INSTITUTEUR C.T. MAYOTTE",
'640' => "INSTITUTEUR D'ETAT RECRUTE A MAYOTTE",
'641' => "AGENT ADMINISTRATIF DE MAYOTTE",
'642' => "AGENT TECHNIQUE DES ADMINISTRATIONS",
'650' => "INSTIT. CHARGE ENSEIGNEMENT EN COLLEGE",
'651' => "MONITEUR (DIPLOME D'UN CEP)",
'652' => "INSTITUTEUR BREVETE",
'653' => "INSTITUTEUR PERENNISE (NIVEAU CEP)",
'654' => "INSTITUTEUR (PF)",
'655' => "PROFESSEUR DES ECOLES (PF)",
'656' => "CONTRACTUEL PF1D CAT A",
'657' => "CONTRACTUEL PF1D CAT B",
'660' => "CADRE2 (CT)",
'670' => "CADRE1 (CT)",
'680' => "CADRE DES BACHELIERS (CT)",
'690' => "CONTRACTUEL (CT)",
'695' => "CONTRACTUEL CT GARANTI D'EMPLOI",
'700' => "PROFESSEUR DES UNIVERSITES ASSOCIE-MT ",
'701' => "MAITRE DE CONF. DES UNIV. ASSOCIE-MT ",
'702' => "PROF. ASS. DES UNIV. DE MEDECINE GENER.",
'703' => "M. DE CONF. ASS. UNIV. MEDECINE GENER.",
'704' => "ASTRONOME ASSOCIE-MT",
'705' => "PHYSICIEN ASSOCIE-MT",
'706' => "ASTRONOME ADJOINT ASSOCIE-MT",
'707' => "PHYSICIEN ADJOINT ASSOCIE-MT",
'708' => "PROFESSEUR DU COLLEGE DE FRANCE ASS-MT ",
'709' => "PROF MUSEUM HISTOIRE NATURELLE ASS-MT ",
'710' => "MAITRE DE CONF MUSEUM HIST.NAT. ASS-MT ",
'711' => "DIRECTEUR D'ETUDES DE L'EHESS ASS-MT ",
'712' => "MAITRE DE CONF. DE L' EHESS ASSOCIE-MT ",
'713' => "DIR.D'ETUDES EPHE-ECOL.CHARTES ASS-MT ",
'714' => "MAITRE DE CONF EPHE-EC. CHARTES ASS-MT ",
'715' => "PROFESSEUR DU CNAM ASSOCIE-MT ",
'720' => "PROFESSEUR DES UNIVERSITES INVITE",
'721' => "MAITRE DE CONFERENCES DES UNIV. INVITE",
'722' => "PROFESSEUR INVITE DISC. MED.",
'723' => "MAITRE DE CONF. INVITE DISC. MED.",
'724' => "PROF INVITE DISC. ODONTO.",
'725' => "MAITRE DE CONF INVITE DISC. ODONTO.",
'726' => "ASTRONOME INVITE",
'727' => "PHYSICIEN INVITE",
'728' => "ASTRONOME ADJOINT INVITE",
'729' => "PHYSICIEN ADJOINT INVITE",
'730' => "PROFESSEUR DU COLLEGE DE FRANCE INVITE",
'731' => "PROF MUSEUM HISTOIRE NATURELLE INVITE",
'732' => "MAITRE DE CONF MUSEUM HIST. NAT. INVITE",
'733' => "DIRECTEUR D'ETUDES DE L'EHESS INVITE",
'734' => "MAITRE DE CONFERENCES DE L' EHESS INVITE",
'735' => "DIR.D'ETUDES EPHE-ECOL.CHARTES INVITE",
'736' => "MAITRE DE CONF EPHE-ECOL.CHARTES INVITE",
'737' => "PROFESSEUR DU CNAM INVITE",
'740' => "ASSISTANT HOSPITALIER UNIV. CSERD",
'741' => "PRATICIEN HOSPITALIER UNIVERSITAIRE",
'742' => "ASSISTANT HOSPITALIER UNIVERSITAIRE",
'743' => "CHEF CLINIQUE UNIV. ASSISTANT HOPITAUX",
'744' => "ASSISTANT ASSOCIE DES UNIV. DIS. ODONTO.",
'745' => "ASSIS.CHEF CLINIQUE ASSOCIE UNIV.DIS.MED",
'750' => "MAITRE DE LANGUE",
'751' => "LECTEUR",
'752' => "REPETITEUR DE L'INALCO",
'753' => "ATTACHE TEMPORAIRE ENSEIGN. ET RECHERCHE",
'754' => "ALLOCATAIRE MONITEUR NORMALIEN",
'755' => "MONITEUR ",
'756' => "MONITEUR EN PHARMACIE",
'757' => "CONTRACTUEL DECRET 1992",
'758' => "CHARGE D'ENSEIGNEMENT VACATAIRE",
'759' => "AGENT TEMPORAIRE VACATAIRE",
'773' => "INTERVENANT LANGUE PRIMAIRE",
'774' => "ASSISTANT LANGUE VIVANTE",
'775' => "CONSEILLER D'ORIENTATION INTERIMAIRE",
'776' => "MAITRE AUXILIAIRE",
'777' => "CORPS DES ASSISTANTS ETRANGERS",
'778' => "PROFESSEUR ASSOCIE",
'779' => "PROFESSEUR CONTRACTUEL",
'786' => "MAITRE D'INTERNAT",
'787' => "SURVEILLANT D'EXTERNAT",
'789' => "ACCOMPAGNANT EN SITUATION DE HANDICAP",
'790' => "ASSISTANT D'EDUCATION",
'791' => "ADMISSIBLE CONTRACTUEL 1D EXCEPT 2014",
'792' => "ADMISSIBLE CONTRACTUEL 2D EXCEPT 2014",
'800' => "CONSERVATEUR GENERAL DES BIBLIOTHEQUES",
'801' => "CONSERVATEUR DES BIBLIOTHEQUES (1992)",
'802' => "CONSERVATEUR DES MUSEES (1992)",
'803' => "CONSERVATEUR DES BIBLIOTHEQUES (1969)",
'804' => "CONSERVATEUR STAGIAIRE ELEVE ENSSIB",
'806' => "BIBLIOTHECAIRE",
'807' => "BIBLIOTHECAIRE ADJOINT ANC. STATUT 1950",
'808' => "BIBLIOTHECAIRE ADJOINT (NV.STATUT 1995)",
'809' => "BIBLIOTHECAIRE ADJOINT SPECIALISE",
'810' => "BIBLIOTHECAIRE ASSISTANT SPECIALISE",
'813' => "MAGASINIER EN CHEF",
'814' => "MAGASINIER SPECIALISE",
'815' => "INSPECTEUR DE MAGASINAGE",
'816' => "MAGASINIER",
'817' => "GARDIEN DE BIBLIOTHEQUE",
'818' => "ASSISTANT DES BIBLIOTHEQUES",
'820' => "MAGASINIER DES BIBLIOTHEQUES",
'821' => "AGENT DE BUREAU DE RECH.ET DE FORMATION",
'822' => "AGENT D'ADMINISTRATION RECH.ET FORMATION",
'823' => "ADJOINT ADMINISTRATIF RECH.ET FORMATION",
'825' => "ATTACHE D'ADMINISTR. RECH.ET FORMATION",
'826' => "CHARGE D'ADMINISTR. RECH.ET FORMATION",
'827' => "SECRET.D'ADMINISTR. RECH.ET FORMATION",
'828' => "AGENT DES SERV.TECH. RECH.ET FORMATION",
'830' => "TECHNICIEN DE RECHERCHE & FORMATION(NES)",
'831' => "AIDE TECHNIQUE DE RECH.ET DE FORMATION",
'832' => "AGENT TECHNIQUE DE RECH.ET DE FORMATION",
'834' => "ASSISTANT INGENIEUR (RECH ET FORM)",
'835' => "INGENIEUR D'ETUDES (RECH ET FORM)",
'836' => "INGENIEUR DE RECHERCHE (RECH ET FORM)",
'837' => "ADJOINT TECHNIQUE DE RECH.ET FORMATION",
'838' => "TECHNICIEN DE RECH.ET FORMATION",
'839' => "ADJOINT TECHNIQUE-RECHERCHE & FORMATION",
'840' => "INGENIEUR CONTRACTUEL CNRS",
'841' => "TECHNIQUE CONTRACTUEL CNRS",
'842' => "ADMINISTRATIF CONTRACTUEL CNRS",
'843' => "CONTRACT. D.DETERM. ENS.SUP (>86) CAT A",
'844' => "CONTRACT. D.DETERM. ENS.SUP. (>86) CAT B",
'845' => "CONTRACT. D.DETERM. ENS.SUP. (>86) CAT D",
'846' => "CONTRACTUEL TEMPORAIRE ENS. SUPERIEUR",
'847' => "CONTROLEUR CONTRACTUEL DE L'ADM. CENTR.",
'850' => "AGENT CONTRACTUEL ADMINISTRATIF",
'851' => "CONTRACTUEL VIGILE",
'852' => "AGENT CONTRACTUEL TECHNIQUE",
'853' => "AGENT CONTRACTUEL FORMATION CONTINUE",
'855' => "CONTRACTUEL EX-UGAP",
'856' => "MEDECIN CONTACTUEL",
'857' => "MEDECIN CONTRACTUEL SANTE SCOLAIRE",
'858' => "INFIRMIERE AUXILIAIRE",
'859' => "INFIRMIERE CONTRACTUELLE",
'860' => "ASSISTANTE SOCIALE CONTRACTUELLE",
'861' => "AUXILIAIRE DE BUREAU",
'862' => "AUXILIAIRE DE SERVICE",
'863' => "CONTRACTUEL RECHERCHE CHARGE DE MISSION",
'864' => "AGENT CONTRACTUEL RECHERCHE",
'865' => "CONTRACTUEL DECRET 62",
'866' => "CONTRACTUEL A DUREE DETERMINEE",
'867' => "CONTRACTUEL INDIVIDUEL",
'868' => "CONTRACTUEL CABINET",
'869' => "TRAVAILLEUR HANDICAPE",
'870' => "AGENT CONTRACTUEL DE BIBLIOTHEQUES",
'871' => "AGENT SUR CONTRAT DES BIBLIOTHEQUES",
'872' => "ARCHITECTE CONTRACTUEL",
'873' => "INFORMATICIEN DE HAUT NIVEAU",
'874' => "INSPECT. DE L'APPRENTISSAGE CONTRACTUEL",
'875' => "PARCOURS D'ACCES A L' EMPLOI",
'879' => "CONTRACTUEL BOE - DECRET DE 1995",
'887' => "MAD ENTRANT AUTRE ADMINISTRATION",
'888' => "APPRENTI",
'898' => "VACATAIRE",
'899' => "INDEMNITAIRE",
'910' => "COMMIS DES SERVICES EXTERIEURS",
'911' => "AGENT ADMINISTRATIF DES SERV. EXT.",
'912' => "ADJOINT ADMINISTRATIF DES SERV. EXT.",
'915' => "ADJOINT AMINISTRATIF DES SER. DEC.",
'920' => "STENODACTYLOGRAPHE DES SERV. EXT.",
'925' => "ADJOINTE DU SERV. DE SANTE SCOL. ET UNIV",
'930' => "AGENT DE BUREAU DES SERV. EXT.",
'940' => "AGENT TECHNIQUE DE BUREAU DES SERV. EXT.",
'953' => "OUVRIER PROFESSIONNEL DES SERV. EXT.",
'954' => "CONTREMAITRE DES SERV. EXT.",
'955' => "OUVRIER PROFESSIONNEL DES ETABS D'ENS.",
'956' => "MAITRE OUVRIER DES ETABS D'ENSEIGNEMENT",
'957' => "TECHNICIEN DE L'EDUCATION NATIONALE",
'960' => "ADJOINT TECHNIQUE DES ETAB.ENS.",
'961' => "AGENT DE SERVICE DES SERV. EXT.",
'962' => "AGENT DES SERV.TECHNIQUES DES SERV.EXT.",
'970' => "CONDUCTEUR AUTO DES ADM. DE L'ETAT",
'975' => "CHEF DE GARAGE DES ADM. DE L'ETAT",
'980' => "TELEPHONISTE DES ADM. DE L'ETAT",
'984' => "CONSEILLER POUR L'ACTION SOCIALE",
'985' => "SECRETAIRE DE DOCUMENTATION NOUV.STATUT",
'986' => "INFIRMIERS ENES CATEGORIE A",
'987' => "ASSISTANT SERVICE SOCIAL ADMIN DE L'ETAT",
'988' => "CONS TECH DE SERV SOC AE",
'989' => "INFIRMIERE OU INFIRMIER (NOUVEAU STATUT)",
'990' => "ASSISTANT DE SERVICE SOCIAL",
'991' => "SECRETAIRE DE DOCUMENTATION (ANC.STATUT)",
'992' => "INFIRMIER ET INFIRMIERE (ANCIEN STATUT)",
'993' => "DOCUMENTALISTE",
'994' => "CHEF D'ETUDES DOCUMENTAIRES",
'995' => "CHARGE D ETUDES DOCUMENTAIRES",
'996' => "CONSEILLER TECHNIQUE DE SERVICE SOCIAL",
'997' => "MEDECIN DE L'EDUCATION NATIONALE",
'998' => "MEDECIN DE L'E.N.- CONSEILLER TECHNIQUE",
'999' => "SANS CORRESPONDANCE CORPS",
'***' => "CONVENTION ETOILE, DECLINAISON TOUT CODE",
)
)
); );
$GLOBALS['supannTranslateEtablissementDirectory'] = array(
'UAI' => $GLOBALS['tableCodeUAI']
);
?>

View file

@ -0,0 +1,41 @@
ul.LSformElement_supannCompositeAttribute li {
border: 1px dotted #CCC;
padding: 2px;
}
ul.LSformElement_supannCompositeAttribute li.noValue {
border: none;
}
ul.LSformElement_supannCompositeAttribute p {
margin: 0;
}
ul.LSformElement_supannCompositeAttribute p label {
font-weight: bold;
}
input.LSformElement_supannCompositeAttribute_search {
border: 1px solid #CCC;
width: 200px;
background: url('../../images/default/find.png') no-repeat scroll 0% 0% #FFF !important;
padding-left: 18px;
}
div.supannCompositeAttribute_possibleValues ul {
list-style-type: none;
padding: 0;
margin: 0;
border: 1px solid #CCC;
border-collapse: collapse;
}
div.supannCompositeAttribute_possibleValues li {
border-bottom: 1px solid #CCC;
margin-bottom: 2px;
}
div.supannCompositeAttribute_possibleValues li:hover {
background-color: #CCC;
cursor: pointer;
}

View file

@ -1 +0,0 @@
LSformElement_supannRoleEntite_label_SUPANN.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 678 B

View file

@ -0,0 +1 @@
supann_label_BCN.png

View file

@ -0,0 +1 @@
supann_label_BCN.png

View file

Before

Width:  |  Height:  |  Size: 851 B

After

Width:  |  Height:  |  Size: 851 B

View file

Before

Width:  |  Height:  |  Size: 901 B

After

Width:  |  Height:  |  Size: 901 B

View file

@ -68,16 +68,11 @@ LSerror :: defineError('SUPANN_02',
} }
$MUST_DEFINE_ARRAY= array( $MUST_DEFINE_ARRAY= array(
'supannRoleGenerique', 'supannNomenclatures',
'supannTypeEntite',
'supannTranslateRoleEntiteValueDirectory',
'supannTranslateFunctionDirectory',
'tableCodeUAI',
'supannTranslateEtablissementDirectory',
); );
foreach($MUST_DEFINE_ARRAY as $array) { foreach($MUST_DEFINE_ARRAY as $array) {
if ( !isset($GLOBALS[$array]) || !is_array($GLOBALS[$array])) { if ( !isset($GLOBALS[$array]) || !is_array($GLOBALS[$array])) {
LSerror :: addErrorCode('SUPANN_SUPPORT_01',$array); LSerror :: addErrorCode('SUPANN_SUPPORT_03',$array);
$retval=false; $retval=false;
} }
} }
@ -91,6 +86,10 @@ LSerror :: defineError('SUPANN_02',
return $retval; return $retval;
} }
/***********************************************************************
* Fonctions de génération de valeurs d'attributs
**********************************************************************/
/** /**
* Generation du displayName * Generation du displayName
* *
@ -237,6 +236,31 @@ LSerror :: defineError('SUPANN_02',
return $retval; return $retval;
} }
/***********************************************************************
* Fonction de parsing des valeurs spécifiques SUPANN
**********************************************************************/
/**
* 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;
}
/** /**
* Parse une valeur composite SUPANN * Parse une valeur composite SUPANN
* *
@ -261,175 +285,139 @@ LSerror :: defineError('SUPANN_02',
return; return;
} }
/** /***********************************************************************
* Retourne une eventuelle fonction de traduction d'une valeur * Fonctions relatives aux entités
* 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 * Retourne le nom court d'une entite en fonction de son identifiant
* *
* Fonction utilise comme fonction de traduction dans la fonction * @param[in] $id L'identifiant de l'entite (supannCodeEntite)
* 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 * @retval string Le nom de l'entite
**/ **/
function supanGetEntiteNameById($label,$key,$value) { function supanGetEntiteNameById($id) {
if (LSsession::loadLSobject(LS_SUPANN_LSOBJECT_ENTITE_TYPE)) { if (LSsession::loadLSobject(LS_SUPANN_LSOBJECT_ENTITE_TYPE)) {
$type=LS_SUPANN_LSOBJECT_ENTITE_TYPE; $type=LS_SUPANN_LSOBJECT_ENTITE_TYPE;
$e = new $type(); $e = new $type();
$list=$e -> listObjectsName("(supannCodeEntite=$value)",NULL,array(),LS_SUPANN_LSOBJECT_ENTITE_FORMAT_SHORTNAME); $list=$e -> listObjectsName("(supannCodeEntite=$id)",NULL,array(),LS_SUPANN_LSOBJECT_ENTITE_FORMAT_SHORTNAME);
if (count($list)==1) { if (count($list)==1) {
return array( return array_pop($list);
'translated' => array_pop($list),
'label' => $label
);
} }
} }
return array( return getFData(__("Entity %{id} (unrecognized)"),$id);
'translated' => getFData(__("%{value} (unrecognized value)"),$value),
'label' => $label
);
} }
/** /**
* Parse une valeur a etiquette SUPANN * Valide l'ID d'une entite
* *
* Exemple de valeur : * @param[in] $id L'identifiant de l'entite (supannCodeEntite)
* *
* {SUPANN}S410 * @retval boolean True si une entité avec cet ID existe, False sinon
*
* @param[in] $val La valeur
*
* @retval array Un tableau cle->valeur contenant label et value ou False
**/ **/
function supannParseLabeledValue($value) { function supannValidateEntityId($id) {
if (preg_match('/^\{([^\}]*)\}(.*)$/',$value,$m)) { if (LSsession::loadLSobject(LS_SUPANN_LSOBJECT_ENTITE_TYPE)) {
return array( $type=LS_SUPANN_LSOBJECT_ENTITE_TYPE;
'label'=>$m[1], $e = new $type();
'value'=>$m[2] $list=$e -> listObjectsName("(supannCodeEntite=$id)");
); if (count($list)==1) {
return true;
} }
return; }
return false;
} }
/** /**
* Simple découpage label/valeur sans traduction réel * Cherche des entités répond au pattern de recherche passé en paramètres
* et retourne un tableau mettant en relation leur identifiant et leur nom
* d'affichage.
* *
* @param[in] $key La cle * @param[in] $pattern string Le pattern de recherche
*
* @retval array Tableau du résultat de la recherche mettant en relation
* l'identifiant des entités trouvés avec leur nom d'affichage.
**/
function supannSearchEntityByPattern($pattern) {
$retval=array();
if (LSsession::loadLSclass('LSsearch')) {
$search=new LSsearch(
LS_SUPANN_LSOBJECT_ENTITE_TYPE,
'SUPANN:supannSearchEntityByPattern',
array(
'pattern' => $pattern,
'attributes' => array('supannCodeEntite'),
'sizelimit' => 10,
)
);
$search -> run();
foreach($search -> getSearchEntries() as $e) {
$code=$e->get('supannCodeEntite');
if (is_array($code)) $code=$code[0];
$retval[$code]=$e->displayName;
}
}
return $retval;
}
/***********************************************************************
* Fonctions relatives aux nomenclatures
**********************************************************************/
/**
* Vérifie si une valeur et son étiquette sont valide pour une table donnée
*
* @param[in] $table La table de nomenclature
* @param[in] $label L'étiquette de la valeur
* @param[in] $value La valeur * @param[in] $value La valeur
* *
* @retval array Un tableau cle->valeur contenant label et translated * @retval booleab True si valide, False sinon
**/ **/
function supannTranslateLabeledValue($value) { function supannValidateNomenclatureValue($table,$label,$value) {
$label='no'; $label=strtoupper($label);
$pl=supannParseLabeledValue($value); if (isset($GLOBALS['supannNomenclatures'][$label]) &&
if ($pl) { isset($GLOBALS['supannNomenclatures'][$label][$table]) &&
$label=$pl['label']; isset($GLOBALS['supannNomenclatures'][$label][$table][$value])) {
$value=$pl['value']; return true;
} }
return false;
return array(
'label' => $label,
'translated' => $value
);
} }
/** /**
* Traduit une valeur en fonction de sa cle extrait d'un attribut * Retourne le label d'une valeur en fonction de la table de nomenclature
* supannRoleEntite. * et de l'étiquette de la valeur.
* *
* @param[in] $key La cle * @param[in] $table La table de nomenclature
* @param[in] $label L'étiquette de la valeur
* @param[in] $value La valeur * @param[in] $value La valeur
* *
* @retval array Un tableau cle->valeur contenant label et translated ou False * @retval array Le label de la valeur. En cas de valeur nor-reconnue, retourne
* la valeur en spécifiant qu'elle n'est pas reconnue.
**/ **/
function supannTranslateRoleEntiteValue($key,$value) { function supannGetNomenclatureLabel($table,$label,$value) {
$label='no'; if (supannValidateNomenclatureValue($table,$label,$value)) {
$pl=supannParseLabeledValue($value); $label=strtoupper($label);
if ($pl) { return $GLOBALS['supannNomenclatures'][$label][$table][$value];
$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
);
} }
return getFData(__("%{value} (unrecognized value)"),$value);
} }
/** /**
* Traduit une valeur en fonction de sa cle extrait d'un attribut * Retourne les valeurs possibles d'une table de nomenclature
* supannEtablissement
* *
* @param[in] $key La cle * @param[in] $table La table de nomenclature
* @param[in] $value La valeur
* *
* @retval array Un tableau cle->valeur contenant label et translated * @retval array Tableau contenant les valeurs possibles de la table
* de nomenclature
**/ **/
function supannTranslateEtablissement($value) { function supannGetNomenclatureTable($table) {
$label='no'; $retval=array();
$pl=supannParseLabeledValue($value); foreach($GLOBALS['supannNomenclatures'] as $label => $tables) {
if ($pl) { if (isset($GLOBALS['supannNomenclatures'][$label][$table])) {
$label=$pl['label']; $retval[$label]=$GLOBALS['supannNomenclatures'][$label][$table];
$value=$pl['value']; }
}
return $retval;
} }
if (isset($GLOBALS['supannTranslateEtablissementDirectory'][$label][$value])) {
return array(
'translated' => $GLOBALS['supannTranslateEtablissementDirectory'][$label][$value],
'label' => $label
);
}
else {
return array(
'label' => $label,
'translated' => $value
);
}
}
?>

View file

@ -30,5 +30,3 @@ class LSattr_html_supannRoleEntite extends LSattr_html {
var $LSformElement_type = 'supannRoleEntite'; var $LSformElement_type = 'supannRoleEntite';
} }
?>

View file

@ -0,0 +1,312 @@
<?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 supannCompositeAttribute d'un formulaire pour LdapSaisie
*
* Cette classe permet de gérer les attributs composite supann en la déclinant.
* Elle étant la classe basic LSformElement.
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*/
class LSformElement_supannCompositeAttribute extends LSformElement {
var $template = 'LSformElement_supannCompositeAttribute.tpl';
var $fieldTemplate = 'LSformElement_supannCompositeAttribute_field.tpl';
/*
* Composants des valeurs composites :
*
* Format :
* array (
* '[clé composant1]' => array (
* 'label' => '[label composant]',
* 'type' => '[type de composant]',
* 'table' => '[table de nomenclature correspondante]',
* 'required' => '[booléen obligatoire]'
* ),
* '[clé composant 2]' => array (
* [...]
* ),
* [...]
* )
* Types :
* - 'table' => Composant alimenté à partir d'une table issu de la
* nomenclature SUPANN. Le paramètre 'table' permet alors
* de spécifier quel table SUPANN intéroger.
* - 'codeEntite' => Composant stockant le code d'une entite SUPANN de
* l'annuaire.
* - 'text' => saisie manuelle
*
*/
var $components = array ();
var $_postParsedData=null;
/**
* 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();
$invalidValues=array();
foreach($this -> values as $val) {
$keyValue=supannParseCompositeValue($val);
if ($keyValue) {
$parseValue=array('value' => $val);
foreach($keyValue as $key => $value) {
$parseValue[$key]=$this -> translateComponentValue($key,$value);
}
$parseValues[]=$parseValue;
}
else {
$invalidValues[]=$val;
}
}
$return['html'] = $this -> fetchTemplate(NULL,
array(
'parseValues' => $parseValues,
'components' => $this -> components
)
);
LSsession :: addCssFile('LSformElement_supannCompositeAttribute.css');
if (!$this -> isFreeze()) {
LSsession :: addJSconfigParam(
$this -> name,
array(
'searchBtn' => _('Modify'),
'noValueLabel' => _('No set value'),
'noResultLabel' => _('No result'),
'components' => $this->components
)
);
LSsession :: addJSscript('LSformElement_supannCompositeAttribute_field_value_component.js');
LSsession :: addJSscript('LSformElement_supannCompositeAttribute_field_value.js');
LSsession :: addJSscript('LSformElement_supannCompositeAttribute_field.js');
LSsession :: addJSscript('LSformElement_supannCompositeAttribute.js');
}
return $return;
}
/**
* Retourne le code HTML d'un champ vide
*
* @retval string Code HTML d'un champ vide.
*/
function getEmptyField() {
return $this -> fetchTemplate($this -> fieldTemplate,array('components' => $this -> components));
}
/**
* Traduit la valeur d'un composant
*
* Retourne un array contenant :
* - label : l'étiquette de la valeur ou 'no' sinon
* - value : la valeur brute
* - translated : la valeur traduite ou la valeur elle même
*
* @param[in] $c string Le nom du composant
* @param[in] $val string La valeur
*
* @retval array
**/
function translateComponentValue($c,$val) {
$retval = array (
'translated' => $val,
'label' => 'no',
'value' => $val,
);
if (isset($this -> components[$c])) {
if ($this -> components[$c]['type']=='table') {
$pv=supannParseLabeledValue($val);
if ($pv) {
$retval['label'] = $pv['label'];
$retval['translated'] = supannGetNomenclatureLabel($this -> components[$c]['table'],$pv['label'],$pv['value']);
}
}
elseif ($this -> components[$c]['type']=='codeEntite') {
$retval['translated']=supanGetEntiteNameById($val);
}
//elseif type == 'text' => aucune transformation
}
return $retval;
}
/**
* Recupère la valeur de l'élement passée en POST
*
* Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère
* pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément
*
* @param[] array Pointeur sur le tableau qui recupèrera la valeur.
*
* @retval boolean true si la valeur est présente en POST, false sinon
*/
function getPostData(&$return) {
if($this -> isFreeze()) {
return true;
}
$count=0;
$end=false;
$parseValues=array();
$return[$this -> name]=array();
while ($end==false) {
$value="";
$parseValue=array();
$errors=array();
$unemptyComponents=array();
foreach ($this -> components as $c => $cconf) {
if (isset($_POST[$this -> name.'__'.$c][$count])) {
$parseValue[$c]=$_POST[$this -> name.'__'.$c][$count];
if ($cconf['required'] && empty($parseValue[$c])) {
$errors[]=getFData(__('Component %{c} must be defined'),__($cconf['label']));
continue;
}
if (empty($parseValue[$c])) {
continue;
}
$unemptyComponents[]=$c;
if ($cconf['type']=='table') {
$pv=supannParseLabeledValue($parseValue[$c]);
if ($pv) {
if (!supannValidateNomenclatureValue($cconf['table'],$pv['label'],$pv['value'])) {
$errors[]=getFData(__('Invalid value for component %{c}.'),__($cconf['label']));
}
}
else {
$errors[]=getFData(__('Unparsable value for component %{c}.'),__($cconf['label']));
}
}
elseif ($cconf['type']=='codeEntite') {
if (!supannValidateEntityId($parseValue[$c])) {
$errors[]=getFData(__('Invalid value for component %{c}.'),__($cconf['label']));
}
}
if (is_array($cconf['check_data'])) {
foreach($cconf['check_data'] as $ruleType => $rconf) {
$className='LSformRule_'.$ruleType;
if (LSsession::loadLSclass($className)) {
$r=new $className();
if (!$r -> validate($parseValue[$c],$rconf,$this)) {
if (isset($rconf['msg'])) {
$errors[]=getFData(__($rconf['msg']),__($cconf['label']));
}
else {
$errors[]=getFData(__('Invalid value for component %{c}.'),__($cconf['label']));
}
}
}
else {
$errors[]=getFData(__("Can't validate value of component %{c}."),__($cconf['label']));
}
}
}
$value.="[".$c."=".$parseValue[$c].']';
}
else {
// end of value break
$end=true;
break;
}
}
if (!$end) {
if (!empty($unemptyComponents)) {
foreach($errors as $e) {
$this -> form -> setElementError($this -> attr_html,$e);
}
$return[$this -> name][]=$value;
$parseValues[]=$parseValue;
}
$count++;
}
}
$this -> _postParsedData=$parseValues;
return true;
}
/**
* This ajax method is used by the searchComponentPossibleValues function of the form element.
*
* @param[in] $data The address to the array of data witch will be return by the ajax request
*
* @retval void
**/
public static function ajax_searchComponentPossibleValues(&$data) {
if ((isset($_REQUEST['attribute'])) && (isset($_REQUEST['objecttype'])) && (isset($_REQUEST['component'])) && (isset($_REQUEST['pattern'])) && (isset($_REQUEST['idform'])) ) {
if (LSsession ::loadLSobject($_REQUEST['objecttype'])) {
$object = new $_REQUEST['objecttype']();
$form = $object -> getForm($_REQUEST['idform']);
$field=$form -> getElement($_REQUEST['attribute']);
if (isset($field->components[$_REQUEST['component']])) {
$data['possibleValues'] = $field -> searchComponentPossibleValues($_REQUEST['component'],$_REQUEST['pattern']);
}
}
}
}
private function searchComponentPossibleValues($c,$pattern) {
$pattern=strtolower($pattern);
$retval=array();
if (isset($this -> components[$c])) {
if ($this -> components[$c]['type'] == 'table') {
$table=supannGetNomenclatureTable($this -> components[$c]['table']);
foreach($table as $label => $values) {
foreach($values as $v => $txt) {
if (strpos(strtolower($txt),$pattern)!==false) {
$retval[]=array(
'label' => $label,
'value' => "{".$label."}".$v,
'translated' => $txt
);
}
}
}
}
elseif ($this -> components[$c]['type'] == 'codeEntite') {
foreach (supannSearchEntityByPattern($pattern) as $code => $displayName) {
$retval[]=array(
'label' => 'no',
'value' => $code,
'translated' => $displayName
);
}
}
}
return $retval;
}
}
?>

View file

@ -34,17 +34,7 @@ LSsession :: loadLSaddon('supann');
class LSformElement_supannEtablissement extends LSformElement_supannLabeledValue { class LSformElement_supannEtablissement extends LSformElement_supannLabeledValue {
/** var $supannNomenclatureTable = 'codeEtablissement';
* Traduit une valeur
*
* @param[in] $value La valeur
*
* @retval array Un tableau cle->valeur contenant translated et label ou False
**/
function translate($value) {
return supannTranslateEtablissement($value);
}
} }

View file

@ -37,6 +37,8 @@ class LSformElement_supannLabeledValue extends LSformElement {
var $template = 'LSformElement_supannLabeledValue.tpl'; var $template = 'LSformElement_supannLabeledValue.tpl';
var $fieldTemplate = 'LSformElement_supannLabeledValue_field.tpl'; var $fieldTemplate = 'LSformElement_supannLabeledValue_field.tpl';
var $supannNomenclatureTable = null;
/** /**
* Retourne les infos d'affichage de l'élément * Retourne les infos d'affichage de l'élément
* *
@ -49,31 +51,33 @@ class LSformElement_supannLabeledValue extends LSformElement {
$parseValues=array(); $parseValues=array();
foreach($this -> values as $val) { foreach($this -> values as $val) {
$parseValue=array( $parseValues[]=$this -> parseValue($val);
'value' => $val
);
$tr=$this -> translate($val);
if ($tr) {
if($tr['translated'])
$parseValue['translated']=$tr['translated'];
if($tr['label'])
$parseValue['label']=$tr['label'];
}
$parseValues[]=$parseValue;
} }
$return['html'] = $this -> fetchTemplate(NULL,array('parseValues' => $parseValues)); $return['html'] = $this -> fetchTemplate(NULL,array('parseValues' => $parseValues));
return $return; return $return;
} }
/** /**
* Traduit une valeur * Parse une valeur
* *
* @param[in] $value La valeur * @param[in] $value La valeur
* *
* @retval array Un tableau cle->valeur contenant translated et label ou False * @retval array Un tableau cle->valeur contenant value, translated et label
**/ **/
function translate($value) { function parseValue($value) {
return supannTranslateLabeledValue($value); $retval=array(
'value' => $value,
);
$pv=supannParseLabeledValue($value);
if ($pv) {
$retval['label'] = $pv['label'];
$retval['translated'] = supannGetNomenclatureLabel($this -> supannNomenclatureTable,$pv['label'],$pv['value']);
}
else {
$retval['label'] = 'no';
$retval['translated'] = getFData(__('%s (Unparsable value)'),$value);
}
return $retval;
} }
} }

View file

@ -20,7 +20,7 @@
******************************************************************************/ ******************************************************************************/
LSsession :: loadLSclass('LSformElement'); LSsession :: loadLSclass('LSformElement_supannCompositeAttribute');
LSsession :: loadLSaddon('supann'); LSsession :: loadLSaddon('supann');
/** /**
@ -32,46 +32,29 @@ LSsession :: loadLSaddon('supann');
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
*/ */
class LSformElement_supannRoleEntite extends LSformElement { class LSformElement_supannRoleEntite extends LSformElement_supannCompositeAttribute {
var $template = 'LSformElement_supannRoleEntite.tpl'; function LSformElement_supannRoleEntite (&$form, $name, $label, $params,&$attr_html){
var $fieldTemplate = 'LSformElement_supannRoleEntite_field.tpl'; $this -> components = array (
'role' => array (
/** 'label' => _('Role'),
* Retourne les infos d'affichage de l'élément 'type' => 'table',
* 'table' => 'roleGenerique',
* Cette méthode retourne les informations d'affichage de l'élement 'required' => true,
* ),
* @retval array 'type' => array (
*/ 'label' => _('Entity type'),
function getDisplay(){ 'type' => 'table',
$return = $this -> getLabelInfos(); 'table' => 'typeEntite',
'required' => true,
$parseValues=array(); ),
foreach($this -> values as $val) { 'code' => array (
$keyValue=supannParseCompositeValue($val); 'label' => _('Entity'),
if ($keyValue) { 'type' => 'codeEntite',
$parseValue=array('value' => $val); 'required' => false
foreach($keyValue as $key => $value) { )
$parseValue[$key]=array(
'value' => $value
); );
$tr=supannTranslateRoleEntiteValue($key,$value); return parent::LSformElement ($form, $name, $label, $params,$attr_html);
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;
} }
} }
?>

View file

@ -34,17 +34,7 @@ LSsession :: loadLSaddon('supann');
class LSformElement_supannRoleGenerique extends LSformElement_supannLabeledValue { class LSformElement_supannRoleGenerique extends LSformElement_supannLabeledValue {
/** var $supannNomenclatureTable = 'roleGenerique';
* Traduit une valeur
*
* @param[in] $value La valeur
*
* @retval array Un tableau cle->valeur contenant translated et label ou False
**/
function translate($value) {
return supannTranslateRoleEntiteValue('role',$value);
}
} }

View file

@ -34,17 +34,7 @@ LSsession :: loadLSaddon('supann');
class LSformElement_supannTypeEntite extends LSformElement_supannLabeledValue { class LSformElement_supannTypeEntite extends LSformElement_supannLabeledValue {
/** var $supannNomenclatureTable = 'typeEntite';
* Traduit une valeur
*
* @param[in] $value La valeur
*
* @retval array Un tableau cle->valeur contenant translated et label ou False
**/
function translate($value) {
return supannTranslateRoleEntiteValue('type',$value);
}
} }

View file

@ -0,0 +1,18 @@
var LSformElement_supannCompositeAttribute = new Class({
initialize: function(){
this.fields = [];
this.initialiseLSformElement_supannCompositeAttribute();
},
initialiseLSformElement_supannCompositeAttribute: function(el) {
if (!$type(el)) {
el = document;
}
el.getElements('ul.LSformElement_supannCompositeAttribute').each(function(ul) {
this.fields[ul.id] = new LSformElement_supannCompositeAttribute_field(ul);
}, this);
}
});
window.addEvent(window.ie ? 'load' : 'domready', function() {
varLSformElement_supannCompositeAttribute = new LSformElement_supannCompositeAttribute();
});

View file

@ -0,0 +1,34 @@
var LSformElement_supannCompositeAttribute_field = new Class({
initialize: function(ul){
this.ul=ul;
this.dd=ul.getParent();
this.name = ul.id;
this.values = [];
this.field_type = ul.get('data-fieldType');
this.initializeLSformElement_supannCompositeAttribute_field();
varLSform.addField(this.name,this);
},
initializeLSformElement_supannCompositeAttribute_field: function(el) {
if (!$type(el)) {
el = this.ul;
}
el.getElements('li').each(function(li) {
this.values.push(new LSformElement_supannCompositeAttribute_field_value(li,this.name,this.field_type));
}, this);
},
clearValue: function() {
console.log('clear');
console.log(this.values);
if (this.values.length>1) {
for(var i=1; i<=this.values.length; i++) {
$(this.values[i].li).dispose();
}
this.values[0].clear();
}
else if (this.values.length==1) {
this.values[0].clear();
}
}
});

View file

@ -0,0 +1,29 @@
var LSformElement_supannCompositeAttribute_field_value = new Class({
initialize: function(li,name,field_type){
this.li=li;
this.name = name;
this.components = {};
this.field_type = field_type;
this.initializeLSformElement_supannCompositeAttribute_field_value();
varLSform.addModule(field_type,this);
},
initializeLSformElement_supannCompositeAttribute_field_value: function(el) {
if (!$type(el)) {
el = this.li;
}
el.getElements('p').each(function(p) {
this.components[p.get('data-component')]=new LSformElement_supannCompositeAttribute_field_value_component(p,p.get('data-component'),this.name);
}, this);
},
reinitialize: function(el) {
this.initializeLSformElement_supannCompositeAttribute_field_value(el);
},
clear: function() {
for (c in this.components) {
this.components[c].clear();
}
}
});

View file

@ -0,0 +1,174 @@
var LSformElement_supannCompositeAttribute_field_value_component = new Class({
initialize: function(p,name,field_name){
this.p = p;
this.field_name = field_name;
this.name = name;
this.params = varLSdefault.LSjsConfig[this.field_name];
this.input = p.getElement('input');
this.img = p.getElement('img');
this.span = p.getElement('span');
if (this.params.components[this.name].type=="table" || this.params.components[this.name].type=="codeEntite") {
this.inputSearch=new Element(
'input',
{
'class': 'LSformElement_supannCompositeAttribute_search',
'styles': {
'display': 'none'
}
}
);
this.inputSearch.addEvent('keydown',this.onKeyUpInputSearch.bindWithEvent(this));
this.inputSearch.injectInside(this.p);
this.searchBtn=new Element(
'img',
{
'src': varLSdefault.imagePath('modify'),
'alt': this.params.searchBtn,
'title': this.params.searchBtn,
}
);
this.searchBtn.addEvent('click',this.toogleInputSearch.bind(this));
this.searchBtn.injectBefore(this.inputSearch);
this._lastSearch=null;
this._possibleValues=null;
}
},
toogleInputSearch: function() {
if (this.inputSearch.getStyle('display')=='none') {
this.inputSearch.setStyle('display','block');
this.inputSearch.focus();
}
else {
this.hidePossibleValues();
this.inputSearch.setStyle('display','none');
this.inputSearch.set('value','');
}
},
onKeyUpInputSearch: function(event) {
event = new Event(event);
if ((event.key=='enter')||(event.key=='tab')) {
event.stop();
if (this.inputSearch.value!="") {
this.launchSearch();
}
}
if (event.key=='esc') {
this.toogleInputSearch();
}
},
launchSearch: function() {
this.hidePossibleValues();
this._lastSearch=this.inputSearch.value;
var data = {
template: 'LSformElement_supannCompositeAttribute',
action: 'searchComponentPossibleValues',
attribute: this.field_name,
objecttype: varLSform.objecttype,
idform: varLSform.idform,
component: this.name,
pattern: this.inputSearch.value
};
data.imgload=varLSdefault.loadingImgDisplay(this.inputSearch);
new Request({url: 'index_ajax.php', data: data, onSuccess: this.onSearchComplete.bind(this)}).send();
},
onSearchComplete: function(responseText, responseXML) {
var data = JSON.decode(responseText);
if ( varLSdefault.checkAjaxReturn(data) ) {
this.displayPossibleValues(data.possibleValues);
}
},
displayPossibleValues: function(possibleValues) {
if (this._possibleValues==null) {
this._possibleValues=new Element(
'div',
{
'class': 'supannCompositeAttribute_possibleValues',
}
);
this._possibleValues.injectInside(this.p);
}
var ul=new Element('ul');
possibleValues.each(function(v) {
var li=new Element(
'li',
{
'data-value': v.value,
'data-label': v.label,
'data-translated': v.translated,
}
);
if (v.label!='no') {
li.set('html',"<img src='"+varLSdefault.imagePath('supann_label_'+v.label)+"' alt='["+v.label+"]'/> "+v.translated);
}
else {
li.set('html',v.translated);
}
li.injectInside(this);
}, ul);
if (ul.getElements('li').length==0) {
new Element(
'li',
{
'html': this.params.noResultLabel
}
).injectInside(ul);
}
else {
ul.getElements('li').each(function(li) {
li.addEvent('click',this.onClickPossibleValue.bindWithEvent(this));
}, this);
}
ul.injectInside(this._possibleValues);
this._possibleValues.setStyle('display', 'block');
},
hidePossibleValues: function() {
if (this._possibleValues!=null) {
this._possibleValues.setStyle('display', 'none');
this._possibleValues.empty();
}
},
onClickPossibleValue: function(event) {
this.hidePossibleValues();
event = new Event(event);
var li=$(event.target);
if (event.target.tagName=='IMG') {
li=li.getParent();
}
this.input.set('value',li.get('data-value'));
if (li.get('data-label')!='no') {
if (this.img==null) {
this.img=new Element('img');
this.img.injectBefore(this.span);
}
this.img.set('src',varLSdefault.imagePath('supann_label_'+li.get('data-label')));
}
this.span.set('html',li.get('data-translated'));
this.toogleInputSearch();
},
clear: function() {
if (this.img) {
this.img.dispose();
this.img=null;
}
this.input.set('value','');
if (this.span) {
this.span.set('html',this.params.noValueLabel);
}
}
});

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,7 @@
<ul class='LSform {if $multiple && !$freeze} LSformElement_multiple{/if} LSformElement_supannCompositeAttribute' id='{$attr_name}' data-fieldType="{$fieldType}">
{foreach from=$parseValues item=parseValue}
<li>{include file="ls:$fieldTemplate"}</li>
{foreachelse}
<li {if $freeze}class='noValue'{/if}>{include file="ls:$fieldTemplate"}</li>
{/foreach}
</ul>

View file

@ -0,0 +1,37 @@
{if $freeze}
{if isset($parseValue)}
{foreach $components as $c => $cconf}
{if !isset($parseValue[$c])}{continue}{/if}
<p>
<label>{tr msg=$cconf.label} : </label>
{if !empty($parseValue[$c].label) and $parseValue[$c].label!='no'}
{assign var=clabel value=$parseValue[$c].label}
<img src='{img name="supann_label_$clabel"}' alt='[{$clabel}]' title='{$clabel}'/>
{/if}
<span title="{$parseValue[$c].value}">{$parseValue[$c].translated}</span>
</p>
{/foreach}
{else}
{$noValueTxt}
{/if}
{else}
{foreach $components as $c => $cconf}
<p data-component="{$c}">
<label>{tr msg=$cconf.label}{if $cconf.required}*{/if} :</label>
{if $cconf.type=='table' or $cconf.type=='codeEntite'}
<input type='hidden' name='{$attr_name}__{$c}[]' value="{if $parseValue and $parseValue[$c]}{$parseValue[$c].value}{/if}"/>
{if $parseValue and !empty($parseValue[$c].label) and $parseValue[$c].label!='no'}
{assign var=clabel value=$parseValue[$c].label}
<img src='{img name="supann_label_$clabel"}' alt='[{$clabel}]' title='{$clabel}'/>
{/if}
{if $parseValue}
<span title="{$parseValue[$c].value}">{$parseValue[$c].translated}</span>
{else}
<span>{$noValueTxt}</span>
{/if}
{else}
<input type='text' name='{$attr_name}__{$c}[]' value="{if $parseValue and $parseValue[$c]}{$parseValue[$c].value}{/if}"/>
{/if}
</p>
{/foreach}
{/if}

View file

@ -1,7 +1,7 @@
{if $freeze} {if $freeze}
{if $value or $parseValue} {if $value or $parseValue}
{if $parseValue} {if $parseValue}
<span class='LSformElement_supannLabeledValue'>{if $label}<img src='{img name="LSformElement_supannLabeledValue_label_$label"}' alt='[{$label}]' title='{$label}' /> {/if}<span title='{$parseValue.value}'>{$value}</span></span> <span class='LSformElement_supannLabeledValue'>{if $label}<img src='{img name="supann_label_$label"}' alt='[{$label}]' title='{$label}' /> {/if}<span title='{$parseValue.value}'>{$value}</span></span>
{else} {else}
<span class='LSformElement_supannLabeledValue_unparsed'>{$value}</span> <span class='LSformElement_supannLabeledValue_unparsed'>{$value}</span>
{/if} {/if}

View file

@ -1,25 +0,0 @@
<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="ls:$fieldTemplate"}</li>
{foreachelse}
{assign var=value value=""}
{assign var=parseValue value=""}
<li>{include file="ls:$fieldTemplate"}</li>
{/foreach}
{else}
{foreach from=$values item=value}
<li>{include file="ls:$fieldTemplate"}</li>
{foreachelse}
{assign var=value value=""}
{assign var=parseValue value=""}
<li>{include file="ls:$fieldTemplate"}</li>
{/foreach}
{/if}
</ul>

View file

@ -1,17 +0,0 @@
{if $freeze}
{if $value or $parseValue}
{if $parseValue}
<span class='LSformElement_supannRoleEntite'>{if $label_role}<img src='{img name="LSformElement_supannRoleEntite_label_$label_role"}' alt='[{$label_role}]' title='{$label_role}' /> {/if}<span title='{$parseValue.role.value}'>{$role}</span> : {if $label_code}<img src='{img name="LSformElement_supannRoleEntite_label_$label_code"}' alt='[{$label_code}]' title='{$label_code}' /> {/if}<span title='{$parseValue.code.value}'>{$code}</span> ({if $label_type}<img src='{img name="LSformElement_supannRoleEntite_label_$label_type"}' 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}
{if $parseValue}
<input type='text' name='{$attr_name}[]' class='LSformElement_text' value="{$parseValue.value}" autocomplete="off"/>
{else}
<input type='text' name='{$attr_name}[]' class='LSformElement_text' value="{$value}" autocomplete="off"/>
{/if}
{/if}