b0a9a3cd2b15abbfaa4851d501b5a0462b208cc0
[ldapsaisie.git] / public_html / includes / class / class.LSformElement_select_object.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 LSsession :: loadLSclass('LSformElement');
24
25 /**
26  * Select object element for LdapSaisie form
27  *
28  * This class define select elements for form. It extends the generic class LSformElement.
29  *
30  * HTML options : 
31  * // *************************************
32  * 'html_options' => array (
33  *   selectable_object => array (
34  *     'object_type' => '[Type of LSobject witch is selectable]',
35  *     'display_name_format' => '[LSformat of the display name of the LSobjects]',
36  *     'value_attribute' => '[The attribute name whitch is used as the key value of one LSobject]'
37  *   )
38  * ),
39  * // *************************************
40  * 
41  * @author Benjamin Renard <brenard@easter-eggs.com>
42  */
43
44 class LSformElement_select_object extends LSformElement {
45
46   var $fieldTemplate = 'LSformElement_select_object_field.tpl';
47   var $template = 'LSformElement_select_object.tpl';
48
49  /**
50   * Return display informations of the element
51   * 
52   * This method return the display informations of the element.
53   *
54   * @retval array
55   */
56   function getDisplay($refresh=NULL){
57     LSsession :: addCssFile('LSformElement_select_object.css');
58     if ($refresh) {
59       $this -> values = $this -> getValuesFromSession();
60     }
61     $return = $this -> getLabelInfos();
62
63     if (!$this -> isFreeze()) {
64       LSsession :: addJSconfigParam(
65         $this -> name,
66         array(
67           'object_type' => $this -> selectableObject,
68           'addBtn' => _('Modify'),
69           'deleteBtns' => _('Delete'),
70           'multiple' => (($this -> params['multiple'])?1:0),
71           'noValueLabel' => _('No set value'),
72           'noResultLabel' => _('No result')
73         )
74       );
75
76       LSsession :: addHelpInfos (
77         'LSformElement_select_object',
78         array(
79           'searchAdd' => _("Fast Add"),
80           'add' => _("Display advanced search and selection panel."),
81           'delete' => _("Delete")
82         )
83       );
84       
85       LSsession :: addJSscript('LSformElement_select_object_field.js');
86       LSsession :: addJSscript('LSformElement_select_object.js');
87       if (LSsession :: loadLSclass('LSselect')) {
88         LSselect :: loadDependenciesDisplay();
89       }
90     }
91     $return['html'] = $this -> fetchTemplate(NULL,array('selectableObject' => $this -> selectableObject));
92     return $return;
93   }
94   
95   /*
96    * Return the values of the object form the session variable
97    */
98   function getValuesFromSession() {
99     return $this -> attr_html -> getValuesFromSession();
100   }
101   
102   /**
103    * Defined the type of object witch is selectionable
104    * 
105    * @param[in] $object string The type of object
106    * 
107    * @retval void
108    **/
109   function setSelectableObject($object) {
110     $this -> selectableObject = $object;
111   }
112   
113   /**
114    * Export the values of the element
115    * 
116    * @retval Array The values of the element
117    */
118   function exportValues(){
119     $values = $this -> attr_html -> getValuesFromFormValues($this -> values);
120     return $values;
121   }
122
123   /**
124    * Defined the value of the element from the data sent in POST with the form.
125    *
126    * @author Benjamin Renard <brenard@easter-eggs.com>
127    *
128    * @param[in] [<b>required</b>] string or array The new value of the element
129    *
130    * @retval boolean Return True
131    */
132   function setValueFromPostData($data) {
133     LSformElement::setValueFromPostData($data);
134     $this -> values = $this -> attr_html -> refreshForm($this -> values,true);
135     return true;
136   }
137
138   /**
139    * Search the selectionable objects with a pattern
140    * 
141    * @param[in] $pattern The pattern of the search
142    * 
143    * @retval array(dn -> displayName) Found objects
144    */
145   function searchAdd ($pattern) {
146     if (is_array($this -> params['html_options']['selectable_object'])) {
147       if (LSsession :: loadLSobject($this -> params['html_options']['selectable_object']['object_type'])) {
148         $obj = new $this -> params['html_options']['selectable_object']['object_type']();
149         $ret = $obj -> getSelectArray($pattern,NULL,$this -> params['html_options']['selectable_object']['display_name_format']);
150         if (is_array($ret)) {
151           return $ret;
152         }
153       }
154     }
155     return array();
156   }
157  
158   /**
159    * This ajax method is used to refresh the value display
160    * in the form element after the modify window is closed.
161    *
162    * @param[in] $data The address to the array of data witch will be return by the ajax request
163    * 
164    * @retval void
165    **/
166   public static function ajax_refresh(&$data) {
167     if ((isset($_REQUEST['attribute'])) && (isset($_REQUEST['objecttype'])) && (isset($_REQUEST['objectdn'])) && (isset($_REQUEST['idform'])) ) {
168       if (LSsession ::loadLSobject($_REQUEST['objecttype'])) {
169         $object = new $_REQUEST['objecttype']();
170         $form = $object -> getForm($_REQUEST['idform']);
171         $field=$form -> getElement($_REQUEST['attribute']);
172         $val = $field -> getValuesFromSession();
173         if ( $val ) {
174           $data = array(
175             'objects'    => $val
176           );
177         }
178       }
179     }
180   }
181
182   /**
183    * This ajax method is used by the search-and-add function of the form element.
184    *
185    * @param[in] $data The address to the array of data witch will be return by the ajax request
186    * 
187    * @retval void
188    **/
189   public static function ajax_searchAdd(&$data) {
190     if ((isset($_REQUEST['attribute'])) && (isset($_REQUEST['objecttype'])) && (isset($_REQUEST['pattern'])) && (isset($_REQUEST['idform'])) ) {
191       if (LSsession ::loadLSobject($_REQUEST['objecttype'])) {
192         $object = new $_REQUEST['objecttype']();
193         $form = $object -> getForm($_REQUEST['idform']);
194         $field=$form -> getElement($_REQUEST['attribute']);
195         $data['objects'] = $field -> searchAdd($_REQUEST['pattern']);
196       }
197     }
198   }
199 }
200
201 ?>