/** * Transfer affected licenses to a computer * * @param $ID ID of the License **/ function transferAffectedLicense($ID) { global $DB; $computer_softwarelicense = new Computer_SoftwareLicense(); $license = new SoftwareLicense(); if ($computer_softwarelicense->getFromDB($ID)) { if ($license->getFromDB($computer_softwarelicense->getField('softwarelicenses_id'))) { //// Update current : decrement number by 1 if valid if ($license->getField('number') > 1) { $license->update(array('id' => $license->getID(), 'number' => $license->getField('number') - 1)); } // Create new license : need to transfer softwre and versions before $input = array(); $newsoftID = $this->copySingleSoftware($license->fields['softwares_id']); if ($newsoftID > 0) { //// If license already exists : increment number by one $query = "SELECT *\n FROM `glpi_softwarelicenses`\n WHERE `softwares_id` = '{$newsoftID}'\n AND `name` = '" . addslashes($license->fields['name']) . "'\n AND `serial` = '" . addslashes($license->fields['serial']) . "'"; $newlicID = -1; if ($result = $DB->query($query)) { //// If exists : increment number by 1 if ($DB->numrows($result) > 0) { $data = $DB->fetch_array($result); $newlicID = $data['id']; $license->update(array('id' => $data['id'], 'number' => $data['number'] + 1)); } else { //// If not exists : create with number = 1 $input = $license->fields; foreach (array('softwareversions_id_buy', 'softwareversions_id_use') as $field) { if ($license->fields[$field] > 0) { $newversID = $this->copySingleVersion($license->fields[$field]); if ($newversID > 0 && $newversID != $license->fields[$field]) { $input[$field] = $newversID; } } } unset($input['id']); $input['number'] = 1; $input['entities_id'] = $this->to; $input['softwares_id'] = $newsoftID; $newlicID = $license->add($input); } } if ($newlicID > 0) { $input = array('id' => $ID, 'softwarelicenses_id' => $newlicID); $computer_softwarelicense->update($input); } } } } // getFromDB }
if (!isset($_GET["id"])) { $_GET["id"] = ""; } if (!isset($_GET["softwares_id"])) { $_GET["softwares_id"] = ""; } $license = new SoftwareLicense(); if (isset($_POST["add"])) { $license->check(-1, 'w', $_POST); $newID = $license->add($_POST); Event::log($_POST['softwares_id'], "software", 4, "inventory", $_SESSION["glpiname"] . " " . $LANG['log'][85] . " {$newID}."); glpi_header($_SERVER['HTTP_REFERER']); } else { if (isset($_POST["delete"])) { $license->check($_POST['id'], 'd'); $license->delete($_POST); Event::log($license->fields['softwares_id'], "software", 4, "inventory", $_SESSION["glpiname"] . " " . $LANG['log'][87] . " " . $_POST["id"]); $license->redirectToList(); } else { if (isset($_POST["update"])) { $license->check($_POST['id'], 'w'); $license->update($_POST); Event::log($license->fields['softwares_id'], "software", 4, "inventory", $_SESSION["glpiname"] . " " . $LANG['log'][86] . " " . $_POST["id"]); glpi_header($_SERVER['HTTP_REFERER']); } else { commonHeader($LANG['Menu'][4], $_SERVER['PHP_SELF'], "inventory", "software"); $license->showForm($_GET["id"], array('softwares_id' => $_GET["softwares_id"])); commonFooter(); } } }
public function deleteLinkWithItem($detailID, $itemtype, $plugin_order_orders_id) { global $DB; if ($itemtype == 'SoftWareLicense') { $detail = new PluginOrderOrder_Item(); $detail->getFromDB($detailID); $license = $detail->fields["items_id"]; $this->removeInfoComRelatedToOrder($itemtype, $license); $result = $PluginOrderOrder_Item->queryRef($detail->fields["plugin_order_orders_id"], $detail->fields["plugin_order_references_id"], $detail->fields["price_taxfree"], $detail->fields["discount"], PluginOrderOrder::ORDER_DEVICE_DELIVRED); $nb = $DB->numrows($result); if ($nb) { for ($i = 0; $i < $nb; $i++) { $ID = $DB->result($result, $i, 'id'); $input["id"] = $ID; $input["items_id"] = 0; $detail->update($input); $lic = new SoftwareLicense(); $lic->getFromDB($license); $values["id"] = $lic->fields["id"]; $values["number"] = $lic->fields["number"] - 1; $lic->update($values); } $order = new PluginOrderOrder(); $order->getFromDB($detail->fields["plugin_order_orders_id"]); $new_value = __("Item unlink form order", "order") . ' : ' . $order->fields["name"]; $order->addHistory($itemtype, '', $new_value, $license); $item = new $itemtype(); $item->getFromDB($license); $new_value = __("Item unlink form order", "order") . ' : ' . $item->getField("name"); $order->addHistory('PluginOrderOrder', '', $new_value, $order->fields["id"]); } } else { $order = new PluginOrderOrder(); $order->getFromDB($plugin_order_orders_id); $detail = new PluginOrderOrder_Item(); $detail->getFromDB($detailID); $items_id = $detail->fields["items_id"]; $this->removeInfoComRelatedToOrder($itemtype, $items_id); if ($items_id != 0) { $input = $detail->fields; $input["items_id"] = 0; $detail->update($input); } else { Session::addMessageAfterRedirect(__("One or several selected rows haven't linked items", "order"), TRUE, ERROR); } $new_value = __("Item unlink form order", "order") . ' : ' . $order->fields["name"]; $order->addHistory($itemtype, '', $new_value, $items_id); $item = new $itemtype(); $item->getFromDB($items_id); $new_value = __("Item unlink form order", "order") . ' : ' . $item->getField("name"); $order->addHistory('PluginOrderOrder', '', $new_value, $order->fields["id"]); } }
foreach ($_POST["item"] as $ID => $val) { if ($val == 1) { $pluginOrderOrder_Item->getFromDB($ID); if ($pluginOrderOrder_Item->fields["itemtype"] == 'SoftwareLicense') { $result = $pluginOrderOrder_Item->queryRef($_POST["plugin_order_orders_id"], $pluginOrderOrder_Item->fields["plugin_order_references_id"], $pluginOrderOrder_Item->fields["price_taxfree"], $pluginOrderOrder_Item->fields["discount"]); $nb = $DB->numrows($result); if ($nb) { for ($i = 0; $i < $nb; $i++) { $ID = $DB->result($result, $i, 'id'); $items_id = $DB->result($result, $i, 'items_id'); if ($items_id) { $lic = new SoftwareLicense(); $lic->getFromDB($items_id); $values["id"] = $lic->fields["id"]; $values["number"] = $lic->fields["number"] - 1; $lic->update($values); } $input["id"] = $ID; $pluginOrderOrder_Item->delete(array('id' => $input["id"])); } $new_value = __("Remove reference", "order") . " "; $new_value .= Dropdown::getDropdownName("glpi_plugin_order_references", $ID); $pluginOrderOrder->addHistory("PluginOrderOrder", "", $new_value, $_POST["plugin_order_orders_id"]); } } else { $new_value = __("Remove reference", "order") . " "; $new_value .= Dropdown::getDropdownName("glpi_plugin_order_references", $ID); $pluginOrderOrder->addHistory("PluginOrderOrder", "", $new_value, $_POST["plugin_order_orders_id"]); $pluginOrderOrder_Item->delete(array('id' => $ID)); } }
/** * * Update config of a new software office * * This function create a officepack in GLPI with some general data. * * @param type $computers_id * @param $entity * @param type $ocsComputer * @param type $cfg_ocs * * @internal param \type $ocsservers_id */ static function updateOfficePack($computers_id, $entity, $ocsComputer, $cfg_ocs) { global $DB; $software = new Software(); $ocsOfficePacks = $ocsComputer; // Read imported software in last sync $query = "SELECT `glpi_computers_softwarelicenses`.`id` as id,\n `glpi_softwares`.`name` as sname,\n `glpi_softwarelicenses`.`name` as lname,\n `glpi_softwareversions`.`name` as vname\n FROM `glpi_computers_softwarelicenses`\n INNER JOIN `glpi_softwarelicenses`\n ON `glpi_softwarelicenses`.`id`= `glpi_computers_softwarelicenses`.`softwarelicenses_id`\n INNER JOIN `glpi_softwares`\n ON `glpi_softwares`.`id`= `glpi_softwarelicenses`.`softwares_id`\n INNER JOIN `glpi_softwareversions`\n ON `glpi_softwarelicenses`.`softwareversions_id_use` = `glpi_softwareversions`.`id`\n WHERE `glpi_computers_softwarelicenses`.`computers_id`='{$computers_id}'\n AND `is_dynamic`"; $imported = array(); foreach ($DB->request($query) as $data) { $imported[$data['id']] = strtolower($data['vname']); } if (count($ocsOfficePacks) > 0) { foreach ($ocsOfficePacks as $ocsOfficePack) { $ocsOfficePack = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($ocsOfficePack)); $query1 = "SELECT `glpi_softwares`.`id` AS softwares_id,\n `glpi_softwareversions`.`id` AS softwareversions_id,\n `glpi_softwareversions`.`name` AS softwareversions_name\n FROM `glpi_softwares`\n LEFT JOIN `glpi_softwareversions` ON `glpi_softwareversions`.`softwares_id` = `glpi_softwares`.`id`\n LEFT JOIN `glpi_computers_softwareversions` ON `glpi_computers_softwareversions`.softwareversions_id = `glpi_softwareversions`.`id`\n WHERE `glpi_computers_softwareversions`.`computers_id` = '" . $computers_id . "'\n AND `is_dynamic` \n AND `glpi_softwares`.`name` = '" . $ocsOfficePack['PRODUCT'] . "'\n AND `glpi_softwareversions`.`name` = '" . $ocsOfficePack['OFFICEVERSION'] . "'"; $result = $DB->query($query1); if ($DB->numrows($result) > 0) { $softwares_id = $DB->result($result, 0, 'softwares_id'); $softwareversions_id = $DB->result($result, 0, 'softwareversions_id'); $soft_l['softwares_id'] = $softwares_id; $soft_l['softwareversions_id_use'] = $softwareversions_id; $soft_l['entities_id'] = $entity; $soft_l['name'] = $ocsOfficePack['OFFICEKEY']; $soft_l['serial'] = $ocsOfficePack['OFFICEKEY']; $soft_l['comment'] = $ocsOfficePack['NOTE']; $id = array_search(strtolower(stripslashes($ocsOfficePack['OFFICEVERSION'])), $imported); $software_licenses = new SoftwareLicense(); $computer_softwarelicenses = new Computer_SoftwareLicense(); if ($id) { //-------------------------------------------------------------------------// //---- The software exists in this license for this computer --------------// //---------------------------- Update comments ----------------------------// //---------------------------------------------------- --------------------// if ($software_licenses->getFromDBByQuery("WHERE `softwares_id` = " . $softwares_id . " \n AND `serial` = '" . $ocsOfficePack['OFFICEKEY'] . "'\n AND `softwareversions_id_use` = " . $softwareversions_id)) { $software_licenses->update(array('id' => $software_licenses->getID(), 'comment' => $ocsOfficePack['NOTE'])); if (!$computer_softwarelicenses->getFromDBByQuery("WHERE `computers_id` = " . $computers_id . "\n AND `softwarelicenses_id` = " . $software_licenses->getID())) { $computer_soft_l['computers_id'] = $computers_id; $computer_soft_l['softwarelicenses_id'] = $software_licenses->getID(); $computer_soft_l['is_dynamic'] = -1; $computer_softwarelicenses->add($computer_soft_l); } } unset($imported[$id]); } else { //------------------------------------------------------------------------// //---- The software doesn't exists in this license for this computer -----// //------------------------------------------------------------------------// if ($software_licenses->getFromDBByQuery("WHERE `softwares_id` = " . $softwares_id . " \n AND `serial` = '" . $ocsOfficePack['OFFICEKEY'] . "'\n AND `softwareversions_id_use` = " . $softwareversions_id)) { $id_software_licenses = $software_licenses->getID(); } else { $software_licenses->fields['softwares_id'] = $softwares_id; $id_software_licenses = $software_licenses->add($soft_l, array(), $cfg_ocs['history_software']); } if ($id_software_licenses) { $computer_soft_l['computers_id'] = $computers_id; $computer_soft_l['softwarelicenses_id'] = $id_software_licenses; $computer_soft_l['is_dynamic'] = 1; $computer_soft_l['number'] = -1; $computer_softwarelicenses->add($computer_soft_l); } } } } } foreach ($imported as $id => $unused) { $computer_softwarelicenses->delete(array('id' => $id), true, $cfg_ocs['history_software']); // delete cause a getFromDB, so fields contains values $verid = $computer_softwarelicenses->getField('softwareversions_id'); if (countElementsInTable('glpi_computers_softwarelicenses', "softwarelicenses_id = '{$verid}'") == 0) { $vers = new SoftwareVersion(); if ($vers->getFromDB($verid) && countElementsInTable('glpi_softwarelicenses', "softwares_id = '" . $vers->fields['softwares_id'] . "'") == 0) { $soft = new Software(); $soft->delete(array('id' => $vers->fields['softwares_id']), 1); } $vers->delete(array("id" => $verid)); } } }