/** * Function to uninstall an object * * @param $computers_id the computer's ID in GLPI * * @return nothing **/ static function deleteFusionInventoryLink($itemtype, $items_id) { if (function_exists('plugin_pre_item_purge_fusioninventory')) { $item = new $itemtype(); $item->getFromDB($items_id); $agent = new PluginFusioninventoryAgent(); $agents = $agent->getAgentsFromComputers(array($items_id)); // clean item associated to agents plugin_pre_item_purge_fusioninventory($item); if ($itemtype == 'Computer') { // remove agent(s) foreach ($agents as $current_agent) { $agent->deleteByCriteria(array('id' => $current_agent['id']), true); } // remove licences $pfComputerLicenseInfo = new PluginFusioninventoryComputerLicenseInfo(); $pfComputerLicenseInfo->deleteByCriteria(array('computers_id' => $items_id)); // remove batteries $pfInventoryComputerBatteries = new PluginFusioninventoryInventoryComputerBatteries(); $pfInventoryComputerBatteries->deleteByCriteria(array('computers_id' => $items_id)); // Delete links between two computerstorages $pfInventoryComputerStorageStorageStorage = new PluginFusioninventoryInventoryComputerStorage_Storage(); $tab_ids = $pfInventoryComputerStorageStorageStorage->getOpposites($items_id); if (!empty($tab_ids)) { //because getOpposites can return 0 foreach ($tab_ids as $inventorycomputerstorages_id) { $storage->deleteByCriteria(array('plugin_fusioninventory_inventorycomputerstorages_id_1' => $inventorycomputerstorages_id)); $storage->deleteByCriteria(array('plugin_fusioninventory_inventorycomputerstorages_id_2' => $inventorycomputerstorages_id)); } } // ** Delete computerstorages ** $pfInventoryComputerStorage = new PluginFusioninventoryInventoryComputerStorage(); $pfInventoryComputerStorage->deleteByCriteria(array('computers_id' => $items_id)); } } }
/** * Get Computers from Actors defined in taskjobs * TODO: this method should be rewritten to call directly a getAgents() method in the * corresponding itemtype classes. */ public function getAgentsFromActors($actors = array()) { $agents = array(); $computers = array(); $computer = new Computer(); $agent = new PluginFusioninventoryAgent(); $pfToolbox = new PluginFusioninventoryToolbox(); foreach ($actors as $actor) { $itemtype = key($actor); $itemid = $actor[$itemtype]; $item = getItemForItemtype($itemtype); $dbresult = $item->getFromDB($itemid); // If this item doesn't exists, we continue to the next actor item. // TODO: remove this faulty actor from the list of job actor. if ($dbresult === false) { continue; } switch ($itemtype) { case 'Computer': $computers[$itemid] = 1; break; case 'PluginFusioninventoryDeployGroup': $group_targets = $pfToolbox->executeAsFusioninventoryUser('PluginFusioninventoryDeployGroup::getTargetsForGroup', array($itemid)); foreach ($group_targets as $computerid) { $computers[$computerid] = 1; } break; case 'Group': //find computers by user associated with this group $group_users = new Group_User(); $members = array(); //array_keys($group_users->find("groups_id = '$items_id'")); $members = $group_users->getGroupUsers($itemid); foreach ($members as $member) { $computers_from_user = $computer->find("users_id = '{$member['id']}'"); foreach ($computers_from_user as $computer_entry) { $computers[$computer_entry['id']] = 1; } } //find computers directly associated with this group $computer_from_group = $computer->find("groups_id = '{$itemid}'"); foreach ($computer_from_group as $computer_entry) { $computers[$computer_entry['id']] = 1; } break; /** * TODO: The following should be replaced with Dynamic groups */ /** * TODO: The following should be replaced with Dynamic groups */ case 'PluginFusioninventoryAgent': switch ($itemid) { case "dynamic": break; case "dynamic-same-subnet": break; default: $agents[$itemid] = 1; break; } break; } } //Get agents from the computer's ids list foreach ($agent->getAgentsFromComputers(array_keys($computers)) as $agent_entry) { $agents[$agent_entry['id']] = 1; } // Return the list of agent's ids. // (We used hash keys to avoid duplicates in the list) return array_keys($agents); }