%PDF- %PDF-
Direktori : /var/www/projetos/suporte.iigd.com.br/src/Inventory/Asset/ |
Current File : //var/www/projetos/suporte.iigd.com.br/src/Inventory/Asset/OperatingSystem.php |
<?php /** * --------------------------------------------------------------------- * * GLPI - Gestionnaire Libre de Parc Informatique * * http://glpi-project.org * * @copyright 2015-2024 Teclib' and contributors. * @copyright 2003-2014 by the INDEPNET Development Team. * @copyright 2010-2022 by the FusionInventory Development Team. * @licence https://www.gnu.org/licenses/gpl-3.0.html * * --------------------------------------------------------------------- * * LICENSE * * This file is part of GLPI. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. * * --------------------------------------------------------------------- */ namespace Glpi\Inventory\Asset; use Glpi\Inventory\Conf; use Glpi\Toolbox\Sanitizer; use Item_OperatingSystem; use RuleDictionnaryOperatingSystemArchitectureCollection; use RuleDictionnaryOperatingSystemCollection; use RuleDictionnaryOperatingSystemEditionCollection; use RuleDictionnaryOperatingSystemServicePackCollection; use RuleDictionnaryOperatingSystemVersionCollection; class OperatingSystem extends InventoryAsset { protected $extra_data = ['hardware' => null]; private $operatingsystems_id; public function prepare(): array { $mapping = [ 'name' => 'operatingsystems_id', 'version' => 'operatingsystemversions_id', 'service_pack' => 'operatingsystemservicepacks_id', 'arch' => 'operatingsystemarchitectures_id', 'kernel_name' => 'operatingsystemkernels_id', 'kernel_version' => 'operatingsystemkernelversions_id', ]; $val = (object)$this->data; foreach ($mapping as $origin => $dest) { if (property_exists($val, $origin)) { $val->$dest = $val->$origin; } } if (isset($this->extra_data['hardware'])) { if (property_exists($this->extra_data['hardware'], 'winprodid')) { $val->licenseid = $this->extra_data['hardware']->winprodid; } if (property_exists($this->extra_data['hardware'], 'winprodkey')) { $val->license_number = $this->extra_data['hardware']->winprodkey; } if (property_exists($this->extra_data['hardware'], 'wincompany')) { $val->company = $this->extra_data['hardware']->wincompany; } if (property_exists($this->extra_data['hardware'], 'winowner')) { $val->owner = $this->extra_data['hardware']->winowner; } } if (property_exists($val, 'full_name')) { $val->operatingsystems_id = $val->full_name; } if (property_exists($val, 'install_date')) { $val->install_date = date('Y-m-d', strtotime($val->install_date)); } $mapping = [ 'operatingsystems_id' => [ "collection_class" => RuleDictionnaryOperatingSystemCollection::class, "main_value" => $val->operatingsystems_id ?? '' ], 'operatingsystemversions_id' => [ "collection_class" => RuleDictionnaryOperatingSystemVersionCollection::class, "main_value" => $val->operatingsystemversions_id ?? '' ], 'operatingsystemservicepacks_id' => [ "collection_class" => RuleDictionnaryOperatingSystemServicePackCollection::class, "main_value" => $val->operatingsystemservicepacks_id ?? '' ], 'operatingsystemarchitectures_id' => [ "collection_class" => RuleDictionnaryOperatingSystemArchitectureCollection::class , "main_value" => $val->operatingsystemarchitectures_id ?? '' ], 'operatingsystemeditions_id' => [ "collection_class" => RuleDictionnaryOperatingSystemEditionCollection::class, "main_value" => $val->operatingsystemeditions_id ?? '' ], ]; $rule_input = [ 'os_name' => $val->operatingsystems_id ?? '', 'os_version_name' => $val->operatingsystemversions_id ?? '', 'servicepack_name' => $val->operatingsystemservicepacks_id ?? '', 'arch_name' => $val->operatingsystemarchitectures_id ?? '', 'os_edition' => $val->operatingsystemeditions_id ?? '', ]; foreach ($mapping as $key => $value) { $rulecollection = new $value['collection_class'](); $rule_input['name'] = $value['main_value']; $res_rule = $rulecollection->processAllRules($rule_input); if (isset($res_rule['name'])) { $val->{$key} = $res_rule['name']; } if (property_exists($val, $key) && $val->{$key} == '0') { $val->{$key} = ''; } } $this->data = [$val]; return $this->data; } public function handle() { /** @var \DBmysql $DB */ global $DB; $ios = new Item_OperatingSystem(); $val = $this->data[0]; $ios->getFromDBByCrit([ 'itemtype' => $this->item->getType(), 'items_id' => $this->item->fields['id'] ]); $input_os = $this->handleInput($val, $ios) + [ 'itemtype' => $this->item->getType(), 'items_id' => $this->item->fields['id'], 'is_dynamic' => 1, 'entities_id' => $this->item->fields['entities_id'] ]; if (!$ios->isNewItem()) { //OS exists, check for updates $same = true; foreach ($input_os as $key => $value) { if (array_key_exists($key, $ios->fields) && $ios->fields[$key] != $value) { $same = false; break; } } if ($same === false) { $ios->update(Sanitizer::sanitize(['id' => $ios->getID()] + $input_os)); } } else { $ios->add(Sanitizer::sanitize($input_os)); } $ioskey = 'operatingsystems_id' . $val->operatingsystems_id; $this->known_links[$ioskey] = $ios->fields['id']; $this->operatingsystems_id = $input_os['operatingsystems_id']; //cleanup if (!$this->main_asset || !$this->main_asset->isPartial()) { $iterator = $DB->request([ 'FROM' => $ios->getTable(), 'WHERE' => [ 'itemtype' => $this->item->getType(), 'items_id' => $this->item->fields['id'], 'NOT' => ['id' => $ios->fields['id']] ] ]); foreach ($iterator as $row) { $ios->delete(['id' => $row['id']], true); } } } public function checkConf(Conf $conf): bool { return true; } /** * Get current OS id * * @return integer */ public function getId() { return $this->operatingsystems_id; } public function getItemtype(): string { return \Item_OperatingSystem::class; } }