ryxeo-glpi-git / inc / search.function.php @ b67d8923
Historique | Voir | Annoter | Télécharger (107 ko)
1 | b67d8923 | Eric Seigne | <?php
|
---|---|---|---|
2 | /*
|
||
3 | * @version $Id: search.function.php 7763 2009-01-06 18:44:50Z moyo $
|
||
4 | -------------------------------------------------------------------------
|
||
5 | GLPI - Gestionnaire Libre de Parc Informatique
|
||
6 | Copyright (C) 2003-2009 by the INDEPNET Development Team.
|
||
7 | |||
8 | http://indepnet.net/ http://glpi-project.org
|
||
9 | -------------------------------------------------------------------------
|
||
10 | |||
11 | LICENSE
|
||
12 | |||
13 | This file is part of GLPI.
|
||
14 | |||
15 | GLPI is free software; you can redistribute it and/or modify
|
||
16 | it under the terms of the GNU General Public License as published by
|
||
17 | the Free Software Foundation; either version 2 of the License, or
|
||
18 | (at your option) any later version.
|
||
19 | |||
20 | GLPI is distributed in the hope that it will be useful,
|
||
21 | but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
22 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
23 | GNU General Public License for more details.
|
||
24 | |||
25 | You should have received a copy of the GNU General Public License
|
||
26 | along with GLPI; if not, write to the Free Software
|
||
27 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||
28 | --------------------------------------------------------------------------
|
||
29 | */
|
||
30 | |||
31 | if (!defined('GLPI_ROOT')){ |
||
32 | die("Sorry. You can't access directly to this file"); |
||
33 | } |
||
34 | |||
35 | /** \file search.function.php
|
||
36 | * Generic functions for Search Engine
|
||
37 | */
|
||
38 | // Get search_option array / Already include in includes.php
|
||
39 | if (!isset($SEARCH_OPTION)){ |
||
40 | $SEARCH_OPTION=getSearchOptions();
|
||
41 | } |
||
42 | |||
43 | /**
|
||
44 | * Clean search options depending of user active profile
|
||
45 | *
|
||
46 | * @param $type item type to manage
|
||
47 | * @param $action action which is used to manupulate searchoption (r/w)
|
||
48 | * @return clean $SEARCH_OPTION array
|
||
49 | */
|
||
50 | function cleanSearchOption($type,$action='r'){ |
||
51 | global $CFG_GLPI,$SEARCH_OPTION; |
||
52 | $options=$SEARCH_OPTION[$type]; |
||
53 | $todel=array(); |
||
54 | if (!haveRight('contract_infocom',$action)&&in_array($type,$CFG_GLPI["infocom_types"])){ |
||
55 | $todel=array_merge($todel,array('financial',25,26,27,28,29,30,37,38,50,51,52,53,54,55,56,57,58,59,120,122,130,131,132,133,134,135,136,137,138)); |
||
56 | } |
||
57 | |||
58 | if ($type==COMPUTER_TYPE){ |
||
59 | if (!haveRight('networking',$action)){ |
||
60 | $todel=array_merge($todel,array('network',20,21,22,83,84,85)); |
||
61 | } |
||
62 | if (!$CFG_GLPI['ocs_mode']||!haveRight('view_ocsng',$action)){ |
||
63 | $todel=array_merge($todel,array('ocsng',100,101,102,103)); |
||
64 | } |
||
65 | } |
||
66 | if (!haveRight('notes',$action)){ |
||
67 | $todel[]=90; |
||
68 | } |
||
69 | if (count($todel)){ |
||
70 | foreach ($todel as $ID){ |
||
71 | if (isset($options[$ID])){ |
||
72 | unset($options[$ID]); |
||
73 | } |
||
74 | } |
||
75 | } |
||
76 | |||
77 | return $options; |
||
78 | } |
||
79 | |||
80 | |||
81 | /**
|
||
82 | * Completion of the URL $_GET values with the $_SESSION values or define default values
|
||
83 | *
|
||
84 | *
|
||
85 | * @param $type item type to manage
|
||
86 | * @param $usesession Use datas save in session
|
||
87 | * @param $save Save params to session
|
||
88 | * @return nothing
|
||
89 | */
|
||
90 | function manageGetValuesInSearch($type=0,$usesession=true,$save=true){ |
||
91 | global $_GET; |
||
92 | $tab=array(); |
||
93 | |||
94 | |||
95 | $default_values["start"]=0; |
||
96 | $default_values["order"]="ASC"; |
||
97 | $default_values["deleted"]=0; |
||
98 | $default_values["distinct"]="N"; |
||
99 | $default_values["link"]=array(); |
||
100 | $default_values["field"]=array(0=>"view"); |
||
101 | $default_values["contains"]=array(0=>""); |
||
102 | $default_values["link2"]=array(); |
||
103 | $default_values["field2"]=array(0=>"view"); |
||
104 | $default_values["contains2"]=array(0=>""); |
||
105 | $default_values["type2"]=""; |
||
106 | $default_values["sort"]=1; |
||
107 | |||
108 | if ($usesession&&isset($_GET["reset_before"])){ |
||
109 | if (isset($_SESSION['glpisearch'][$type])){ |
||
110 | unset($_SESSION['glpisearch'][$type]); |
||
111 | } |
||
112 | if (isset($_SESSION['glpisearchcount'][$type])){ |
||
113 | unset($_SESSION['glpisearchcount'][$type]); |
||
114 | } |
||
115 | if (isset($_SESSION['glpisearchcount2'][$type])){ |
||
116 | unset($_SESSION['glpisearchcount2'][$type]); |
||
117 | } |
||
118 | // Bookmark use
|
||
119 | if (isset($_GET["glpisearchcount"])){ |
||
120 | $_SESSION["glpisearchcount"][$type]=$_GET["glpisearchcount"]; |
||
121 | } |
||
122 | // Bookmark use
|
||
123 | if (isset($_GET["glpisearchcount2"])){ |
||
124 | $_SESSION["glpisearchcount2"][$type]=$_GET["glpisearchcount2"]; |
||
125 | } |
||
126 | } |
||
127 | |||
128 | if (is_array($_GET)&&$save){ |
||
129 | foreach ($_GET as $key => $val){ |
||
130 | $_SESSION['glpisearch'][$type][$key]=$val; |
||
131 | } |
||
132 | } |
||
133 | |||
134 | foreach ($default_values as $key => $val){ |
||
135 | if (!isset($_GET[$key])){ |
||
136 | if ($usesession&&isset($_SESSION['glpisearch'][$type][$key])) { |
||
137 | $_GET[$key]=$_SESSION['glpisearch'][$type][$key]; |
||
138 | } else {
|
||
139 | $_GET[$key] = $val; |
||
140 | $_SESSION['glpisearch'][$type][$key] = $val; |
||
141 | } |
||
142 | } |
||
143 | } |
||
144 | |||
145 | if (!isset($_SESSION["glpisearchcount"][$type])) { |
||
146 | if (isset($_GET["glpisearchcount"])){ |
||
147 | $_SESSION["glpisearchcount"][$type]=$_GET["glpisearchcount"]; |
||
148 | } else {
|
||
149 | $_SESSION["glpisearchcount"][$type]=1; |
||
150 | } |
||
151 | } |
||
152 | if (!isset($_SESSION["glpisearchcount2"][$type])) { |
||
153 | // Set in URL for bookmark
|
||
154 | if (isset($_GET["glpisearchcount2"])){ |
||
155 | $_SESSION["glpisearchcount2"][$type]=$_GET["glpisearchcount2"]; |
||
156 | } else {
|
||
157 | $_SESSION["glpisearchcount2"][$type]=0; |
||
158 | } |
||
159 | } |
||
160 | |||
161 | } |
||
162 | |||
163 | /**
|
||
164 | * Print generic search form
|
||
165 | *
|
||
166 | *
|
||
167 | *
|
||
168 | *@param $type type to display the form
|
||
169 | *@param $target url to post the form
|
||
170 | *@param $field array of the fields selected in the search form
|
||
171 | *@param $contains array of the search strings
|
||
172 | *@param $sort the "sort by" field value
|
||
173 | *@param $deleted the deleted value
|
||
174 | *@param $link array of the link between each search.
|
||
175 | *@param $distinct only display distinct items
|
||
176 | *@param $contains2 array of the search strings for meta items
|
||
177 | *@param $field2 array of the fields selected in the search form for meta items
|
||
178 | *@param $type2 type to display the form for meta items
|
||
179 | *@param $link2 array of the link between each search. for meta items
|
||
180 | *
|
||
181 | *@return nothing (diplays)
|
||
182 | *
|
||
183 | **/
|
||
184 | function searchForm($type,$target,$field="",$contains="",$sort= "",$deleted= 0,$link="",$distinct="Y",$link2="",$contains2="",$field2="",$type2=""){ |
||
185 | global $LANG,$SEARCH_OPTION,$CFG_GLPI,$LINK_ID_TABLE; |
||
186 | |||
187 | $options=cleanSearchOption($type); |
||
188 | |||
189 | // Meta search names
|
||
190 | $names=array( |
||
191 | COMPUTER_TYPE => $LANG["Menu"][0], |
||
192 | // NETWORKING_TYPE => $LANG["Menu"][1],
|
||
193 | PRINTER_TYPE => $LANG["Menu"][2], |
||
194 | MONITOR_TYPE => $LANG["Menu"][3], |
||
195 | PERIPHERAL_TYPE => $LANG["Menu"][16], |
||
196 | SOFTWARE_TYPE => $LANG["Menu"][4], |
||
197 | PHONE_TYPE => $LANG["Menu"][34], |
||
198 | ); |
||
199 | |||
200 | echo "<form method='get' action=\"$target\">"; |
||
201 | echo "<table class='tab_cadre_fixe'>"; |
||
202 | // echo "<tr><th colspan='5'>".$LANG["search"][0].":</th></tr>";
|
||
203 | echo "<tr class='tab_bg_1'>"; |
||
204 | echo "<td>"; |
||
205 | echo "<table>"; |
||
206 | |||
207 | // Display normal search parameters
|
||
208 | for ($i=0;$i<$_SESSION["glpisearchcount"][$type];$i++){ |
||
209 | echo "<tr><td class='right'>"; |
||
210 | // First line display add / delete images for normal and meta search items
|
||
211 | if ($i==0){ |
||
212 | echo "<a href='".$CFG_GLPI["root_doc"]."/front/computer.php?add_search_count=1&type=$type'><img src=\"".$CFG_GLPI["root_doc"]."/pics/plus.png\" alt='+' title='".$LANG["search"][17]."'></a> "; |
||
213 | if ($_SESSION["glpisearchcount"][$type]>1) |
||
214 | echo "<a href='".$CFG_GLPI["root_doc"]."/front/computer.php?delete_search_count=1&type=$type'><img src=\"".$CFG_GLPI["root_doc"]."/pics/moins.png\" alt='-' title='".$LANG["search"][18]."'></a> "; |
||
215 | |||
216 | if (isset($names[$type])){ |
||
217 | echo "<a href='".$CFG_GLPI["root_doc"]."/front/computer.php?add_search_count2=1&type=$type'><img src=\"".$CFG_GLPI["root_doc"]."/pics/meta_plus.png\" alt='+' title='".$LANG["search"][19]."'></a> "; |
||
218 | if ($_SESSION["glpisearchcount2"][$type]>0) |
||
219 | echo "<a href='".$CFG_GLPI["root_doc"]."/front/computer.php?delete_search_count2=1&type=$type'><img src=\"".$CFG_GLPI["root_doc"]."/pics/meta_moins.png\" alt='-' title='".$LANG["search"][20]."'></a> "; |
||
220 | } |
||
221 | } |
||
222 | // Display link item
|
||
223 | if ($i>0) { |
||
224 | echo "<select name='link[$i]'>"; |
||
225 | |||
226 | echo "<option value='AND' "; |
||
227 | if(is_array($link)&&isset($link[$i]) && $link[$i] == "AND") echo "selected"; |
||
228 | echo ">AND</option>"; |
||
229 | |||
230 | echo "<option value='OR' "; |
||
231 | if(is_array($link)&&isset($link[$i]) && $link[$i] == "OR") echo "selected"; |
||
232 | echo ">OR</option>"; |
||
233 | |||
234 | echo "<option value='AND NOT' "; |
||
235 | if(is_array($link)&&isset($link[$i]) && $link[$i] == "AND NOT") echo "selected"; |
||
236 | echo ">AND NOT</option>"; |
||
237 | |||
238 | echo "<option value='OR NOT' "; |
||
239 | if(is_array($link)&&isset($link[$i]) && $link[$i] == "OR NOT") echo "selected"; |
||
240 | echo ">OR NOT</option>"; |
||
241 | |||
242 | echo "</select> "; |
||
243 | } |
||
244 | // display search field
|
||
245 | echo "<input type='text' size='15' name=\"contains[$i]\" value=\"". (is_array($contains)&&isset($contains[$i])?stripslashes($contains[$i]):"" )."\" >"; |
||
246 | echo " "; |
||
247 | echo $LANG["search"][10]." "; |
||
248 | |||
249 | // display select box to define serach item
|
||
250 | echo "<select name=\"field[$i]\" size='1'>"; |
||
251 | echo "<option value='view' "; |
||
252 | if(is_array($field)&&isset($field[$i]) && $field[$i] == "view") echo "selected"; |
||
253 | echo ">".$LANG["search"][11]."</option>"; |
||
254 | |||
255 | reset($options); |
||
256 | $first_group=true; |
||
257 | foreach ($options as $key => $val) { |
||
258 | // print groups
|
||
259 | if (!is_array($val)){ |
||
260 | if (!$first_group) echo "</optgroup>"; |
||
261 | else $first_group=false; |
||
262 | echo "<optgroup label=\"$val\">"; |
||
263 | }else {
|
||
264 | echo "<option value=\"".$key."\""; |
||
265 | if(is_array($field)&&isset($field[$i]) && $key == $field[$i]) echo "selected"; |
||
266 | echo ">". utf8_substr($val["name"],0,32) ."</option>\n"; |
||
267 | } |
||
268 | } |
||
269 | if (!$first_group) |
||
270 | echo "</optgroup>"; |
||
271 | |||
272 | echo "<option value='all' "; |
||
273 | if(is_array($field)&&isset($field[$i]) && $field[$i] == "all") echo "selected"; |
||
274 | echo ">".$LANG["common"][66]."</option>"; |
||
275 | |||
276 | echo "</select> "; |
||
277 | |||
278 | |||
279 | echo "</td></tr>"; |
||
280 | } |
||
281 | |||
282 | // Display meta search items
|
||
283 | $linked=array(); |
||
284 | if ($_SESSION["glpisearchcount2"][$type]>0){ |
||
285 | // Define meta search items to linked
|
||
286 | switch ($type){ |
||
287 | case COMPUTER_TYPE : |
||
288 | $linked=array(PRINTER_TYPE,MONITOR_TYPE,PERIPHERAL_TYPE,SOFTWARE_TYPE,PHONE_TYPE); |
||
289 | break;
|
||
290 | /* case NETWORKING_TYPE :
|
||
291 | $linked=array(COMPUTER_TYPE,PRINTER_TYPE,PERIPHERAL_TYPE);
|
||
292 | break;
|
||
293 | */
|
||
294 | case PRINTER_TYPE : |
||
295 | $linked=array(COMPUTER_TYPE); |
||
296 | break;
|
||
297 | case MONITOR_TYPE : |
||
298 | $linked=array(COMPUTER_TYPE); |
||
299 | break;
|
||
300 | case PERIPHERAL_TYPE : |
||
301 | $linked=array(COMPUTER_TYPE); |
||
302 | break;
|
||
303 | case SOFTWARE_TYPE : |
||
304 | $linked=array(COMPUTER_TYPE); |
||
305 | break;
|
||
306 | case PHONE_TYPE : |
||
307 | $linked=array(COMPUTER_TYPE); |
||
308 | break;
|
||
309 | } |
||
310 | } |
||
311 | |||
312 | if (is_array($linked)&&count($linked)>0) |
||
313 | for ($i=0;$i<$_SESSION["glpisearchcount2"][$type];$i++){ |
||
314 | echo "<tr><td class='left'>"; |
||
315 | $rand=mt_rand();
|
||
316 | |||
317 | // Display link item (not for the first item)
|
||
318 | //if ($i>0) {
|
||
319 | echo "<select name='link2[$i]'>"; |
||
320 | |||
321 | echo "<option value='AND' "; |
||
322 | if(is_array($link2)&&isset($link2[$i]) && $link2[$i] == "AND") echo "selected"; |
||
323 | echo ">AND</option>"; |
||
324 | |||
325 | echo "<option value='OR' "; |
||
326 | if(is_array($link2)&&isset($link2[$i]) && $link2[$i] == "OR") echo "selected"; |
||
327 | echo ">OR</option>"; |
||
328 | |||
329 | echo "<option value='AND NOT' "; |
||
330 | if(is_array($link2)&&isset($link2[$i]) && $link2[$i] == "AND NOT") echo "selected"; |
||
331 | echo ">AND NOT</option>"; |
||
332 | |||
333 | echo "<option value='OR NOT' "; |
||
334 | if(is_array($link2)&&isset($link2[$i]) && $link2[$i] == "OR NOT") echo "selected"; |
||
335 | echo ">OR NOT</option>"; |
||
336 | |||
337 | echo "</select>"; |
||
338 | //}
|
||
339 | // Display select of the linked item type available
|
||
340 | echo "<select name='type2[$i]' id='type2_".$type."_".$i."_$rand'>"; |
||
341 | echo "<option value='-1'>-----</option>"; |
||
342 | foreach ($linked as $key) |
||
343 | echo "<option value='$key'>".utf8_substr($names[$key],0,20)."</option>"; |
||
344 | echo "</select>"; |
||
345 | |||
346 | // Ajax script for display search meat item
|
||
347 | echo "<span id='show_".$type."_".$i."_$rand'> </span>\n"; |
||
348 | |||
349 | $params=array('type'=>'__VALUE__', |
||
350 | 'num'=>$i, |
||
351 | 'field'=>(is_array($field2)&&isset($field2[$i])?$field2[$i]:""), |
||
352 | 'val'=>(is_array($contains2)&&isset($contains2[$i])?$contains2[$i]:""), |
||
353 | |||
354 | ); |
||
355 | ajaxUpdateItemOnSelectEvent("type2_".$type."_".$i."_$rand","show_".$type."_".$i."_$rand",$CFG_GLPI["root_doc"]."/ajax/updateSearch.php",$params,false); |
||
356 | |||
357 | |||
358 | if (is_array($type2)&&isset($type2[$i])&&$type2[$i]>0){ |
||
359 | echo "<script type='text/javascript' >"; |
||
360 | echo "window.document.getElementById('type2_".$type."_".$i."_$rand').value='".$type2[$i]."';"; |
||
361 | echo "</script>\n"; |
||
362 | |||
363 | $params['type']=$type2[$i]; |
||
364 | ajaxUpdateItem("show_".$type."_".$i."_$rand",$CFG_GLPI["root_doc"]."/ajax/updateSearch.php",$params,false); |
||
365 | } |
||
366 | echo "</td></tr>"; |
||
367 | } |
||
368 | |||
369 | echo "</table>"; |
||
370 | echo "</td>"; |
||
371 | |||
372 | // Display sort selection
|
||
373 | echo "<td>"; |
||
374 | echo $LANG["search"][4]; |
||
375 | echo " <select name='sort' size='1'>"; |
||
376 | reset($options); |
||
377 | $first_group=true; |
||
378 | foreach ($options as $key => $val) { |
||
379 | if (!is_array($val)){ |
||
380 | if (!$first_group) echo "</optgroup>"; |
||
381 | else $first_group=false; |
||
382 | echo "<optgroup label=\"$val\">"; |
||
383 | }else {
|
||
384 | |||
385 | echo "<option value=\"".$key."\""; |
||
386 | if($key == $sort) echo " selected"; |
||
387 | echo ">".utf8_substr($val["name"],0,20)."</option>\n"; |
||
388 | } |
||
389 | } |
||
390 | if (!$first_group) |
||
391 | echo "</optgroup>"; |
||
392 | |||
393 | echo "</select> "; |
||
394 | echo "</td>"; |
||
395 | |||
396 | // Display deleted selection
|
||
397 | echo "<td>"; |
||
398 | // echo "<table>";
|
||
399 | if (in_array($LINK_ID_TABLE[$type],$CFG_GLPI["deleted_tables"])){ |
||
400 | //echo "<tr><td>";
|
||
401 | dropdownYesNo("deleted",$deleted); |
||
402 | echo "<img src=\"".$CFG_GLPI["root_doc"]."/pics/showdeleted.png\" alt='".$LANG["common"][3]."' title='".$LANG["common"][3]."'>"; |
||
403 | //echo "</td></tr>";
|
||
404 | } |
||
405 | |||
406 | echo "</td>"; |
||
407 | // Display Reset search
|
||
408 | echo "<td align='center'>"; |
||
409 | echo "<a href='".$CFG_GLPI["root_doc"]."/front/computer.php?reset_search=reset_search&type=$type' ><img title=\"".$LANG["buttons"][16]."\" alt=\"".$LANG["buttons"][16]."\" src='".$CFG_GLPI["root_doc"]."/pics/reset.png' class='calendrier'></a>"; |
||
410 | showSaveBookmarkButton(BOOKMARK_SEARCH,$type); |
||
411 | |||
412 | echo "</td>"; |
||
413 | // Display submit button
|
||
414 | echo "<td width='80' class='tab_bg_2'>"; |
||
415 | echo "<input type='submit' value=\"".$LANG["buttons"][0]."\" class='submit' >"; |
||
416 | echo "</td></tr>"; |
||
417 | echo "</table>"; |
||
418 | // Reset to start when submit new search
|
||
419 | echo "<input type='hidden' name='start' value='0'>"; |
||
420 | echo "</form>"; |
||
421 | |||
422 | } |
||
423 | /**
|
||
424 | * Generic Search and list function
|
||
425 | *
|
||
426 | *
|
||
427 | * Build the query, make the search and list items after a search.
|
||
428 | *
|
||
429 | *@param $target filename where to go when done.
|
||
430 | *@param $field array of fields in witch the search would be done
|
||
431 | *@param $type type to display the form
|
||
432 | *@param $contains array of the search strings
|
||
433 | *@param $distinct display only distinct items
|
||
434 | *@param $sort the "sort by" field value
|
||
435 | *@param $order ASC or DSC (for mysql query)
|
||
436 | *@param $start row number from witch we start the query (limit $start,xxx)
|
||
437 | *@param $deleted Query on deleted items or not.
|
||
438 | *@param $link array of the link between each search.
|
||
439 | *@param $contains2 array of the search strings for meta items
|
||
440 | *@param $field2 array of the fields selected in the search form for meta items
|
||
441 | *@param $type2 type to display the form for meta items
|
||
442 | *@param $link2 array of the link between each search. for meta items
|
||
443 | *
|
||
444 | *
|
||
445 | *@return Nothing (display)
|
||
446 | *
|
||
447 | **/
|
||
448 | function showList ($type,$target,$field,$contains,$sort,$order,$start,$deleted,$link,$distinct,$link2="",$contains2="",$field2="",$type2=""){ |
||
449 | global $DB,$INFOFORM_PAGES,$SEARCH_OPTION,$LINK_ID_TABLE,$CFG_GLPI,$LANG,$PLUGIN_HOOKS; |
||
450 | |||
451 | $limitsearchopt=cleanSearchOption($type); |
||
452 | |||
453 | $itemtable=$LINK_ID_TABLE[$type]; |
||
454 | if (isset($CFG_GLPI["union_search_type"][$type])){ |
||
455 | $itemtable=$CFG_GLPI["union_search_type"][$type]; |
||
456 | } |
||
457 | $LIST_LIMIT=$_SESSION["glpilist_limit"]; |
||
458 | if (isset($_GET['export_all'])) { |
||
459 | $start=0; |
||
460 | } |
||
461 | // Set display type for export if define
|
||
462 | $output_type=HTML_OUTPUT; |
||
463 | if (isset($_GET["display_type"])){ |
||
464 | $output_type=$_GET["display_type"]; |
||
465 | // Limit to 10 element
|
||
466 | if ($_GET["display_type"]==GLOBAL_SEARCH){ |
||
467 | $LIST_LIMIT=GLOBAL_SEARCH_DISPLAY_COUNT; |
||
468 | } |
||
469 | } |
||
470 | |||
471 | $entity_restrict=in_array($itemtable,$CFG_GLPI["specif_entities_tables"]); |
||
472 | |||
473 | // Define meta table where search must be done in HAVING clause
|
||
474 | $META_SPECIF_TABLE=array("glpi_device_ram","glpi_device_hdd","glpi_device_processor","glpi_tracking"); |
||
475 | |||
476 | $names=array( |
||
477 | COMPUTER_TYPE => $LANG["Menu"][0], |
||
478 | // NETWORKING_TYPE => $LANG["Menu"][1],
|
||
479 | PRINTER_TYPE => $LANG["Menu"][2], |
||
480 | MONITOR_TYPE => $LANG["Menu"][3], |
||
481 | PERIPHERAL_TYPE => $LANG["Menu"][16], |
||
482 | SOFTWARE_TYPE => $LANG["Menu"][4], |
||
483 | PHONE_TYPE => $LANG["Menu"][34], |
||
484 | ); |
||
485 | |||
486 | // Get the items to display
|
||
487 | $toview=addDefaultToView($type); |
||
488 | |||
489 | // Add default items
|
||
490 | $query="SELECT * FROM glpi_display WHERE type='$type' AND FK_users='".$_SESSION["glpiID"]."' ORDER by rank"; |
||
491 | $result=$DB->query($query); |
||
492 | // GET default serach options
|
||
493 | if ($DB->numrows($result)==0){ |
||
494 | $query="SELECT * FROM glpi_display WHERE type='$type' AND FK_users='0' ORDER by rank"; |
||
495 | $result=$DB->query($query); |
||
496 | } |
||
497 | |||
498 | if ($DB->numrows($result)>0){ |
||
499 | while ($data=$DB->fetch_array($result)){ |
||
500 | array_push($toview,$data["num"]); |
||
501 | } |
||
502 | } |
||
503 | |||
504 | // Add searched items
|
||
505 | if (count($field)>0) |
||
506 | foreach($field as $key => $val) |
||
507 | if (!in_array($val,$toview)&&$val!="all"&&$val!="view") |
||
508 | array_push($toview,$val); |
||
509 | |||
510 | // Add order item
|
||
511 | if (!in_array($sort,$toview)) |
||
512 | array_push($toview,$sort); |
||
513 | |||
514 | // Manage search on all item
|
||
515 | $SEARCH_ALL=array(); |
||
516 | if (in_array("all",$field)){ |
||
517 | foreach ($field as $key => $val) |
||
518 | if ($val=="all"){ |
||
519 | array_push($SEARCH_ALL,array("contains"=>$contains[$key])); |
||
520 | } |
||
521 | } |
||
522 | |||
523 | // Clean toview array
|
||
524 | $toview=array_unique($toview); |
||
525 | foreach ($toview as $key => $val){ |
||
526 | if (!isset($limitsearchopt[$val])){ |
||
527 | unset($toview[$key]); |
||
528 | } |
||
529 | } |
||
530 | $toview_count=count($toview); |
||
531 | |||
532 | // Construct the request
|
||
533 | //// 1 - SELECT
|
||
534 | $SELECT ="SELECT ".addDefaultSelect($type); |
||
535 | |||
536 | // Add select for all toview item
|
||
537 | foreach ($toview as $key => $val){ |
||
538 | $SELECT.=addSelect($type,$val,$key,0); |
||
539 | } |
||
540 | |||
541 | //// 2 - FROM AND LEFT JOIN
|
||
542 | // Set reference table
|
||
543 | |||
544 | $FROM = " FROM ".$itemtable; |
||
545 | |||
546 | |||
547 | // Init already linked tables array in order not to link a table several times
|
||
548 | $already_link_tables=array(); |
||
549 | // Put reference table
|
||
550 | array_push($already_link_tables,$itemtable); |
||
551 | |||
552 | // Add default join
|
||
553 | $COMMONLEFTJOIN=addDefaultJoin($type,$itemtable,$already_link_tables); |
||
554 | $FROM.=$COMMONLEFTJOIN; |
||
555 | |||
556 | |||
557 | // Add all table for toview items
|
||
558 | foreach ($toview as $key => $val){ |
||
559 | $FROM.=addLeftJoin($type,$itemtable,$already_link_tables,$SEARCH_OPTION[$type][$val]["table"],$SEARCH_OPTION[$type][$val]["linkfield"]); |
||
560 | } |
||
561 | |||
562 | |||
563 | // Search all case :
|
||
564 | if (count($SEARCH_ALL)>0) |
||
565 | foreach ($SEARCH_OPTION[$type] as $key => $val){ |
||
566 | // Do not search on Group Name
|
||
567 | if (is_array($val)){ |
||
568 | $FROM.=addLeftJoin($type,$itemtable,$already_link_tables,$SEARCH_OPTION[$type][$key]["table"],$SEARCH_OPTION[$type][$key]["linkfield"]); |
||
569 | } |
||
570 | } |
||
571 | |||
572 | |||
573 | //// 3 - WHERE
|
||
574 | |||
575 | // default string
|
||
576 | $WHERE=""; |
||
577 | $COMMONWHERE = addDefaultWhere($type); |
||
578 | $first=empty($COMMONWHERE); |
||
579 | |||
580 | |||
581 | // Add deleted if item have it
|
||
582 | if (in_array($itemtable,$CFG_GLPI["deleted_tables"])){ |
||
583 | $LINK= " AND " ; |
||
584 | if ($first) {$LINK=" ";$first=false;} |
||
585 | $COMMONWHERE.= $LINK.$itemtable.".deleted='$deleted' "; |
||
586 | } |
||
587 | // Remove template items
|
||
588 | if (in_array($itemtable,$CFG_GLPI["template_tables"])){ |
||
589 | $LINK= " AND " ; |
||
590 | if ($first) {$LINK=" ";$first=false;} |
||
591 | $COMMONWHERE.= $LINK.$itemtable.".is_template='0' "; |
||
592 | } |
||
593 | |||
594 | // Add Restrict to current entities
|
||
595 | if ($entity_restrict){ |
||
596 | $LINK= " AND " ; |
||
597 | if ($first) {$LINK=" ";$first=false;} |
||
598 | |||
599 | if (isset($CFG_GLPI["union_search_type"][$type])) { |
||
600 | // Will be replace below in Union/Recursivity Hack
|
||
601 | $COMMONWHERE.=$LINK." ENTITYRESTRICT "; |
||
602 | } else if (in_array($itemtable, $CFG_GLPI["recursive_type"])) { |
||
603 | $COMMONWHERE.=getEntitiesRestrictRequest($LINK,$itemtable,'','',true); |
||
604 | } else {
|
||
605 | $COMMONWHERE.=getEntitiesRestrictRequest($LINK,$itemtable); |
||
606 | } |
||
607 | } |
||
608 | $first=true; |
||
609 | // Add search conditions
|
||
610 | // If there is search items
|
||
611 | if ($_SESSION["glpisearchcount"][$type]>0&&count($contains)>0) { |
||
612 | $i=0; |
||
613 | for ($key=0;$key<$_SESSION["glpisearchcount"][$type];$key++){ |
||
614 | // if real search (strlen >0) and not all and view search
|
||
615 | if (isset($contains[$key])&&strlen($contains[$key])>0&&$field[$key]!="all"&&$field[$key]!="view"){ |
||
616 | $LINK=" "; |
||
617 | $NOT=0; |
||
618 | $tmplink=""; |
||
619 | if (is_array($link)&&isset($link[$key])){ |
||
620 | if (ereg("NOT",$link[$key])){ |
||
621 | $tmplink=" ".ereg_replace(" NOT","",$link[$key]); |
||
622 | $NOT=1; |
||
623 | } else {
|
||
624 | $tmplink=" ".$link[$key]; |
||
625 | } |
||
626 | } else {
|
||
627 | $tmplink=" AND "; |
||
628 | } |
||
629 | |||
630 | // Manage Link if not first item
|
||
631 | if (!$first||$i>0) { |
||
632 | $LINK=$tmplink; |
||
633 | } |
||
634 | // Add Where clause if not to be done ine HAVING CLAUSE
|
||
635 | if (!in_array($SEARCH_OPTION[$type][$field[$key]]["table"],$META_SPECIF_TABLE)){ |
||
636 | $WHERE.= addWhere($LINK,$NOT,$type,$field[$key],$contains[$key]); |
||
637 | $i++;
|
||
638 | } |
||
639 | // if real search (strlen >0) and view search
|
||
640 | } else if (isset($contains[$key])&&strlen($contains[$key])>0&&$field[$key]=="view"){ |
||
641 | $LINK=" OR "; |
||
642 | $NOT=0; |
||
643 | $globallink=" AND "; |
||
644 | if (is_array($link)&&isset($link[$key])){ |
||
645 | switch ($link[$key]){ |
||
646 | case "AND"; |
||
647 | $LINK=" OR "; |
||
648 | $globallink=" AND "; |
||
649 | break;
|
||
650 | case "AND NOT"; |
||
651 | $LINK=" AND "; |
||
652 | $NOT=1; |
||
653 | $globallink=" AND "; |
||
654 | break;
|
||
655 | case "OR"; |
||
656 | $LINK=" OR "; |
||
657 | $globallink=" OR "; |
||
658 | break;
|
||
659 | case "OR NOT"; |
||
660 | $LINK=" AND "; |
||
661 | $NOT=1; |
||
662 | $globallink=" OR "; |
||
663 | break;
|
||
664 | } |
||
665 | } else {
|
||
666 | $tmplink=" AND "; |
||
667 | } |
||
668 | |||
669 | // Manage Link if not first item
|
||
670 | if (!$first||$i>0) { |
||
671 | $WHERE.=$globallink; |
||
672 | } |
||
673 | |||
674 | $WHERE.= " ( "; |
||
675 | $first2=true; |
||
676 | foreach ($toview as $key2 => $val2){ |
||
677 | // Add Where clause if not to be done ine HAVING CLAUSE
|
||
678 | if (!in_array($SEARCH_OPTION[$type][$val2]["table"],$META_SPECIF_TABLE)){ |
||
679 | $tmplink=$LINK; |
||
680 | if ($first2) { |
||
681 | $tmplink=" "; |
||
682 | $first2=false; |
||
683 | } |
||
684 | $WHERE.= addWhere($tmplink,$NOT,$type,$val2,$contains[$key]); |
||
685 | } |
||
686 | } |
||
687 | $WHERE.=" ) "; |
||
688 | $i++;
|
||
689 | // if real search (strlen >0) and all search
|
||
690 | } else if (isset($contains[$key])&&strlen($contains[$key])>0&&$field[$key]=="all"){ |
||
691 | |||
692 | $LINK=" OR "; |
||
693 | $NOT=0; |
||
694 | $globallink=" AND "; |
||
695 | if (is_array($link)&&isset($link[$key])){ |
||
696 | switch ($link[$key]){ |
||
697 | case "AND"; |
||
698 | $LINK=" OR "; |
||
699 | $globallink=" AND "; |
||
700 | break;
|
||
701 | case "AND NOT"; |
||
702 | $LINK=" AND "; |
||
703 | $NOT=1; |
||
704 | $globallink=" AND "; |
||
705 | break;
|
||
706 | case "OR"; |
||
707 | $LINK=" OR "; |
||
708 | $globallink=" OR "; |
||
709 | break;
|
||
710 | case "OR NOT"; |
||
711 | $LINK=" AND "; |
||
712 | $NOT=1; |
||
713 | $globallink=" OR "; |
||
714 | break;
|
||
715 | } |
||
716 | } else {
|
||
717 | $tmplink=" AND "; |
||
718 | } |
||
719 | |||
720 | // Manage Link if not first item
|
||
721 | if (!$first||$i>0) { |
||
722 | $WHERE.=$globallink; |
||
723 | } |
||
724 | |||
725 | |||
726 | $WHERE.= " ( "; |
||
727 | $first2=true; |
||
728 | |||
729 | foreach ($SEARCH_OPTION[$type] as $key2 => $val2) |
||
730 | if (is_array($val2)){ |
||
731 | // Add Where clause if not to be done ine HAVING CLAUSE
|
||
732 | if (!in_array($val2["table"],$META_SPECIF_TABLE)){ |
||
733 | $tmplink=$LINK; |
||
734 | if ($first2) { |
||
735 | $tmplink=" "; |
||
736 | $first2=false; |
||
737 | } |
||
738 | $WHERE.= addWhere($tmplink,$NOT,$type,$key2,$contains[$key]); |
||
739 | } |
||
740 | } |
||
741 | |||
742 | $WHERE.=")"; |
||
743 | $i++;
|
||
744 | } |
||
745 | } |
||
746 | } |
||
747 | |||
748 | |||
749 | //// 4 - ORDER
|
||
750 | $ORDER="ORDER BY ID"; |
||
751 | foreach($toview as $key => $val){ |
||
752 | if ($sort==$val){ |
||
753 | $ORDER= addOrderBy($type,$sort,$order,$key); |
||
754 | } |
||
755 | } |
||
756 | |||
757 | |||
758 | |||
759 | |||
760 | //// 5 - META SEARCH
|
||
761 | // Preprocessing
|
||
762 | if ($_SESSION["glpisearchcount2"][$type]>0&&is_array($type2)){ |
||
763 | |||
764 | // a - SELECT
|
||
765 | for ($i=0;$i<$_SESSION["glpisearchcount2"][$type];$i++) |
||
766 | if (isset($type2[$i])&&$type2[$i]>0&&isset($contains2[$i])&&strlen($contains2[$i])) { |
||
767 | $SELECT.=addSelect($type2[$i],$field2[$i],$i,1,$type2[$i]); |
||
768 | } |
||
769 | |||
770 | // b - ADD LEFT JOIN
|
||
771 | // Already link meta table in order not to linked a table several times
|
||
772 | $already_link_tables2=array(); |
||
773 | // Link reference tables
|
||
774 | for ($i=0;$i<$_SESSION["glpisearchcount2"][$type];$i++) |
||
775 | if (isset($type2[$i])&&$type2[$i]>0&&isset($contains2[$i])&&strlen($contains2[$i])) { |
||
776 | if (!in_array($LINK_ID_TABLE[$type2[$i]],$already_link_tables2)){ |
||
777 | $FROM.=addMetaLeftJoin($type,$type2[$i],$already_link_tables2, |
||
778 | (($contains2[$i]=="NULL")||(strstr($link2[$i],"NOT")))); |
||
779 | } |
||
780 | } |
||
781 | // Link items tables
|
||
782 | for ($i=0;$i<$_SESSION["glpisearchcount2"][$type];$i++) |
||
783 | if (isset($type2[$i])&&$type2[$i]>0&&isset($contains2[$i])&&strlen($contains2[$i])) { |
||
784 | if (!in_array($SEARCH_OPTION[$type2[$i]][$field2[$i]]["table"]."_".$type2[$i],$already_link_tables2)){ |
||
785 | $FROM.=addLeftJoin($type2[$i],$LINK_ID_TABLE[$type2[$i]],$already_link_tables2,$SEARCH_OPTION[$type2[$i]][$field2[$i]]["table"],$SEARCH_OPTION[$type2[$i]][$field2[$i]]["linkfield"],0,1,$type2[$i]); |
||
786 | } |
||
787 | |||
788 | } |
||
789 | |||
790 | } |
||
791 | |||
792 | |||
793 | //// 6 - Add item ID
|
||
794 | |||
795 | // Add ID to the select
|
||
796 | if (!empty($itemtable)){ |
||
797 | $SELECT.=$itemtable.".ID AS ID "; |
||
798 | } |
||
799 | |||
800 | //// 7 - Manage GROUP BY
|
||
801 | $GROUPBY=""; |
||
802 | // Meta Search / Search All / Count tickets
|
||
803 | if ($_SESSION["glpisearchcount2"][$type]>0||count($SEARCH_ALL)>0||in_array(60,$toview)){ |
||
804 | $GROUPBY=" GROUP BY $itemtable.ID"; |
||
805 | } |
||
806 | |||
807 | // GROUP BY plugin case : force group by
|
||
808 | if (empty($GROUPBY)){ |
||
809 | if ($type>1000){ |
||
810 | if (isset($PLUGIN_HOOKS['plugin_types'][$type])){ |
||
811 | $function='plugin_'.$PLUGIN_HOOKS['plugin_types'][$type].'_forceGroupBy'; |
||
812 | if (function_exists($function)){ |
||
813 | if ($function($type)){ |
||
814 | $GROUPBY=" GROUP BY $itemtable.ID"; |
||
815 | } |
||
816 | } |
||
817 | } |
||
818 | } else { // CORE type : display a plugin item needed forcegroupby ? |
||
819 | foreach ($toview as $key2 => $val2){ |
||
820 | if ($val2>1000 && isset($SEARCH_OPTION[$type][$val2]["forcegroupby"])){ |
||
821 | $GROUPBY=" GROUP BY $itemtable.ID"; |
||
822 | } |
||
823 | } |
||
824 | } |
||
825 | } |
||
826 | |||
827 | |||
828 | // Specific case of group by : multiple links with the reference table
|
||
829 | if (empty($GROUPBY)){ |
||
830 | foreach ($toview as $key2 => $val2){ |
||
831 | if (empty($GROUPBY)&&(($val2=="all") |
||
832 | ||($type==COMPUTER_TYPE&&ereg("glpi_device",$SEARCH_OPTION[$type][$val2]["table"])) |
||
833 | ||(ereg("glpi_contracts",$SEARCH_OPTION[$type][$val2]["table"])) |
||
834 | ||($SEARCH_OPTION[$type][$val2]["table"]=="glpi_licenses") |
||
835 | ||($SEARCH_OPTION[$type][$val2]["table"]=="glpi_networking_ports") |
||
836 | ||($SEARCH_OPTION[$type][$val2]["table"]=="glpi_dropdown_netpoint") |
||
837 | ||($SEARCH_OPTION[$type][$val2]["table"]=="glpi_registry") |
||
838 | ||($type==USER_TYPE) |
||
839 | ||($type==CONTACT_TYPE&&$SEARCH_OPTION[$type][$val2]["table"]=="glpi_enterprises") |
||
840 | ||($type==ENTERPRISE_TYPE&&$SEARCH_OPTION[$type][$val2]["table"]=="glpi_contacts") |
||
841 | )) |
||
842 | |||
843 | $GROUPBY=" GROUP BY $itemtable.ID "; |
||
844 | } |
||
845 | } |
||
846 | |||
847 | // Specific search define in META_SPECIF_TABLE : only for computer search (not meta search)
|
||
848 | if ($type==COMPUTER_TYPE){ |
||
849 | // For each real search item
|
||
850 | foreach($contains as $key => $val) |
||
851 | if (strlen($val)>0){ |
||
852 | // If not all and view search
|
||
853 | if ($field[$key]!="all"&&$field[$key]!="view"){ |
||
854 | foreach ($toview as $key2 => $val2){ |
||
855 | |||
856 | if (($val2==$field[$key])&&in_array($SEARCH_OPTION[$type][$val2]["table"],$META_SPECIF_TABLE)){ |
||
857 | if (!isset($link[$key])) { |
||
858 | $link[$key]="AND"; |
||
859 | } |
||
860 | |||
861 | $GROUPBY=addGroupByHaving($GROUPBY,$SEARCH_OPTION[$type][$field[$key]]["table"].".".$SEARCH_OPTION[$type][$field[$key]]["field"],strtolower($contains[$key]),$key2,0,$link[$key]); |
||
862 | } |
||
863 | } |
||
864 | } |
||
865 | } |
||
866 | } |
||
867 | |||
868 | $first=empty($WHERE); |
||
869 | |||
870 | // Specific search for others item linked (META search)
|
||
871 | if (is_array($type2)){ |
||
872 | for ($key=0;$key<$_SESSION["glpisearchcount2"][$type];$key++){ |
||
873 | if (isset($type2[$key])&&$type2[$key]>0&&isset($contains2[$key])&&strlen($contains2[$key])) |
||
874 | { |
||
875 | $LINK=""; |
||
876 | if (isset($link2[$key])) $LINK=$link2[$key]; |
||
877 | |||
878 | // For AND NOT statement need to take into account all the group by items
|
||
879 | if ($SEARCH_OPTION[$type2[$key]][$field2[$key]]["meta"]==1 || ereg("AND NOT",$link2[$key])){ |
||
880 | $GROUPBY=addGroupByHaving($GROUPBY,$SEARCH_OPTION[$type2[$key]][$field2[$key]]["table"].".".$SEARCH_OPTION[$type2[$key]][$field2[$key]]["field"],strtolower($contains2[$key]),$key,1,$LINK); |
||
881 | } else { // Meta Where Search |
||
882 | $LINK=" "; |
||
883 | $NOT=0; |
||
884 | // Manage Link if not first item
|
||
885 | if (!$first) { |
||
886 | if (is_array($link2)&&isset($link2[$key])&&ereg("NOT",$link2[$key])){ |
||
887 | $LINK=" ".ereg_replace(" NOT","",$link2[$key]); |
||
888 | $NOT=1; |
||
889 | } |
||
890 | else if (is_array($link2)&&isset($link2[$key])) |
||
891 | $LINK=" ".$link2[$key]; |
||
892 | else $LINK=" AND "; |
||
893 | } |
||
894 | |||
895 | $WHERE.= addWhere($LINK,$NOT,$type2[$key],$field2[$key],$contains2[$key],1); |
||
896 | } |
||
897 | $first=false; |
||
898 | } |
||
899 | } |
||
900 | } |
||
901 | |||
902 | // If no research limit research to display item and compute number of item using simple request
|
||
903 | $nosearch=true; |
||
904 | for ($i=0;$i<$_SESSION["glpisearchcount"][$type];$i++) |
||
905 | if (isset($contains[$i])&&strlen($contains[$i])>0) $nosearch=false; |
||
906 | |||
907 | if ($_SESSION["glpisearchcount2"][$type]>0) |
||
908 | $nosearch=false; |
||
909 | |||
910 | $LIMIT=""; |
||
911 | $numrows=0; |
||
912 | //No search : count number of items using a simple count(ID) request and LIMIT search
|
||
913 | if ($nosearch) { |
||
914 | $LIMIT= " LIMIT $start, ".$LIST_LIMIT; |
||
915 | |||
916 | $query_num="SELECT count(DISTINCT $itemtable.ID) FROM ".$itemtable.$COMMONLEFTJOIN; |
||
917 | |||
918 | $first=true; |
||
919 | |||
920 | if (!empty($COMMONWHERE)){ |
||
921 | $LINK= " AND " ; |
||
922 | if ($first) {$LINK=" WHERE ";$first=false;} |
||
923 | $query_num.= $LINK.$COMMONWHERE; |
||
924 | } |
||
925 | |||
926 | // Union Search :
|
||
927 | if (isset($CFG_GLPI["union_search_type"][$type])){ |
||
928 | $tmpquery=$query_num; |
||
929 | $numrows=0; |
||
930 | foreach ($CFG_GLPI[$CFG_GLPI["union_search_type"][$type]] as $ctype){ |
||
931 | if (haveTypeRight($ctype,'r')){ |
||
932 | // No ref table case
|
||
933 | if (empty($LINK_ID_TABLE[$type])){ |
||
934 | $query_num=ereg_replace($CFG_GLPI["union_search_type"][$type],$LINK_ID_TABLE[$ctype],$tmpquery); |
||
935 | // State case :
|
||
936 | if ($type==STATE_TYPE){ |
||
937 | $query_num.=" AND ".$LINK_ID_TABLE[$ctype].".state > 0 "; |
||
938 | } |
||
939 | } else {// Ref table case |
||
940 | $replace="FROM ".$LINK_ID_TABLE[$type]." INNER JOIN ".$LINK_ID_TABLE[$ctype]." ON (".$LINK_ID_TABLE[$type].".id_device = ".$LINK_ID_TABLE[$ctype].".ID AND ".$LINK_ID_TABLE[$type].".device_type='$ctype')"; |
||
941 | $query_num=ereg_replace("FROM ".$CFG_GLPI["union_search_type"][$type],$replace,$tmpquery); |
||
942 | $query_num=ereg_replace($CFG_GLPI["union_search_type"][$type],$LINK_ID_TABLE[$ctype],$query_num); |
||
943 | } |
||
944 | // Union/Recursivity Hack
|
||
945 | if (isset($CFG_GLPI["recursive_type"][$ctype])) { |
||
946 | $query_num=ereg_replace("ENTITYRESTRICT",getEntitiesRestrictRequest('',$LINK_ID_TABLE[$ctype],'','',true),$query_num); |
||
947 | } else {
|
||
948 | $query_num=ereg_replace("ENTITYRESTRICT",getEntitiesRestrictRequest('',$LINK_ID_TABLE[$ctype]),$query_num); |
||
949 | } |
||
950 | $result_num = $DB->query($query_num); |
||
951 | $numrows+= $DB->result($result_num,0,0); |
||
952 | } |
||
953 | } |
||
954 | } else {
|
||
955 | |||
956 | $result_num = $DB->query($query_num); |
||
957 | $numrows= $DB->result($result_num,0,0); |
||
958 | } |
||
959 | } |
||
960 | |||
961 | // If export_all reset LIMIT condition
|
||
962 | if (isset($_GET['export_all'])) $LIMIT=""; |
||
963 | |||
964 | |||
965 | if (!empty($WHERE)||!empty($COMMONWHERE)){ |
||
966 | if (!empty($COMMONWHERE)){ |
||
967 | $WHERE=' WHERE '.$COMMONWHERE.(!empty($WHERE)?' AND ( '.$WHERE.' )':''); |
||
968 | } else {
|
||
969 | $WHERE=' WHERE '.$WHERE.' '; |
||
970 | } |
||
971 | $first=false; |
||
972 | } |
||
973 | |||
974 | $DB->query("SET SESSION group_concat_max_len = 9999999;"); |
||
975 | |||
976 | // Create QUERY
|
||
977 | if (isset($CFG_GLPI["union_search_type"][$type])){ |
||
978 | $first=true; |
||
979 | $QUERY=""; |
||
980 | foreach ($CFG_GLPI[$CFG_GLPI["union_search_type"][$type]] as $ctype){ |
||
981 | if (haveTypeRight($ctype,'r')){ |
||
982 | if ($first){ |
||
983 | $first=false; |
||
984 | } else {
|
||
985 | $QUERY.=" UNION "; |
||
986 | } |
||
987 | $tmpquery=""; |
||
988 | // No ref table case
|
||
989 | if (empty($LINK_ID_TABLE[$type])){ |
||
990 | $tmpquery=$SELECT.", $ctype AS TYPE ".$FROM.$WHERE; |
||
991 | $tmpquery=ereg_replace($CFG_GLPI["union_search_type"][$type],$LINK_ID_TABLE[$ctype],$tmpquery); |
||
992 | // State case :
|
||
993 | if ($type==STATE_TYPE){ |
||
994 | $tmpquery.=" AND ".$LINK_ID_TABLE[$ctype].".state > 0 "; |
||
995 | } |
||
996 | } else {// Ref table case |
||
997 | $tmpquery=$SELECT.", $ctype AS TYPE, ".$LINK_ID_TABLE[$type].".ID AS refID ".$FROM.$WHERE; |
||
998 | $replace="FROM ".$LINK_ID_TABLE[$type]." INNER JOIN ".$LINK_ID_TABLE[$ctype]." ON (".$LINK_ID_TABLE[$type].".id_device = ".$LINK_ID_TABLE[$ctype].".ID AND ".$LINK_ID_TABLE[$type].".device_type='$ctype')"; |
||
999 | $tmpquery=ereg_replace("FROM ".$CFG_GLPI["union_search_type"][$type],$replace,$tmpquery); |
||
1000 | $tmpquery=ereg_replace($CFG_GLPI["union_search_type"][$type],$LINK_ID_TABLE[$ctype],$tmpquery); |
||
1001 | } |
||
1002 | // Union/Recursivity Hack
|
||
1003 | if (isset($CFG_GLPI["recursive_type"][$ctype])) { |
||
1004 | $tmpquery=ereg_replace("ENTITYRESTRICT",getEntitiesRestrictRequest('',$LINK_ID_TABLE[$ctype],'','',true),$tmpquery); |
||
1005 | } else {
|
||
1006 | $tmpquery=ereg_replace("ENTITYRESTRICT",getEntitiesRestrictRequest('',$LINK_ID_TABLE[$ctype]),$tmpquery); |
||
1007 | } |
||
1008 | // SOFTWARE HACK
|
||
1009 | if ($ctype==SOFTWARE_TYPE){ |
||
1010 | $tmpquery=ereg_replace("glpi_software.serial","''",$tmpquery); |
||
1011 | $tmpquery=ereg_replace("glpi_software.otherserial","''",$tmpquery); |
||
1012 | } |
||
1013 | |||
1014 | $QUERY.=$tmpquery; |
||
1015 | } |
||
1016 | } |
||
1017 | if (empty($QUERY)){ |
||
1018 | echo displaySearchError($output_type); |
||
1019 | return;
|
||
1020 | } |
||
1021 | $QUERY.=ereg_replace($CFG_GLPI["union_search_type"][$type].".","",$ORDER).$LIMIT; |
||
1022 | } else {
|
||
1023 | $QUERY=$SELECT.$FROM.$WHERE.$GROUPBY.$ORDER.$LIMIT; |
||
1024 | } |
||
1025 | |||
1026 | // echo $QUERY."<br>\n";
|
||
1027 | |||
1028 | // Get it from database and DISPLAY
|
||
1029 | if ($result = $DB->query($QUERY)) { |
||
1030 | |||
1031 | // if real search or complete export : get numrows from request
|
||
1032 | if (!$nosearch||isset($_GET['export_all'])) |
||
1033 | $numrows= $DB->numrows($result); |
||
1034 | |||
1035 | // Contruct Pager parameters
|
||
1036 | $globallinkto=getMultiSearchItemForLink("field",$field).getMultiSearchItemForLink("link",$link).getMultiSearchItemForLink("contains",$contains).getMultiSearchItemForLink("field2",$field2).getMultiSearchItemForLink("contains2",$contains2).getMultiSearchItemForLink("type2",$type2).getMultiSearchItemForLink("link2",$link2); |
||
1037 | |||
1038 | $parameters="sort=$sort&order=$order".$globallinkto; |
||
1039 | |||
1040 | |||
1041 | if ($output_type==GLOBAL_SEARCH){ |
||
1042 | $ci = new CommonItem(); |
||
1043 | $ci->setType($type); |
||
1044 | echo "<div class='center'><h2>".$ci->getType($type); |
||
1045 | // More items
|
||
1046 | if ($numrows>$start+GLOBAL_SEARCH_DISPLAY_COUNT){ |
||
1047 | echo " <a href='$target?$parameters'>".$LANG["common"][66]."</a>"; |
||
1048 | } |
||
1049 | echo "</h2></div>"; |
||
1050 | } |
||
1051 | |||
1052 | |||
1053 | // If the begin of the view is before the number of items
|
||
1054 | if ($start<$numrows) { |
||
1055 | |||
1056 | // Display pager only for HTML
|
||
1057 | if ($output_type==HTML_OUTPUT){ |
||
1058 | |||
1059 | // For plugin add new parameter if available
|
||
1060 | if ($type>1000){ |
||
1061 | if (isset($PLUGIN_HOOKS['plugin_types'][$type])){ |
||
1062 | |||
1063 | $function='plugin_'.$PLUGIN_HOOKS['plugin_types'][$type].'_addParamFordynamicReport'; |
||
1064 | |||
1065 | if (function_exists($function)){ |
||
1066 | $out=$function($type); |
||
1067 | if (is_array($out)&&count($out)){ |
||
1068 | foreach ($out as $key => $val){ |
||
1069 | if (is_array($val)){ |
||
1070 | $parameters.=getMultiSearchItemForLink($key,$val); |
||
1071 | } else {
|
||
1072 | $parameters.="&$key=$val"; |
||
1073 | } |
||
1074 | } |
||
1075 | } |
||
1076 | } |
||
1077 | } |
||
1078 | } |
||
1079 | printPager($start,$numrows,$target,$parameters,$type); |
||
1080 | } |
||
1081 | |||
1082 | // Form to massive actions
|
||
1083 | $isadmin=(haveTypeRight($type,"w")||(in_array($type,$CFG_GLPI["infocom_types"])&&haveTypeRight(INFOCOM_TYPE,"w"))); |
||
1084 | |||
1085 | if ($isadmin&&$output_type==HTML_OUTPUT){ |
||
1086 | echo "<form method='post' name='massiveaction_form' id='massiveaction_form' action=\"".$CFG_GLPI["root_doc"]."/front/massiveaction.php\">"; |
||
1087 | } |
||
1088 | |||
1089 | // Compute number of columns to display
|
||
1090 | // Add toview elements
|
||
1091 | $nbcols=$toview_count; |
||
1092 | // Add meta search elements if real search (strlen>0) or only NOT search
|
||
1093 | if ($_SESSION["glpisearchcount2"][$type]>0&&is_array($type2)) |
||
1094 | for ($i=0;$i<$_SESSION["glpisearchcount2"][$type];$i++) |
||
1095 | if (isset($type2[$i])&&isset($contains2[$i])&&strlen($contains2[$i])>0&&$type2[$i]>0&&(!isset($link2[$i])||!ereg("NOT",$link2[$i]))) { |
||
1096 | $nbcols++;
|
||
1097 | } |
||
1098 | |||
1099 | if ($output_type==HTML_OUTPUT)// HTML display - massive modif |
||
1100 | $nbcols++;
|
||
1101 | |||
1102 | // Define begin and end var for loop
|
||
1103 | // Search case
|
||
1104 | $begin_display=$start; |
||
1105 | $end_display=$start+$LIST_LIMIT; |
||
1106 | // No search Case
|
||
1107 | if ($nosearch){ |
||
1108 | $begin_display=0; |
||
1109 | $end_display=min($numrows-$start,$LIST_LIMIT); |
||
1110 | } |
||
1111 | // Export All case
|
||
1112 | if (isset($_GET['export_all'])) { |
||
1113 | $begin_display=0; |
||
1114 | $end_display=$numrows; |
||
1115 | } |
||
1116 | |||
1117 | |||
1118 | // Display List Header
|
||
1119 | echo displaySearchHeader($output_type,$end_display-$begin_display+1,$nbcols); |
||
1120 | // New Line for Header Items Line
|
||
1121 | echo displaySearchNewLine($output_type); |
||
1122 | $header_num=1; |
||
1123 | |||
1124 | if ($output_type==HTML_OUTPUT){// HTML display - massive modif |
||
1125 | $search_config=""; |
||
1126 | if (haveRight("search_config","w")||haveRight("search_config_global","w")){ |
||
1127 | $tmp= " class='pointer' onClick=\"var w = window.open('".$CFG_GLPI["root_doc"]."/front/popup.php?popup=search_config&type=$type' ,'glpipopup', 'height=400, width=1000, top=100, left=100, scrollbars=yes' ); w.focus();\""; |
||
1128 | |||
1129 | $search_config= "<img alt='".$LANG["setup"][252]."' title='".$LANG["setup"][252]."' src='".$CFG_GLPI["root_doc"]."/pics/options_search.png' "; |
||
1130 | $search_config.=$tmp.">"; |
||
1131 | //$search_config.= "<img alt='".$LANG["buttons"][6]."' title='".$LANG["buttons"][6]."' src='".$CFG_GLPI["root_doc"]."/pics/moins.png' ";
|
||
1132 | //$search_config.=$tmp.">";
|
||
1133 | } |
||
1134 | |||
1135 | echo displaySearchHeaderItem($output_type,$search_config,$header_num,"",0,$order); |
||
1136 | } |
||
1137 | |||
1138 | // Display column Headers for toview items
|
||
1139 | foreach ($toview as $key => $val){ |
||
1140 | $linkto="$target?sort=".$val."&order=".($order=="ASC"?"DESC":"ASC")."&start=$start".$globallinkto; |
||
1141 | echo displaySearchHeaderItem($output_type,$SEARCH_OPTION[$type][$val]["name"],$header_num,$linkto,$sort==$val,$order); |
||
1142 | } |
||
1143 | |||
1144 | // Display columns Headers for meta items
|
||
1145 | if ($_SESSION["glpisearchcount2"][$type]>0&&is_array($type2)) |
||
1146 | for ($i=0;$i<$_SESSION["glpisearchcount2"][$type];$i++) |
||
1147 | if (isset($type2[$i])&&$type2[$i]>0&&isset($contains2[$i])&&strlen($contains2[$i])&&(!isset($link2[$i]) |
||
1148 | ||(!ereg("NOT",$link2[$i]) || $contains2[$i]=="NULL"))) { |
||
1149 | echo displaySearchHeaderItem($output_type,$names[$type2[$i]]." - ".$SEARCH_OPTION[$type2[$i]][$field2[$i]]["name"],$header_num); |
||
1150 | } |
||
1151 | // Add specific column Header
|
||
1152 | if ($type==SOFTWARE_TYPE) |
||
1153 | echo displaySearchHeaderItem($output_type,$LANG["software"][11],$header_num); |
||
1154 | if ($type==CARTRIDGE_TYPE) |
||
1155 | echo displaySearchHeaderItem($output_type,$LANG["cartridges"][0],$header_num); |
||
1156 | if ($type==CONSUMABLE_TYPE) |
||
1157 | echo displaySearchHeaderItem($output_type,$LANG["consumables"][0],$header_num); |
||
1158 | if ($type==STATE_TYPE||$type==RESERVATION_TYPE){ |
||
1159 | echo displaySearchHeaderItem($output_type,$LANG["state"][6],$header_num); |
||
1160 | $ci = new CommonItem(); |
||
1161 | |||
1162 | } |
||
1163 | if ($type==RESERVATION_TYPE&&$output_type==HTML_OUTPUT){ |
||
1164 | if (haveRight("reservation_central","w")){ |
||
1165 | echo displaySearchHeaderItem($output_type," ",$header_num); |
||
1166 | echo displaySearchHeaderItem($output_type," ",$header_num); |
||
1167 | } |
||
1168 | echo displaySearchHeaderItem($output_type," ",$header_num); |
||
1169 | } |
||
1170 | // End Line for column headers
|
||
1171 | echo displaySearchEndLine($output_type); |
||
1172 | |||
1173 | // if real search seek to begin of items to display (because of complete search)
|
||
1174 | if (!$nosearch) |
||
1175 | $DB->data_seek($result,$start); |
||
1176 | |||
1177 | // Define begin and end var for loop
|
||
1178 | // Search case
|
||
1179 | $i=$begin_display; |
||
1180 | |||
1181 | // Num of the row (1=header_line)
|
||
1182 | $row_num=1; |
||
1183 | // Display Loop
|
||
1184 | while ($i < $numrows && $i<($end_display)){ |
||
1185 | // Column num
|
||
1186 | $item_num=1; |
||
1187 | // Get data and increment loop variables
|
||
1188 | $data=$DB->fetch_assoc($result); |
||
1189 | $i++;
|
||
1190 | $row_num++;
|
||
1191 | // New line
|
||
1192 | echo displaySearchNewLine($output_type,($i%2)); |
||
1193 | |||
1194 | |||
1195 | if ($output_type==HTML_OUTPUT){// HTML display - massive modif |
||
1196 | $tmpcheck=""; |
||
1197 | if ($isadmin){ |
||
1198 | if (isset($CFG_GLPI["recursive_type"][$type]) && !in_array($data["FK_entities"],$_SESSION["glpiactiveentities"])) { |
||
1199 | echo " "; |
||
1200 | } else {
|
||
1201 | $sel=""; |
||
1202 | if (isset($_GET["select"])&&$_GET["select"]=="all") { |
||
1203 | $sel="checked"; |
||
1204 | } |
||
1205 | if (isset($_SESSION['glpimassiveactionselected'][$data["ID"]])){ |
||
1206 | $sel="checked"; |
||
1207 | } |
||
1208 | $tmpcheck="<input type='checkbox' name='item[".$data["ID"]."]' value='1' $sel>"; |
||
1209 | } |
||
1210 | } |
||
1211 | echo displaySearchItem($output_type,$tmpcheck,$item_num,$row_num,"width='10'"); |
||
1212 | } |
||
1213 | |||
1214 | // Print first element - specific case for user
|
||
1215 | echo displaySearchItem($output_type,giveItem($type,$SEARCH_OPTION[$type][1]["table"].".".$SEARCH_OPTION[$type][1]["field"],$data,0,$SEARCH_OPTION[$type][1]["linkfield"]),$item_num,$row_num,displayConfigItem($type,$SEARCH_OPTION[$type][1]["table"].".".$SEARCH_OPTION[$type][1]["field"])); |
||
1216 | |||
1217 | // Print other toview items
|
||
1218 | foreach ($toview as $key => $val){ |
||
1219 | // Do not display first item
|
||
1220 | if ($key>0){ |
||
1221 | echo displaySearchItem($output_type,giveItem($type,$SEARCH_OPTION[$type][$val]["table"].".".$SEARCH_OPTION[$type][$val]["field"],$data,$key,$SEARCH_OPTION[$type][$val]["linkfield"]),$item_num,$row_num,displayConfigItem($type,$SEARCH_OPTION[$type][$val]["table"].".".$SEARCH_OPTION[$type][$val]["field"])); |
||
1222 | } |
||
1223 | } |
||
1224 | |||
1225 | // Print Meta Item
|
||
1226 | if ($_SESSION["glpisearchcount2"][$type]>0&&is_array($type2)) |
||
1227 | for ($j=0;$j<$_SESSION["glpisearchcount2"][$type];$j++) |
||
1228 | if (isset($type2[$j])&&$type2[$j]>0&&isset($contains2[$j])&&strlen($contains2[$j])&&(!isset($link2[$j]) |
||
1229 | ||(!ereg("NOT",$link2[$j]) || $contains2[$j]=="NULL"))){ |
||
1230 | |||
1231 | // General case
|
||
1232 | if (strpos($data["META_$j"],"$$$$")===false){ |
||
1233 | echo displaySearchItem($output_type,$data["META_$j"],$item_num,$row_num); |
||
1234 | // Case of GROUP_CONCAT item : split item and multilline display
|
||
1235 | } else {
|
||
1236 | $split=explode("$$$$",$data["META_$j"]); |
||
1237 | $count_display=0; |
||
1238 | $out=""; |
||
1239 | for ($k=0;$k<count($split);$k++) |
||
1240 | if ($contains2[$j]=="NULL"||(strlen($contains2[$j])==0 |
||
1241 | ||preg_match('/'.$contains2[$j].'/i',$split[$k]) |
||
1242 | )){ |
||
1243 | |||
1244 | if ($count_display) $out.= "<br>"; |
||
1245 | $count_display++;
|
||
1246 | $out.= $split[$k]; |
||
1247 | } |
||
1248 | echo displaySearchItem($output_type,$out,$item_num,$row_num); |
||
1249 | |||
1250 | } |
||
1251 | } |
||
1252 | // Specific column display
|
||
1253 | if ($type==CARTRIDGE_TYPE){ |
||
1254 | echo displaySearchItem($output_type,countCartridges($data["ID"],$data["ALARM"],$output_type),$item_num,$row_num); |
||
1255 | } |
||
1256 | if ($type==SOFTWARE_TYPE){ |
||
1257 | echo displaySearchItem($output_type,countInstallations($data["ID"],$output_type),$item_num,$row_num); |
||
1258 | } |
||
1259 | if ($type==CONSUMABLE_TYPE){ |
||
1260 | echo displaySearchItem($output_type,countConsumables($data["ID"],$data["ALARM"],$output_type),$item_num,$row_num); |
||
1261 | } |
||
1262 | if ($type==STATE_TYPE||$type==RESERVATION_TYPE){ |
||
1263 | $ci->setType($data["TYPE"]); |
||
1264 | echo displaySearchItem($output_type,$ci->getType(),$item_num,$row_num); |
||
1265 | } |
||
1266 | if ($type==RESERVATION_TYPE&&$output_type==HTML_OUTPUT){ |
||
1267 | if (haveRight("reservation_central","w")){ |
||
1268 | if ($data["ACTIVE"]){ |
||
1269 | echo displaySearchItem($output_type,"<a href=\"".$CFG_GLPI["root_doc"]."/front/reservation.php?ID=".$data["refID"]."&active=0\" title='".$LANG["buttons"][42]."'><img src=\"".$CFG_GLPI["root_doc"]."/pics/moins.png\" alt='' title=''></a>",$item_num,$row_num,"class='center'"); |
||
1270 | } else {
|
||
1271 | echo displaySearchItem($output_type,"<a href=\"".$CFG_GLPI["root_doc"]."/front/reservation.php?ID=".$data["refID"]."&active=1\" title='".$LANG["buttons"][41]."'><img src=\"".$CFG_GLPI["root_doc"]."/pics/plus.png\" alt='' title=''></a>",$item_num,$row_num,"class='center'"); |
||
1272 | } |
||
1273 | |||
1274 | echo displaySearchItem($output_type,"<a href=\"javascript:confirmAction('".addslashes($LANG["reservation"][38])."\\n".addslashes($LANG["reservation"][39])."','".$CFG_GLPI["root_doc"]."/front/reservation.php?ID=".$data["refID"]."&delete=delete')\" title='".$LANG["reservation"][6]."'><img src=\"".$CFG_GLPI["root_doc"]."/pics/delete.png\" alt='' title=''></a>",$item_num,$row_num,"class='center'"); |
||
1275 | } |
||
1276 | if ($data["ACTIVE"]){ |
||
1277 | echo displaySearchItem($output_type,"<a href='".$target."?show=resa&ID=".$data["refID"]."' title='".$LANG["reservation"][21]."'><img src=\"".$CFG_GLPI["root_doc"]."/pics/reservation-3.png\" alt='' title=''></a>",$item_num,$row_num,"class='center'"); |
||
1278 | } else {
|
||
1279 | echo displaySearchItem($output_type," ",$item_num,$row_num); |
||
1280 | } |
||
1281 | } |
||
1282 | // End Line
|
||
1283 | echo displaySearchEndLine($output_type); |
||
1284 | } |
||
1285 | $title=""; |
||
1286 | // Create title
|
||
1287 | if ($output_type==PDF_OUTPUT_LANDSCAPE || $output_type==PDF_OUTPUT_PORTRAIT){ |
||
1288 | if ($_SESSION["glpisearchcount"][$type]>0&&count($contains)>0) { |
||
1289 | for ($key=0;$key<$_SESSION["glpisearchcount"][$type];$key++){ |
||
1290 | if (strlen($contains[$key])){ |
||
1291 | if (isset($link[$key])) $title.=" ".$link[$key]." "; |
||
1292 | switch ($field[$key]){ |
||
1293 | case "all": |
||
1294 | $title.=$LANG["common"][66]; |
||
1295 | break;
|
||
1296 | case "view": |
||
1297 | $title.=$LANG["search"][11]; |
||
1298 | break;
|
||
1299 | default :
|
||
1300 | $title.=$SEARCH_OPTION[$type][$field[$key]]["name"]; |
||
1301 | break;
|
||
1302 | } |
||
1303 | $title.=" = ".$contains[$key]; |
||
1304 | } |
||
1305 | } |
||
1306 | } |
||
1307 | if ($_SESSION["glpisearchcount2"][$type]>0&&count($contains2)>0) { |
||
1308 | for ($key=0;$key<$_SESSION["glpisearchcount2"][$type];$key++){ |
||
1309 | if (strlen($contains2[$key])){ |
||
1310 | if (isset($link2[$key])) $title.=" ".$link2[$key]." "; |
||
1311 | $title.=$names[$type2[$key]]."/"; |
||
1312 | $title.=$SEARCH_OPTION[$type2[$key]][$field2[$key]]["name"]; |
||
1313 | $title.=" = ".$contains2[$key]; |
||
1314 | } |
||
1315 | } |
||
1316 | } |
||
1317 | } |
||
1318 | |||
1319 | // Display footer
|
||
1320 | echo displaySearchFooter($output_type,$title); |
||
1321 | |||
1322 | |||
1323 | // Delete selected item
|
||
1324 | if ($output_type==HTML_OUTPUT){ |
||
1325 | if ($isadmin){ |
||
1326 | |||
1327 | echo "<table width='80%'>"; |
||
1328 | echo "<tr><td><img src=\"".$CFG_GLPI["root_doc"]."/pics/arrow-left.png\" alt=''></td><td class='center'><a onclick= \"if ( markAllRows('massiveaction_form') ) return false;\" href='".$_SERVER['PHP_SELF']."?select=all' >".$LANG["buttons"][18]."</a></td>"; |
||
1329 | |||
1330 | echo "<td>/</td><td class='center'><a onclick= \"if ( unMarkAllRows('massiveaction_form') ) return false;\" href='".$_SERVER['PHP_SELF']."?select=none'>".$LANG["buttons"][19]."</a>"; |
||
1331 | echo "</td><td class='left' width='80%'>"; |
||
1332 | dropdownMassiveAction($type,$deleted); |
||
1333 | echo "</td>"; |
||
1334 | echo "</table>"; |
||
1335 | |||
1336 | |||
1337 | // End form for delete item
|
||
1338 | echo "</form>"; |
||
1339 | } else {
|
||
1340 | echo "<br>"; |
||
1341 | } |
||
1342 | } |
||
1343 | |||
1344 | if ($output_type==HTML_OUTPUT) // In case of HTML display |
||
1345 | printPager($start,$numrows,$target,$parameters); |
||
1346 | |||
1347 | } else {
|
||
1348 | echo displaySearchError($output_type); |
||
1349 | |||
1350 | } |
||
1351 | } else {
|
||
1352 | echo $DB->error(); |
||
1353 | } |
||
1354 | // Clean selection
|
||
1355 | $_SESSION['glpimassiveactionselected']=array(); |
||
1356 | } |
||
1357 | |||
1358 | |||
1359 | |||
1360 | /**
|
||
1361 | * Generic Function to add GROUP BY to a request
|
||
1362 | *
|
||
1363 | *
|
||
1364 | *@param $field field to add
|
||
1365 | *@param $GROUPBY group by strign to complete
|
||
1366 | *@param $val value search
|
||
1367 | *@param $num item number
|
||
1368 | *@param $meta is it a meta item ?
|
||
1369 | *@param $link link to use
|
||
1370 | *
|
||
1371 | *
|
||
1372 | *@return select string
|
||
1373 | *
|
||
1374 | **/
|
||
1375 | function addGroupByHaving($GROUPBY,$field,$val,$num,$meta=0,$link=""){ |
||
1376 | |||
1377 | $NOT=0; |
||
1378 | if (ereg("NOT",$link)){ |
||
1379 | $NOT=1; |
||
1380 | $link=ereg_replace(" NOT","",$link); |
||
1381 | } |
||
1382 | |||
1383 | if (empty($link)) $link="AND"; |
||
1384 | |||
1385 | $NAME="ITEM_"; |
||
1386 | if ($meta) $NAME="META_"; |
||
1387 | |||
1388 | if (!ereg("GROUP BY ID",$GROUPBY)) $GROUPBY=" GROUP BY ID "; |
||
1389 | |||
1390 | if (ereg("HAVING",$GROUPBY)) $GROUPBY.=" ".$link." "; |
||
1391 | else $GROUPBY.=" HAVING "; |
||
1392 | |||
1393 | switch ($field){ |
||
1394 | case "glpi_tracking.count" : |
||
1395 | $search=array("/\</","/\>/"); |
||
1396 | $replace=array("<",">"); |
||
1397 | $val=preg_replace($search,$replace,$val); |
||
1398 | |||
1399 | if (ereg("([<>])([=]*)[[:space:]]*([0-9]*)",$val,$regs)){ |
||
1400 | if ($NOT){ |
||
1401 | if ($regs[1]=='<') { |
||
1402 | $regs[1]='>'; |
||
1403 | } else {
|
||
1404 | $regs[1]='<'; |
||
1405 | } |
||
1406 | } |
||
1407 | $regs[1].=$regs[2]; |
||
1408 | $GROUPBY.= " ($NAME$num ".$regs[1]." ".$regs[3]." ) "; |
||
1409 | } else {
|
||
1410 | if (!$NOT){ |
||
1411 | $GROUPBY.=" ( $NAME$num = ".(intval($val)).") "; |
||
1412 | } else {
|
||
1413 | $GROUPBY.=" ( $NAME$num <> ".(intval($val)).") "; |
||
1414 | } |
||
1415 | } |
||
1416 | break;
|
||
1417 | case "glpi_device_ram.specif_default" : |
||
1418 | case "glpi_device_processor.specif_default" : |
||
1419 | case "glpi_device_hdd.specif_default" : |
||
1420 | $search=array("/\</","/\>/"); |
||
1421 | $replace=array("<",">"); |
||
1422 | $val=preg_replace($search,$replace,$val); |
||
1423 | if (ereg("([<>])([=]*)[[:space:]]*([0-9]*)",$val,$regs)){ |
||
1424 | if ($NOT){ |
||
1425 | if ($regs[1]=='<') { |
||
1426 | $regs[1]='>'; |
||
1427 | } else {
|
||
1428 | $regs[1]='<'; |
||
1429 | } |
||
1430 | } |
||
1431 | $regs[1].=$regs[2]; |
||
1432 | $GROUPBY.= " ($NAME$num ".$regs[1]." ".$regs[3]." ) "; |
||
1433 | } else {
|
||
1434 | if ($field=="glpi_device_hdd.specif_default"){ |
||
1435 | $larg=1000; |
||
1436 | } else {
|
||
1437 | $larg=100; |
||
1438 | } |
||
1439 | if (!$NOT){ |
||
1440 | $GROUPBY.=" ( $NAME$num < ".(intval($val)+$larg)." AND $NAME$num > ".(intval($val)-$larg)." ) "; |
||
1441 | } else {
|
||
1442 | $GROUPBY.=" ( $NAME$num > ".(intval($val)+$larg)." OR $NAME$num < ".(intval($val)-$larg)." ) "; |
||
1443 | } |
||
1444 | } |
||
1445 | break;
|
||
1446 | default :
|
||
1447 | $ADD=""; |
||
1448 | if (($NOT&&$val!="NULL")||$val=='^$') { |
||
1449 | $ADD=" OR $NAME$num IS NULL"; |
||
1450 | } |
||
1451 | |||
1452 | $GROUPBY.= " ( ".$NAME.$num.makeTextSearch($val,$NOT)." $ADD ) "; |
||
1453 | |||
1454 | break;
|
||
1455 | } |
||
1456 | |||
1457 | return $GROUPBY; |
||
1458 | } |
||
1459 | |||
1460 | /**
|
||
1461 | * Generic Function to add ORDER BY to a request
|
||
1462 | *
|
||
1463 | *
|
||
1464 | *@param $type ID of the device type
|
||
1465 | *@param $ID field to add
|
||
1466 | *@param $order order define
|
||
1467 | *@param $key item number
|
||
1468 | *
|
||
1469 | *
|
||
1470 | *@return select string
|
||
1471 | *
|
||
1472 | **/
|
||
1473 | function addOrderBy($type,$ID,$order,$key=0){ |
||
1474 | global $SEARCH_OPTION,$CFG_GLPI,$PLUGIN_HOOKS; |
||
1475 | |||
1476 | $table=$SEARCH_OPTION[$type][$ID]["table"]; |
||
1477 | $field=$SEARCH_OPTION[$type][$ID]["field"]; |
||
1478 | $linkfield=$SEARCH_OPTION[$type][$ID]["linkfield"]; |
||
1479 | |||
1480 | |||
1481 | if (isset($CFG_GLPI["union_search_type"][$type])){ |
||
1482 | return " ORDER BY ITEM_$key $order "; |
||
1483 | } |
||
1484 | |||
1485 | // Plugin can overirde core definition for its type
|
||
1486 | if ($type>1000){ |
||
1487 | if (isset($PLUGIN_HOOKS['plugin_types'][$type])){ |
||
1488 | $function='plugin_'.$PLUGIN_HOOKS['plugin_types'][$type].'_addOrderBy'; |
||
1489 | if (function_exists($function)){ |
||
1490 | $out=$function($type,$ID,$order,$key); |
||
1491 | if (!empty($out)){ |
||
1492 | return $out; |
||
1493 | } |
||
1494 | } |
||
1495 | } |
||
1496 | } |
||
1497 | |||
1498 | |||
1499 | switch($table.".".$field){ |
||
1500 | case "glpi_device_hdd.specif_default" : |
||
1501 | case "glpi_device_ram.specif_default" : |
||
1502 | case "glpi_device_processor.specif_default" : |
||
1503 | case "glpi_tracking.count" : |
||
1504 | return " ORDER BY ITEM_$key $order "; |
||
1505 | break;
|
||
1506 | case "glpi_auth_tables.name" : |
||
1507 | return " ORDER BY glpi_users.auth_method, glpi_auth_ldap.name, glpi_auth_mail.name $order "; |
||
1508 | break;
|
||
1509 | case "glpi_contracts.end_date": |
||
1510 | return " ORDER BY ADDDATE(glpi_contracts.begin_date, INTERVAL glpi_contracts.duration MONTH) $order "; |
||
1511 | break;
|
||
1512 | case "glpi_infocoms.end_warranty": |
||
1513 | return " ORDER BY ADDDATE(glpi_infocoms.buy_date, INTERVAL glpi_infocoms.warranty_duration MONTH) $order "; |
||
1514 | break;
|
||
1515 | case "glpi_contracts.expire": |
||
1516 | return " ORDER BY ADDDATE(glpi_contracts.begin_date, INTERVAL glpi_contracts.duration MONTH) $order "; |
||
1517 | break;
|
||
1518 | case "glpi_contracts.expire_notice": |
||
1519 | return " ORDER BY ADDDATE(glpi_contracts.begin_date, INTERVAL (glpi_contracts.duration-glpi_contracts.notice) MONTH) $order "; |
||
1520 | break;
|
||
1521 | case "glpi_users.name" : |
||
1522 | $linkfield=""; |
||
1523 | if (!empty($SEARCH_OPTION[$type][$ID]["linkfield"])){ |
||
1524 | $linkfield="_".$SEARCH_OPTION[$type][$ID]["linkfield"]; |
||
1525 | } |
||
1526 | if ($type==USER_TYPE){ |
||
1527 | return " ORDER BY ".$table.$linkfield.".$field $order"; |
||
1528 | } else {
|
||
1529 | return " ORDER BY ".$table.$linkfield.".realname $order, ".$table.$linkfield.".firstname $order, ".$table.$linkfield.".name $order"; |
||
1530 | } |
||
1531 | break;
|
||
1532 | case "glpi_networking_ports.ifaddr" : |
||
1533 | return " ORDER BY INET_ATON($table.$field) $order "; |
||
1534 | break;
|
||
1535 | default:
|
||
1536 | |||
1537 | |||
1538 | // Link with plugin tables
|
||
1539 | if ($type<=1000){ |
||
1540 | if (preg_match("/^glpi_plugin_([a-zA-Z]+)/", $table, $matches) |
||
1541 | || preg_match("/^glpi_dropdown_plugin_([a-zA-Z]+)/", $table, $matches) ){ |
||
1542 | if (count($matches)==2){ |
||
1543 | $plug=$matches[1]; |
||
1544 | |||
1545 | |||
1546 | $function='plugin_'.$plug.'_addOrderBy'; |
||
1547 | if (function_exists($function)){ |
||
1548 | $out=$function($type,$ID,$order,$key); |
||
1549 | if (!empty($out)){ |
||
1550 | return $out; |
||
1551 | } |
||
1552 | } |
||
1553 | } |
||
1554 | } |
||
1555 | } |
||
1556 | |||
1557 | |||
1558 | return " ORDER BY $table.$field $order "; |
||
1559 | break;
|
||
1560 | } |
||
1561 | |||
1562 | } |
||
1563 | |||
1564 | /**
|
||
1565 | * Generic Function to add default columns to view
|
||
1566 | *
|
||
1567 | *
|
||
1568 | *@param $type device type
|
||
1569 | *
|
||
1570 | *
|
||
1571 | *@return select string
|
||
1572 | *
|
||
1573 | **/
|
||
1574 | function addDefaultToView ($type){ |
||
1575 | global $CFG_GLPI; |
||
1576 | |||
1577 | $toview=array(); |
||
1578 | |||
1579 | // Add first element (name)
|
||
1580 | array_push($toview,1); |
||
1581 | |||
1582 | // Add entity view :
|
||
1583 | if (isMultiEntitiesMode() && (isset($CFG_GLPI["union_search_type"][$type]) || isset($CFG_GLPI["recursive_type"][$type]) || count($_SESSION["glpiactiveentities"])>1)) { |
||
1584 | array_push($toview,80); |
||
1585 | } |
||
1586 | return $toview; |
||
1587 | } |
||
1588 | |||
1589 | |||
1590 | /**
|
||
1591 | * Generic Function to add default select to a request
|
||
1592 | *
|
||
1593 | *
|
||
1594 | *@param $type device type
|
||
1595 | *
|
||
1596 | *
|
||
1597 | *@return select string
|
||
1598 | *
|
||
1599 | **/
|
||
1600 | function addDefaultSelect ($type){ |
||
1601 | global $CFG_GLPI, $LINK_ID_TABLE; |
||
1602 | |||
1603 | switch ($type){ |
||
1604 | case RESERVATION_TYPE: |
||
1605 | $ret = "glpi_reservation_item.active as ACTIVE, "; |
||
1606 | break;
|
||
1607 | case CARTRIDGE_TYPE: |
||
1608 | $ret = "glpi_cartridges_type.alarm as ALARM, "; |
||
1609 | break;
|
||
1610 | case CONSUMABLE_TYPE: |
||
1611 | $ret = "glpi_consumables_type.alarm as ALARM, "; |
||
1612 | break;
|
||
1613 | default :
|
||
1614 | $ret = ""; |
||
1615 | break;
|
||
1616 | } |
||
1617 | if (isset($CFG_GLPI["recursive_type"][$type])) { |
||
1618 | $ret .= $LINK_ID_TABLE[$type].".FK_entities, ".$LINK_ID_TABLE[$type].".recursive, "; |
||
1619 | } |
||
1620 | return $ret; |
||
1621 | } |
||
1622 | |||
1623 | /**
|
||
1624 | * Generic Function to add select to a request
|
||
1625 | *
|
||
1626 | *
|
||
1627 | *@param $ID ID of the item to add
|
||
1628 | *@param $num item num in the request
|
||
1629 | *@param $type device type
|
||
1630 | *@param $meta is it a meta item ?
|
||
1631 | *@param $meta_type meta type table ID
|
||
1632 | *
|
||
1633 | *
|
||
1634 | *@return select string
|
||
1635 | *
|
||
1636 | **/
|
||
1637 | function addSelect ($type,$ID,$num,$meta=0,$meta_type=0){ |
||
1638 | global $LINK_ID_TABLE,$SEARCH_OPTION,$PLUGIN_HOOKS; |
||
1639 | |||
1640 | $table=$SEARCH_OPTION[$type][$ID]["table"]; |
||
1641 | $field=$SEARCH_OPTION[$type][$ID]["field"]; |
||
1642 | $addtable=""; |
||
1643 | $NAME="ITEM"; |
||
1644 | if ($meta) { |
||
1645 | $NAME="META"; |
||
1646 | if ($LINK_ID_TABLE[$meta_type]!=$table) |
||
1647 | $addtable="_".$meta_type; |
||
1648 | } |
||
1649 | |||
1650 | // Plugin can override core definition for its type
|
||
1651 | if ($type>1000){ |
||
1652 | if (isset($PLUGIN_HOOKS['plugin_types'][$type])){ |
||
1653 | $function='plugin_'.$PLUGIN_HOOKS['plugin_types'][$type].'_addSelect'; |
||
1654 | if (function_exists($function)){ |
||
1655 | $out=$function($type,$ID,$num); |
||
1656 | if (!empty($out)){ |
||
1657 | return $out; |
||
1658 | } |
||
1659 | } |
||
1660 | } |
||
1661 | } |
||
1662 | |||
1663 | |||
1664 | switch ($table.".".$field){ |
||
1665 | case "glpi_software.name" : |
||
1666 | case "glpi_computers.name" : |
||
1667 | case "glpi_printers.name" : |
||
1668 | case "glpi_networking.name" : |
||
1669 | case "glpi_phones.name" : |
||
1670 | case "glpi_monitors.name" : |
||
1671 | case "glpi_peripherals.name" : |
||
1672 | case "glpi_cartridges_type.name" : |
||
1673 | case "glpi_consumables_type.name" : |
||
1674 | case "glpi_contacts.name" : |
||
1675 | case "glpi_type_docs.name" : |
||
1676 | case "glpi_links.name" : |
||
1677 | case "glpi_entities.name" : |
||
1678 | case "glpi_docs.name" : |
||
1679 | case "glpi_ocs_config.name" : |
||
1680 | case "glpi_mailgate.name" : |
||
1681 | case "glpi_transfers.name" : |
||
1682 | case "state_types.name": |
||
1683 | case "reservation_types.name": |
||
1684 | if ($meta){ |
||
1685 | return " GROUP_CONCAT( DISTINCT ".$table.$addtable.".".$field." SEPARATOR '$$$$') AS ".$NAME."_$num, "; |
||
1686 | } |
||
1687 | else {
|
||
1688 | return $table.$addtable.".".$field." AS ".$NAME."_$num, ".$table.$addtable.".ID AS ".$NAME."_".$num."_2, "; |
||
1689 | } |
||
1690 | break;
|
||
1691 | |||
1692 | |||
1693 | case "glpi_enterprises.name" : |
||
1694 | case "glpi_enterprises_infocoms.name" : |
||
1695 | if ($type==CONTACT_TYPE){ |
||
1696 | return " GROUP_CONCAT( DISTINCT ".$table.$addtable.".".$field." SEPARATOR '$$$$') AS ".$NAME."_$num, "; |
||
1697 | } else {
|
||
1698 | return $table.$addtable.".".$field." AS ".$NAME."_$num, ".$table.$addtable.".website AS ".$NAME."_".$num."_2, ".$table.$addtable.".ID AS ".$NAME."_".$num."_3, "; |
||
1699 | } |
||
1700 | break;
|
||
1701 | // Contact for display in the enterprise item
|
||
1702 | case "glpi_contacts.completename": |
||
1703 | return " GROUP_CONCAT( DISTINCT CONCAT(".$table.$addtable.".name, ' ', ".$table.$addtable.".firstname) SEPARATOR '$$$$') AS ".$NAME."_$num, "; |
||
1704 | break;
|
||
1705 | case "glpi_users.name" : |
||
1706 | $linkfield=""; |
||
1707 | if (!empty($SEARCH_OPTION[$type][$ID]["linkfield"])) |
||
1708 | $linkfield="_".$SEARCH_OPTION[$type][$ID]["linkfield"]; |
||
1709 | |||
1710 | if ($meta){ |
||
1711 | return " GROUP_CONCAT( DISTINCT CONCAT(".$table.$linkfield.$addtable.".realname,".$table.$linkfield.$addtable.".firstname) SEPARATOR '$$$$') AS ".$NAME."_$num, "; |
||
1712 | } else {
|
||
1713 | return $table.$linkfield.$addtable.".".$field." AS ".$NAME."_$num, |
||
1714 | ".$table.$linkfield.$addtable.".realname AS ".$NAME."_".$num."_2, |
||
1715 | ".$table.$linkfield.$addtable.".ID AS ".$NAME."_".$num."_3, |
||
1716 | ".$table.$linkfield.$addtable.".firstname AS ".$NAME."_".$num."_4,"; |
||
1717 | } |
||
1718 | break;
|
||
1719 | |||
1720 | |||
1721 | case "glpi_contracts.end_date" : |
||
1722 | return $table.$addtable.".begin_date AS ".$NAME."_$num, ".$table.$addtable.".duration AS ".$NAME."_".$num."_2, "; |
||
1723 | break;
|
||
1724 | case "glpi_infocoms.end_warranty": |
||
1725 | return $table.$addtable.".buy_date AS ".$NAME."_$num, ".$table.$addtable.".warranty_duration AS ".$NAME."_".$num."_2, "; |
||
1726 | break;
|
||
1727 | case "glpi_contracts.expire_notice" : // ajout jmd |
||
1728 | return $table.$addtable.".begin_date AS ".$NAME."_$num, ".$table.$addtable.".duration AS ".$NAME."_".$num."_2, ".$table.$addtable.".notice AS ".$NAME."_".$num."_3, "; |
||
1729 | break;
|
||
1730 | case "glpi_contracts.expire" : // ajout jmd |
||
1731 | return $table.$addtable.".begin_date AS ".$NAME."_$num, ".$table.$addtable.".duration AS ".$NAME."_".$num."_2, "; |
||
1732 | break;
|
||
1733 | case "glpi_device_hdd.specif_default" : |
||
1734 | return " SUM(DEVICE_".HDD_DEVICE.".specificity) / COUNT( DEVICE_".HDD_DEVICE.".ID) * COUNT( DISTINCT DEVICE_".HDD_DEVICE.".ID) AS ".$NAME."_".$num.", "; |
||
1735 | break;
|
||
1736 | case "glpi_device_ram.specif_default" : |
||
1737 | return " SUM(DEVICE_".RAM_DEVICE.".specificity) / COUNT( DEVICE_".RAM_DEVICE.".ID) * COUNT( DISTINCT DEVICE_".RAM_DEVICE.".ID) AS ".$NAME."_".$num.", "; |
||
1738 | break;
|
||
1739 | case "glpi_device_processor.specif_default" : |
||
1740 | return " SUM(DEVICE_".PROCESSOR_DEVICE.".specificity) / COUNT( DEVICE_".PROCESSOR_DEVICE.".ID) AS ".$NAME."_".$num.", "; |
||
1741 | break;
|
||
1742 | case "glpi_networking_ports.ifmac" : |
||
1743 | if ($type==COMPUTER_TYPE) |
||
1744 | return " GROUP_CONCAT( DISTINCT ".$table.$addtable.".".$field." SEPARATOR '$$$$') AS ".$NAME."_$num, GROUP_CONCAT( DISTINCT DEVICE_".NETWORK_DEVICE.".specificity SEPARATOR '$$$$') AS ".$NAME."_".$num."_2, "; |
||
1745 | else return " GROUP_CONCAT( DISTINCT ".$table.$addtable.".".$field." SEPARATOR '$$$$') AS ".$NAME."_$num, "; |
||
1746 | break;
|
||
1747 | case "glpi_profiles.name" : |
||
1748 | if ($type==USER_TYPE){ |
||
1749 | return " GROUP_CONCAT( ".$table.$addtable.".".$field." SEPARATOR '$$$$') AS ".$NAME."_$num, |
||
1750 | GROUP_CONCAT( glpi_entities.completename SEPARATOR '$$$$') AS ".$NAME."_".$num."_2, |
||
1751 | GROUP_CONCAT( glpi_users_profiles.recursive SEPARATOR '$$$$') AS ".$NAME."_".$num."_3,"; |
||
1752 | } else {
|
||
1753 | return $table.$addtable.".".$field." AS ".$NAME."_$num, "; |
||
1754 | } |
||
1755 | case "glpi_entities.completename" : |
||
1756 | if ($type==USER_TYPE){ |
||
1757 | return " GROUP_CONCAT( ".$table.$addtable.".completename SEPARATOR '$$$$') AS ".$NAME."_$num, |
||
1758 | GROUP_CONCAT( glpi_profiles.name SEPARATOR '$$$$') AS ".$NAME."_".$num."_2, |
||
1759 | GROUP_CONCAT( glpi_users_profiles.recursive SEPARATOR '$$$$') AS ".$NAME."_".$num."_3,"; |
||
1760 | } else {
|
||
1761 | return $table.$addtable.".completename AS ".$NAME."_$num, ".$table.$addtable.".ID AS ".$NAME."_".$num."_2, "; |
||
1762 | } |
||
1763 | |||
1764 | case "glpi_groups.name" : |
||
1765 | if ($type==USER_TYPE){ |
||
1766 | return " GROUP_CONCAT( DISTINCT ".$table.$addtable.".".$field." SEPARATOR '$$$$') AS ".$NAME."_$num, "; |
||
1767 | } else {
|
||
1768 | return $table.$addtable.".".$field." AS ".$NAME."_$num, "; |
||
1769 | } |
||
1770 | break;
|
||
1771 | case "glpi_auth_tables.name": |
||
1772 | return "glpi_users.auth_method AS ".$NAME."_".$num.", glpi_users.id_auth AS ".$NAME."_".$num."_2, glpi_auth_ldap".$addtable.".".$field." AS ".$NAME."_".$num."_3, glpi_auth_mail".$addtable.".".$field." AS ".$NAME."_".$num."_4, "; |
||
1773 | break;
|
||
1774 | case "glpi_contracts.name" : |
||
1775 | case "glpi_contracts.num" : |
||
1776 | if ($type!=CONTRACT_TYPE){ |
||
1777 | return " GROUP_CONCAT( DISTINCT ".$table.$addtable.".".$field." SEPARATOR '$$$$') AS ".$NAME."_$num, "; |
||
1778 | } else {
|
||
1779 | return $table.$addtable.".".$field." AS ".$NAME."_$num, "; |
||
1780 | } |
||
1781 | break;
|
||
1782 | case "glpi_licenses.serial" : |
||
1783 | case "glpi_licenses.version" : |
||
1784 | if ($meta){ |
||
1785 | return " GROUP_CONCAT( DISTINCT CONCAT(".$table.$addtable.".serial, ' - ',".$table.$addtable.".version) SEPARATOR '$$$$') AS ".$NAME."_".$num.", "; |
||
1786 | } else {
|
||
1787 | return " GROUP_CONCAT( DISTINCT ".$table.$addtable.".".$field." SEPARATOR '$$$$') AS ".$NAME."_".$num.", "; |
||
1788 | } |
||
1789 | break;
|
||
1790 | case "glpi_networking_ports.ifaddr" : |
||
1791 | case "glpi_dropdown_netpoint.name" : |
||
1792 | case "glpi_registry.registry_ocs_name" : |
||
1793 | case "glpi_registry.registry_value" : |
||
1794 | return " GROUP_CONCAT( DISTINCT ".$table.$addtable.".".$field." SEPARATOR '$$$$') AS ".$NAME."_".$num.", "; |
||
1795 | break;
|
||
1796 | case "glpi_tracking.count" : |
||
1797 | return " COUNT(DISTINCT glpi_tracking.ID) AS ".$NAME."_".$num.", "; |
||
1798 | break;
|
||
1799 | default:
|
||
1800 | |||
1801 | |||
1802 | // Link with plugin tables
|
||
1803 | if ($type<=1000){ |
||
1804 | if (preg_match("/^glpi_plugin_([a-zA-Z]+)/", $table, $matches) |
||
1805 | || preg_match("/^glpi_dropdown_plugin_([a-zA-Z]+)/", $table, $matches) ){ |
||
1806 | if (count($matches)==2){ |
||
1807 | $plug=$matches[1]; |
||
1808 | |||
1809 | $function='plugin_'.$plug.'_addSelect'; |
||
1810 | if (function_exists($function)){ |
||
1811 | $out=$function($type,$ID,$num); |
||
1812 | if (!empty($out)){ |
||
1813 | return $out; |
||
1814 | } |
||
1815 | } |
||
1816 | } |
||
1817 | } |
||
1818 | } |
||
1819 | |||
1820 | |||
1821 | if ($meta){ |
||
1822 | return " GROUP_CONCAT( DISTINCT ".$table.$addtable.".".$field." SEPARATOR '$$$$') AS ".$NAME."_$num, "; |
||
1823 | } |
||
1824 | else {
|
||
1825 | return $table.$addtable.".".$field." AS ".$NAME."_$num, "; |
||
1826 | } |
||
1827 | break;
|
||
1828 | } |
||
1829 | |||
1830 | } |
||
1831 | |||
1832 | |||
1833 | /**
|
||
1834 | * Generic Function to add default where to a request
|
||
1835 | *
|
||
1836 | *
|
||
1837 | *@param $type device type
|
||
1838 | *
|
||
1839 | *@return select string
|
||
1840 | *
|
||
1841 | **/
|
||
1842 | function addDefaultWhere ($type){ |
||
1843 | switch ($type){ |
||
1844 | // No link
|
||
1845 | case USER_TYPE: |
||
1846 | // View all entities
|
||
1847 | if (isViewAllEntities()){
|
||
1848 | return ""; |
||
1849 | } else {
|
||
1850 | return getEntitiesRestrictRequest("","glpi_users_profiles"); |
||
1851 | } |
||
1852 | break;
|
||
1853 | default :
|
||
1854 | return ""; |
||
1855 | break;
|
||
1856 | } |
||
1857 | } |
||
1858 | |||
1859 | /**
|
||
1860 | * Generic Function to add where to a request
|
||
1861 | *
|
||
1862 | *
|
||
1863 | *@param $val item num in the request
|
||
1864 | *@param $nott is it a negative serach ?
|
||
1865 | *@param $link link string
|
||
1866 | *@param $type device type
|
||
1867 | *@param $ID ID of the item to search
|
||
1868 | *@param $meta is a meta search (meta=2 in search.class.php)
|
||
1869 | *
|
||
1870 | *@return select string
|
||
1871 | *
|
||
1872 | **/
|
||
1873 | function addWhere ($link,$nott,$type,$ID,$val,$meta=0){ |
||
1874 | global $LINK_ID_TABLE,$LANG,$SEARCH_OPTION,$PLUGIN_HOOKS; |
||
1875 | |||
1876 | $table=$SEARCH_OPTION[$type][$ID]["table"]; |
||
1877 | $field=$SEARCH_OPTION[$type][$ID]["field"]; |
||
1878 | |||
1879 | $inittable=$table; |
||
1880 | if ($meta&&$LINK_ID_TABLE[$type]!=$table) { |
||
1881 | $table.="_".$type; |
||
1882 | } |
||
1883 | |||
1884 | // Hack to allow search by ID on every sub-table
|
||
1885 | if (preg_match('/^\$\$\$\$([0-9]+)$/',$val,$regs)){ |
||
1886 | return $link." ($table.ID ".($nott?"<>":"=").$regs[1].") "; |
||
1887 | } |
||
1888 | |||
1889 | $SEARCH=makeTextSearch($val,$nott); |
||
1890 | |||
1891 | // Plugin can override core definition for its type
|
||
1892 | if ($type>1000){ |
||
1893 | if (isset($PLUGIN_HOOKS['plugin_types'][$type])){ |
||
1894 | $function='plugin_'.$PLUGIN_HOOKS['plugin_types'][$type].'_addWhere'; |
||
1895 | if (function_exists($function)){ |
||
1896 | $out=$function($link,$nott,$type,$ID,$val); |
||
1897 | if (!empty($out)){ |
||
1898 | return $out; |
||
1899 | } |
||
1900 | } |
||
1901 | } |
||
1902 | } |
||
1903 | |||
1904 | |||
1905 | switch ($inittable.".".$field){ |
||
1906 | case "glpi_users.name" : |
||
1907 | $linkfield=""; |
||
1908 | if (!empty($SEARCH_OPTION[$type][$ID]["linkfield"])){ |
||
1909 | $linkfield="_".$SEARCH_OPTION[$type][$ID]["linkfield"]; |
||
1910 | |||
1911 | if ($meta&&$LINK_ID_TABLE[$type]!=$inittable) { |
||
1912 | $table=$inittable; |
||
1913 | $linkfield.="_".$type; |
||
1914 | } |
||
1915 | } |
||
1916 | if ($type==USER_TYPE){ // glpi_users case / not link table |
||
1917 | return $link." ( $table$linkfield.$field $SEARCH ) "; |
||
1918 | } else {
|
||
1919 | $ADD=""; |
||
1920 | if ($nott) { |
||
1921 | $ADD=" OR $table$linkfield.$field IS NULL"; |
||
1922 | } |
||
1923 | return $link." ( $table$linkfield.$field $SEARCH OR $table$linkfield.realname $SEARCH OR $table$linkfield.firstname $SEARCH OR CONCAT($table$linkfield.realname,' ',$table$linkfield.firstname) $SEARCH $ADD) "; |
||
1924 | } |
||
1925 | break;
|
||
1926 | case "glpi_device_hdd.specif_default" : |
||
1927 | case "glpi_device_ram.specif_default" : |
||
1928 | case "glpi_device_processor.specif_default" : |
||
1929 | return $link." $table.$field ".makeTextSearch("",$nott); |
||
1930 | break;
|
||
1931 | case "glpi_networking_ports.ifmac" : |
||
1932 | $ADD=""; |
||
1933 | if ($type==COMPUTER_TYPE){ |
||
1934 | if ($nott) { |
||
1935 | $ADD=" OR $table.$field IS NULL"; |
||
1936 | } |
||
1937 | |||
1938 | return $link." ( DEVICE_".NETWORK_DEVICE.".specificity $SEARCH OR $table.$field $SEARCH $ADD ) "; |
||
1939 | } else {
|
||
1940 | if ($nott) { |
||
1941 | $ADD=" OR $table.$field IS NULL"; |
||
1942 | } |
||
1943 | |||
1944 | return $link." $table.$field $SEARCH $ADD"; |
||
1945 | } |
||
1946 | break;
|
||
1947 | |||
1948 | case "glpi_infocoms.end_warranty" : |
||
1949 | case "glpi_contracts.end_date" : |
||
1950 | case "glpi_ocs_link.last_update": |
||
1951 | case "glpi_ocs_link.last_ocs_update": |
||
1952 | case "glpi_computers.date_mod": |
||
1953 | case "glpi_printers.date_mod": |
||
1954 | case "glpi_networking.date_mod": |
||
1955 | case "glpi_peripherals.date_mod": |
||
1956 | case "glpi_software.date_mod": |
||
1957 | case "glpi_phones.date_mod": |
||
1958 | case "glpi_monitors.date_mod": |
||
1959 | case "glpi_contracts.begin_date": |
||
1960 | case "glpi_docs.date_mod": |
||
1961 | case "glpi_infocoms.buy_date": |
||
1962 | case "glpi_infocoms.use_date": |
||
1963 | case "state_types.date_mod": |
||
1964 | case "reservation_types.date_mod": |
||
1965 | case "glpi_users.last_login": |
||
1966 | case "glpi_users.date_mod": |
||
1967 | $date_computation=$table.".".$field; |
||
1968 | $interval_search=" MONTH "; |
||
1969 | switch ($table.".".$field){ |
||
1970 | case "glpi_contracts.end_date": |
||
1971 | $date_computation=" ADDDATE($table.begin_date, INTERVAL $table.duration MONTH) "; |
||
1972 | break;
|
||
1973 | case "glpi_infocoms.end_warranty": |
||
1974 | $date_computation=" ADDDATE($table.buy_date, INTERVAL $table.warranty_duration MONTH) "; |
||
1975 | break;
|
||
1976 | } |
||
1977 | |||
1978 | $search=array("/\</","/\>/"); |
||
1979 | $replace=array("<",">"); |
||
1980 | $val=preg_replace($search,$replace,$val); |
||
1981 | if (ereg("([<>=])(.*)",$val,$regs)){ |
||
1982 | if (is_numeric($regs[2])){ |
||
1983 | return $link." NOW() ".$regs[1]." ADDDATE($date_computation, INTERVAL ".$regs[2]." $interval_search) "; |
||
1984 | } else {
|
||
1985 | // Reformat date if needed
|
||
1986 | $regs[2]=preg_replace('/(\d{1,2})-(\d{1,2})-(\d{4})/','\3-\2-\1',$regs[2]); |
||
1987 | if (ereg('[0-9]{2,4}-[0-9]{1,2}-[0-9]{1,2}',$regs[2])){ |
||
1988 | return $link." $date_computation ".$regs[1]." '".$regs[2]."'"; |
||
1989 | } else {
|
||
1990 | return ""; |
||
1991 | } |
||
1992 | } |
||
1993 | } else { // standard search |
||
1994 | // Date format modification if needed
|
||
1995 | $val=preg_replace('/(\d{1,2})-(\d{1,2})-(\d{4})/','\3-\2-\1',$val); |
||
1996 | $SEARCH=makeTextSearch($val,$nott); |
||
1997 | $ADD=""; |
||
1998 | if ($nott) { |
||
1999 | $ADD=" OR $date_computation IS NULL"; |
||
2000 | } |
||
2001 | return $link." ( $date_computation $SEARCH $ADD )"; |
||
2002 | } |
||
2003 | break;
|
||
2004 | case "glpi_contracts.expire" : |
||
2005 | $search=array("/\</","/\>/"); |
||
2006 | $replace=array("<",">"); |
||
2007 | $val=preg_replace($search,$replace,$val); |
||
2008 | if (ereg("([<>=])(.*)",$val,$regs)){ |
||
2009 | return $link." DATEDIFF(ADDDATE($table.begin_date, INTERVAL $table.duration MONTH),CURDATE() )".$regs[1].$regs[2]." "; |
||
2010 | } else {
|
||
2011 | return $link." ADDDATE($table.begin_date, INTERVAL $table.duration MONTH) $SEARCH "; |
||
2012 | } |
||
2013 | break;
|
||
2014 | // ajout jmd
|
||
2015 | case "glpi_contracts.expire_notice" : |
||
2016 | $search=array("/\</","/\>/"); |
||
2017 | $replace=array("<",">"); |
||
2018 | $val=preg_replace($search,$replace,$val); |
||
2019 | if (ereg("([<>])(.*)",$val,$regs)){ |
||
2020 | return $link." $table.notice<>0 AND DATEDIFF(ADDDATE($table.begin_date, INTERVAL ($table.duration - $table.notice) MONTH),CURDATE() )".$regs[1].$regs[2]." "; |
||
2021 | } else {
|
||
2022 | return $link." ADDDATE($table.begin_date, INTERVAL ($table.duration - $table.notice) MONTH) $SEARCH "; |
||
2023 | } |
||
2024 | break;
|
||
2025 | |||
2026 | case "glpi_infocoms.value": |
||
2027 | case "glpi_infocoms.warranty_value": |
||
2028 | if (is_numeric($val)){ |
||
2029 | $search=array("/\</","/\>/"); |
||
2030 | $replace=array("<",">"); |
||
2031 | $val=preg_replace($search,$replace,$val); |
||
2032 | if (ereg("([<>])([=]*)[[:space:]]*([0-9]*)",$val,$regs)){ |
||
2033 | if ($nott){ |
||
2034 | if ($regs[1]=='<') { |
||
2035 | $regs[1]='>'; |
||
2036 | } else {
|
||
2037 | $regs[1]='<'; |
||
2038 | } |
||
2039 | } |
||
2040 | $regs[1].=$regs[2]; |
||
2041 | |||
2042 | return $link." ($table.$field ".$regs[1]." ".$regs[3]." ) "; |
||
2043 | } else {
|
||
2044 | |||
2045 | $interval=100; |
||
2046 | $ADD=""; |
||
2047 | if ($nott&&$val!="NULL") $ADD=" OR $table.$field IS NULL"; |
||
2048 | if ($nott){ |
||
2049 | return $link." ($table.$field < ".intval($val)."-$interval OR $table.$field > ".intval($val)."+$interval ".$ADD." ) "; |
||
2050 | } else {
|
||
2051 | return $link." (($table.$field >= ".intval($val)."-$interval AND $table.$field <= ".intval($val)."+$interval) ".$ADD." ) "; |
||
2052 | } |
||
2053 | } |
||
2054 | } |
||
2055 | break;
|
||
2056 | case "glpi_infocoms.amort_time": |
||
2057 | case "glpi_infocoms.warranty_duration": |
||
2058 | $ADD=""; |
||
2059 | if ($nott&&$val!="NULL") { |
||
2060 | $ADD=" OR $table.$field IS NULL"; |
||
2061 | } |
||
2062 | if (is_numeric($val)) |
||
2063 | { |
||
2064 | if ($nott){ |
||
2065 | return $link." ($table.$field <> ".intval($val)." ".$ADD." ) "; |
||
2066 | } else {
|
||
2067 | return $link." ($table.$field = ".intval($val)." ".$ADD." ) "; |
||
2068 | } |
||
2069 | } |
||
2070 | break;
|
||
2071 | case "glpi_infocoms.amort_type": |
||
2072 | $ADD=""; |
||
2073 | if ($nott&&$val!="NULL") { |
||
2074 | $ADD=" OR $table.$field IS NULL"; |
||
2075 | } |
||
2076 | if (eregi($val,getAmortTypeName(1))) { |
||
2077 | $val=1; |
||
2078 | } else if (eregi($val,getAmortTypeName(2))) { |
||
2079 | $val=2; |
||
2080 | } |
||
2081 | |||
2082 | |||
2083 | if (is_int($val)&&$val>0){ |
||
2084 | if ($nott){ |
||
2085 | return $link." ($table.$field <> $val ".$ADD." ) "; |
||
2086 | } else {
|
||
2087 | return $link." ($table.$field = $val ".$ADD." ) "; |
||
2088 | } |
||
2089 | } |
||
2090 | break;
|
||
2091 | case "glpi_contacts.completename": |
||
2092 | return $link." ($table.name $SEARCH OR $table.firstname $SEARCH ) "; |
||
2093 | break;
|
||
2094 | case "glpi_auth_tables.name": |
||
2095 | return $link." (glpi_auth_mail.name $SEARCH OR glpi_auth_ldap.name $SEARCH ) "; |
||
2096 | break;
|
||
2097 | case "glpi_contracts.renewal": |
||
2098 | return $link." ".$table.".".$field."=".getContractRenewalIDByName($val); |
||
2099 | break;
|
||
2100 | default:
|
||
2101 | |||
2102 | // Link with plugin tables
|
||
2103 | if ($type<=1000){ |
||
2104 | if (preg_match("/^glpi_plugin_([a-zA-Z]+)/", $inittable, $matches) |
||
2105 | || preg_match("/^glpi_dropdown_plugin_([a-zA-Z]+)/", $inittable, $matches) ){ |
||
2106 | if (count($matches)==2){ |
||
2107 | $plug=$matches[1]; |
||
2108 | |||
2109 | $function='plugin_'.$plug.'_addWhere'; |
||
2110 | if (function_exists($function)){ |
||
2111 | $out=$function($link,$nott,$type,$ID,$val); |
||
2112 | if (!empty($out)){ |
||
2113 | return $out; |
||
2114 | } |
||
2115 | } |
||
2116 | } |
||
2117 | } |
||
2118 | } |
||
2119 | |||
2120 | $ADD=""; |
||
2121 | if (($nott&&$val!="NULL")||$val=='^$') { |
||
2122 | $ADD=" OR $table.$field IS NULL"; |
||
2123 | } |
||
2124 | |||
2125 | return $link." ($table.$field $SEARCH ".$ADD." ) "; |
||
2126 | break;
|
||
2127 | } |
||
2128 | |||
2129 | } |
||
2130 | |||
2131 | |||
2132 | /**
|
||
2133 | * Generic Function to display Items
|
||
2134 | *
|
||
2135 | *
|
||
2136 | *@param $field field which have a specific display type
|
||
2137 | *@param $type device type
|
||
2138 | *
|
||
2139 | *
|
||
2140 | *@return string to print
|
||
2141 | *
|
||
2142 | **/
|
||
2143 | function displayConfigItem ($type,$field){ |
||
2144 | |||
2145 | switch ($field){ |
||
2146 | case "glpi_ocs_link.last_update": |
||
2147 | case "glpi_ocs_link.last_ocs_update": |
||
2148 | case "glpi_computers.date_mod": |
||
2149 | case "glpi_printers.date_mod": |
||
2150 | case "glpi_networking.date_mod": |
||
2151 | case "glpi_peripherals.date_mod": |
||
2152 | case "glpi_phones.date_mod": |
||
2153 | case "glpi_software.date_mod": |
||
2154 | case "glpi_monitors.date_mod": |
||
2155 | case "glpi_docs.date_mod": |
||
2156 | case "glpi_ocs_config.date_mod" : |
||
2157 | case "glpi_users.last_login": |
||
2158 | case "glpi_users.date_mod": |
||
2159 | return " class='center'"; |
||
2160 | break;
|
||
2161 | default:
|
||
2162 | return ""; |
||
2163 | break;
|
||
2164 | } |
||
2165 | |||
2166 | } |
||
2167 | |||
2168 | /**
|
||
2169 | * Generic Function to display Items
|
||
2170 | *
|
||
2171 | *
|
||
2172 | *@param $field field to add
|
||
2173 | *@param $data array containing data results
|
||
2174 | *@param $num item num in the request
|
||
2175 | *@param $type device type
|
||
2176 | *@param $linkfield field used to link
|
||
2177 | *
|
||
2178 | *
|
||
2179 | *@return string to print
|
||
2180 | *
|
||
2181 | **/
|
||
2182 | function giveItem ($type,$field,$data,$num,$linkfield=""){ |
||
2183 | global $CFG_GLPI,$INFOFORM_PAGES,$CFG_GLPI,$LANG,$LINK_ID_TABLE,$PLUGIN_HOOKS; |
||
2184 | |||
2185 | |||
2186 | if (isset($CFG_GLPI["union_search_type"][$type])){ |
||
2187 | return giveItem ($data["TYPE"],ereg_replace($CFG_GLPI["union_search_type"][$type],$LINK_ID_TABLE[$data["TYPE"]],$field),$data,$num,$linkfield); |
||
2188 | } |
||
2189 | |||
2190 | // Plugin can override core definition for its type
|
||
2191 | if ($type>1000){ |
||
2192 | if (isset($PLUGIN_HOOKS['plugin_types'][$type])){ |
||
2193 | $function='plugin_'.$PLUGIN_HOOKS['plugin_types'][$type].'_giveItem'; |
||
2194 | if (function_exists($function)){ |
||
2195 | $out=$function($type,$field,$data,$num,$linkfield); |
||
2196 | if (!empty($out)){ |
||
2197 | return $out; |
||
2198 | } |
||
2199 | } |
||
2200 | } |
||
2201 | } |
||
2202 | |||
2203 | switch ($field){ |
||
2204 | case "glpi_computers.name" : |
||
2205 | if (!empty($data["ITEM_".$num."_2"])){ |
||
2206 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[COMPUTER_TYPE]."?ID=".$data["ITEM_".$num."_2"]."\">"; |
||
2207 | $out.= $data["ITEM_$num"]; |
||
2208 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) { |
||
2209 | $out.= " (".$data["ITEM_".$num."_2"].")"; |
||
2210 | } |
||
2211 | $out.= "</a>"; |
||
2212 | return $out; |
||
2213 | } |
||
2214 | break;
|
||
2215 | case "glpi_printers.name" : |
||
2216 | if (!empty($data["ITEM_".$num."_2"])){ |
||
2217 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[PRINTER_TYPE]."?ID=".$data["ITEM_".$num."_2"]."\">"; |
||
2218 | $out.= $data["ITEM_$num"]; |
||
2219 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) { |
||
2220 | $out.= " (".$data["ITEM_".$num."_2"].")"; |
||
2221 | } |
||
2222 | $out.= "</a>"; |
||
2223 | return $out; |
||
2224 | } |
||
2225 | break;
|
||
2226 | case "glpi_networking.name" : |
||
2227 | if (!empty($data["ITEM_".$num."_2"])){ |
||
2228 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[NETWORKING_TYPE]."?ID=".$data["ITEM_".$num."_2"]."\">"; |
||
2229 | $out.= $data["ITEM_$num"]; |
||
2230 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) { |
||
2231 | $out.= " (".$data["ITEM_".$num."_2"].")"; |
||
2232 | } |
||
2233 | $out.= "</a>"; |
||
2234 | return $out; |
||
2235 | } |
||
2236 | break;
|
||
2237 | case "glpi_phones.name" : |
||
2238 | if (!empty($data["ITEM_".$num."_2"])){ |
||
2239 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[PHONE_TYPE]."?ID=".$data["ITEM_".$num."_2"]."\">"; |
||
2240 | $out.= $data["ITEM_$num"]; |
||
2241 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) { |
||
2242 | $out.= " (".$data["ITEM_".$num."_2"].")"; |
||
2243 | } |
||
2244 | $out.= "</a>"; |
||
2245 | return $out; |
||
2246 | } |
||
2247 | break;
|
||
2248 | case "glpi_monitors.name" : |
||
2249 | if (!empty($data["ITEM_".$num."_2"])){ |
||
2250 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[MONITOR_TYPE]."?ID=".$data["ITEM_".$num."_2"]."\">"; |
||
2251 | $out.= $data["ITEM_$num"]; |
||
2252 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) { |
||
2253 | $out.= " (".$data["ITEM_".$num."_2"].")"; |
||
2254 | } |
||
2255 | $out.= "</a>"; |
||
2256 | return $out; |
||
2257 | } |
||
2258 | break;
|
||
2259 | case "glpi_software.name" : |
||
2260 | if (!empty($data["ITEM_".$num."_2"])){ |
||
2261 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[SOFTWARE_TYPE]."?ID=".$data["ITEM_".$num."_2"]."\">"; |
||
2262 | $out.= $data["ITEM_$num"]; |
||
2263 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) { |
||
2264 | $out.= " (".$data["ITEM_".$num."_2"].")"; |
||
2265 | } |
||
2266 | $out.= "</a>"; |
||
2267 | return $out; |
||
2268 | } |
||
2269 | break;
|
||
2270 | case "glpi_peripherals.name" : |
||
2271 | if (!empty($data["ITEM_".$num."_2"])){ |
||
2272 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[PERIPHERAL_TYPE]."?ID=".$data["ITEM_".$num."_2"]."\">"; |
||
2273 | $out.= $data["ITEM_$num"]; |
||
2274 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) { |
||
2275 | $out.= " (".$data["ITEM_".$num."_2"].")"; |
||
2276 | } |
||
2277 | $out.= "</a>"; |
||
2278 | return $out; |
||
2279 | } |
||
2280 | break;
|
||
2281 | case "glpi_cartridges_type.name" : |
||
2282 | if (!empty($data["ITEM_".$num."_2"])){ |
||
2283 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[CARTRIDGE_TYPE]."?ID=".$data["ITEM_".$num."_2"]."\">"; |
||
2284 | $out.= $data["ITEM_$num"]; |
||
2285 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) { |
||
2286 | $out.= " (".$data["ITEM_".$num."_2"].")"; |
||
2287 | } |
||
2288 | $out.= "</a>"; |
||
2289 | return $out; |
||
2290 | } |
||
2291 | break;
|
||
2292 | case "glpi_consumables_type.name" : |
||
2293 | if (!empty($data["ITEM_".$num."_2"])){ |
||
2294 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[CONSUMABLE_TYPE]."?ID=".$data["ITEM_".$num."_2"]."\">"; |
||
2295 | $out.= $data["ITEM_$num"]; |
||
2296 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) { |
||
2297 | $out.= " (".$data["ITEM_".$num."_2"].")"; |
||
2298 | } |
||
2299 | $out.= "</a>"; |
||
2300 | return $out; |
||
2301 | } |
||
2302 | break;
|
||
2303 | case "glpi_contacts.name" : |
||
2304 | if (!empty($data["ITEM_".$num."_2"])){ |
||
2305 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[CONTACT_TYPE]."?ID=".$data["ITEM_".$num."_2"]."\">"; |
||
2306 | $out.= $data["ITEM_$num"]; |
||
2307 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) { |
||
2308 | $out.= " (".$data["ITEM_".$num."_2"].")"; |
||
2309 | } |
||
2310 | $out.= "</a>"; |
||
2311 | return $out; |
||
2312 | } |
||
2313 | break;
|
||
2314 | case "glpi_type_docs.name" : |
||
2315 | if (!empty($data["ITEM_".$num."_2"])){ |
||
2316 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[TYPEDOC_TYPE]."?ID=".$data["ITEM_".$num."_2"]."\">"; |
||
2317 | $out.= $data["ITEM_$num"]; |
||
2318 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) { |
||
2319 | $out.= " (".$data["ITEM_".$num."_2"].")"; |
||
2320 | } |
||
2321 | $out.= "</a>"; |
||
2322 | return $out; |
||
2323 | } |
||
2324 | break;
|
||
2325 | case "glpi_links.name" : |
||
2326 | if (!empty($data["ITEM_".$num."_2"])){ |
||
2327 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[LINK_TYPE]."?ID=".$data["ITEM_".$num."_2"]."\">"; |
||
2328 | $out.= $data["ITEM_$num"]; |
||
2329 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) { |
||
2330 | $out.= " (".$data["ITEM_".$num."_2"].")"; |
||
2331 | } |
||
2332 | $out.= "</a>"; |
||
2333 | return $out; |
||
2334 | } |
||
2335 | break;
|
||
2336 | case "glpi_docs.name" : |
||
2337 | if (!empty($data["ITEM_".$num."_2"])){ |
||
2338 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[DOCUMENT_TYPE]."?ID=".$data["ITEM_".$num."_2"]."\">"; |
||
2339 | $out.= $data["ITEM_$num"]; |
||
2340 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) { |
||
2341 | $out.= " (".$data["ITEM_".$num."_2"].")"; |
||
2342 | } |
||
2343 | $out.= "</a>"; |
||
2344 | return $out; |
||
2345 | } |
||
2346 | break;
|
||
2347 | case "glpi_ocs_config.name" : |
||
2348 | if (!empty($data["ITEM_".$num."_2"])){ |
||
2349 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[OCSNG_TYPE]."?ID=".$data["ITEM_".$num."_2"]."\">"; |
||
2350 | $out.= $data["ITEM_$num"]; |
||
2351 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) { |
||
2352 | $out.= " (".$data["ITEM_".$num."_2"].")"; |
||
2353 | } |
||
2354 | $out.= "</a>"; |
||
2355 | return $out; |
||
2356 | } |
||
2357 | break;
|
||
2358 | case "glpi_entities.name" : |
||
2359 | if (!empty($data["ITEM_".$num."_2"])){ |
||
2360 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[ENTITY_TYPE]."?ID=".$data["ITEM_".$num."_2"]."\">"; |
||
2361 | $out.= $data["ITEM_$num"]; |
||
2362 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) { |
||
2363 | $out.= " (".$data["ITEM_".$num."_2"].")"; |
||
2364 | } |
||
2365 | $out.= "</a>"; |
||
2366 | return $out; |
||
2367 | } |
||
2368 | break;
|
||
2369 | case "glpi_mailgate.name" : |
||
2370 | if (!empty($data["ITEM_".$num."_2"])){ |
||
2371 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[MAILGATE_TYPE]."?ID=".$data["ITEM_".$num."_2"]."\">"; |
||
2372 | $out.= $data["ITEM_$num"]; |
||
2373 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) { |
||
2374 | $out.= " (".$data["ITEM_".$num."_2"].")"; |
||
2375 | } |
||
2376 | $out.= "</a>"; |
||
2377 | return $out; |
||
2378 | } |
||
2379 | break;
|
||
2380 | case "glpi_transfers.name" : |
||
2381 | if (!empty($data["ITEM_".$num."_2"])){ |
||
2382 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[TRANSFER_TYPE]."?ID=".$data["ITEM_".$num."_2"]."\">"; |
||
2383 | $out.= $data["ITEM_$num"]; |
||
2384 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) { |
||
2385 | $out.= " (".$data["ITEM_".$num."_2"].")"; |
||
2386 | } |
||
2387 | $out.= "</a>"; |
||
2388 | return $out; |
||
2389 | } |
||
2390 | break;
|
||
2391 | case "glpi_licenses.version" : |
||
2392 | case "glpi_licenses.serial" : |
||
2393 | case "glpi_networking_ports.ifaddr" : |
||
2394 | case "glpi_dropdown_netpoint.name" : |
||
2395 | case "glpi_registry.registry_ocs_name" : |
||
2396 | case "glpi_registry.registry_value" : |
||
2397 | $out=""; |
||
2398 | $split=explode("$$$$",$data["ITEM_$num"]); |
||
2399 | |||
2400 | $count_display=0; |
||
2401 | for ($k=0;$k<count($split);$k++) |
||
2402 | if (strlen(trim($split[$k]))>0){ |
||
2403 | if ($count_display) $out.= "<br>"; |
||
2404 | $count_display++;
|
||
2405 | $out.= $split[$k]; |
||
2406 | } |
||
2407 | return $out; |
||
2408 | |||
2409 | break;
|
||
2410 | case "glpi_users.name" : |
||
2411 | // USER search case
|
||
2412 | if (empty($linkfield)){ |
||
2413 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[$type]."?ID=".$data['ID']."\">"; |
||
2414 | $out.= $data["ITEM_$num"]; |
||
2415 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) $out.= " (".$data["ID"].")"; |
||
2416 | $out.= "</a>"; |
||
2417 | } else {
|
||
2418 | $type=USER_TYPE; |
||
2419 | $out=""; |
||
2420 | if ($data["ITEM_".$num."_3"]>0) |
||
2421 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/front/user.form.php?ID=".$data["ITEM_".$num."_3"]."\">"; |
||
2422 | // print realname or login name
|
||
2423 | if (!empty($data["ITEM_".$num."_2"])||!empty($data["ITEM_".$num."_4"])) |
||
2424 | $out .= $data["ITEM_".$num."_2"]." ".$data["ITEM_".$num."_4"]; |
||
2425 | else $out .= $data["ITEM_$num"]; |
||
2426 | |||
2427 | if ($data["ITEM_".$num."_3"]>0&&($CFG_GLPI["view_ID"]||(empty($data["ITEM_$num"])))) $out.= " (".$data["ITEM_".$num."_3"].")"; |
||
2428 | |||
2429 | if ($data["ITEM_".$num."_3"]>0) |
||
2430 | $out.= "</a>"; |
||
2431 | } |
||
2432 | return $out; |
||
2433 | break;
|
||
2434 | case "glpi_groups.name" : |
||
2435 | if (empty($linkfield)){ |
||
2436 | $out=""; |
||
2437 | $split=explode("$$$$",$data["ITEM_$num"]); |
||
2438 | |||
2439 | $count_display=0; |
||
2440 | for ($k=0;$k<count($split);$k++) |
||
2441 | if (strlen(trim($split[$k]))>0){ |
||
2442 | if ($count_display) $out.= "<br>"; |
||
2443 | $count_display++;
|
||
2444 | $out.= $split[$k]; |
||
2445 | } |
||
2446 | return $out; |
||
2447 | } else {
|
||
2448 | if ($type==GROUP_TYPE){ |
||
2449 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[$type]."?ID=".$data['ID']."\">"; |
||
2450 | $out.= $data["ITEM_$num"]; |
||
2451 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) $out.= " (".$data["ID"].")"; |
||
2452 | $out.= "</a>"; |
||
2453 | } else {
|
||
2454 | $out= $data["ITEM_$num"]; |
||
2455 | } |
||
2456 | } |
||
2457 | return $out; |
||
2458 | break;
|
||
2459 | case "glpi_computers.comments" : |
||
2460 | case "glpi_networking.comments" : |
||
2461 | case "glpi_printers.comments" : |
||
2462 | case "glpi_monitors.comments" : |
||
2463 | case "glpi_peripherals.comments" : |
||
2464 | case "glpi_software.comments" : |
||
2465 | case "glpi_contacts.comments" : |
||
2466 | case "glpi_enterprises.comments" : |
||
2467 | case "glpi_users.comments" : |
||
2468 | case "glpi_phones.comments" : |
||
2469 | case "glpi_groups.comments" : |
||
2470 | case "glpi_entities.comments" : |
||
2471 | case "glpi_consumables_type.comments" : |
||
2472 | case "glpi_docs.comment" : |
||
2473 | case "glpi_cartridges_type.comments" : |
||
2474 | return nl2br($data["ITEM_$num"]); |
||
2475 | break;
|
||
2476 | case "glpi_profiles.name" : |
||
2477 | if ($type==PROFILE_TYPE){ |
||
2478 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[$type]."?ID=".$data['ID']."\">"; |
||
2479 | $out.= $data["ITEM_$num"]; |
||
2480 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) { |
||
2481 | $out.= " (".$data["ID"].")"; |
||
2482 | } |
||
2483 | $out.= "</a>"; |
||
2484 | } else if ($type==USER_TYPE){ |
||
2485 | $out=""; |
||
2486 | |||
2487 | $split=explode("$$$$",$data["ITEM_$num"]); |
||
2488 | $split2=explode("$$$$",$data["ITEM_".$num."_2"]); |
||
2489 | $split3=explode("$$$$",$data["ITEM_".$num."_3"]); |
||
2490 | |||
2491 | $count_display=0; |
||
2492 | $added=array(); |
||
2493 | for ($k=0;$k<count($split);$k++) |
||
2494 | if (strlen(trim($split[$k]))>0){ |
||
2495 | $text=$split[$k]." - ".$split2[$k]; |
||
2496 | if ($split3[$k]){ |
||
2497 | $text.=" (R)"; |
||
2498 | } |
||
2499 | if (!in_array($text,$added)){ |
||
2500 | if ($count_display) $out.= "<br>"; |
||
2501 | $count_display++;
|
||
2502 | $out.= $text; |
||
2503 | $added[]=$text; |
||
2504 | } |
||
2505 | } |
||
2506 | return $out; |
||
2507 | } else {
|
||
2508 | $out= $data["ITEM_$num"]; |
||
2509 | } |
||
2510 | return $out; |
||
2511 | break;
|
||
2512 | case "glpi_entities.completename" : |
||
2513 | if ($type==ENTITY_TYPE){ |
||
2514 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[$type]."?ID=".$data['ID']."\">"; |
||
2515 | $out.= $data["ITEM_$num"]; |
||
2516 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) { |
||
2517 | $out.= " (".$data["ID"].")"; |
||
2518 | } |
||
2519 | $out.= "</a>"; |
||
2520 | } else if ($type==USER_TYPE){ |
||
2521 | $out=""; |
||
2522 | |||
2523 | $split=explode("$$$$",$data["ITEM_$num"]); |
||
2524 | $split2=explode("$$$$",$data["ITEM_".$num."_2"]); |
||
2525 | $split3=explode("$$$$",$data["ITEM_".$num."_3"]); |
||
2526 | $added=array(); |
||
2527 | $count_display=0; |
||
2528 | for ($k=0;$k<count($split);$k++) |
||
2529 | if (strlen(trim($split[$k]))>0){ |
||
2530 | $text=$split[$k]." - ".$split2[$k]; |
||
2531 | if ($split3[$k]){ |
||
2532 | $text.=" (R)"; |
||
2533 | } |
||
2534 | if (!in_array($text,$added)){ |
||
2535 | if ($count_display) $out.= "<br>"; |
||
2536 | $count_display++;
|
||
2537 | $out.= $text; |
||
2538 | $added[]=$text; |
||
2539 | } |
||
2540 | } |
||
2541 | return $out; |
||
2542 | } else {
|
||
2543 | if ($data["ITEM_".$num."_2"]==0){ |
||
2544 | $out=$LANG["entity"][2]; |
||
2545 | } else {
|
||
2546 | $out= $data["ITEM_$num"]; |
||
2547 | } |
||
2548 | } |
||
2549 | return $out; |
||
2550 | break;
|
||
2551 | case "glpi_contracts.name" : |
||
2552 | if (empty($linkfield)){ |
||
2553 | $out=""; |
||
2554 | $split=explode("$$$$",$data["ITEM_$num"]); |
||
2555 | |||
2556 | $count_display=0; |
||
2557 | for ($k=0;$k<count($split);$k++) |
||
2558 | if (strlen(trim($split[$k]))>0){ |
||
2559 | if ($count_display) $out.= "<br>"; |
||
2560 | $count_display++;
|
||
2561 | $out.= $split[$k]; |
||
2562 | } |
||
2563 | } else {
|
||
2564 | if ($type==CONTRACT_TYPE){ |
||
2565 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[$type]."?ID=".$data['ID']."\">"; |
||
2566 | $out.= $data["ITEM_$num"]; |
||
2567 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) $out.= " (".$data["ID"].")"; |
||
2568 | $out.= "</a>"; |
||
2569 | } else {
|
||
2570 | $out= $data["ITEM_$num"]; |
||
2571 | } |
||
2572 | } |
||
2573 | return $out; |
||
2574 | case "glpi_contracts.num" : |
||
2575 | if (empty($linkfield)){ |
||
2576 | $out=""; |
||
2577 | $split=explode("$$$$",$data["ITEM_$num"]); |
||
2578 | |||
2579 | $count_display=0; |
||
2580 | for ($k=0;$k<count($split);$k++) |
||
2581 | if (strlen(trim($split[$k]))>0){ |
||
2582 | if ($count_display) $out.= "<br>"; |
||
2583 | $count_display++;
|
||
2584 | $out.= $split[$k]; |
||
2585 | } |
||
2586 | return $out; |
||
2587 | } else {
|
||
2588 | return $data["ITEM_$num"]; |
||
2589 | } |
||
2590 | break;
|
||
2591 | |||
2592 | case "glpi_contacts.completename": |
||
2593 | $out=""; |
||
2594 | $split=explode("$$$$",$data["ITEM_$num"]); |
||
2595 | |||
2596 | $count_display=0; |
||
2597 | for ($k=0;$k<count($split);$k++) |
||
2598 | if (strlen(trim($split[$k]))>0){ |
||
2599 | if ($count_display) $out.= "<br>"; |
||
2600 | $count_display++;
|
||
2601 | $out.= $split[$k]; |
||
2602 | } |
||
2603 | return $out; |
||
2604 | break;
|
||
2605 | case "glpi_enterprises.name" : |
||
2606 | if (empty($linkfield)){ |
||
2607 | if ($type==CONTACT_TYPE){ |
||
2608 | $out=""; |
||
2609 | $split=explode("$$$$",$data["ITEM_$num"]); |
||
2610 | |||
2611 | $count_display=0; |
||
2612 | for ($k=0;$k<count($split);$k++) |
||
2613 | if (strlen(trim($split[$k]))>0){ |
||
2614 | if ($count_display) $out.= "<br>"; |
||
2615 | $count_display++;
|
||
2616 | $out.= $split[$k]; |
||
2617 | } |
||
2618 | return $out; |
||
2619 | |||
2620 | } else {
|
||
2621 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[$type]."?ID=".$data['ID']."\">"; |
||
2622 | $out.= $data["ITEM_$num"]; |
||
2623 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) $out.= " (".$data["ID"].")"; |
||
2624 | $out.= "</a>"; |
||
2625 | if (!empty($data["ITEM_".$num."_2"])){ |
||
2626 | $out.= "<a href='".formatOutputWebLink($data["ITEM_".$num."_2"])."' target='_blank'><img src='".$CFG_GLPI["root_doc"]."/pics/web.png' alt='website'></a>"; |
||
2627 | } |
||
2628 | } |
||
2629 | } else {
|
||
2630 | $type=ENTERPRISE_TYPE; |
||
2631 | $out=""; |
||
2632 | if ($data["ITEM_".$num."_3"]>0) |
||
2633 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[$type]."?ID=".$data["ITEM_".$num."_3"]."\">"; |
||
2634 | $out.= $data["ITEM_$num"]; |
||
2635 | if ($data["ITEM_".$num."_3"]>0&&($CFG_GLPI["view_ID"]||(empty($data["ITEM_$num"])))) $out.= " (".$data["ITEM_".$num."_3"].")"; |
||
2636 | if ($data["ITEM_".$num."_3"]>0) |
||
2637 | $out.= "</a>"; |
||
2638 | if (!empty($data["ITEM_".$num."_2"])){ |
||
2639 | $out.= "<a href='".formatOutputWebLink($data["ITEM_".$num."_2"])."' target='_blank'><img src='".$CFG_GLPI["root_doc"]."/pics/web.png' alt='website'></a>"; |
||
2640 | } |
||
2641 | } |
||
2642 | return $out; |
||
2643 | break;
|
||
2644 | case "glpi_enterprises_infocoms.name" : |
||
2645 | $type=ENTERPRISE_TYPE; |
||
2646 | $out=""; |
||
2647 | if (!empty($data["ITEM_".$num."_3"])){ |
||
2648 | $out.= "<a href=\"".$CFG_GLPI["root_doc"]."/".$INFOFORM_PAGES[$type]."?ID=".$data["ITEM_".$num."_3"]."\">"; |
||
2649 | $out.= $data["ITEM_$num"]; |
||
2650 | if ($CFG_GLPI["view_ID"]||empty($data["ITEM_$num"])) |
||
2651 | $out.= " (".$data["ITEM_".$num."_3"].")"; |
||
2652 | $out.= "</a>"; |
||
2653 | } |
||
2654 | return $out; |
||
2655 | break;
|
||
2656 | case "glpi_type_docs.icon" : |
||
2657 | if (!empty($data["ITEM_$num"])){ |
||
2658 | return "<img class='middle' alt='' src='".$CFG_GLPI["typedoc_icon_dir"]."/".$data["ITEM_$num"]."'>"; |
||
2659 | } |
||
2660 | else {
|
||
2661 | return " "; |
||
2662 | } |
||
2663 | break;
|
||
2664 | |||
2665 | case "glpi_docs.filename" : |
||
2666 | return getDocumentLink($data["ITEM_$num"]); |
||
2667 | break;
|
||
2668 | case "glpi_docs.link" : |
||
2669 | case "glpi_enterprises.website" : |
||
2670 | if (!empty($data["ITEM_$num"])){ |
||
2671 | $link=$data["ITEM_$num"]; |
||
2672 | if (strlen($data["ITEM_$num"])>30){ |
||
2673 | $link=utf8_substr($data["ITEM_$num"],0,30)."..."; |
||
2674 | } |
||
2675 | return "<a href=\"".$data["ITEM_$num"]."\" target='_blank'>".$link."</a>"; |
||
2676 | } else return " "; |
||
2677 | break;
|
||
2678 | case "glpi_enterprises.email" : |
||
2679 | case "glpi_contacts.email" : |
||
2680 | case "glpi_users.email" : |
||
2681 | if (!empty($data["ITEM_$num"])){ |
||
2682 | return "<a href='mailto:".$data["ITEM_$num"]."'>".$data["ITEM_$num"]."</a>"; |
||
2683 | } else {
|
||
2684 | return " "; |
||
2685 | } |
||
2686 | break;
|
||
2687 | case "glpi_device_hdd.specif_default" : |
||
2688 | case "glpi_device_ram.specif_default" : |
||
2689 | case "glpi_device_processor.specif_default" : |
||
2690 | return $data["ITEM_".$num]; |
||
2691 | break;
|
||
2692 | case "glpi_networking_ports.ifmac" : |
||
2693 | $out=""; |
||
2694 | if ($type==COMPUTER_TYPE){ |
||
2695 | $displayed=array(); |
||
2696 | if (!empty($data["ITEM_".$num."_2"])){ |
||
2697 | $split=explode("$$$$",$data["ITEM_".$num."_2"]); |
||
2698 | $count_display=0; |
||
2699 | for ($k=0;$k<count($split);$k++){ |
||
2700 | $lowstr=strtolower($split[$k]); |
||
2701 | if (strlen(trim($split[$k]))>0 |
||
2702 | &&!in_array($lowstr,$displayed)){ |
||
2703 | if ($count_display) { |
||
2704 | $out.= "<br>"; |
||
2705 | } |
||
2706 | $count_display++;
|
||
2707 | $out.= $split[$k]; |
||
2708 | $displayed[]=$lowstr; |
||
2709 | } |
||
2710 | } |
||
2711 | if (!empty($data["ITEM_".$num])) $out.= "<br>"; |
||
2712 | } |
||
2713 | |||
2714 | if (!empty($data["ITEM_".$num])){ |
||
2715 | $split=explode("$$$$",$data["ITEM_".$num]); |
||
2716 | $count_display=0; |
||
2717 | for ($k=0;$k<count($split);$k++){ |
||
2718 | $lowstr=strtolower($split[$k]); |
||
2719 | if (strlen(trim($split[$k]))>0 |
||
2720 | &&!in_array($lowstr,$displayed)){ |
||
2721 | if ($count_display) { |
||
2722 | $out.= "<br>"; |
||
2723 | } |
||
2724 | $count_display++;
|
||
2725 | $out.= $split[$k]; |
||
2726 | $displayed[]=$lowstr; |
||
2727 | } |
||
2728 | } |
||
2729 | } |
||
2730 | } else {
|
||
2731 | $split=explode("$$$$",$data["ITEM_".$num]); |
||
2732 | $count_display=0; |
||
2733 | for ($k=0;$k<count($split);$k++){ |
||
2734 | if (strlen(trim($split[$k]))>0){ |
||
2735 | if ($count_display){ |
||
2736 | $out.= "<br>"; |
||
2737 | } |
||
2738 | $count_display++;
|
||
2739 | $out.= $split[$k]; |
||
2740 | } |
||
2741 | } |
||
2742 | } |
||
2743 | return $out; |
||
2744 | break;
|
||
2745 | case "glpi_contracts.duration": |
||
2746 | case "glpi_contracts.notice": |
||
2747 | case "glpi_contracts.periodicity": |
||
2748 | case "glpi_contracts.facturation": |
||
2749 | if (!empty($data["ITEM_$num"])){ |
||
2750 | return $data["ITEM_$num"]." ".$LANG["financial"][57]; |
||
2751 | } else {
|
||
2752 | return " "; |
||
2753 | } |
||
2754 | break;
|
||
2755 | case "glpi_contracts.renewal": |
||
2756 | return getContractRenewalName($data["ITEM_$num"]); |
||
2757 | break;
|
||
2758 | case "glpi_ocs_link.last_update": |
||
2759 | case "glpi_ocs_link.last_ocs_update": |
||
2760 | case "glpi_computers.date_mod": |
||
2761 | case "glpi_printers.date_mod": |
||
2762 | case "glpi_networking.date_mod": |
||
2763 | case "glpi_peripherals.date_mod": |
||
2764 | case "glpi_phones.date_mod": |
||
2765 | case "glpi_software.date_mod": |
||
2766 | case "glpi_monitors.date_mod": |
||
2767 | case "glpi_docs.date_mod": |
||
2768 | case "glpi_ocs_config.date_mod" : |
||
2769 | case "glpi_users.last_login": |
||
2770 | case "glpi_users.date_mod": |
||
2771 | return convDateTime($data["ITEM_$num"]); |
||
2772 | break;
|
||
2773 | case "glpi_infocoms.end_warranty": |
||
2774 | case "glpi_contracts.end_date": |
||
2775 | if ($data["ITEM_$num"]!=''&&$data["ITEM_$num"]!="0000-00-00"){ |
||
2776 | return getWarrantyExpir($data["ITEM_$num"],$data["ITEM_".$num."_2"]); |
||
2777 | } else {
|
||
2778 | return " "; |
||
2779 | } |
||
2780 | break;
|
||
2781 | case "glpi_contracts.expire_notice": // ajout jmd |
||
2782 | if ($data["ITEM_$num"]!=''&&$data["ITEM_$num"]!="0000-00-00"){ |
||
2783 | return getExpir($data["ITEM_$num"],$data["ITEM_".$num."_2"],$data["ITEM_".$num."_3"]); |
||
2784 | } else {
|
||
2785 | return " "; |
||
2786 | } |
||
2787 | case "glpi_contracts.expire": // ajout jmd |
||
2788 | if ($data["ITEM_$num"]!=''&&$data["ITEM_$num"]!="0000-00-00"){ |
||
2789 | return getExpir($data["ITEM_$num"],$data["ITEM_".$num."_2"]); |
||
2790 | } else {
|
||
2791 | return " "; |
||
2792 | } |
||
2793 | case "glpi_contracts.begin_date": |
||
2794 | case "glpi_infocoms.buy_date": |
||
2795 | case "glpi_infocoms.use_date": |
||
2796 | return convDate($data["ITEM_$num"]); |
||
2797 | break;
|
||
2798 | case "glpi_infocoms.amort_time": |
||
2799 | if (!empty($data["ITEM_$num"])){ |
||
2800 | return $data["ITEM_$num"]." ".$LANG["financial"][9]; |
||
2801 | } else {
|
||
2802 | return " "; |
||
2803 | } |
||
2804 | break;
|
||
2805 | case "glpi_infocoms.warranty_duration": |
||
2806 | if (!empty($data["ITEM_$num"])){ |
||
2807 | return $data["ITEM_$num"]." ".$LANG["financial"][57]; |
||
2808 | } else {
|
||
2809 | return " "; |
||
2810 | } |
||
2811 | break;
|
||
2812 | case "glpi_infocoms.amort_type": |
||
2813 | return getAmortTypeName($data["ITEM_$num"]); |
||
2814 | break;
|
||
2815 | case "glpi_infocoms.value": |
||
2816 | case "glpi_infocoms.warranty_value": |
||
2817 | return formatNumber($data["ITEM_$num"]); |
||
2818 | break;
|
||
2819 | case "glpi_infocoms.alert": |
||
2820 | if ($data["ITEM_$num"]==pow(2,ALERT_END)){ |
||
2821 | return $LANG["financial"][80]; |
||
2822 | } |
||
2823 | return ""; |
||
2824 | break;
|
||
2825 | case "glpi_contracts.alert": |
||
2826 | switch ($data["ITEM_$num"]){ |
||
2827 | case pow(2,ALERT_END); |
||
2828 | return $LANG["buttons"][32]; |
||
2829 | break;
|
||
2830 | case pow(2,ALERT_NOTICE); |
||
2831 | return $LANG["financial"][10]; |
||
2832 | break;
|
||
2833 | case pow(2,ALERT_END)+pow(2,ALERT_NOTICE); |
||
2834 | return $LANG["buttons"][32]." + ".$LANG["financial"][10]; |
||
2835 | break;
|
||
2836 | } |
||
2837 | return ""; |
||
2838 | break;
|
||
2839 | case "glpi_tracking.count": |
||
2840 | if ($data["ITEM_$num"]>0&&haveRight("show_all_ticket","1")){ |
||
2841 | $out= "<a href=\"".$CFG_GLPI["root_doc"]."/front/tracking.php?reset=reset_before&status=all&type=$type&item=".$data['ID']."\">"; |
||
2842 | $out.= $data["ITEM_$num"]; |
||
2843 | $out.="</a>"; |
||
2844 | } else {
|
||
2845 | $out= $data["ITEM_$num"]; |
||
2846 | } |
||
2847 | return $out; |
||
2848 | break;
|
||
2849 | case "glpi_auth_tables.name" : |
||
2850 | return getAuthMethodName($data["ITEM_".$num], $data["ITEM_".$num."_2"], 1,$data["ITEM_".$num."_3"].$data["ITEM_".$num."_4"]); |
||
2851 | break;
|
||
2852 | case "glpi_reservation_item.comments" : |
||
2853 | if (empty($data["ITEM_$num"])){ |
||
2854 | return "<a href='".$CFG_GLPI["root_doc"]."/front/reservation.php?comment=".$data["refID"]."' title='".$LANG["reservation"][22]."'>".$LANG["common"][49]."</a>"; |
||
2855 | }else{
|
||
2856 | return "<a href='".$CFG_GLPI["root_doc"]."/front/reservation.php?comment=".$data['refID']."' title='".$LANG["reservation"][22]."'>". resume_text($data["ITEM_$num"])."</a>"; |
||
2857 | } |
||
2858 | break;
|
||
2859 | default:
|
||
2860 | |||
2861 | // Link with plugin tables : need to know left join structure
|
||
2862 | if ($type<=1000){ |
||
2863 | if (preg_match("/^glpi_plugin_([a-zA-Z]+)/", $field, $matches) |
||
2864 | || preg_match("/^glpi_dropdown_plugin_([a-zA-Z]+)/", $field, $matches) ){ |
||
2865 | if (count($matches)==2){ |
||
2866 | $plug=$matches[1]; |
||
2867 | |||
2868 | $function='plugin_'.$plug.'_giveItem'; |
||
2869 | if (function_exists($function)){ |
||
2870 | $out=$function($type,$field,$data,$num,$linkfield); |
||
2871 | if (!empty($out)){ |
||
2872 | return $out; |
||
2873 | } |
||
2874 | } |
||
2875 | } |
||
2876 | } |
||
2877 | } |
||
2878 | |||
2879 | return $data["ITEM_$num"]; |
||
2880 | break;
|
||
2881 | } |
||
2882 | |||
2883 | } |
||
2884 | |||
2885 | |||
2886 | /**
|
||
2887 | * Generic Function to get transcript table name
|
||
2888 | *
|
||
2889 | *
|
||
2890 | *@param $table reference table
|
||
2891 | *@param $device_type device type ID
|
||
2892 | *@param $meta_type meta table type ID
|
||
2893 | *
|
||
2894 | *@return Left join string
|
||
2895 | *
|
||
2896 | **/
|
||
2897 | function translate_table($table,$device_type=0,$meta_type=0){ |
||
2898 | |||
2899 | $ADD=""; |
||
2900 | if ($meta_type) $ADD="_".$meta_type; |
||
2901 | |||
2902 | switch ($table){ |
||
2903 | case "glpi_computer_device": |
||
2904 | if ($device_type==0) |
||
2905 | return $table.$ADD; |
||
2906 | else return "DEVICE_".$device_type.$ADD; |
||
2907 | break;
|
||
2908 | default :
|
||
2909 | return $table.$ADD; |
||
2910 | break;
|
||
2911 | } |
||
2912 | |||
2913 | } |
||
2914 | |||
2915 | |||
2916 | /**
|
||
2917 | * Generic Function to add Default left join to a request
|
||
2918 | *
|
||
2919 | *
|
||
2920 | *@param $type reference ID
|
||
2921 | *@param $ref_table reference table
|
||
2922 | *@param $already_link_tables array of tables already joined
|
||
2923 | *
|
||
2924 | *@return Left join string
|
||
2925 | *
|
||
2926 | **/
|
||
2927 | function addDefaultJoin ($type,$ref_table,&$already_link_tables){ |
||
2928 | |||
2929 | switch ($type){ |
||
2930 | // No link
|
||
2931 | case USER_TYPE: |
||
2932 | return addLeftJoin($type,$ref_table,$already_link_tables,"glpi_users_profiles",""); |
||
2933 | break;
|
||
2934 | default :
|
||
2935 | return ""; |
||
2936 | break;
|
||
2937 | } |
||
2938 | } |
||
2939 | |||
2940 | |||
2941 | |||
2942 | /**
|
||
2943 | * Generic Function to add left join to a request
|
||
2944 | *
|
||
2945 | *
|
||
2946 | *@param $type reference ID
|
||
2947 | *@param $ref_table reference table
|
||
2948 | *@param $already_link_tables array of tables already joined
|
||
2949 | *@param $new_table new table to join
|
||
2950 | *@param $device_type device_type for search on computer device
|
||
2951 | *@param $meta is it a meta item ?
|
||
2952 | *@param $meta_type meta type table
|
||
2953 | *@param $linkfield linkfield for LeftJoin
|
||
2954 | *
|
||
2955 | *
|
||
2956 | *@return Left join string
|
||
2957 | *
|
||
2958 | **/
|
||
2959 | function addLeftJoin ($type,$ref_table,&$already_link_tables,$new_table,$linkfield,$device_type=0,$meta=0,$meta_type=0){ |
||
2960 | |||
2961 | global $PLUGIN_HOOKS,$LANG; |
||
2962 | |||
2963 | // Rename table for meta left join
|
||
2964 | $AS=""; |
||
2965 | $nt=$new_table; |
||
2966 | |||
2967 | // Multiple link possibilies case
|
||
2968 | if ($new_table=="glpi_users"){ |
||
2969 | $AS = " AS ".$new_table."_".$linkfield; |
||
2970 | $nt.="_".$linkfield; |
||
2971 | } |
||
2972 | |||
2973 | $addmetanum=""; |
||
2974 | $rt=$ref_table; |
||
2975 | if ($meta) { |
||
2976 | $AS= " AS ".$nt."_".$meta_type; |
||
2977 | $nt=$nt."_".$meta_type; |
||
2978 | //$rt.="_".$meta_type;
|
||
2979 | } |
||
2980 | |||
2981 | // Auto link
|
||
2982 | if ($ref_table==$new_table) return ""; |
||
2983 | |||
2984 | if (in_array(translate_table($new_table,$device_type,$meta_type).".".$linkfield,$already_link_tables)) return ""; |
||
2985 | else array_push($already_link_tables,translate_table($new_table,$device_type,$meta_type).".".$linkfield); |
||
2986 | |||
2987 | |||
2988 | // Plugin can override a left join definition for its type
|
||
2989 | if ($type>1000){ |
||
2990 | if (isset($PLUGIN_HOOKS['plugin_types'][$type])){ |
||
2991 | $function='plugin_'.$PLUGIN_HOOKS['plugin_types'][$type].'_addLeftJoin'; |
||
2992 | if (function_exists($function)){ |
||
2993 | $out=$function($type,$ref_table,$new_table,$linkfield,$already_link_tables); |
||
2994 | if (!empty($out)){ |
||
2995 | return $out; |
||
2996 | } |
||
2997 | } |
||
2998 | } |
||
2999 | } |
||
3000 | |||
3001 | switch ($new_table){ |
||
3002 | // No link
|
||
3003 | case "glpi_auth_tables": |
||
3004 | return " LEFT JOIN glpi_auth_ldap ON (glpi_users.auth_method = ".AUTH_LDAP." AND glpi_users.id_auth = glpi_auth_ldap.ID) |
||
3005 | LEFT JOIN glpi_auth_mail ON (glpi_users.auth_method = ".AUTH_MAIL." AND glpi_users.id_auth = glpi_auth_mail.ID) "; |
||
3006 | break;
|
||
3007 | case "glpi_reservation_item": |
||
3008 | return ""; |
||
3009 | break;
|
||
3010 | case "glpi_entities_data": |
||
3011 | return " LEFT JOIN $new_table $AS ON ($rt.ID = $nt.FK_entities) "; |
||
3012 | break;
|
||
3013 | case "glpi_ocs_link": |
||
3014 | return " LEFT JOIN $new_table $AS ON ($rt.ID = $nt.glpi_id) "; |
||
3015 | break;
|
||
3016 | case "glpi_ocs_link": |
||
3017 | return " LEFT JOIN $new_table $AS ON ($rt.ID = $nt.glpi_id) "; |
||
3018 | break;
|
||
3019 | case "glpi_registry": |
||
3020 | return " LEFT JOIN $new_table $AS ON ($rt.ID = $nt.computer_id) "; |
||
3021 | break;
|
||
3022 | case "glpi_dropdown_os": |
||
3023 | if ($type==SOFTWARE_TYPE){ |
||
3024 | return " LEFT JOIN $new_table $AS ON ($rt.platform = $nt.ID) "; |
||
3025 | } else {
|
||
3026 | return " LEFT JOIN $new_table $AS ON ($rt.os = $nt.ID) "; |
||
3027 | } |
||
3028 | break;
|
||
3029 | case "glpi_networking_ports": |
||
3030 | $out=""; |
||
3031 | // Add networking device for computers
|
||
3032 | if ($type==COMPUTER_TYPE){ |
||
3033 | $out=addLeftJoin($type,$ref_table,$already_link_tables,"glpi_computer_device",$linkfield,NETWORK_DEVICE,$meta,$meta_type); |
||
3034 | } |
||
3035 | return $out." LEFT JOIN $new_table $AS ON ($rt.ID = $nt.on_device AND $nt.device_type='$type') "; |
||
3036 | break;
|
||
3037 | case "glpi_dropdown_netpoint": |
||
3038 | // Link to glpi_networking_ports before
|
||
3039 | $out=addLeftJoin($type,$ref_table,$already_link_tables,"glpi_networking_ports",$linkfield); |
||
3040 | return $out." LEFT JOIN $new_table $AS ON (glpi_networking_ports.netpoint = $nt.ID) "; |
||
3041 | break;
|
||
3042 | case "glpi_tracking": |
||
3043 | return " LEFT JOIN $new_table $AS ON ($nt.device_type='$type' AND $rt.ID = $nt.computer) "; |
||
3044 | break;
|
||
3045 | case "glpi_users": |
||
3046 | return " LEFT JOIN $new_table $AS ON ($rt.$linkfield = $nt.ID) "; |
||
3047 | break;
|
||
3048 | case "glpi_enterprises": |
||
3049 | if ($type==CONTACT_TYPE){ |
||
3050 | $out=addLeftJoin($type,$ref_table,$already_link_tables,"glpi_contact_enterprise","FK_contact"); |
||
3051 | return $out." LEFT JOIN $new_table $AS ON (glpi_contact_enterprise.FK_enterprise = $nt.ID ". |
||
3052 | getEntitiesRestrictRequest("AND","glpi_enterprises",'','',true).") "; |
||
3053 | } else {
|
||
3054 | return " LEFT JOIN $new_table $AS ON ($rt.FK_enterprise = $nt.ID) "; |
||
3055 | } |
||
3056 | break;
|
||
3057 | case "glpi_contacts": |
||
3058 | $out=addLeftJoin($type,$ref_table,$already_link_tables,"glpi_contact_enterprise","FK_enterprise"); |
||
3059 | return $out." LEFT JOIN $new_table $AS ON (glpi_contact_enterprise.FK_contact = $nt.ID ". |
||
3060 | getEntitiesRestrictRequest("AND","glpi_contacts",'','',true)." ) "; |
||
3061 | break;
|
||
3062 | case "glpi_contact_enterprise": |
||
3063 | return " LEFT JOIN $new_table $AS ON ($rt.ID = $nt.$linkfield) "; |
||
3064 | break;
|
||
3065 | case "glpi_dropdown_manufacturer": |
||
3066 | return " LEFT JOIN $new_table $AS ON ($rt.FK_glpi_enterprise = $nt.ID) "; |
||
3067 | break;
|
||
3068 | |||
3069 | case "glpi_enterprises_infocoms": |
||
3070 | $out=addLeftJoin($type,$ref_table,$already_link_tables,"glpi_infocoms",$linkfield); |
||
3071 | return $out." LEFT JOIN glpi_enterprises AS glpi_enterprises_infocoms ON (glpi_infocoms.FK_enterprise = $nt.ID) "; |
||
3072 | break;
|
||
3073 | case "glpi_dropdown_budget": |
||
3074 | $out=addLeftJoin($type,$ref_table,$already_link_tables,"glpi_infocoms",$linkfield); |
||
3075 | return $out." LEFT JOIN $new_table $AS ON (glpi_infocoms.budget = $nt.ID) "; |
||
3076 | break;
|
||
3077 | case "glpi_infocoms": |
||
3078 | return " LEFT JOIN $new_table $AS ON ($rt.ID = $nt.FK_device AND $nt.device_type='$type') "; |
||
3079 | break;
|
||
3080 | case "glpi_contract_device": |
||
3081 | return " LEFT JOIN $new_table $AS ON ($rt.ID = $nt.FK_device AND $nt.device_type='$type') "; |
||
3082 | break;
|
||
3083 | case "glpi_users_profiles": |
||
3084 | return " LEFT JOIN $new_table $AS ON ($rt.ID = $nt.FK_users) "; |
||
3085 | break;
|
||
3086 | |||
3087 | case "glpi_profiles": |
||
3088 | // Link to glpi_users_profiles before
|
||
3089 | $out=addLeftJoin($type,$rt,$already_link_tables,"glpi_users_profiles",$linkfield); |
||
3090 | if ($type==USER_TYPE){ |
||
3091 | $out.=addLeftJoin($type,"glpi_users_profiles",$already_link_tables,"glpi_complete_entities","FK_entities"); |
||
3092 | } |
||
3093 | return $out." LEFT JOIN $new_table $AS ON (glpi_users_profiles.FK_profiles = $nt.ID) "; |
||
3094 | break;
|
||
3095 | case "glpi_entities": |
||
3096 | if ($type==USER_TYPE){ |
||
3097 | $out=addLeftJoin($type,"glpi_users_profiles",$already_link_tables,"glpi_profiles",""); |
||
3098 | $out.=addLeftJoin($type,"glpi_users_profiles",$already_link_tables,"glpi_complete_entities","FK_entities"); |
||
3099 | return $out; |
||
3100 | } else {
|
||
3101 | return " LEFT JOIN $new_table $AS ON ($rt.$linkfield = $nt.ID) "; |
||
3102 | } |
||
3103 | break;
|
||
3104 | case "glpi_complete_entities": |
||
3105 | array_push($already_link_tables,translate_table("glpi_entities",$device_type,$meta_type).".".$linkfield); |
||
3106 | |||
3107 | if (empty($AS)){ |
||
3108 | $AS = "AS glpi_entities"; |
||
3109 | } |
||
3110 | return " LEFT JOIN ( SELECT * FROM glpi_entities UNION SELECT 0 AS ID, '".addslashes($LANG["entity"][2])."' AS name, -1 AS parentID, '".addslashes($LANG["entity"][2])."' AS completename, '' AS comments, -1 AS level) |
||
3111 | $AS ON ($rt.$linkfield = glpi_entities.ID) ";
|
||
3112 | break;
|
||
3113 | case "glpi_users_groups": |
||
3114 | return " LEFT JOIN $new_table $AS ON ($rt.ID = $nt.FK_users) "; |
||
3115 | break;
|
||
3116 | |||
3117 | case "glpi_groups": |
||
3118 | if (empty($linkfield)){ |
||
3119 | // Link to glpi_users_group before
|
||
3120 | $out=addLeftJoin($type,$rt,$already_link_tables,"glpi_users_groups",$linkfield); |
||
3121 | |||
3122 | return $out." LEFT JOIN $new_table $AS ON (glpi_users_groups.FK_groups = $nt.ID) "; |
||
3123 | } else {
|
||
3124 | return " LEFT JOIN $new_table $AS ON ($rt.$linkfield = $nt.ID) "; |
||
3125 | } |
||
3126 | |||
3127 | break;
|
||
3128 | case "glpi_contracts": |
||
3129 | $out=addLeftJoin($type,$rt,$already_link_tables,"glpi_contract_device",$linkfield); |
||
3130 | return $out." LEFT JOIN $new_table $AS ON (glpi_contract_device.FK_contract = $nt.ID) "; |
||
3131 | break;
|
||
3132 | case "glpi_licenses": |
||
3133 | if (!$meta){ |
||
3134 | return " LEFT JOIN $new_table $AS ON ($rt.ID = $nt.sID) "; |
||
3135 | } else {
|
||
3136 | return ""; |
||
3137 | } |
||
3138 | break;
|
||
3139 | case "glpi_computer_device": |
||
3140 | if ($device_type==0){ |
||
3141 | return " LEFT JOIN $new_table $AS ON ($rt.ID = $nt.FK_computers ) "; |
||
3142 | } else {
|
||
3143 | return " LEFT JOIN $new_table AS DEVICE_".$device_type." ON ($rt.ID = DEVICE_".$device_type.".FK_computers AND DEVICE_".$device_type.".device_type='$device_type') "; |
||
3144 | } |
||
3145 | break;
|
||
3146 | case "glpi_device_processor": |
||
3147 | $out=addLeftJoin($type,$ref_table,$already_link_tables,"glpi_computer_device",$linkfield,PROCESSOR_DEVICE,$meta,$meta_type); |
||
3148 | return $out." LEFT JOIN $new_table $AS ON (DEVICE_".PROCESSOR_DEVICE.".FK_device = $nt.ID) "; |
||
3149 | break;
|
||
3150 | case "glpi_device_ram": |
||
3151 | $out=addLeftJoin($type,$ref_table,$already_link_tables,"glpi_computer_device",$linkfield,RAM_DEVICE,$meta,$meta_type); |
||
3152 | return $out." LEFT JOIN $new_table $AS ON (DEVICE_".RAM_DEVICE.".FK_device = $nt.ID) "; |
||
3153 | break;
|
||
3154 | case "glpi_device_iface": |
||
3155 | $out=addLeftJoin($type,$ref_table,$already_link_tables,"glpi_computer_device",$linkfield,NETWORK_DEVICE,$meta,$meta_type); |
||
3156 | return $out." LEFT JOIN $new_table $AS ON (DEVICE_".NETWORK_DEVICE.".FK_device = $nt.ID) "; |
||
3157 | break;
|
||
3158 | case "glpi_device_sndcard": |
||
3159 | $out=addLeftJoin($type,$ref_table,$already_link_tables,"glpi_computer_device",$linkfield,SND_DEVICE,$meta,$meta_type); |
||
3160 | return $out." LEFT JOIN $new_table $AS ON (DEVICE_".SND_DEVICE.".FK_device = $nt.ID) "; |
||
3161 | break;
|
||
3162 | case "glpi_device_gfxcard": |
||
3163 | $out=addLeftJoin($type,$ref_table,$already_link_tables,"glpi_computer_device",$linkfield,GFX_DEVICE,$meta,$meta_type); |
||
3164 | return $out." LEFT JOIN $new_table $AS ON (DEVICE_".GFX_DEVICE.".FK_device = $nt.ID) "; |
||
3165 | break;
|
||
3166 | case "glpi_device_moboard": |
||
3167 | $out=addLeftJoin($type,$ref_table,$already_link_tables,"glpi_computer_device",$linkfield,MOBOARD_DEVICE,$meta,$meta_type); |
||
3168 | return $out." LEFT JOIN $new_table $AS ON (DEVICE_".MOBOARD_DEVICE.".FK_device = $nt.ID) "; |
||
3169 | break;
|
||
3170 | case "glpi_device_hdd": |
||
3171 | $out=addLeftJoin($type,$ref_table,$already_link_tables,"glpi_computer_device",$linkfield,HDD_DEVICE,$meta,$meta_type); |
||
3172 | return $out." LEFT JOIN $new_table $AS ON (DEVICE_".HDD_DEVICE.".FK_device = $nt.ID) "; |
||
3173 | break;
|
||
3174 | default :
|
||
3175 | |||
3176 | if ($type<=1000){ |
||
3177 | if (preg_match("/^glpi_plugin_([a-zA-Z]+)/", $new_table, $matches) |
||
3178 | || preg_match("/^glpi_dropdown_plugin_([a-zA-Z]+)/", $new_table, $matches) ){ |
||
3179 | if (count($matches)==2){ |
||
3180 | $plug=$matches[1]; |
||
3181 | $function='plugin_'.$plug.'_addLeftJoin'; |
||
3182 | if (function_exists($function)){ |
||
3183 | $out=$function($type,$ref_table,$new_table,$linkfield,$already_link_tables); |
||
3184 | if (!empty($out)){ |
||
3185 | return $out; |
||
3186 | } |
||
3187 | } |
||
3188 | } |
||
3189 | } |
||
3190 | } |
||
3191 | |||
3192 | if (!empty($linkfield)){ |
||
3193 | return " LEFT JOIN $new_table $AS ON ($rt.$linkfield = $nt.ID) "; |
||
3194 | } else {
|
||
3195 | return ""; |
||
3196 | } |
||
3197 | |||
3198 | break;
|
||
3199 | } |
||
3200 | } |
||
3201 | |||
3202 | |||
3203 | /**
|
||
3204 | * Generic Function to add left join for meta items
|
||
3205 | *
|
||
3206 | *
|
||
3207 | *@param $from_type reference item type ID
|
||
3208 | *@param $to_type item type to add
|
||
3209 | *@param $already_link_tables2 array of tables already joined
|
||
3210 | *@param $nullornott Used LEFT JOIN (null generation) or INNER JOIN for strict join
|
||
3211 | *
|
||
3212 | *
|
||
3213 | *@return Meta Left join string
|
||
3214 | *
|
||
3215 | **/
|
||
3216 | function addMetaLeftJoin($from_type,$to_type,&$already_link_tables2,$nullornott){ |
||
3217 | global $LINK_ID_TABLE; |
||
3218 | |||
3219 | $LINK=" INNER JOIN "; |
||
3220 | if ($nullornott) |
||
3221 | $LINK=" LEFT JOIN "; |
||
3222 | |||
3223 | switch ($from_type){ |
||
3224 | case COMPUTER_TYPE : |
||
3225 | switch ($to_type){ |
||
3226 | /* case NETWORKING_TYPE :
|
||
3227 | array_push($already_link_tables2,$LINK_ID_TABLE[NETWORKING_TYPE]."_$to_type");
|
||
3228 | return " $LINK glpi_networking_ports as ports ON (glpi_computers.ID = ports.on_device AND ports.device_type='".COMPUTER_TYPE."') ".
|
||
3229 | " $LINK glpi_networking_wire as wire1 ON (ports.ID = wire1.end1) ".
|
||
3230 | " $LINK glpi_networking_ports as ports21 ON (ports21.device_type='".NETWORKING_TYPE."' AND wire1.end2 = ports21.ID ) ".
|
||
3231 | " $LINK glpi_networking_wire as wire2 ON (ports.ID = wire2.end2) ".
|
||
3232 | " $LINK glpi_networking_ports as ports22 ON (ports22.device_type='".NETWORKING_TYPE."' AND wire2.end1 = ports22.ID ) ".
|
||
3233 | " $LINK glpi_networking$to_type ON (glpi_networking$to_type.ID = ports22.on_device OR glpi_networking.ID = ports21.on_device)";
|
||
3234 | break;
|
||
3235 | */
|
||
3236 | case PRINTER_TYPE : |
||
3237 | array_push($already_link_tables2,$LINK_ID_TABLE[PRINTER_TYPE]); |
||
3238 | return " $LINK glpi_connect_wire AS conn_print_$to_type ON (conn_print_$to_type.end2=glpi_computers.ID AND conn_print_$to_type.type='".PRINTER_TYPE."') ". |
||
3239 | " $LINK glpi_printers ON (conn_print_$to_type.end1=glpi_printers.ID) ";
|
||
3240 | break;
|
||
3241 | case MONITOR_TYPE : |
||
3242 | array_push($already_link_tables2,$LINK_ID_TABLE[MONITOR_TYPE]); |
||
3243 | return " $LINK glpi_connect_wire AS conn_mon_$to_type ON (conn_mon_$to_type.end2=glpi_computers.ID AND conn_mon_$to_type.type='".MONITOR_TYPE."') ". |
||
3244 | " $LINK glpi_monitors ON (conn_mon_$to_type.end1=glpi_monitors.ID) ";
|
||
3245 | break;
|
||
3246 | case PERIPHERAL_TYPE : |
||
3247 | array_push($already_link_tables2,$LINK_ID_TABLE[PERIPHERAL_TYPE]); |
||
3248 | return " $LINK glpi_connect_wire AS conn_periph_$to_type ON (conn_periph_$to_type.end2=glpi_computers.ID AND conn_periph_$to_type.type='".PERIPHERAL_TYPE."') ". |
||
3249 | " $LINK glpi_peripherals ON (conn_periph_$to_type.end1=glpi_peripherals.ID) ";
|
||
3250 | break;
|
||
3251 | case PHONE_TYPE : |
||
3252 | array_push($already_link_tables2,$LINK_ID_TABLE[PHONE_TYPE]); |
||
3253 | return " $LINK glpi_connect_wire AS conn_phones_$to_type ON (conn_phones_$to_type.end2=glpi_computers.ID AND conn_phones_$to_type.type='".PHONE_TYPE."') ". |
||
3254 | " $LINK glpi_phones ON (conn_phones_$to_type.end1=glpi_phones.ID) ";
|
||
3255 | break;
|
||
3256 | |||
3257 | case SOFTWARE_TYPE : |
||
3258 | array_push($already_link_tables2,$LINK_ID_TABLE[SOFTWARE_TYPE]); |
||
3259 | return " $LINK glpi_inst_software as inst_$to_type ON (inst_$to_type.cID = glpi_computers.ID) ". |
||
3260 | " $LINK glpi_licenses as glpi_licenses_$to_type ON ( inst_$to_type.license=glpi_licenses_$to_type.ID ) ".
|
||
3261 | " $LINK glpi_software ON (glpi_licenses_$to_type.sID = glpi_software.ID)";
|
||
3262 | break;
|
||
3263 | } |
||
3264 | break;
|
||
3265 | case MONITOR_TYPE : |
||
3266 | switch ($to_type){ |
||
3267 | case COMPUTER_TYPE : |
||
3268 | array_push($already_link_tables2,$LINK_ID_TABLE[COMPUTER_TYPE]); |
||
3269 | return " $LINK glpi_connect_wire AS conn_mon_$to_type ON (conn_mon_$to_type.end1=glpi_monitors.ID AND conn_mon_$to_type.type='".MONITOR_TYPE."') ". |
||
3270 | " $LINK glpi_computers ON (conn_mon_$to_type.end2=glpi_computers.ID) ";
|
||
3271 | |||
3272 | break;
|
||
3273 | } |
||
3274 | break;
|
||
3275 | case PRINTER_TYPE : |
||
3276 | switch ($to_type){ |
||
3277 | case COMPUTER_TYPE : |
||
3278 | array_push($already_link_tables2,$LINK_ID_TABLE[COMPUTER_TYPE]); |
||
3279 | return " $LINK glpi_connect_wire AS conn_mon_$to_type ON (conn_mon_$to_type.end1=glpi_printers.ID AND conn_mon_$to_type.type='".PRINTER_TYPE."') ". |
||
3280 | " $LINK glpi_computers ON (conn_mon_$to_type.end2=glpi_computers.ID) ";
|
||
3281 | |||
3282 | break;
|
||
3283 | } |
||
3284 | break;
|
||
3285 | case PERIPHERAL_TYPE : |
||
3286 | switch ($to_type){ |
||
3287 | case COMPUTER_TYPE : |
||
3288 | array_push($already_link_tables2,$LINK_ID_TABLE[COMPUTER_TYPE]); |
||
3289 | return " $LINK glpi_connect_wire AS conn_mon_$to_type ON (conn_mon_$to_type.end1=glpi_peripherals.ID AND conn_mon_$to_type.type='".PERIPHERAL_TYPE."') ". |
||
3290 | " $LINK glpi_computers ON (conn_mon_$to_type.end2=glpi_computers.ID) ";
|
||
3291 | |||
3292 | break;
|
||
3293 | } |
||
3294 | break;
|
||
3295 | case PHONE_TYPE : |
||
3296 | switch ($to_type){ |
||
3297 | case COMPUTER_TYPE : |
||
3298 | array_push($already_link_tables2,$LINK_ID_TABLE[COMPUTER_TYPE]); |
||
3299 | return " $LINK glpi_connect_wire AS conn_mon_$to_type ON (conn_mon_$to_type.end1=glpi_phones.ID AND conn_mon_$to_type.type='".PHONE_TYPE."') ". |
||
3300 | " $LINK glpi_computers ON (conn_mon_$to_type.end2=glpi_computers.ID) ";
|
||
3301 | |||
3302 | break;
|
||
3303 | } |
||
3304 | break;
|
||
3305 | case SOFTWARE_TYPE : |
||
3306 | switch ($to_type){ |
||
3307 | case COMPUTER_TYPE : |
||
3308 | array_push($already_link_tables2,$LINK_ID_TABLE[COMPUTER_TYPE]); |
||
3309 | return " $LINK glpi_licenses as glpi_licenses_$to_type ON ( glpi_licenses_$to_type.sID = glpi_software.ID ) ". |
||
3310 | " $LINK glpi_inst_software as inst_$to_type ON (inst_$to_type.license = glpi_licenses_$to_type.ID) ".
|
||
3311 | " $LINK glpi_computers ON (inst_$to_type.cID = glpi_computers.ID)";
|
||
3312 | |||
3313 | break;
|
||
3314 | } |
||
3315 | break;
|
||
3316 | |||
3317 | |||
3318 | } |
||
3319 | |||
3320 | } |
||
3321 | |||
3322 | |||
3323 | /**
|
||
3324 | * Convert an array to be add in url
|
||
3325 | *
|
||
3326 | *
|
||
3327 | * @param $name name of array
|
||
3328 | * @param $array array to be added
|
||
3329 | * @return string to add
|
||
3330 | *
|
||
3331 | */
|
||
3332 | function getMultiSearchItemForLink($name,$array){ |
||
3333 | $out=""; |
||
3334 | |||
3335 | if (is_array($array)&&count($array)>0){ |
||
3336 | foreach($array as $key => $val){ |
||
3337 | // if ($name!="link"||$key!=0)
|
||
3338 | $out.="&".$name."[$key]=".$val; |
||
3339 | } |
||
3340 | } |
||
3341 | return $out; |
||
3342 | |||
3343 | } |
||
3344 | /**
|
||
3345 | * Is the search item related to infocoms
|
||
3346 | *
|
||
3347 | *
|
||
3348 | * @param $device_type item type
|
||
3349 | * @param $searchID ID of the element in $SEARCH_OPTION
|
||
3350 | * @return boolean
|
||
3351 | *
|
||
3352 | */
|
||
3353 | function isInfocomSearch($device_type,$searchID){ |
||
3354 | global $CFG_GLPI; |
||
3355 | return (($searchID>=25&&$searchID<=28) |
||
3356 | ||($searchID>=37&&$searchID<=38) |
||
3357 | ||($searchID>=50&&$searchID<=59) |
||
3358 | ||($searchID>=120&&$searchID<=122))&&in_array($device_type,$CFG_GLPI["infocom_types"]); |
||
3359 | } |
||
3360 | |||
3361 | ?> |