/** * Move direct connections from old printer to the new one * * @param $ID the old printer's id * @param $new_printers_id the new printer's id * * @return nothing **/ function moveDirectConnections($ID, $new_printers_id) { global $DB; $computeritem = new Computer_Item(); //For each direct connection of this printer foreach (getAllDatasFromTable("glpi_computers_items", "`itemtype` = 'Printer'\n AND `items_id` = '{$ID}'") as $connection) { //Direct connection exists in the target printer ? if (!countElementsInTable("glpi_computers_items", "`itemtype` = 'Printer'\n AND `items_id` = '{$new_printers_id}'\n AND `computers_id`='" . $connection["computers_id"] . "'")) { //Direct connection doesn't exists in the target printer : move it $computeritem->update(array('id' => $connection['id'], 'items_id' => $new_printers_id)); } else { //Direct connection already exists in the target printer : delete it $computeritem->delete($connection); } } }
/** * Delete direct connection for a linked item * * @param $itemtype original type of transfered item * @param $ID ID of the item * @param $link_type type of the linked items to transfer * @param $ocs_computer if computer type OCS ID of the item if available **/ function transferDirectConnection($itemtype, $ID, $link_type, $ocs_computer = false) { global $DB; // Only same Item case : no duplication of computers // Default : delete $keep = 0; $clean = 0; $ocs_field = ""; switch ($link_type) { case 'Printer': $keep = $this->options['keep_dc_printer']; $clean = $this->options['clean_dc_printer']; $ocs_field = "import_printer"; break; case 'Monitor': $keep = $this->options['keep_dc_monitor']; $clean = $this->options['clean_dc_monitor']; $ocs_field = "import_monitor"; break; case 'Peripheral': $keep = $this->options['keep_dc_peripheral']; $clean = $this->options['clean_dc_peripheral']; $ocs_field = "import_peripheral"; break; case 'Phone': $keep = $this->options['keep_dc_phone']; $clean = $this->options['clean_dc_phone']; break; } if (!class_exists($link_type)) { continue; } $link_item = new $link_type(); // Get connections $query = "SELECT *\n FROM `glpi_computers_items`\n WHERE `computers_id` = '{$ID}'\n AND `itemtype` = '" . $link_type . "'"; if ($link_item->maybeRecursive()) { $query .= " AND `items_id` NOT IN " . $this->item_recurs[$link_type]; } if ($result = $DB->query($query)) { if ($DB->numrows($result) != 0) { // Foreach get item while ($data = $DB->fetch_array($result)) { $item_ID = $data['items_id']; if ($link_item->getFromDB($item_ID)) { // If global : if ($link_item->fields['is_global'] == 1) { $need_clean_process = false; // if keep if ($keep) { $newID = -1; // Is already transfer ? if (isset($this->already_transfer[$link_type][$item_ID])) { $newID = $this->already_transfer[$link_type][$item_ID]; // Already transfer as a copy : need clean process if ($newID != $item_ID) { $need_clean_process = true; } } else { // Not yet tranfer // Can be managed like a non global one ? // = all linked computers need to be transfer (so not copy) $query = "SELECT count(*) AS CPT\n FROM `glpi_computers_items`\n WHERE `itemtype` = '" . $link_type . "'\n AND `items_id` = '{$item_ID}'\n AND `computers_id`\n NOT IN " . $this->item_search['Computer']; $result_search = $DB->query($query); // All linked computers need to be transfer -> use unique transfer system if ($DB->result($result_search, 0, 'CPT') == 0) { $need_clean_process = false; $this->transferItem($link_type, $item_ID, $item_ID); $newID = $item_ID; } else { // else Transfer by Copy $need_clean_process = true; // Is existing global item in the destination entity ? $query = "SELECT *\n FROM `" . getTableForItemType($link_type) . "`\n WHERE `is_global` = '1'\n AND `entities_id` = '" . $this->to . "'\n AND `name`\n = '" . addslashes($link_item->getField('name')) . "'"; if ($result_search = $DB->query($query)) { if ($DB->numrows($result_search) > 0) { $newID = $DB->result($result_search, 0, 'id'); $this->addToAlreadyTransfer($link_type, $item_ID, $newID); } } // Not found -> transfer copy if ($newID < 0) { // 1 - create new item unset($link_item->fields['id']); $input = $link_item->fields; $input['entities_id'] = $this->to; unset($link_item->fields); $newID = $link_item->add($input); // 2 - transfer as copy $this->transferItem($link_type, $item_ID, $newID); } // Founded -> use to link : nothing to do } } // Finish updated link if needed if ($newID > 0 && $newID != $item_ID) { $query = "UPDATE `glpi_computers_items`\n SET `items_id` = '{$newID}'\n WHERE `id` = '" . $data['id'] . "' "; $DB->query($query); } } else { // Else delete link // Call Disconnect for global device (no disconnect behavior, but history ) $conn = new Computer_Item(); $conn->delete(array('id' => $data['id'], '_no_auto_action' => true)); $need_clean_process = true; // OCS clean link if ($ocs_computer && !empty($ocs_field)) { $query = "UPDATE `glpi_ocslinks`\n SET `{$ocs_field}` = NULL\n WHERE `computers_id` = '{$ID}'"; $DB->query($query); } } // If clean and not linked dc -> delete if ($need_clean_process && $clean) { $query = "SELECT COUNT(*) AS CPT\n FROM `glpi_computers_items`\n WHERE `items_id` = '{$item_ID}'\n AND `itemtype` = '" . $link_type . "'"; if ($result_dc = $DB->query($query)) { if ($DB->result($result_dc, 0, 'CPT') == 0) { if ($clean == 1) { $link_item->delete(array('id' => $item_ID)); } if ($clean == 2) { // purge $link_item->delete(array('id' => $item_ID), 1); } } } } } else { // If unique : //if keep -> transfer list else unlink if ($keep) { $this->transferItem($link_type, $item_ID, $item_ID); } else { // Else delete link (apply disconnect behavior) $conn = new Computer_Item(); $conn->delete(array('id' => $data['id'])); //if clean -> delete if ($clean == 1) { $link_item->delete(array('id' => $item_ID)); } else { if ($clean == 2) { // purge $link_item->delete(array('id' => $item_ID), 1); } } if ($ocs_computer && !empty($ocs_field)) { $query = "UPDATE `glpi_ocslinks`\n SET `{$ocs_field}` = NULL\n WHERE `computers_id` = '{$ID}'"; $DB->query($query); } } } } else { // Unexisting item / Force disconnect $conn = new Computer_Item(); $conn->delete(array('id' => $data['id'], '_no_history' => true, '_no_auto_action' => true)); } } } } }
/** * Delete direct connection beetween an item and a computer when transfering the item * * @param $itemtype itemtype to tranfer * @param $ID ID of the item * * @since version 0.84.4 **/ function manageConnectionComputer($itemtype, $ID) { global $DB; // Get connections $query = "SELECT *\n FROM `glpi_computers_items`\n WHERE `computers_id` NOT IN " . $this->item_search['Computer'] . "\n AND `itemtype` = '" . $itemtype . "'\n AND `items_id` = {$ID}"; if ($result = $DB->query($query)) { if ($DB->numrows($result) != 0) { // Foreach get item $conn = new Computer_Item(); $comp = new Computer(); while ($data = $DB->fetch_assoc($result)) { $item_ID = $data['items_id']; if ($comp->getFromDB($item_ID)) { $conn->delete(array('id' => $data['id'])); } else { // Unexisting item / Force disconnect $conn->delete(array('id' => $data['id'], '_no_history' => true, '_no_auto_action' => true)); } } } } }
function cleanDBonPurge() { global $DB; $query = "SELECT `id`\n FROM `glpi_computers_items`\n WHERE `itemtype` = '" . $this->getType() . "'\n AND `items_id` = '" . $this->fields['id'] . "'"; if ($result = $DB->query($query)) { if ($DB->numrows($result) > 0) { $conn = new Computer_Item(); while ($data = $DB->fetch_assoc($result)) { $data['_no_auto_action'] = true; $conn->delete($data); } } } $ip = new Item_Problem(); $ip->cleanDBonItemDelete(__CLASS__, $this->fields['id']); }
GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GLPI. If not, see <http://www.gnu.org/licenses/>. -------------------------------------------------------------------------- */ /** @file * @brief * @since version 0.84 */ include '../inc/includes.php'; Session::checkCentralAccess(); $conn = new Computer_Item(); if (isset($_POST["disconnect"])) { $conn->check($_POST["id"], PURGE); $conn->delete($_POST, 1); Event::log($_POST["computers_id"], "computers", 5, "inventory", sprintf(__('%s disconnects an item'), $_SESSION["glpiname"])); Html::back(); // Connect a computer to a printer/monitor/phone/peripheral } else { if (isset($_POST["add"])) { if (isset($_POST["items_id"]) && $_POST["items_id"] > 0) { $conn->check(-1, CREATE, $_POST); if ($newID = $conn->add($_POST)) { Event::log($_POST["computers_id"], "computers", 5, "inventory", sprintf(__('%s connects an item'), $_SESSION["glpiname"])); } } Html::back(); } } Html::displayErrorAndDie('Lost');
/** * * Import peripherals from OCS * @since 1.0 * @param $cfg_ocs OCSNG mode configuration * @param $computers_id computer's id in GLPI * @param $ocsid computer's id in OCS * @param $ocsservers_id OCS server id * @param $entity the entity in which the peripheral will be created * @param $dohistory record in history link between peripheral and computer */ static function importPeripheral($cfg_ocs, $computers_id, $ocsservers_id, $ocsid, $entity, $dohistory) { global $PluginOcsinventoryngDBocs, $DB; self::checkOCSconnection($ocsservers_id); if ($cfg_ocs["import_periph"]) { $already_processed = array(); $p = new Peripheral(); $conn = new Computer_Item(); $query = "SELECT DISTINCT `CAPTION`, `MANUFACTURER`, `INTERFACE`, `TYPE`\n FROM `inputs`\n WHERE `HARDWARE_ID` = '{$ocsid}'\n AND `CAPTION` <> ''"; $result = $PluginOcsinventoryngDBocs->query($query); if ($PluginOcsinventoryngDBocs->numrows($result) > 0) { while ($line = $PluginOcsinventoryngDBocs->fetch_array($result)) { $line = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line)); $periph = array(); $periph["name"] = self::encodeOcsDataInUtf8($cfg_ocs["ocs_db_utf8"], $line["CAPTION"]); //Look for a monitor with the same name (and serial if possible) already connected //to this computer $query = "SELECT `p`.`id`, `gci`.`is_deleted`\n FROM `glpi_printers` as `p`, `glpi_computers_items` as `gci`\n WHERE `p`.`id` = `gci`.`items_id`\n AND `gci`.`is_dynamic`='1'\n AND `computers_id`='{$computers_id}'\n AND `itemtype`='Peripheral'\n AND `p`.`name`='" . $periph["name"] . "'"; $results = $DB->query($query); $id = false; $lock = false; if ($DB->numrows($results) > 0) { $id = $DB->result($results, 0, 'id'); $lock = $DB->result($results, 0, 'is_deleted'); } if (!$id) { // Clean peripheral object $p->reset(); if ($line["MANUFACTURER"] != "NULL") { $periph["brand"] = self::encodeOcsDataInUtf8($cfg_ocs["ocs_db_utf8"], $line["MANUFACTURER"]); } if ($line["INTERFACE"] != "NULL") { $periph["comment"] = self::encodeOcsDataInUtf8($cfg_ocs["ocs_db_utf8"], $line["INTERFACE"]); } $periph["peripheraltypes_id"] = Dropdown::importExternal('PeripheralType', $line["TYPE"]); $id_periph = 0; if ($cfg_ocs["import_periph"] == 1) { //Config says : manage peripherals as global //check if peripherals already exists in GLPI $periph["is_global"] = 1; $query = "SELECT `id`\n FROM `glpi_peripherals`\n WHERE `name` = '" . $periph["name"] . "'\n AND `is_global` = '1'\n AND `entities_id` = '{$entity}'"; $result_search = $DB->query($query); if ($DB->numrows($result_search) > 0) { //Periph is already in GLPI //Do not import anything just get periph ID for link $id_periph = $DB->result($result_search, 0, "id"); } else { $input = $periph; if ($cfg_ocs["states_id_default"] > 0) { $input["states_id"] = $cfg_ocs["states_id_default"]; } $input["entities_id"] = $entity; $id_periph = $p->add($input); } } else { if ($cfg_ocs["import_periph"] == 2) { //Config says : manage peripherals as single units //Import all peripherals as non global. $input = $periph; $input["is_global"] = 0; if ($cfg_ocs["states_id_default"] > 0) { $input["states_id"] = $cfg_ocs["states_id_default"]; } $input["entities_id"] = $entity; $id_periph = $p->add($input); } } if ($id_periph) { $already_processed[] = $id_periph; $conn = new Computer_Item(); if ($connID = $conn->add(array('computers_id' => $computers_id, 'itemtype' => 'Peripheral', 'items_id' => $id_periph, '_no_history' => !$dohistory, 'is_dynamic' => 1))) { //Update column "is_deleted" set value to 0 and set status to default $input = array(); $input["id"] = $id_periph; $input["is_deleted"] = 0; $input["entities_id"] = $entity; if ($cfg_ocs["states_id_default"] > 0) { $input["states_id"] = $cfg_ocs["states_id_default"]; } $p->update($input); } } } else { $already_processed[] = $id; } } } //Look for all monitors, not locked, not linked to the computer anymore $query = "SELECT `id`\n FROM `glpi_computers_items`\n WHERE `itemtype`='Peripheral'\n AND `computers_id`='{$computers_id}'\n AND `is_dynamic`='1'\n AND `is_deleted`='0'"; if (!empty($already_processed)) { $query .= "AND `items_id` NOT IN (" . implode(',', $already_processed) . ")"; } foreach ($DB->request($query) as $data) { //Delete all connexions $conn->delete(array('id' => $data['id'], '_ocsservers_id' => $ocsservers_id), true); } } }
function cleanDBonPurge() { global $DB; $query = "DELETE\n FROM `glpi_computers_softwareversions`\n WHERE `computers_id` = '" . $this->fields['id'] . "'"; $result = $DB->query($query); $query = "SELECT `id`\n FROM `glpi_computers_items`\n WHERE `computers_id` = '" . $this->fields['id'] . "'"; if ($result = $DB->query($query)) { if ($DB->numrows($result) > 0) { $conn = new Computer_Item(); while ($data = $DB->fetch_array($result)) { $data['_no_auto_action'] = true; $conn->delete($data); } } } $query = "DELETE\n FROM `glpi_registrykeys`\n WHERE `computers_id` = '" . $this->fields['id'] . "'"; $result = $DB->query($query); $compdev = new Computer_Device(); $compdev->cleanDBonItemDelete('Computer', $this->fields['id']); $query = "DELETE\n FROM `glpi_ocslinks`\n WHERE `computers_id` = '" . $this->fields['id'] . "'"; $result = $DB->query($query); $disk = new ComputerDisk(); $disk->cleanDBonItemDelete('Computer', $this->fields['id']); $vm = new ComputerVirtualMachine(); $vm->cleanDBonItemDelete('Computer', $this->fields['id']); }
/** * Update computer data * * @global type $DB * * @param php array $a_computerinventory all data from the agent * @param integer $computers_id id of the computer * @param boolean $no_history set true if not want history * * @return nothing */ function updateComputer($a_computerinventory, $computers_id, $no_history, $setdynamic = 0) { global $DB, $CFG_GLPI; $computer = new Computer(); $pfInventoryComputerComputer = new PluginFusioninventoryInventoryComputerComputer(); $item_DeviceProcessor = new Item_DeviceProcessor(); $deviceProcessor = new DeviceProcessor(); $item_DeviceMemory = new Item_DeviceMemory(); $deviceMemory = new DeviceMemory(); $computerVirtualmachine = new ComputerVirtualMachine(); $computerDisk = new ComputerDisk(); $item_DeviceControl = new Item_DeviceControl(); $item_DeviceHardDrive = new Item_DeviceHardDrive(); $item_DeviceDrive = new Item_DeviceDrive(); $item_DeviceGraphicCard = new Item_DeviceGraphicCard(); $item_DeviceNetworkCard = new Item_DeviceNetworkCard(); $item_DeviceSoundCard = new Item_DeviceSoundCard(); $networkPort = new NetworkPort(); $networkName = new NetworkName(); $iPAddress = new IPAddress(); $ipnetwork = new IPNetwork(); $pfInventoryComputerAntivirus = new PluginFusioninventoryInventoryComputerAntivirus(); $pfConfig = new PluginFusioninventoryConfig(); $pfComputerLicenseInfo = new PluginFusioninventoryComputerLicenseInfo(); $computer_Item = new Computer_Item(); $monitor = new Monitor(); $printer = new Printer(); $peripheral = new Peripheral(); // $pfInventoryComputerStorage = new PluginFusioninventoryInventoryComputerStorage(); // $pfInventoryComputerStorage_Storage = // new PluginFusioninventoryInventoryComputerStorage_Storage(); $computer->getFromDB($computers_id); $a_lockable = PluginFusioninventoryLock::getLockFields('glpi_computers', $computers_id); // * Computer $db_computer = array(); $db_computer = $computer->fields; $computerName = $a_computerinventory['Computer']['name']; $a_ret = PluginFusioninventoryToolbox::checkLock($a_computerinventory['Computer'], $db_computer, $a_lockable); $a_computerinventory['Computer'] = $a_ret[0]; $input = $a_computerinventory['Computer']; $input['id'] = $computers_id; $history = TRUE; if ($no_history) { $history = FALSE; } $input['_no_history'] = $no_history; PluginFusioninventoryInventoryComputerInventory::addDefaultStateIfNeeded($input); $computer->update($input, !$no_history); $this->computer = $computer; // * Computer fusion (ext) $db_computer = array(); if ($no_history === FALSE) { $query = "SELECT * FROM `glpi_plugin_fusioninventory_inventorycomputercomputers`\n WHERE `computers_id` = '{$computers_id}'\n LIMIT 1"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { foreach ($data as $key => $value) { $data[$key] = Toolbox::addslashes_deep($value); } $db_computer = $data; } } if (count($db_computer) == '0') { // Add $a_computerinventory['fusioninventorycomputer']['computers_id'] = $computers_id; $pfInventoryComputerComputer->add($a_computerinventory['fusioninventorycomputer'], array(), FALSE); } else { // Update if (!empty($db_computer['serialized_inventory'])) { $setdynamic = 0; } $idtmp = $db_computer['id']; unset($db_computer['id']); unset($db_computer['computers_id']); $a_ret = PluginFusioninventoryToolbox::checkLock($a_computerinventory['fusioninventorycomputer'], $db_computer); $a_computerinventory['fusioninventorycomputer'] = $a_ret[0]; $db_computer = $a_ret[1]; $input = $a_computerinventory['fusioninventorycomputer']; $input['id'] = $idtmp; $input['_no_history'] = $no_history; $pfInventoryComputerComputer->update($input, !$no_history); } // Put all link item dynamic (in case of update computer not yet inventoried with fusion) if ($setdynamic == 1) { $this->setDynamicLinkItems($computers_id); } // * Processors if ($pfConfig->getValue("component_processor") != 0) { $db_processors = array(); if ($no_history === FALSE) { $query = "SELECT `glpi_items_deviceprocessors`.`id`, `designation`,\n `frequency`, `frequence`, `frequency_default`,\n `serial`, `manufacturers_id`, `glpi_items_deviceprocessors`.`nbcores`,\n `glpi_items_deviceprocessors`.`nbthreads`\n FROM `glpi_items_deviceprocessors`\n LEFT JOIN `glpi_deviceprocessors`\n ON `deviceprocessors_id`=`glpi_deviceprocessors`.`id`\n WHERE `items_id` = '{$computers_id}'\n AND `itemtype`='Computer'\n AND `is_dynamic`='1'"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { $idtmp = $data['id']; unset($data['id']); $db_processors[$idtmp] = Toolbox::addslashes_deep($data); } } if (count($db_processors) == 0) { foreach ($a_computerinventory['processor'] as $a_processor) { $this->addProcessor($a_processor, $computers_id, $no_history); } } else { // Check all fields from source: 'designation', 'serial', 'manufacturers_id', // 'frequence' foreach ($a_computerinventory['processor'] as $key => $arrays) { $frequence = $arrays['frequence']; unset($arrays['frequence']); unset($arrays['frequency']); unset($arrays['frequency_default']); foreach ($db_processors as $keydb => $arraydb) { $frequencedb = $arraydb['frequence']; unset($arraydb['frequence']); unset($arraydb['frequency']); unset($arraydb['frequency_default']); if ($arrays == $arraydb) { $a_criteria = $deviceProcessor->getImportCriteria(); $criteriafrequence = $a_criteria['frequence']; $compare = explode(':', $criteriafrequence); if ($frequence > $frequencedb - $compare[1] && $frequence < $frequencedb + $compare[1]) { unset($a_computerinventory['processor'][$key]); unset($db_processors[$keydb]); break; } } } } if (count($a_computerinventory['processor']) == 0 and count($db_processors) == 0) { // Nothing to do } else { if (count($db_processors) != 0) { // Delete processor in DB foreach ($db_processors as $idtmp => $data) { $item_DeviceProcessor->delete(array('id' => $idtmp), 1); } } if (count($a_computerinventory['processor']) != 0) { foreach ($a_computerinventory['processor'] as $a_processor) { $this->addProcessor($a_processor, $computers_id, $no_history); } } } } } // * Memories if ($pfConfig->getValue("component_memory") != 0) { $db_memories = array(); if ($no_history === FALSE) { $query = "SELECT `glpi_items_devicememories`.`id`, `designation`, `size`,\n `frequence`, `serial`, `devicememorytypes_id`,\n `glpi_items_devicememories`.`busID`\n FROM `glpi_items_devicememories`\n LEFT JOIN `glpi_devicememories` ON `devicememories_id`=`glpi_devicememories`.`id`\n WHERE `items_id` = '{$computers_id}'\n AND `itemtype`='Computer'\n AND `is_dynamic`='1'"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { $idtmp = $data['id']; unset($data['id']); $data1 = Toolbox::addslashes_deep($data); $db_memories[$idtmp] = $data1; } } if (count($db_memories) == 0) { foreach ($a_computerinventory['memory'] as $a_memory) { $this->addMemory($a_memory, $computers_id, $no_history); } } else { // Check all fields from source: 'designation', 'serial', 'size', // 'devicememorytypes_id', 'frequence' foreach ($a_computerinventory['memory'] as $key => $arrays) { $frequence = $arrays['frequence']; unset($arrays['frequence']); foreach ($db_memories as $keydb => $arraydb) { $frequencedb = $arraydb['frequence']; unset($arraydb['frequence']); if ($arrays == $arraydb) { $a_criteria = $deviceMemory->getImportCriteria(); $criteriafrequence = $a_criteria['frequence']; $compare = explode(':', $criteriafrequence); if ($frequence > $frequencedb - $compare[1] && $frequence < $frequencedb + $compare[1]) { unset($a_computerinventory['memory'][$key]); unset($db_memories[$keydb]); break; } } } } if (count($a_computerinventory['memory']) == 0 and count($db_memories) == 0) { // Nothing to do } else { if (count($db_memories) != 0) { // Delete memory in DB foreach ($db_memories as $idtmp => $data) { $item_DeviceMemory->delete(array('id' => $idtmp), 1); } } if (count($a_computerinventory['memory']) != 0) { foreach ($a_computerinventory['memory'] as $a_memory) { $this->addMemory($a_memory, $computers_id, $no_history); } } } } } // * Hard drive if ($pfConfig->getValue("component_harddrive") != 0) { $db_harddrives = array(); if ($no_history === FALSE) { $query = "SELECT `glpi_items_deviceharddrives`.`id`, `serial`,\n `capacity`\n FROM `glpi_items_deviceharddrives`\n WHERE `items_id` = '{$computers_id}'\n AND `itemtype`='Computer'\n AND `is_dynamic`='1'"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { $idtmp = $data['id']; unset($data['id']); $data1 = Toolbox::addslashes_deep($data); $data2 = array_map('strtolower', $data1); $db_harddrives[$idtmp] = $data2; } } if (count($db_harddrives) == 0) { foreach ($a_computerinventory['harddrive'] as $a_harddrive) { $this->addHardDisk($a_harddrive, $computers_id, $no_history); } } else { foreach ($a_computerinventory['harddrive'] as $key => $arrays) { $arrayslower = array_map('strtolower', $arrays); foreach ($db_harddrives as $keydb => $arraydb) { if ($arrayslower['serial'] == $arraydb['serial']) { if ($arraydb['capacity'] == 0 and $arrayslower['capacity'] > 0) { $input = array('id' => $keydb, 'capacity' => $arrayslower['capacity']); $item_DeviceHardDrive->update($input); } unset($a_computerinventory['harddrive'][$key]); unset($db_harddrives[$keydb]); break; } } } if (count($a_computerinventory['harddrive']) == 0 and count($db_harddrives) == 0) { // Nothing to do } else { if (count($db_harddrives) != 0) { // Delete hard drive in DB foreach ($db_harddrives as $idtmp => $data) { $item_DeviceHardDrive->delete(array('id' => $idtmp), 1); } } if (count($a_computerinventory['harddrive']) != 0) { foreach ($a_computerinventory['harddrive'] as $a_harddrive) { $this->addHardDisk($a_harddrive, $computers_id, $no_history); } } } } } // * drive if ($pfConfig->getValue("component_drive") != 0) { $db_drives = array(); if ($no_history === FALSE) { $query = "SELECT `glpi_items_devicedrives`.`id`, `serial`,\n `glpi_devicedrives`.`designation`\n FROM `glpi_items_devicedrives`\n LEFT JOIN `glpi_devicedrives` ON `devicedrives_id`=`glpi_devicedrives`.`id`\n WHERE `items_id` = '{$computers_id}'\n AND `itemtype`='Computer'\n AND `is_dynamic`='1'"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { $idtmp = $data['id']; unset($data['id']); $data1 = Toolbox::addslashes_deep($data); $data2 = array_map('strtolower', $data1); $db_drives[$idtmp] = $data2; } } if (count($db_drives) == 0) { foreach ($a_computerinventory['drive'] as $a_drive) { $this->addDrive($a_drive, $computers_id, $no_history); } } else { foreach ($a_computerinventory['drive'] as $key => $arrays) { $arrayslower = array_map('strtolower', $arrays); if ($arrayslower['serial'] == '') { foreach ($db_drives as $keydb => $arraydb) { if ($arrayslower['designation'] == $arraydb['designation']) { unset($a_computerinventory['drive'][$key]); unset($db_drives[$keydb]); break; } } } else { foreach ($db_drives as $keydb => $arraydb) { if ($arrayslower['serial'] == $arraydb['serial']) { unset($a_computerinventory['drive'][$key]); unset($db_drives[$keydb]); break; } } } } if (count($a_computerinventory['drive']) == 0 and count($db_drives) == 0) { // Nothing to do } else { if (count($db_drives) != 0) { // Delete drive in DB foreach ($db_drives as $idtmp => $data) { $item_DeviceDrive->delete(array('id' => $idtmp), 1); } } if (count($a_computerinventory['drive']) != 0) { foreach ($a_computerinventory['drive'] as $a_drive) { $this->addDrive($a_drive, $computers_id, $no_history); } } } } } // * Graphiccard if ($pfConfig->getValue("component_graphiccard") != 0) { $db_graphiccards = array(); if ($no_history === FALSE) { $query = "SELECT `glpi_items_devicegraphiccards`.`id`, `designation`, `memory`\n FROM `glpi_items_devicegraphiccards`\n LEFT JOIN `glpi_devicegraphiccards`\n ON `devicegraphiccards_id`=`glpi_devicegraphiccards`.`id`\n WHERE `items_id` = '{$computers_id}'\n AND `itemtype`='Computer'\n AND `is_dynamic`='1'"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { $idtmp = $data['id']; unset($data['id']); if (preg_match("/[^a-zA-Z0-9 \\-_\\(\\)]+/", $data['designation'])) { $data['designation'] = Toolbox::addslashes_deep($data['designation']); } $data['designation'] = trim(strtolower($data['designation'])); $db_graphiccards[$idtmp] = $data; } } if (count($db_graphiccards) == 0) { foreach ($a_computerinventory['graphiccard'] as $a_graphiccard) { $this->addGraphicCard($a_graphiccard, $computers_id, $no_history); } } else { // Check all fields from source: 'designation', 'memory' foreach ($a_computerinventory['graphiccard'] as $key => $arrays) { $arrays['designation'] = strtolower($arrays['designation']); foreach ($db_graphiccards as $keydb => $arraydb) { if ($arrays == $arraydb) { unset($a_computerinventory['graphiccard'][$key]); unset($db_graphiccards[$keydb]); break; } } } if (count($a_computerinventory['graphiccard']) == 0 and count($db_graphiccards) == 0) { // Nothing to do } else { if (count($db_graphiccards) != 0) { // Delete graphiccard in DB foreach ($db_graphiccards as $idtmp => $data) { $item_DeviceGraphicCard->delete(array('id' => $idtmp), 1); } } if (count($a_computerinventory['graphiccard']) != 0) { foreach ($a_computerinventory['graphiccard'] as $a_graphiccard) { $this->addGraphicCard($a_graphiccard, $computers_id, $no_history); } } } } } // * networkcard if ($pfConfig->getValue("component_networkcard") != 0) { $db_networkcards = array(); if ($no_history === FALSE) { $query = "SELECT `glpi_items_devicenetworkcards`.`id`, `designation`, `mac`,\n `manufacturers_id`\n FROM `glpi_items_devicenetworkcards`\n LEFT JOIN `glpi_devicenetworkcards`\n ON `devicenetworkcards_id`=`glpi_devicenetworkcards`.`id`\n WHERE `items_id` = '{$computers_id}'\n AND `itemtype`='Computer'\n AND `is_dynamic`='1'"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { $idtmp = $data['id']; unset($data['id']); if (preg_match("/[^a-zA-Z0-9 \\-_\\(\\)]+/", $data['designation'])) { $data['designation'] = Toolbox::addslashes_deep($data['designation']); } $data['designation'] = trim(strtolower($data['designation'])); $db_networkcards[$idtmp] = $data; } } if (count($db_networkcards) == 0) { foreach ($a_computerinventory['networkcard'] as $a_networkcard) { $this->addNetworkCard($a_networkcard, $computers_id, $no_history); } } else { // Check all fields from source: 'designation', 'mac' foreach ($a_computerinventory['networkcard'] as $key => $arrays) { $arrays['designation'] = strtolower($arrays['designation']); foreach ($db_networkcards as $keydb => $arraydb) { if ($arrays == $arraydb) { unset($a_computerinventory['networkcard'][$key]); unset($db_networkcards[$keydb]); break; } } } if (count($a_computerinventory['networkcard']) == 0 and count($db_networkcards) == 0) { // Nothing to do } else { if (count($db_networkcards) != 0) { // Delete networkcard in DB foreach ($db_networkcards as $idtmp => $data) { $item_DeviceNetworkCard->delete(array('id' => $idtmp), 1); } } if (count($a_computerinventory['networkcard']) != 0) { foreach ($a_computerinventory['networkcard'] as $a_networkcard) { $this->addNetworkCard($a_networkcard, $computers_id, $no_history); } } } } } // * Sound if ($pfConfig->getValue("component_soundcard") != 0) { $db_soundcards = array(); if ($no_history === FALSE) { $query = "SELECT `glpi_items_devicesoundcards`.`id`, `designation`, `comment`,\n `manufacturers_id` FROM `glpi_items_devicesoundcards`\n LEFT JOIN `glpi_devicesoundcards`\n ON `devicesoundcards_id`=`glpi_devicesoundcards`.`id`\n WHERE `items_id` = '{$computers_id}'\n AND `itemtype`='Computer'\n AND `is_dynamic`='1'"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { $idtmp = $data['id']; unset($data['id']); $data1 = Toolbox::addslashes_deep($data); $db_soundcards[$idtmp] = $data1; } } if (count($db_soundcards) == 0) { foreach ($a_computerinventory['soundcard'] as $a_soundcard) { $this->addSoundCard($a_soundcard, $computers_id, $no_history); } } else { // Check all fields from source: 'designation', 'memory', 'manufacturers_id' foreach ($a_computerinventory['soundcard'] as $key => $arrays) { // $arrayslower = array_map('strtolower', $arrays); $arrayslower = $arrays; foreach ($db_soundcards as $keydb => $arraydb) { if ($arrayslower == $arraydb) { unset($a_computerinventory['soundcard'][$key]); unset($db_soundcards[$keydb]); break; } } } if (count($a_computerinventory['soundcard']) == 0 and count($db_soundcards) == 0) { // Nothing to do } else { if (count($db_soundcards) != 0) { // Delete soundcard in DB foreach ($db_soundcards as $idtmp => $data) { $item_DeviceSoundCard->delete(array('id' => $idtmp), 1); } } if (count($a_computerinventory['soundcard']) != 0) { foreach ($a_computerinventory['soundcard'] as $a_soundcard) { $this->addSoundCard($a_soundcard, $computers_id, $no_history); } } } } } // * Controllers if ($pfConfig->getValue("component_control") != 0) { $db_controls = array(); if ($no_history === FALSE) { $query = "SELECT `glpi_items_devicecontrols`.`id`, `interfacetypes_id`,\n `manufacturers_id`, `designation` FROM `glpi_items_devicecontrols`\n LEFT JOIN `glpi_devicecontrols` ON `devicecontrols_id`=`glpi_devicecontrols`.`id`\n WHERE `items_id` = '{$computers_id}'\n AND `itemtype`='Computer'\n AND `is_dynamic`='1'"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { $idtmp = $data['id']; unset($data['id']); $data1 = Toolbox::addslashes_deep($data); $data2 = array_map('strtolower', $data1); $db_controls[$idtmp] = $data2; } } if (count($db_controls) == 0) { foreach ($a_computerinventory['controller'] as $a_control) { $this->addControl($a_control, $computers_id, $no_history); } } else { // Check all fields from source: foreach ($a_computerinventory['controller'] as $key => $arrays) { $arrayslower = array_map('strtolower', $arrays); foreach ($db_controls as $keydb => $arraydb) { if ($arrayslower == $arraydb) { unset($a_computerinventory['controller'][$key]); unset($db_controls[$keydb]); break; } } } if (count($a_computerinventory['controller']) == 0 and count($db_controls) == 0) { // Nothing to do } else { if (count($db_controls) != 0) { // Delete controller in DB foreach ($db_controls as $idtmp => $data) { $item_DeviceControl->delete(array('id' => $idtmp), 1); } } if (count($a_computerinventory['controller']) != 0) { foreach ($a_computerinventory['controller'] as $a_control) { $this->addControl($a_control, $computers_id, $no_history); } } } } } // * Software if ($pfConfig->getValue("import_software") != 0) { $entities_id = 0; if (count($a_computerinventory['software']) > 0) { $a_softfirst = current($a_computerinventory['software']); if (isset($a_softfirst['entities_id'])) { $entities_id = $a_softfirst['entities_id']; } } $db_software = array(); if ($no_history === FALSE) { $query = "SELECT `glpi_computers_softwareversions`.`id` as sid,\n `glpi_softwares`.`name`,\n `glpi_softwareversions`.`name` AS version,\n `glpi_softwares`.`manufacturers_id`,\n `glpi_softwareversions`.`entities_id`,\n `glpi_computers_softwareversions`.`is_template_computer`,\n `glpi_computers_softwareversions`.`is_deleted_computer`\n FROM `glpi_computers_softwareversions`\n LEFT JOIN `glpi_softwareversions`\n ON (`glpi_computers_softwareversions`.`softwareversions_id`\n = `glpi_softwareversions`.`id`)\n LEFT JOIN `glpi_softwares`\n ON (`glpi_softwareversions`.`softwares_id` = `glpi_softwares`.`id`)\n WHERE `glpi_computers_softwareversions`.`computers_id` = '{$computers_id}'\n AND `glpi_computers_softwareversions`.`is_dynamic`='1'"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { $idtmp = $data['sid']; unset($data['sid']); if (preg_match("/[^a-zA-Z0-9 \\-_\\(\\)]+/", $data['name'])) { $data['name'] = Toolbox::addslashes_deep($data['name']); } if (preg_match("/[^a-zA-Z0-9 \\-_\\(\\)]+/", $data['version'])) { $data['version'] = Toolbox::addslashes_deep($data['version']); } $comp_key = strtolower($data['name']) . "\$\$\$\$" . strtolower($data['version']) . "\$\$\$\$" . $data['manufacturers_id'] . "\$\$\$\$" . $data['entities_id']; $db_software[$comp_key] = $idtmp; } } $lastSoftwareid = 0; $lastSoftwareVid = 0; /* * Schema * * LOCK software * 1/ Add all software * RELEASE software * * LOCK softwareversion * 2/ Add all software versions * RELEASE softwareversion * * 3/ add version to computer * */ if (count($db_software) == 0) { // there are no software associated with computer $nb_unicity = count(FieldUnicity::getUnicityFieldsConfig("Software", $entities_id)); $options = array(); if ($nb_unicity == 0) { $options['disable_unicity_check'] = TRUE; } $a_softwareInventory = array(); $a_softwareVersionInventory = array(); $lastSoftwareid = $this->loadSoftwares($entities_id, $a_computerinventory['software'], $lastSoftwareid); $queryDBLOCK = "INSERT INTO `glpi_plugin_fusioninventory_dblocksoftwares`\n SET `value`='1'"; $CFG_GLPI["use_log_in_files"] = FALSE; while (!$DB->query($queryDBLOCK)) { usleep(100000); } $CFG_GLPI["use_log_in_files"] = TRUE; $this->loadSoftwares($entities_id, $a_computerinventory['software'], $lastSoftwareid); foreach ($a_computerinventory['software'] as $a_software) { if (!isset($this->softList[$a_software['name'] . "\$\$\$\$" . $a_software['manufacturers_id']])) { $this->addSoftware($a_software, $options); } } $queryDBLOCK = "DELETE FROM `glpi_plugin_fusioninventory_dblocksoftwares`\n WHERE `value`='1'"; $DB->query($queryDBLOCK); $lastSoftwareVid = $this->loadSoftwareVersions($entities_id, $a_computerinventory['software'], $lastSoftwareVid); $queryDBLOCK = "INSERT INTO `glpi_plugin_fusioninventory_dblocksoftwareversions`\n SET `value`='1'"; $CFG_GLPI["use_log_in_files"] = FALSE; while (!$DB->query($queryDBLOCK)) { usleep(100000); } $CFG_GLPI["use_log_in_files"] = TRUE; $this->loadSoftwareVersions($entities_id, $a_computerinventory['software'], $lastSoftwareVid); foreach ($a_computerinventory['software'] as $a_software) { $softwares_id = $this->softList[$a_software['name'] . "\$\$\$\$" . $a_software['manufacturers_id']]; if (!isset($this->softVersionList[strtolower($a_software['version']) . "\$\$\$\$" . $softwares_id])) { $this->addSoftwareVersion($a_software, $softwares_id); } } $queryDBLOCK = "DELETE FROM `glpi_plugin_fusioninventory_dblocksoftwareversions`\n WHERE `value`='1'"; $DB->query($queryDBLOCK); $a_toinsert = array(); foreach ($a_computerinventory['software'] as $a_software) { $softwares_id = $this->softList[$a_software['name'] . "\$\$\$\$" . $a_software['manufacturers_id']]; $softwareversions_id = $this->softVersionList[strtolower($a_software['version']) . "\$\$\$\$" . $softwares_id]; $a_tmp = array('computers_id' => $computers_id, 'softwareversions_id' => $softwareversions_id, 'is_dynamic' => 1, 'entities_id' => $a_software['entities_id']); $a_toinsert[] = "('" . implode("','", $a_tmp) . "')"; } if (count($a_toinsert) > 0) { $this->addSoftwareVersionsComputer($a_toinsert); if (!$no_history) { foreach ($a_computerinventory['software'] as $a_software) { $softwares_id = $this->softList[$a_software['name'] . "\$\$\$\$" . $a_software['manufacturers_id']]; $softwareversions_id = $this->softVersionList[strtolower($a_software['version']) . "\$\$\$\$" . $softwares_id]; $changes[0] = '0'; $changes[1] = ""; $changes[2] = $a_software['name'] . " - " . sprintf(__('%1$s (%2$s)'), $a_software['version'], $softwareversions_id); $this->addPrepareLog($computers_id, 'Computer', 'SoftwareVersion', $changes, Log::HISTORY_INSTALL_SOFTWARE); $changes[0] = '0'; $changes[1] = ""; $changes[2] = sprintf(__('%1$s (%2$s)'), $computerName, $computers_id); $this->addPrepareLog($softwareversions_id, 'SoftwareVersion', 'Computer', $changes, Log::HISTORY_INSTALL_SOFTWARE); } } } } else { foreach ($a_computerinventory['software'] as $key => $arrayslower) { if (isset($db_software[$key])) { unset($a_computerinventory['software'][$key]); unset($db_software[$key]); } } if (count($a_computerinventory['software']) == 0 && count($db_software) == 0) { // Nothing to do } else { if (count($db_software) > 0) { // Delete softwares in DB $a_delete = array(); foreach ($db_software as $idtmp) { $this->computer_SoftwareVersion->getFromDB($idtmp); $this->softwareVersion->getFromDB($this->computer_SoftwareVersion->fields['softwareversions_id']); // $this->computer_SoftwareVersion->delete(array('id'=>$idtmp, '_no_history'=> TRUE), FALSE); if (!$no_history) { $changes[0] = '0'; $changes[1] = addslashes($this->computer_SoftwareVersion->getHistoryNameForItem1($this->softwareVersion, 'delete')); $changes[2] = ""; $this->addPrepareLog($computers_id, 'Computer', 'SoftwareVersion', $changes, Log::HISTORY_UNINSTALL_SOFTWARE); $changes[0] = '0'; $changes[1] = sprintf(__('%1$s (%2$s)'), $computerName, $computers_id); $changes[2] = ""; $this->addPrepareLog($idtmp, 'SoftwareVersion', 'Computer', $changes, Log::HISTORY_UNINSTALL_SOFTWARE); } } $query = "DELETE FROM `glpi_computers_softwareversions` " . "WHERE `id` IN ('" . implode("', '", $db_software) . "')"; $DB->query($query); } if (count($a_computerinventory['software']) > 0) { $nb_unicity = count(FieldUnicity::getUnicityFieldsConfig("Software", $entities_id)); $options = array(); if ($nb_unicity == 0) { $options['disable_unicity_check'] = TRUE; } $lastSoftwareid = $this->loadSoftwares($entities_id, $a_computerinventory['software'], $lastSoftwareid); $queryDBLOCK = "INSERT INTO `glpi_plugin_fusioninventory_dblocksoftwares`\n SET `value`='1'"; $CFG_GLPI["use_log_in_files"] = FALSE; while (!$DB->query($queryDBLOCK)) { usleep(100000); } $CFG_GLPI["use_log_in_files"] = TRUE; $this->loadSoftwares($entities_id, $a_computerinventory['software'], $lastSoftwareid); foreach ($a_computerinventory['software'] as $a_software) { if (!isset($this->softList[$a_software['name'] . "\$\$\$\$" . $a_software['manufacturers_id']])) { $this->addSoftware($a_software, $options); } } $queryDBLOCK = "DELETE FROM `glpi_plugin_fusioninventory_dblocksoftwares`\n WHERE `value`='1'"; $DB->query($queryDBLOCK); $lastSoftwareVid = $this->loadSoftwareVersions($entities_id, $a_computerinventory['software'], $lastSoftwareVid); $queryDBLOCK = "INSERT INTO `glpi_plugin_fusioninventory_dblocksoftwareversions`\n SET `value`='1'"; $CFG_GLPI["use_log_in_files"] = FALSE; while (!$DB->query($queryDBLOCK)) { usleep(100000); } $CFG_GLPI["use_log_in_files"] = TRUE; $this->loadSoftwareVersions($entities_id, $a_computerinventory['software'], $lastSoftwareVid); foreach ($a_computerinventory['software'] as $a_software) { $softwares_id = $this->softList[$a_software['name'] . "\$\$\$\$" . $a_software['manufacturers_id']]; if (!isset($this->softVersionList[strtolower($a_software['version']) . "\$\$\$\$" . $softwares_id])) { $this->addSoftwareVersion($a_software, $softwares_id); } } $queryDBLOCK = "DELETE FROM `glpi_plugin_fusioninventory_dblocksoftwareversions`\n WHERE `value`='1'"; $DB->query($queryDBLOCK); $a_toinsert = array(); foreach ($a_computerinventory['software'] as $a_software) { $softwares_id = $this->softList[$a_software['name'] . "\$\$\$\$" . $a_software['manufacturers_id']]; $softwareversions_id = $this->softVersionList[strtolower($a_software['version']) . "\$\$\$\$" . $softwares_id]; $a_tmp = array('computers_id' => $computers_id, 'softwareversions_id' => $softwareversions_id, 'is_dynamic' => 1, 'entities_id' => $a_software['entities_id']); $a_toinsert[] = "('" . implode("','", $a_tmp) . "')"; } $this->addSoftwareVersionsComputer($a_toinsert); if (!$no_history) { foreach ($a_computerinventory['software'] as $a_software) { $softwares_id = $this->softList[$a_software['name'] . "\$\$\$\$" . $a_software['manufacturers_id']]; $softwareversions_id = $this->softVersionList[strtolower($a_software['version']) . "\$\$\$\$" . $softwares_id]; $changes[0] = '0'; $changes[1] = ""; $changes[2] = $a_software['name'] . " - " . sprintf(__('%1$s (%2$s)'), $a_software['version'], $softwareversions_id); $this->addPrepareLog($computers_id, 'Computer', 'SoftwareVersion', $changes, Log::HISTORY_INSTALL_SOFTWARE); $changes[0] = '0'; $changes[1] = ""; $changes[2] = sprintf(__('%1$s (%2$s)'), $computerName, $computers_id); $this->addPrepareLog($softwareversions_id, 'SoftwareVersion', 'Computer', $changes, Log::HISTORY_INSTALL_SOFTWARE); } } } } } } // * Virtualmachines if ($pfConfig->getValue("import_vm") == 1) { $db_computervirtualmachine = array(); if ($no_history === FALSE) { $query = "SELECT `id`, `name`, `uuid`, `virtualmachinesystems_id`\n FROM `glpi_computervirtualmachines`\n WHERE `computers_id` = '{$computers_id}'\n AND `is_dynamic`='1'"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { $idtmp = $data['id']; unset($data['id']); $data1 = Toolbox::addslashes_deep($data); $db_computervirtualmachine[$idtmp] = $data1; } } $simplecomputervirtualmachine = array(); if (isset($a_computerinventory['virtualmachine'])) { foreach ($a_computerinventory['virtualmachine'] as $key => $a_computervirtualmachine) { $a_field = array('name', 'uuid', 'virtualmachinesystems_id'); foreach ($a_field as $field) { if (isset($a_computervirtualmachine[$field])) { $simplecomputervirtualmachine[$key][$field] = $a_computervirtualmachine[$field]; } } } } foreach ($simplecomputervirtualmachine as $key => $arrays) { foreach ($db_computervirtualmachine as $keydb => $arraydb) { if ($arrays == $arraydb) { $input = array(); $input['id'] = $keydb; if (isset($a_computerinventory['virtualmachine'][$key]['vcpu'])) { $input['vcpu'] = $a_computerinventory['virtualmachine'][$key]['vcpu']; } if (isset($a_computerinventory['virtualmachine'][$key]['ram'])) { $input['ram'] = $a_computerinventory['virtualmachine'][$key]['ram']; } if (isset($a_computerinventory['virtualmachine'][$key]['virtualmachinetypes_id'])) { $input['virtualmachinetypes_id'] = $a_computerinventory['virtualmachine'][$key]['virtualmachinetypes_id']; } if (isset($a_computerinventory['virtualmachine'][$key]['virtualmachinestates_id'])) { $input['virtualmachinestates_id'] = $a_computerinventory['virtualmachine'][$key]['virtualmachinestates_id']; } $computerVirtualmachine->update($input, !$no_history); unset($simplecomputervirtualmachine[$key]); unset($a_computerinventory['virtualmachine'][$key]); unset($db_computervirtualmachine[$keydb]); break; } } } if (count($a_computerinventory['virtualmachine']) == 0 && count($db_computervirtualmachine) == 0) { // Nothing to do } else { if (count($db_computervirtualmachine) != 0) { // Delete virtualmachine in DB foreach ($db_computervirtualmachine as $idtmp => $data) { $computerVirtualmachine->delete(array('id' => $idtmp), 1); } } if (count($a_computerinventory['virtualmachine']) != 0) { foreach ($a_computerinventory['virtualmachine'] as $a_virtualmachine) { $a_virtualmachine['computers_id'] = $computers_id; $computerVirtualmachine->add($a_virtualmachine, array(), !$no_history); } } } } if ($pfConfig->getValue("create_vm") == 1) { // Create VM based on information of section VIRTUALMACHINE $pfAgent = new PluginFusioninventoryAgent(); // Use ComputerVirtualMachine::getUUIDRestrictRequest to get existant // vm in computer list $computervm = new Computer(); if (isset($a_computerinventory['virtualmachine_creation']) && is_array($a_computerinventory['virtualmachine_creation'])) { foreach ($a_computerinventory['virtualmachine_creation'] as $a_vm) { // Define location of physical computer (host) $a_vm['locations_id'] = $computer->fields['locations_id']; if (isset($a_vm['uuid']) && $a_vm['uuid'] != '') { $query = "SELECT * FROM `glpi_computers`\n WHERE `uuid` " . ComputerVirtualMachine::getUUIDRestrictRequest($a_vm['uuid']) . "\n LIMIT 1"; // TODO: Add entity search $result = $DB->query($query); $computers_vm_id = 0; while ($data = $DB->fetch_assoc($result)) { $computers_vm_id = $data['id']; } if ($computers_vm_id == 0) { // Add computer $a_vm['entities_id'] = $computer->fields['entities_id']; $computers_vm_id = $computervm->add($a_vm, array(), !$no_history); // Manage networks $this->manageNetworkPort($a_vm['networkport'], $computers_vm_id, FALSE); } else { if ($pfAgent->getAgentWithComputerid($computers_vm_id) === FALSE) { // Update computer $a_vm['id'] = $computers_vm_id; $computervm->update($a_vm, !$no_history); // Manage networks $this->manageNetworkPort($a_vm['networkport'], $computers_vm_id, FALSE); } } } } } } // * ComputerDisk if ($pfConfig->getValue("import_volume") != 0) { $db_computerdisk = array(); if ($no_history === FALSE) { $query = "SELECT `id`, `name`, `device`, `mountpoint`\n FROM `glpi_computerdisks`\n WHERE `computers_id` = '" . $computers_id . "'\n AND `is_dynamic`='1'"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { $idtmp = $data['id']; unset($data['id']); $data1 = Toolbox::addslashes_deep($data); $data2 = array_map('strtolower', $data1); $db_computerdisk[$idtmp] = $data2; } } $simplecomputerdisk = array(); foreach ($a_computerinventory['computerdisk'] as $key => $a_computerdisk) { $a_field = array('name', 'device', 'mountpoint'); foreach ($a_field as $field) { if (isset($a_computerdisk[$field])) { $simplecomputerdisk[$key][$field] = $a_computerdisk[$field]; } } } foreach ($simplecomputerdisk as $key => $arrays) { $arrayslower = array_map('strtolower', $arrays); foreach ($db_computerdisk as $keydb => $arraydb) { if ($arrayslower == $arraydb) { $input = array(); $input['id'] = $keydb; if (isset($a_computerinventory['computerdisk'][$key]['filesystems_id'])) { $input['filesystems_id'] = $a_computerinventory['computerdisk'][$key]['filesystems_id']; } $input['totalsize'] = $a_computerinventory['computerdisk'][$key]['totalsize']; $input['freesize'] = $a_computerinventory['computerdisk'][$key]['freesize']; $input['_no_history'] = TRUE; $computerDisk->update($input, FALSE); unset($simplecomputerdisk[$key]); unset($a_computerinventory['computerdisk'][$key]); unset($db_computerdisk[$keydb]); break; } } } if (count($a_computerinventory['computerdisk']) == 0 and count($db_computerdisk) == 0) { // Nothing to do } else { if (count($db_computerdisk) != 0) { // Delete computerdisk in DB foreach ($db_computerdisk as $idtmp => $data) { $computerDisk->delete(array('id' => $idtmp), 1); } } if (count($a_computerinventory['computerdisk']) != 0) { foreach ($a_computerinventory['computerdisk'] as $a_computerdisk) { $a_computerdisk['computers_id'] = $computers_id; $a_computerdisk['is_dynamic'] = 1; $a_computerdisk['_no_history'] = $no_history; $computerDisk->add($a_computerdisk, array(), !$no_history); } } } } // * Networkports if ($pfConfig->getValue("component_networkcard") != 0) { // Get port from unmanaged device if exist $this->manageNetworkPort($a_computerinventory['networkport'], $computers_id, $no_history); } // * Antivirus $db_antivirus = array(); if ($no_history === FALSE) { $query = "SELECT `id`, `name`, `version`\n FROM `glpi_plugin_fusioninventory_inventorycomputerantiviruses`\n WHERE `computers_id` = '{$computers_id}'"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { $idtmp = $data['id']; unset($data['id']); $data1 = Toolbox::addslashes_deep($data); $data2 = array_map('strtolower', $data1); $db_antivirus[$idtmp] = $data2; } } $simpleantivirus = array(); foreach ($a_computerinventory['antivirus'] as $key => $a_antivirus) { $a_field = array('name', 'version'); foreach ($a_field as $field) { if (isset($a_antivirus[$field])) { $simpleantivirus[$key][$field] = $a_antivirus[$field]; } } } foreach ($simpleantivirus as $key => $arrays) { $arrayslower = array_map('strtolower', $arrays); foreach ($db_antivirus as $keydb => $arraydb) { if ($arrayslower == $arraydb) { $input = array(); $input = $a_computerinventory['antivirus'][$key]; $input['id'] = $keydb; $pfInventoryComputerAntivirus->update($input, !$no_history); unset($simpleantivirus[$key]); unset($a_computerinventory['antivirus'][$key]); unset($db_antivirus[$keydb]); break; } } } if (count($a_computerinventory['antivirus']) == 0 and count($db_antivirus) == 0) { // Nothing to do } else { if (count($db_antivirus) != 0) { foreach ($db_antivirus as $idtmp => $data) { $pfInventoryComputerAntivirus->delete(array('id' => $idtmp), 1); } } if (count($a_computerinventory['antivirus']) != 0) { foreach ($a_computerinventory['antivirus'] as $a_antivirus) { $a_antivirus['computers_id'] = $computers_id; $pfInventoryComputerAntivirus->add($a_antivirus, array(), !$no_history); } } } // * Licenseinfo $db_licenseinfo = array(); if ($no_history === FALSE) { $query = "SELECT `id`, `name`, `fullname`, `serial`\n FROM `glpi_plugin_fusioninventory_computerlicenseinfos`\n WHERE `computers_id` = '{$computers_id}'"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { $idtmp = $data['id']; unset($data['id']); $data1 = Toolbox::addslashes_deep($data); $data2 = array_map('strtolower', $data1); $db_licenseinfo[$idtmp] = $data2; } } foreach ($a_computerinventory['licenseinfo'] as $key => $arrays) { $arrayslower = array_map('strtolower', $arrays); foreach ($db_licenseinfo as $keydb => $arraydb) { if ($arrayslower == $arraydb) { unset($a_computerinventory['licenseinfo'][$key]); unset($db_licenseinfo[$keydb]); break; } } } if (count($a_computerinventory['licenseinfo']) == 0 and count($db_licenseinfo) == 0) { // Nothing to do } else { if (count($db_licenseinfo) != 0) { foreach ($db_licenseinfo as $idtmp => $data) { $pfComputerLicenseInfo->delete(array('id' => $idtmp), 1); } } if (count($a_computerinventory['licenseinfo']) != 0) { foreach ($a_computerinventory['licenseinfo'] as $a_licenseinfo) { $a_licenseinfo['computers_id'] = $computers_id; $pfComputerLicenseInfo->add($a_licenseinfo, array(), !$no_history); } } } // * Batteries /* Standby, see ticket http://forge.fusioninventory.org/issues/1907 $db_batteries = array(); if ($no_history === FALSE) { $query = "SELECT `id`, `name`, `serial` FROM `glpi_plugin_fusioninventory_inventorycomputerbatteries` WHERE `computers_id` = '$computers_id'"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { $idtmp = $data['id']; unset($data['id']); $data = Toolbox::addslashes_deep($data); $data = array_map('strtolower', $data); $db_batteries[$idtmp] = $data; } } $simplebatteries = array(); foreach ($a_computerinventory['batteries'] as $key=>$a_batteries) { $a_field = array('name', 'serial'); foreach ($a_field as $field) { if (isset($a_batteries[$field])) { $simplebatteries[$key][$field] = $a_batteries[$field]; } } } foreach ($simplebatteries as $key => $arrays) { $arrayslower = array_map('strtolower', $arrays); foreach ($db_batteries as $keydb => $arraydb) { if ($arrayslower == $arraydb) { $input = array(); $input = $a_computerinventory['batteries'][$key]; $input['id'] = $keydb; $pfInventoryComputerBatteries->update($input); unset($simplebatteries[$key]); unset($a_computerinventory['batteries'][$key]); unset($db_batteries[$keydb]); break; } } } if (count($a_computerinventory['batteries']) == 0 AND count($db_batteries) == 0) { // Nothing to do } else { if (count($db_batteries) != 0) { foreach ($db_batteries as $idtmp => $data) { $pfInventoryComputerBatteries->delete(array('id'=>$idtmp), 1); } } if (count($a_computerinventory['batteries']) != 0) { foreach($a_computerinventory['batteries'] as $a_batteries) { $a_batteries['computers_id'] = $computers_id; $pfInventoryComputerBatteries->add($a_batteries, array(), FALSE); } } } */ $entities_id = $_SESSION["plugin_fusioninventory_entity"]; // * Monitors $rule = new PluginFusioninventoryInventoryRuleImportCollection(); $a_monitors = array(); foreach ($a_computerinventory['monitor'] as $key => $arrays) { $input = array(); $input['itemtype'] = "Monitor"; $input['name'] = $arrays['name']; $input['serial'] = $arrays['serial']; $data = $rule->processAllRules($input, array(), array('class' => $this, 'return' => TRUE)); if (isset($data['found_equipment'])) { if ($data['found_equipment'][0] == 0) { // add monitor $arrays['entities_id'] = $entities_id; $a_monitors[] = $monitor->add($arrays); } else { $a_monitors[] = $data['found_equipment'][0]; } } } $db_monitors = array(); $query = "SELECT `glpi_monitors`.`id`,\n `glpi_computers_items`.`id` as link_id\n FROM `glpi_computers_items`\n LEFT JOIN `glpi_monitors` ON `items_id`=`glpi_monitors`.`id`\n WHERE `itemtype`='Monitor'\n AND `computers_id`='" . $computers_id . "'\n AND `entities_id`='" . $entities_id . "'\n AND `glpi_computers_items`.`is_dynamic`='1'\n AND `glpi_monitors`.`is_global`='0'"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { $idtmp = $data['link_id']; unset($data['link_id']); $db_monitors[$idtmp] = $data['id']; } if (count($db_monitors) == 0) { foreach ($a_monitors as $monitors_id) { $input = array(); $input['computers_id'] = $computers_id; $input['itemtype'] = 'Monitor'; $input['items_id'] = $monitors_id; $input['is_dynamic'] = 1; $input['_no_history'] = $no_history; $computer_Item->add($input, array(), !$no_history); } } else { // Check all fields from source: foreach ($a_monitors as $key => $monitors_id) { foreach ($db_monitors as $keydb => $monits_id) { if ($monitors_id == $monits_id) { unset($a_monitors[$key]); unset($db_monitors[$keydb]); break; } } } if (count($a_monitors) == 0 and count($db_monitors) == 0) { // Nothing to do } else { if (count($db_monitors) != 0) { // Delete monitors links in DB foreach ($db_monitors as $idtmp => $monits_id) { $computer_Item->delete(array('id' => $idtmp), 1); } } if (count($a_monitors) != 0) { foreach ($a_monitors as $key => $monitors_id) { $input = array(); $input['computers_id'] = $computers_id; $input['itemtype'] = 'Monitor'; $input['items_id'] = $monitors_id; $input['is_dynamic'] = 1; $input['_no_history'] = $no_history; $computer_Item->add($input, array(), !$no_history); } } } } // * Printers $rule = new PluginFusioninventoryInventoryRuleImportCollection(); $a_printers = array(); foreach ($a_computerinventory['printer'] as $key => $arrays) { $input = array(); $input['itemtype'] = "Printer"; $input['name'] = $arrays['name']; $input['serial'] = $arrays['serial']; $data = $rule->processAllRules($input, array(), array('class' => $this, 'return' => TRUE)); if (isset($data['found_equipment'])) { if ($data['found_equipment'][0] == 0) { // add printer $arrays['entities_id'] = $entities_id; $a_printers[] = $printer->add($arrays); } else { $a_printers[] = $data['found_equipment'][0]; } } } $db_printers = array(); $query = "SELECT `glpi_printers`.`id`, `glpi_computers_items`.`id` as link_id\n FROM `glpi_computers_items`\n LEFT JOIN `glpi_printers` ON `items_id`=`glpi_printers`.`id`\n WHERE `itemtype`='Printer'\n AND `computers_id`='" . $computers_id . "'\n AND `entities_id`='" . $entities_id . "'\n AND `glpi_computers_items`.`is_dynamic`='1'\n AND `glpi_printers`.`is_global`='0'"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { $idtmp = $data['link_id']; unset($data['link_id']); $db_printers[$idtmp] = $data['id']; } if (count($db_printers) == 0) { foreach ($a_printers as $printers_id) { $input['entities_id'] = $entities_id; $input['computers_id'] = $computers_id; $input['itemtype'] = 'Printer'; $input['items_id'] = $printers_id; $input['is_dynamic'] = 1; $input['_no_history'] = $no_history; $computer_Item->add($input, array(), !$no_history); } } else { // Check all fields from source: foreach ($a_printers as $key => $printers_id) { foreach ($db_printers as $keydb => $prints_id) { if ($printers_id == $prints_id) { unset($a_printers[$key]); unset($db_printers[$keydb]); break; } } } if (count($a_printers) == 0 and count($db_printers) == 0) { // Nothing to do } else { if (count($db_printers) != 0) { // Delete printers links in DB foreach ($db_printers as $idtmp => $data) { $computer_Item->delete(array('id' => $idtmp), 1); } } if (count($a_printers) != 0) { foreach ($a_printers as $printers_id) { $input['entities_id'] = $entities_id; $input['computers_id'] = $computers_id; $input['itemtype'] = 'Printer'; $input['items_id'] = $printers_id; $input['is_dynamic'] = 1; $input['_no_history'] = $no_history; $computer_Item->add($input, array(), !$no_history); } } } } // * Peripheral $rule = new PluginFusioninventoryInventoryRuleImportCollection(); $a_peripherals = array(); foreach ($a_computerinventory['peripheral'] as $key => $arrays) { $input = array(); $input['itemtype'] = "Peripheral"; $input['name'] = $arrays['name']; $input['serial'] = $arrays['serial']; $data = $rule->processAllRules($input, array(), array('class' => $this, 'return' => TRUE)); if (isset($data['found_equipment'])) { if ($data['found_equipment'][0] == 0) { // add peripheral $arrays['entities_id'] = $entities_id; $a_peripherals[] = $peripheral->add($arrays); } else { $a_peripherals[] = $data['found_equipment'][0]; } } } $db_peripherals = array(); $query = "SELECT `glpi_peripherals`.`id`, `glpi_computers_items`.`id` as link_id\n FROM `glpi_computers_items`\n LEFT JOIN `glpi_peripherals` ON `items_id`=`glpi_peripherals`.`id`\n WHERE `itemtype`='Peripheral'\n AND `computers_id`='" . $computers_id . "'\n AND `entities_id`='" . $entities_id . "'\n AND `glpi_computers_items`.`is_dynamic`='1'\n AND `glpi_peripherals`.`is_global`='0'"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { $idtmp = $data['link_id']; unset($data['link_id']); $db_peripherals[$idtmp] = $data['id']; } if (count($db_peripherals) == 0) { foreach ($a_peripherals as $peripherals_id) { $input = array(); $input['computers_id'] = $computers_id; $input['itemtype'] = 'Peripharal'; $input['items_id'] = $peripherals_id; $input['is_dynamic'] = 1; $input['_no_history'] = $no_history; $computer_Item->add($input, array(), !$no_history); } } else { // Check all fields from source: foreach ($a_peripherals as $key => $peripherals_id) { foreach ($db_peripherals as $keydb => $periphs_id) { if ($peripherals_id == $periphs_id) { unset($a_peripherals[$key]); unset($db_peripherals[$keydb]); break; } } } if (count($a_peripherals) == 0 and count($db_peripherals) == 0) { // Nothing to do } else { if (count($db_peripherals) != 0) { // Delete peripherals links in DB foreach ($db_peripherals as $idtmp => $data) { $computer_Item->delete(array('id' => $idtmp), 1); } } if (count($a_peripherals) != 0) { foreach ($a_peripherals as $peripherals_id) { $input = array(); $input['computers_id'] = $computers_id; $input['itemtype'] = 'Peripharal'; $input['items_id'] = $peripherals_id; $input['is_dynamic'] = 1; $input['_no_history'] = $no_history; $computer_Item->add($input, array(), !$no_history); } } } } // * storage // Manage by uuid to correspond with GLPI data // $db_storage = array(); // if ($no_history === FALSE) { // $query = "SELECT `id`, `uuid` FROM ". // "`glpi_plugin_fusioninventory_inventorycomputerstorages` // WHERE `computers_id` = '$computers_id'"; // $result = $DB->query($query); // while ($data = $DB->fetch_assoc($result)) { // $idtmp = $data['id']; // unset($data['id']); // $data = Toolbox::addslashes_deep($data); // $data = array_map('strtolower', $data); // $db_storage[$idtmp] = $data; // } // } // if (count($db_storage) == 0) { // $a_links = array(); // $a_uuid = array(); // foreach ($a_computerinventory['storage'] as $a_storage) { // $a_storage['computers_id'] = $computers_id; // $insert_id = $pfInventoryComputerStorage->add($a_storage); // if (isset($a_storage['uuid'])) { // $a_uuid[$a_storage['uuid']] = $insert_id; // if (isset($a_storage['uuid_link'])) { // if (is_array($a_storage['uuid_link'])) { // $a_links[$insert_id] = $a_storage['uuid_link']; // } else { // $a_links[$insert_id][] = $a_storage['uuid_link']; // } // } // } // } // foreach ($a_links as $id=>$data) { // foreach ($data as $num=>$uuid) { // $a_links[$id][$num] = $a_uuid[$uuid]; // } // } // foreach ($a_links as $id=>$data) { // foreach ($data as $id2) { // $input = array(); // $input['plugin_fusioninventory_inventorycomputerstorages_id_1'] = $id; // $input['plugin_fusioninventory_inventorycomputerstorages_id_2'] = $id2; // $pfInventoryComputerStorage_Storage->add($input); // } // } // } else { // // Check only field *** from source: // // } $this->addLog(); }
function cleanDBonPurge() { global $DB; $query = "SELECT `id`\n FROM `glpi_computers_items`\n WHERE `itemtype` = '" . $this->getType() . "'\n AND `items_id` = '" . $this->fields['id'] . "'"; if ($result = $DB->query($query)) { if ($DB->numrows($result) > 0) { $conn = new Computer_Item(); while ($data = $DB->fetch_array($result)) { $data['_no_auto_action'] = true; $conn->delete($data); } } } $query = "UPDATE `glpi_cartridges`\n SET `printers_id` = NULL\n WHERE `printers_id` = '" . $this->fields['id'] . "'"; $result = $DB->query($query); }
/** * Delete all old periphs for a computer. * * @param $glpi_computers_id integer : glpi computer id. * * @return nothing. **/ static function resetPeripherals($glpi_computers_id) { global $DB; $query = "SELECT*\n FROM `glpi_computers_items`\n WHERE `computers_id` = '{$glpi_computers_id}'\n AND `itemtype` = 'Peripheral'"; $result = $DB->query($query); $per = new Peripheral(); if ($DB->numrows($result) > 0) { $conn = new Computer_Item(); while ($data = $DB->fetch_assoc($result)) { $conn->delete(array('id' => $data['id'])); $query2 = "SELECT COUNT(*)\n FROM `glpi_computers_items`\n WHERE `items_id` = '" . $data['items_id'] . "'\n AND `itemtype` = 'Peripheral'"; $result2 = $DB->query($query2); if ($DB->result($result2, 0, 0) == 1) { $per->delete(array('id' => $data['items_id']), 1); } } } }
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GLPI. If not, see <http://www.gnu.org/licenses/>. -------------------------------------------------------------------------- */ /** @file * @brief * @since version 0.84 */ include '../inc/includes.php'; Session::checkCentralAccess(); $conn = new Computer_Item(); if (isset($_POST["disconnect"])) { $conn->check($_POST["id"], 'd'); $conn->delete($_POST); Event::log($_POST["computers_id"], "computers", 5, "inventory", sprintf(__('%s disconnects an item'), $_SESSION["glpiname"])); Html::back(); // Connect a computer to a printer/monitor/phone/peripheral } else { if (isset($_POST["add"])) { if (isset($_POST["items_id"]) && $_POST["items_id"] > 0) { $conn->check(-1, 'w', $_POST); $conn->add($_POST); Event::log($_POST["computers_id"], "computers", 5, "inventory", sprintf(__('%s connects an item'), $_SESSION["glpiname"])); } Html::back(); } } Html::displayErrorAndDie('Lost');
Event::log($_REQUEST["id"], "computers", 4, "inventory", $_SESSION["glpiname"] . " " . $LANG['log'][24] . " " . $computer->getField('name')); } $computer->redirectToList(); //update a computer } else { if (isset($_POST["update"])) { $computer->check($_POST['id'], 'w'); $computer->update($_POST); Event::log($_POST["id"], "computers", 4, "inventory", $_SESSION["glpiname"] . " " . $LANG['log'][21]); glpi_header($_SERVER['HTTP_REFERER']); // Disconnect a computer from a printer/monitor/phone/peripheral } else { if (isset($_GET["disconnect"])) { $conn = new Computer_Item(); $conn->check($_GET["id"], 'w'); $conn->delete($_GET); $computer->check($_GET['computers_id'], 'w'); Event::log($_GET["computers_id"], "computers", 5, "inventory", $_SESSION["glpiname"] . " " . $LANG['log'][26]); glpi_header($_SERVER['HTTP_REFERER']); // Connect a computer to a printer/monitor/phone/peripheral } else { if (isset($_POST["connect"]) && isset($_POST["items_id"]) && $_POST["items_id"] > 0) { $conn = new Computer_Item(); $conn->check(-1, 'w', $_POST); $conn->add($_POST); Event::log($_POST["computers_id"], "computers", 5, "inventory", $_SESSION["glpiname"] . " " . $LANG['log'][27]); glpi_header($_SERVER['HTTP_REFERER']); } else { if (isset($_POST["unlock_monitor"])) { $computer->check($_POST['id'], 'w'); if (isset($_POST["lockmonitor"]) && count($_POST["lockmonitor"])) {
/** * Import the devices for a computer * * @param $itemtype integer : item type * @param $entity integer : entity of the computer * @param $computers_id integer : glpi computer id. * @param $ocsid integer : ocs computer id (ID). * @param $ocsservers_id integer : ocs server id * @param $cfg_ocs array : ocs config * @param $import_periph array : already imported periph * @param $dohistory boolean : log changes ? * * @return Nothing (void). **/ static function updatePeripherals($itemtype, $entity, $computers_id, $ocsid, $ocsservers_id, $cfg_ocs, $import_periph, $dohistory) { global $DB, $DBocs; self::checkOCSconnection($ocsservers_id); $do_clean = false; $connID = 0; //Tag for data since 0.70 for the import_monitor array. $count_monitor = count($import_periph); switch ($itemtype) { case 'Monitor': if ($cfg_ocs["import_monitor"]) { //Update data in import_monitor array for 0.70 if (!in_array(self::IMPORT_TAG_070, $import_periph)) { foreach ($import_periph as $key => $val) { $monitor_tag = $val; //delete old value self::deleteInOcsArray($computers_id, $key, "import_monitor"); //search serial when it exists $monitor_serial = ""; $query_monitor_id = "SELECT `items_id`\n FROM `glpi_computers_items`\n WHERE `id` = '{$key}'"; $result_monitor_id = $DB->query($query_monitor_id); if ($DB->numrows($result_monitor_id) == 1) { //get monitor Id $id_monitor = $DB->result($result_monitor_id, 0, "items_id"); $query_monitor_serial = "SELECT `serial`\n FROM `glpi_monitors`\n WHERE `id` = '{$id_monitor}'"; $result_monitor_serial = $DB->query($query_monitor_serial); //get serial if ($DB->numrows($result_monitor_serial) == 1) { $monitor_serial = $DB->result($result_monitor_serial, 0, "serial"); } } //concat name + serial $monitor_tag .= $monitor_serial; //add new value (serial + name when its possible) self::addToOcsArray($computers_id, array($key => $monitor_tag), "import_monitor"); //Update the array with the new value of the monitor $import_periph[$key] = $monitor_tag; } //add the tag for the array version's self::addToOcsArray($computers_id, array(0 => self::IMPORT_TAG_070), "import_monitor"); } $do_clean = true; $m = new Monitor(); $query = "SELECT DISTINCT `CAPTION`, `MANUFACTURER`, `DESCRIPTION`, `SERIAL`, `TYPE`\n FROM `monitors`\n WHERE `HARDWARE_ID` = '{$ocsid}'"; $result = $DBocs->query($query); $lines = array(); $checkserial = true; // First pass - check if all serial present if ($DBocs->numrows($result) > 0) { while ($line = $DBocs->fetch_array($result)) { if (empty($line["SERIAL"])) { $checkserial = false; } $lines[] = clean_cross_side_scripting_deep(addslashes_deep($line)); } } if (count($lines) > 0 && ($cfg_ocs["import_monitor"] <= 2 || $checkserial)) { foreach ($lines as $line) { $mon = array(); $mon["name"] = $line["CAPTION"]; if (empty($line["CAPTION"]) && !empty($line["MANUFACTURER"])) { $mon["name"] = $line["MANUFACTURER"]; } if (empty($line["CAPTION"]) && !empty($line["TYPE"])) { if (!empty($line["MANUFACTURER"])) { $mon["name"] .= " "; } $mon["name"] .= $line["TYPE"]; } $mon["serial"] = $line["SERIAL"]; $checkMonitor = $mon["name"]; if (!empty($mon["serial"])) { $checkMonitor .= $mon["serial"]; } if (!empty($mon["name"])) { $id = array_search(stripslashes($checkMonitor), $import_periph); } if ($id === false) { // Clean monitor object $m->reset(); $mon["manufacturers_id"] = Dropdown::importExternal('Manufacturer', $line["MANUFACTURER"]); if ($cfg_ocs["import_monitor_comment"]) { $mon["comment"] = $line["DESCRIPTION"]; } $id_monitor = 0; if ($cfg_ocs["import_monitor"] == 1) { //Config says : manage monitors as global //check if monitors already exists in GLPI $mon["is_global"] = 1; $query = "SELECT `id`\n FROM `glpi_monitors`\n WHERE `name` = '" . $mon["name"] . "'\n AND `is_global` = '1'\n AND `entities_id` = '{$entity}'"; $result_search = $DB->query($query); if ($DB->numrows($result_search) > 0) { //Periph is already in GLPI //Do not import anything just get periph ID for link $id_monitor = $DB->result($result_search, 0, "id"); } else { $input = $mon; if ($cfg_ocs["states_id_default"] > 0) { $input["states_id"] = $cfg_ocs["states_id_default"]; } $input["entities_id"] = $entity; $id_monitor = $m->add($input); } } else { if ($cfg_ocs["import_monitor"] >= 2) { //Config says : manage monitors as single units //Import all monitors as non global. $mon["is_global"] = 0; // Try to find a monitor with the same serial. if (!empty($mon["serial"])) { $query = "SELECT `id`\n FROM `glpi_monitors`\n WHERE `serial` LIKE '%" . $mon["serial"] . "%'\n AND `is_global` = '0'\n AND `entities_id` = '{$entity}'"; $result_search = $DB->query($query); if ($DB->numrows($result_search) == 1) { //Monitor founded $id_monitor = $DB->result($result_search, 0, "id"); } } //Search by serial failed, search by name if ($cfg_ocs["import_monitor"] == 2 && !$id_monitor) { //Try to find a monitor with no serial, the same name and not already connected. if (!empty($mon["name"])) { $query = "SELECT `glpi_monitors`.`id`\n FROM `glpi_monitors`\n LEFT JOIN `glpi_computers_items`\n ON (`glpi_computers_items`.`itemtype`='Monitor'\n AND `glpi_computers_items`.`items_id`\n =`glpi_monitors`.`id`)\n WHERE `serial` = ''\n AND `name` = '" . $mon["name"] . "'\n AND `is_global` = '0'\n AND `entities_id` = '{$entity}'\n AND `glpi_computers_items`.`computers_id` IS NULL"; $result_search = $DB->query($query); if ($DB->numrows($result_search) == 1) { $id_monitor = $DB->result($result_search, 0, "id"); } } } if (!$id_monitor) { $input = $mon; if ($cfg_ocs["states_id_default"] > 0) { $input["states_id"] = $cfg_ocs["states_id_default"]; } $input["entities_id"] = $entity; $id_monitor = $m->add($input); } } } // ($cfg_ocs["import_monitor"] >= 2) if ($id_monitor) { //Import unique : Disconnect monitor on other computer done in Connect function $conn = new Computer_Item(); $connID = $conn->add(array('computers_id' => $computers_id, 'itemtype' => 'Monitor', 'items_id' => $id_monitor, '_no_history' => !$dohistory)); if (!in_array(self::IMPORT_TAG_070, $import_periph)) { self::addToOcsArray($computers_id, array(0 => self::IMPORT_TAG_070), "import_monitor"); } if ($connID > 0) { // sanity check - Add can fail self::addToOcsArray($computers_id, array($connID => $checkMonitor), "import_monitor"); } $count_monitor++; //Update column "is_deleted" set value to 0 and set status to default $input = array(); $old = new Monitor(); if ($old->getFromDB($id_monitor)) { if ($old->fields["is_deleted"]) { $input["is_deleted"] = 0; } if ($cfg_ocs["states_id_default"] > 0 && $old->fields["states_id"] != $cfg_ocs["states_id_default"]) { $input["states_id"] = $cfg_ocs["states_id_default"]; } if (empty($old->fields["name"]) && !empty($mon["name"])) { $input["name"] = $mon["name"]; } if (empty($old->fields["serial"]) && !empty($mon["serial"])) { $input["serial"] = $mon["serial"]; } if (count($input)) { $input["id"] = $id_monitor; $input['entities_id'] = $entity; $m->update($input); } } } } else { // found in array unset($import_periph[$id]); } } // end foreach } if (in_array(self::IMPORT_TAG_070, $import_periph)) { //unset the version Tag unset($import_periph[0]); } } break; case 'Printer': if ($cfg_ocs["import_printer"]) { $do_clean = true; $query = "SELECT *\n FROM `printers`\n WHERE `HARDWARE_ID` = '{$ocsid}'"; $result = $DBocs->query($query); $p = new Printer(); if ($DBocs->numrows($result) > 0) { while ($line = $DBocs->fetch_array($result)) { $line = clean_cross_side_scripting_deep(addslashes_deep($line)); $print = array(); // TO TEST : PARSE NAME to have real name. if (!seems_utf8($line["NAME"])) { $print["name"] = encodeInUtf8($line["NAME"]); } else { $print["name"] = $line["NAME"]; } if (empty($print["name"])) { $print["name"] = $line["DRIVER"]; } $management_process = $cfg_ocs["import_printer"]; //Params for the dictionnary $params['name'] = $print['name']; $params['manufacturer'] = ""; $params['DRIVER'] = $line['DRIVER']; $params['PORT'] = $line['PORT']; if (!empty($print["name"])) { $rulecollection = new RuleDictionnaryPrinterCollection(); $res_rule = addslashes_deep($rulecollection->processAllRules($params, array(), array())); if (!isset($res_rule["_ignore_ocs_import"]) || !$res_rule["_ignore_ocs_import"]) { foreach ($res_rule as $key => $value) { if ($value != '' && $value[0] != '_') { $print[$key] = $value; } } // if (isset($res_rule['is_global'])) { // logDebug($res_rule); // } if (isset($res_rule['is_global'])) { if (!$res_rule['is_global']) { $management_process = 2; } else { $management_process = 1; } } if (!in_array(stripslashes($print["name"]), $import_periph)) { // Clean printer object $p->reset(); $print["comment"] = $line["PORT"] . "\r\n" . $line["DRIVER"]; self::analizePrinterPorts($print, $line["PORT"]); $id_printer = 0; if ($management_process == 1) { //Config says : manage printers as global //check if printers already exists in GLPI $print["is_global"] = MANAGEMENT_GLOBAL; $query = "SELECT `id`\n FROM `glpi_printers`\n WHERE `name` = '" . $print["name"] . "'\n AND `is_global` = '1'\n AND `entities_id` = '{$entity}'"; $result_search = $DB->query($query); if ($DB->numrows($result_search) > 0) { //Periph is already in GLPI //Do not import anything just get periph ID for link $id_printer = $DB->result($result_search, 0, "id"); } else { $input = $print; if ($cfg_ocs["states_id_default"] > 0) { $input["states_id"] = $cfg_ocs["states_id_default"]; } $input["entities_id"] = $entity; // if (isset($res_rule['is_global'])) { // logDebug("global",$input); // } $id_printer = $p->add($input); } } else { if ($management_process == 2) { //Config says : manage printers as single units //Import all printers as non global. $input = $print; $input["is_global"] = MANAGEMENT_UNITARY; if ($cfg_ocs["states_id_default"] > 0) { $input["states_id"] = $cfg_ocs["states_id_default"]; } $input["entities_id"] = $entity; // if (isset($res_rule['is_global'])) { // logDebug("unitary",$input); // } $id_printer = $p->add($input); } } if ($id_printer) { $conn = new Computer_Item(); $connID = $conn->add(array('computers_id' => $computers_id, 'itemtype' => 'Printer', 'items_id' => $id_printer, '_no_history' => !$dohistory)); if ($connID > 0) { // sanity check - Add can fail self::addToOcsArray($computers_id, array($connID => $print["name"]), "import_printer"); } //Update column "is_deleted" set value to 0 and set status to default $input = array(); $input["id"] = $id_printer; $input["is_deleted"] = 0; $input["entities_id"] = $entity; if ($cfg_ocs["states_id_default"] > 0) { $input["states_id"] = $cfg_ocs["states_id_default"]; } $p->update($input); } } else { $id = array_search(stripslashes($print["name"]), $import_periph); unset($import_periph[$id]); } } } } } } break; case 'Peripheral': if ($cfg_ocs["import_periph"]) { $do_clean = true; $p = new Peripheral(); $query = "SELECT DISTINCT `CAPTION`, `MANUFACTURER`, `INTERFACE`, `TYPE`\n FROM `inputs`\n WHERE `HARDWARE_ID` = '{$ocsid}'\n AND `CAPTION` <> ''"; $result = $DBocs->query($query); if ($DBocs->numrows($result) > 0) { while ($line = $DBocs->fetch_array($result)) { $line = clean_cross_side_scripting_deep(addslashes_deep($line)); $periph = array(); if (!seems_utf8($line["CAPTION"])) { $periph["name"] = encodeInUtf8($line["CAPTION"]); } else { $periph["name"] = $line["CAPTION"]; } if (!in_array(stripslashes($periph["name"]), $import_periph)) { // Clean peripheral object $p->reset(); if ($line["MANUFACTURER"] != "NULL") { $periph["brand"] = $line["MANUFACTURER"]; } if ($line["INTERFACE"] != "NULL") { $periph["comment"] = $line["INTERFACE"]; } $periph["peripheraltypes_id"] = Dropdown::importExternal('PeripheralType', $line["TYPE"]); $id_periph = 0; if ($cfg_ocs["import_periph"] == 1) { //Config says : manage peripherals as global //check if peripherals already exists in GLPI $periph["is_global"] = 1; $query = "SELECT `id`\n FROM `glpi_peripherals`\n WHERE `name` = '" . $periph["name"] . "'\n AND `is_global` = '1'\n AND `entities_id` = '{$entity}'"; $result_search = $DB->query($query); if ($DB->numrows($result_search) > 0) { //Periph is already in GLPI //Do not import anything just get periph ID for link $id_periph = $DB->result($result_search, 0, "id"); } else { $input = $periph; if ($cfg_ocs["states_id_default"] > 0) { $input["states_id"] = $cfg_ocs["states_id_default"]; } $input["entities_id"] = $entity; $id_periph = $p->add($input); } } else { if ($cfg_ocs["import_periph"] == 2) { //Config says : manage peripherals as single units //Import all peripherals as non global. $input = $periph; $input["is_global"] = 0; if ($cfg_ocs["states_id_default"] > 0) { $input["states_id"] = $cfg_ocs["states_id_default"]; } $input["entities_id"] = $entity; $id_periph = $p->add($input); } } if ($id_periph) { $conn = new Computer_Item(); if ($connID = $conn->add(array('computers_id' => $computers_id, 'itemtype' => 'Peripheral', 'items_id' => $id_periph, '_no_history' => !$dohistory))) { self::addToOcsArray($computers_id, array($connID => $periph["name"]), "import_peripheral"); //Update column "is_deleted" set value to 0 and set status to default $input = array(); $input["id"] = $id_periph; $input["is_deleted"] = 0; $input["entities_id"] = $entity; if ($cfg_ocs["states_id_default"] > 0) { $input["states_id"] = $cfg_ocs["states_id_default"]; } $p->update($input); } } } else { $id = array_search(stripslashes($periph["name"]), $import_periph); unset($import_periph[$id]); } } } } break; } // Disconnect Unexisting Items not found in OCS if ($do_clean && count($import_periph)) { $conn = new Computer_Item(); foreach ($import_periph as $key => $val) { switch ($itemtype) { case 'Monitor': // Only if sync done if ($cfg_ocs["import_monitor"] <= 2 || $checkserial) { $conn->delete(array('id' => $key, '_ocsservers_id' => $ocsservers_id)); self::deleteInOcsArray($computers_id, $key, "import_monitor"); } break; case 'Printer': $conn->delete(array('id' => $key, '_ocsservers_id' => $ocsservers_id)); self::deleteInOcsArray($computers_id, $key, "import_printer"); break; case 'Peripheral': $conn->delete(array('id' => $key, '_ocsservers_id' => $ocsservers_id)); self::deleteInOcsArray($computers_id, $key, "import_peripheral"); break; default: $conn->delete(array('id' => $key, '_ocsservers_id' => $ocsservers_id)); } } } }