ryxeo-glpi-git / inc / software.function.php @ b67d8923
Historique | Voir | Annoter | Télécharger (51,5 ko)
1 | b67d8923 | Eric Seigne | <?php
|
---|---|---|---|
2 | |||
3 | /*
|
||
4 | * @version $Id: software.function.php 7875 2009-01-23 15:16:47Z moyo $
|
||
5 | -------------------------------------------------------------------------
|
||
6 | GLPI - Gestionnaire Libre de Parc Informatique
|
||
7 | Copyright (C) 2003-2009 by the INDEPNET Development Team.
|
||
8 | |||
9 | http://indepnet.net/ http://glpi-project.org
|
||
10 | -------------------------------------------------------------------------
|
||
11 | |||
12 | LICENSE
|
||
13 | |||
14 | This file is part of GLPI.
|
||
15 | |||
16 | GLPI is free software; you can redistribute it and/or modify
|
||
17 | it under the terms of the GNU General Public License as published by
|
||
18 | the Free Software Foundation; either version 2 of the License, or
|
||
19 | (at your option) any later version.
|
||
20 | |||
21 | GLPI is distributed in the hope that it will be useful,
|
||
22 | but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
23 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
24 | GNU General Public License for more details.
|
||
25 | |||
26 | You should have received a copy of the GNU General Public License
|
||
27 | along with GLPI; if not, write to the Free Software
|
||
28 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||
29 | --------------------------------------------------------------------------
|
||
30 | */
|
||
31 | |||
32 | // ----------------------------------------------------------------------
|
||
33 | // Original Author of file:
|
||
34 | // Purpose of file:
|
||
35 | // ----------------------------------------------------------------------
|
||
36 | |||
37 | if (!defined('GLPI_ROOT')) { |
||
38 | die("Sorry. You can't access directly to this file"); |
||
39 | } |
||
40 | |||
41 | /**
|
||
42 | * Show License add div
|
||
43 | *
|
||
44 | * @param $ID ID of the software
|
||
45 | * @return nothing
|
||
46 | */
|
||
47 | function showLicensesAdd($ID) { |
||
48 | |||
49 | global $CFG_GLPI, $LANG; |
||
50 | |||
51 | if (!haveRight("software", "w")) |
||
52 | return false; |
||
53 | |||
54 | echo "<div class='center'> <table class='tab_cadre_fixe' cellpadding='2'>"; |
||
55 | echo "<tr><td align='center' class='tab_bg_2'><strong>"; |
||
56 | echo "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/software.licenses.php?form=add&sID=$ID\">"; |
||
57 | echo $LANG["software"][12]; |
||
58 | echo "</a></strong></td></tr>"; |
||
59 | echo "</table></div><br>"; |
||
60 | } |
||
61 | |||
62 | /**
|
||
63 | * Show Licenses of a software
|
||
64 | *
|
||
65 | * @param $sID ID of the software
|
||
66 | * @param $show_computers Show computers using the licenses
|
||
67 | * @return nothing
|
||
68 | */
|
||
69 | function showLicenses($sID, $show_computers = 0) { |
||
70 | |||
71 | global $DB, $CFG_GLPI, $LANG; |
||
72 | |||
73 | if (!haveRight("software", "r")) |
||
74 | return false; |
||
75 | $canedit = haveRight("software", "w"); |
||
76 | $canshowcomputer = haveRight("computer", "r"); |
||
77 | $ci = new CommonItem(); |
||
78 | $query = "SELECT count(*) AS COUNT FROM glpi_licenses WHERE (sID = '$sID')"; |
||
79 | $query_update = "SELECT count(glpi_licenses.ID) AS COUNT FROM glpi_licenses, glpi_software WHERE (glpi_software.ID = glpi_licenses.sID AND glpi_software.update_software = '$sID' and glpi_software.is_update='1')"; |
||
80 | |||
81 | $found_soft = false; |
||
82 | if ($result = $DB->query($query)) { |
||
83 | if ($DB->result($result, 0, 0) != 0) { |
||
84 | $nb_licences = $DB->result($result, 0, "COUNT"); |
||
85 | |||
86 | $result_update = $DB->query($query_update); |
||
87 | $nb_updates = $DB->result($result_update, 0, "COUNT"); |
||
88 | $installed = getInstalledLicence($sID); |
||
89 | $tobuy = getLicenceToBuy($sID); |
||
90 | |||
91 | $isfreeorglobal = isFreeSoftware($sID) || isGlobalSoftware($sID); |
||
92 | // As t'on utilisé trop de licences en prenant en compte les mises a jours (double install original + mise �jour)
|
||
93 | // Rien si free software
|
||
94 | $pb = ""; |
||
95 | if (($nb_licences - $nb_updates - $installed) < 0 && !$isfreeorglobal) |
||
96 | $pb = "class='tab_bg_1_2'"; |
||
97 | |||
98 | echo "<form id='lic_form' name='lic_form' method='post' action=\"" . $CFG_GLPI["root_doc"] . "/front/software.licenses.php\">"; |
||
99 | |||
100 | echo "<br><div class='center'><table cellpadding='2' class='tab_cadre_fixe'>"; |
||
101 | echo "<tr>"; |
||
102 | if ($canedit && !$show_computers) { |
||
103 | echo "<th> </th>"; |
||
104 | } |
||
105 | |||
106 | echo "<th colspan='6' $pb >"; |
||
107 | echo $nb_licences; |
||
108 | echo " " . $LANG["software"][13] . " - $nb_updates " . $LANG["software"][36] . " - $installed " . $LANG["software"][19] . " - $tobuy " . $LANG["software"][37] . "</th>"; |
||
109 | echo "<th colspan='1'>"; |
||
110 | echo " " . $LANG["software"][19] . " :</th></tr>"; |
||
111 | $i = 0; |
||
112 | echo "<tr>"; |
||
113 | if ($canedit && !$show_computers) { |
||
114 | echo "<th> </th>"; |
||
115 | } |
||
116 | |||
117 | echo "<th>" . $LANG["software"][5] . "</th><th>" . $LANG["common"][19] . "</th><th>" . $LANG["common"][33] . "</th><th>" . $LANG["software"][32] . "</th><th>" . $LANG["software"][28] . "</th><th>" . $LANG["software"][35] . "</th>"; |
||
118 | echo "<th>"; |
||
119 | |||
120 | if ($canedit) { |
||
121 | if ($show_computers) { |
||
122 | echo $LANG["buttons"][14] . " "; |
||
123 | echo "<select name='update_licenses' id='update_licenses_choice'>"; |
||
124 | echo "<option value=''>-----</option>"; |
||
125 | echo "<option value='update_expire'>" . $LANG["software"][32] . "</option>"; |
||
126 | echo "<option value='update_buy'>" . $LANG["software"][35] . "</option>"; |
||
127 | echo "<option value='move'>" . $LANG["buttons"][20] . "</option>"; |
||
128 | echo "<option value='delete_license'>" . $LANG["buttons"][6] . "</option>"; |
||
129 | echo "</select>"; |
||
130 | |||
131 | $params = array ( |
||
132 | 'type' => '__VALUE__', |
||
133 | 'sID' => $sID, |
||
134 | |||
135 | ); |
||
136 | ajaxUpdateItemOnSelectEvent("update_licenses_choice", "update_licenses_view", $CFG_GLPI["root_doc"] . "/ajax/updateLicenses.php", $params, false); |
||
137 | |||
138 | echo "<span id='update_licenses_view'>\n"; |
||
139 | echo " "; |
||
140 | echo "</span>\n"; |
||
141 | } else {
|
||
142 | echo $LANG["buttons"][14] . " "; |
||
143 | echo "<select name='update_licenses' id='update_licenses_choice'>"; |
||
144 | echo "<option value=''>-----</option>"; |
||
145 | echo "<option value='move_to_software'>" . $LANG["buttons"][20] . "</option>"; |
||
146 | echo "<option value='delete_similar_license'>" . $LANG["buttons"][6] . "</option>"; |
||
147 | echo "</select>"; |
||
148 | |||
149 | $params = array ( |
||
150 | 'type' => '__VALUE__', |
||
151 | 'sID' => $sID, |
||
152 | |||
153 | ); |
||
154 | ajaxUpdateItemOnSelectEvent("update_licenses_choice", "update_licenses_view", $CFG_GLPI["root_doc"] . "/ajax/updateLicenses.php", $params, false); |
||
155 | |||
156 | } |
||
157 | echo "<span id='update_licenses_view'>\n"; |
||
158 | echo " "; |
||
159 | echo "</span>\n"; |
||
160 | |||
161 | } else
|
||
162 | echo " "; |
||
163 | |||
164 | echo "</th></tr>"; |
||
165 | } else {
|
||
166 | |||
167 | echo "<br><div class='center'><table border='0' width='50%' cellpadding='2'>"; |
||
168 | echo "<tr><th>" . $LANG["software"][14] . "</th></tr>"; |
||
169 | echo "</table></div>"; |
||
170 | } |
||
171 | } |
||
172 | |||
173 | $query = "SELECT count(ID) AS COUNT, version as VERSION, serial as SERIAL, expire as EXPIRE, oem as OEM, oem_computer as OEM_COMPUTER, buy as BUY, ID AS ID FROM glpi_licenses WHERE (sID = '$sID') GROUP BY version, serial, expire, oem, oem_computer, buy ORDER BY version, serial,oem, oem_computer"; |
||
174 | //echo $query;
|
||
175 | if ($result = $DB->query($query)) { |
||
176 | while ($data = $DB->fetch_array($result)) { |
||
177 | $version = $data["VERSION"]; |
||
178 | $serial = $data["SERIAL"]; |
||
179 | $expire = $data["EXPIRE"]; |
||
180 | $oem = $data["OEM"]; |
||
181 | $oem_computer = $data["OEM_COMPUTER"]; |
||
182 | $buy = $data["BUY"]; |
||
183 | |||
184 | $SEARCH_LICENCE = "(glpi_licenses.sID = $sID AND glpi_licenses.serial = '" . $serial . "' AND glpi_licenses.oem = '$oem' AND glpi_licenses.oem_computer = '$oem_computer' AND glpi_licenses.buy = '$buy' "; |
||
185 | if ($expire == "") |
||
186 | $SEARCH_LICENCE .= " AND glpi_licenses.expire IS NULL"; |
||
187 | else
|
||
188 | $SEARCH_LICENCE .= " AND glpi_licenses.expire = '$expire'"; |
||
189 | |||
190 | if ($version == "" || is_null($version)) |
||
191 | $SEARCH_LICENCE .= " AND (glpi_licenses.version='' OR glpi_licenses.version IS NULL))"; |
||
192 | else
|
||
193 | $SEARCH_LICENCE .= " AND glpi_licenses.version = '$version')"; |
||
194 | |||
195 | $today = date("Y-m-d"); |
||
196 | $expirer = 0; |
||
197 | $expirecss = ""; |
||
198 | if ($expire != NULL && $today > $expire) { |
||
199 | $expirer = 1; |
||
200 | $expirecss = "_2"; |
||
201 | } |
||
202 | // Get installed licences
|
||
203 | |||
204 | $query_lic = "SELECT glpi_inst_software.ID AS ID, glpi_licenses.ID AS lID, "; |
||
205 | $query_lic .= " glpi_infocoms.ID as infocoms, glpi_licenses.comments AS COMMENT, "; |
||
206 | $query_lic .= " glpi_inst_software.cID AS cID, glpi_computers.name AS cname FROM glpi_licenses"; |
||
207 | $query_lic .= " LEFT JOIN glpi_inst_software "; |
||
208 | $query_lic .= " ON ( glpi_inst_software.license = glpi_licenses.ID )"; |
||
209 | $query_lic .= " LEFT JOIN glpi_computers ON (glpi_inst_software.cID= glpi_computers.ID) "; |
||
210 | $query_lic .= " LEFT JOIN glpi_infocoms ON (glpi_infocoms.device_type='" . LICENSE_TYPE . "' AND glpi_infocoms.FK_device=glpi_licenses.ID) "; |
||
211 | $query_lic .= " WHERE $SEARCH_LICENCE "; |
||
212 | $query_lic .= "AND (glpi_computers.ID IS NULL OR (glpi_computers.deleted='0' AND glpi_computers.is_template='0'))"; |
||
213 | $query_lic .= "ORDER BY cname"; |
||
214 | |||
215 | $result_lic = $DB->query($query_lic); |
||
216 | $num_tot = $DB->numrows($result_lic); |
||
217 | |||
218 | $num_inst = 0; |
||
219 | $firstID = 0; |
||
220 | $freeID = 0; |
||
221 | |||
222 | if ($num_tot > 0 ){ |
||
223 | while ($data_lic = $DB->fetch_array($result_lic)) { |
||
224 | if ($firstID == 0) { |
||
225 | $firstID = $data_lic['lID']; |
||
226 | } |
||
227 | if ($data_lic['cID'] > 0) { |
||
228 | $num_inst++;
|
||
229 | } else {
|
||
230 | $freeID = $data_lic['lID']; |
||
231 | } |
||
232 | } |
||
233 | |||
234 | $DB->data_seek($result_lic, 0); |
||
235 | } |
||
236 | |||
237 | $restant = $num_tot - $num_inst; |
||
238 | |||
239 | echo "<tr class='tab_bg_1' valign='top'>"; |
||
240 | if ($canedit && !$show_computers) { |
||
241 | $found_soft = true; |
||
242 | echo "<td><input type='checkbox' name='license_" . $data['ID'] . "'></td>"; |
||
243 | } |
||
244 | echo "<td class='center'><strong>" . $version . "</strong></td>"; |
||
245 | echo "<td class='center'><strong>" . $serial . "</strong></td>"; |
||
246 | echo "<td class='center'><strong>"; |
||
247 | echo $num_tot; |
||
248 | echo "</strong></td>"; |
||
249 | |||
250 | echo "<td align='center' class='tab_bg_1$expirecss'><strong>"; |
||
251 | if ($expire == NULL) |
||
252 | echo $LANG["software"][26]; |
||
253 | else {
|
||
254 | if ($expirer) |
||
255 | echo $LANG["software"][27]; |
||
256 | else
|
||
257 | echo $LANG["software"][25] . " " . convDate($expire); |
||
258 | } |
||
259 | |||
260 | echo "</strong></td>"; |
||
261 | // OEM
|
||
262 | if ($data["OEM"]) { |
||
263 | $comp = new Computer(); |
||
264 | $comp->getFromDB($data["OEM_COMPUTER"]); |
||
265 | } |
||
266 | echo "<td align='center' class='tab_bg_1" . ($data["OEM"] && !isset ($comp->fields['ID']) ? "_2" : "") . "'>" . ($data["OEM"] ? $LANG["choice"][1] : $LANG["choice"][0]); |
||
267 | if ($data["OEM"]) { |
||
268 | echo "<br><strong>"; |
||
269 | if (isset ($comp->fields['ID'])) |
||
270 | echo "<a href='" . $CFG_GLPI["root_doc"] . "/front/computer.form.php?ID=" . $comp->fields['ID'] . "'>" . $comp->fields['name'] . "</a>"; |
||
271 | else
|
||
272 | echo "N/A"; |
||
273 | echo "<strong>"; |
||
274 | } |
||
275 | echo "</td>"; |
||
276 | |||
277 | if ($serial != "free") { |
||
278 | // BUY
|
||
279 | echo "<td class='center'>" . ($data["BUY"] ? $LANG["choice"][1] : $LANG["choice"][0]); |
||
280 | echo "</td>"; |
||
281 | } else
|
||
282 | echo "<td> </td>"; |
||
283 | |||
284 | echo "<td class='center'>"; |
||
285 | |||
286 | // Logiciels install� :
|
||
287 | echo "<table width='100%'>"; |
||
288 | |||
289 | // Restant
|
||
290 | |||
291 | echo "<tr><td class='center'>"; |
||
292 | |||
293 | if (!$show_computers) { |
||
294 | echo $LANG["software"][19] . ": $num_inst "; |
||
295 | } |
||
296 | |||
297 | // $query_new="SELECT glpi_licenses.ID as ID FROM glpi_licenses WHERE $SEARCH_LICENCE";
|
||
298 | //echo $query_new;
|
||
299 | // if ($result_new = $DB->query($result_lic))
|
||
300 | |||
301 | if ($firstID && $serial != "free" && $serial != "global" && $canedit) { |
||
302 | echo $LANG["software"][20] . ":"; |
||
303 | echo "<select name='stock_licenses_$firstID'>"; |
||
304 | if (max(0, $restant -100) > 0) |
||
305 | echo "<option value='0'>0</option>"; |
||
306 | for ($i = max(0, $restant -100); $i <= $restant +100; $i++) |
||
307 | echo "<option value='$i' " . ($i == $restant ? " selected " : "") . ">$i</option>"; |
||
308 | echo "</select>"; |
||
309 | echo "<input type='hidden' name='nb_licenses_$firstID' value='$restant'>"; |
||
310 | echo "<input type='image' name='update_stock_licenses' value='$firstID' src='" . $CFG_GLPI["root_doc"] . "/pics/actualiser.png' class='calendrier'>"; |
||
311 | } |
||
312 | if (($serial == "free" || $serial == "global")) { |
||
313 | // Display infocoms
|
||
314 | echo " <strong>"; |
||
315 | showDisplayInfocomLink(LICENSE_TYPE, $firstID, 1); |
||
316 | echo "</strong>"; |
||
317 | } |
||
318 | |||
319 | if ($restant > 0 || $serial == "free" || $serial == "global") { |
||
320 | if ($firstID > 0) { |
||
321 | echo "</td><td class='center'>"; |
||
322 | if ($canedit) { |
||
323 | if (($serial == "free" || $serial == "global")) { |
||
324 | echo "<strong><a href=\"" . $CFG_GLPI["root_doc"] . "/front/software.licenses.php?delete=delete&ID=$firstID\">"; |
||
325 | echo "<img src=\"" . $CFG_GLPI["root_doc"] . "/pics/delete.png\" alt='" . $LANG["buttons"][6] . "' title='" . $LANG["buttons"][6] . "'>"; |
||
326 | echo "</a></strong>"; |
||
327 | if ($CFG_GLPI["license_deglobalisation"]) { |
||
328 | echo " <a href=\"javascript:confirmAction('" . addslashes($LANG["common"][40]) . "\\n" . addslashes($LANG["common"][39]) . "','" . $CFG_GLPI["root_doc"] . "/front/software.licenses.php?unglobalize=unglobalize&sID=$sID&ID=$firstID')\" title=\"" . $LANG["common"][39] . "\">" . $LANG["common"][38] . "</a> "; |
||
329 | echo "<img src='" . $CFG_GLPI["root_doc"] . "/pics/aide.png' alt=\"" . $LANG["common"][39] . "\" title=\"" . $LANG["common"][39] . "\">"; |
||
330 | } |
||
331 | } |
||
332 | echo " <strong><a href=\"" . $CFG_GLPI["root_doc"] . "/front/software.licenses.php?form=update&lID=$firstID&sID=$sID\">"; |
||
333 | echo "<img src=\"" . $CFG_GLPI["root_doc"] . "/pics/edit.png\" alt='" . $LANG["buttons"][14] . "' title='" . $LANG["buttons"][14] . "'>"; |
||
334 | echo "</a></strong>"; |
||
335 | } else {
|
||
336 | echo " "; |
||
337 | } |
||
338 | } |
||
339 | } |
||
340 | |||
341 | // Add select all checkbox
|
||
342 | if ($show_computers && $canedit) { |
||
343 | if ($num_inst > 0) { |
||
344 | if ($serial != "free" && $serial != "global") { |
||
345 | echo " " . $LANG["common"][66] . ":"; |
||
346 | $rand = mt_rand();
|
||
347 | |||
348 | $found_soft = true; |
||
349 | echo "<input type='checkbox' onclick='toggle$rand();'>"; |
||
350 | echo "<script type='text/javascript' >\n"; |
||
351 | echo "function toggle$rand(){\n"; |
||
352 | while ($data_inst = $DB->fetch_array($result_lic)) { |
||
353 | if ($data_inst['cID'] > 0) { |
||
354 | echo " var lic=window.document.getElementById('license_" . $data_inst["lID"] . "');"; |
||
355 | echo " if (lic.checked) \n"; |
||
356 | echo " lic.checked = false;\n"; |
||
357 | echo " else lic.checked = true;\n"; |
||
358 | } |
||
359 | } |
||
360 | echo "}</script>\n"; |
||
361 | $DB->data_seek($result_lic, 0); |
||
362 | } else {
|
||
363 | echo "<input type='checkbox' name='license_" . $data['ID'] . "'>"; |
||
364 | } |
||
365 | } |
||
366 | } |
||
367 | |||
368 | echo "</td></tr>"; |
||
369 | |||
370 | // Logiciels install�
|
||
371 | if ($show_computers) { |
||
372 | while ($data_inst = $DB->fetch_array($result_lic)) { |
||
373 | if ($data_inst['cID'] > 0) { |
||
374 | echo "<tr class='tab_bg_1" . (($data["OEM"] && $data["OEM_COMPUTER"] != $data_inst["cID"]) ? "_2" : "") . "'><td class='center'>"; |
||
375 | |||
376 | if ($serial != "free" && $serial != "global" && $canedit) { |
||
377 | $found_soft = true; |
||
378 | echo "<input type='checkbox' name='license_" . $data_inst["lID"] . "' id='license_" . $data_inst["lID"] . "'>"; |
||
379 | } |
||
380 | $ci->getFromDB(COMPUTER_TYPE, $data_inst["cID"]); |
||
381 | |||
382 | echo " <strong>"; |
||
383 | echo $ci->getLink($canshowcomputer); |
||
384 | echo "</strong></td><td class='center'>"; |
||
385 | |||
386 | // Comment
|
||
387 | if (!empty ($data_inst["COMMENT"])) { |
||
388 | echo "<img onmouseout=\"cleanhide('comment_" . $data_inst["ID"] . "')\" onmouseover=\"cleandisplay('comment_" . $data_inst["ID"] . "')\" src=\"" . $CFG_GLPI["root_doc"] . "/pics/aide.png\" alt=''>"; |
||
389 | echo "<div class='over_link' id='comment_" . $data_inst["ID"] . "'>" . nl2br($data_inst["COMMENT"]) . "</div> "; |
||
390 | } |
||
391 | // delete
|
||
392 | if ($canedit) { |
||
393 | echo "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/software.licenses.php?uninstall=uninstall&ID=" . $data_inst["ID"] . "&cID=" . $data_inst["cID"] . "\">"; |
||
394 | echo "<img src=\"" . $CFG_GLPI["root_doc"] . "/pics/remove.png\" alt='" . $LANG["buttons"][5] . "' title='" . $LANG["buttons"][5] . "'>"; |
||
395 | echo "</a>"; |
||
396 | } |
||
397 | |||
398 | if ($serial != "free" && $serial != "global") { |
||
399 | echo " "; |
||
400 | if ($canedit) { |
||
401 | echo "<strong><a href=\"" . $CFG_GLPI["root_doc"] . "/front/software.licenses.php?form=update&lID=" . $data_inst["lID"] . "&sID=$sID\">"; |
||
402 | echo "<img src=\"" . $CFG_GLPI["root_doc"] . "/pics/edit.png\" alt='" . $LANG["buttons"][14] . "' title='" . $LANG["buttons"][14] . "'>"; |
||
403 | echo "</a></strong>"; |
||
404 | } |
||
405 | // Display infocoms
|
||
406 | echo " <strong>"; |
||
407 | showDisplayInfocomLink(LICENSE_TYPE, $data_inst["lID"], 1); |
||
408 | echo "</strong>"; |
||
409 | } |
||
410 | |||
411 | echo "</td></tr>"; |
||
412 | } |
||
413 | } |
||
414 | } |
||
415 | echo "</table></td>"; |
||
416 | |||
417 | echo "</tr>"; |
||
418 | |||
419 | } |
||
420 | } |
||
421 | echo "</table></div>\n\n"; |
||
422 | if ($found_soft) { |
||
423 | echo "<div>"; |
||
424 | echo "<table width='950px'>"; |
||
425 | echo "<tr><td><img src=\"" . $CFG_GLPI["root_doc"] . "/pics/arrow-left.png\" alt=''></td><td><a onclick= \"if ( markAllRows('lic_form') ) return false;\" href='" . $_SERVER['PHP_SELF'] . "?ID=$sID&select=all'>" . $LANG["buttons"][18] . "</a></td>"; |
||
426 | |||
427 | echo "<td>/</td><td ><a onclick=\"if ( unMarkAllRows('lic_form') ) return false;\" href='" . $_SERVER['PHP_SELF'] . "?ID=$sID&select=none'>" . $LANG["buttons"][19] . "</a>"; |
||
428 | echo "</td><td class='left' width='80%'> "; |
||
429 | echo "</td></table></div>"; |
||
430 | } |
||
431 | |||
432 | echo "</form>"; |
||
433 | } |
||
434 | |||
435 | /**
|
||
436 | * Show Licenses form
|
||
437 | *
|
||
438 | * @param $target target of the form
|
||
439 | * @param $action Which action to do : add or update
|
||
440 | * @param $sID ID of the software
|
||
441 | * @param $lID ID of the license of update
|
||
442 | * @return nothing
|
||
443 | */
|
||
444 | function showLicenseForm($target, $action, $sID, $lID = "") { |
||
445 | |||
446 | global $CFG_GLPI, $LANG; |
||
447 | |||
448 | if (!haveRight("software", "w")) |
||
449 | return false; |
||
450 | |||
451 | $show_infocom = false; |
||
452 | |||
453 | switch ($action) { |
||
454 | case "add" : |
||
455 | $title = $LANG["software"][15] . " ($sID):"; |
||
456 | $button = $LANG["buttons"][8]; |
||
457 | $ic = new Infocom(); |
||
458 | |||
459 | if ($ic->getFromDBforDevice(SOFTWARE_TYPE, $sID)) |
||
460 | $show_infocom = true; |
||
461 | |||
462 | break;
|
||
463 | case "update" : |
||
464 | $title = $LANG["software"][34] . " ($lID):"; |
||
465 | $button = $LANG["buttons"][14]; |
||
466 | break;
|
||
467 | } |
||
468 | |||
469 | // Get previous values or defaults values
|
||
470 | $values = array (); |
||
471 | // defaults values :
|
||
472 | $values['version'] = ''; |
||
473 | $values['serial'] = ''; |
||
474 | $values['expire'] = "0000-00-00"; |
||
475 | $values['oem'] = 0; |
||
476 | $values["oem_computer"] = ''; |
||
477 | $values["comments"] = ''; |
||
478 | $values['buy'] = 1; |
||
479 | |||
480 | if (isset ($_POST) && !empty ($_POST)) { // Get from post form |
||
481 | foreach ($values as $key => $val) { |
||
482 | if (isset ($_POST[$key])) { |
||
483 | $values[$key] = $_POST[$key]; |
||
484 | } |
||
485 | } |
||
486 | |||
487 | } else
|
||
488 | if (!empty ($lID)) { // Get from DB |
||
489 | $lic = new License(); |
||
490 | $lic->getFromDB($lID); |
||
491 | $values = $lic->fields; |
||
492 | } |
||
493 | |||
494 | $soft=new Software(); |
||
495 | $soft->getFromDB($sID); |
||
496 | |||
497 | if (empty ($values['expire'])) |
||
498 | $values['expire'] = "0000-00-00"; |
||
499 | |||
500 | echo "<div class='center'><strong>"; |
||
501 | echo "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/software.form.php?ID=$sID\">"; |
||
502 | echo $LANG["buttons"][13] . "</strong>"; |
||
503 | echo "</a><br>"; |
||
504 | |||
505 | echo "<form name='form' method='post' action=\"$target\">"; |
||
506 | |||
507 | echo "<table class='tab_cadre'><tr><th colspan='3'>$title</th></tr>"; |
||
508 | |||
509 | echo "<tr class='tab_bg_1'><td>" . $LANG["software"][5] . "</td>"; |
||
510 | echo "<td>"; |
||
511 | autocompletionTextField("version", "glpi_licenses", "version", $values["version"], 20); |
||
512 | echo "</td></tr>"; |
||
513 | |||
514 | echo "<tr class='tab_bg_1'><td>" . $LANG["software"][16] . "</td>"; |
||
515 | echo "<td>"; |
||
516 | |||
517 | $readonly = ""; |
||
518 | |||
519 | if ($action == "add") { |
||
520 | switch ($CFG_GLPI["licenses_management_restrict"]) { |
||
521 | case 2 : |
||
522 | $readonly = ""; |
||
523 | break;
|
||
524 | case 1 : |
||
525 | $values["serial"] = "global"; |
||
526 | $readonly = "readonly"; |
||
527 | break;
|
||
528 | case 0 : |
||
529 | $values["serial"] = "free"; |
||
530 | $readonly = "readonly"; |
||
531 | break;
|
||
532 | } |
||
533 | } |
||
534 | elseif ($values["serial"] == "free" || $values["serial"] == "global") $readonly = "readonly"; |
||
535 | |||
536 | autocompletionTextField("serial", "glpi_licenses", "serial", $values["serial"], 20, $readonly); |
||
537 | echo "</td></tr>"; |
||
538 | |||
539 | if ($action != "update") { |
||
540 | echo "<tr class='tab_bg_1'><td>"; |
||
541 | echo $LANG["tracking"][29] . ":</td><td><select name=number>"; |
||
542 | echo "<option value='1' selected>1</option>"; |
||
543 | for ($i = 2; $i <= 1000; $i++) |
||
544 | echo "<option value='$i'>$i</option>"; |
||
545 | echo "</select></td></tr>"; |
||
546 | } |
||
547 | |||
548 | if ($show_infocom) { |
||
549 | echo "<tr class='tab_bg_1'><td>" . $LANG["financial"][3] . ":</td><td>"; |
||
550 | showDisplayInfocomLink(SOFTWARE_TYPE, $sID); |
||
551 | echo "</td></tr>"; |
||
552 | } |
||
553 | |||
554 | echo "<tr class='tab_bg_1'><td>" . $LANG["search"][9] . ":</td><td>"; |
||
555 | showCalendarForm("form", "expire", $values['expire']); |
||
556 | echo "</td></tr>"; |
||
557 | |||
558 | // OEM
|
||
559 | echo "<tr class='tab_bg_1'><td>" . $LANG["software"][28] . "</td><td>"; |
||
560 | dropdownYesNo("oem", $values['oem']); |
||
561 | dropdownValue("glpi_computers", "oem_computer", $values["oem_computer"],1,$soft->fields['FK_entities']); |
||
562 | echo "</td></tr>"; |
||
563 | // BUY
|
||
564 | echo "<tr class='tab_bg_1'><td>" . $LANG["software"][35] . "</td><td>"; |
||
565 | dropdownYesNo("buy", $values['buy']); |
||
566 | echo "</td></tr>"; |
||
567 | |||
568 | echo "<tr class='tab_bg_1'><td>" . $LANG["common"][25] . "</td><td>"; |
||
569 | echo "<textarea name='comments' rows='6' cols='40'>" . $values['comments'] . "</textarea>"; |
||
570 | echo "</td></tr>"; |
||
571 | |||
572 | echo "<tr class='tab_bg_2'>"; |
||
573 | echo "<td align='center' colspan='3'>"; |
||
574 | echo "<input type='hidden' name='sID' value=" . $sID . ">"; |
||
575 | if ($action == "update") |
||
576 | echo "<input type='hidden' name='ID' value=" . $lID . ">"; |
||
577 | echo "<input type='hidden' name='form' value=" . $action . ">"; |
||
578 | echo "<input type='submit' name='$action' value=\"" . $button . "\" class='submit'>"; |
||
579 | echo "</td>"; |
||
580 | |||
581 | echo "</table></form></div>"; |
||
582 | } |
||
583 | |||
584 | /**
|
||
585 | * Update number of license : create or delete license if needed
|
||
586 | *
|
||
587 | * @param $likeID ID of a license used to define the reference
|
||
588 | * @param $number actual number of license
|
||
589 | * @param $new_number new license number
|
||
590 | * @return nothing
|
||
591 | */
|
||
592 | function updateNumberLicenses($likeID, $number, $new_number) { |
||
593 | global $DB; |
||
594 | |||
595 | $lic = new License(); |
||
596 | // Delete unused licenses
|
||
597 | if ($number > $new_number) { |
||
598 | if ($lic->getFromDB($likeID)) { |
||
599 | |||
600 | $SEARCH_LICENCE = "(glpi_licenses.sID = " . $lic->fields["sID"] . " AND glpi_licenses.serial = '" . $lic->fields["serial"] . "' AND glpi_licenses.oem = '" . $lic->fields["oem"] . "' AND glpi_licenses.oem_computer = '" . $lic->fields["oem_computer"] . "' AND glpi_licenses.buy = '" . $lic->fields["buy"] . "' "; |
||
601 | if ($lic->fields["expire"] == "") |
||
602 | $SEARCH_LICENCE .= " AND glpi_licenses.expire IS NULL)"; |
||
603 | else
|
||
604 | $SEARCH_LICENCE .= " AND glpi_licenses.expire = '" . $lic->fields["expire"] . "')"; |
||
605 | |||
606 | for ($i = 0; $i < $number - $new_number; $i++) { |
||
607 | $query_first = "SELECT glpi_licenses.ID as ID, glpi_inst_software.license as iID FROM glpi_licenses LEFT JOIN glpi_inst_software ON glpi_inst_software.license = glpi_licenses.ID WHERE $SEARCH_LICENCE"; |
||
608 | |||
609 | if ($result_first = $DB->query($query_first)) { |
||
610 | if ($lic->fields["serial"] == "free" || $lic->fields["serial"] == "global") |
||
611 | $ID = $DB->result($result_first, 0, "ID"); |
||
612 | else {
|
||
613 | $fin = 0; |
||
614 | while (!$fin && $temp = $DB->fetch_array($result_first)) |
||
615 | if ($temp["iID"] == NULL) { |
||
616 | $fin = 1; |
||
617 | $ID = $temp["ID"]; |
||
618 | } |
||
619 | } |
||
620 | if (!empty ($ID)) { |
||
621 | $lic->delete(array ( |
||
622 | "ID" => $ID |
||
623 | )); |
||
624 | } |
||
625 | } |
||
626 | |||
627 | } |
||
628 | } |
||
629 | // Create new licenses
|
||
630 | } else if ($number < $new_number) { |
||
631 | $lic->getFromDB($likeID); |
||
632 | unset ($lic->fields["ID"]); |
||
633 | |||
634 | if (is_null($lic->fields["expire"])) |
||
635 | unset ($lic->fields["expire"]); |
||
636 | |||
637 | for ($i = 0; $i < $new_number - $number; $i++) { |
||
638 | unset ($lic->fields["ID"]); |
||
639 | $lic->addToDB();
|
||
640 | } |
||
641 | |||
642 | } |
||
643 | |||
644 | } |
||
645 | |||
646 | /**
|
||
647 | * Install a software on a computer
|
||
648 | *
|
||
649 | * @param $cID ID of the computer where to install a software
|
||
650 | * @param $lID ID of the license to install
|
||
651 | * @param $sID ID of the software of the license (used for history)
|
||
652 | * @param $dohistory Do history ?
|
||
653 | * @return nothing
|
||
654 | */
|
||
655 | function installSoftware($cID, $lID, $sID = '', $dohistory = 1) { |
||
656 | |||
657 | global $DB,$LANG; |
||
658 | |||
659 | if (!empty ($lID) && $lID > 0) { |
||
660 | |||
661 | $query_exists = "SELECT ID FROM glpi_inst_software WHERE cID='" . $cID . "' AND license='" . $lID."'"; |
||
662 | $result = $DB->query($query_exists); |
||
663 | if ($DB->numrows($result) > 0) |
||
664 | return $DB->result($result, 0, "ID"); |
||
665 | else {
|
||
666 | $query = "INSERT INTO glpi_inst_software VALUES (NULL,'$cID','$lID')"; |
||
667 | if ($result = $DB->query($query)) { |
||
668 | $newID = $DB->insert_id(); |
||
669 | if ($dohistory) { |
||
670 | $lic = new License(); |
||
671 | $lic->getFromDB($lID); |
||
672 | $soft = new Software(); |
||
673 | if ($soft->getFromDB($lic->fields["sID"])) { |
||
674 | $changes[0] = '0'; |
||
675 | $changes[1] = ""; |
||
676 | $changes[2] = addslashes($soft->fields["name"] . " (v. " . $lic->fields["version"] . ")"); |
||
677 | // history log
|
||
678 | historyLog($cID, COMPUTER_TYPE, $changes, 0, HISTORY_INSTALL_SOFTWARE); |
||
679 | $comp = new Computer(); |
||
680 | $comp->getFromDB($cID); |
||
681 | $changes[2] = addslashes($comp->fields["name"] . " (v. " . $lic->fields["version"] . ")"); |
||
682 | historyLog($lic->fields["sID"], SOFTWARE_TYPE, $changes, 0, HISTORY_INSTALL_SOFTWARE); |
||
683 | } |
||
684 | } |
||
685 | return $newID; |
||
686 | } else {
|
||
687 | return false; |
||
688 | } |
||
689 | } |
||
690 | } else
|
||
691 | if ($lID < 0 && !empty ($sID)) { // Auto Add a license |
||
692 | $lic = new License(); |
||
693 | $newinput = array (); |
||
694 | $newinput['buy'] = 0; |
||
695 | $newinput['sID'] = $sID; |
||
696 | $newinput['serial'] = $LANG["software"][6]; |
||
697 | $lID = $lic->add($newinput); |
||
698 | |||
699 | $query = "INSERT INTO glpi_inst_software VALUES (NULL,'$cID','$lID')"; |
||
700 | if ($result = $DB->query($query)) { |
||
701 | $newID = $DB->insert_id(); |
||
702 | if ($dohistory) { |
||
703 | $soft = new Software(); |
||
704 | if ($soft->getFromDB($sID)) { |
||
705 | $changes[0] = '0'; |
||
706 | $changes[1] = ""; |
||
707 | $changes[2] = addslashes($soft->fields["name"]); |
||
708 | // history log
|
||
709 | historyLog($cID, COMPUTER_TYPE, $changes, 0, HISTORY_INSTALL_SOFTWARE); |
||
710 | $comp = new Computer(); |
||
711 | $comp->getFromDB($cID); |
||
712 | $changes[2] = addslashes($comp->fields["name"]); |
||
713 | historyLog($sID, SOFTWARE_TYPE, $changes, 0, HISTORY_INSTALL_SOFTWARE); |
||
714 | } |
||
715 | } |
||
716 | |||
717 | return $newID; |
||
718 | } else {
|
||
719 | return false; |
||
720 | } |
||
721 | |||
722 | } |
||
723 | } |
||
724 | |||
725 | /**
|
||
726 | * Uninstall a software on a computer
|
||
727 | *
|
||
728 | * @param $ID ID of the install software link (license/computer)
|
||
729 | * @param $dohistory Do history ?
|
||
730 | * @return nothing
|
||
731 | */
|
||
732 | function uninstallSoftware($ID, $dohistory = 1) { |
||
733 | |||
734 | global $DB; |
||
735 | |||
736 | // license data for history
|
||
737 | if ($dohistory) { |
||
738 | $query2 = "SELECT * FROM glpi_inst_software WHERE (ID = '$ID')"; |
||
739 | $result2 = $DB->query($query2); |
||
740 | $data = $DB->fetch_array($result2); |
||
741 | $lic = new License(); |
||
742 | $lic->getFromDB($data["license"]); |
||
743 | } |
||
744 | |||
745 | $query = "DELETE FROM glpi_inst_software WHERE (ID = '$ID')"; |
||
746 | |||
747 | if ($result = $DB->query($query)) { |
||
748 | if ($dohistory) { |
||
749 | $soft = new Software(); |
||
750 | if ($soft->getFromDB($lic->fields["sID"])) { |
||
751 | $changes[0] = '0'; |
||
752 | $changes[1] = addslashes($soft->fields["name"] . " (v. " . $lic->fields["version"] . ")"); |
||
753 | $changes[2] = ""; |
||
754 | // history log
|
||
755 | historyLog($data["cID"], COMPUTER_TYPE, $changes, 0, HISTORY_UNINSTALL_SOFTWARE); |
||
756 | $comp = new Computer(); |
||
757 | $comp->getFromDB($data["cID"]); |
||
758 | $changes[1] = addslashes($comp->fields["name"] . " (v. " . $lic->fields["version"] . ")"); |
||
759 | historyLog($lic->fields["sID"], SOFTWARE_TYPE, $changes, 0, HISTORY_UNINSTALL_SOFTWARE); |
||
760 | |||
761 | } |
||
762 | } |
||
763 | |||
764 | return true; |
||
765 | } else {
|
||
766 | return false; |
||
767 | } |
||
768 | } |
||
769 | |||
770 | /**
|
||
771 | * SHow softwrae installed on a computer
|
||
772 | *
|
||
773 | * @param $instID ID of the computer
|
||
774 | * @param $withtemplate template case of the view process
|
||
775 | * @return nothing
|
||
776 | */
|
||
777 | function showSoftwareInstalled($instID, $withtemplate = '') { |
||
778 | |||
779 | global $DB, $CFG_GLPI, $LANG; |
||
780 | if (!haveRight("software", "r")) |
||
781 | return false; |
||
782 | $comp = new Computer(); |
||
783 | $comp->getFromDB($instID); |
||
784 | $FK_entities = $comp->fields["FK_entities"]; |
||
785 | |||
786 | $query_cat = "SELECT 1 as TYPE, glpi_dropdown_software_category.name as category, glpi_software.category as category_id, glpi_software.name as softname, glpi_inst_software.license as license, glpi_inst_software.ID as ID,glpi_licenses.expire,glpi_software.deleted, glpi_licenses.sID, GROUP_CONCAT( DISTINCT CONCAT(CONCAT_WS(' - ',glpi_licenses.version, glpi_licenses.serial),'$$',glpi_inst_software.ID) SEPARATOR '$$$$') AS version, glpi_licenses.serial, glpi_licenses.version AS orig_version, glpi_licenses.oem, glpi_licenses.oem_computer, glpi_licenses.buy |
||
787 | FROM glpi_inst_software
|
||
788 | LEFT JOIN glpi_licenses ON ( glpi_inst_software.license = glpi_licenses.ID )
|
||
789 | LEFT JOIN glpi_software ON (glpi_licenses.sID = glpi_software.ID)
|
||
790 | LEFT JOIN glpi_dropdown_software_category ON (glpi_dropdown_software_category.ID = glpi_software.category)";
|
||
791 | |||
792 | $query_cat .= " WHERE glpi_inst_software.cID = '$instID' AND glpi_software.category > 0 |
||
793 | GROUP BY glpi_licenses.sID";
|
||
794 | |||
795 | $query_nocat = "SELECT 2 as TYPE, glpi_dropdown_software_category.name as category, glpi_software.category as category_id, glpi_software.name as softname, glpi_inst_software.license as license, glpi_inst_software.ID as ID,glpi_licenses.expire,glpi_software.deleted, glpi_licenses.sID, GROUP_CONCAT( DISTINCT CONCAT(CONCAT_WS(' - ',glpi_licenses.version, glpi_licenses.serial),'$$',glpi_inst_software.ID) SEPARATOR '$$$$') AS version, glpi_licenses.serial, glpi_licenses.version AS orig_version, glpi_licenses.oem, glpi_licenses.oem_computer, glpi_licenses.buy |
||
796 | FROM glpi_inst_software
|
||
797 | LEFT JOIN glpi_licenses ON ( glpi_inst_software.license = glpi_licenses.ID )
|
||
798 | LEFT JOIN glpi_software ON (glpi_licenses.sID = glpi_software.ID)
|
||
799 | LEFT JOIN glpi_dropdown_software_category ON (glpi_dropdown_software_category.ID = glpi_software.category)";
|
||
800 | $query_nocat .= " WHERE glpi_inst_software.cID = '$instID' AND (glpi_software.category <= 0 OR glpi_software.category IS NULL ) |
||
801 | GROUP BY glpi_licenses.sID";
|
||
802 | $query = "( $query_cat ) UNION ($query_nocat) ORDER BY TYPE, category, softname, version"; |
||
803 | |||
804 | $DB->query("SET SESSION group_concat_max_len = 9999999;"); |
||
805 | |||
806 | $result = $DB->query($query); |
||
807 | $i = 0; |
||
808 | |||
809 | echo "<br><br><div class='center'><table class='tab_cadre_fixe'>"; |
||
810 | |||
811 | if ((empty ($withtemplate) || $withtemplate != 2) && haveRight("software", "w")) { |
||
812 | echo "<tr class='tab_bg_1'><td align='center' colspan='5'>"; |
||
813 | echo "<form method='post' action=\"" . $CFG_GLPI["root_doc"] . "/front/software.licenses.php\">"; |
||
814 | |||
815 | echo "<div class='software-instal'>"; |
||
816 | echo "<input type='hidden' name='cID' value='$instID'>"; |
||
817 | dropdownSoftwareToInstall("licenseID", $withtemplate, $FK_entities); |
||
818 | echo "<input type='submit' name='install' value=\"" . $LANG["buttons"][4] . "\" class='submit'>"; |
||
819 | echo "</div>"; |
||
820 | echo "</form>"; |
||
821 | echo "</td></tr>"; |
||
822 | } |
||
823 | |||
824 | echo "<tr><th colspan='6'>" . $LANG["software"][17] . ":</th></tr>"; |
||
825 | |||
826 | $cat = -1; |
||
827 | |||
828 | if ($DB->numrows($result)) { |
||
829 | while ($data = $DB->fetch_array($result)) { |
||
830 | if ($data["category_id"] != $cat) { |
||
831 | $cat = displayCategoryHeader($data, $cat); |
||
832 | } |
||
833 | |||
834 | displaySoftsByCategory($data, $instID, $withtemplate); |
||
835 | } |
||
836 | |||
837 | echo "</table></div></td></tr>"; |
||
838 | |||
839 | $q = "SELECT count(*) FROM glpi_software WHERE deleted='0' AND is_template='0'"; |
||
840 | $result = $DB->query($q); |
||
841 | $nb = $DB->result($result, 0, 0); |
||
842 | |||
843 | } |
||
844 | |||
845 | echo "</table></div>"; |
||
846 | |||
847 | } |
||
848 | |||
849 | /**
|
||
850 | * Display category header for showSoftwareInstalled function
|
||
851 | *
|
||
852 | * @param $data data used to display
|
||
853 | * @param $cat current category ID
|
||
854 | * @return new category ID
|
||
855 | */
|
||
856 | function displayCategoryHeader($data, $cat) { |
||
857 | global $LANG, $CFG_GLPI; |
||
858 | $expirecss = ''; |
||
859 | |||
860 | // Close old one
|
||
861 | if ($cat != -1) { |
||
862 | echo "</table></div></td></tr>"; |
||
863 | } |
||
864 | |||
865 | $display = "none"; |
||
866 | |||
867 | $cat = $data["category_id"]; |
||
868 | $catname = $data["category"]; |
||
869 | if (!$cat) { |
||
870 | $catname = $LANG["softwarecategories"][3]; |
||
871 | $display = $CFG_GLPI["expand_soft_not_categorized"]; |
||
872 | } else
|
||
873 | $display = $CFG_GLPI["expand_soft_categorized"]; |
||
874 | |||
875 | echo " <tr class='tab_bg_2$expirecss'>"; |
||
876 | echo " <td align='center' colspan='5'>"; |
||
877 | echo " <a href=\"javascript:showHideDiv('softcat$cat','imgcat$cat','" . GLPI_ROOT . "/pics/folder.png','" . GLPI_ROOT . "/pics/folder-open.png');\">"; |
||
878 | echo " <img alt='' name='imgcat$cat' src=\"" . GLPI_ROOT . "/pics/folder" . (!$display ? '' : "-open") . ".png\"> <strong>" . $catname . "</strong>"; |
||
879 | echo " </a>"; |
||
880 | echo " </td>"; |
||
881 | echo " </tr>"; |
||
882 | echo "<tr class='tab_bg_2$expirecss'>"; |
||
883 | echo " <td colspan='5'> |
||
884 | <div align='center' id='softcat$cat' " . (!$display ? "style=\"display:none;\"" : '') . ">"; |
||
885 | echo " <table class='tab_cadre_fixe'>"; |
||
886 | echo " <tr>"; |
||
887 | echo " <th>" . $LANG["common"][16] . "</th><th>" . $LANG["software"][11] . "</th><th>" . $LANG["software"][32] . "</th><th>" . $LANG["software"][28] . "</th><th>" . $LANG["software"][35] . "</th>"; |
||
888 | echo " </tr>"; |
||
889 | return $cat; |
||
890 | } |
||
891 | |||
892 | /**
|
||
893 | * Display a software for a category
|
||
894 | *
|
||
895 | * @param $data data used to display
|
||
896 | * @param $instID ID of the computer
|
||
897 | * @param $withtemplate template case of the view process
|
||
898 | * @return nothing
|
||
899 | */
|
||
900 | function displaySoftsByCategory($data, $instID, $withtemplate) { |
||
901 | global $LANG, $CFG_GLPI; |
||
902 | $expirecss = ''; |
||
903 | $expirer = 0; |
||
904 | |||
905 | $lID = $data["license"]; |
||
906 | $ID = $data["ID"]; |
||
907 | $multiple = false; |
||
908 | |||
909 | $today = date("Y-m-d"); |
||
910 | |||
911 | if ($data['expire'] != NULL && $today > $data['expire']) { |
||
912 | $expirer = 1; |
||
913 | $expirecss = "_2"; |
||
914 | } |
||
915 | |||
916 | if ($data['deleted']) { |
||
917 | $expirer = 1; |
||
918 | $expirecss = "_2"; |
||
919 | } |
||
920 | |||
921 | echo "<tr class='tab_bg_1$expirecss'>"; |
||
922 | echo "<td class='center'><strong><a href=\"" . $CFG_GLPI["root_doc"] . "/front/software.form.php?ID=" . $data['sID'] . "\">"; |
||
923 | echo $data["softname"] . ($CFG_GLPI["view_ID"] ? " (" . $data['ID'] . ")" : "") . "</a>"; |
||
924 | echo "</strong>"; |
||
925 | echo "</td>"; |
||
926 | echo "<td>"; |
||
927 | |||
928 | if (!strpos($data["version"], "$$$$")) { |
||
929 | echo $data["serial"] . " - " . $data["orig_version"]; |
||
930 | if (empty ($withtemplate) || $withtemplate != 2) { |
||
931 | echo " - <a href=\"" . $CFG_GLPI["root_doc"] . "/front/software.licenses.php?uninstall=uninstall&ID=$ID&cID=$instID\">"; |
||
932 | echo "<strong>" . $LANG["buttons"][5] . "</strong></a>"; |
||
933 | } |
||
934 | } else {
|
||
935 | $multiple = true; |
||
936 | $split = explode("$$$$", $data["version"]); |
||
937 | $count_display = 0; |
||
938 | $out = ""; |
||
939 | for ($k = 0; $k < count($split); $k++) { |
||
940 | if ($count_display) |
||
941 | echo "<br>"; |
||
942 | $count_display++;
|
||
943 | $split2 = explode("$$", $split[$k]); |
||
944 | echo $split2[0]; |
||
945 | |||
946 | if (isset ($split2[1]) && is_numeric($split2[1]) && (empty ($withtemplate) || $withtemplate != 2)) { |
||
947 | echo " - <a href=\"" . $CFG_GLPI["root_doc"] . "/front/software.licenses.php?uninstall=uninstall&ID=" . $split2[1] . "&cID=$instID\">"; |
||
948 | echo "<strong>" . $LANG["buttons"][5] . "</strong></a>"; |
||
949 | } |
||
950 | } |
||
951 | } |
||
952 | echo "</td>"; |
||
953 | echo "<td class='center'><strong>"; |
||
954 | if ($data['expire'] == NULL) |
||
955 | echo $LANG["software"][26]; |
||
956 | else {
|
||
957 | if ($expirer) |
||
958 | echo $LANG["software"][27]; |
||
959 | else
|
||
960 | echo $LANG["software"][25] . " " . $data['expire']; |
||
961 | } |
||
962 | |||
963 | echo "</strong></td>"; |
||
964 | if ($data['serial'] != "free" && $data['serial'] != "global") { |
||
965 | // OEM
|
||
966 | if ($data["oem"]) { |
||
967 | $comp = new Computer(); |
||
968 | $comp->getFromDB($data["oem_computer"]); |
||
969 | } |
||
970 | echo "<td align='center' class='tab_bg_1" . ( ( $expirer || ($data["oem"] && (!isset($comp->fields['ID']) || $comp->fields['ID'] != $instID) ) ) ? "_2" : "") . "'>" . ($data["oem"] ? $LANG["choice"][1] : $LANG["choice"][0]); |
||
971 | if ($data["oem"]) { |
||
972 | echo "<br><strong>"; |
||
973 | if (isset ($comp->fields['ID'])) |
||
974 | echo "<a href='" . $CFG_GLPI["root_doc"] . "/front/computer.form.php?ID=" . $comp->fields['ID'] . "'>" . $comp->fields['name'] . "</a>"; |
||
975 | else
|
||
976 | echo "N/A"; |
||
977 | echo "<strong>"; |
||
978 | } |
||
979 | echo "</td>"; |
||
980 | |||
981 | // BUY
|
||
982 | echo "<td class='center'>" . ($data["buy"] ? $LANG["choice"][1] : $LANG["choice"][0]); |
||
983 | echo "</td>"; |
||
984 | } else {
|
||
985 | echo "<td> </td><td> </td>"; |
||
986 | } |
||
987 | echo "</tr>"; |
||
988 | } |
||
989 | |||
990 | /**
|
||
991 | * Unglobalize a license
|
||
992 | *
|
||
993 | * @param $ID ID of the license
|
||
994 | * @return nothing
|
||
995 | */
|
||
996 | function unglobalizeLicense($ID) { |
||
997 | global $DB; |
||
998 | $license = new License(); |
||
999 | $license->getFromDB($ID); |
||
1000 | // Check if it is a real global license
|
||
1001 | if ($license->fields["serial"] == "free" || $license->fields["serial"] == "global") { |
||
1002 | |||
1003 | $query = "SELECT * FROM glpi_inst_software WHERE license = '$ID'"; |
||
1004 | $result = $DB->query($query); |
||
1005 | |||
1006 | if (($nb = $DB->numrows($result)) > 0) { |
||
1007 | // Update item to unit management :
|
||
1008 | $input = $license->fields; |
||
1009 | $input["serial"] = "_" . $license->fields["serial"] . "_"; |
||
1010 | |||
1011 | // skip first
|
||
1012 | $data = $DB->fetch_array($result); |
||
1013 | if ($license->fields["oem"]) { |
||
1014 | $input["oem_computer"] = $data["cID"]; |
||
1015 | } |
||
1016 | $license->update($input); |
||
1017 | |||
1018 | $input = $license->fields; |
||
1019 | $input["_duplicate_license"] = $ID; |
||
1020 | unset ($input["ID"]); |
||
1021 | |||
1022 | // Get ID of the inst_software
|
||
1023 | while ($data = $DB->fetch_array($result)) { |
||
1024 | if ($license->fields["oem"]) { |
||
1025 | $input["oem_computer"] = $data["cID"]; |
||
1026 | } else {
|
||
1027 | $input["oem"] = 0; |
||
1028 | } |
||
1029 | |||
1030 | // Add new Item
|
||
1031 | unset ($license->fields); |
||
1032 | if ($newID = $license->add($input)) { |
||
1033 | // Update inst_software
|
||
1034 | $query2 = "UPDATE glpi_inst_software SET license='$newID' WHERE ID='" . $data["ID"] . "'"; |
||
1035 | $DB->query($query2); |
||
1036 | } |
||
1037 | } |
||
1038 | } |
||
1039 | } |
||
1040 | |||
1041 | } |
||
1042 | |||
1043 | /**
|
||
1044 | * Count Installations of a software and create string to display
|
||
1045 | *
|
||
1046 | * @param $sID ID of the software
|
||
1047 | * @param $nohtml do not use HTML to highlight ?
|
||
1048 | * @return string contains counts
|
||
1049 | */
|
||
1050 | function countInstallations($sID, $nohtml = 0) { |
||
1051 | |||
1052 | global $DB, $CFG_GLPI, $LANG; |
||
1053 | |||
1054 | // Get total
|
||
1055 | $total = getLicenceNumber($sID); |
||
1056 | $out = ""; |
||
1057 | if ($total != 0) { |
||
1058 | |||
1059 | if (isFreeSoftware($sID)) { |
||
1060 | // Get installed
|
||
1061 | $installed = getInstalledLicence($sID); |
||
1062 | if (!$nohtml) |
||
1063 | $out .= "<i>" . $LANG["software"][39] . "</i> " . $LANG["software"][19] . ": <strong>$installed</strong>"; |
||
1064 | else
|
||
1065 | $out .= $LANG["software"][39] . " " . $LANG["software"][19] . ": $installed"; |
||
1066 | } else
|
||
1067 | if (isGlobalSoftware($sID)) { |
||
1068 | $installed = getInstalledLicence($sID); |
||
1069 | if (!$nohtml) |
||
1070 | $out .= "<i>" . $LANG["software"][38] . "</i> " . $LANG["software"][19] . ": <strong>$installed</strong>"; |
||
1071 | else
|
||
1072 | $out .= $LANG["software"][38] . " " . $LANG["software"][19] . ": $installed"; |
||
1073 | |||
1074 | } else {
|
||
1075 | |||
1076 | // Get installed
|
||
1077 | $i = 0; |
||
1078 | $installed = getInstalledLicence($sID); |
||
1079 | |||
1080 | // Get remaining
|
||
1081 | $remaining = max(0, $total - $installed); |
||
1082 | |||
1083 | // Output
|
||
1084 | if (!$nohtml) { |
||
1085 | $out .= "<table cellpadding='2' cellspacing='0'><tr>"; |
||
1086 | $out .= "<td width='35%'>" . $LANG["software"][19] . ": <strong>$installed</strong></td>"; |
||
1087 | } else
|
||
1088 | $out .= " " . $LANG["software"][19] . ": $installed"; |
||
1089 | |||
1090 | $color = "red"; |
||
1091 | |||
1092 | if ($remaining == 0) { |
||
1093 | $color = "green"; |
||
1094 | } else {
|
||
1095 | $color = "blue"; |
||
1096 | } |
||
1097 | |||
1098 | if (!$nohtml) { |
||
1099 | $remaining = "<span class='$color'>$remaining"; |
||
1100 | $remaining .= "</span>"; |
||
1101 | $out .= "<td width='20%'>" . $LANG["software"][20] . ": <strong>$remaining</strong></td>"; |
||
1102 | $out .= "<td width='20%'>" . $LANG["common"][33] . ": <strong>" . $total . "</strong></td>"; |
||
1103 | } else {
|
||
1104 | $out .= " " . $LANG["software"][20] . ": $remaining"; |
||
1105 | $out .= " " . $LANG["common"][33] . ": " . $total; |
||
1106 | } |
||
1107 | |||
1108 | $tobuy = getLicenceToBuy($sID); |
||
1109 | if ($tobuy > 0) { |
||
1110 | if (!$nohtml) |
||
1111 | $out .= "<td width='25%'>" . $LANG["software"][37] . ": <strong><span class='red'>" . $tobuy . "</span></strong></td>"; |
||
1112 | else
|
||
1113 | $out .= " " . $LANG["software"][37] . ": " . $tobuy; |
||
1114 | } else {
|
||
1115 | if (!$nohtml) |
||
1116 | $out .= "<td width='20%'> </td>"; |
||
1117 | } |
||
1118 | if (!$nohtml) |
||
1119 | $out .= "</tr></table>"; |
||
1120 | } |
||
1121 | } else {
|
||
1122 | if (!$nohtml) |
||
1123 | $out .= "<div class='center'><i>" . $LANG["software"][40] . "</i></div>"; |
||
1124 | else
|
||
1125 | $out .= $LANG["software"][40]; |
||
1126 | } |
||
1127 | return $out; |
||
1128 | } |
||
1129 | |||
1130 | /**
|
||
1131 | * Move licenses to another software
|
||
1132 | *
|
||
1133 | * @param $lID ID of the license used to define which licenses need to be moved (all similar ones)
|
||
1134 | * @param $sID ID of the destination software
|
||
1135 | * @return nothing
|
||
1136 | */
|
||
1137 | function moveSimilarLicensesToSoftware($lID, $sID) { |
||
1138 | global $DB; |
||
1139 | $lic = new License(); |
||
1140 | if ($lic->getFromDB($lID)) { |
||
1141 | $query = "UPDATE glpi_licenses SET sID='$sID' WHERE version='" . addslashes($lic->fields['version']) . "' |
||
1142 | AND serial='" . addslashes($lic->fields['serial']) . "' |
||
1143 | AND oem='" . addslashes($lic->fields['oem']) . "' |
||
1144 | AND oem_computer='" . addslashes($lic->fields['oem_computer']) . "' |
||
1145 | AND buy='" . addslashes($lic->fields['buy']) . "' |
||
1146 | AND sID='" . addslashes($lic->fields['sID']) . "' "; |
||
1147 | if ($lic->fields['expire'] == "") |
||
1148 | $query .= " AND expire IS NULL"; |
||
1149 | else
|
||
1150 | $query .= " AND .expire = '" . addslashes($lic->fields['expire']) . "'"; |
||
1151 | $DB->query($query); |
||
1152 | } |
||
1153 | } |
||
1154 | |||
1155 | /**
|
||
1156 | * Delete similar licenses
|
||
1157 | *
|
||
1158 | * @param $lID ID of the license used to define which licenses need to be deleted (all similar ones)
|
||
1159 | * @return nothing
|
||
1160 | */
|
||
1161 | function deleteSimilarLicenses($lID) { |
||
1162 | global $DB; |
||
1163 | $lic = new License(); |
||
1164 | if ($lic->getFromDB($lID)) { |
||
1165 | $query = "SELECT ID FROM glpi_licenses WHERE version='" . addslashes($lic->fields['version']) . "' |
||
1166 | AND serial='" . addslashes($lic->fields['serial']) . "' |
||
1167 | AND oem='" . addslashes($lic->fields['oem']) . "' |
||
1168 | AND oem_computer='" . addslashes($lic->fields['oem_computer']) . "' |
||
1169 | AND buy='" . addslashes($lic->fields['buy']) . "' |
||
1170 | AND sID='" . addslashes($lic->fields['sID']) . "' "; |
||
1171 | |||
1172 | if ($lic->fields['expire'] == "") { |
||
1173 | $query .= " AND expire IS NULL"; |
||
1174 | } else {
|
||
1175 | $query .= " AND .expire = '" . addslashes($lic->fields['expire']) . "'"; |
||
1176 | } |
||
1177 | |||
1178 | if ($result = $DB->query($query)) { |
||
1179 | while ($data = $DB->fetch_array($result)) { |
||
1180 | $lic->delete(array ( |
||
1181 | 'ID' => $data['ID'] |
||
1182 | )); |
||
1183 | } |
||
1184 | } |
||
1185 | } |
||
1186 | } |
||
1187 | |||
1188 | /**
|
||
1189 | * Move licenses to another license
|
||
1190 | *
|
||
1191 | * @param $lID destination license ID
|
||
1192 | * @param $tomove array of ID of the licenses to move
|
||
1193 | * @return nothing
|
||
1194 | */
|
||
1195 | function moveLicensesToLicense($tomove = array (), $lID) { |
||
1196 | global $DB; |
||
1197 | |||
1198 | $lic = new License(); |
||
1199 | $lic2 = new License(); |
||
1200 | |||
1201 | if (count($tomove) && $lic->getFromDB($lID)) { |
||
1202 | |||
1203 | if ($lic->fields['serial'] == 'free' || $lic->fields['serial'] == 'global') { |
||
1204 | // Destination is global : Only move inst_software and delete old license if unused
|
||
1205 | foreach ($tomove as $moveID) { |
||
1206 | if ($moveID != $lID && $lic2->getFromDB($moveID)) { |
||
1207 | $query = "UPDATE glpi_inst_software SET license='$lID' WHERE license='$moveID'"; |
||
1208 | $DB->query($query); |
||
1209 | |||
1210 | if (getInstallionsForLicense($moveID) == 0) { |
||
1211 | $lic2->delete(array ( |
||
1212 | 'ID' => $moveID |
||
1213 | )); |
||
1214 | } |
||
1215 | } |
||
1216 | } |
||
1217 | } else {
|
||
1218 | // Individual one : if original is global create a copy else copy license
|
||
1219 | foreach ($tomove as $moveID) { |
||
1220 | if ($moveID != $lID && $lic2->getFromDB($moveID)) { |
||
1221 | if ($lic2->fields['serial'] == 'free' || $lic2->fields['serial'] == 'global') { |
||
1222 | // Create a copy of the original one foreach installation and move inst_software
|
||
1223 | $query = "SELECT * FROM glpi_inst_software WHERE license='$moveID'"; |
||
1224 | |||
1225 | $input = $lic->fields; |
||
1226 | unset ($input['ID']); |
||
1227 | |||
1228 | if ($result = $DB->query($query)) { |
||
1229 | while ($data_inst = $DB->fetch_array($result)) { |
||
1230 | unset ($lic2->fields); |
||
1231 | $newID = $lic2->add($input); |
||
1232 | $query = "UPDATE glpi_inst_software SET license='$newID' WHERE ID='" . $data_inst['ID'] . "'"; |
||
1233 | $DB->query($query); |
||
1234 | } |
||
1235 | } |
||
1236 | } else {
|
||
1237 | // Only update license to be the same as the destination one
|
||
1238 | $input = $lic->fields; |
||
1239 | $input["ID"] = $moveID; |
||
1240 | unset ($lic2->fields); |
||
1241 | $lic2->update($input); |
||
1242 | } |
||
1243 | if (getInstallionsForLicense($moveID) == 0) { |
||
1244 | $lic2->delete(array ( |
||
1245 | 'ID' => $moveID |
||
1246 | )); |
||
1247 | } |
||
1248 | } |
||
1249 | } |
||
1250 | } |
||
1251 | } |
||
1252 | } |
||
1253 | |||
1254 | /**
|
||
1255 | * Get number of installed licenses of a software
|
||
1256 | *
|
||
1257 | * @param $sID software ID
|
||
1258 | * @return number of installed licenses
|
||
1259 | */
|
||
1260 | function getInstalledLicence($sID) { |
||
1261 | global $DB; |
||
1262 | $query = "SELECT count(*) FROM glpi_licenses INNER JOIN glpi_inst_software ON (glpi_licenses.sID = '$sID' AND glpi_licenses.ID = glpi_inst_software.license ) |
||
1263 | INNER JOIN glpi_computers ON ( glpi_inst_software.cID=glpi_computers.ID AND glpi_computers.deleted='0' AND glpi_computers.is_template='0' )";
|
||
1264 | |||
1265 | $result = $DB->query($query); |
||
1266 | |||
1267 | if ($DB->numrows($result) != 0) { |
||
1268 | return $DB->result($result, 0, 0); |
||
1269 | } else
|
||
1270 | return 0; |
||
1271 | |||
1272 | } |
||
1273 | /**
|
||
1274 | * Get number of licenses to buy of a software
|
||
1275 | *
|
||
1276 | * @param $sID software ID
|
||
1277 | * @return number of licenses to buy
|
||
1278 | */
|
||
1279 | function getLicenceToBuy($sID) { |
||
1280 | global $DB; |
||
1281 | $query = "SELECT ID FROM glpi_licenses WHERE (sID = '$sID' AND buy ='0' AND serial <> 'free' AND serial <> 'global')"; |
||
1282 | $result = $DB->query($query); |
||
1283 | return $DB->numrows($result); |
||
1284 | } |
||
1285 | |||
1286 | /**
|
||
1287 | * Get number of licensesof a software
|
||
1288 | *
|
||
1289 | * @param $sID software ID
|
||
1290 | * @return number of licenses
|
||
1291 | */
|
||
1292 | function getLicenceNumber($sID) { |
||
1293 | global $DB; |
||
1294 | $query = "SELECT ID,serial FROM glpi_licenses WHERE (sID = '$sID')"; |
||
1295 | $result = $DB->query($query); |
||
1296 | return $DB->numrows($result); |
||
1297 | } |
||
1298 | /**
|
||
1299 | * A software have a global license ?
|
||
1300 | *
|
||
1301 | * @param $sID software ID
|
||
1302 | * @return boolean : is the software have a global license
|
||
1303 | */
|
||
1304 | function isGlobalSoftware($sID) { |
||
1305 | global $DB; |
||
1306 | $query = "SELECT ID,serial FROM glpi_licenses WHERE (sID = '$sID' and serial='global')"; |
||
1307 | $result = $DB->query($query); |
||
1308 | |||
1309 | return ($DB->numrows($result) > 0); |
||
1310 | } |
||
1311 | |||
1312 | /**
|
||
1313 | * A software have a free license ?
|
||
1314 | *
|
||
1315 | * @param $sID software ID
|
||
1316 | * @return boolean : is the software have a free license
|
||
1317 | */
|
||
1318 | function isFreeSoftware($sID) { |
||
1319 | global $DB; |
||
1320 | $query = "SELECT ID,serial FROM glpi_licenses WHERE (sID = '$sID' and serial='free')"; |
||
1321 | $result = $DB->query($query); |
||
1322 | return ($DB->numrows($result) > 0); |
||
1323 | } |
||
1324 | /**
|
||
1325 | * Get number of installation of a license
|
||
1326 | *
|
||
1327 | * @param $ID license ID
|
||
1328 | * @return number of installation
|
||
1329 | */
|
||
1330 | function getInstallionsForLicense($ID) { |
||
1331 | global $DB; |
||
1332 | $query = "SELECT count(*) FROM glpi_inst_software INNER JOIN glpi_computers ON ( glpi_inst_software.cID=glpi_computers.ID ) WHERE glpi_inst_software.license ='$ID' AND glpi_computers.deleted='0' AND glpi_computers.is_template='0' "; |
||
1333 | |||
1334 | $result = $DB->query($query); |
||
1335 | |||
1336 | if ($DB->numrows($result) != 0) { |
||
1337 | return $DB->result($result, 0, 0); |
||
1338 | } else
|
||
1339 | return 0; |
||
1340 | |||
1341 | } |
||
1342 | |||
1343 | /*
|
||
1344 | * Indicates if software is in trash or not
|
||
1345 | * @param ID the software's ID
|
||
1346 | * @return true if it's in trash, false if not
|
||
1347 |
|
||
1348 | /* // NOT_USED
|
||
1349 | function isSoftwareDeleted($ID) {
|
||
1350 | global $DB;
|
||
1351 | $query = "SELECT deleted FROM glpi_software WHERE ID =" . $ID;
|
||
1352 | $result = $DB->query($query);
|
||
1353 | if ($DB->numrows($result) > 0)
|
||
1354 | return $DB->result($result, 0, "deleted");
|
||
1355 | else
|
||
1356 | return false;
|
||
1357 | }
|
||
1358 | */
|
||
1359 | /**
|
||
1360 | * Create a new software
|
||
1361 | * @param name the software's name
|
||
1362 | * @param manufacturer the software's manufacturer
|
||
1363 | * @param entity the entity in which the software must be added
|
||
1364 | * @param comments
|
||
1365 | * @param process_type process which calls the function (IMPORT_TYPE_OCS, IMPORT_TYPE_DICTIONNARY, etc...)
|
||
1366 | * @return the software's ID
|
||
1367 | */
|
||
1368 | function addSoftware($name, $manufacturer, $entity, $comments = '', $process_type = -1) { |
||
1369 | global $LANG, $DB; |
||
1370 | $software = new Software; |
||
1371 | |||
1372 | $manufacturer_id = 0; |
||
1373 | if ($manufacturer != '') { |
||
1374 | $manufacturer_id = externalImportDropdown("glpi_dropdown_manufacturer", $manufacturer); |
||
1375 | } |
||
1376 | |||
1377 | $sql = "SELECT ID FROM glpi_software WHERE FK_entities='$entity' AND FK_glpi_enterprise='$manufacturer_id' AND name='".$name."'"; |
||
1378 | $res_soft = $DB->query($sql); |
||
1379 | if ($soft = $DB->fetch_array($res_soft)) { |
||
1380 | $id = $soft["ID"]; |
||
1381 | } else {
|
||
1382 | $input["name"] = $name; |
||
1383 | $input["FK_glpi_enterprise"] = $manufacturer_id; |
||
1384 | $input["FK_entities"] = $entity; |
||
1385 | $input["comments"] = $LANG["rulesengine"][88]; |
||
1386 | |||
1387 | //Process software's category rules
|
||
1388 | $softcatrule = new SoftwareCategoriesRuleCollection; |
||
1389 | $result = $softcatrule->processAllRules(null, null, $input); |
||
1390 | if (!empty ($result) && isset ($result["category"])) { |
||
1391 | $input["category"] = $result["category"]; |
||
1392 | } else {
|
||
1393 | $input["category"] = 0; |
||
1394 | } |
||
1395 | |||
1396 | switch ($process_type) { |
||
1397 | case IMPORT_TYPE_OCS : |
||
1398 | $input["_from_ocs"] = 1; |
||
1399 | break;
|
||
1400 | default :
|
||
1401 | break;
|
||
1402 | } |
||
1403 | |||
1404 | $id = $software->add($input); |
||
1405 | } |
||
1406 | return $id; |
||
1407 | } |
||
1408 | |||
1409 | /**
|
||
1410 | * Put software in trash because it's been removed by GLPI software dictionnary
|
||
1411 | * @param $ID the ID of the software to put in trash
|
||
1412 | * @param $comments the comments to add to the already existing software's comments
|
||
1413 | * @param $process_type process which calls the function (IMPORT_TYPE_OCS, IMPORT_TYPE_DICTIONNARY, etc...)
|
||
1414 | */
|
||
1415 | function putSoftwareInTrash($ID, $comments = '', $process_type = -1) { |
||
1416 | global $LANG,$CFG_GLPI; |
||
1417 | $software = new Software; |
||
1418 | //Get the software's fields
|
||
1419 | $software->getFromDB($ID); |
||
1420 | |||
1421 | $input["ID"] = $ID; |
||
1422 | $input["deleted"] = 1; |
||
1423 | |||
1424 | $config = new Config; |
||
1425 | $config->getFromDB($CFG_GLPI["ID"]); |
||
1426 | |||
1427 | //change category of the software on deletion (if defined in glpi_config)
|
||
1428 | if (isset($config->fields["category_on_software_delete"]) && $config->fields["category_on_software_delete"] != 0) |
||
1429 | $input["category"] = $config->fields["category_on_software_delete"]; |
||
1430 | |||
1431 | //Add dictionnary comment to the current comments
|
||
1432 | $input["comments"] = ($software->fields["comments"] != '' ? "\n" : '') . $comments; |
||
1433 | |||
1434 | //Update the software
|
||
1435 | switch ($process_type) { |
||
1436 | case IMPORT_TYPE_OCS : |
||
1437 | $input["_from_ocs"] = 1; |
||
1438 | break;
|
||
1439 | default :
|
||
1440 | break;
|
||
1441 | } |
||
1442 | |||
1443 | $software->update($input); |
||
1444 | } |
||
1445 | |||
1446 | /**
|
||
1447 | * Restore a software from trash
|
||
1448 | * @param $ID the ID of the software to put in trash
|
||
1449 | * @param $process_type process which calls the function (IMPORT_TYPE_OCS, IMPORT_TYPE_DICTIONNARY, etc...)
|
||
1450 | */
|
||
1451 | function removeSoftwareFromTrash($ID, $process_type = -1) { |
||
1452 | $s = new Software; |
||
1453 | |||
1454 | $s->getFromDB($ID); |
||
1455 | $softcatrule = new SoftwareCategoriesRuleCollection; |
||
1456 | $result = $softcatrule->processAllRules(null, null, $s->fields); |
||
1457 | |||
1458 | if (!empty ($result) && isset ($result["category"])) |
||
1459 | $input["category"] = $result["category"]; |
||
1460 | else
|
||
1461 | $input["category"] = 0; |
||
1462 | |||
1463 | //Update the software
|
||
1464 | switch ($process_type) { |
||
1465 | case IMPORT_TYPE_OCS : |
||
1466 | $input["_from_ocs"] = 1; |
||
1467 | break;
|
||
1468 | default :
|
||
1469 | break;
|
||
1470 | } |
||
1471 | $s->restore(array ( |
||
1472 | "ID" => $ID |
||
1473 | )); |
||
1474 | } |
||
1475 | /**
|
||
1476 | * Add a Software. If already exist in trash restore it
|
||
1477 | * @param name the software's name
|
||
1478 | * @param manufacturer the software's manufacturer
|
||
1479 | * @param entity the entity in which the software must be added
|
||
1480 | * @param comments comments
|
||
1481 | * @param process_type process which calls the function (IMPORT_TYPE_OCS, IMPORT_TYPE_DICTIONNARY, etc...)
|
||
1482 | */
|
||
1483 | function addSoftwareOrRestoreFromTrash($name,$manufacturer,$entity,$comments='',$process_type=-1) { |
||
1484 | global $DB; |
||
1485 | //Look for the software by his name in GLPI for a specific entity
|
||
1486 | $query_search = "SELECT glpi_software.ID as ID, glpi_software.deleted as deleted |
||
1487 | FROM glpi_software
|
||
1488 | WHERE name = '" . $name . "' AND is_template='0' AND FK_entities='" . $entity."'"; |
||
1489 | $result_search = $DB->query($query_search); |
||
1490 | if ($DB->numrows($result_search) > 0) { |
||
1491 | //Software already exists for this entity, get his ID
|
||
1492 | $data = $DB->fetch_array($result_search); |
||
1493 | $ID = $data["ID"]; |
||
1494 | |||
1495 | // restore software
|
||
1496 | if ($data['deleted']) |
||
1497 | removeSoftwareFromTrash($ID);
|
||
1498 | } else {
|
||
1499 | $ID = 0; |
||
1500 | } |
||
1501 | |||
1502 | if (!$ID) |
||
1503 | $ID = addSoftware($name, $manufacturer, $entity, $comments, $process_type); |
||
1504 | return $ID; |
||
1505 | } |
||
1506 | |||
1507 | |||
1508 | /**
|
||
1509 | * Cron action on softwares : alert on expired licences
|
||
1510 | * @param $display display informations instead or log in file ?
|
||
1511 | * @return 0 : nothing to do 1 : done with success
|
||
1512 | **/
|
||
1513 | function cron_software($display=false){ |
||
1514 | global $DB,$CFG_GLPI,$LANG; |
||
1515 | |||
1516 | if (!$CFG_GLPI["mailing"]){ |
||
1517 | return false; |
||
1518 | } |
||
1519 | |||
1520 | loadLanguage($CFG_GLPI["default_language"]); |
||
1521 | |||
1522 | $message=array(); |
||
1523 | $items_notice=array(); |
||
1524 | $items_end=array(); |
||
1525 | |||
1526 | // Check notice
|
||
1527 | $query="SELECT glpi_licenses.*, glpi_software.FK_entities, glpi_software.name as softname |
||
1528 | FROM glpi_licenses
|
||
1529 | LEFT JOIN glpi_alerts ON (glpi_licenses.ID = glpi_alerts.FK_device
|
||
1530 | AND glpi_alerts.device_type='".LICENSE_TYPE."' |
||
1531 | AND glpi_alerts.type='".ALERT_END."') |
||
1532 | LEFT JOIN glpi_software ON (glpi_licenses.sID = glpi_software.ID)
|
||
1533 | WHERE glpi_alerts.date IS NULL
|
||
1534 | AND glpi_licenses.expire <> '0000-00-00'
|
||
1535 | AND glpi_licenses.expire IS NOT NULL
|
||
1536 | AND glpi_licenses.expire < CURDATE()
|
||
1537 | ";
|
||
1538 | |||
1539 | $result=$DB->query($query); |
||
1540 | if ($DB->numrows($result)>0){ |
||
1541 | while ($data=$DB->fetch_array($result)){ |
||
1542 | if (!isset($message[$data["FK_entities"]])){ |
||
1543 | $message[$data["FK_entities"]]=""; |
||
1544 | } |
||
1545 | if (!isset($items_notice[$data["FK_entities"]])){ |
||
1546 | $items[$data["FK_entities"]]=array(); |
||
1547 | } |
||
1548 | |||
1549 | $name = $data['softname'].' '.$data['version'].' - '.$data['serial']; |
||
1550 | |||
1551 | // define message alert
|
||
1552 | if (strstr($message[$data["FK_entities"]],$name)===false){ |
||
1553 | $message[$data["FK_entities"]].=$LANG["mailing"][51]." ".$name.": ".convDate($data["expire"])."<br>\n"; |
||
1554 | } |
||
1555 | $items[$data["FK_entities"]][]=$data["ID"]; |
||
1556 | } |
||
1557 | |||
1558 | |||
1559 | } |
||
1560 | |||
1561 | if (count($message)>0){ |
||
1562 | foreach ($message as $entity => $msg){ |
||
1563 | $mail=new MailingAlert("alertlicense",$msg,$entity); |
||
1564 | if ($mail->send()){ |
||
1565 | if ($display){ |
||
1566 | addMessageAfterRedirect(getDropdownName("glpi_entities",$entity).": $msg"); |
||
1567 | } |
||
1568 | logInFile("cron",getDropdownName("glpi_entities",$entity).": $msg\n"); |
||
1569 | |||
1570 | // Mark alert as done
|
||
1571 | $alert=new Alert(); |
||
1572 | $input["device_type"]=LICENSE_TYPE; |
||
1573 | |||
1574 | $input["type"]=ALERT_END; |
||
1575 | if (isset($items[$entity])){ |
||
1576 | foreach ($items[$entity] as $ID){ |
||
1577 | $input["FK_device"]=$ID; |
||
1578 | $alert->add($input); |
||
1579 | unset($alert->fields['ID']); |
||
1580 | } |
||
1581 | } |
||
1582 | } else {
|
||
1583 | if ($display){ |
||
1584 | addMessageAfterRedirect(getDropdownName("glpi_entities",$entity).": Send licenses alert failed"); |
||
1585 | } |
||
1586 | logInFile("cron",getDropdownName("glpi_entities",$entity).": Send licenses alert failed\n"); |
||
1587 | } |
||
1588 | } |
||
1589 | return 1; |
||
1590 | } |
||
1591 | |||
1592 | return 0; |
||
1593 | |||
1594 | |||
1595 | } |
||
1596 | |||
1597 | |||
1598 | ?> |