*/ class LSsearchEntry extends LSlog_staticLoggerClass { // The LSsearch object private $LSsearch=NULL; // The LdapObject type of search private $LSobject=NULL; // DN private $dn; // The parameters of the search private $params=array (); // The hash of the search parameters private $hash = NULL; // The attributes list private $attrs_list=array(); // The attributes values private $attrs=array(); // Cache private $cache=array(); // Other values private $other_values=array(); /** * Constructor * * @param[in] $LSobject string The LdapObject type of search * @param[in] $params array Parameters of search * @param[in] $hash array Parameters of search * @param[in] $resultEntry array The data of the result entry * **/ public function __construct(&$LSsearch, $LSobject, $params, $hash, &$result, $id) { if (!LSsession :: loadLSobject($LSobject)) { return; } $this -> LSsearch =& $LSsearch; $this -> LSobject = $LSobject; $this -> params = $params; $this -> id = $id; $this -> dn =& $result[$id]['dn']; $this -> attrs_list = $LSsearch -> getAttributes(); $this -> attrs =& $result[$id]['attrs']; $this -> cache =& $result[$id]['cache']; } /** * Get text value of entry * * @param[in] $key string The name of the value * * @retval mixed The value **/ public function get($key) { if (in_array($key,array_keys($this -> attrs))) { return $this -> attrs[$key]; } elseif (array_key_exists($key,$this->other_values)) { return $this->other_values[$key]; } elseif ($key=='subDn' || $key=='subDnName') { return $this -> subDn; } } /** * Add value in array $this -> other_values * * @param[in] $name string The value name * @param[in] $value mixed The value * * @retval void **/ private function registerOtherValue($name,$value) { $this -> other_values[$name]=$value; } /** * Get formated text value of entry * * @param[in] $format string The format of the value * * @retval mixed The formated value **/ public function getFData($format) { return getFData($format,$this,'get'); } /** * Access to infos of the entry * * @param[in] $key string The name of the value * * @retval mixed The value **/ public function __get($key) { if ($key=='displayName') { if (isset($this -> cache['displayName'])) { return $this -> cache['displayName']; } $this -> cache['displayName'] = $this -> getFData($this -> params['displayFormat']); return $this -> cache['displayName']; } elseif ($key=='LSobject'||$key=='type_name'||$key=='type') { return $this -> LSobject; } elseif ($key=='dn') { return $this -> dn; } elseif ($key=='subDn' || $key=='subDnName') { if ($this -> cache['subDn']) { return $this -> cache['subDn']; } if ($this -> LSsearch -> displaySubDn) { $this -> cache['subDn'] = LSldapObject::getSubDnName($this -> dn); return $this -> cache['subDn']; } } elseif ($key=='actions') { if (isset($this -> cache['actions'])) { return $this -> cache['actions']; } $this -> cache['actions'] = array ( array( 'label' => _('View'), 'url' => 'object/'.$this -> LSobject.'/'.urlencode($this -> dn), 'action' => 'view' ) ); if (LSsession :: canEdit($this -> LSobject,$this -> dn)) { $this -> cache['actions'][]=array( 'label' => _('Modify'), 'url' => 'object/'.$this -> LSobject.'/'.urlencode($this -> dn).'/modify', 'action' => 'modify' ); } if ($this -> LSsearch -> canCopy) { $this -> cache['actions'][] = array( 'label' => _('Copy'), 'url' => 'object/'.$this -> LSobject.'/create?load='.urlencode($this -> dn), 'action' => 'copy' ); } if (LSsession :: canRemove($this -> LSobject,$this -> dn)) { $this -> cache['actions'][] = array ( 'label' => _('Delete'), 'url' => 'object/'.$this -> LSobject.'/'.urlencode($this -> dn).'/remove', 'action' => 'delete' ); } $this -> LSsearch -> addResultToCache(); return $this -> cache['actions']; } elseif ($key=='LSselect') { if (is_array($_SESSION['LSselect'][$this -> LSobject])) { if(in_array($this -> dn,$_SESSION['LSselect'][$this -> LSobject])) { return true; } } return; } elseif (is_array($this->LSsearch->extraDisplayedColumns) && array_key_exists($key,$this->LSsearch->extraDisplayedColumns)) { if(isset($this -> cache[$key])) { return $this -> cache[$key]; } if (isset($this->LSsearch->extraDisplayedColumns[$key]['generateFunction'])) { if (!is_callable($this->LSsearch->extraDisplayedColumns[$key]['generateFunction'])) return False; $ret=call_user_func_array($this->LSsearch->extraDisplayedColumns[$key]['generateFunction'],array(&$this)); } else { $ret=$this -> getFData($this->LSsearch->extraDisplayedColumns[$key]['LSformat']); if (empty($ret) && is_array($this->LSsearch->extraDisplayedColumns[$key]['alternativeLSformats'])) { foreach($this->LSsearch->extraDisplayedColumns[$key]['alternativeLSformats'] as $format) { $ret=$this -> getFData($format); if (!empty($ret)) break; } } if (!empty($ret) && isset($this->LSsearch->extraDisplayedColumns[$key]['formaterLSformat'])) { $this -> registerOtherValue('val',$ret); $ret=$this -> getFData($this->LSsearch->extraDisplayedColumns[$key]['formaterLSformat']); } if (!empty($ret) && isset($this->LSsearch->extraDisplayedColumns[$key]['formaterFunction'])) { if (is_callable($this->LSsearch->extraDisplayedColumns[$key]['formaterFunction'])) { $ret=call_user_func($this->LSsearch->extraDisplayedColumns[$key]['formaterFunction'],$ret); } else { $func=$this->LSsearch->extraDisplayedColumns[$key]['formaterFunction']; if(is_array($func)) $func=print_r($func,1); LSerror::addErrorCode('LSsearchEntry_01',array('func' => $func, 'column' => $key)); } } } $this -> cache[$key] = $ret; return $ret; } elseif (in_array($key, $this -> attrs_list)) { return (isset($this -> attrs[$key])?$this -> attrs[$key]:null); } elseif (array_key_exists($key,$this->params['customInfos'])) { if(isset($this -> cache['customInfos'][$key])) { return $this -> cache['customInfos'][$key]; } if(is_array($this->params['customInfos'][$key]['function']) && is_string($this->params['customInfos'][$key]['function'][0])) { LSsession::loadLSclass($this->params['customInfos'][$key]['function'][0]); } if(is_callable($this->params['customInfos'][$key]['function'])) { $this -> cache['customInfos'][$key]=call_user_func($this->params['customInfos'][$key]['function'],$this,$this->params['customInfos'][$key]['args']); return $this -> cache['customInfos'][$key]; } } else { self :: log_warning('LSsearchEntry : '.$this -> dn.' => Unknown property '.$key.' !'); return __("Unknown property !"); } } } /** * Error Codes **/ LSerror :: defineError('LSsearchEntry_01', _("LSsearchEntry : Invalid formaterFunction %{func} for extraDisplayedColumns %{column}.") );