";
echo "".__('Locked items')." ";
//Use a hook to allow external inventory tools to manage per field lock
$results = Plugin::doHookFunction('display_locked_fields', ['item' => $item,
'header' => $header]);
$header |= $results['header'];
//Special locks for computers only
if ($itemtype == 'Computer') {
$computer_item = new Computer_Item();
//Locks for items recorded in glpi_computers_items table
$types = ['Monitor', 'Peripheral', 'Printer'];
foreach ($types as $type) {
$params = ['is_dynamic' => 1,
'is_deleted' => 1,
'computers_id' => $ID,
'itemtype' => $type];
$params['FIELDS'] = ['id', 'items_id'];
$first = true;
foreach ($DB->request('glpi_computers_items', $params) as $line) {
/** @var CommonDBTM $asset */
$asset = new $type();
$asset->getFromDB($line['items_id']);
if ($first) {
echo "".$type::getTypeName(Session::getPluralNumber())." \n";
$first = false;
}
echo "";
echo "";
if ($computer_item->can($line['id'], UPDATE) || $computer_item->can($line['id'], PURGE)) {
$header = true;
echo " ";
}
echo " ";
echo "" . $asset->getName() . " ";
echo " \n";
}
}
//items disks
$item_disk = new Item_Disk();
$params = [
'is_dynamic' => 1,
'is_deleted' => 1,
'items_id' => $ID,
'itemtype' => $itemtype
];
$params['FIELDS'] = ['id', 'name'];
$first = true;
foreach ($DB->request($item_disk->getTable(), $params) as $line) {
if ($first) {
echo "".$item_disk->getTypeName(Session::getPluralNumber())." \n";
$first = false;
}
echo "";
echo "";
if ($item_disk->can($line['id'], UPDATE) || $item_disk->can($line['id'], PURGE)) {
$header = true;
echo " ";
}
echo " ";
echo "" . $line['name'] . " ";
echo " \n";
}
$computer_vm = new ComputerVirtualMachine();
$params = ['is_dynamic' => 1,
'is_deleted' => 1,
'computers_id' => $ID];
$params['FIELDS'] = ['id', 'name'];
$first = true;
foreach ($DB->request($computer_vm->getTable(), $params) as $line) {
if ($first) {
echo "".$computer_vm->getTypeName(Session::getPluralNumber())." \n";
$first = false;
}
echo "";
echo "";
if ($computer_vm->can($line['id'], UPDATE) || $computer_vm->can($line['id'], PURGE)) {
$header = true;
echo " ";
}
echo " ";
echo "" . $line['name'] . " ";
echo " \n";
}
}
//Software versions
$item_sv = new Item_SoftwareVersion();
$item_sv_table = Item_SoftwareVersion::getTable();
$iterator = $DB->request([
'SELECT' => [
'isv.id AS id',
'sv.name AS version',
's.name AS software'
],
'FROM' => "{$item_sv_table} AS isv",
'LEFT JOIN' => [
'glpi_softwareversions AS sv' => [
'FKEY' => [
'isv' => 'softwareversions_id',
'sv' => 'id'
]
],
'glpi_softwares AS s' => [
'FKEY' => [
'sv' => 'softwares_id',
's' => 'id'
]
]
],
'WHERE' => [
'isv.is_deleted' => 1,
'isv.is_dynamic' => 1,
'isv.items_id' => $ID,
'isv.itemtype' => $itemtype,
]
]);
echo "".Software::getTypeName(Session::getPluralNumber())." \n";
while ($data = $iterator->next()) {
echo "";
echo "";
if ($item_sv->can($data['id'], UPDATE) || $item_sv->can($data['id'], PURGE)) {
$header = true;
echo " ";
}
echo " ";
echo "" . $data['software']." ".$data['version'] . " ";
echo " \n";
}
//Software licenses
$item_sl = new Item_SoftwareLicense();
$item_sl_table = Item_SoftwareLicense::getTable();
$iterator = $DB->request([
'SELECT' => [
'isl.id AS id',
'sl.name AS version',
's.name AS software'
],
'FROM' => "{$item_sl_table} AS isl",
'LEFT JOIN' => [
'glpi_softwarelicenses AS sl' => [
'FKEY' => [
'isl' => 'softwarelicenses_id',
'sl' => 'id'
]
],
'glpi_softwares AS s' => [
'FKEY' => [
'sl' => 'softwares_id',
's' => 'id'
]
]
],
'WHERE' => [
'isl.is_deleted' => 1,
'isl.is_dynamic' => 1,
'isl.items_id' => $ID,
'isl.itemtype' => $itemtype,
]
]);
echo "".SoftwareLicense::getTypeName(Session::getPluralNumber())." \n";
while ($data = $iterator->next()) {
echo "";
echo "";
if ($item_sl->can($data['id'], UPDATE) || $item_sl->can($data['id'], PURGE)) {
$header = true;
echo " ";
}
echo " ";
echo "" . $data['software']." ".$data['version'] . " ";
echo " \n";
}
$first = true;
$networkport = new NetworkPort();
$params = ['is_dynamic' => 1,
'is_deleted' => 1,
'items_id' => $ID,
'itemtype' => $itemtype];
$params['FIELDS'] = ['id'];
foreach ($DB->request($networkport->getTable(), $params) as $line) {
$networkport->getFromDB($line['id']);
if ($first) {
echo "".$networkport->getTypeName(Session::getPluralNumber())." \n";
$first = false;
}
echo "";
echo "";
if ($networkport->can($line['id'], UPDATE) || $networkport->can($line['id'], PURGE)) {
$header = true;
echo " ";
}
echo " ";
echo "" . $networkport->getName() . " ";
echo " \n";
}
$first = true;
$networkname = new NetworkName();
$params = [
'glpi_networknames.is_dynamic' => 1,
'glpi_networknames.is_deleted' => 1,
'glpi_networknames.itemtype' => 'NetworkPort',
'glpi_networknames.items_id' => new QueryExpression($DB->quoteName('glpi_networkports.id')),
'glpi_networkports.items_id' => $ID,
'glpi_networkports.itemtype' => $itemtype
];
$params['FIELDS'] = ['glpi_networknames' => 'id'];
foreach ($DB->request(['glpi_networknames', 'glpi_networkports'], $params) as $line) {
$networkname->getFromDB($line['id']);
if ($first) {
echo "".NetworkName::getTypeName(Session::getPluralNumber())." \n";
$first = false;
}
echo "";
echo "";
if ($networkname->can($line['id'], UPDATE) || $networkname->can($line['id'], PURGE)) {
$header = true;
echo " ";
}
echo " ";
echo "" . $networkname->getName() . " ";
echo " \n";
}
$first = true;
$ipaddress = new IPAddress();
$params = [
'glpi_ipaddresses.is_dynamic' => 1,
'glpi_ipaddresses.is_deleted' => 1,
'glpi_ipaddresses.itemtype' => 'NetworkName',
'glpi_ipaddresses.items_id' => new QueryExpression($DB->quoteName('glpi_networknames.id')),
'glpi_networknames.itemtype' => 'NetworkPort',
'glpi_networknames.items_id' => new QueryExpression($DB->quoteName('glpi_networkports.id')),
'glpi_networkports.items_id' => $ID,
'glpi_networkports.itemtype' => $itemtype
];
$params['FIELDS'] = ['glpi_ipaddresses' => 'id'];
foreach ($DB->request(['glpi_ipaddresses',
'glpi_networknames',
'glpi_networkports'], $params) as $line) {
$ipaddress->getFromDB($line['id']);
if ($first) {
echo "".IPAddress::getTypeName(Session::getPluralNumber())." \n";
$first = false;
}
echo "";
echo "";
if ($ipaddress->can($line['id'], UPDATE) || $ipaddress->can($line['id'], PURGE)) {
$header = true;
echo " ";
}
echo " ";
echo "" . $ipaddress->getName() . " ";
echo " \n";
}
$types = Item_Devices::getDeviceTypes();
$nb = 0;
foreach ($types as $type) {
$nb += countElementsInTable(getTableForItemType($type),
['items_id' => $ID,
'itemtype' => $itemtype,
'is_dynamic' => 1,
'is_deleted' => 1 ]);
}
if ($nb) {
echo ""._n('Component', 'Components', Session::getPluralNumber())." \n";
foreach ($types as $type) {
$type_item = new $type();
$associated_type = str_replace('Item_', '', $type);
$associated_table = getTableForItemType($associated_type);
$fk = getForeignKeyFieldForTable($associated_table);
$iterator = $DB->request([
'SELECT' => [
'i.id',
't.designation AS name'
],
'FROM' => getTableForItemType($type) . ' AS i',
'LEFT JOIN' => [
"$associated_table AS t" => [
'ON' => [
't' => 'id',
'i' => $fk
]
]
],
'WHERE' => [
'itemtype' => $itemtype,
'items_id' => $ID,
'is_dynamic' => 1,
'is_deleted' => 1
]
]);
while ($data = $iterator->next()) {
echo "";
echo "";
if ($type_item->can($data['id'], UPDATE) || $type_item->can($data['id'], PURGE)) {
$header = true;
echo " ";
}
echo " ";
echo "";
printf(__('%1$s: %2$s'), $associated_type::getTypeName(), $data['name']);
echo " \n";
}
}
}
if ($header) {
echo "";
echo Html::getCheckAllAsCheckbox('lock_form');
echo "   \n";
echo "
";
Html::openArrowMassives('lock_form', true);
Html::closeArrowMassives(['unlock' => _sx('button', 'Unlock'),
'purge' => _sx('button', 'Delete permanently')]);
} else {
echo "