/** * Merge softwares with current * * @param $item array of software ID to be merged * * @return boolean about success **/ function merge($item) { global $DB; $ID = $this->getField('id'); echo "<div class='center'>"; echo "<table class='tab_cadrehov'><tr><th>" . __('Merging') . "</th></tr>"; echo "<tr class='tab_bg_2'><td>"; Html::createProgressBar(__('Work in progress...')); echo "</td></tr></table></div>\n"; $item = array_keys($item); // Search for software version $req = $DB->request("glpi_softwareversions", array("softwares_id" => $item)); $i = 0; if ($nb = $req->numrows()) { foreach ($req as $from) { $found = false; foreach ($DB->request("glpi_softwareversions", array("softwares_id" => $ID, "name" => $from["name"])) as $dest) { // Update version ID on License $sql = "UPDATE `glpi_softwarelicenses`\n SET `softwareversions_id_buy` = '" . $dest["id"] . "'\n WHERE `softwareversions_id_buy` = '" . $from["id"] . "'"; $DB->query($sql); $sql = "UPDATE `glpi_softwarelicenses`\n SET `softwareversions_id_use` = '" . $dest["id"] . "'\n WHERE `softwareversions_id_use` = '" . $from["id"] . "'"; $DB->query($sql); // Move installation to existing version in destination software $sql = "UPDATE `glpi_computers_softwareversions`\n SET `softwareversions_id` = '" . $dest["id"] . "'\n WHERE `softwareversions_id` = '" . $from["id"] . "'"; $found = $DB->query($sql); } if ($found) { // Installation has be moved, delete the source version $sql = "DELETE\n FROM `glpi_softwareversions`\n WHERE `id` = '" . $from["id"] . "'"; } else { // Move version to destination software $sql = "UPDATE `glpi_softwareversions`\n SET `softwares_id` = '{$ID}',\n `entities_id` = '" . $this->getField('entities_id') . "'\n WHERE `id` = '" . $from["id"] . "'"; } if ($DB->query($sql)) { $i++; } Html::changeProgressBarPosition($i, $nb + 1); } } // Move software license $sql = "UPDATE `glpi_softwarelicenses`\n SET `softwares_id` = '{$ID}'\n WHERE `softwares_id` IN ('" . implode("','", $item) . "')"; if ($DB->query($sql)) { $i++; } if ($i == $nb + 1) { //error_log ("All merge operations ok."); $soft = new self(); foreach ($item as $old) { $soft->putInTrash($old, __('Software deleted after merging')); } } Html::changeProgressBarPosition($i, $nb + 1, __('Task completed.')); return $i == $nb + 1; }