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);
                 }
             }
         }
     }
 }
Beispiel #3
0
    $_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 {
Beispiel #4
0
 /**
  * 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);
     }
 }
Beispiel #5
0
 /**
  * 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));
         }
     }
 }