LSsearch : improve and add doc for formaterLSformat extraDisplayedColumns's parameter
[ldapsaisie.git] / public_html / includes / class / class.LSsearchEntry.php
1 <?php
2 /*******************************************************************************
3  * Copyright (C) 2007 Easter-eggs
4  * http://ldapsaisie.labs.libre-entreprise.org
5  *
6  * Author: See AUTHORS file in top-level directory.
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License version 2
10  * as published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20
21 ******************************************************************************/
22
23 /**
24  * Object LSsearchEntry
25  *
26  * @author Benjamin Renard <brenard@easter-eggs.com>
27  */
28 class LSsearchEntry { 
29   
30   // The LSsearch object
31   private $LSsearch=NULL;
32   
33   // The LdapObject type of search
34   private $LSobject=NULL;
35   
36   // DN
37   private $dn;
38   
39   // The parameters of the search
40   private $params=array ();
41   
42   // The hash of the search parameters
43   private $hash = NULL;
44   
45   // The attributes values
46   private $attrs=array();
47   
48   // Cache
49   private $cache=array();
50
51   // Other values
52   private $other_values=array();
53   
54   /**
55    * Constructor
56    * 
57    * @param[in] $LSobject string The LdapObject type of search
58    * @param[in] $params array Parameters of search
59    * @param[in] $hash array Parameters of search
60    * @param[in] $resultEntry array The data of the result entry
61    * 
62    **/
63   function LSsearchEntry(&$LSsearch,$LSobject,$params,$hash,&$result,$id) {
64     if (!LSsession :: loadLSobject($LSobject)) {
65       return;
66     }
67     $this -> LSsearch =& $LSsearch;
68     $this -> LSobject = $LSobject;
69     $this -> params = $params;
70     $this -> id = $id;
71     $this -> dn =& $result[$id]['dn'];
72     $this -> attrs =& $result[$id]['attrs'];
73     $this -> cache =& $result[$id]['cache'];
74   }
75   
76   /**
77    * Get text value of entry
78    * 
79    * @param[in] $key string The name of the value
80    * 
81    * @retval mixed The value
82    **/
83   public function get($key) {
84     if (in_array($key,array_keys($this -> attrs))) {
85       return $this -> attrs[$key];
86     }
87     elseif (array_key_exists($key,$this->other_values)) {
88       return $this->other_values[$key];
89     }
90     elseif ($key=='subDn' || $key=='subDnName') {
91       return $this -> subDn;
92     }
93   }
94
95   /**
96    * Add value in array $this -> other_values
97    *
98    * @param[in] $name string The value name
99    * @param[in] $value mixed The value
100    *
101    * @retval void
102    **/
103   function registerOtherValue($name,$value) {
104     $this -> other_values[$name]=$value;
105   }
106
107   /**
108    * Get formated text value of entry
109    * 
110    * @param[in] $format string The format of the value
111    * 
112    * @retval mixed The formated value
113    **/  
114   public function getFData($format) {
115     return getFData($format,$this,'get');
116   }
117   
118   
119   /**
120    * Access to infos of the entry
121    * 
122    * @param[in] $key string The name of the value
123    * 
124    * @retval mixed The value
125    **/
126   public function __get($key) {
127     if ($key=='displayName') {
128       if (isset($this -> cache['displayName'])) {
129         return $this -> cache['displayName'];
130       }
131       $this -> cache['displayName'] = $this -> getFData($this -> params['displayFormat']);
132       return $this -> cache['displayName'];
133     }
134     elseif ($key=='LSobject'||$key=='type_name'||$key=='type') {
135       return $this -> LSobject;
136     }
137     elseif ($key=='dn') {
138       return $this -> dn;
139     }
140     elseif ($key=='subDn' || $key=='subDnName') {
141       if ($this -> cache['subDn']) {
142         return $this -> cache['subDn'];
143       }
144       if ($this -> LSsearch -> displaySubDn) {
145         $this -> cache['subDn'] = LSldapObject::getSubDnName($this -> dn);
146         return $this -> cache['subDn'];
147       }
148     }
149     elseif ($key=='actions') {
150       if (isset($this -> cache['actions'])) {
151         return $this -> cache['actions'];
152       }
153       $this -> cache['actions'] = array (
154         array(
155           'label' => _('View'),
156           'url' =>'view.php?LSobject='.$this -> LSobject.'&amp;dn='.urlencode($this -> dn),
157           'action' => 'view'
158         )
159       );
160       
161       if (LSsession :: canEdit($this -> LSobject,$this -> dn)) {
162         $this -> cache['actions'][]=array(
163           'label' => _('Modify'),
164           'url' => 'modify.php?LSobject='.$this -> LSobject.'&amp;dn='.urlencode($this -> dn),
165           'action' => 'modify'
166         );
167       }
168       
169       if ($this -> LSsearch -> canCopy) {
170         $this -> cache['actions'][] = array(
171           'label' => _('Copy'),
172           'url' =>'create.php?LSobject='.$this -> LSobject.'&amp;load='.urlencode($this -> dn),
173           'action' => 'copy'
174         );
175       }
176       
177       if (LSsession :: canRemove($this -> LSobject,$this -> dn)) {
178         $this -> cache['actions'][] = array (
179           'label' => _('Delete'),
180           'url' => 'remove.php?LSobject='.$this -> LSobject.'&amp;dn='.urlencode($this -> dn),
181           'action' => 'delete'
182         );
183       }
184       $this -> LSsearch -> addResultToCache();
185       return $this -> cache['actions'];
186     }
187     elseif ($key=='LSselect') {
188       if (is_array($_SESSION['LSselect'][$this -> LSobject])) {
189         if(in_array($this -> dn,$_SESSION['LSselect'][$this -> LSobject])) {
190           return true;
191         }
192       }
193       return;
194     }
195     elseif (is_array($this->LSsearch->extraDisplayedColumns) && array_key_exists($key,$this->LSsearch->extraDisplayedColumns)) {
196       if(isset($this -> cache[$key])) {
197         return $this -> cache[$key];
198       }
199       $ret=$this -> getFData($this->LSsearch->extraDisplayedColumns[$key]['LSformat']);
200       if (empty($ret) && is_array($this->LSsearch->extraDisplayedColumns[$key]['alternativeLSformats'])) {
201         foreach($this->LSsearch->extraDisplayedColumns[$key]['alternativeLSformats'] as $format) {
202           $ret=$this -> getFData($format);
203           if (!empty($ret)) break;
204         }
205       }
206       if (!empty($ret) && isset($this->LSsearch->extraDisplayedColumns[$key]['formaterLSformat'])) {
207         $this -> registerOtherValue('val',$ret);
208         $ret=$this -> getFData($this->LSsearch->extraDisplayedColumns[$key]['formaterLSformat']);
209       }
210       $this -> cache[$key] = $ret;
211       return $ret;
212     }
213     elseif (in_array($key,array_keys($this -> attrs))) {
214       return $this -> attrs[$key];
215     }
216     elseif (array_key_exists($key,$this->params['customInfos'])) {
217       if(isset($this -> cache['customInfos'][$key])) {
218         return $this -> cache['customInfos'][$key];
219       }
220       if(is_array($this->params['customInfos'][$key]['function']) && is_string($this->params['customInfos'][$key]['function'][0])) {
221         LSsession::loadLSclass($this->params['customInfos'][$key]['function'][0]);
222       }
223       if(is_callable($this->params['customInfos'][$key]['function'])) {
224         $this -> cache['customInfos'][$key]=call_user_func($this->params['customInfos'][$key]['function'],$this,$this->params['customInfos'][$key]['args']);
225         return $this -> cache['customInfos'][$key];
226       }
227     }
228     else {
229       LSlog('LSsearchEntry : '.$this -> dn.' => Unknown property '.$key.' !');
230       return __("Unknown property !");
231     }
232   }
233
234 }
235
236 ?>