Example #1
0
        }
    }
    Html::back();
    // delete a computer
} else {
    if (isset($_POST["delete"])) {
        $computer->check($_POST['id'], DELETE);
        $ok = $computer->delete($_POST);
        if ($ok) {
            Event::log($_POST["id"], "computers", 4, "inventory", sprintf(__('%s deletes an item'), $_SESSION["glpiname"]));
        }
        $computer->redirectToList();
    } else {
        if (isset($_POST["restore"])) {
            $computer->check($_POST['id'], DELETE);
            if ($computer->restore($_POST)) {
                Event::log($_POST["id"], "computers", 4, "inventory", sprintf(__('%s restores an item'), $_SESSION["glpiname"]));
            }
            $computer->redirectToList();
        } else {
            if (isset($_POST["purge"])) {
                $computer->check($_POST['id'], PURGE);
                if ($computer->delete($_POST, 1)) {
                    Event::log($_POST["id"], "computers", 4, "inventory", sprintf(__('%s purges an item'), $_SESSION["glpiname"]));
                }
                $computer->redirectToList();
                //update a computer
            } else {
                if (isset($_POST["update"])) {
                    $computer->check($_POST['id'], UPDATE);
                    $computer->update($_POST);
Example #2
0
 /**
  * @param $ocsid
  * @param $plugin_ocsinventoryng_ocsservers_id
  * @param $computers_id
  **/
 static function linkComputer($ocsid, $plugin_ocsinventoryng_ocsservers_id, $computers_id)
 {
     global $DB, $PluginOcsinventoryngDBocs, $CFG_GLPI;
     self::checkOCSconnection($plugin_ocsinventoryng_ocsservers_id);
     $query = "SELECT *\n                FROM `glpi_plugin_ocsinventoryng_ocslinks`\n                WHERE `computers_id` = '{$computers_id}'";
     $result = $DB->query($query);
     $ocs_id_change = false;
     $ocs_link_exists = false;
     $numrows = $DB->numrows($result);
     // Already link - check if the OCS computer already exists
     if ($numrows > 0) {
         $ocs_link_exists = true;
         $data = $DB->fetch_assoc($result);
         $query = "SELECT *\n                   FROM `hardware`\n                   WHERE `ID` = '" . $data["ocsid"] . "'";
         $result_ocs = $PluginOcsinventoryngDBocs->query($query);
         // Not found
         if ($PluginOcsinventoryngDBocs->numrows($result_ocs) == 0) {
             $idlink = $data["id"];
             $query = "UPDATE `glpi_plugin_ocsinventoryng_ocslinks`\n                       SET `ocsid` = '{$ocsid}'\n                       WHERE `id` = '" . $data["id"] . "'";
             if ($DB->query($query)) {
                 $ocs_id_change = true;
                 //Add history to indicates that the ocsid changed
                 $changes[0] = '0';
                 //Old ocsid
                 $changes[1] = $data["ocsid"];
                 //New ocsid
                 $changes[2] = $ocsid;
                 PluginOcsinventoryngOcslink::history($computers_id, $changes, PluginOcsinventoryngOcslink::HISTORY_OCS_IDCHANGED);
             }
         }
     }
     // No ocs_link or ocs id change does not exists so can link
     if ($ocs_id_change || !$ocs_link_exists) {
         $ocsConfig = self::getConfig($plugin_ocsinventoryng_ocsservers_id);
         // Set OCS checksum to max value
         self::setChecksumForComputer($ocsid, self::MAX_CHECKSUM);
         if ($ocs_id_change || ($idlink = self::ocsLink($ocsid, $plugin_ocsinventoryng_ocsservers_id, $computers_id))) {
             // automatic transfer computer
             if ($CFG_GLPI['transfers_id_auto'] > 0 && Session::isMultiEntitiesMode()) {
                 // Retrieve data from glpi_plugin_ocsinventoryng_ocslinks
                 $ocsLink = new PluginOcsinventoryngOcslink();
                 $ocsLink->getFromDB($idlink);
                 if (count($ocsLink->fields)) {
                     // Retrieve datas from OCS database
                     $query_ocs = "SELECT *\n                                 FROM `hardware`\n                                 WHERE `ID` = '" . $ocsLink->fields['ocsid'] . "'";
                     $result_ocs = $PluginOcsinventoryngDBocs->query($query_ocs);
                     if ($PluginOcsinventoryngDBocs->numrows($result_ocs) == 1) {
                         $data_ocs = Toolbox::addslashes_deep($PluginOcsinventoryngDBocs->fetch_array($result_ocs));
                         self::transferComputer($ocsLink->fields, $data_ocs);
                     }
                 }
             }
             $comp = new Computer();
             $comp->getFromDB($computers_id);
             $input["id"] = $computers_id;
             $input["entities_id"] = $comp->fields['entities_id'];
             $input["is_dynamic"] = 1;
             $input["_nolock"] = true;
             // Not already import from OCS / mark default state
             if (!$ocs_id_change || !$comp->fields['is_dynamic'] && $ocsConfig["states_id_default"] > 0) {
                 $input["states_id"] = $ocsConfig["states_id_default"];
             }
             $comp->update($input);
             // Auto restore if deleted
             if ($comp->fields['is_deleted']) {
                 $comp->restore(array('id' => $computers_id));
             }
             // Reset using GLPI Config
             $cfg_ocs = self::getConfig($plugin_ocsinventoryng_ocsservers_id);
             // Reset only if not in ocs id change case
             if (!$ocs_id_change) {
                 if ($cfg_ocs["import_general_os"]) {
                     self::resetDropdown($computers_id, "operatingsystems_id", "glpi_operatingsystems");
                 }
                 if ($cfg_ocs["import_device_processor"]) {
                     self::resetDevices($computers_id, 'DeviceProcessor');
                 }
                 if ($cfg_ocs["import_device_iface"]) {
                     self::resetDevices($computers_id, 'DeviceNetworkCard');
                 }
                 if ($cfg_ocs["import_device_memory"]) {
                     self::resetDevices($computers_id, 'DeviceMemory');
                 }
                 if ($cfg_ocs["import_device_hdd"]) {
                     self::resetDevices($computers_id, 'DeviceHardDrive');
                 }
                 if ($cfg_ocs["import_device_sound"]) {
                     self::resetDevices($computers_id, 'DeviceSoundCard');
                 }
                 if ($cfg_ocs["import_device_gfxcard"]) {
                     self::resetDevices($computers_id, 'DeviceGraphicCard');
                 }
                 if ($cfg_ocs["import_device_drive"]) {
                     self::resetDevices($computers_id, 'DeviceDrive');
                 }
                 if ($cfg_ocs["import_device_modem"] || $cfg_ocs["import_device_port"]) {
                     self::resetDevices($computers_id, 'DevicePci');
                 }
                 if ($cfg_ocs["import_software"]) {
                     self::resetSoftwares($computers_id);
                 }
                 if ($cfg_ocs["import_disk"]) {
                     self::resetDisks($computers_id);
                 }
                 if ($cfg_ocs["import_periph"]) {
                     self::resetPeripherals($computers_id);
                 }
                 if ($cfg_ocs["import_monitor"] == 1) {
                     // Only reset monitor as global in unit management
                     self::resetMonitors($computers_id);
                     // try to link monitor with existing
                 }
                 if ($cfg_ocs["import_printer"]) {
                     self::resetPrinters($computers_id);
                 }
                 if ($cfg_ocs["import_registry"]) {
                     self::resetRegistry($computers_id);
                 }
                 $changes[0] = '0';
                 $changes[1] = "";
                 $changes[2] = $ocsid;
                 PluginOcsinventoryngOcslink::history($computers_id, $changes, PluginOcsinventoryngOcslink::HISTORY_OCS_LINK);
             }
             self::updateComputer($idlink, $plugin_ocsinventoryng_ocsservers_id, 0);
             return true;
         }
     } else {
         //TRANS: %s is the OCS id
         Session::addMessageAfterRedirect(sprintf(__('Unable to import, GLPI computer is already related to an element of OCSNG (%d)', 'ocsinventoryng'), $ocsid), false, ERROR);
     }
     return false;
 }
 /**
  * @param $ocsid
  * @param $plugin_ocsinventoryng_ocsservers_id
  * @param $computers_id
  *
  * @return bool
  */
 static function linkComputer($ocsid, $plugin_ocsinventoryng_ocsservers_id, $computers_id)
 {
     global $DB, $CFG_GLPI;
     self::checkOCSconnection($plugin_ocsinventoryng_ocsservers_id);
     $ocsClient = self::getDBocs($plugin_ocsinventoryng_ocsservers_id);
     $cfg_ocs = self::getConfig($plugin_ocsinventoryng_ocsservers_id);
     $query = "SELECT *\n                FROM `glpi_plugin_ocsinventoryng_ocslinks`\n                WHERE `computers_id` = '{$computers_id}'";
     $result = $DB->query($query);
     $ocs_id_change = false;
     $ocs_link_exists = false;
     $numrows = $DB->numrows($result);
     // Already link - check if the OCS computer already exists
     if ($numrows > 0) {
         $ocs_link_exists = true;
         $data = $DB->fetch_assoc($result);
         // Not found
         if (!$ocsClient->getIfOCSComputersExists($data['ocsid'])) {
             $idlink = $data["id"];
             $query = "UPDATE `glpi_plugin_ocsinventoryng_ocslinks`\n                       SET `ocsid` = '{$ocsid}'\n                       WHERE `id` = '" . $data["id"] . "'";
             if ($DB->query($query)) {
                 $ocs_id_change = true;
                 //Add history to indicates that the ocsid changed
                 $changes[0] = '0';
                 //Old ocsid
                 $changes[1] = $data["ocsid"];
                 //New ocsid
                 $changes[2] = $ocsid;
                 PluginOcsinventoryngOcslink::history($computers_id, $changes, PluginOcsinventoryngOcslink::HISTORY_OCS_IDCHANGED);
             }
         }
     }
     $options = array("DISPLAY" => array("CHECKSUM" => PluginOcsinventoryngOcsClient::CHECKSUM_BIOS | PluginOcsinventoryngOcsClient::CHECKSUM_NETWORK_ADAPTERS));
     $ocsComputer = $ocsClient->getComputer($ocsid, $options);
     $serial = isset($ocsComputer['BIOS']["SSN"]) ? $ocsComputer['BIOS']["SSN"] : "";
     $ssnblacklist = Blacklist::getSerialNumbers();
     if (in_array($serial, $ssnblacklist)) {
         Session::addMessageAfterRedirect(sprintf(__('Unable to link this computer, Serial number is blacklisted (%d)', 'ocsinventoryng'), $ocsid), false, ERROR);
         return false;
     }
     $uuid = isset($ocsComputer['META']["UUID"]) ? $ocsComputer['META']["UUID"] : "";
     $uuidblacklist = Blacklist::getUUIDs();
     if (in_array($uuid, $uuidblacklist)) {
         Session::addMessageAfterRedirect(sprintf(__('Unable to link this computer, UUID is blacklisted (%d)', 'ocsinventoryng'), $ocsid), false, ERROR);
         return false;
     }
     // No ocs_link or ocs id change does not exists so can link
     if ($ocs_id_change || !$ocs_link_exists) {
         $ocsConfig = self::getConfig($plugin_ocsinventoryng_ocsservers_id);
         // Set OCS checksum to max value
         $ocsClient->setChecksum(PluginOcsinventoryngOcsClient::CHECKSUM_ALL, $ocsid);
         if ($ocs_id_change || ($idlink = self::ocsLink($ocsid, $plugin_ocsinventoryng_ocsservers_id, $computers_id))) {
             // automatic transfer computer
             if ($CFG_GLPI['transfers_id_auto'] > 0 && Session::isMultiEntitiesMode()) {
                 // Retrieve data from glpi_plugin_ocsinventoryng_ocslinks
                 $ocsLink = new PluginOcsinventoryngOcslink();
                 $ocsLink->getFromDB($idlink);
                 if (count($ocsLink->fields)) {
                     // Retrieve datas from OCS database
                     $ocsComputer = $ocsClient->getComputer($ocsLink->fields['ocsid']);
                     if (!is_null($ocsComputer)) {
                         $ocsComputer = Toolbox::addslashes_deep($ocsComputer);
                         self::transferComputer($ocsLink->fields);
                     }
                 }
             }
             $comp = new Computer();
             $comp->getFromDB($computers_id);
             $input["id"] = $computers_id;
             $input["entities_id"] = $comp->fields['entities_id'];
             $input["is_dynamic"] = 1;
             $input["_nolock"] = true;
             // Not already import from OCS / mark default state
             if (!$ocs_id_change && $ocsConfig["states_id_default"] > 0 || !$comp->fields['is_dynamic'] && $ocsConfig["states_id_default"] > 0) {
                 $input["states_id"] = $ocsConfig["states_id_default"];
             }
             $comp->update($input, $cfg_ocs['history_hardware']);
             // Auto restore if deleted
             if ($comp->fields['is_deleted']) {
                 $comp->restore(array('id' => $computers_id));
             }
             // Reset only if not in ocs id change case
             if (!$ocs_id_change) {
                 $changes[0] = '0';
                 $changes[1] = "";
                 $changes[2] = $ocsid;
                 PluginOcsinventoryngOcslink::history($computers_id, $changes, PluginOcsinventoryngOcslink::HISTORY_OCS_LINK);
                 if ($ocsConfig["import_general_os"]) {
                     self::resetDropdown($computers_id, "operatingsystems_id", "glpi_operatingsystems");
                 }
                 if ($ocsConfig["import_device_processor"]) {
                     self::resetDevices($computers_id, 'DeviceProcessor', $cfg_ocs);
                 }
                 if ($ocsConfig["import_device_iface"]) {
                     self::resetDevices($computers_id, 'DeviceNetworkCard', $cfg_ocs);
                 }
                 if ($ocsConfig["import_device_memory"]) {
                     self::resetDevices($computers_id, 'DeviceMemory', $cfg_ocs);
                 }
                 if ($ocsConfig["import_device_hdd"]) {
                     self::resetDevices($computers_id, 'DeviceHardDrive', $cfg_ocs);
                 }
                 if ($ocsConfig["import_device_sound"]) {
                     self::resetDevices($computers_id, 'DeviceSoundCard', $cfg_ocs);
                 }
                 if ($ocsConfig["import_device_gfxcard"]) {
                     self::resetDevices($computers_id, 'DeviceGraphicCard', $cfg_ocs);
                 }
                 if ($ocsConfig["import_device_drive"]) {
                     self::resetDevices($computers_id, 'DeviceDrive', $cfg_ocs);
                 }
                 if ($ocsConfig["import_device_modem"] || $ocsConfig["import_device_port"] || $ocsConfig["import_device_slot"]) {
                     self::resetDevices($computers_id, 'DevicePci', $cfg_ocs);
                 }
                 if ($ocsConfig["import_device_bios"]) {
                     self::resetDevices($computers_id, 'PluginOcsinventoryngDeviceBiosdata', $cfg_ocs);
                 }
                 if ($ocsConfig["import_device_motherboard"]) {
                     self::resetDevices($computers_id, 'DeviceMotherboard', $cfg_ocs);
                 }
                 if ($ocsConfig["import_device_controller"]) {
                     self::resetDevices($computers_id, 'DeviceControl', $cfg_ocs);
                 }
                 if ($ocsConfig["import_software"]) {
                     self::resetSoftwares($computers_id, $cfg_ocs);
                 }
                 if ($ocsConfig["import_disk"]) {
                     self::resetDisks($computers_id, $cfg_ocs);
                 }
                 if ($ocsConfig["import_periph"]) {
                     self::resetPeripherals($computers_id, $cfg_ocs);
                 }
                 if ($ocsConfig["import_monitor"] == 1) {
                     // Only reset monitor as global in unit management
                     self::resetMonitors($computers_id, $cfg_ocs);
                     // try to link monitor with existing
                 }
                 if ($ocsConfig["import_printer"]) {
                     self::resetPrinters($computers_id, $cfg_ocs);
                 }
                 if ($ocsConfig["import_registry"]) {
                     self::resetRegistry($computers_id);
                 }
                 if ($ocsConfig["import_antivirus"]) {
                     self::resetAntivirus($computers_id, $cfg_ocs);
                 }
                 if ($ocsConfig["import_officepack"]) {
                     self::resetOfficePack($computers_id);
                 }
                 $changes[0] = '0';
                 $changes[1] = "";
                 $changes[2] = $ocsid;
                 PluginOcsinventoryngOcslink::history($computers_id, $changes, PluginOcsinventoryngOcslink::HISTORY_OCS_LINK);
             }
             self::updateComputer($idlink, $plugin_ocsinventoryng_ocsservers_id, 0);
             return true;
         }
     } else {
         //TRANS: %s is the OCS id
         Session::addMessageAfterRedirect(sprintf(__('Unable to import, GLPI computer is already related to an element of OCSNG (%d)', 'ocsinventoryng'), $ocsid), false, ERROR);
     }
     return false;
 }