* * @retval boolean true si SUPANN est pleinement supporté, false sinon */ function LSaddon_supann_support() { $retval = true; $MUST_DEFINE_CONST= array( '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' ); foreach($MUST_DEFINE_CONST as $const) { if ( (!defined($const)) || (constant($const) == "")) { LSerror :: addErrorCode('SUPANN_SUPPORT_01',$const); $retval=false; } } $MUST_DEFINE_ARRAY= array( 'supannRoleGenerique', 'supannTypeEntite', 'supannTranslateRoleEntiteValueDirectory', 'supannTranslateFunctionDirectory', 'tableCodeUAI', 'supannTranslateEtablissementDirectory', ); 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); } } return $retval; } /** * Generation du displayName * * @author Benjamin Renard * * @param[in] $ldapObject L'objet ldap * * @retval string Le displayName ou false si il y a un problème durant la génération */ function generate_displayName($ldapObject) { if ( get_class($ldapObject -> attrs[ LS_SUPANN_LASTNAME_ATTR ]) != 'LSattribute' ) { LSerror :: addErrorCode('SUPANN_01',array('dependency' => LS_SUPANN_LASTNAME_ATTR, 'attr' => 'cn')); return; } if ( get_class($ldapObject -> attrs[ LS_SUPANN_FIRSTNAME_ATTR ]) != 'LSattribute' ) { LSerror :: addErrorCode('SUPANN_01',array('dependency' => LS_SUPANN_FIRSTNAME_ATTR, 'attr' => 'cn')); return; } $noms = $ldapObject -> attrs[ LS_SUPANN_LASTNAME_ATTR ] -> getValue(); $prenoms = $ldapObject -> attrs[ LS_SUPANN_FIRSTNAME_ATTR ] -> getValue(); return ($prenoms[0].' '.$noms[0]); } /** * Generation du CN * * @author Benjamin Renard * * @param[in] $ldapObject L'objet ldap * * @retval string Le CN ou false si il y a un problème durant la génération */ function generate_cn($ldapObject) { if ( get_class($ldapObject -> attrs[ LS_SUPANN_LASTNAME_ATTR ]) != 'LSattribute' ) { LSerror :: addErrorCode('SUPANN_01',array('dependency' => LS_SUPANN_LASTNAME_ATTR, 'attr' => 'cn')); return; } if ( get_class($ldapObject -> attrs[ LS_SUPANN_FIRSTNAME_ATTR ]) != 'LSattribute' ) { LSerror :: addErrorCode('SUPANN_01',array('dependency' => LS_SUPANN_FIRSTNAME_ATTR, 'attr' => 'cn')); return; } $noms = $ldapObject -> attrs[ LS_SUPANN_LASTNAME_ATTR ] -> getValue(); $prenoms = $ldapObject -> attrs[ LS_SUPANN_FIRSTNAME_ATTR ] -> getValue(); return (withoutAccents($noms[0]).' '.withoutAccents($prenoms[0])); } /** * Generation des valeurs de l'attribut eduPersonOrgUnitDN à partir des * valeurs de l'attribut supannEntiteAffectation. * * @author Benjamin Renard * * @param[in] $ldapObject L'objet ldap * * @retval array Les valeurs de l'attribut eduPersonOrgUnitDN ou false * si il y a un problème durant la génération */ function generate_eduPersonOrgUnitDN($ldapObject) { if ( get_class($ldapObject -> attrs[ 'supannEntiteAffectation' ]) != 'LSattribute' ) { LSerror :: addErrorCode('SUPANN_01',array('dependency' => 'supannEntiteAffectation', 'attr' => 'eduPersonOrgUnitDN')); return; } $affectations = $ldapObject -> attrs[ 'supannEntiteAffectation' ] -> getUpdateData(); $basedn=LSconfig :: get('LSobjects.'.LS_SUPANN_LSOBJECT_ENTITE_TYPE.'.container_dn').','.LSsession::getTopDn(); if ($basedn=="") { LSerror :: addErrorCode('SUPANN_02','eduPersonOrgUnitDN'); return; } $retval=array(); foreach ($affectations as $aff) { $retval[]="supannCodeEntite=".$aff.",$basedn"; } return $retval; } /** * Generation de la valeur de l'attribut eduPersonPrimaryOrgUnitDN * à partir de la valeur de l'attribut supannEntiteAffectationPrincipale. * * @author Benjamin Renard * * @param[in] $ldapObject L'objet ldap * * @retval array La valeur de l'attribut eduPersonPrimaryOrgUnitDN * ou false si il y a un problème durant la génération */ function generate_eduPersonPrimaryOrgUnitDN($ldapObject) { if ( get_class($ldapObject -> attrs[ 'supannEntiteAffectationPrincipale' ]) != 'LSattribute' ) { LSerror :: addErrorCode('SUPANN_01',array('dependency' => 'supannEntiteAffectationPrincipale', 'attr' => 'eduPersonPrimaryOrgUnitDN')); return; } $affectations = $ldapObject -> attrs[ 'supannEntiteAffectationPrincipale' ] -> getUpdateData(); $basedn=LSconfig :: get('LSobjects.'.LS_SUPANN_LSOBJECT_ENTITE_TYPE.'.container_dn').','.LSsession::getTopDn(); if ($basedn=="") { LSerror :: addErrorCode('SUPANN_02','eduPersonPrimaryOrgUnitDN'); return; } $retval=array(); foreach ($affectations as $aff) { $retval[]="supannCodeEntite=".$aff.",$basedn"; } return $retval; } /** * Generation de la valeur de l'attribut eduPersonOrgDN * à partir de la valeur de l'attribut supannEtablissement. * * La valeur sera LS_SUPANN_ETABLISSEMENT_DN si l'attribut supannEtablissement * vaut {UAI}LS_SUPANN_ETABLISSEMENT_UAI. * * @author Benjamin Renard * * @param[in] $ldapObject L'objet ldap * * @retval array La valeur de l'attribut eduPersonOrgDN ou false * si il y a un problème durant la génération */ function generate_eduPersonOrgDN($ldapObject) { if ( get_class($ldapObject -> attrs[ 'supannEtablissement' ]) != 'LSattribute' ) { LSerror :: addErrorCode('SUPANN_01',array('dependency' => 'supannEtablissement', 'attr' => 'eduPersonOrgDN')); return; } $eta = $ldapObject -> attrs[ 'supannEtablissement' ] -> getUpdateData(); $retval=array(); if ($eta[0] == '{UAI}'.LS_SUPANN_ETABLISSEMENT_UAI) { $retval[] = LS_SUPANN_ETABLISSEMENT_DN; } return $retval; } /** * Parse une valeur composite SUPANN * * Exemple de valeur : * * [key1=value][key2=value][key3=value] * * @author Benjamin Renard * * @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 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; } /** * Simple découpage label/valeur sans traduction réel * * @param[in] $key La cle * @param[in] $value La valeur * * @retval array Un tableau cle->valeur contenant label et translated **/ function supannTranslateLabeledValue($value) { $label='no'; $pl=supannParseLabeledValue($value); if ($pl) { $label=$pl['label']; $value=$pl['value']; } return array( 'label' => $label, 'translated' => $value ); } /** * 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 ); } } /** * Traduit une valeur en fonction de sa cle extrait d'un attribut * supannEtablissement * * @param[in] $key La cle * @param[in] $value La valeur * * @retval array Un tableau cle->valeur contenant label et translated **/ function supannTranslateEtablissement($value) { $label='no'; $pl=supannParseLabeledValue($value); if ($pl) { $label=$pl['label']; $value=$pl['value']; } if (isset($GLOBALS['supannTranslateEtablissementDirectory'][$label][$value])) { return array( 'translated' => $GLOBALS['supannTranslateEtablissementDirectory'][$label][$value], 'label' => $label ); } else { return array( 'label' => $label, 'translated' => $value ); } } ?>