if (!isset($_GET["order"])) { $_GET["order"] = ""; } if (!isset($_GET["withtemplate"])) { $_GET["withtemplate"] = ""; } $soft = new Software(); if (isset($_POST["add"])) { $soft->check(-1, 'w', $_POST); $newID = $soft->add($_POST); Event::log($newID, "software", 4, "inventory", $_SESSION["glpiname"] . " " . $LANG['log'][20] . " " . $_POST["name"] . "."); glpi_header($_SERVER['HTTP_REFERER']); } else { if (isset($_POST["delete"])) { $soft->check($_POST["id"], 'd'); $soft->delete($_POST); Event::log($_POST["id"], "software", 4, "inventory", $_SESSION["glpiname"] . " " . $LANG['log'][22]); $soft->redirectToList(); } else { if (isset($_POST["restore"])) { $soft->check($_POST["id"], 'd'); $soft->restore($_POST); Event::log($_POST["id"], "software", 4, "inventory", $_SESSION["glpiname"] . " " . $LANG['log'][23]); $soft->redirectToList(); } else { if (isset($_REQUEST["purge"])) { $soft->check($_REQUEST["id"], 'd'); $soft->delete($_REQUEST, 1); Event::log($_REQUEST["id"], "software", 4, "inventory", $_SESSION["glpiname"] . " " . $LANG['log'][24]); $soft->redirectToList(); } else {
function cleanSoftwares() { if (!isset($this->already_transfer['Software'])) { return; } $soft = new Software(); foreach ($this->already_transfer['Software'] as $old => $new) { if (countElementsInTable("glpi_softwarelicenses", "softwares_id={$old}") == 0 && countElementsInTable("glpi_softwareversions", "softwares_id={$old}") == 0) { if ($this->options['clean_software'] == 1) { // delete $soft->delete(array('id' => $old), 0); } else { if ($this->options['clean_software'] == 2) { // purge $soft->delete(array('id' => $old), 1); } } } } }
$_GET["withtemplate"] = ""; } $soft = new Software(); if (isset($_POST["add"])) { $soft->check(-1, CREATE, $_POST); if ($newID = $soft->add($_POST)) { Event::log($newID, "software", 4, "inventory", sprintf(__('%1$s adds the item %2$s'), $_SESSION["glpiname"], $_POST["name"])); if ($_SESSION['glpibackcreated']) { Html::redirect($soft->getFormURL() . "?id=" . $newID); } } Html::back(); } else { if (isset($_POST["delete"])) { $soft->check($_POST["id"], DELETE); $soft->delete($_POST); Event::log($_POST["id"], "software", 4, "inventory", sprintf(__('%s deletes an item'), $_SESSION["glpiname"])); $soft->redirectToList(); } else { if (isset($_POST["restore"])) { $soft->check($_POST["id"], DELETE); $soft->restore($_POST); Event::log($_POST["id"], "software", 4, "inventory", sprintf(__('%s restores an item'), $_SESSION["glpiname"])); $soft->redirectToList(); } else { if (isset($_POST["purge"])) { $soft->check($_POST["id"], PURGE); $soft->delete($_POST, 1); Event::log($_POST["id"], "software", 4, "inventory", sprintf(__('%s purges an item'), $_SESSION["glpiname"])); $soft->redirectToList(); } else {
/** * Delete all old softwares of a computer. * * @param $glpi_computers_id integer : glpi computer id. * * @return nothing. **/ static function resetSoftwares($glpi_computers_id) { global $DB; $query = "SELECT*\n FROM `glpi_computers_softwareversions`\n WHERE `computers_id` = '{$glpi_computers_id}'"; $result = $DB->query($query); if ($DB->numrows($result) > 0) { while ($data = $DB->fetch_assoc($result)) { $query2 = "SELECT COUNT(*)\n FROM `glpi_computers_softwareversions`\n WHERE `softwareversions_id` = '" . $data['softwareversions_id'] . "'"; $result2 = $DB->query($query2); if ($DB->result($result2, 0, 0) == 1) { $vers = new SoftwareVersion(); $vers->getFromDB($data['softwareversions_id']); $query3 = "SELECT COUNT(*)\n FROM `glpi_softwareversions`\n WHERE `softwares_id`='" . $vers->fields['softwares_id'] . "'"; $result3 = $DB->query($query3); if ($DB->result($result3, 0, 0) == 1) { $soft = new Software(); $soft->delete(array('id' => $vers->fields['softwares_id']), 1); } $vers->delete(array("id" => $data['softwareversions_id'])); } } $query = "DELETE\n FROM `glpi_computers_softwareversions`\n WHERE `computers_id` = '{$glpi_computers_id}'"; $DB->query($query); } }
/** * Test software category Rule and putInTrash / removeFromTrash */ public function testSoftwareCategory() { global $CFG_GLPI; $ent0 = $this->sharedFixture['entity'][0]; // Clean preload rules $tmp = SingletonRuleList::getInstance('RuleSoftwareCategory'); $tmp->load = 0; $this->assertArrayHasKey('softwarecategories_id_ondelete', $CFG_GLPI, "Fail: no softwarecategories_id_ondelete"); $idcat[0] = Dropdown::import('SoftwareCategory', array('name' => 'Trashed')); $this->assertGreaterThan(0, $idcat[0], "Fail: can't create SoftwareCategory"); $idcat[1] = Dropdown::import('SoftwareCategory', array('name' => 'OpenSource')); $this->assertGreaterThan(0, $idcat[1], "Fail: can't create SoftwareCategory"); $rule = new RuleSoftwareCategory(); $crit = new RuleCriteria(); $acte = new RuleAction(); $idr[0] = $rule->add(array('name' => 'OSS', 'sub_type' => 'RuleSoftwareCategory', 'match' => 'AND', 'is_active' => 1)); $this->assertGreaterThan(0, $idr[0], "Fail: can't create rule 1"); $this->assertTrue($rule->getFromDB($idr[0])); $this->assertEquals(1, $rule->fields['ranking'], "Fail: ranking not set"); $idc[0] = $crit->add(array('rules_id' => $idr[0], 'criteria' => 'manufacturer', 'condition' => Rule::PATTERN_IS, 'pattern' => 'Indepnet')); $this->assertGreaterThan(0, $idc[0], "Fail: can't create rule 1 criteria"); $ida[0] = $acte->add(array('rules_id' => $idr[0], 'action_type' => 'assign', 'field' => 'softwarecategories_id', 'value' => $idcat[1])); $this->assertGreaterThan(0, $ida[0], "Fail: can't create rule 1 action"); // Createthe software $soft = new Software(); $id[0] = $soft->addOrRestoreFromTrash('GLPI', 'Indepnet', $ent0); $this->assertGreaterThan(0, $id[0], "Fail: can't create software 1"); // Check name $this->assertTrue($soft->getFromDB($id[0]), "Fail: can't read new soft"); $this->assertEquals('GLPI', $soft->getField('name'), "Fail: name not set"); // Check category $catid = $soft->getField('softwarecategories_id'); $this->assertEquals($idcat[1], $catid, "Fail: category not set"); // Change configuration $CFG_GLPI["softwarecategories_id_ondelete"] = $idcat[0]; // Delete $this->assertTrue($soft->putInTrash($id[0]), "Fail: can't put soft in trash"); $this->assertTrue($soft->getFromDB($id[0]), "Fail: can't read new soft"); $catid = $soft->getField('softwarecategories_id'); $this->assertEquals($idcat[0], $catid, "Fail: category not set"); $this->assertEquals(1, $soft->getField('is_deleted'), "Fail: soft not deleted"); // Restore $this->assertTrue($soft->removeFromTrash($id[0]), "Fail: can't put soft in trash"); $this->assertTrue($soft->getFromDB($id[0]), "Fail: can't read new soft"); $catid = $soft->getField('softwarecategories_id'); $this->assertEquals($idcat[1], $catid, "Fail: category not set"); $this->assertEquals(0, $soft->getField('is_deleted'), "Fail: soft not restored"); // Clean $this->assertTrue($soft->delete(array('id' => $id[0]), true), "Fail: can't delete software 1)"); }
/** * @fn software_delete * @short Action method to delete a software product. * @warning This method has potentially destructive consquences. * Do not use it without a really good reason. */ public function software_delete() { if (isset($_GET['id'])) { $this->software = new Software(); $this->software->find_by_id($_GET['id']); } else { if (isset($_POST['id'])) { $software = new Software(); $software->find_by_id($_POST['id']); $software->delete(); // Expires the cache of Software & Sparkle feeds $this->expire_cached_software_pages(); } $this->redirect_to(array('action' => 'software_list')); } }
/** * * 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)); } } }