Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions ajax/dropdownReplaceFindDevice.php
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@

if (
isset($_REQUEST['searchText'])
&& strlen($_REQUEST['searchText']) > 0
&& (string) $_REQUEST['searchText'] !== ''
&& $_REQUEST['searchText'] != $CFG_GLPI["ajax_wildcard"]
) {
// isset already makes sure the search value isn't null
Expand Down Expand Up @@ -143,7 +143,7 @@
);
}

if ((strlen((string) $withoutput) > 0) && ($withoutput != ' ')) {
if (((string) $withoutput !== '') && ($withoutput != ' ')) {
$outputval = sprintf(__s('%1$s - %2$s'), $outputval, $withoutput);
}
}
Expand All @@ -160,7 +160,7 @@

if (
$_SESSION["glpiis_ids_visible"]
|| (strlen((string) $outputval) == 0)
|| ((string) $outputval === '')
) {
$outputval = sprintf(__s('%1$s (%2$s)'), $outputval, $ID);
}
Expand Down
2 changes: 1 addition & 1 deletion inc/replace.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -464,7 +464,7 @@ public static function replace($type, $model_id, $tab_ids, $location)
}

// Location
if ((int) $location != 0 && $olditem->isField('locations_id')) {
if ((int) $location !== 0 && $olditem->isField('locations_id')) {
$olditem->getFromDB($olditem_id);
switch ($location) {
case -1:
Expand Down
172 changes: 142 additions & 30 deletions inc/uninstall.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
use Glpi\Asset\Asset_PeripheralAsset;

use function Safe\preg_grep;

/**
* -------------------------------------------------------------------------
* Uninstall plugin for GLPI
Expand Down Expand Up @@ -60,6 +59,10 @@
* -------------------------------------------------------------------------
*/

use function Safe\json_encode;
use function Safe\ob_end_clean;
use function Safe\ob_start;

class PluginUninstallUninstall extends CommonDBTM
{
public const PLUGIN_UNINSTALL_TRANSFER_NAME = "plugin_uninstall";
Expand Down Expand Up @@ -924,13 +927,13 @@ public static function getInfocomPresentForDevice($type, $ID)
* @param $ID
* @param $item
* @param $user_id
**/
public static function showFormUninstallation($ID, $item, $user_id)
**/
public static function showFormUninstallation($ID, $item, $user_id, $templates_id = 0)
{
/**
* @var array $CFG_GLPI
*/
global $CFG_GLPI;
global $CFG_GLPI, $DB;

$type = $item->getType();
echo "<form action='" . $CFG_GLPI['root_doc'] . "/plugins/uninstall/front/action.php'
Expand All @@ -941,41 +944,150 @@ public static function showFormUninstallation($ID, $item, $user_id)

echo "<tr class='tab_bg_1'><td>" . __s("Model") . "</td><td>";
if (class_exists($type) && is_a($type, CommonDBTM::class, true)) {

$item = new $type();
$item->getFromDB($ID);
$rand = self::dropdownUninstallModels(
"model_id",
$_SESSION["glpiID"],
$item->fields["entities_id"],
);

if ($templates_id == 0) {
$rand = self::dropdownUninstallModels(
"model_id",
$_SESSION["glpiID"],
$item->fields["entities_id"],
);
} else {
$used = [];
if (!PluginUninstallModel::canReplace()) {
foreach (
$DB->request([
"FROM" => 'glpi_plugin_uninstall_models',
"WHERE" => [
'types_id' => [2, 3],
],
]) as $data
) {
$used[] = $data['id'];
}
}

$rand = PluginUninstallModel::dropdown([
'name' => "model_id",
'value' => $templates_id,
'entity' => $item->fields["entities_id"],
'used' => $used,
]);
}


echo "</td></tr>";
if ($templates_id == 0) {
$params = [
'templates_id' => '__VALUE__',
'entity' => $item->fields["entities_id"],
'users_id' => $_SESSION["glpiID"],
];

Ajax::updateItemOnSelectEvent(
'dropdown_model_id' . $rand,
"show_objects",
$CFG_GLPI['root_doc'] . "/plugins/uninstall/ajax/locations.php",
$params,
);
}

$params = ['templates_id' => '__VALUE__',
'entity' => $item->fields["entities_id"],
'users_id' => $_SESSION["glpiID"],
];
echo "<tr class='tab_bg_1'><td>" . __s("Item's location after applying model", "uninstall") . "</td>";
if ($templates_id == 0) {
echo "<td><span id='show_objects'>\n" . Dropdown::EMPTY_VALUE . "</span></td>\n";
} else {
echo "<td>";
$location = PluginUninstallPreference::getLocationByUserByEntity(
$user_id,
$templates_id,
$item->fields["entities_id"],
);
Location::dropdown([
'value' => ($location == '' ? 0 : $location),
'comments' => 1,
'entity' => $item->fields["entities_id"],
'toadd' => [
-1 => __s('Keep previous location', 'uninstall'),
0 => __s('Empty location', 'uninstall'),
],
]);
echo "</td>";
}

Ajax::updateItemOnSelectEvent(
'dropdown_model_id' . $rand,
"show_objects",
$CFG_GLPI['root_doc'] . "/plugins/uninstall/ajax/locations.php",
$params,
);
echo "</tr>";

echo "<tr class='tab_bg_1 center'><td colspan='3'>";
echo "<input type='submit' name='uninstall' value=\"" . _sx('button', 'Post') . "\"
class='submit'>";
echo "<input type='hidden' name='id' value='" . $ID . "'>";
echo "</td></tr>";
echo "</table>";
Html::closeForm();
}
}

echo "<tr class='tab_bg_1'><td>" . __s("Item's location after applying model", "uninstall") . "</td>";
echo "<td><span id='show_objects'>\n" . Dropdown::EMPTY_VALUE . "</span></td>\n";
echo "</tr>";
public static function showLinksUninstallation(
$params,
) {
/**
* @var array $UNINSTALL_TYPES
*/
global $DB, $UNINSTALL_TYPES;

echo "<tr class='tab_bg_1 center'><td colspan='3'>";
echo "<input type='submit' name='uninstall' value=\"" . _sx('button', 'Post') . "\"
class='submit'>";
echo "<input type='hidden' name='id' value='" . $ID . "'>";
echo "</td></tr>";
echo "</table>";
Html::closeForm();
$right = Session::haveRight(self::$rightname, READ);

$users_id = Session::getLoginUserID();
$item = $params['item'];
if ($right
&& in_array($item->getType(), $UNINSTALL_TYPES) && $item->getID() > 0) {
echo "<div class='form-button-separator card-body mx-n2 border-top d-flex flex-row-reverse align-items-start flex-wrap'>";

$criteria = [
"FROM" => 'glpi_plugin_uninstall_models',
];

if (!PluginUninstallModel::canReplace()) {
$criteria['WHERE'] = ['NOT' => ['types_id' => [2, 3]]];
}


$iterator = $DB->request($criteria);
foreach ($iterator as $data) {

$templates_id = $data['id'];
echo "<a href='#' id='" . $templates_id . "' class='btn btn-primary me-2'>"
. $data['name']
. "</a>";

// get form for uninstall actions
ob_start();
self::showFormUninstallation($item->getID(), $item, $users_id, $templates_id);
$html_modal = ob_get_contents();
ob_end_clean();

// we json encore to pass it to js (auto-escaping)

$modal_body = json_encode($html_modal);

$JS = <<<JAVASCRIPT
$(function() {
$("#{$templates_id}").on("click", function(event) {
event.preventDefault();

glpi_html_dialog({
body: {$modal_body}
})
});
});
JAVASCRIPT;
echo Html::scriptBlock($JS);
}

echo "</div>";
}

return null;
}


Expand Down
4 changes: 4 additions & 0 deletions setup.php
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,10 @@ function plugin_init_uninstall()
$PLUGIN_HOOKS[Hooks::PRE_ITEM_ADD]['uninstall'] = [Config::class => PluginUninstallConfig::preConfigSet(...)];
$PLUGIN_HOOKS[Hooks::PRE_ITEM_UPDATE]['uninstall'] = [Config::class => PluginUninstallConfig::preConfigSet(...)];

if (!$uninstallconfig['replace_status_dropdown']) {
$PLUGIN_HOOKS[Hooks::POST_ITEM_FORM]['uninstall'] = PluginUninstallUninstall::showLinksUninstallation(...);
}

$PLUGIN_HOOKS[Hooks::STALE_AGENT_CONFIG]['uninstall'] = [
[
'label' => __s('Apply uninstall profile'),
Expand Down