Software::merge PHP Method

merge() public method

Merge softwares with current
public merge ( $item ) : boolean
$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;
    }

Usage Example

Esempio n. 1
0
            $soft->redirectToList();
        } else {
            if (isset($_REQUEST["purge"])) {
                $soft->check($_REQUEST["id"], 'd');
                $soft->delete($_REQUEST, 1);
                Event::log($_REQUEST["id"], "software", 4, "inventory", $_SESSION["glpiname"] . " " . $LANG['log'][24]);
                $soft->redirectToList();
            } else {
                if (isset($_POST["update"])) {
                    $soft->check($_POST["id"], 'w');
                    $soft->update($_POST);
                    Event::log($_POST["id"], "software", 4, "inventory", $_SESSION["glpiname"] . " " . $LANG['log'][21]);
                    glpi_header($_SERVER['HTTP_REFERER']);
                } else {
                    if (isset($_POST["mergesoftware"])) {
                        popHeader($LANG['Menu'][4]);
                        if (isset($_POST["id"]) && isset($_POST["item"]) && is_array($_POST["item"]) && count($_POST["item"])) {
                            $soft->check($_POST["id"], 'w');
                            $soft->merge($_POST["item"]);
                        }
                        glpi_header($_SERVER['HTTP_REFERER']);
                    } else {
                        commonHeader($LANG['Menu'][4], $_SERVER['PHP_SELF'], "inventory", "software");
                        $soft->showForm($_GET["id"], array('withtemplate' => $_GET["withtemplate"]));
                        commonFooter();
                    }
                }
            }
        }
    }
}