loadLSclass('LSattr_ldap'); $GLOBALS['LSsession'] -> loadLSclass('LSattr_html'); /** * Attribut Ldap * * Cette classe modélise un attribut Ldap * * @author Benjamin Renard */ class LSattribute { var $name; var $config; var $ldapObject; var $ldap; var $html; var $data; var $updateData=false; var $is_validate=false; var $_finalUpdateData=false; var $_myRights=NULL; var $_events=array(); var $_objectEvents=array(); /** * Constructeur * * Cette methode construit l'objet et définis la configuration. * Elle lance la construction des objets LSattr_html et LSattr_ldap correspondant * à ses types définis définis dans sa configuration * * @author Benjamin Renard * * @param[in] $name string Nom de l'attribut ldap * @param[in] $config array Configuration de l'objet * @param[in] &$ldapObject LSldapObject L'objet ldap parent * * @retval boolean Retourne true si la création a réussi, false sinon. */ function LSattribute ($name,$config,&$ldapObject) { $this -> name = $name; $this -> config = $config; $this -> ldapObject = $ldapObject; $html_type = "LSattr_html_".$config['html_type']; $ldap_type = "LSattr_ldap_".$config['ldap_type']; $GLOBALS['LSsession'] -> loadLSclass($html_type); $GLOBALS['LSsession'] -> loadLSclass($ldap_type); if((class_exists($html_type))&&(class_exists($ldap_type))) { $this -> html = new $html_type($name,$config,$this); $this -> ldap = new $ldap_type($name,$config,$this); } else { $GLOBALS['LSerror'] -> addErrorCode(41,array('attr' => $name,'html'=>$config['html_type'],'ldap'=>$config['ldap_type'])); return; } return true; } /** * Retourne la valeur du label de l'attribut * * @author Benjamin Renard * * @retval string Le label de l'attribut * * @see LSattr_html::getLabel() */ function getLabel() { return $this -> html -> getLabel(); } /** * Défini la valeur de l'attribut * * @author Benjamin Renard * * @retval boolean true */ function loadData($attr_data) { if ((!is_array($attr_data))&&(!empty($attr_data))) { $attr_data = array($attr_data); } $this -> data = $attr_data; return true; } /** * Redéfini la valeur de l'attribut * * @author Benjamin Renard * * @retval boolean true */ function reloadData($attr_data) { if ((!is_array($attr_data))&&(!empty($attr_data))) { $attr_data = array($attr_data); } $this -> data = $attr_data; $this -> updateData=false; $this -> is_validate=false; return true; } /** * Retourne la valeur de l'attribut * * Retourne la valeur nouvelle si elle existe, sinon la valeur passé. * * @author Benjamin Renard * * @retval mixed La valeur de l'attribut */ function getValue() { $updateData=$this -> getUpdateData(); if (empty($updateData)) { return $this -> data; } else { return $updateData; } } /** * Retourne la valeur d'affichage de l'attribut * * @author Benjamin Renard * * @retval string La valeur d'affichage de l'attribut */ function getDisplayValue() { $data = $this -> ldap -> getDisplayValue($this -> data); if ($this -> config['onDisplay']) { if (is_array($this -> config['onDisplay'])) { $result=$data; foreach($this -> config['onDisplay'] as $func) { if (function_exists($func)) { $result=$func($result); } else { $GLOBALS['LSerror'] -> addErrorCode(42,array('attr' => $this->name,'func' => $func)); return; } } return $result; } else { if (function_exists($this -> config['onDisplay'])) { return $this -> config['onDisplay']($data); } else { $GLOBALS['LSerror'] -> addErrorCode(42,array('attr' => $this->name,'func' => $this -> config['onDisplay'])); return; } } } return $data; } /** * Ajoute l'attribut au formualaire * * Cette méthode ajoute l'attribut au formulaire $form si l'identifiant de celui-ci * ($idForm) est connu dans la configuration de l'objet. * * @author Benjamin Renard * * @param[in] object $form Le formulaire dans lequel doit être ajouté l'attribut * @param[in] string $idForm L'identifiant du formulaire * @param[in] objet &$obj Objet utilisable pour la génération de la valeur de l'attribut * @param[in] array $value valeur de l'élement * * @retval boolean true si l'ajout a fonctionner ou qu'il n'est pas nécessaire, false sinon */ function addToForm(&$form,$idForm,&$obj=NULL,$value=NULL) { if(isset($this -> config['form'][$idForm])) { if($this -> myRights() == 'n') { return true; } if ($value) { $data = $value; } else if($this -> data !='') { $data=$this -> getFormVal(); } else if (isset($this -> config['default_value'])) { $data=$obj -> getFData($this -> config['default_value']); } $element = $this -> html -> addToForm($form,$idForm,$data); if(!$element) { $GLOBALS['LSerror'] -> addErrorCode(206,$this -> name); } if($this -> config['required']==1) { $form -> setRequired($this -> name); } if (($this -> config['form'][$idForm]==0) || ($this -> myRights() == 'r')) { $element -> freeze(); } else { if(isset($this -> config['check_data'])) { if(is_array($this -> config['check_data'])) { foreach ($this -> config['check_data'] as $rule => $rule_infos) { if((!$form -> isRuleRegistered($rule))&&($rule!='')) { $GLOBALS['LSerror'] -> addErrorCode(43,array('attr' => $this->name,'rule' => $rule)); return; } if(!isset($rule_infos['msg'])) $rule_infos['msg']=getFData(_('La valeur du champs %{label} est invalide.'),$this -> config['label']); if(!isset($rule_infos['params'])) $rule_infos['params']=NULL; $form -> addRule($this -> name,$rule,array('msg' => $rule_infos['msg'], 'params' => $rule_infos['params'])); } } else { $GLOBALS['LSerror'] -> addErrorCode(44,$this->name); } } } } return true; } /** * Récupération des droits de l'utilisateur sur l'attribut * * @retval string 'r'/'w'/'n' pour 'read'/'write'/'none' **/ function myRights() { // cache if ($this -> _myRights != NULL) { return $this -> _myRights; } $return='n'; $whoami = $this -> ldapObject -> whoami(); foreach($whoami as $who) { switch ($who) { case 'admin': if($this -> config['rights']['admin']=='w') { $return='w'; break; } else { $return='r'; } break; default: if ($this -> config['rights'][$who] == 'w') { $return='w'; break; } else if($this -> config['rights'][$who] == 'r') { $return='r'; } break; } if ($return=='w') { break; } } $this -> _myRights = $return; return $return; } /** * Ajoute l'attribut au formualaire de vue * * Cette méthode ajoute l'attribut au formulaire $form de vue si il doit l'être * * @author Benjamin Renard * * @param[in] object $form Le formulaire dans lequel doit être ajouté l'attribut * * @retval boolean true si l'ajout a fonctionner ou qu'il n'est pas nécessaire, false sinon */ function addToView(&$form) { if((isset($this -> config['view'])) && ($this -> myRights() != 'n')) { if($this -> data !='') { $data=$this -> getFormVal(); } else { $data=''; } $element = $this -> html -> addToForm($form,'view',$data); if(!$element instanceof LSformElement) { $GLOBALS['LSerror'] -> addErrorCode(206,$this -> name); return; } $element -> freeze(); return true; } return true; } /** * Rafraichis la valeur de l'attribut dans un formualaire * * @author Benjamin Renard * * @param[in] object &$form LSform Le formulaire dans lequel doit être ajouté l'attribut * @param[in] string $idForm L'identifiant du formulaire * * @retval boolean true si la valeur a été rafraichie ou que ce n'est pas nécessaire, false sinon */ function refreshForm(&$form,$idForm) { if(isset($this -> config['form'][$idForm])&&($this -> myRights()!='n')) { $form_element = $form -> getElement($this -> name); if ($form_element) { $values = $this -> html -> refreshForm($this -> getFormVal()); return $form_element -> setValue($values); } else { LSdebug('LSformElement "'.$this -> name.'" n\'existe pas'); } } return true; } /** * Retourne la valeur a afficher dans le formulaire * * @author Benjamin Renard * * @retval string La valeur a afficher dans le formulaire. */ function getFormVal() { $data=$this -> getDisplayValue(); if ($data==NULL) { $data=array(); } if(!is_array($data)) { $data=array($data); } return $data; } /** * Définis les données de mises à jour si un changement a eut lieu * * @author Benjamin Renard * * @param[in] string $data Les données de mise à jour. * * @retval void */ function setUpdateData($data) { if($this -> getFormVal() != $data) { $this -> updateData=$data; } } /** * Vérifie si l'attribut a été validé * * @author Benjamin Renard * * @retval boolean true si l'attribut a été validé, false sinon */ function isValidate() { return $this -> is_validate; } /** * Valide le champs * * @author Benjamin Renard * * @retval void */ function validate() { $this -> is_validate=true; } /** * Vérifie si l'attribut a été mise à jour * * @author Benjamin Renard * * @retval boolean true si l'attribut a été mis à jour, false sinon */ function isUpdate() { return ($this -> updateData===false)?false:true; } /** * Vérifie si l'attribut est obligatoire * * @author Benjamin Renard * * @retval boolean true si l'attribut est obligatoire, false sinon */ function isRequired() { return $this -> config['required']; } /** * Vérifie si la valeur de l'attribut peut être générée * * @author Benjamin Renard * * @retval boolean true si la valeur de l'attribut peut être générée, false sinon */ function canBeGenerated() { if (function_exists($this -> config['generate_function'])) { return true; } else if (isset($this -> config['generate_value_format'])) { return true; } else { return ; } } /** * Génere la valeur de l'attribut à partir de la fonction de génération * * @author Benjamin Renard * * @retval boolean true si la valeur à put être générée, false sinon */ function generateValue() { if (function_exists($this -> config['generate_function'])) { $value=call_user_func($this -> config['generate_function'],$this -> ldapObject); } else if (isset($this -> config['generate_value_format'])) { $value = $this -> ldapObject -> getFData($this -> config['generate_value_format']); } if (!empty($value)) { //$this -> setValue($value); // pas nécéssaire ?? $this -> updateData=array($value); return true; } return; } /** * Retourne la valeur de l'attribut pour son enregistrement dans l'annuaire * si l'attribut à été modifié. * * @author Benjamin Renard * * @retval mixed La valeur de l'attribut pour son enregistrement dans l'annuaire */ function getUpdateData() { if (!$this -> isUpdate()) { return; } if ( $this -> _finalUpdateData ) { return $this -> _finalUpdateData; } $data=$this -> updateData; if ($this -> config['onSave']) { if (is_array($this -> config['onSave'])) { $result=$data; foreach($this -> config['onSave'] as $func) { if (function_exists($func)) { $result=$func($result); } else { $GLOBALS['LSerror'] -> addErrorCode(45,array('attr' => $this->name,'func' => $func)); return; } } } else { if (function_exists($this -> config['onSave'])) { $result = $this -> config['onSave']($data); } else { $GLOBALS['LSerror'] -> addErrorCode(45,array('attr' => $this->name,'func' => $this -> config['onSave'])); return; } } } else { $result = $this -> ldap -> getUpdateData($data); } $this -> _finalUpdateData = $result; return $result; } /** * Retourne la configuration de validation de l'attribut * * @author Benjamin Renard * * @retval mixed La configuration de validation de l'attribut */ function getValidateConfig() { return $this -> config['validation']; } /** * Retourne les attributs dépendants de celui-ci * * @author Benjamin Renard * * @retval array les noms des attributs dépendants */ function getDependsAttrs() { return $this -> config['dependAttrs']; } /** * Ajouter une action lors d'un événement * * @param[in] $event string Le nom de l'événement * @param[in] $fct string Le nom de la fonction à exectuer * @param[in] $params mixed Paramètres pour le lancement de la fonction * @param[in] $class Nom de la classe possèdant la méthode $fct à executer * * @retval void */ function addEvent($event,$fct,$params,$class=NULL) { $this -> _events[$event][] = array( 'function' => $fct, 'params' => $params, 'class' => $class ); } /** * Ajouter une action sur un objet lors d'un événement * * @param[in] $event string Le nom de l'événement * @param[in] $obj object L'objet dont la méthode doit être executé * @param[in] $meth string Le nom de la méthode * @param[in] $params mixed Paramètres d'execution de la méthode * * @retval void */ function addObjectEvent($event,&$obj,$meth,$params=NULL) { $this -> _objectEvents[$event][] = array( 'obj' => $obj, 'meth' => $meth, 'params' => $params ); } /** * Lance les actions à executer lors d'un événement * * @param[in] $event string Le nom de l'événement * * @retval boolean True si tout c'est bien passé, false sinon */ function fireEvent($event) { $return = true; if(isset($this -> config[$event])) { if (!is_array($this -> config[$event])) { $funcs = array($this -> config[$event]); } else { $funcs = $this -> config[$event]; } foreach($funcs as $func) { if(function_exists($func)) { if(!$func($this -> ldapObject)) { $return = false; } } else { $return = false; } } } if (is_array($this -> _events[$event])) { foreach ($this -> _events[$event] as $e) { if ($e['class']) { if (class_exists($e['class'])) { $obj = new $e['class'](); if (method_exists($obj,$e['fct'])) { try { $obj -> $e['fct']($e['params']); } catch(Exception $er) { $return = false; LSdebug("Event ".$event." : Erreur durant l'execution de la méthode ".$e['fct']." de la classe ".$e['class']); } } else { LSdebug("Event ".$event." : La méthode ".$e['fct']." de la classe ".$e['class']." n'existe pas."); $return = false; } } else { $return = false; LSdebug("Event ".$event." : La classe ".$e['class']." n'existe pas"); } } else { if (function_exists($e['fct'])) { try { $e['fct']($e['params']); } catch(Exception $er) { LSdebug("Event ".$event." : Erreur durant l'execution de la function ".$e['fct']); $return = false; } } else { LSdebug("Event ".$event." : la function ".$e['fct']." n'existe pas"); $return = false; } } } } if (is_array($this -> _objectEvents[$event])) { foreach ($this -> _objectEvents[$event] as $e) { if (method_exists($e['obj'],$e['meth'])) { try { $e['obj'] -> $e['meth']($e['params']); } catch(Exception $er) { $return = false; LSdebug("Event ".$event." : Erreur durant l'execution de la méthode ".$e['meth']." sur l'objet."); } } else { LSdebug("Event ".$event." : La méthode ".$e['meth']." de l'objet n'existe pas."); $return = false; } } } return $return; } } ?>