2022-02-11 15:48:06 +01:00

10176 lines
357 KiB
PHP

<?php
/**
* FusionInventory
*
* Copyright (C) 2010-2016 by the FusionInventory Development Team.
*
* http://www.fusioninventory.org/
* https://github.com/fusioninventory/fusioninventory-for-glpi
* http://forge.fusioninventory.org/
*
* ------------------------------------------------------------------------
*
* LICENSE
*
* This file is part of FusionInventory project.
*
* FusionInventory is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* FusionInventory 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with FusionInventory. If not, see <http://www.gnu.org/licenses/>.
*
* ------------------------------------------------------------------------
*
* This file is used to manage the agents
*
* ------------------------------------------------------------------------
*
* @package FusionInventory
* @author David Durieux
* @copyright Copyright (c) 2010-2016 FusionInventory team
* @license AGPL License 3.0 or (at your option) any later version
* http://www.gnu.org/licenses/agpl-3.0-standalone.html
* @link http://www.fusioninventory.org/
* @link https://github.com/fusioninventory/fusioninventory-for-glpi
*
*/
include_once( PLUGIN_FUSIONINVENTORY_DIR . "/install/update.tasks.php" );
/**
* Get the current version of the plugin
*
* @global object $DB
* @return string
*/
function pluginFusioninventoryGetCurrentVersion() {
global $DB;
require_once(PLUGIN_FUSIONINVENTORY_DIR . "/inc/module.class.php");
if ((!$DB->tableExists("glpi_plugin_tracker_config")) &&
(!$DB->tableExists("glpi_plugin_fusioninventory_config")) &&
(!$DB->tableExists("glpi_plugin_fusioninventory_configs"))) {
return '0';
} else if (($DB->tableExists("glpi_plugin_tracker_config")) ||
($DB->tableExists("glpi_plugin_fusioninventory_config"))) {
if ($DB->tableExists("glpi_plugin_fusioninventory_configs")) {
$iterator = $DB->request([
'FROM' => 'glpi_plugin_fusioninventory_configs',
'WHERE' => ['type' => 'version'],
'LIMIT' => 1
]);
$data = [];
if (count($iterator)) {
$data = $iterator->next();
return $data['value'];
}
}
if ((!$DB->tableExists("glpi_plugin_tracker_agents")) &&
(!$DB->tableExists("glpi_plugin_fusioninventory_agents"))) {
return "1.1.0";
}
if ((!$DB->tableExists("glpi_plugin_tracker_config_discovery")) &&
(!$DB->tableExists("glpi_plugin_fusioninventory_config"))) {
return "2.0.0";
}
if ((($DB->tableExists("glpi_plugin_tracker_agents")) &&
(!$DB->fieldExists("glpi_plugin_tracker_config", "version"))) &&
(!$DB->tableExists("glpi_plugin_fusioninventory_config"))) {
return "2.0.1";
}
if ((($DB->tableExists("glpi_plugin_tracker_agents")) &&
($DB->fieldExists("glpi_plugin_tracker_config", "version"))) ||
($DB->tableExists("glpi_plugin_fusioninventory_config"))) {
$querytable = 'glpi_plugin_fusioninventory_config';
if ($DB->tableExists("glpi_plugin_tracker_agents")) {
$querytable = 'glpi_plugin_tracker_config';
}
$iterator = $DB->request([
'SELECT' => ['version'],
'FROM' => $querytable,
'LIMIT' => 1
]);
$data = [];
if (count($iterator)) {
$data = $iterator->next();
}
if ($data['version'] == "0") {
return "2.0.2";
} else {
return $data['version'];
}
}
} else if ($DB->tableExists("glpi_plugin_fusioninventory_configs")) {
$iterator = $DB->request([
'SELECT' => ['value'],
'FROM' => 'glpi_plugin_fusioninventory_configs',
'WHERE' => ['type' => 'version'],
'LIMIT' => 1
]);
$data = [];
if (count($iterator)) {
$data = $iterator->next();
return $data['value'];
}
if ($DB->fieldExists('glpi_plugin_fusioninventory_agentmodules', 'plugins_id')) {
$iterator = $DB->request([
'SELECT' => ['plugins_id'],
'FROM' => 'glpi_plugin_fusioninventory_agentmodules',
'WHERE' => ['modulename' => 'WAKEONLAN'],
'LIMIT' => 1
]);
if (count($iterator)) {
$ex_pluginid = $iterator->next();
$DB->update(
'glpi_plugin_fusioninventory_taskjobs', [
'plugins_id' => PluginFusioninventoryModule::getModuleId('fusioninventory')
], [
'plugins_id' => $ex_pluginid['plugins_id']
]
);
$DB->update(
'glpi_plugin_fusioninventory_profiles', [
'plugins_id' => PluginFusioninventoryModule::getModuleId('fusioninventory')
], [
'plugins_id' => $ex_pluginid['plugins_id']
]
);
$DB->update(
'glpi_plugin_fusioninventory_agentmodules', [
'plugins_id' => PluginFusioninventoryModule::getModuleId('fusioninventory')
], [
'plugins_id' => $ex_pluginid['plugins_id']
]
);
$iterator = $DB->request([
'SELECT' => ['value'],
'FROM' => 'glpi_plugin_fusioninventory_configs',
'WHERE' => ['type' => 'version'],
'LIMIT' => 1
]);
$data = [];
if (count($iterator)) {
$data = $iterator->next();
return $data['value'];
}
}
}
}
return "1.1.0";
}
/**
* Find files recursively filtered with pattern
* (grabbed from http://rosettacode.org/wiki/Walk_a_directory/Recursively#PHP)
*
* @param string $dir
* @param string $pattern
* @return array
*/
function pluginFusioninventoryFindFiles($dir = '.', $pattern = '/./') {
$files = [];
$prefix = $dir . '/';
$dir = dir($dir);
while (false !== ($file = $dir->read())) {
if ($file === '.' || $file === '..') {
continue;
}
$file = $prefix . $file;
if (is_dir($file)) {
$files[] = pluginFusioninventoryFindFiles($file, $pattern);
continue;
}
if (preg_match($pattern, $file)) {
$files[] = $file;
}
}
return pluginFusioninventoryFlatArray($files);
}
/**
* Flat a multi-dimensional array
*
* @param array $array
* @return array
*/
function pluginFusioninventoryFlatArray($array) {
$tmp = [];
foreach ($array as $a) {
if (is_array($a)) {
$tmp = array_merge($tmp, pluginFusioninventoryFlatArray($a));
} else {
$tmp[] = $a;
}
}
return $tmp;
}
/**
* The main function to update the plugin FusionInventory
*
* @global object $DB
* @param string $current_version
* @param string $migrationname
*/
function pluginFusioninventoryUpdate($current_version, $migrationname = 'Migration') {
global $DB;
ini_set("max_execution_time", "0");
ini_set("memory_limit", "-1");
// load abstract classes before
require_once PLUGIN_FUSIONINVENTORY_DIR.'/inc/deploypackageitem.class.php';
require_once PLUGIN_FUSIONINVENTORY_DIR.'/inc/commonview.class.php';
require_once PLUGIN_FUSIONINVENTORY_DIR.'/inc/taskview.class.php';
require_once PLUGIN_FUSIONINVENTORY_DIR.'/inc/taskjobview.class.php';
require_once PLUGIN_FUSIONINVENTORY_DIR.'/inc/item.class.php';
require_once PLUGIN_FUSIONINVENTORY_DIR.'/inc/collectcommon.class.php';
require_once PLUGIN_FUSIONINVENTORY_DIR.'/inc/collectcontentcommon.class.php';
foreach (glob(PLUGIN_FUSIONINVENTORY_DIR.'/inc/*.php') as $file) {
require_once($file);
}
$migration = new $migrationname($current_version);
$prepare_task = [];
$prepare_rangeip = [];
$prepare_Config = [];
$a_plugin = plugin_version_fusioninventory();
$plugins_id = PluginFusioninventoryModule::getModuleId($a_plugin['shortname']);
$migration->displayMessage("Migration Classname : " . $migrationname);
$migration->displayMessage("Update of plugin FusionInventory");
// ********* Check if folders are correctly created ********************** //
if (!is_dir(GLPI_PLUGIN_DOC_DIR.'/fusioninventory')) {
mkdir(GLPI_PLUGIN_DOC_DIR.'/fusioninventory');
}
if (!is_dir(GLPI_PLUGIN_DOC_DIR.'/fusioninventory/tmp')) {
mkdir(GLPI_PLUGIN_DOC_DIR.'/fusioninventory/tmp');
}
if (!is_dir(GLPI_PLUGIN_DOC_DIR.'/fusioninventory/xml')) {
mkdir(GLPI_PLUGIN_DOC_DIR.'/fusioninventory/xml');
}
if (!is_dir(PLUGIN_FUSIONINVENTORY_XML_DIR.'computer')) {
mkdir(PLUGIN_FUSIONINVENTORY_XML_DIR.'computer');
}
if (!is_dir(PLUGIN_FUSIONINVENTORY_XML_DIR.'printer')) {
mkdir(PLUGIN_FUSIONINVENTORY_XML_DIR.'printer');
}
if (!is_dir(PLUGIN_FUSIONINVENTORY_XML_DIR.'networkequipment')) {
mkdir(PLUGIN_FUSIONINVENTORY_XML_DIR.'networkequipment');
}
// ********* Deploy folders ********************************************** //
if (is_dir(GLPI_PLUGIN_DOC_DIR.'/fusinvdeploy/files')) {
rename(
GLPI_PLUGIN_DOC_DIR.'/fusinvdeploy/files',
GLPI_PLUGIN_DOC_DIR.'/fusioninventory/files'
);
}
if (!is_dir(GLPI_PLUGIN_DOC_DIR.'/fusioninventory/files')) {
mkdir(GLPI_PLUGIN_DOC_DIR.'/fusioninventory/files');
}
if (is_dir(GLPI_PLUGIN_DOC_DIR.'/fusinvdeploy/repository')) {
rename(
GLPI_PLUGIN_DOC_DIR.'/fusinvdeploy/repository',
GLPI_PLUGIN_DOC_DIR.'/fusioninventory/repository'
);
}
if (!is_dir(GLPI_PLUGIN_DOC_DIR.'/fusioninventory/files/repository')) {
mkdir(GLPI_PLUGIN_DOC_DIR.'/fusioninventory/files/repository');
}
if (!is_dir(GLPI_PLUGIN_DOC_DIR.'/fusioninventory/files/manifests')) {
mkdir(GLPI_PLUGIN_DOC_DIR.'/fusioninventory/files/manifests');
}
if (!is_dir(GLPI_PLUGIN_DOC_DIR.'/fusioninventory/files/import')) {
mkdir(GLPI_PLUGIN_DOC_DIR.'/fusioninventory/files/import');
}
if (!is_dir(GLPI_PLUGIN_DOC_DIR.'/fusioninventory/files/export')) {
mkdir(GLPI_PLUGIN_DOC_DIR.'/fusioninventory/files/export');
}
if (is_dir(GLPI_PLUGIN_DOC_DIR.'/fusinvdeploy/upload')) {
rename(
GLPI_PLUGIN_DOC_DIR.'/fusinvdeploy/upload',
GLPI_PLUGIN_DOC_DIR.'/fusioninventory/upload'
);
}
if (!is_dir(GLPI_PLUGIN_DOC_DIR.'/fusioninventory/upload')) {
mkdir(GLPI_PLUGIN_DOC_DIR.'/fusioninventory/upload');
}
// ********* Rename fileparts without .gz extension (cf #1999) *********** //
if (is_dir(GLPI_PLUGIN_DOC_DIR.'/fusioninventory/files')) {
$gzfiles = pluginFusioninventoryFindFiles(GLPI_PLUGIN_DOC_DIR.'/fusioninventory/files', '/\.gz$/');
foreach ($gzfiles as $file) {
$fileWithoutExt =
pathinfo($file, PATHINFO_DIRNAME) .
'/' . pathinfo($file, PATHINFO_FILENAME);
rename($file, $fileWithoutExt);
}
}
unset($gzfiles);
// conversion in very old version
update213to220_ConvertField($migration);
// ********* Migration internal / common ********************************* //
// ********* Rename tables ******************************************** //
$migration->renameTable("glpi_plugin_fusioninventory_lock",
"glpi_plugin_fusioninventory_locks");
$migration->renameTable("glpi_plugin_fusioninventory_unknown_device",
"glpi_plugin_fusioninventory_unknowndevices");
$migration->renameTable("glpi_plugin_fusioninventory_config",
"glpi_plugin_fusioninventory_configs");
// ********* Migration ************************************************ //
$prepare_rangeip = do_agent_migration($migration);
$prepare_Config = do_config_migration($migration);
do_entities_migration($migration);
do_locks_migration($migration);
do_profile_migration($migration);
do_ignoredimport_migration($migration);
do_rulematchedlog_migration($migration);
do_unmanaged_migration($migration);
// ********* Migration Computer inventory ******************************** //
// ********* Rename tables ******************************************** //
// ********* Migration ************************************************ //
do_blacklist_migration($migration);
do_antivirus_migration($migration);
do_computercomputer_migration($migration);
do_computerstat_migration($migration);
do_computerlicense_migration($migration);
do_computerremotemgmt_migration($migration);
do_computerarch_migration($migration);
do_computeroperatingsystem_migration($migration);
do_dblocks_migration($migration);
do_rule_migration($migration);
do_task_migration($migration);
// ********* Migration SNMP discovery and inventory ********************** //
// ********* Rename tables ******************************************** //
$migration->renameTable("glpi_plugin_fusioninventory_rangeip",
"glpi_plugin_fusioninventory_ipranges");
$migration->renameTable("glpi_plugin_fusioninventory_networking_ports",
"glpi_plugin_fusinvsnmp_networkports");
$migration->renameTable("glpi_plugin_fusioninventory_construct_device",
"glpi_plugin_fusinvsnmp_constructdevices");
$migration->renameTable("glpi_plugin_fusioninventory_construct_mibs",
"glpi_plugin_fusioninventory_snmpmodelconstructdevice_miboids");
$migration->renameTable("glpi_plugin_fusioninventory_networking",
"glpi_plugin_fusioninventory_networkequipments");
$migration->renameTable("glpi_plugin_fusioninventory_networking_ifaddr",
"glpi_plugin_fusinvsnmp_networkequipmentips");
$migration->renameTable("glpi_plugin_fusioninventory_printers",
"glpi_plugin_fusinvsnmp_printers");
$migration->renameTable("glpi_plugin_fusioninventory_printers_cartridges",
"glpi_plugin_fusinvsnmp_printercartridges");
$migration->renameTable("glpi_plugin_fusioninventory_printers_history",
"glpi_plugin_fusinvsnmp_printerlogs");
$migration->renameTable("glpi_plugin_fusioninventory_model_infos",
"glpi_plugin_fusioninventory_snmpmodels");
$migration->renameTable("glpi_plugin_fusioninventory_mib_networking",
"glpi_plugin_fusinvsnmp_modelmibs");
$migration->renameTable("glpi_plugin_fusioninventory_snmp_connection",
"glpi_plugin_fusinvsnmp_configsecurities");
$migration->renameTable("glpi_plugin_fusioninventory_snmp_history",
"glpi_plugin_fusinvsnmp_networkportlogs");
$migration->renameTable("glpi_plugin_fusioninventory_snmp_history_connections",
"glpi_plugin_fusinvsnmp_networkportconnectionlogs");
// ********* Migration ************************************************ //
$prepare_task = do_iprange_migration($migration);
do_iprangeconfigsecurity_migration($migration);
do_configlogfield_migration($migration);
do_networkport_migration($migration);
do_printer_migration($migration);
do_networkequipment_migration($migration);
do_configsecurity_migration($migration);
do_statediscovery_migration($migration);
do_mapping_migration($migration);
do_snmpmodel_migration($migration);
// ********* Migration deploy ******************************************** //
// ********* Rename tables ******************************************** //
// ********* Migration ************************************************ //
do_deployfile_migration($migration);
do_deploypackage_migration($migration);
do_deploymirror_migration($migration);
do_deploygroup_migration($migration);
do_deployuserinteraction_migration($migration);
migrateTablesFromFusinvDeploy($migration);
// ********* Migration ESX *********************************************** //
// ********* Rename tables ******************************************** //
// ********* Migration ************************************************ //
do_credentialESX_migration($migration);
// ********* Migration Collect ******************************************* //
// ********* Rename tables ******************************************** //
// ********* Migration ************************************************ //
do_collect_migration($migration);
// ********* Migration Tasks ********************************************* //
// ********* Rename tables ******************************************** //
// ********* Migration ************************************************ //
pluginFusioninventoryUpdateTasks($migration, $plugins_id);
do_timeslot_migration($migration);
// ********* Drop tables not used **************************************** //
$a_droptable = ['glpi_plugin_fusioninventory_agents_inventory_state',
'glpi_plugin_fusioninventory_config_modules',
'glpi_plugin_fusioninventory_connection_stats',
'glpi_plugin_fusioninventory_discovery',
'glpi_plugin_fusioninventory_errors',
'glpi_plugin_fusioninventory_lockable',
'glpi_plugin_fusioninventory_connection_history',
'glpi_plugin_fusioninventory_walks',
'glpi_plugin_fusioninventory_config_snmp_history',
'glpi_plugin_fusioninventory_config_snmp_networking',
'glpi_plugin_fusioninventory_task',
'glpi_plugin_fusinvinventory_pcidevices',
'glpi_plugin_fusinvinventory_pcivendors',
'glpi_plugin_fusinvinventory_usbdevices',
'glpi_plugin_fusinvinventory_usbvendors',
'glpi_plugin_fusinvsnmp_constructdevicewalks',
'glpi_plugin_fusioninventory_snmpmodelmiblabels',
'glpi_plugin_fusioninventory_snmpmodelmibobjects',
'glpi_plugin_fusioninventory_snmpmodelmiboids',
'glpi_plugin_fusioninventory_snmpmodelconstructdevices',
'glpi_plugin_fusioninventory_snmpmodelconstructdevicewalks'.
'glpi_plugin_fusioninventory_snmpmodelconstructdevices_users',
'glpi_plugin_fusioninventory_snmpmodelconstructdevice_miboids',
'glpi_plugin_fusioninventory_snmpmodelmibs',
'glpi_plugin_fusioninventory_snmpmodels',
'glpi_plugin_fusioninventory_snmpmodeldevices',
'glpi_plugin_fusinvsnmp_constructdevice_miboids',
'glpi_plugin_fusinvsnmp_constructdevices',
'glpi_plugin_fusinvsnmp_constructdevices_users',
'glpi_plugin_fusinvsnmp_miblabels',
'glpi_plugin_fusinvsnmp_mibobjects',
'glpi_plugin_fusinvsnmp_miboids',
'glpi_plugin_fusinvsnmp_modeldevices',
'glpi_plugin_fusinvsnmp_modelmibs',
'glpi_plugin_fusinvsnmp_models',
'glpi_plugin_fusioninventory_construct_walks',
'glpi_plugin_fusioninventory_deployorders',
'glpi_plugin_tracker_computers',
'glpi_plugin_tracker_connection_history',
'glpi_plugin_tracker_agents_processes',
'glpi_plugin_tracker_config_snmp_history',
'glpi_plugin_tracker_config_snmp_networking',
'glpi_plugin_tracker_config_snmp_printer',
'glpi_plugin_tracker_config_snmp_script',
'glpi_plugin_tracker_connection_stats',
'glpi_plugin_tracker_discovery',
'glpi_plugin_tracker_errors',
'glpi_plugin_tracker_model_infos',
'glpi_plugin_tracker_processes',
'glpi_plugin_tracker_processes_values',
'glpi_dropdown_plugin_tracker_snmp_auth_auth_protocol',
'glpi_dropdown_plugin_tracker_snmp_auth_priv_protocol',
'glpi_dropdown_plugin_tracker_snmp_auth_sec_level',
'glpi_dropdown_plugin_tracker_snmp_version',
'glpi_plugin_tracker_computers',
'glpi_plugin_tracker_config',
'glpi_plugin_tracker_config_discovery',
'glpi_plugin_tracker_tmp_connections',
'glpi_plugin_tracker_tmp_netports',
'glpi_plugin_tracker_walks',
'glpi_plugin_fusioninventory_agents_errors',
'glpi_plugin_fusioninventory_agents_processes',
'glpi_plugin_fusioninventory_computers',
'glpi_plugin_fusioninventory_config_snmp_networking',
'glpi_plugin_fusioninventory_config_snmp_history',
'glpi_plugin_fusinvsnmp_agentconfigs',
'glpi_dropdown_plugin_fusioninventory_mib_label',
'glpi_dropdown_plugin_fusioninventory_mib_object',
'glpi_dropdown_plugin_fusioninventory_mib_oid',
'glpi_dropdown_plugin_fusioninventory_snmp_auth_auth_protocol',
'glpi_dropdown_plugin_fusioninventory_snmp_auth_priv_protocol',
'glpi_dropdown_plugin_fusioninventory_snmp_version',
'glpi_plugin_fusinvsnmp_temp_profiles',
'glpi_plugin_fusinvsnmp_tmp_agents',
'glpi_plugin_fusinvsnmp_tmp_configs',
'glpi_plugin_fusinvsnmp_tmp_tasks',
'glpi_plugin_fusioninventory_networkequipmentips',
'glpi_plugin_fusioninventory_inventorycomputerbatteries',
'glpi_plugin_fusioninventory_inventorycomputerchemistries'
];
foreach ($a_droptable as $newTable) {
$migration->dropTable($newTable);
}
/*
$a_table = array();
//table name
$a_table['name'] = '';
$a_table['oldname'] = array(
);
// fields : fields that are new, have changed type or just stay the same
// array(
// <fieldname> = array(
// 'type' => <type>, 'value' => <value>)
// );
$a_table['fields'] = array(
);
// oldfields = fields that need to be removed
// array( 'field0', 'field1', ...);
$a_table['oldfields'] = array(
);
// renamefields = fields that need to be renamed
// array('oldname' = 'newname', ...)
$a_table['renamefields'] = array(
);
// keys : new, changed or not
// array( 'field' => <fields>, 'name' => <keyname> , 'type' => <keytype>)
// <fields> : fieldnames needed by the key
// ex : array('field0' , 'field1' ...)
// ex : 'fieldname'
// <keyname> : the name of the key (if blank, the fieldname is used)
// <type> : the type of key (ex: INDEX, ...)
$a_table['keys'] = array(
);
// oldkeys : keys that need to be removed
// array( 'key0', 'key1', ... )
$a_table['oldkeys'] = array(
);
*/
//Push task functionnality
$migration->addField('glpi_plugin_fusioninventory_tasks', 'last_agent_wakeup', 'datetime');
$migration->addField('glpi_plugin_fusioninventory_tasks', 'wakeup_agent_counter', "int(11) NOT NULL DEFAULT '0'");
$migration->addField('glpi_plugin_fusioninventory_tasks', 'wakeup_agent_time', "int(11) NOT NULL DEFAULT '0'");
$migration->addField('glpi_plugin_fusioninventory_tasks', 'reprepare_if_successful', "tinyint(1) NOT NULL DEFAULT '1'");
$deploy_on_demand = $migration->addField('glpi_plugin_fusioninventory_tasks', 'is_deploy_on_demand', "tinyint(1) NOT NULL DEFAULT '0'");
$migration->addKey('glpi_plugin_fusioninventory_tasks', 'wakeup_agent_counter');
$migration->addKey('glpi_plugin_fusioninventory_tasks', 'reprepare_if_successful');
$migration->addKey('glpi_plugin_fusioninventory_tasks', 'is_deploy_on_demand');
$migration->migrationOneTable('glpi_plugin_fusioninventory_tasks');
//deploy on demand task migration :
//the way to detect a deploy on demand task was by looking at it's name
//we've now introduced a boolean to easily check for it
if ($deploy_on_demand) {
$task = new PluginFusioninventoryTask();
foreach (getAllDataFromTable('glpi_plugin_fusioninventory_tasks',
['name' => ['LIKE', '%[self-deploy]%']]) as $tsk) {
$task->update(['id' => $tsk['id'], 'is_deploy_on_demand' => 1]);
}
}
/*
* Update pci and usb ids and oui
*/
foreach (['usbid.sql', 'pciid.sql', 'oui.sql'] as $sql) {
$DB_file = PLUGIN_FUSIONINVENTORY_DIR ."/install/mysql/$sql";
$DBf_handle = fopen($DB_file, "rt");
$sql_query = fread($DBf_handle, filesize($DB_file));
fclose($DBf_handle);
foreach (explode(";\n", "$sql_query") as $sql_line) {
if (!empty($sql_line)) {
$DB->query($sql_line);/* or die($DB->error())*/
}
}
}
/*
* Clean display preferences not used
*/
$DB->delete(
'glpi_displaypreferences', [
'itemtype' => [
'5150',
'5160',
'5161',
'5163',
'5165',
'5190'
]
]
);
// If no PluginFusioninventoryTaskjoblog in preferences, add them
$iterator = $DB->request([
'FROM' => 'glpi_displaypreferences',
'WHERE' => [
'itemtype' => 'PluginFusioninventoryTaskjoblog',
'users_id' => 0
]
]);
if (!count($iterator)) {
$insert = $DB->buildInsert(
'glpi_displaypreferences', [
'itemtype' => 'PluginFusioninventoryTaskjoblog',
'num' => new \QueryParam(),
'rank' => new \QueryParam(),
'users_id' => 0
]
);
$stmt = $DB->prepare($insert);
$insert_data = [
[2, 1],
[3, 2],
[4, 3],
[5, 4],
[6, 5],
[7, 6],
[8, 7]
];
foreach ($insert_data as $idata) {
$stmt->bind_param(
'ss',
$idata[0],
$idata[1]
);
$stmt->execute();
}
mysqli_stmt_close($stmt);
}
/*
* Convert taskjob definition from PluginFusinvsnmpIPRange to PluginFusioninventoryIPRange
* onvert taskjob definition from PluginFusinvdeployPackage to PluginFusioninventoryDeployPackage
*/
$iterator = $DB->request([
'FROM' => 'glpi_plugin_fusioninventory_taskjobs'
]);
if (count($iterator)) {
$update = $DB->buildUpdate(
'glpi_plugin_fusioninventory_taskjobs', [
'targets' => new \QueryParam()
], [
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($update);
while ($data = $iterator->next()) {
$a_defs = importArrayFromDB($data['targets']);
foreach ($a_defs as $num=>$a_def) {
if (key($a_def) == 'PluginFusinvsnmpIPRange') {
$a_defs[$num] = ['PluginFusioninventoryIPRange'=>current($a_def)];
} else if (key($a_def) == 'PluginFusinvdeployPackage') {
$a_defs[$num] = ['PluginFusioninventoryDeployPackage'=>current($a_def)];
}
}
$targets = exportArrayToDB($a_defs);
$stmt->bind_param(
'ss',
$targets,
$data['id']
);
$stmt->execute();
}
mysqli_stmt_close($stmt);
}
/*
* Convert taskjoblogs itemtype from PluginFusinvdeployPackage to
* PluginFusioninventoryDeployPackage
*/
$DB->update(
'glpi_plugin_fusioninventory_taskjoblogs', [
'itemtype' => 'PluginFusioninventoryDeployPackage'
], [
'itemtype' => 'PluginFusinvdeployPackage'
]
);
/*
* Convert taskjobstates itemtype from PluginFusinvdeployPackage to
* PluginFusioninventoryDeployPackage
*/
$DB->update(
'glpi_plugin_fusioninventory_taskjobstates', [
'itemtype' => 'PluginFusioninventoryDeployPackage'
], [
'itemtype' => 'PluginFusinvdeployPackage'
]
);
/*
* Convert taskjob action from PluginFusinvdeployGroup to PluginFusioninventoryDeployGroup
*/
$iterator = $DB->request(['FROM' => 'glpi_plugin_fusioninventory_taskjobs']);
if (count($iterator)) {
$update = $DB->buildUpdate(
'glpi_plugin_fusioninventory_taskjobs', [
'actors' => new \QueryParam()
], [
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($update);
while ($data = $iterator->next()) {
$a_defs = importArrayFromDB($data['actors']);
foreach ($a_defs as $num=>$a_def) {
if (key($a_def) == 'PluginFusinvdeployGroup') {
$a_defs[$num] = ['PluginFusioninventoryDeployGroup'=>current($a_def)];
}
}
$actors = exportArrayToDB($a_defs);
$stmt->bind_param(
'ss',
$actors,
$data['id']
);
$stmt->execute();
}
mysqli_stmt_close($stmt);
}
/*
* Convert taskjob method deployuninstall in deployinstall
*/
$DB->update(
'glpi_plugin_fusioninventory_taskjobs', [
'method' => 'deployinstall'
], [
'method' => 'deployuninstall'
]
);
/*
* Manage configuration of plugin
*/
$config = new PluginFusioninventoryConfig();
$pfSetup = new PluginFusioninventorySetup();
$users_id = $pfSetup->createFusionInventoryUser();
$a_input = [];
$a_input['ssl_only'] = 0;
$a_input['delete_task'] = 20;
$a_input['inventory_frequence'] = 24;
$a_input['agent_port'] = 62354;
$a_input['extradebug'] = 0;
$a_input['users_id'] = $users_id;
$a_input['agents_old_days'] = 0;
$a_input['agents_action'] = 0;
$a_input['agents_status'] = 0;
$config->addValues($a_input, false);
$a_input = [];
$a_input['version'] = PLUGIN_FUSIONINVENTORY_VERSION;
$config->addValues($a_input, true);
$a_input = [];
$a_input['ssl_only'] = 0;
if (isset($prepare_Config['ssl_only'])) {
$a_input['ssl_only'] = $prepare_Config['ssl_only'];
}
$a_input['delete_task'] = 20;
$a_input['inventory_frequence'] = 24;
$a_input['agent_port'] = 62354;
$a_input['extradebug'] = 0;
$a_input['users_id'] = 0;
//Deploy configuration options
$a_input['server_upload_path'] =
Toolbox::addslashes_deep(
implode(
DIRECTORY_SEPARATOR,
[
GLPI_PLUGIN_DOC_DIR,
'fusioninventory',
'upload'
]
)
);
$a_input['alert_winpath'] = 1;
$a_input['server_as_mirror'] = 1;
$a_input['mirror_match'] = 0;
$config->addValues($a_input, false);
$pfSetup = new PluginFusioninventorySetup();
$users_id = $pfSetup->createFusionInventoryUser();
$DB->update(
'glpi_plugin_fusioninventory_configs', [
'value' => $users_id
], [
'type' => 'users_id'
]
);
// Update fusinvinventory _config values to this plugin
$input = [
'import_software' => 1,
'import_volume' => 1,
'import_antivirus' => 1,
'import_registry' => 1,
'import_process' => 1,
'import_vm' => 1,
'import_monitor_on_partial_sn' => 0,
'component_processor' => 1,
'component_memory' => 1,
'component_harddrive' => 1,
'component_networkcard' => 1,
'component_graphiccard' => 1,
'component_soundcard' => 1,
'component_drive' => 1,
'component_networkdrive' => 1,
'component_control' => 1,
'component_battery' => 1,
'states_id_default' => 0,
'location' => 0,
'group' => 0,
'manage_osname' => 0,
'component_networkcardvirtual' => 1,
'reprepare_job' => 0
];
$config->addValues($input, false);
// Add new config values if not added
$input = $config->initConfigModule(true);
foreach ($input as $name=>$value) {
$a_conf = $config->find(['type' => $name]);
if (count($a_conf) == 0) {
$config->add(['type' => $name, 'value' => $value]);
}
}
$migration->displayMessage("Add Crontasks");
/*
* Add Crontask if not exist
*/
$crontask = new CronTask();
if ($crontask->getFromDBbyName('PluginFusioninventoryTaskjob', 'taskscheduler')) {
$crontask->fields['itemtype'] = 'PluginFusioninventoryTask';
$crontask->updateInDB(['itemtype']);
}
if (!$crontask->getFromDBbyName('PluginFusioninventoryTask', 'taskscheduler')) {
CronTask::Register('PluginFusioninventoryTask', 'taskscheduler', '60',
['mode' => 2, 'allowmode' => 3, 'logs_lifetime'=> 30]);
}
if ($crontask->getFromDBbyName('PluginFusioninventoryTaskjobstate', 'cleantaskjob')
AND $crontask->getFromDBbyName('PluginFusioninventoryTaskjobstatus', 'cleantaskjob')) {
$crontask->getFromDBbyName('PluginFusioninventoryTaskjobstatus', 'cleantaskjob');
$crontask->delete($crontask->fields);
}
if ($crontask->getFromDBbyName('PluginFusioninventoryTaskjobstatus', 'cleantaskjob')) {
$DB->update(
'glpi_crontasks', [
'itemtype' => 'PluginFusioninventoryTaskjobstate'
], [
'itemtype' => 'PluginFusioninventoryTaskjobstatus'
]
);
}
if (!$crontask->getFromDBbyName('PluginFusioninventoryTaskjobstate', 'cleantaskjob')) {
CronTask::Register('PluginFusioninventoryTaskjobstate', 'cleantaskjob', (3600 * 24),
['mode' => 2, 'allowmode' => 3, 'logs_lifetime' => 30]);
}
if ($crontask->getFromDBbyName('PluginFusinvsnmpNetworkPortLog', 'cleannetworkportlogs')) {
$crontask->delete($crontask->fields);
}
if (!$crontask->getFromDBbyName('PluginFusioninventoryNetworkPortLog', 'cleannetworkportlogs')) {
CronTask::Register('PluginFusioninventoryNetworkPortLog', 'cleannetworkportlogs', (3600 * 24),
['mode'=>2, 'allowmode'=>3, 'logs_lifetime'=>30]);
}
if ($crontask->getFromDBbyName('PluginFusioninventoryConfigurationManagement', 'checkdevices')) {
$crontask->delete($crontask->fields);
}
if ($crontask->getFromDBbyName('PluginFusioninventoryTaskjob', 'updatedynamictasks')) {
$crontask->delete($crontask->fields);
}
if (!$crontask->getFromDBbyName('PluginFusioninventoryAgent', 'cleanoldagents')) {
CronTask::Register('PluginFusioninventoryAgent', 'cleanoldagents', 86400,
['mode'=>2, 'allowmode'=>3, 'logs_lifetime'=>30,
'hourmin' =>22, 'hourmax'=>6,
'comment'=>Toolbox::addslashes_deep(__('Delete agents that have not contacted the server since "xxx" days.', 'fusioninventory'))]);
}
if (!$crontask->getFromDBbyName('PluginFusioninventoryTask', 'cleanondemand')) {
CronTask::Register('PluginFusioninventoryTask', 'cleanondemand', 86400,
['mode'=>2, 'allowmode'=>3, 'logs_lifetime'=>30,
'comment' => Toolbox::addslashes_deep(__('Clean on demand deployment tasks'))]);
}
/*
* Update task's agents list from dynamic group periodically in order to automatically target new
* computer.
*/
if (!$crontask->getFromDBbyName('PluginFusioninventoryAgentWakeup', 'wakeupAgents')) {
CronTask::Register('PluginFusioninventoryAgentWakeup', 'wakeupAgents', 120,
['mode'=>2, 'allowmode'=>3, 'logs_lifetime'=>30,
'comment'=>Toolbox::addslashes_deep(__('Wake agents ups'))]);
}
// Fix software version in computers. see https://github.com/fusioninventory/fusioninventory-for-glpi/issues/1810
$iterator = $DB->request([
'FROM' => 'glpi_computers',
'WHERE' => ['entities_id' => ['>', 0]]
]);
if (count($iterator)) {
$update = $DB->buildUpdate(
'glpi_items_softwareversions', [
'entities_id' => new \QueryParam()
], [
'itemtype' => 'Computer',
'items_id' => new \QueryParam(),
'is_dynamic' => 1,
'entities_id' => 0
]
);
$stmt = $DB->prepare($update);
while ($data = $iterator->next()) {
$stmt->bind_param(
'ss',
$data['entities_id'],
$data['id']
);
$stmt->execute();
}
mysqli_stmt_close($stmt);
}
if ($DB->tableExists('glpi_plugin_fusioninventory_profiles')) {
//Migrate rights to the new system introduction in GLPI 0.85
PluginFusioninventoryProfile::migrateProfiles();
//Drop old table
$migration->dropTable('glpi_plugin_fusioninventory_profiles');
}
//Antivirus stuff has been integrated in GLPI's core
if ($DB->tableExists('glpi_plugin_fusioninventory_inventorycomputerantiviruses')) {
//Antivirus migration from FI table to GLPi core table
$antivirus = new ComputerAntivirus();
foreach (getAllDataFromTable('glpi_plugin_fusioninventory_inventorycomputerantiviruses') as $ant) {
unset($ant['id']);
$ant['is_dynamic'] = 1;
if (isset($ant['uptodate'])) {
$ant['is_uptodate'] = $ant['uptodate'];
unset($ant['uptodate']);
} else {
$ant['is_uptodate'] = 0;
}
if (isset($ant['version'])) {
$ant['antivirus_version'] = $ant['version'];
unset($ant['version']);
} else {
$ant['antivirus_version'] = '';
}
$antivirus->add($ant, [], false);
}
$migration->dropTable('glpi_plugin_fusioninventory_inventorycomputerantiviruses');
}
//Create first access to the current profile is needed
if (isset($_SESSION['glpiactiveprofile'])) {
PluginFusioninventoryProfile::createFirstAccess($_SESSION['glpiactiveprofile']['id']);
}
// Add computer otherserial lock for version before 9.1+1.0 because we put
// BIOS/assettag as computer.otherserial in 9.1+1.0.
if ($current_version < 9.1) {
require_once(PLUGIN_FUSIONINVENTORY_DIR . "/inc/lock.class.php");
PluginFusioninventoryLock::addLocks('Computer', 0, ['otherserial']);
}
// ********* Clean orphan data ********************************************** //
// Clean timeslotentries
$query = "SELECT glpi_plugin_fusioninventory_timeslotentries.id
FROM glpi_plugin_fusioninventory_timeslotentries
LEFT JOIN glpi_plugin_fusioninventory_timeslots
ON glpi_plugin_fusioninventory_timeslotentries.plugin_fusioninventory_timeslots_id = glpi_plugin_fusioninventory_timeslots.id
WHERE glpi_plugin_fusioninventory_timeslots.id IS NULL";
$result = $DB->query($query);
while ($data = $DB->fetchArray($result)) {
$DB->query('DELETE FROM glpi_plugin_fusioninventory_timeslotentries WHERE id='.$data['id']);
}
// Clean entities
$query = "SELECT glpi_plugin_fusioninventory_entities.id
FROM glpi_plugin_fusioninventory_entities
LEFT JOIN glpi_entities
ON glpi_plugin_fusioninventory_entities.entities_id = glpi_entities.id
WHERE glpi_entities.id IS NULL";
$result = $DB->query($query);
while ($data = $DB->fetchArray($result)) {
$DB->query('DELETE FROM glpi_plugin_fusioninventory_entities WHERE id='.$data['id']);
}
// Clean packages
$tables = [
'glpi_plugin_fusioninventory_deploypackages_entities',
'glpi_plugin_fusioninventory_deploypackages_groups',
'glpi_plugin_fusioninventory_deploypackages_profiles',
'glpi_plugin_fusioninventory_deploypackages_users'
];
foreach ($tables as $table) {
$query = "SELECT ".$table.".id
FROM ".$table."
LEFT JOIN glpi_plugin_fusioninventory_deploypackages
ON ".$table.".plugin_fusioninventory_deploypackages_id = glpi_plugin_fusioninventory_deploypackages.id
WHERE glpi_plugin_fusioninventory_deploypackages.id IS NULL";
$result = $DB->query($query);
while ($data = $DB->fetchArray($result)) {
$DB->query('DELETE FROM '.$table.' WHERE id='.$data['id']);
}
}
// Migrate search params for dynamic groups
doDynamicDataSearchParamsMigration();
}
/**
* Manage the agent part migration
*
* @global object $DB
* @param object $migration
* @return array
*/
function do_agent_migration($migration) {
global $DB;
/*
* Table glpi_plugin_fusioninventory_agents
*/
$newTable = "glpi_plugin_fusioninventory_agents";
$prepare_rangeip = [];
$prepare_agentConfig = [];
if ($DB->tableExists("glpi_plugin_tracker_agents")
&& $DB->fieldExists("glpi_plugin_tracker_agents",
"ifaddr_start")) {
$iterator = $DB->request(['FROM' => 'glpi_plugin_tracker_agents']);
while ($data = $iterator->next()) {
$prepare_rangeip[] = [
"ip_start"=> $data['ifaddr_start'],
"ip_end" => $data['ifaddr_end'],
"name" => $data['name']
];
$prepare_agentConfig[] = [
"name" => $data["name"],
"lock" => $data['lock'],
"threads_networkinventory" => $data['nb_process_query'],
"threads_networkdiscovery" => $data['nb_process_discovery']
];
}
} else if ($DB->tableExists("glpi_plugin_tracker_agents")
AND $DB->fieldExists("glpi_plugin_tracker_agents",
"core_discovery")) {
$iterator = $DB->request(['FROM' => 'glpi_plugin_tracker_agents']);
while ($data = $iterator->next()) {
$prepare_agentConfig[] = [
"name" => $data["name"],
"lock" => $data['lock'],
"threads_networkinventory" => $data['threads_query'],
"threads_networkdiscovery" => $data['threads_discovery']
];
}
} else if ($DB->tableExists("glpi_plugin_fusioninventory_agents")) {
if ($DB->fieldExists($newTable, "module_snmpquery")) {
$iterator = $DB->request(['FROM' => 'glpi_plugin_tracker_agents']);
while ($data = $iterator->next()) {
$prepare_agentConfig[] = [
"id" => $data["ID"],
"threads_networkinventory" => $data['threads_query'],
"threads_networkdiscovery" => $data['threads_discovery'],
"NETORKINVENTORY" => $data['module_snmpquery'],
"NETWORKDISCOVERY" => $data['module_netdiscovery'],
"INVENTORY" => $data['module_inventory'],
"WAKEONLAN" => $data['module_wakeonlan']
];
}
}
}
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_agents';
$a_table['oldname'] = ['glpi_plugin_tracker_agents'];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['entities_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['is_recursive'] = ['type' => 'bool',
'value' => '1'];
$a_table['fields']['name'] = ['type' => 'string',
'value' => null];
$a_table['fields']['last_contact'] = ['type' => 'datetime',
'value' => null];
$a_table['fields']['version'] = ['type' => 'string',
'value' => null];
$a_table['fields']['lock'] = ['type' => 'bool',
'value' => null];
$a_table['fields']['device_id'] = ['type' => 'string',
'value' => null];
$a_table['fields']['computers_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['token'] = ['type' => 'string',
'value' => null];
$a_table['fields']['useragent'] = ['type' => 'string',
'value' => null];
$a_table['fields']['tag'] = ['type' => 'string',
'value' => null];
$a_table['fields']['threads_networkdiscovery'] = [
'type' => "int(4) NOT NULL DEFAULT '1' COMMENT 'array(xmltag=>value)'",
'value' => null];
$a_table['fields']['threads_networkinventory'] = [
'type' => "int(4) NOT NULL DEFAULT '1' COMMENT 'array(xmltag=>value)'",
'value' => null];
$a_table['fields']['senddico'] = [
'type' => 'bool',
'value' => null
];
$a_table['fields']['timeout_networkdiscovery'] = [
'type' => "int(4) NOT NULL DEFAULT '0' COMMENT 'Network Discovery task timeout'",
'value' => null
];
$a_table['fields']['timeout_networkinventory'] = [
'type' => "int(4) NOT NULL DEFAULT '0' COMMENT 'Network Inventory task timeout'",
'value' => null
];
$a_table['fields']['agent_port'] = ['type' => 'varchar(6)',
'value' => null];
$a_table['oldfields'] = [
'module_snmpquery',
'module_netdiscovery',
'module_inventory',
'module_wakeonlan',
'core_discovery',
'threads_discovery',
'core_query',
'threads_query',
'tracker_agent_version',
'logs',
'fragment',
'itemtype',
'device_type'];
$a_table['renamefields'] = [];
$a_table['renamefields']['ID'] = 'id';
$a_table['renamefields']['last_agent_update'] = 'last_contact';
$a_table['renamefields']['fusioninventory_agent_version'] = 'version';
$a_table['renamefields']['key'] = 'device_id';
$a_table['renamefields']['on_device'] = 'computers_id';
$a_table['renamefields']['items_id'] = 'computers_id';
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'name', 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'device_id', 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'computers_id', 'name' => '', 'type' => 'INDEX'];
$a_table['oldkeys'] = ['key'];
migrateTablesFusionInventory($migration, $a_table);
/*
* Table glpi_plugin_fusioninventory_agentmodules
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_agentmodules';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['modulename'] = ['type' => 'string',
'value' => null];
$a_table['fields']['is_active'] = ['type' => 'bool',
'value' => null];
$a_table['fields']['exceptions'] = ['type' => 'text',
'value' => null];
$a_table['oldfields'] = [];
$a_table['oldfields'][] = 'plugins_id';
$a_table['oldfields'][] = 'entities_id';
$a_table['oldfields'][] = 'url';
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'modulename', 'name' => '', 'type' => 'UNIQUE'];
$a_table['oldkeys'] = ['unicity', 'entities_id'];
migrateTablesFusionInventory($migration, $a_table);
/*
* Add Deploy module
*/
$iterator = $DB->request([
'FROM' => 'glpi_plugin_fusioninventory_agentmodules',
'WHERE' => ['modulename' => 'DEPLOY'],
'LIMIT' => 1
]);
if (!count($iterator)) {
$DB->insert(
'glpi_plugin_fusioninventory_agentmodules', [
'modulename' => 'DEPLOY',
'is_active' => 0,
'exceptions' => exportArrayToDB([])
]
);
}
/*
* Add WakeOnLan module appear in version 2.3.0
*/
$iterator = $DB->request([
'FROM' => 'glpi_plugin_fusioninventory_agentmodules',
'WHERE' => ['modulename' => 'WAKEONLAN'],
'LIMIT' => 1
]);
if (!count($iterator)) {
$agentmodule = new PluginFusioninventoryAgentmodule;
$input = [
'modulename' => "WAKEONLAN",
'is_active' => 0,
'exceptions' => exportArrayToDB([])
];
$agentmodule->add($input);
}
/*
* Add SNMPQUERY module if not present
*/
$DB->update(
'glpi_plugin_fusioninventory_agentmodules', [
'modulename' => 'NETWORKINVENTORY'
], [
'modulename' => 'SNMPQUERY'
]
);
$iterator = $DB->request([
'FROM' => 'glpi_plugin_fusioninventory_agentmodules',
'WHERE' => ['modulename' => 'NETWORKINVENTORY'],
'LIMIT' => 1
]);
if (!count($iterator)) {
$agentmodule = new PluginFusioninventoryAgentmodule;
$input = [];
$input['modulename'] = "NETWORKINVENTORY";
$input['is_active'] = 0;
$input['exceptions'] = exportArrayToDB([]);
$agentmodule->add($input);
}
/*
* Add NETDISCOVERY module if not present
*/
$DB->update(
'glpi_plugin_fusioninventory_agentmodules', [
'modulename' => 'NETWORKDISCOVERY'
], [
'modulename' => 'NETDISCOVERY'
]
);
$iterator = $DB->request([
'SELECT' => ['id'],
'FROM' => 'glpi_plugin_fusioninventory_agentmodules',
'WHERE' => ['modulename' => 'NETWORKDISCOVERY'],
'LIMIT' => 1
]);
if (!count($iterator)) {
$agentmodule = new PluginFusioninventoryAgentmodule;
$input = [
'modulename' => "NETWORKDISCOVERY",
'is_active' => 0,
'exceptions' => exportArrayToDB([])
];
$agentmodule->add($input);
}
/*
* Add INVENTORY module if not present
*/
$iterator = $DB->request([
'SELECT' => ['id'],
'FROM' => 'glpi_plugin_fusioninventory_agentmodules',
'WHERE' => ['modulename' => 'INVENTORY'],
'LIMIT' => 1
]);
if (!count($iterator)) {
$agentmodule = new PluginFusioninventoryAgentmodule;
$input = [
'modulename' => "INVENTORY",
'is_active' => 1,
'exceptions' => exportArrayToDB([])
];
$agentmodule->add($input);
}
/*
* Add ESX module appear in version 2.4.0(0.80+1.0)
*/
$DB->update(
'glpi_plugin_fusioninventory_agentmodules', [
'modulename' => 'InventoryComputerESX'
], [
'modulename' => 'ESX'
]
);
$agentmodule = new PluginFusioninventoryAgentmodule();
$iterator = $DB->request([
'SELECT' => ['id'],
'FROM' => 'glpi_plugin_fusioninventory_agentmodules',
'WHERE' => ['modulename' => 'InventoryComputerESX'],
'LIMIT' => 1
]);
if (!count($iterator)) {
$input = [
'modulename' => "InventoryComputerESX",
'is_active' => 0,
'exceptions' => exportArrayToDB([])
];
$url= '';
if (isset($_SERVER['HTTP_REFERER'])) {
$url = $_SERVER['HTTP_REFERER'];
}
$agentmodule->add($input);
}
/*
* Add Collect module appear in version 0.84+2.0
*/
$agentmodule = new PluginFusioninventoryAgentmodule();
$iterator = $DB->request([
'SELECT' => ['id'],
'FROM' => 'glpi_plugin_fusioninventory_agentmodules',
'WHERE' => ['modulename' => 'Collect'],
'LIMIT' => 1
]);
if (!count($iterator)) {
$input = [
'modulename' => "Collect",
'is_active' => 1,
'exceptions' => exportArrayToDB([])
];
$agentmodule->add($input);
}
/*
* Migrate data of table glpi_plugin_fusinvsnmp_agentconfigs into
* glpi_plugin_fusioninventory_agents
*/
if ($DB->tableExists("glpi_plugin_fusinvsnmp_agentconfigs")) {
$iterator = $DB->request(['FROM' => 'glpi_plugin_fusinvsnmp_agentconfigs']);
if (count($iterator)) {
$update = $DB->buildUpdate(
'glpi_plugin_fusioninventory_agents', [
'threads_networkdiscovery' => new \QueryParam(),
'threads_networkinventory' => new \QueryParam(),
'senddico' => new \QueryParam()
], [
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($update);
while ($data = $iterator->next()) {
$stmt->bind_param(
'ssss',
$data['threads_netdiscovery'],
$data['threads_snmpquery'],
$data['senddico'],
$data['plugin_fusioninventory_agents_id']
);
$stmt->execute();
}
mysqli_stmt_close($stmt);
}
}
changeDisplayPreference("5158", "PluginFusioninventoryAgent");
// Delete data in glpi_logs(agent problem => ticket http://forge.fusioninventory.org/issues/1546)
// ** Token
$DB->delete(
'glpi_logs', [
'itemtype' => 'PluginFusioninventoryAgent',
'id_search_option' => 9
]
);
// ** Last contact
$DB->delete(
'glpi_logs', [
'itemtype' => 'PluginFusioninventoryAgent',
'id_search_option' => 4
]
);
// ** Version
$DB->delete(
'glpi_logs', [
'itemtype' => 'PluginFusioninventoryAgent',
'id_search_option' => 8,
'old_value' => new \QueryExpression($DB->quoteName('new_value'))
]
);
return $prepare_rangeip;
}
/**
* Manage the configuration part migration
*
* @global object $DB
* @param object $migration
* @return array
*/
function do_config_migration($migration) {
global $DB;
$prepare_Config = [];
/*
* Table glpi_plugin_fusioninventory_configs
*/
if ($DB->tableExists('glpi_plugin_tracker_config')) {
if ($DB->fieldExists('glpi_plugin_tracker_config', 'ssl_only')) {
$iterator = $DB->request([
'FROM' => 'glpi_plugin_tracker_config',
'LIMIT' => 1
]);
if (count($iterator)) {
$data = $iterator->next();
$prepare_Config['ssl_only'] = $data['ssl_only'];
}
}
}
if ($DB->tableExists('glpi_plugin_fusioninventory_configs')) {
$id = 'id';
if ($DB->fieldExists('glpi_plugin_fusioninventory_configs', 'ID')) {
$id = 'ID';
}
$iterator = $DB->request([
'FROM' => 'glpi_plugin_fusioninventory_configs',
'WHERE' => ['type' => 'version'],
'START' => 1,
'LIMIT' => 10
]);
if (count($iterator)) {
$delete = $DB->buildDelete(
'glpi_plugin_fusioninventory_configs', [
$id => new \QueryParam()
]
);
$stmt = $DB->prepare($delete);
while ($data = $iterator->next()) {
$stmt->bind_param('s', $data['id']);
$stmt->execute();
}
mysqli_stmt_close($stmt);
}
}
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_configs';
$a_table['oldname'] = ['glpi_plugin_tracker_config'];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['type'] = ['type' => 'string',
'value' => null];
$a_table['fields']['value'] = ['type' => 'string',
'value' => null];
$a_table['oldfields'] = [];
$a_table['oldfields'][] = 'version';
$a_table['oldfields'][] = 'URL_agent_conf';
$a_table['oldfields'][] = 'ssl_only';
$a_table['oldfields'][] = 'authsnmp';
$a_table['oldfields'][] = 'inventory_frequence';
$a_table['oldfields'][] = 'criteria1_ip';
$a_table['oldfields'][] = 'criteria1_name';
$a_table['oldfields'][] = 'criteria1_serial';
$a_table['oldfields'][] = 'criteria1_macaddr';
$a_table['oldfields'][] = 'criteria2_ip';
$a_table['oldfields'][] = 'criteria2_name';
$a_table['oldfields'][] = 'criteria2_serial';
$a_table['oldfields'][] = 'criteria2_macaddr';
$a_table['oldfields'][] = 'delete_agent_process';
$a_table['oldfields'][] = 'activation_history';
$a_table['oldfields'][] = 'activation_connection';
$a_table['oldfields'][] = 'activation_snmp_computer';
$a_table['oldfields'][] = 'activation_snmp_networking';
$a_table['oldfields'][] = 'activation_snmp_peripheral';
$a_table['oldfields'][] = 'activation_snmp_phone';
$a_table['oldfields'][] = 'activation_snmp_printer';
$a_table['oldfields'][] = 'plugins_id';
$a_table['oldfields'][] = 'module';
$a_table['renamefields'] = [];
$a_table['renamefields']['ID'] = 'id';
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => ["type"],
'name' => 'unicity',
'type' => 'UNIQUE'];
$a_table['oldkeys'] = ['unicity'];
migrateTablesFusionInventory($migration, $a_table);
return $prepare_Config;
}
/**
* Manage the entities part migration
*
* @global object $DB
* @param object $migration
*/
function do_entities_migration($migration) {
global $DB;
/*
* Table glpi_plugin_fusioninventory_entities
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_entities';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['entities_id']= ['type' => 'integer',
'value' => null];
$a_table['fields']['transfers_id_auto']= ['type' => 'integer',
'value' => null];
$a_table['fields']['agent_base_url']= ['type' => 'string',
'value' => ''];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => ['entities_id', 'transfers_id_auto'],
'name' => 'entities_id',
'type' => 'INDEX'];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
if (countElementsInTable($a_table['name']) == 0) {
$a_configs = getAllDataFromTable('glpi_plugin_fusioninventory_configs',
['type' => 'transfers_id_auto']);
$transfers_id_auto = 0;
if (count($a_configs) > 0) {
$a_config = current($a_configs);
$transfers_id_auto = $a_config['value'];
}
$a_configs = getAllDataFromTable('glpi_plugin_fusioninventory_configs',
['type' => 'agent_base_url']);
$agent_base_url = '';
if (count($a_configs) > 0) {
$a_config = current($a_configs);
$agent_base_url = $a_config['value'];
}
$DB->insert(
'glpi_plugin_fusioninventory_entities', [
'entities_id' => 0,
'transfers_id_auto' => $transfers_id_auto,
'agent_base_url' => $agent_base_url
]
);
} else if (countElementsInTable($a_table['name']) > 0) {
$a_configs = getAllDataFromTable('glpi_plugin_fusioninventory_configs',
['type' => 'agent_base_url']);
$agent_base_url = '';
if (count($a_configs) > 0) {
$a_config = current($a_configs);
$agent_base_url = $a_config['value'];
$DB->update(
'glpi_plugin_fusioninventory_entities', [
'agent_base_url' => $agent_base_url
], [true]
);
}
}
}
/**
* Manage the IP range part migration
*
* @global object $DB
* @param object $migration
* @return array
*/
function do_iprange_migration($migration) {
global $DB;
$prepare_task = [];
/*
* Table glpi_plugin_fusioninventory_ipranges
*/
if ($DB->tableExists("glpi_plugin_tracker_rangeip")) {
// Get all data to create task
$iterator = $DB->request(['FROM' => 'glpi_plugin_tracker_rangeip']);
while ($data = $iterator->next()) {
if ($data['discover'] == '1') {
$prepare_task[] = ["agents_id" => $data['FK_tracker_agents'],
"ipranges_id" => $data['ID'],
"netdiscovery" => "1"];
}
if ($data['query'] == '1') {
$prepare_task[] = ["agents_id" => $data['FK_tracker_agents'],
"ipranges_id" => $data['ID'],
"snmpquery" => "1"];
}
}
}
if ($DB->tableExists("glpi_plugin_fusioninventory_rangeip")
&& $DB->fieldExists("glpi_plugin_fusioninventory_rangeip",
"FK_fusioninventory_agents_discover")) {
// Get all data to create task
$iterator = $DB->request(['FROM' => 'glpi_plugin_fusioninventory_rangeip']);
while ($data = $iterator->next()) {
if ($data['discover'] == '1') {
$prepare_task[] = ["agents_id" => $data['FK_fusioninventory_agents_discover'],
"ipranges_id" => $data['ID'],
"netdiscovery" => "1"];
}
if ($data['query'] == '1') {
$prepare_task[] = ["agents_id" => $data['FK_fusioninventory_agents_query'],
"ipranges_id" => $data['ID'],
"snmpquery" => "1"];
}
}
}
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_ipranges';
$a_table['oldname'] = ['glpi_plugin_tracker_rangeip', 'glpi_plugin_fusinvsnmp_ipranges'];
$a_table['fields'] = [
'id' => ['type' => 'autoincrement', 'value' => ''],
'name' => ['type' => 'string', 'value' => null],
'entities_id'=> ['type' => 'integer', 'value' => null],
'ip_start' => ['type' => 'string', 'value' => null],
'ip_end' => ['type' => 'string', 'value' => null]
];
$a_table['oldfields'] = [
'FK_tracker_agents',
'discover',
'query',
'FK_fusioninventory_agents_discover',
'FK_fusioninventory_agents_query',
'construct_device_id',
'log',
'comment'
];
$a_table['renamefields'] = [
'ID' => 'id',
'ifaddr_start' => 'ip_start',
'ifaddr_end' => 'ip_end',
'FK_entities' => 'entities_id'
];
$a_table['keys'] = [
['field' => 'entities_id', 'name' => '', 'type' => 'INDEX']
];
$a_table['oldkeys'] = [
'FK_tracker_agents',
'FK_tracker_agents_2'
];
migrateTablesFusionInventory($migration, $a_table);
changeDisplayPreference("5159", "PluginFusinvsnmpIPRange");
return $prepare_task;
}
/**
* Manage the locks part migration
*
* @param object $migration
*/
function do_locks_migration($migration) {
global $DB;
/*
* Table glpi_plugin_fusioninventory_locks
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_locks';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['tablename'] = [
'type' => "varchar(64) COLLATE utf8_unicode_ci NOT NULL DEFAULT ''",
'value' => null];
$a_table['fields']['items_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['tablefields']= ['type' => 'text',
'value' => null];
$a_table['oldfields'] = ['itemtype'];
$a_table['renamefields'] = [];
$a_table['renamefields']['fields'] = 'tablefields';
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'tablename', 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'items_id' , 'name' => '', 'type' => 'INDEX'];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
// Deduplicate entries
$iterator = $DB->request([
'SELECT' => [
'tablename',
'COUNT' => ['tablename as cpt'],
'items_id'
],
'FROM' => 'glpi_plugin_fusioninventory_locks',
'GROUPBY' => [
'tablename',
'items_id'
],
'HAVING' => [
'cpt' => ['>', 1]
]
]);
while ($data = $iterator->next()) {
$DB->query("DELETE FROM glpi_plugin_fusioninventory_locks ".
"WHERE `tablename`='".$data['tablename']."' AND `items_id`='".$data['items_id']."' ".
"ORDER BY ID desc LIMIT ".($data['cpt'] - 1));
}
// add unique key
$a_table['keys'][] = ['field' => ["tablename", "items_id"],
'name' => 'unicity', 'type' => 'UNIQUE'];
migrateTablesFusionInventory($migration, $a_table);
}
/**
* Manage the SNMP communities linked to IP range part migration
*
* @global object $DB
* @param object $migration
*/
function do_iprangeconfigsecurity_migration($migration) {
global $DB;
/*
* Table glpi_plugin_fusioninventory_ipranges_configsecurities
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_ipranges_configsecurities';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['plugin_fusioninventory_ipranges_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['plugin_fusioninventory_configsecurities_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['rank'] = ['type' => 'integer',
'value' => '1'];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
/*
* Clean SNMP communities orphelin associated to deleted ipranges
*/
$iterator = $DB->request([
'SELECT' => 'glpi_plugin_fusioninventory_ipranges_configsecurities.id',
'FROM' => 'glpi_plugin_fusioninventory_ipranges_configsecurities',
'LEFT JOIN' => [
'glpi_plugin_fusioninventory_ipranges' => [
'FKEY' => [
'glpi_plugin_fusioninventory_ipranges_configsecurities' => 'plugin_fusioninventory_ipranges_id',
'glpi_plugin_fusioninventory_ipranges' => 'id'
]
]
],
'WHERE' => ['glpi_plugin_fusioninventory_ipranges_configsecurities.id' => null]
]);
if (count($iterator)) {
$delete = $DB->buildDelete(
'glpi_plugin_fusioninventory_ipranges_configsecurities', [
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($delete);
while ($data = $iterator->next()) {
$stmt->bind_param('s', $data['id']);
$stmt->execute();
}
mysqli_stmt_close($stmt);
}
}
/**
* Manage the mapping part migration
*
* @global object $DB
* @param object $migration
*/
function do_mapping_migration($migration) {
global $DB;
/*
* Table glpi_plugin_fusioninventory_mappings
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_mappings';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['itemtype'] = [
'type' => "varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL",
'value' => null];
$a_table['fields']['name'] = ['type' => 'string',
'value' => null];
$a_table['fields']['table'] = ['type' => 'string',
'value' => null];
$a_table['fields']['tablefield'] = ['type' => 'string',
'value' => null];
$a_table['fields']['locale'] = ['type' => "int(4) NOT NULL DEFAULT '0'",
'value' => null];
$a_table['fields']['shortlocale']= ['type' => 'int(4) DEFAULT NULL',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'name', 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'itemtype' , 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'table', 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'tablefield' , 'name' => '', 'type' => 'INDEX'];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
pluginFusioninventoryUpdatemapping();
/*
* Fix problem with mapping with many entries with same mapping
*/
$a_mapping = [];
$a_mappingdouble = [];
$iterator = $DB->request([
'FROM' => 'glpi_plugin_fusioninventory_mappings',
'ORDER' => 'id'
]);
while ($data = $iterator->next()) {
if (!isset($a_mapping[$data['itemtype'].".".$data['name']])) {
$a_mapping[$data['itemtype'].".".$data['name']] = $data['id'];
} else {
$a_mappingdouble[$data['id']] = $data['itemtype'].".".$data['name'];
}
}
foreach ($a_mappingdouble as $mapping_id=>$mappingkey) {
$DB->update(
'glpi_plugin_fusioninventory_printercartridges', [
'plugin_fusioninventory_mappings_id' => $a_mapping[$mappingkey]
], [
'plugin_fusioninventory_mappings_id' => $mapping_id
]
);
$DB->update(
'glpi_plugin_fusioninventory_networkportlogs', [
'plugin_fusioninventory_mappings_id' => $a_mapping[$mappingkey]
], [
'plugin_fusioninventory_mappings_id' => $mapping_id
]
);
$DB->update(
'glpi_plugin_fusioninventory_configlogfields', [
'plugin_fusioninventory_mappings_id' => $a_mapping[$mappingkey]
], [
'plugin_fusioninventory_mappings_id' => $mapping_id
]
);
$DB->delete(
'glpi_plugin_fusioninventory_mappings', [
'id' => $mapping_id
]
);
}
}
/**
* Manage the profile part migration
*
* @global object $DB
* @param object $migration
*/
function do_profile_migration($migration) {
global $DB;
if ($DB->tableExists('glpi_plugin_fusioninventory_profiles')) {
/*
* Table glpi_plugin_fusioninventory_profiles
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_profiles';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['type'] = ['type' => 'string',
'value' => ''];
$a_table['fields']['right'] = ['type' => 'char',
'value' => null];
$a_table['fields']['plugins_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['profiles_id']= ['type' => 'integer',
'value' => null];
$a_table['oldfields'] = [
'name',
'interface',
'is_default',
'snmp_networking',
'snmp_printers',
'snmp_models',
'snmp_authentification',
'rangeip',
'agents',
'remotecontrol',
'agentsprocesses',
'unknowndevices',
'reports',
'deviceinventory',
'netdiscovery',
'snmp_query',
'wol',
'configuration'];
$a_table['renamefields'] = [];
$a_table['renamefields']['ID'] = 'id';
$a_table['keys'] = [];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
// Remove multiple lines can have problem with unicity
$query = "SELECT * , count(`id`) AS cnt
FROM `glpi_plugin_fusioninventory_profiles`
GROUP BY `type`,`plugins_id`,`profiles_id`
HAVING cnt >1
ORDER BY cnt";
$result=$DB->query($query);
while ($data=$DB->fetchArray($result)) {
//DB::delete() not yet supports limit nor order
$queryd = "DELETE FROM `glpi_plugin_fusioninventory_profiles`
WHERE `type`='".$data['type']."'
AND `plugins_id`='".$data['plugins_id']."'
AND `profiles_id`='".$data['profiles_id']."'
ORDER BY `id` DESC
LIMIT ".($data['cnt'] - 1)." ";
$DB->query($queryd);
}
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_profiles';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => ["type", "plugins_id", "profiles_id"],
'name' => 'unicity', 'type' => 'UNIQUE'];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
}
}
/**
* Manage the timeslot (of task) part migration
*
* @param object $migration
*/
function do_timeslot_migration($migration) {
/*
* Table glpi_plugin_fusioninventory_timeslots
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_timeslots';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['entities_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['is_recursive'] = ['type' => 'bool',
'value' => '0'];
$a_table['fields']['name'] = ['type' => 'string',
'value' => null];
$a_table['fields']['comment'] = ['type' => 'text',
'value' => null];
$a_table['fields']['date_mod'] = ['type' => 'datetime',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
/*
* Table glpi_plugin_fusioninventory_timeslotentries
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_timeslotentries';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['plugin_fusioninventory_timeslots_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['entities_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['is_recursive'] = ['type' => 'bool',
'value' => '0'];
$a_table['fields']['day'] = ['type' => 'bool',
'value' => 1];
$a_table['fields']['begin'] = ['type' => 'int(11) DEFAULT NULL',
'value' => null];
$a_table['fields']['end'] = ['type' => 'int(11) DEFAULT NULL',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
}
/**
* Manage the unmanaged devices part migration
*
* @global object $DB
* @param object $migration
*/
function do_unmanaged_migration($migration) {
global $DB;
/*
* Table glpi_plugin_fusioninventory_unmanageds
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_unmanageds';
$a_table['oldname'] = [
'glpi_plugin_fusioninventory_unknowndevices',
'glpi_plugin_tracker_unknown_device'];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['name'] = ['type' => 'string',
'value' => null];
$a_table['fields']['date_mod'] = ['type' => 'datetime',
'value' => null];
$a_table['fields']['entities_id']= ['type' => 'integer',
'value' => null];
$a_table['fields']['locations_id']= ['type' => 'integer',
'value' => null];
$a_table['fields']['is_deleted'] = ['type' => 'bool',
'value' => null];
$a_table['fields']['users_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['serial'] = ['type' => 'string',
'value' => null];
$a_table['fields']['otherserial']= ['type' => 'string',
'value' => null];
$a_table['fields']['contact'] = ['type' => 'string',
'value' => null];
$a_table['fields']['domain'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['comment'] = ['type' => 'text',
'value' => null];
$a_table['fields']['item_type'] = ['type' => 'string',
'value' => null];
$a_table['fields']['accepted'] = ['type' => 'bool',
'value' => null];
$a_table['fields']['plugin_fusioninventory_agents_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['ip'] = ['type' => 'string',
'value' => null];
$a_table['fields']['hub'] = ['type' => 'bool',
'value' => null];
$a_table['fields']['states_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['sysdescr'] = ['type' => 'text',
'value' => null];
$a_table['fields']['plugin_fusioninventory_configsecurities_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['is_dynamic'] = ['type' => 'bool',
'value' => null];
$a_table['fields']['serialized_inventory'] = ['type' => 'longblob',
'value' => null];
$a_table['oldfields'] = [
'dnsname',
'snmp',
'FK_model_infos',
'FK_snmp_connection',
'FK_agent',
'mac',
'ifmac',
'plugin_fusinvsnmp_models_id',
'plugin_fusioninventory_snmpmodels_id',
'is_template'
];
$a_table['renamefields'] = [
'ID' => 'id',
'comments' => 'comment',
'type' => 'item_type',
'ifaddr' => 'ip',
'FK_entities' => 'entities_id',
'location' => 'locations_id',
'deleted' => 'is_deleted',
'plugin_fusinvsnmp_configsecurities_id' => 'plugin_fusioninventory_configsecurities_id'
];
$a_table['keys'] = [
['field' => 'entities_id', 'name' => '', 'type' => 'INDEX'],
['field' => 'plugin_fusioninventory_agents_id', 'name' => '', 'type' => 'INDEX'],
['field' => 'is_deleted', 'name' => '', 'type' => 'INDEX'],
['field' => 'date_mod', 'name' => '', 'type' => 'INDEX']
];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
if ($DB->tableExists('glpi_plugin_fusinvsnmp_unknowndevices')) {
$iterator = $DB->request(['FROM' => 'glpi_plugin_fusinvsnmp_unknowndevices']);
if (count($iterator)) {
$update = $DB->buildUpdate(
'glpi_plugin_fusioninventory_unmanageds', [
'sysdescr' => new \QueryParam(),
'plugin_fusioninventory_configsecurities_id' => new \QueryParam()
], [
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($update);
while ($data = $iterator->next()) {
$stmt->bind_param(
'sss',
$data['sysdescr'],
$data['plugin_fusinvsnmp_configsecurities_id'],
$data['plugin_fusioninventory_unknowndevices_id']
);
}
mysqli_stmt_close($stmt);
}
$migration->dropTable('glpi_plugin_fusinvsnmp_unknowndevices');
}
changeDisplayPreference("5153", "PluginFusioninventoryUnmanaged");
changeDisplayPreference("PluginFusioninventoryUnknownDevice",
"PluginFusioninventoryUnmanaged");
/*
* Delete IP and MAC of PluginFusioninventoryUnmanaged in displaypreference
*/
$DB->delete(
'glpi_displaypreferences', [
'itemtype' => 'PluginFusioninventoryUnmanaged',
'OR' => [
'num' => [11, 12, 16]
]
]
);
/*
* Convert itemtype from glpi_plugin_fusioninventory_unknowndevices to
* PluginFusioninventoryUnmanaged
*/
$tables = ['glpi_networkports', 'glpi_logs',
'glpi_plugin_fusioninventory_ignoredimportdevices'];
foreach ($tables as $table) {
$DB->update(
$table, [
'itemtype' => 'PluginFusioninventoryUnmanaged'
], [
'itemtype' => 'PluginFusioninventoryUnknowndevice'
]
);
}
$DB->update(
'glpi_ipaddresses', [
'mainitemtype' => 'PluginFusioninventoryUnmanaged'
], [
'mainitemtype' => 'PluginFusioninventoryUnknowndevice'
]
);
}
/**
* Manage the ignored import rules part migration
*
* @param object $migration
*/
function do_ignoredimport_migration($migration) {
/*
* Table glpi_plugin_fusioninventory_ignoredimportdevices
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_ignoredimportdevices';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['name'] = ['type' => 'string',
'value' => null];
$a_table['fields']['date'] = ['type' => 'datetime',
'value' => null];
$a_table['fields']['itemtype'] = [
'type' => "varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL",
'value' => null];
$a_table['fields']['entities_id']= ['type' => 'integer',
'value' => null];
$a_table['fields']['ip'] = ['type' => 'string',
'value' => null];
$a_table['fields']['mac'] = ['type' => 'string',
'value' => null];
$a_table['fields']['rules_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['method'] = ['type' => 'string',
'value' => null];
$a_table['fields']['serial'] = ['type' => 'string',
'value' => null];
$a_table['fields']['uuid'] = ['type' => 'string',
'value' => null];
$a_table['fields']['plugin_fusioninventory_agents_id']
= ['type' => 'integer',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'plugin_fusioninventory_agents_id',
'name' => '',
'type' => 'INDEX'];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
}
/**
* Manage the computer blacklist part migration
*
* @global object $DB
* @param object $migration
*/
function do_blacklist_migration($migration) {
global $DB;
/*
* Table glpi_plugin_fusioninventory_inventorycomputercriterias
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_inventorycomputercriterias';
$a_table['oldname'] = ['glpi_plugin_fusinvinventory_criterias'];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['name'] = ['type' => 'string',
'value' => null];
$a_table['fields']['comment'] = ['type' => 'text',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'name', 'name' => '', 'type' => 'INDEX'];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
/*
* Table glpi_plugin_fusioninventory_inventorycomputerblacklists
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_inventorycomputerblacklists';
$a_table['oldname'] = ['glpi_plugin_fusinvinventory_blacklists'];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['plugin_fusioninventory_criterium_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['value'] = ['type' => 'string',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'plugin_fusioninventory_criterium_id',
'name' => '',
'type' => 'KEY'];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
$DB->listFields($a_table['name'], false);
/*
* Udpate criteria for blacklist
*/
$a_criteria = [
'Serial number' => 'ssn',
'uuid' => 'uuid',
'Mac address' => 'macAddress',
'Windows product key' => 'winProdKey',
'Model' => 'smodel',
'storage serial' => 'storagesSerial',
'drives serial' => 'drivesSerial',
'Asset Tag' => 'assetTag',
'Computer name' => 'name',
'Manufacturer' => 'manufacturer'
];
foreach ($a_criteria as $name=>$comment) {
$iterator = $DB->request([
'FROM' => 'glpi_plugin_fusioninventory_inventorycomputercriterias',
'WHERE' => ['name' => $name]
]);
if (!count($iterator)) {
$DB->insert(
'glpi_plugin_fusioninventory_inventorycomputercriterias', [
'name' => $name,
'comment' => $comment
]
);
}
}
$a_criteria = [];
$iterator = $DB->request(['FROM' => 'glpi_plugin_fusioninventory_inventorycomputercriterias']);
while ($data = $iterator->next()) {
$a_criteria[$data['comment']] = $data['id'];
}
/*
* Update blacklist
*/
$newTable = "glpi_plugin_fusioninventory_inventorycomputerblacklists";
// * ssn
$a_input = [
'N/A',
'(null string)',
'INVALID',
'SYS-1234567890',
'SYS-9876543210',
'SN-12345',
'SN-1234567890',
'1111111111',
'1111111',
'1',
'0123456789',
'12345',
'123456',
'1234567',
'12345678',
'123456789',
'1234567890',
'123456789000',
'12345678901234567',
'0000000000',
'000000000',
'00000000',
'0000000',
'0000000',
'NNNNNNN',
'xxxxxxxxxxx',
'EVAL',
'IATPASS',
'none',
'To Be Filled By O.E.M.',
'Tulip Computers',
'Serial Number xxxxxx',
'SN-123456fvgv3i0b8o5n6n7k',
'Unknow',
'System Serial Number',
'MB-1234567890',
'0',
'empty',
'Not Specified',
'OEM_Serial',
'SystemSerialNumb'];
foreach ($a_input as $value) {
$iterator = $DB->request([
'FROM' => $newTable,
'WHERE' => [
'plugin_fusioninventory_criterium_id' => $a_criteria['ssn'],
'value' => $value
]
]);
if (!count($iterator)) {
$DB->insert(
$newTable, [
'plugin_fusioninventory_criterium_id' => $a_criteria['ssn'],
'value' => $value
]
);
}
}
// * uuid
$a_input = [
'FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF',
'03000200-0400-0500-0006-000700080009',
'6AB5B300-538D-1014-9FB5-B0684D007B53',
'01010101-0101-0101-0101-010101010101',
'2'];
foreach ($a_input as $value) {
$iterator = $DB->request([
'FROM' => $newTable,
'WHERE' => [
'plugin_fusioninventory_criterium_id' => $a_criteria['uuid'],
'value' => $value
]
]);
if (!count($iterator)) {
$DB->insert(
$newTable, [
'plugin_fusioninventory_criterium_id' => $a_criteria['uuid'],
'value' => $value
]
);
}
}
// * macAddress
$a_input = [
'20:41:53:59:4e:ff',
'02:00:4e:43:50:49',
'e2:e6:16:20:0a:35',
'd2:0a:2d:a0:04:be',
'00:a0:c6:00:00:00',
'd2:6b:25:2f:2c:e7',
'33:50:6f:45:30:30',
'0a:00:27:00:00:00',
'00:50:56:C0:00:01',
'00:50:56:C0:00:08',
'02:80:37:EC:02:00',
'50:50:54:50:30:30',
'24:b6:20:52:41:53',
'00:50:56:C0:00:02',
'00:50:56:C0:00:03',
'00:50:56:C0:00:04',
'FE:FF:FF:FF:FF:FF',
'00:00:00:00:00:00',
'00:0b:ca:fe:00:00'];
foreach ($a_input as $value) {
$iterator = $DB->request([
'FROM' => $newTable,
'WHERE' => [
'plugin_fusioninventory_criterium_id' => $a_criteria['macAddress'],
'value' => $value
]
]);
if (!count($iterator)) {
$DB->insert(
$newTable, [
'plugin_fusioninventory_criterium_id' => $a_criteria['macAddress'],
'value' => $value
]
);
}
}
// * smodel
$a_input = [
'Unknow',
'To Be Filled By O.E.M.',
'*',
'System Product Name',
'Product Name',
'System Name',
'All Series'];
foreach ($a_input as $value) {
$iterator = $DB->request([
'FROM' => $newTable,
'WHERE' => [
'plugin_fusioninventory_criterium_id' => $a_criteria['smodel'],
'value' => $value
]
]);
if (!count($iterator)) {
$DB->insert(
$newTable, [
'plugin_fusioninventory_criterium_id' => $a_criteria['smodel'],
'value' => $value
]
);
}
}
// * manufacturer
$a_input = ['System manufacturer'];
foreach ($a_input as $value) {
$iterator = $DB->request([
'FROM' => $newTable,
'WHERE' => [
'plugin_fusioninventory_criterium_id' => $a_criteria['manufacturer'],
'value' => $value
]
]);
if (!count($iterator)) {
$DB->insert(
$newTable, [
'plugin_fusioninventory_criterium_id' => $a_criteria['manufacturer'],
'value' => $value
]
);
}
}
// * ip
$iterator = $DB->request([
'FROM' => 'glpi_plugin_fusioninventory_inventorycomputercriterias',
'WHERE' => ['name' => 'IP']
]);
if (!count($iterator)) {
$DB->insert(
'glpi_plugin_fusioninventory_inventorycomputercriterias', [
'id' => 11,
'name' => 'IP',
'comment' => 'IP'
]
);
}
$a_criteria = [];
$iterator = $DB->request(['FROM' => 'glpi_plugin_fusioninventory_inventorycomputercriterias']);
while ($data = $iterator->next()) {
$a_criteria[$data['comment']] = $data['id'];
}
$a_input = ['0.0.0.0'];
foreach ($a_input as $value) {
$iterator = $DB->request([
'FROM' => $newTable,
'WHERE' => [
'plugin_fusioninventory_criterium_id' => $a_criteria['IP'],
'value' => $value
]
]);
if (!count($iterator)) {
$DB->insert(
$newTable, [
'plugin_fusioninventory_criterium_id' => $a_criteria['IP'],
'value' => $value
]
);
}
}
changeDisplayPreference("PluginFusinvinventoryBlacklist",
"PluginFusioninventoryInventoryComputerBlacklist");
}
/**
* Manage the rules matched log part migration
*
* @global object $DB
* @param object $migration
*/
function do_rulematchedlog_migration($migration) {
global $DB;
/*
* Table glpi_plugin_fusioninventory_rulematchedlogs
*/
$newTable = "glpi_plugin_fusioninventory_rulematchedlogs";
if (!$DB->tableExists($newTable)) {
$query = "CREATE TABLE `".$newTable."` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1";
$DB->query($query);
}
$migration->changeField($newTable,
"id",
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->migrationOneTable($newTable);
$migration->addField($newTable,
"date",
"datetime DEFAULT NULL");
$migration->addField($newTable,
"items_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"itemtype",
"varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->addField($newTable,
"rules_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"plugin_fusioninventory_agents_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"method",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->addField($newTable,
"criteria",
'text COLLATE utf8_unicode_ci DEFAULT NULL');
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
}
/**
* Manage the antivirus part migration
*
* @global object $DB
* @param object $migration
*/
function do_antivirus_migration($migration) {
/*
* Table glpi_plugin_fusioninventory_inventorycomputerantiviruses
*/
$newTable = "glpi_plugin_fusioninventory_inventorycomputerantiviruses";
$migration->renameTable("glpi_plugin_fusinvinventory_antivirus", $newTable);
}
/**
* Manage the computer extended part migration
*
* @global object $DB
* @param object $migration
*/
function do_computercomputer_migration($migration) {
global $DB;
/*
* Table glpi_plugin_fusioninventory_inventorycomputercomputers
*/
if ($DB->tableExists("glpi_plugin_fusinvinventory_computers")
&& $DB->fieldExists("glpi_plugin_fusinvinventory_computers", "uuid")) {
$Computer = new Computer();
$iterator = $DB->request(['FROM' => 'glpi_plugin_fusinvinventory_computers']);
while ($data = $iterator->next()) {
if ($Computer->getFromDB($data['items_id'])) {
$input = [
'id' => $data['items_id'],
'uuid' => $data['uuid']
];
$Computer->update($input);
}
}
$sql = "DROP TABLE `glpi_plugin_fusinvinventory_computers`";
$DB->query($sql);
}
if ($DB->tableExists("glpi_plugin_fusinvinventory_tmp_agents")) {
$sql = "DROP TABLE `glpi_plugin_fusinvinventory_tmp_agents`";
$DB->query($sql);
}
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_inventorycomputercomputers';
$a_table['oldname'] = ['glpi_plugin_fusinvinventory_computers'];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['computers_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['operatingsystem_installationdate'] = ['type' => 'datetime',
'value' => null];
$a_table['fields']['winowner'] = ['type' => 'string',
'value' => null];
$a_table['fields']['wincompany'] = ['type' => 'string',
'value' => null];
$a_table['fields']['last_fusioninventory_update'] = ['type' => 'datetime',
'value' => null];
$a_table['fields']['remote_addr'] = ['type' => 'string',
'value' => null];
$a_table['fields']['serialized_inventory'] = ['type' => 'longblob',
'value' => null];
$a_table['fields']['is_entitylocked'] = ['type' => 'bool',
'value' => "0"];
$a_table['fields']['oscomment'] = ['type' => 'text',
'value' => null];
$a_table['fields']['last_boot'] = ['type' => 'datetime',
'value' => null];
$a_table['oldfields'] = [
'plugin_fusioninventory_computerarchs_id',
'bios_assettag',
'bios_date',
'bios_version',
'bios_manufacturers_id'
];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'computers_id', 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'last_fusioninventory_update', 'name' => '', 'type' => 'INDEX'];
$a_table['oldkeys'] = [];
do_biosascomponentmigration();
migrateTablesFusionInventory($migration, $a_table);
// Migrate libserialization
require_once(PLUGIN_FUSIONINVENTORY_DIR . "/inc/inventorycomputercomputer.class.php");
$pfInventoryComputerComputer = new PluginFusioninventoryInventoryComputerComputer();
if ($DB->tableExists('glpi_plugin_fusinvinventory_libserialization')) {
$iterator = $DB->request(['FROM' => 'glpi_plugin_fusinvinventory_libserialization']);
while ($data = $iterator->next()) {
$a_pfcomputer = current($pfInventoryComputerComputer->find(
['computers_id' => $data['computers_id']],
[], 1));
if (empty($a_pfcomputer)) {
// Add
if (countElementsInTable("glpi_computers",
['id' => $data['computers_id']]) > 0) {
$input = [];
$input['computers_id'] = $data['computers_id'];
$input['last_fusioninventory_update'] = $data['last_fusioninventory_update'];
$pfInventoryComputerComputer->add($input);
}
} else {
// Update
$a_pfcomputer['last_fusioninventory_update'] = $data['last_fusioninventory_update'];
$pfInventoryComputerComputer->update($a_pfcomputer);
}
}
}
$migration->dropTable('glpi_plugin_fusinvinventory_libserialization');
/*
* Manage devices with is_dynamic
*/
$iterator = $DB->request(['FROM' => 'glpi_plugin_fusioninventory_inventorycomputercomputers']);
if (count($iterator)) {
$update = $DB->buildUpdate(
'glpi_computers', [
'is_dynamic' => 1
], [
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($update);
while ($data = $iterator->next()) {
$stmt->bind_param('s', $data['computers_id']);
$stmt->execute();
}
mysqli_stmt_close($stmt);
}
}
/**
* A firmware component with a BIOS type has been added in GLPI 9.2
*
* @return void
*/
function do_biosascomponentmigration() {
global $DB;
//BIOS as a component
if ($DB->tableExists('glpi_plugin_fusioninventory_inventorycomputercomputers') &&
($DB->fieldExists('glpi_plugin_fusioninventory_inventorycomputercomputers', 'bios_date')
|| $DB->fieldExists('glpi_plugin_fusioninventory_inventorycomputercomputers', 'bios_version')
|| $DB->fieldExists('glpi_plugin_fusioninventory_inventorycomputercomputers', 'bios_manufacturers_id'))
) {
$bioses = [];
//retrieve exiting
$query = "SELECT computers_id, bios_date, bios_version, bios_manufacturers_id, glpi_manufacturers.name AS mname
FROM glpi_plugin_fusioninventory_inventorycomputercomputers
LEFT JOIN glpi_manufacturers
ON glpi_plugin_fusioninventory_inventorycomputercomputers.bios_manufacturers_id = glpi_manufacturers.id
WHERE
bios_date IS NOT NULL AND bios_date != ''
OR bios_version IS NOT NULL AND bios_version != ''
OR bios_manufacturers_id != 0";
$result = $DB->query($query);
$deviceBios = new DeviceFirmware();
$item_DeviceBios = new Item_DeviceFirmware();
while ($data = $DB->fetchArray($result)) {
$key = md5($data['bios_date'] . $data['bios_version']. $data['bios_manufacturers_id']);
if (!isset($bioses[$key])) {
//look for an existing BIOS in the database
$iterator = $DB->request([
'SELECT' => 'id',
'FROM' => 'glpi_devicefirmwares',
'WHERE' => [
'date' => $data['bios_date'],
'version' => $data['bios_version'],
'manufacturers_id' => $data['bios_manufacturers_id']
],
'START' => 0,
'LIMIT' => 1
]);
if (count($iterator)) {
$existing = $iterator->next();
$bioses[$key] = $existing['id'];
} else {
$designation = sprintf(
__('%1$s BIOS'),
$data['mname']
);
//not found in database, create it
$deviceBios->add(
[
'designation' => $designation,
'date' => $data['bios_date'],
'version' => $data['bios_version'],
'manufacturers_id' => $data['bios_manufacturers_id']
]
);
$bioses[$key] = $deviceBios->getID();
}
}
//attach found/created component to computer
$item_DeviceBios->add(
[
'items_id' => $data['computers_id'],
'itemtype' => 'Computer',
'devicefirmwares_id' => $bioses[$key],
'is_dynamic' => 1
]
);
}
}
}
/**
* Manage the computer inventory staistics part migration
*
* @param object $migration
*/
function do_computerstat_migration($migration) {
global $DB;
/*
* Table glpi_plugin_fusioninventory_inventorycomputerstats
*/
if (!$DB->tableExists("glpi_plugin_fusioninventory_inventorycomputerstats")) {
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_inventorycomputerstats';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => "smallint(3) NOT NULL AUTO_INCREMENT",
'value' => ''];
$a_table['fields']['day'] = ['type' => "smallint(3) NOT NULL DEFAULT '0'",
'value' => ''];
$a_table['fields']['hour'] = ['type' => "tinyint(2) NOT NULL DEFAULT '0'",
'value' => ''];
$a_table['fields']['counter'] = ['type' => 'integer',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
require_once(PLUGIN_FUSIONINVENTORY_DIR . "/inc/inventorycomputerstat.class.php");
PluginFusioninventoryInventoryComputerStat::init();
}
}
/**
* Manage the configuration log fields (for network equipment and printer)
* part migration
*
* @global object $DB
* @param object $migration
*/
function do_configlogfield_migration($migration) {
global $DB;
/*
* glpi_plugin_fusioninventory_configlogfields
*/
$newTable = "glpi_plugin_fusioninventory_configlogfields";
$migration->renameTable("glpi_plugin_fusioninventory_config_snmp_history",
$newTable);
$migration->renameTable("glpi_plugin_fusinvsnmp_configlogfields",
$newTable);
if ($DB->tableExists($newTable)) {
if ($DB->fieldExists($newTable, "field")) {
$iterator = $DB->request(['FROM' => $newTable]);
while ($data = $iterator->next()) {
$pfMapping = new PluginFusioninventoryMapping();
$mapping = 0;
if ($mapping = $pfMapping->get("NetworkEquipment", $data['field'])) {
$DB->update(
$newTable, [
'field' => $mapping['id']
], [
'field' => $data['field']
]
);
}
}
}
}
if (!$DB->tableExists($newTable)) {
$query = "CREATE TABLE `".$newTable."` (
`id` int(8) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1";
$DB->query($query);
}
$migration->changeField($newTable,
"ID",
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"id",
"id",
"int(8) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"plugin_fusioninventory_mappings_id",
"plugin_fusioninventory_mappings_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"days",
"days",
"int(255) NOT NULL DEFAULT '-1'");
$migration->migrationOneTable($newTable);
$migration->changeField($newTable,
"ID",
"id",
"int(8) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"field",
"plugin_fusioninventory_mappings_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->migrationOneTable($newTable);
$migration->addField($newTable,
"id",
"int(8) NOT NULL AUTO_INCREMENT");
$migration->addField($newTable,
"plugin_fusioninventory_mappings_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"days",
"int(255) NOT NULL DEFAULT '-1'");
$migration->addKey($newTable,
"plugin_fusioninventory_mappings_id");
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
$configLogField = new PluginFusioninventoryConfigLogField();
$configLogField->initConfig();
}
/**
* Manage the network port part migration
*
* @global object $DB
* @param object $migration
*/
function do_networkport_migration($migration) {
global $DB;
/*
* Table glpi_plugin_fusioninventory_networkportconnectionlogs
*/
$newTable = "glpi_plugin_fusioninventory_networkportconnectionlogs";
$migration->renameTable("glpi_plugin_fusinvsnmp_networkportconnectionlogs",
$newTable);
if (!$DB->tableExists($newTable)) {
$DB->query('CREATE TABLE `'.$newTable.'` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1');
}
$migration->changeField($newTable,
"ID",
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"id",
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"date",
"date_mod",
"datetime DEFAULT NULL");
$migration->changeField($newTable,
"date_mod",
"date_mod",
"datetime DEFAULT NULL");
$migration->changeField($newTable,
"creation",
"creation",
"tinyint(1) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"FK_port_source",
"networkports_id_source",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"networkports_id_source",
"networkports_id_source",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"FK_port_destination",
"networkports_id_destination",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"networkports_id_destination",
"networkports_id_destination",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"plugin_fusioninventory_agentprocesses_id",
"plugin_fusioninventory_agentprocesses_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->dropField($newTable, "process_number");
$migration->migrationOneTable($newTable);
$migration->addField($newTable,
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->addField($newTable,
"date_mod",
"datetime DEFAULT NULL");
$migration->addField($newTable,
"creation",
"tinyint(1) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"networkports_id_source",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"networkports_id_destination",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"plugin_fusioninventory_agentprocesses_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addKey($newTable,
["networkports_id_source",
"networkports_id_destination",
"plugin_fusioninventory_agentprocesses_id"],
"networkports_id_source");
$migration->addKey($newTable,
"date_mod");
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
/*
* Table glpi_plugin_fusioninventory_networkporttypes
*/
$newTable = "glpi_plugin_fusioninventory_networkporttypes";
$migration->renameTable("glpi_plugin_fusinvsnmp_networkporttypes",
$newTable);
if (!$DB->tableExists($newTable)) {
$query = "CREATE TABLE `".$newTable."` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1";
$DB->query($query);
}
$migration->changeField($newTable,
"id",
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"name",
"name",
"varchar(255) DEFAULT NULL");
$migration->changeField($newTable,
"number",
"number",
"int(4) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"othername",
"othername",
"varchar(255) DEFAULT NULL");
$migration->changeField($newTable,
"import",
"import",
"tinyint(1) NOT NULL DEFAULT '0'");
$migration->migrationOneTable($newTable);
$migration->addField($newTable,
"name",
"varchar(255) DEFAULT NULL");
$migration->addField($newTable,
"number",
"int(4) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"othername",
"varchar(255) DEFAULT NULL");
$migration->addField($newTable,
"import",
"tinyint(1) NOT NULL DEFAULT '0'");
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
/*
* glpi_plugin_fusioninventory_networkports
*/
$newTable = "glpi_plugin_fusioninventory_networkports";
$migration->renameTable("glpi_plugin_fusinvsnmp_networkports",
$newTable);
$migration->renameTable("glpi_plugin_tracker_networking_ports",
$newTable);
if (!$DB->tableExists($newTable)) {
$DB->query('CREATE TABLE `'.$newTable.'` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1');
}
$migration->changeField($newTable,
"id",
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"networkports_id",
"networkports_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"ifmtu",
"ifmtu",
"int(8) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"ifspeed",
"ifspeed",
"bigint(50) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"ifinternalstatus",
"ifinternalstatus",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->changeField($newTable,
"ifconnectionstatus",
"ifconnectionstatus",
"int(8) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"iflastchange",
"iflastchange",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->changeField($newTable,
"ifinoctets",
"ifinoctets",
"bigint(50) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"ifinerrors",
"ifinerrors",
"bigint(50) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"ifoutoctets",
"ifoutoctets",
"bigint(50) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"ifouterrors",
"ifouterrors",
"bigint(50) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"ifstatus",
"ifstatus",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->changeField($newTable,
"mac",
"mac",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->changeField($newTable,
"ifdescr",
"ifdescr",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->changeField($newTable,
"portduplex",
"portduplex",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->changeField($newTable,
"trunk",
"trunk",
"tinyint(1) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"lastup",
"lastup",
"datetime DEFAULT NULL");
$migration->migrationOneTable($newTable);
$migration->changeField($newTable,
"ID",
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"FK_networking_ports",
"networkports_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"ifmac",
"mac",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->dropKey($newTable,
"FK_networking_ports");
$migration->migrationOneTable($newTable);
$migration->addField($newTable,
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->addField($newTable,
"networkports_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"ifmtu",
"int(8) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"ifspeed",
"bigint(50) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"ifinternalstatus",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->addField($newTable,
"ifconnectionstatus",
"int(8) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"iflastchange",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->addField($newTable,
"ifinoctets",
"bigint(50) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"ifinerrors",
"bigint(50) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"ifoutoctets",
"bigint(50) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"ifouterrors",
"bigint(50) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"ifstatus",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->addField($newTable,
"mac",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->addField($newTable,
"ifdescr",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->addField($newTable,
"ifalias",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->addField($newTable,
"portduplex",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->addField($newTable,
"trunk",
"tinyint(1) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"lastup",
"datetime DEFAULT NULL");
$migration->addKey($newTable,
"networkports_id");
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
/*
* Table glpi_plugin_fusioninventory_networkportlogs
*/
$newTable = "glpi_plugin_fusioninventory_networkportlogs";
if ($DB->tableExists("glpi_plugin_tracker_snmp_history")) {
// **** Update history
update213to220_ConvertField($migration);
// **** Migration network history connections
$iterator = $DB->request([
'FROM' => 'glpi_plugin_tracker_snmp_history',
'COUNT' => 'cpt',
'WHERE' => ['Field' => 0]
]);
$datas = $iterator->next();
$nb = $datas['cpt'];
//echo "Move Connections history to another table...";
for ($i=0; $i < $nb; $i = $i + 500) {
$migration->displayMessage("$i / $nb");
$iterator = $DB->request([
'FROM' => 'glpi_plugin_tracker_snmp_history',
'WHERE' => ['Field' => 0],
'ORDER' => ['FK_process DESC', 'date_mod DESC'],
'LIMIT' => 500
]);
while ($thread_connection = $iterator->next()) {
$input = [];
$input['process_number'] = $thread_connection['FK_process'];
$input['date'] = $thread_connection['date_mod'];
if (($thread_connection["old_device_ID"] != "0")
OR ($thread_connection["new_device_ID"] != "0")) {
if ($thread_connection["old_device_ID"] != "0") {
// disconnection
$input['creation'] = '0';
} else if ($thread_connection["new_device_ID"] != "0") {
// connection
$input['creation'] = '1';
}
$input['FK_port_source'] = $thread_connection["FK_ports"];
$dataPort = [];
$portvalue = null;
if ($thread_connection["old_device_ID"] != "0") {
$portvalue = $thread_connection['old_value'];
} else if ($thread_connection["new_device_ID"] != "0") {
$portvalue = $thread_connection['new_value'];
}
if ($portvalue != null) {
$port_iterator = $DB->request([
'FROM' => 'glpi_networkports',
'WHERE' => ['mac' => $thread_connection['old_value']],
'LIMIT' => 1
]);
$dataPort = $port_iterator->next();
}
if (isset($dataPort['id'])) {
$input['FK_port_destination'] = $dataPort['id'];
} else {
$input['FK_port_destination'] = 0;
}
$DB->insert(
'glpi_plugin_fusinvsnmp_networkportconnectionlogs', [
'date_mod' => $input['date'],
'creation' => $input['creation'],
'networkports_id_source' => $data['FK_port_source'],
'networkports_id_destination' => $data['FK_port_destination']
]
);
}
}
}
$DB->delete(
'glpi_plugin_tracker_snmp_history', [
'Field' => 0,
'OR' => [
'old_device_ID' => ['!=', 0],
'new_device_ID' => ['!=', 0],
]
]
);
$migration->displayMessage("$nb / $nb");
}
$migration->renameTable("glpi_plugin_fusinvsnmp_networkportlogs",
$newTable);
$migration->renameTable("glpi_plugin_tracker_snmp_history",
$newTable);
if (!$DB->tableExists($newTable)) {
$query = "CREATE TABLE `".$newTable."` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1";
$DB->query($query);
}
$migration->changeField($newTable,
"id",
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"networkports_id",
"networkports_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"plugin_fusioninventory_mappings_id",
"plugin_fusioninventory_mappings_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"date_mod",
"date_mod",
"datetime DEFAULT NULL");
$migration->changeField($newTable,
"value_old",
"value_old",
"varchar(255) DEFAULT NULL");
$migration->changeField($newTable,
"value_new",
"value_new",
"varchar(255) DEFAULT NULL");
$migration->changeField($newTable,
"plugin_fusioninventory_agentprocesses_id",
"plugin_fusioninventory_agentprocesses_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->migrationOneTable($newTable);
$migration->changeField($newTable,
"ID",
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"FK_ports",
"networkports_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"plugin_fusioninventory_mappings_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->migrationOneTable($newTable);
// Update with mapping
if ($DB->fieldExists($newTable, "Field")) {
$pfMapping = new PluginFusioninventoryMapping();
$iterator = $DB->request([
'FROM' => $newTable,
'GROUPBY' => 'Field'
]);
while ($data = $iterator->next()) {
$mapping = 0;
if ($mapping = $pfMapping->get("NetworkEquipment", $data['Field'])) {
$DB->update(
$newTable, [
'plugin_fusioninventory_mappings_id' => $mapping['id']
], [
'Field' => $data['Field'],
'plugin_fusioninventory_mappings_id' => ['!=', $mapping['id']]
]
);
}
}
}
$migration->dropField($newTable,
"Field");
$migration->changeField($newTable,
"old_value",
"value_old",
"varchar(255) DEFAULT NULL");
$migration->dropField($newTable,
"old_device_type");
$migration->dropField($newTable,
"old_device_ID");
$migration->changeField($newTable,
"new_value",
"value_new",
"varchar(255) DEFAULT NULL");
$migration->dropField($newTable,
"new_device_type");
$migration->dropField($newTable,
"new_device_ID");
$migration->dropField($newTable, "FK_process");
$migration->dropKey($newTable, "FK_process");
$migration->dropKey($newTable,
"FK_ports");
$migration->migrationOneTable($newTable);
$migration->addField($newTable,
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->addField($newTable,
"networkports_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"plugin_fusioninventory_mappings_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"date_mod",
"datetime DEFAULT NULL");
$migration->addField($newTable,
"value_old",
"varchar(255) DEFAULT NULL");
$migration->addField($newTable,
"value_new",
"varchar(255) DEFAULT NULL");
$migration->addField($newTable,
"plugin_fusioninventory_agentprocesses_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addKey($newTable,
["networkports_id", "date_mod"],
"networkports_id");
$migration->addKey($newTable,
"plugin_fusioninventory_mappings_id");
$migration->addKey($newTable,
"plugin_fusioninventory_agentprocesses_id");
$migration->addKey($newTable,
"date_mod");
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
/*
* Update networports to convert itemtype 5153 to PluginFusioninventoryUnknownDevice
*/
$DB->update(
'glpi_networkports', [
'itemtype' => 'PluginFusioninventoryUnmanaged'
], [
'itemtype' => [5153, 'PluginFusioninventoryUnknownDevice']
]
);
$DB->update(
'glpi_networkports', [
'itemtype' => 'PluginFusioninventoryTask'
], [
'itemtype' => 5166
]
);
/*
* Clean for port orphelin
*/
//networkports with item_type = 0
$NetworkPort = new NetworkPort();
$NetworkPort_Vlan = new NetworkPort_Vlan();
$NetworkPort_NetworkPort = new NetworkPort_NetworkPort();
$a_networkports = $NetworkPort->find(['itemtype' => '']);
foreach ($a_networkports as $data) {
if ($NetworkPort_NetworkPort->getFromDBForNetworkPort($data['id'])) {
$NetworkPort_NetworkPort->delete($NetworkPort_NetworkPort->fields);
}
$a_vlans = $NetworkPort_Vlan->find(['networkports_id' => $data['id']]);
foreach ($a_vlans as $a_vlan) {
$NetworkPort_Vlan->delete($a_vlan);
}
$NetworkPort->delete($data, 1);
}
/*
* Clean old ports deleted but have some informations in SNMP tables
*/
$query_select = "SELECT `glpi_plugin_fusioninventory_networkports`.`id`
FROM `glpi_plugin_fusioninventory_networkports`
LEFT JOIN `glpi_networkports`
ON `glpi_networkports`.`id` = `networkports_id`
LEFT JOIN `glpi_networkequipments`
ON `glpi_networkequipments`.`id` = `glpi_networkports`.`items_id`
WHERE `glpi_networkequipments`.`id` IS NULL";
$result=$DB->query($query_select);
while ($data=$DB->fetchArray($result)) {
$DB->delete(
'glpi_plugin_fusioninventory_networkports', [
'id' => $data['id']
]
);
}
changeDisplayPreference("5162", "PluginFusinvsnmpNetworkPortLog");
// If no PluginFusioninventoryNetworkPort in preferences, add them
$iterator = $DB->request([
'FROM' => 'glpi_displaypreferences',
'WHERE' => [
'itemtype' => 'PluginFusioninventoryNetworkPort',
'users_id' => 0
]
]);
if (!count($iterator)) {
$insert = $DB->buildInsert(
'glpi_displaypreferences', [
'itemtype' => 'PluginFusioninventoryNetworkPort',
'num' => new \QueryParam(),
'rank' => new \QueryParam(),
'users_id' => 0
]
);
$stmt = $DB->prepare($insert);
$insert_data = [
[3, 1],
[5, 2],
[6, 3],
[7, 4],
[8, 5],
[9, 6],
[10, 7],
[11, 8],
[12, 9],
[13, 10],
[14, 11]
];
foreach ($insert_data as $idata) {
$stmt->bind_param(
'ss',
$idata[0],
$idata[1]
);
}
}
// Update networkports types
$pfNetworkporttype = new PluginFusioninventoryNetworkporttype();
$pfNetworkporttype->init();
// Define lastup field of fusion networkports
$iterator = $DB->request([
'FROM' => 'glpi_plugin_fusioninventory_mappings',
'WHERE' => ['name' => 'ifstatus'],
'LIMIT' => 1
]);
while ($data = $iterator->next()) {
$iterator_np = $DB->request(['FROM' => 'glpi_plugin_fusioninventory_networkports']);
while ($data_np = $iterator_np->next()) {
$iterator_npplog = $DB->request([
'FROM' => 'glpi_plugin_fusioninventory_networkportlogs',
'WHERE' => [
'networkports_id' => $data_np['networkports_id'],
'plugin_fusioninventory_mappings_id' => $data['id']
],
'ORDER' => 'date_mod DESC',
'LIMIT' => 1
]);
while ($data_nplog = $iterator_npplog->next()) {
$DB->update(
'glpi_plugin_fusioninventory_networkports', [
'lastup' => $data_nplog['date_mod']
], [
'id' => $data_np['id']
]
);
}
}
}
}
/**
* Manage the printer part migration
*
* @global object $DB
* @param object $migration
*/
function do_printer_migration($migration) {
global $DB;
/*
* Table glpi_plugin_fusioninventory_printers
*/
$newTable = "glpi_plugin_fusioninventory_printers";
$migration->renameTable("glpi_plugin_fusinvsnmp_printers",
$newTable);
$migration->renameTable("glpi_plugin_tracker_printers",
$newTable);
if (!$DB->tableExists($newTable)) {
$DB->query('CREATE TABLE `'.$newTable.'` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1');
}
$migration->changeField($newTable,
"id",
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"printers_id",
"printers_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"sysdescr",
"sysdescr",
"text COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->changeField($newTable,
"plugin_fusinvsnmp_configsecurities_id",
"plugin_fusioninventory_configsecurities_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"plugin_fusioninventory_configsecurities_id",
"plugin_fusioninventory_configsecurities_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"frequence_days",
"frequence_days",
"int(5) NOT NULL DEFAULT '1'");
$migration->changeField($newTable,
"last_fusioninventory_update",
"last_fusioninventory_update",
"datetime DEFAULT NULL");
$migration->migrationOneTable($newTable);
$migration->changeField($newTable,
"ID",
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"FK_printers",
"printers_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"FK_snmp_connection",
"plugin_fusioninventory_configsecurities_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"last_tracker_update",
"last_fusioninventory_update",
"datetime DEFAULT NULL");
$migration->dropKey($newTable,
"FK_printers");
$migration->dropKey($newTable,
"FK_snmp_connection");
$migration->dropKey($newTable,
"plugin_fusioninventory_snmpmodels_id");
$migration->migrationOneTable($newTable);
$migration->dropField($newTable,
"plugin_fusinvsnmp_models_id");
$migration->dropField($newTable,
"plugin_fusioninventory_snmpmodels_id");
$migration->dropField($newTable,
"FK_model_infos");
$migration->addField($newTable,
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->addField($newTable,
"printers_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"sysdescr",
"text COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->addField($newTable,
"plugin_fusioninventory_configsecurities_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"frequence_days",
"int(5) NOT NULL DEFAULT '1'");
$migration->addField($newTable,
"last_fusioninventory_update",
"datetime DEFAULT NULL");
$migration->addField($newTable,
"serialized_inventory",
"longblob");
$migration->addKey($newTable,
"plugin_fusioninventory_configsecurities_id");
$migration->addKey($newTable,
"printers_id");
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
/*
* Table glpi_plugin_fusioninventory_printerlogs
*/
$newTable = "glpi_plugin_fusioninventory_printerlogs";
$migration->renameTable("glpi_plugin_fusinvsnmp_printerlogs",
$newTable);
$migration->renameTable("glpi_plugin_tracker_printers_history",
$newTable);
if (!$DB->tableExists($newTable)) {
$DB->query('CREATE TABLE `'.$newTable.'` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1');
}
$migration->changeField($newTable,
"id",
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"printers_id",
"printers_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"date",
"date",
"datetime DEFAULT NULL");
$migration->changeField($newTable,
"pages_total",
"pages_total",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"pages_n_b",
"pages_n_b",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"pages_color",
"pages_color",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"pages_recto_verso",
"pages_recto_verso",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"scanned",
"scanned",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"pages_total_print",
"pages_total_print",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"pages_n_b_print",
"pages_n_b_print",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"pages_color_print",
"pages_color_print",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"pages_total_copy",
"pages_total_copy",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"pages_n_b_copy",
"pages_n_b_copy",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"pages_color_copy",
"pages_color_copy",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"pages_total_fax",
"pages_total_fax",
"int(11) NOT NULL DEFAULT '0'");
$migration->migrationOneTable($newTable);
$migration->changeField($newTable,
"ID",
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"FK_printers",
"printers_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->migrationOneTable($newTable);
$migration->addField($newTable,
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->addField($newTable,
"printers_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"date",
"datetime DEFAULT NULL");
$migration->addField($newTable,
"pages_total",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"pages_n_b",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"pages_color",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"pages_recto_verso",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"scanned",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"pages_total_print",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"pages_n_b_print",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"pages_color_print",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"pages_total_copy",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"pages_n_b_copy",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"pages_color_copy",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"pages_total_fax",
"int(11) NOT NULL DEFAULT '0'");
$migration->addKey($newTable,
["printers_id", "date"],
"printers_id");
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
/*
* glpi_plugin_fusioninventory_printercartridges
*/
$newTable = "glpi_plugin_fusioninventory_printercartridges";
$migration->renameTable("glpi_plugin_fusinvsnmp_printercartridges",
$newTable);
$migration->renameTable("glpi_plugin_tracker_printers_cartridges",
$newTable);
if (!$DB->tableExists($newTable)) {
$DB->query('CREATE TABLE `'.$newTable.'` (
`id` bigint(100) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1');
}
$migration->changeField($newTable,
"id",
"id",
"bigint(100) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"printers_id",
"printers_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"plugin_fusioninventory_mappings_id",
"plugin_fusioninventory_mappings_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"cartridges_id",
"cartridges_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"state",
"state",
"int(3) NOT NULL DEFAULT '100'");
$migration->migrationOneTable($newTable);
$migration->changeField($newTable,
"ID",
"id",
"bigint(100) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"FK_printers",
"printers_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"FK_cartridges",
"cartridges_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"plugin_fusioninventory_mappings_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->migrationOneTable($newTable);
// Update with mapping
if ($DB->fieldExists($newTable, "object_name")) {
$iterator = $DB->request([
'FROM' => $newTable,
'GROUP' => 'object_name'
]);
while ($data = $iterator->next()) {
$pfMapping = new PluginFusioninventoryMapping();
$mapping = 0;
if (($mapping = $pfMapping->get("Printer", $data['object_name']))) {
$DB->update(
$newTable, [
'plugin_fusioninventory_mappings_id' => $mapping['id']
], [
'object_name' => $data['object_name']
]
);
}
}
}
$migration->dropField($newTable,
"object_name");
$migration->migrationOneTable($newTable);
$migration->addField($newTable,
"id",
"bigint(100) NOT NULL AUTO_INCREMENT");
$migration->addField($newTable,
"printers_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"plugin_fusioninventory_mappings_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"cartridges_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"state",
"int(3) NOT NULL DEFAULT '100'");
$migration->addKey($newTable,
"printers_id");
$migration->addKey($newTable,
"plugin_fusioninventory_mappings_id");
$migration->addKey($newTable,
"cartridges_id");
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
/*
* Clean for printer more informations again in DB when printer is purged
*/
//echo "Clean for printer more informations again in DB when printer is purged\n";
$iterator = $DB->request([
'SELECT' => 'glpi_plugin_fusioninventory_printers.id',
'FROM' => 'glpi_plugin_fusioninventory_printers',
'LEFT JOIN' => [
'glpi_printers' => [
'FKEY' => [
'glpi_plugin_fusioninventory_printers' => 'printers_id',
'glpi_printers' => 'id'
]
]
],
'WHERE' => ['glpi_printers.id' => null]
]);
if (count($iterator)) {
$delete = $DB->buildDelete(
'glpi_plugin_fusioninventory_printers', [
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($delete);
while ($data = $iterator->next()) {
$stmt->bind_param('s', $data['id']);
$stmt->execute();
}
mysqli_stmt_close($stmt);
}
/*
* Clean printer cartridge not deleted with the printer associated
*/
//echo "Clean printer cartridge not deleted with the printer associated\n";
$iterator = $DB->request([
'SELECT' => 'glpi_plugin_fusioninventory_printercartridges.id',
'FROM' => 'glpi_plugin_fusioninventory_printercartridges',
'LEFT JOIN' => [
'glpi_printers' => [
'FKEY' => [
'glpi_plugin_fusioninventory_printercartridges' => 'printers_id',
'glpi_printers' => 'id'
]
]
],
'WHERE' => ['glpi_printers.id' => null]
]);
$stmt = null;
while ($data = $iterator->next()) {
$DB->delete(
'glpi_plugin_fusioninventory_printercartridges', [
'id' => $data['id']
]
);
changeDisplayPreference("5168", "PluginFusioninventoryPrinterLogReport");
changeDisplayPreference("PluginFusinvsnmpPrinterLogReport",
"PluginFusioninventoryPrinterLogReport");
changeDisplayPreference("5156", "PluginFusinvsnmpPrinterCartridge");
/*
* Modify displaypreference for PluginFusioninventoryPrinterLog
*/
$pfPrinterLogReport = new PluginFusioninventoryPrinterLog();
$a_searchoptions = $pfPrinterLogReport->rawSearchOptions();
$iterator2 = $DB->request([
'FROM' => 'glpi_displaypreferences',
'WHERE' => [
'itemtype' => 'PluginFusioninventoryPrinterLogReport',
'users_id' => 0
]
]);
if (!count($iterator2)) {
if ($stmt === null) {
$insert = $DB->buildInsert(
'glpi_displaypreferences', [
'itemtype' => 'PluginFusioninventoryPrinterLogReport',
'num' => new \QueryParam(),
'rank' => new \QueryParam(),
'users_id' => 0
]
);
$stmt = $DB->prepare($insert);
}
$insert_data = [
[2, 1],
[18, 2],
[20, 3],
[5, 4],
[6, 5]
];
foreach ($insert_data as $idata) {
$stmt->bind_param(
'ss',
$idata[0],
$idata[1]
);
$stmt->execute();
}
} else {
while ($data = $iterator2->next()) {
$delete = true;
foreach ($a_searchoptions as $searchoption) {
if ($searchoption['id'] == $data['num']) {
$delete = false;
continue;
}
}
if ($delete) {
$DB->delete(
'glpi_displaypreferences', [
'id' => $data['id']
]
);
}
}
}
}
if ($stmt !== null) {
mysqli_stmt_close($stmt);
}
/*
* Clean printer history not deleted with printer associated
*/
//echo "Clean printer history not deleted with printer associated\n";
$iterator = $DB->request([
'SELECT' => 'glpi_plugin_fusioninventory_printerlogs.id',
'FROM' => 'glpi_plugin_fusioninventory_printerlogs',
'LEFT JOIN' => [
'glpi_printers' => [
'FKEY' => [
'glpi_plugin_fusioninventory_printerlogs' => 'printers_id',
'glpi_printers' => 'id'
]
]
],
'WHERE' => ['glpi_printers.id' => null]
]);
if (count($iterator)) {
$delete = $DB->buildDelete(
'glpi_plugin_fusioninventory_printerlogs', [
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($delete);
while ($data = $iterator->next()) {
$stmt->bind_param('s', $data['id']);
$stmt->execute();
}
mysqli_stmt_close($stmt);
}
/*
* Manage devices with is_dynamic
*/
$iterator = $DB->request(['FROM' => 'glpi_plugin_fusioninventory_printers']);
if (count($iterator)) {
$update = $DB->buildUpdate(
'glpi_printers', [
'is_dynamic' => 1
], [
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($update);
while ($data = $iterator->next()) {
$stmt->bind_param('s', $data['printers_id']);
$stmt->execute();
}
mysqli_stmt_close($stmt);
}
$migration->displayMessage("Clean printers");
/*
* Remove / at the end of printers (bugs in older versions of agents.
*/
$printer = new Printer();
$iterator = $DB->request([
'FROM' => 'glpi_printers',
'WHERE' => ['serial' => ['LIKE', '%/']]
]);
while ($data = $iterator->next()) {
$cleanSerial = preg_replace('/\/$/', '', $data['serial']);
$iterator2 = $DB->request([
'FROM' => 'glpi_printers',
'WHERE' => ['serial' => $cleanSerial],
'LIMIT' => 1
]);
if (!count($iterator)) {
$input = [
'id' => $data['id'],
'serial' => $cleanSerial
];
$printer->update($input);
}
}
}
/**
* Manage the network equipment part migration
*
* @global object $DB
* @param object $migration
*/
function do_networkequipment_migration($migration) {
global $DB;
/*
* Table glpi_plugin_fusioninventory_networkequipments
*/
$newTable = "glpi_plugin_fusioninventory_networkequipments";
$migration->renameTable("glpi_plugin_fusinvsnmp_networkequipments",
$newTable);
$migration->renameTable("glpi_plugin_tracker_networking",
$newTable);
if (!$DB->tableExists($newTable)) {
$DB->query('CREATE TABLE `'.$newTable.'` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1');
}
$migration->changeField($newTable,
"id",
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"networkequipments_id",
"networkequipments_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"sysdescr",
"sysdescr",
"text COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->changeField($newTable,
"plugin_fusioninventory_configsecurities_id",
"plugin_fusioninventory_configsecurities_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"uptime",
"uptime",
"varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"cpu",
"cpu",
"int(3) NOT NULL DEFAULT '0' COMMENT '%'");
$migration->changeField($newTable,
"memory",
"memory",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"last_fusioninventory_update",
"last_fusioninventory_update",
"datetime DEFAULT NULL");
$migration->changeField($newTable,
"last_PID_update",
"last_PID_update",
"int(11) NOT NULL DEFAULT '0'");
$migration->migrationOneTable($newTable);
$migration->changeField($newTable,
"ID",
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"FK_networking",
"networkequipments_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"FK_snmp_connection",
"plugin_fusioninventory_configsecurities_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"last_tracker_update",
"last_fusioninventory_update",
"datetime DEFAULT NULL");
$migration->changeField($newTable,
"plugin_fusinvsnmp_configsecurities_id",
"plugin_fusioninventory_configsecurities_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->dropKey($newTable,
"FK_networking");
$migration->dropKey($newTable,
"FK_model_infos");
$migration->dropKey($newTable,
"plugin_fusioninventory_snmpmodels_id");
$migration->migrationOneTable($newTable);
$migration->dropField($newTable,
"plugin_fusioninventory_snmpmodels_id");
$migration->dropField($newTable,
"plugin_fusinvsnmp_models_id");
$migration->dropField($newTable,
"FK_model_infos");
$migration->addField($newTable,
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->addField($newTable,
"networkequipments_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"sysdescr",
"text COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->addField($newTable,
"plugin_fusioninventory_configsecurities_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"uptime",
"varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"cpu",
"int(3) NOT NULL DEFAULT '0' COMMENT '%'");
$migration->addField($newTable,
"memory",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"last_fusioninventory_update",
"datetime DEFAULT NULL");
$migration->addField($newTable,
"last_PID_update",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"serialized_inventory",
"longblob");
$migration->addKey($newTable,
"networkequipments_id");
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
/*
* glpi_plugin_fusioninventory_networkequipmentips
* Removed in 0.84, but required here for update, we drop in edn of this function
*/
if ($DB->tableExists("glpi_plugin_fusioninventory_networkequipmentips")
|| $DB->tableExists("glpi_plugin_fusinvsnmp_networkequipmentips")
|| $DB->tableExists("glpi_plugin_tracker_networking_ifaddr")) {
$newTable = "glpi_plugin_fusioninventory_networkequipmentips";
$migration->renameTable("glpi_plugin_fusinvsnmp_networkequipmentips",
$newTable);
$migration->renameTable("glpi_plugin_tracker_networking_ifaddr",
$newTable);
if (!$DB->tableExists($newTable)) {
$DB->query('CREATE TABLE `'.$newTable.'` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1');
}
$migration->changeField($newTable,
"id",
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"networkequipments_id",
"networkequipments_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"ip",
"ip",
"varchar(255) DEFAULT NULL");
$migration->migrationOneTable($newTable);
$migration->changeField($newTable,
"ID",
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"FK_networking",
"networkequipments_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"ifaddr",
"ip",
"varchar(255) DEFAULT NULL");
$migration->dropKey($newTable,
"ifaddr");
$migration->migrationOneTable($newTable);
$migration->addField($newTable,
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->addField($newTable,
"networkequipments_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"ip",
"varchar(255) DEFAULT NULL");
$migration->addKey($newTable,
"ip");
$migration->addKey($newTable,
"networkequipments_id");
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
}
/*
* Move networkequipment IPs to net system
*/
if ($DB->tableExists("glpi_plugin_fusioninventory_networkequipmentips")) {
$networkPort = new NetworkPort();
$networkName = new NetworkName();
$ipAddress = new IPAddress();
$networkEquipment = new NetworkEquipment();
$iterator = $DB->request(['FROM' => 'glpi_plugin_fusioninventory_networkequipments']);
while ($data = $iterator->next()) {
if ($networkEquipment->getFromDB($data['networkequipments_id'])) {
$oldtableip = [];
$iterator2 = $DB->request([
'FROM' => 'glpi_plugin_fusioninventory_networkequipmentips',
'WHERE' => ['networkequipments_id' => $data['networkequipments_id']]
]);
while ($dataIP = $iterator->next()) {
$oldtableip[$dataIP['ip']] = $dataIP['ip'];
}
// Get actual IP defined
$networknames_id = 0;
$a_ports = $networkPort->find(
['itemtype' => 'NetworkEquipment',
'items_id' => $data['networkequipments_id'],
'instantiation_type' => 'NetworkPortAggregate',
'name' => 'management'],
[], 1);
foreach ($a_ports as $a_port) {
$a_networknames = $networkName->find(
['itemtype' => 'NetworkPort',
'items_id' => $a_port['id']]);
foreach ($a_networknames as $a_networkname) {
$networknames_id = $a_networkname['id'];
$a_ipaddresses = $ipAddress->find(
['itemtype' => 'NetworkName',
'items_id' => $a_networkname['id']]);
foreach ($a_ipaddresses as $a_ipaddress) {
if (isset($oldtableip[$a_ipaddress['name']])) {
unset($oldtableip[$a_ipaddress['name']]);
} else {
$ipAddress->delete($a_ipaddress, 1);
}
}
}
}
// Update
foreach ($oldtableip as $ip) {
$input = [];
$input['itemtype'] = "NetworkName";
$input['items_id'] = $networknames_id;
$input['name'] = $ip;
$input['is_dynamic'] = 1;
$ipAddress->add($input);
}
}
}
}
/*
* Clean for switch more informations again in DB when switch is purged
*/
//echo "Clean for switch more informations again in DB when switch is purged\n";
$iterator = $DB->request([
'SELECT' => 'glpi_plugin_fusioninventory_networkequipments.id',
'FROM' => 'glpi_plugin_fusioninventory_networkequipments',
'LEFT JOIN' => [
'glpi_networkequipments' => [
'FKEY' => [
'glpi_networkequipments' => 'id',
'glpi_plugin_fusioninventory_networkequipments' => 'networkequipments_id'
]
]
],
'WHERE' => [
'glpi_networkequipments.id' => null
]
]);
if (count($iterator)) {
$delete = $DB->buildDelete(
'glpi_plugin_fusioninventory_networkequipments', [
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($delete);
while ($data = $iterator->next()) {
$stmt->bind_param('s', $data['id']);
$stmt->execute();
}
}
changeDisplayPreference("5157", "PluginFusioninventoryNetworkEquipment");
changeDisplayPreference("PluginFusinvsnmpNetworkEquipment",
"PluginFusioninventoryNetworkEquipment");
/*
* Modify displaypreference for PluginFusinvsnmpNetworkEquipment
*/
$a_check = [];
$a_check["2"] = 1;
$a_check["3"] = 2;
$a_check["4"] = 3;
$a_check["5"] = 4;
$a_check["6"] = 5;
$a_check["7"] = 6;
$a_check["8"] = 7;
$a_check["9"] = 8;
$a_check["10"] = 9;
$a_check["11"] = 10;
$a_check["14"] = 11;
$a_check["12"] = 12;
$a_check["13"] = 13;
foreach ($a_check as $num=>$rank) {
$iterator = $DB->request([
'FROM' => 'glpi_displaypreferences',
'WHERE' => [
'itemtype' => 'PluginFusioninventoryNetworkEquipment',
'num' => $num,
'users_id' => 0
]
]);
if (!count($iterator)) {
$DB->insert(
'glpi_displaypreferences', [
'itemtype' => 'PluginFusioninventoryNetworkEquipment',
'num' => $num,
'rank' => $rank,
'users_id' => 0
]
);
}
}
$iterator = $DB->request([
'FROM' => 'glpi_displaypreferences',
'WHERE' => [
'itemtype' => 'PluginFusioninventoryNetworkEquipment',
'users_id' => 0
]
]);
while ($data = $iterator->next()) {
if (!isset($a_check[$data['num']])) {
$DB->delete(
'glpi_displaypreferences', [
'id' => $date['id']
]
);
}
}
/*
* Manage devices with is_dynamic
*/
$iterator = $DB->request(['FROM' => 'glpi_plugin_fusioninventory_networkequipments']);
if (count($iterator)) {
$update = $DB->buildUpdate(
'glpi_networkequipments', [
'is_dynamic' => 1
], [
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($update);
while ($data = $iterator->next()) {
$stmt->bind_param('s', $data['networkequipments_id']);
$stmt->execute();
}
mysqli_stmt_close($stmt);
}
}
/**
* Manage the Config security (SNMP anthentication) part migration
*
* @global object $DB
* @param object $migration
*/
function do_configsecurity_migration($migration) {
global $DB;
/*
* Table glpi_plugin_fusioninventory_configsecurities
*/
// TODO get info to create SNMP authentification with old values of Tracker plugin
$newTable = "glpi_plugin_fusioninventory_configsecurities";
$migration->renameTable("glpi_plugin_fusinvsnmp_configsecurities",
$newTable);
$migration->renameTable("glpi_plugin_tracker_snmp_connection",
$newTable);
if (!$DB->tableExists($newTable)) {
$DB->query('CREATE TABLE `'.$newTable.'` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1');
}
$migration->changeField($newTable,
"id",
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"name",
"name",
"varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->changeField($newTable,
"snmpversion",
"snmpversion",
"varchar(8) COLLATE utf8_unicode_ci NOT NULL DEFAULT '1'");
$migration->changeField($newTable,
"community",
"community",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->changeField($newTable,
"username",
"username",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->changeField($newTable,
"authentication",
"authentication",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->changeField($newTable,
"auth_passphrase",
"auth_passphrase",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->changeField($newTable,
"encryption",
"encryption",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->changeField($newTable,
"priv_passphrase",
"priv_passphrase",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->changeField($newTable,
"is_deleted",
"is_deleted",
"tinyint(1) NOT NULL DEFAULT '0'");
$migration->migrationOneTable($newTable);
$migration->changeField($newTable,
"ID",
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"FK_snmp_version",
"snmpversion",
"varchar(8) COLLATE utf8_unicode_ci NOT NULL DEFAULT '1'");
$migration->changeField($newTable,
"sec_name",
"username",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->dropField($newTable,
"sec_level");
$migration->dropField($newTable,
"auth_protocol");
$migration->dropField($newTable,
"priv_protocol");
$migration->dropField($newTable,
"deleted");
$migration->migrationOneTable($newTable);
$migration->addField($newTable,
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->addField($newTable,
"name",
"varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->addField($newTable,
"snmpversion",
"varchar(8) COLLATE utf8_unicode_ci NOT NULL DEFAULT '1'");
$migration->addField($newTable,
"community",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->addField($newTable,
"username",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->addField($newTable,
"authentication",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->addField($newTable,
"auth_passphrase",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->addField($newTable,
"encryption",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->addField($newTable,
"priv_passphrase",
"varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL");
$migration->addField($newTable,
"is_deleted",
"tinyint(1) NOT NULL DEFAULT '0'");
$migration->addKey($newTable,
"snmpversion");
$migration->addKey($newTable,
"is_deleted");
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
changeDisplayPreference("5152", "PluginFusioninventoryConfigSecurity");
// Remove the protocols AES192 and AES256 because not managed in the agent
// with the perl module NET-SNMP
$DB->update('glpi_plugin_fusioninventory_configsecurities',
['encryption' => 'AES128'],
['encryption' => ['AES192', 'AES256']]);
}
/**
* Manage the discovery state part migration
*
* @global object $DB
* @param object $migration
*/
function do_statediscovery_migration($migration) {
global $DB;
/*
* glpi_plugin_fusioninventory_statediscoveries
*/
$newTable = "glpi_plugin_fusioninventory_statediscoveries";
$migration->renameTable("glpi_plugin_fusinvsnmp_statediscoveries",
$newTable);
if (!$DB->tableExists($newTable)) {
$DB->query("CREATE TABLE `".$newTable."` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1");
}
$migration->changeField($newTable,
"id",
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->changeField($newTable,
"plugin_fusioninventory_taskjob_id",
"plugin_fusioninventory_taskjob_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"plugin_fusioninventory_agents_id",
"plugin_fusioninventory_agents_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"start_time",
"start_time",
"datetime DEFAULT NULL");
$migration->changeField($newTable,
"end_time",
"end_time",
"datetime DEFAULT NULL");
$migration->changeField($newTable,
"date_mod",
"date_mod",
"datetime DEFAULT NULL");
$migration->changeField($newTable,
"threads",
"threads",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"nb_ip",
"nb_ip",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"nb_found",
"nb_found",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"nb_error",
"nb_error",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"nb_exists",
"nb_exists",
"int(11) NOT NULL DEFAULT '0'");
$migration->changeField($newTable,
"nb_import",
"nb_import",
"int(11) NOT NULL DEFAULT '0'");
$migration->migrationOneTable($newTable);
$migration->addField($newTable,
"id",
"int(11) NOT NULL AUTO_INCREMENT");
$migration->addField($newTable,
"plugin_fusioninventory_taskjob_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"plugin_fusioninventory_agents_id",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"start_time",
"datetime DEFAULT NULL");
$migration->addField($newTable,
"end_time",
"datetime DEFAULT NULL");
$migration->addField($newTable,
"date_mod",
"datetime DEFAULT NULL");
$migration->addField($newTable,
"threads",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"nb_ip",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"nb_found",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"nb_error",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"nb_exists",
"int(11) NOT NULL DEFAULT '0'");
$migration->addField($newTable,
"nb_import",
"int(11) NOT NULL DEFAULT '0'");
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
}
/**
* Manage the computer license part migration
*
* @global object $DB
* @param object $migration
*/
function do_computerlicense_migration($migration) {
global $DB;
/*
* Table glpi_plugin_fusioninventory_computerlicenseinfos
*/
if ($DB->tableExists("glpi_plugin_fusinvinventory_licenseinfos")) {
$DB->update(
'glpi_plugin_fusinvinventory_licenseinfos', [
'softwarelicenses_id' => 0
], [
'softwarelicenses_id' => null
]
);
}
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_computerlicenseinfos';
$a_table['oldname'] = ['glpi_plugin_fusinvinventory_licenseinfos'];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['computers_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['softwarelicenses_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['name'] = ['type' => 'string',
'value' => null];
$a_table['fields']['fullname'] = ['type' => 'string',
'value' => null];
$a_table['fields']['serial'] = ['type' => 'string',
'value' => null];
$a_table['fields']['is_trial'] = ['type' => 'bool',
'value' => null];
$a_table['fields']['is_update'] = ['type' => 'bool',
'value' => null];
$a_table['fields']['is_oem'] = ['type' => 'bool',
'value' => null];
$a_table['fields']['activation_date'] = ['type' => 'datetime',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'name', 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'fullname', 'name' => '', 'type' => 'INDEX'];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
}
/**
* Manage the computer remote management part migration
*
* @param object $migration
*/
function do_computerremotemgmt_migration($migration) {
/*
* Table PluginFusioninventoryComputerRemoteManagement
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_computerremotemanagements';
$a_table['oldname'] = ['glpi_plugin_fusioninventory_computerremotemanagements'];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['computers_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['number'] = ['type' => 'string',
'value' => null];
$a_table['fields']['type'] = ['type' => 'string',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'computers_id', 'name' => '', 'type' => 'INDEX'];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
}
/**
* Manage the computer architecture part migration
*
* @param object $migration
*/
function do_computerarch_migration($migration) {
global $DB;
if ($DB->tableExists('glpi_plugin_fusioninventory_computerarches')) {
//Rename field in coputeroperatingsystems table
$a_table = [
'name' => 'glpi_plugin_fusioninventory_computeroperatingsystems',
'renamefields' => [
'plugin_fusioninventory_computerarches_id' => 'operatingsystemarchitectures_id'
]
];
migrateTablesFusionInventory($migration, $a_table);
//Arches migration from FI table to GLPi core table
$arches = new OperatingSystemArchitecture();
foreach (getAllDataFromTable('glpi_plugin_fusioninventory_computerarches') as $arch) {
//check if arch already exists in core
if ($arches->getFromDBByCrit(['name' => $DB->escape($arch['name'])])) {
$new_id = $arches->fields['id'];
} else {
unset($arch['id']);
$new_id = $arches->add($arch, [], false);
}
//DB::update() does not handle joins for now
$sql_u = "UPDATE glpi_plugin_fusioninventory_computeroperatingsystems pf_os SET "
. " pf_os.operatingsystemarchitectures_id='" . $new_id . "',"
. " JOIN operatingsystemarchitectures os_arch WHERE os_arch.name='" . $DB->escape($arch['name']) . "'";
$DB->query($sql_u);
}
$migration->dropTable('glpi_plugin_fusioninventory_computerarches');
//Update dictionnary to match the new operating system
$DB->update(
'glpi_rules', [
'sub_type' => 'RuleDictionnaryOperatingSystemArchitectureCollection'
], [
'sub_type' => 'PluginFusioninventoryRuleDictionnaryComputerArchCollection'
]
);
}
}
/**
* Manage the operating system edition part migration
*
* @param object $migration
*/
function do_operatingsystemedition_migration($migration) {
global $DB;
if ($DB->tableExists('glpi_plugin_fusioninventory_computeroperatingsystemeditions')) {
//OS editions migration from FI table to GLPi core table
$ose = new OperatingSystemEdition();
foreach (getAllDataFromTable('glpi_plugin_fusioninventory_computeroperatingsystemeditions') as $edition) {
//check if arch already exists in core
if ($ose->getFromDBByCrit(['name' => $DB->escape($edition['name'])])) {
$new_id = $ose->fields['id'];
} else {
unset($edition['id']);
$new_id = $ose->add($edition, [], false);
}
//DB::update() does not handle joins for now
$sql_u = "UPDATE glpi_plugin_fusioninventory_computeroperatingsystems pf_os"
. " JOIN glpi_plugin_fusioninventory_computeroperatingsystemeditions os_edition "
. " ON pf_os.plugin_fusioninventory_computeroperatingsystemeditions_id = os_edition.id "
. " SET pf_os.plugin_fusioninventory_computeroperatingsystemeditions_id='$new_id'"
. " WHERE os_edition.name='" . $DB->escape($edition['name']) . "'";
$DB->query($sql_u);
}
$migration->dropTable('glpi_plugin_fusioninventory_computeroperatingsystemeditions');
}
}
/**
* Manage the kernel names and kernel versions part migration
*
* @param object $migration
*
* @return array
*/
function do_operatingsystemkernel_migration($migration) {
global $DB;
if ($DB->tableExists('glpi_plugin_fusioninventory_computeroskernelnames')) {
//Find wich version on which kernel
$kmapping = []; // [orig_osid|orig_osversionid => newid]
$mapping = []; // [orig_computerosid => new_osversionid]
$kernels = new OperatingSystemKernel();
$kversions = new OperatingSystemKernelVersion();
//DB::update() does not handle joins for now
$query = "SELECT fi_cos.id,
fi_kname.id AS kid, fi_kname.name AS kname,
fi_kversion.id AS kvid, fi_kversion.name AS kversion
FROM glpi_plugin_fusioninventory_computeroperatingsystems AS fi_cos
INNER JOIN glpi_plugin_fusioninventory_computeroskernelnames AS fi_kname
ON fi_kname.id = fi_cos.plugin_fusioninventory_computeroskernelnames_id
INNER JOIN glpi_plugin_fusioninventory_computeroskernelversions AS fi_kversion
ON fi_kversion.id = fi_cos.plugin_fusioninventory_computeroskernelversions_id
";
$iterator = $DB->request($query);
while ($row = $iterator->next()) {
$key = "{$row['kid']}|{$row['kvid']}";
if (!isset($mapping[$key])) {
//find in db for an existing kernel name
if (!$kernels->getFromDBByCrit(['name' => $DB->escape($row['kname'])])) {
$kernels->add(['name' => $row['kname']]);
}
if (!$kversions->getFromDBByCrit(['name' => $DB->escape($row['kversion']), 'operatingsystemkernels_id' => $kernels->getID()])) {
$kversions->add([
'name' => $row['kversion'],
'operatingsystemkernels_id' => $kernels->getID()
]);
}
$kmapping[$key] = $kversions->getID();
}
$mapping[$row['id']] = $kmapping[$key];
}
$migration->dropTable('glpi_plugin_fusioninventory_computeroskernelnames');
$migration->dropTable('glpi_plugin_fusioninventory_computeroskernelversions');
return $mapping;
}
}
/**
* Manage the computer operating system part migration
*
* @param object $migration
*/
function do_computeroperatingsystem_migration($migration) {
global $DB;
do_operatingsystemedition_migration($migration);
$kversions_mapping = do_operatingsystemkernel_migration($migration);
if ($DB->tableExists("glpi_plugin_fusioninventory_computeroperatingsystems")) {
$ios = new Item_OperatingSystem();
$query = "SELECT DISTINCT(fi_computer.computers_id) AS cid, fi_computer.computers_id, fi_cos.*
FROM glpi_plugin_fusioninventory_inventorycomputercomputers AS fi_computer
INNER JOIN glpi_plugin_fusioninventory_computeroperatingsystems AS fi_cos
ON fi_computer.plugin_fusioninventory_computeroperatingsystems_id = fi_cos.id
";
$iterator = $DB->request($query);
while ($row = $iterator->next()) {
$search = [
'itemtype' => 'Computer',
'items_id' => $row['cid'],
'operatingsystems_id' => $row['operatingsystems_id'],
'operatingsystemarchitectures_id' => $row['operatingsystemarchitectures_id']
];
$computer = new Computer();
$computer->getFromDB($row['cid']);
$input = $search + [
'operatingsystemversions_id' => $row['operatingsystemversions_id'],
'operatingsystemservicepacks_id' => $row['operatingsystemservicepacks_id'],
'operatingsystemkernelversions_id' => isset($kversions_mapping[$row['id']])
? $kversions_mapping[$row['id']]
: 0,
'operatingsystemeditions_id' => $row['plugin_fusioninventory_computeroperatingsystemeditions_id'],
'is_dynamic' => 1,
'entities_id' => $computer->fields['entities_id']
];
if (!$ios->getFromDBByCrit($search)) {
$ios->add($input);
} else {
$ios->update(
['id' => $ios->getID()] + $input
);
}
}
$migration->dropTable('glpi_plugin_fusioninventory_computeroperatingsystems');
$migration->dropField(
'glpi_plugin_fusioninventory_inventorycomputercomputers',
'plugin_fusioninventory_computeroperatingsystems_id'
);
//handle display preferences
//[oldid => newid]
$sopts = [
5172 => 45, //OS name
5173 => 46, //OS version
5174 => 64, //Kernel name
5175 => 48, //Kernel version
5176 => 41, //Service pack
5177 => 63 //OS edition
];
foreach ($sopts as $oldid => $newid) {
$iterator = $DB->request(
"SELECT * FROM `glpi_displaypreferences`
WHERE
`itemtype`='Computer' AND (
`num`='$oldid' OR `num`='$newid'
)"
);
$users = [];
while ($row = $iterator->next()) {
if (!in_array($row['users_id'], $users)) {
$users[] = $row['users_id'];
$DB->update(
'glpi_displaypreferences', [
'num' => $newid
], [
'id' => $row['id']
]
);
} else if ($row['num'] == $oldid) {
$DB->delete(
'glpi_displaypreferences', [
'id' => $row['id']
]
);
}
}
}
//handle bookmarks
$iterator = $DB->request([
'FROM' => 'glpi_savedsearches',
'WHERE' => [
'itemtype' => 'Computer'
]
]);
while ($row = $iterator->next()) {
parse_str($row["query"], $options);
$changed = false;
foreach ($options['criteria'] as &$criterion) {
if (isset($sopts[$criterion['field']])) {
$criterion['field'] = $sopts[$criterion['field']];
$changed = true;
}
}
if ($changed === true) {
$querystr = Toolbox::append_params($options);
$ssearch = new SavedSearch();
$ssearch->update([
'id' => $row['id'],
'query' => $querystr
]);
}
}
//handle dynamic groups
$iterator = $DB->request([
'FROM' => 'glpi_plugin_fusioninventory_deploygroups_dynamicdatas'
]);
while ($row = $iterator->next()) {
$fields = unserialize($row['fields_array']);
$changed = false;
foreach ($fields as &$type) {
foreach ($type as &$criterion) {
if (isset($sopts[$criterion['field']])) {
$criterion['field'] = $sopts[$criterion['field']];
$changed = true;
}
}
}
if ($changed === true) {
$dyndata = new PluginFusioninventoryDeployGroup_Dynamicdata();
$dyndata->update([
'id' => $row['id'],
'fields_array' => serialize($fields)
]);
}
}
}
$migration->addField('glpi_plugin_fusioninventory_inventorycomputercomputers',
"hostid", "string", ['after' => 'oscomment']);
$migration->migrationOneTable('glpi_plugin_fusioninventory_inventorycomputercomputers');
}
/**
* Manage the deploy user interaction migration process
*
* @since 9.2
* @global object $DB
* @param object $migration
*/
function do_deployuserinteraction_migration($migration) {
global $DB;
if (!$DB->tableExists('glpi_plugin_fusioninventory_deployuserinteractions')) {
$query = "CREATE TABLE IF NOT EXISTS `glpi_plugin_fusioninventory_deployuserinteractiontemplates` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`entities_id` int(11) NOT NULL DEFAULT '0',
`is_recursive` tinyint(1) NOT NULL DEFAULT '0',
`date_creation` datetime DEFAULT NULL,
`date_mod` datetime DEFAULT NULL,
`json` longtext DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `date_mod` (`date_mod`),
KEY `date_creation` (`date_creation`),
KEY `entities_id` (`entities_id`),
KEY `is_recursive` (`is_recursive`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1;";
$DB->query($query);
}
}
/**
* Manage the deploy files part migration
*
* @global object $DB
* @param object $migration
*/
function do_deployfile_migration($migration) {
global $DB;
/*
* glpi_plugin_fusioninventory_deployfiles
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_deployfiles';
$a_table['oldname'] = [
];
$a_table['fields'] = [
'id' => [
'type' => 'autoincrement',
'value' => null
],
'name' => [
'type' => 'varchar(255) NOT NULL',
'value' => null
],
'mimetype' => [
'type' => 'varchar(255) NOT NULL',
'value' => null
],
'filesize' => [
'type' => 'bigint(20) NOT NULL',
'value' => null
],
'comment' => [
'type' => 'text DEFAULT NULL',
'value' => null
],
'sha512' => [
'type' => 'char(128) NOT NULL',
'value' => null
],
'shortsha512' => [
'type' => 'char(6) NOT NULL',
'value' => null
],
'entities_id' => [
'type' => 'int(11) NOT NULL',
'value' => null
],
'is_recursive' => [
'type' => 'tinyint(1) NOT NULL DEFAULT \'0\'',
'value' => 0
],
'date_mod' => [
'type' => 'datetime DEFAULT NULL',
'value' => null
],
];
$a_table['oldfields'] = [
];
$a_table['renamefields'] = [
];
$a_table['keys'] = [
[
'field' => 'id',
'name' => '',
'type' => 'KEY'
],
[
'field' => 'shortsha512',
'name' => '',
'type' => 'KEY'
],
[
'field' => 'entities_id',
'name' => '',
'type' => 'KEY'
],
[
'field' => 'date_mod',
'name' => '',
'type' => 'KEY'
],
];
$a_table['oldkeys'] = [
];
migrateTablesFusionInventory($migration, $a_table);
if ($DB->tableExists("glpi_plugin_fusinvdeploy_files")) {
if (!$DB->fieldExists("glpi_plugin_fusinvdeploy_files", "entities_id")) {
$migration->addField('glpi_plugin_fusinvdeploy_files',
'entities_id', 'integer', ['value' => 0]);
$migration->addField('glpi_plugin_fusinvdeploy_files',
'is_recursive', 'bool', ['value' => 0]);
$migration->migrationOneTable('glpi_plugin_fusinvdeploy_files');
if ($DB->fieldExists("glpi_plugin_fusinvdeploy_files", "filesize")) {
$sql = "SELECT files.`id`, files.`name`, files.`filesize`, "
. " files.`mimetype`, files.`sha512`, files.`shortsha512`, "
. " files.`create_date`, pkgs.`entities_id`, "
. " pkgs.`is_recursive` "
. " FROM glpi_plugin_fusinvdeploy_files as files "
. " LEFT JOIN glpi_plugin_fusinvdeploy_orders as orders"
. " ON orders.`id` = files.`plugin_fusinvdeploy_orders_id` "
. " LEFT JOIN glpi_plugin_fusinvdeploy_packages as pkgs "
. " ON orders.`plugin_fusinvdeploy_packages_id` = pkgs.`id`"
. " WHERE files.`shortsha512` != ''";
$result = $DB->query($sql);
if ($DB->numrows($result) > 0) {
$update = $DB->buildUpdate(
'glpi_plugin_fusinvdeploy_files', [
'entities_id' => new \QueryParam(),
'is_recursive' => new \QueryParam(),
], [
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($update);
while ($data = $DB->fetchArray($result)) {
$stmt->bind_param(
'sss',
$data['entities_id'],
$data['is_recursive'],
$data['id']
);
$stmt->execute();
}
mysqli_stmt_close($stmt);
}
}
}
}
}
/**
* Manage the deploy package part migration
*
* @global object $DB
* @param object $migration
*/
function do_deploypackage_migration($migration) {
global $DB;
/*
* glpi_plugin_fusioninventory_deploypackages
*/
$a_table = [];
//table name
$a_table['name'] = 'glpi_plugin_fusioninventory_deploypackages';
$a_table['oldname'] = [
'glpi_plugin_fusinvdeploy_packages'
];
$a_table['fields'] = [
'id' => [
'type' => 'autoincrement',
'value' => null
],
'name' => [
'type' => 'varchar(255) COLLATE utf8_unicode_ci NOT NULL',
'value' => null
],
'comment' => [
'type' => "text",
'value' => null
],
'entities_id' => [
'type' => 'int(11) NOT NULL',
'value' => null
],
'is_recursive' => [
'type' => 'tinyint(1) NOT NULL DEFAULT \'0\'',
'value' => null
],
'date_mod' => [
'type' => 'datetime DEFAULT NULL',
'value' => null
],
'uuid' => [
'type' => 'string',
'value' => null
],
'json' => [
'type' => 'longtext DEFAULT NULL',
'value' => null
],
'plugin_fusioninventory_deploygroups_id' => [
'type' => 'integer',
'value' => null
],
];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = [
'field' => 'entities_id',
'name' => '',
'type' => 'INDEX'
];
$a_table['keys'][] = [
'field' => 'date_mod',
'name' => '',
'type' => 'INDEX'
];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
// Before update, manage old Installation and Uninstallation
// see https://github.com/fusioninventory/fusioninventory-for-glpi/issues/1823
$order_table = 'glpi_plugin_fusioninventory_deployorders';
$migration->renameTable('glpi_plugin_fusinvdeploy_orders', $order_table);
if ($DB->tableExists($order_table)
and $DB->fieldExists($order_table, 'type', false)) {
require_once(PLUGIN_FUSIONINVENTORY_DIR . "/inc/deploypackage.class.php");
$pfDeployPackage = new PluginFusioninventoryDeployPackage();
$installs = getAllDataFromTable($order_table, ['type' => '0']);
foreach ($installs as $install) {
$pfDeployPackage->getFromDB($install['plugin_fusioninventory_deploypackages_id']);
$input = [
'id' => $pfDeployPackage->fields['id'],
'json' => addslashes($install['json']),
];
$pfDeployPackage->update($input);
}
$uninstalls = getAllDataFromTable($order_table, ['type' => '1']);
foreach ($uninstalls as $uninstall) {
if (countElementsInTable($order_table, [
'type' => '0',
'plugin_fusioninventory_deploypackages_id' => $uninstall['plugin_fusioninventory_deploypackages_id'],
'json' => ['<>', ''],
]) > 0) {
// have install and uninstall, so duplicate package
$pfDeployPackage->getFromDB($uninstall['plugin_fusioninventory_deploypackages_id']);
$input = $pfDeployPackage->fields;
unset($input['id']);
$input['json'] = $uninstall['json'];
$input['name'] .= " (uninstall)";
$deploypackage_id = $pfDeployPackage->add($input);
$DB->update(
$order_table, [
'plugin_fusioninventory_deploypackages_id' => $deploypackage_id
], [
'id' => $uninstall['id']
]
);
}
}
}
if ($DB->tableExists($order_table)) {
$migration->dropTable($order_table);
}
/*
* Table glpi_plugin_fusioninventory_deploypackages_entities
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_deploypackages_entities';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['plugin_fusioninventory_deploypackages_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['entities_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['is_recursive'] = ['type' => 'bool',
'value' => '0'];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'plugin_fusioninventory_deploypackages_id', 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'entities_id', 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'is_recursive', 'name' => '', 'type' => 'INDEX'];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
/*
* Table glpi_plugin_fusioninventory_deploypackages_groups
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_deploypackages_groups';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['plugin_fusioninventory_deploypackages_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['groups_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['entities_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['is_recursive'] = ['type' => 'bool',
'value' => '0'];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'plugin_fusioninventory_deploypackages_id', 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'groups_id', 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'entities_id', 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'is_recursive', 'name' => '', 'type' => 'INDEX'];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
/*
* Table glpi_plugin_fusioninventory_deploypackages_profiles
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_deploypackages_profiles';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['plugin_fusioninventory_deploypackages_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['profiles_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['entities_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['is_recursive'] = ['type' => 'bool',
'value' => '0'];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'plugin_fusioninventory_deploypackages_id', 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'profiles_id', 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'entities_id', 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'is_recursive', 'name' => '', 'type' => 'INDEX'];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
/*
* Table glpi_plugin_fusioninventory_deploypackages_users
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_deploypackages_users';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['plugin_fusioninventory_deploypackages_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['users_id'] = ['type' => 'integer',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'plugin_fusioninventory_deploypackages_id', 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'users_id', 'name' => '', 'type' => 'INDEX'];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
}
/**
* Manage the deploy mirror part migration
*
* @param object $migration
*/
function do_deploymirror_migration($migration) {
global $DB;
/*
* glpi_plugin_fusioninventory_deploymirrors
*/
$a_table = [];
//If table doesn't exists, then we're sure the is_active field is not present
if (!$DB->tableExists('glpi_plugin_fusioninventory_deploymirrors')) {
$is_active_exists = false;
} else {
$is_active_exists = ($DB->fieldExists('glpi_plugin_fusioninventory_deploymirrors',
'is_active'));
}
//table name
$a_table['name'] = 'glpi_plugin_fusioninventory_deploymirrors';
$a_table['oldname'] = [
'glpi_plugin_fusinvdeploy_mirrors'
];
$a_table['fields'] = [
'id' => [
'type' => 'autoincrement',
'value' => null
],
'entities_id' => [
'type' => 'int(11) NOT NULL',
'value' => null
],
'is_active' => [
'type' => 'tinyint(1) NOT NULL DEFAULT \'0\'',
'value' => null
],
'is_recursive' => [
'type' => 'tinyint(1) NOT NULL DEFAULT \'0\'',
'value' => null
],
'name' => [
'type' => 'varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL',
'value' => null
],
'url' => [
'type' => "varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci".
" NOT NULL DEFAULT ''",
'value' => null
],
'locations_id' => [
'type' => 'int(11) NOT NULL',
'value' => 0
],
'comment' => [
'type' => "text",
'value' => null
],
'date_mod' => [
'type' => 'datetime DEFAULT NULL',
'value' => null
],
];
$a_table['oldfields'] = [
];
$a_table['renamefields'] = [
];
$a_table['keys'] = [
[
'field' => 'entities_id',
'name' => '',
'type' => 'KEY'
],
[
'field' => 'is_active',
'name' => '',
'type' => 'KEY'
],
[
'field' => 'is_recursive',
'name' => '',
'type' => 'KEY'
],
[
'field' => 'date_mod',
'name' => '',
'type' => 'KEY'
],
];
$a_table['oldkeys'] = [
];
migrateTablesFusionInventory($migration, $a_table);
//During migration, once the is_active field is added,
//all mirrors must be active to keep compatibility
if (!$is_active_exists) {
$DB->update(
'glpi_plugin_fusioninventory_deploymirrors', [
'is_active' => 1
], [1 => 1]
);
}
}
/**
* Manage the deploy group part migration
*
* @param object $migration
*/
function do_deploygroup_migration($migration) {
/*
* glpi_plugin_fusioninventory_deploygroups
*/
$a_table = [];
//table name
$a_table['name'] = 'glpi_plugin_fusioninventory_deploygroups';
$a_table['oldname'] = [
'glpi_plugin_fusinvdeploy_groups'
];
$a_table['fields'] = [
'id' => [
'type' => 'autoincrement',
'value' => null
],
'name' => [
'type' => 'varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL',
'value' => null
],
'comment' => [
'type' => "text",
'value' => null
],
'type' => [
'type' => 'varchar(255) COLLATE utf8_unicode_ci NOT NULL',
'value' => null
],
];
$a_table['oldfields'] = [
];
$a_table['renamefields'] = [
];
$a_table['keys'] = [
];
$a_table['oldkeys'] = [
];
migrateTablesFusionInventory($migration, $a_table);
/*
* glpi_plugin_fusioninventory_deploygroups_staticdatas
*/
$a_table = [];
//table name
$a_table['name'] = 'glpi_plugin_fusioninventory_deploygroups_staticdatas';
$a_table['oldname'] = [
'glpi_plugin_fusinvdeploy_groups_staticdatas'
];
$a_table['fields'] = [
'id' => [
'type' => 'autoincrement',
'value' => null
],
'plugin_fusioninventory_deploygroups_id' => [
'type' => 'integer',
'value' => null
],
'itemtype' => [
'type' => 'varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL',
'value' => null
],
'items_id' => [
'type' => 'integer',
'value' => null
],
];
$a_table['oldfields'] = [
];
$a_table['renamefields'] = [
'groups_id' => 'plugin_fusioninventory_deploygroups_id',
];
$a_table['keys'] = [
[
'field' => 'plugin_fusioninventory_deploygroups_id',
'name' => '',
'type' => 'KEY'
],
[
'field' => 'items_id',
'name' => '',
'type' => 'KEY'
],
];
$a_table['oldkeys'] = [
];
migrateTablesFusionInventory($migration, $a_table);
/*
* glpi_plugin_fusioninventory_deploygroups_dynamicdatas
*/
$a_table = [];
//table name
$a_table['name'] = 'glpi_plugin_fusioninventory_deploygroups_dynamicdatas';
$a_table['oldname'] = [
'glpi_plugin_fusinvdeploy_groups_dynamicdatas'
];
$a_table['fields'] = [
'id' => [
'type' => 'autoincrement',
'value' => null
],
'plugin_fusioninventory_deploygroups_id' => [
'type' => 'integer',
'value' => null
],
'fields_array' => [
'type' => 'text',
'value' => null
],
'can_update_group' => [
'type' => 'bool',
'value' => 0
],
'computers_id_cache' => [
'type' => 'longtext',
'value' => null
],
];
$a_table['oldfields'] = [
];
$a_table['renamefields'] = [
'groups_id' => 'plugin_fusioninventory_deploygroups_id',
];
$a_table['keys'] = [
[
'field' => 'plugin_fusioninventory_deploygroups_id',
'name' => '',
'type' => 'KEY'
],
[
'field' => 'can_update_group',
'name' => '',
'type' => 'KEY'
],
];
$a_table['oldkeys'] = [
];
migrateTablesFusionInventory($migration, $a_table);
}
/**
* Manage the database locks part migration
*
* @param object $migration
*/
function do_dblocks_migration($migration) {
/*
* Table glpi_plugin_fusioninventory_dblockinventorynames
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_dblockinventorynames';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['value'] = ['type' => "varchar(100) NOT NULL DEFAULT ''",
'value' => null];
$a_table['fields']['date'] = ['type' => 'timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP()',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'value', 'name' => '', 'type' => 'UNIQUE'];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
/*
* Table glpi_plugin_fusioninventory_dblockinventories
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_dblockinventories';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['value'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['date'] = ['type' => 'timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP()',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'value', 'name' => '', 'type' => 'UNIQUE'];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
/*
* Table glpi_plugin_fusioninventory_dblocksoftwares
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_dblocksoftwares';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['value'] = ['type' => 'bool',
'value' => null];
$a_table['fields']['date'] = ['type' => 'timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP()',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'value', 'name' => '', 'type' => 'UNIQUE'];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
/*
* Table glpi_plugin_fusioninventory_dblocksoftwareversions
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_dblocksoftwareversions';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['value'] = ['type' => 'bool',
'value' => null];
$a_table['fields']['date'] = ['type' => 'timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP()',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'value', 'name' => '', 'type' => 'UNIQUE'];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
}
/**
* Manage the ESX credentials part migration
*
* @global object $DB
* @param object $migration
*/
function do_credentialESX_migration($migration) {
global $DB;
/*
* Table glpi_plugin_fusioninventory_credentials
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_credentials';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['entities_id']= ['type' => 'integer',
'value' => null];
$a_table['fields']['is_recursive']= ['type' => 'bool',
'value' => null];
$a_table['fields']['name'] = ['type' => 'string',
'value' => ""];
$a_table['fields']['username'] = ['type' => 'string',
'value' => ""];
$a_table['fields']['password'] = ['type' => 'string',
'value' => ""];
$a_table['fields']['comment'] = ['type' => 'text',
'value' => null];
$a_table['fields']['date_mod'] = ['type' => 'datetime',
'value' => null];
$a_table['fields']['itemtype'] = ['type' => 'string',
'value' => ""];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
// Fix itemtype changed in 0.84
$DB->update(
'glpi_plugin_fusioninventory_credentials', [
'itemtype' => 'PluginFusioninventoryInventoryComputerESX'
], [
'itemtype' => 'PluginFusinvinventoryVmwareESX'
]
);
/*
* Table glpi_plugin_fusioninventory_credentialips
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_credentialips';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['entities_id']= ['type' => 'integer',
'value' => null];
$a_table['fields']['plugin_fusioninventory_credentials_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['name'] = ['type' => 'string',
'value' => ""];
$a_table['fields']['comment'] = ['type' => 'text',
'value' => null];
$a_table['fields']['ip'] = ['type' => 'string',
'value' => ""];
$a_table['fields']['date_mod'] = ['type' => 'datetime',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
}
/**
* Manage the collect part migration
*
* @param object $migration
*/
function do_collect_migration($migration) {
/*
* Table glpi_plugin_fusioninventory_collects
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_collects';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => "autoincrement",
'value' => ''];
$a_table['fields']['name'] = ['type' => 'string',
'value' => null];
$a_table['fields']['entities_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['is_recursive'] = ['type' => 'bool',
'value' => null];
$a_table['fields']['type'] = ['type' => 'string',
'value' => null];
$a_table['fields']['is_active'] = ['type' => 'bool',
'value' => null];
$a_table['fields']['comment'] = ['type' => 'text',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
/*
* Table glpi_plugin_fusioninventory_collects_registries
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_collects_registries';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => "autoincrement",
'value' => ''];
$a_table['fields']['name'] = ['type' => 'string',
'value' => null];
$a_table['fields']['plugin_fusioninventory_collects_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['hive'] = ['type' => 'string',
'value' => null];
$a_table['fields']['path'] = ['type' => 'text',
'value' => null];
$a_table['fields']['key'] = ['type' => 'string',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
/*
* Table glpi_plugin_fusioninventory_collects_registries_contents
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_collects_registries_contents';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => "autoincrement",
'value' => ''];
$a_table['fields']['computers_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['plugin_fusioninventory_collects_registries_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['key'] = ['type' => 'string',
'value' => null];
$a_table['fields']['value'] = ['type' => 'string',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'computers_id', 'name' => '', 'type' => 'INDEX'];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
/*
* Table glpi_plugin_fusioninventory_collects_wmis
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_collects_wmis';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => "autoincrement",
'value' => ''];
$a_table['fields']['name'] = ['type' => 'string',
'value' => null];
$a_table['fields']['plugin_fusioninventory_collects_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['moniker'] = ['type' => 'string',
'value' => null];
$a_table['fields']['class'] = ['type' => 'string',
'value' => null];
$a_table['fields']['properties'] = ['type' => 'string',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
/*
* Table glpi_plugin_fusioninventory_collects_wmis_contents
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_collects_wmis_contents';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => "autoincrement",
'value' => ''];
$a_table['fields']['computers_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['plugin_fusioninventory_collects_wmis_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['property'] = ['type' => 'string',
'value' => null];
$a_table['fields']['value'] = ['type' => 'string',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
/*
* Table glpi_plugin_fusioninventory_collects_files
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_collects_files';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => "autoincrement",
'value' => ''];
$a_table['fields']['name'] = ['type' => 'string',
'value' => null];
$a_table['fields']['plugin_fusioninventory_collects_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['dir'] = ['type' => 'string',
'value' => null];
$a_table['fields']['limit'] = ['type' => "int(4) NOT NULL DEFAULT '50'",
'value' => null];
$a_table['fields']['is_recursive'] = ['type' => 'bool',
'value' => null];
$a_table['fields']['filter_regex'] = ['type' => 'string',
'value' => null];
$a_table['fields']['filter_sizeequals'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['filter_sizegreater'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['filter_sizelower'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['filter_checksumsha512'] = ['type' => 'string',
'value' => null];
$a_table['fields']['filter_checksumsha2'] = ['type' => 'string',
'value' => null];
$a_table['fields']['filter_name'] = ['type' => 'string',
'value' => null];
$a_table['fields']['filter_iname'] = ['type' => 'string',
'value' => null];
$a_table['fields']['filter_is_file'] = ['type' => 'bool',
'value' => '1'];
$a_table['fields']['filter_is_dir'] = ['type' => 'bool',
'value' => '0'];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
/*
* Table glpi_plugin_fusioninventory_collects_files_contents
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_collects_files_contents';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => "autoincrement",
'value' => ''];
$a_table['fields']['computers_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['plugin_fusioninventory_collects_files_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['pathfile'] = ['type' => 'text',
'value' => null];
$a_table['fields']['size'] = ['type' => 'integer',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
}
/**
* Manage the SNMP models part migration
*
* @global object $DB
* @param object $migration
*/
function do_snmpmodel_migration($migration) {
global $DB;
$elements = ['5151', 'PluginFusinvsnmpModel',
'PluginFusioninventorySnmpmodel', 'PluginFusinvsnmpConstructDevice',
'PluginFusioninventorySnmpmodelConstructDevice', '5167'];
foreach ($elements as $element) {
$DB->delete(
'glpi_displaypreferences', [
'itemtype' => $element
]
);
}
}
/**
* Manage the rules part migration
*
* @global object $DB
* @param object $migration
*/
function do_rule_migration($migration) {
global $DB;
/*
* Update rules
*/
$DB->update(
'glpi_rules', [
'sub_type' => 'PluginFusioninventoryInventoryRuleImport'
], [
'sub_type' => 'PluginFusioninventoryRuleImportEquipment'
]
);
$iterator = $DB->request([
'FROM' => 'glpi_rules',
'WHERE' => ['sub_type' => 'PluginFusioninventoryInventoryRuleImport']
]);
if (count($iterator)) {
$update = $DB->buildUpdate(
'glpi_ruleactions', [
'value' => 1
], [
'rules_id' => new \QueryParam(),
'value' => 0,
'field' => '_fusion'
]
);
$stmt = $DB->prepare($update);
while ($data = $iterator->next()) {
$stmt->bind_param('s', $data['id']);
$stmt->execute();
}
mysqli_stmt_close($stmt);
}
$DB->update(
'glpi_rules', [
'sub_type' => 'PluginFusioninventoryInventoryRuleEntity'
], [
'sub_type' => 'PluginFusinvinventoryRuleEntity'
]
);
/*
* Add default rules
*/
if ($DB->tableExists("glpi_plugin_tracker_config_discovery")) {
$migration->displayMessage("Create rules");
$pfSetup = new PluginFusioninventorySetup();
$pfSetup->initRules();
}
// If no rules, add them
if (countElementsInTable('glpi_rules',
['sub_type' => 'PluginFusioninventoryInventoryRuleImport']) == 0) {
$migration->displayMessage("Create rules");
$pfSetup = new PluginFusioninventorySetup();
$pfSetup->initRules();
}
// Add peripheral rules (in first in rule list) when use it since 0.85
$DB->delete(
'glpi_plugin_fusioninventory_configs', [
'type' => 'import_peripheral'
]
);
$DB->update(
'glpi_rules', [
'ranking' => new \QueryExpression($DB->quoteName('ranking') . ' + 3')
], [
'sub_type' => 'PluginFusioninventoryInventoryRuleImport'
]
);
$ranking = 0;
// Create rule for : Peripheral + serial
$rulecollection = new PluginFusioninventoryInventoryRuleImportCollection();
$ruleimport = new Rule();
$input = [];
$input['name']='Peripheral serial';
$input['match']='AND';
$input['sub_type'] = 'PluginFusioninventoryInventoryRuleImport';
if (!$ruleimport->getFromDBByCrit($input)) {
$input['is_active']=1;
$input['ranking'] = $ranking;
$rule_id = $rulecollection->add($input);
// Add criteria
$rule = $rulecollection->getRuleClass();
$rulecriteria = new RuleCriteria(get_class($rule));
$input = [];
$input['rules_id'] = $rule_id;
$input['criteria'] = "serial";
$input['pattern']= 1;
$input['condition']=10;
$rulecriteria->add($input);
$input = [];
$input['rules_id'] = $rule_id;
$input['criteria'] = "serial";
$input['pattern']= 1;
$input['condition']=8;
$rulecriteria->add($input);
$input = [];
$input['rules_id'] = $rule_id;
$input['criteria'] = "itemtype";
$input['pattern']= 'Peripheral';
$input['condition']=0;
$rulecriteria->add($input);
// Add action
$ruleaction = new RuleAction(get_class($rule));
$input = [];
$input['rules_id'] = $rule_id;
$input['action_type'] = 'assign';
$input['field'] = '_fusion';
$input['value'] = '1';
$ruleaction->add($input);
$ranking++;
}
// Create rule for : Peripheral import
$rulecollection = new PluginFusioninventoryInventoryRuleImportCollection();
$ruleimport = new Rule();
$input = [];
$input['name']='Peripheral import';
$input['match']='AND';
$input['sub_type'] = 'PluginFusioninventoryInventoryRuleImport';
if (!$ruleimport->getFromDBByCrit($input)) {
$input['is_active']=1;
$input['ranking'] = $ranking;
$rule_id = $rulecollection->add($input);
// Add criteria
$rule = $rulecollection->getRuleClass();
$rulecriteria = new RuleCriteria(get_class($rule));
$input = [];
$input['rules_id'] = $rule_id;
$input['criteria'] = "itemtype";
$input['pattern']= 'Peripheral';
$input['condition']=0;
$rulecriteria->add($input);
$input = [];
$input['rules_id'] = $rule_id;
$input['criteria'] = "serial";
$input['pattern']= 1;
$input['condition']=8;
$rulecriteria->add($input);
// Add action
$ruleaction = new RuleAction(get_class($rule));
$input = [];
$input['rules_id'] = $rule_id;
$input['action_type'] = 'assign';
$input['field'] = '_fusion';
$input['value'] = '1';
$ruleaction->add($input);
$ranking++;
}
// Create rule for : Peripheral ignore import
$rulecollection = new PluginFusioninventoryInventoryRuleImportCollection();
$ruleimport = new Rule();
$input = [];
$input['name']='Peripheral ignore import';
$input['match']='AND';
$input['sub_type'] = 'PluginFusioninventoryInventoryRuleImport';
if (!$ruleimport->getFromDBByCrit($input)) {
$input['is_active']=1;
$input['ranking'] = $ranking;
$rule_id = $rulecollection->add($input);
// Add criteria
$rule = $rulecollection->getRuleClass();
$rulecriteria = new RuleCriteria(get_class($rule));
$input = [];
$input['rules_id'] = $rule_id;
$input['criteria'] = "itemtype";
$input['pattern']= 'Peripheral';
$input['condition']=0;
$rulecriteria->add($input);
// Add action
$ruleaction = new RuleAction(get_class($rule));
$input = [];
$input['rules_id'] = $rule_id;
$input['action_type'] = 'assign';
$input['field'] = '_ignore_import';
$input['value'] = '1';
$ruleaction->add($input);
}
// Add monitor rules (in first in rule list) when use it since 0.85
$DB->delete(
'glpi_plugin_fusioninventory_configs', [
'type' => 'import_printer'
]
);
/*
* Manage configuration of plugin
*/
$config = new PluginFusioninventoryConfig();
$pfSetup = new PluginFusioninventorySetup();
$users_id = $pfSetup->createFusionInventoryUser();
$a_input = [];
$a_input['ssl_only'] = 0;
$a_input['delete_task'] = 20;
$a_input['inventory_frequence'] = 24;
$a_input['agent_port'] = 62354;
$a_input['extradebug'] = 0;
$a_input['users_id'] = $users_id;
$a_input['agents_old_days'] = 0;
$a_input['agents_action'] = 0;
$a_input['agents_status'] = 0;
$config->addValues($a_input, false);
$a_input = [];
$a_input['version'] = PLUGIN_FUSIONINVENTORY_VERSION;
$config->addValues($a_input, true);
$a_input = [];
$a_input['ssl_only'] = 0;
if (isset($prepare_Config['ssl_only'])) {
$a_input['ssl_only'] = $prepare_Config['ssl_only'];
}
$a_input['delete_task'] = 20;
$a_input['inventory_frequence'] = 24;
$a_input['agent_port'] = 62354;
$a_input['extradebug'] = 0;
$a_input['users_id'] = 0;
//Deploy configuration options
$a_input['server_upload_path'] =
Toolbox::addslashes_deep(
implode(
DIRECTORY_SEPARATOR,
[
GLPI_PLUGIN_DOC_DIR,
'fusioninventory',
'upload'
]
)
);
$a_input['alert_winpath'] = 1;
$a_input['server_as_mirror'] = 1;
$a_input['mirror_match'] = 0;
$config->addValues($a_input, false);
$pfSetup = new PluginFusioninventorySetup();
$users_id = $pfSetup->createFusionInventoryUser();
$DB->update(
'glpi_plugin_fusioninventory_configs', [
'value' => $users_id
], [
'type' => 'users_id'
]
);
// Update fusinvinventory _config values to this plugin
$rulecollection = new PluginFusioninventoryInventoryRuleImportCollection();
$ruleimport = new Rule();
$input = [];
$input['name']='Monitor serial';
$input['match']='AND';
$input['sub_type'] = 'PluginFusioninventoryInventoryRuleImport';
if (!$ruleimport->getFromDBByCrit($input)) {
$input['is_active']=1;
$input['ranking'] = $ranking;
$rule_id = $rulecollection->add($input);
// Add criteria
$rule = $rulecollection->getRuleClass();
$rulecriteria = new RuleCriteria(get_class($rule));
$input = [];
$input['rules_id'] = $rule_id;
$input['criteria'] = "serial";
$input['pattern']= 1;
$input['condition']=10;
$rulecriteria->add($input);
$input = [];
$input['rules_id'] = $rule_id;
$input['criteria'] = "serial";
$input['pattern']= 1;
$input['condition']=8;
$rulecriteria->add($input);
$input = [];
$input['rules_id'] = $rule_id;
$input['criteria'] = "itemtype";
$input['pattern']= 'Monitor';
$input['condition']=0;
$rulecriteria->add($input);
// Add action
$ruleaction = new RuleAction(get_class($rule));
$input = [];
$input['rules_id'] = $rule_id;
$input['action_type'] = 'assign';
$input['field'] = '_fusion';
$input['value'] = '1';
$ruleaction->add($input);
$ranking++;
}
// Create rule for : Monitor import
$rulecollection = new PluginFusioninventoryInventoryRuleImportCollection();
$ruleimport = new Rule();
$input = [];
$input['name']='Monitor import';
$input['match']='AND';
$input['sub_type'] = 'PluginFusioninventoryInventoryRuleImport';
if (!$ruleimport->getFromDBByCrit($input)) {
$input['is_active']=1;
$input['ranking'] = $ranking;
$rule_id = $rulecollection->add($input);
// Add criteria
$rule = $rulecollection->getRuleClass();
$rulecriteria = new RuleCriteria(get_class($rule));
$input = [];
$input['rules_id'] = $rule_id;
$input['criteria'] = "itemtype";
$input['pattern']= 'Monitor';
$input['condition']=0;
$rulecriteria->add($input);
$input = [];
$input['rules_id'] = $rule_id;
$input['criteria'] = "serial";
$input['pattern']= 1;
$input['condition']=8;
$rulecriteria->add($input);
// Add action
$ruleaction = new RuleAction(get_class($rule));
$input = [];
$input['rules_id'] = $rule_id;
$input['action_type'] = 'assign';
$input['field'] = '_fusion';
$input['value'] = '1';
$ruleaction->add($input);
$ranking++;
}
// Create rule for : Monitor ignore import
$rulecollection = new PluginFusioninventoryInventoryRuleImportCollection();
$ruleimport = new Rule();
$input = [];
$input['name']='Monitor ignore import';
$input['match']='AND';
$input['sub_type'] = 'PluginFusioninventoryInventoryRuleImport';
if (!$ruleimport->getFromDBByCrit($input)) {
$input['is_active']=1;
$input['ranking'] = $ranking;
$rule_id = $rulecollection->add($input);
// Add criteria
$rule = $rulecollection->getRuleClass();
$rulecriteria = new RuleCriteria(get_class($rule));
$input = [];
$input['rules_id'] = $rule_id;
$input['criteria'] = "itemtype";
$input['pattern']= 'Monitor';
$input['condition']=0;
$rulecriteria->add($input);
// Add action
$ruleaction = new RuleAction(get_class($rule));
$input = [];
$input['rules_id'] = $rule_id;
$input['action_type'] = 'assign';
$input['field'] = '_ignore_import';
$input['value'] = '1';
$ruleaction->add($input);
}
// Add printer rules (in first in rule list) when use it since 0.85
$DB->delete(
'glpi_plugin_fusioninventory_configs', [
'type' => 'import_printer'
]
);
// Add 8 rules for connexions from networkequipment in top of the list
$rule = new PluginFusioninventoryInventoryRuleImport();
if (countElementsInTable("glpi_rules", [
"name" => "Device update (by mac+ifnumber restricted port)",
"sub_type" => "PluginFusioninventoryInventoryRuleImport"
]) == 0) {
$DB->query("UPDATE glpi_rules "
. "SET ranking = ranking + 8 "
. "WHERE `sub_type`='PluginFusioninventoryInventoryRuleImport'");
// Create rule for : Device update (by mac+ifnumber restricted port)
$rulecollection = new PluginFusioninventoryInventoryRuleImportCollection();
$ruleimport = new Rule();
$input = [
'name' => 'Device update (by mac+ifnumber restricted port)',
'match' => 'AND',
'sub_type' => 'PluginFusioninventoryInventoryRuleImport',
'is_active' => 1,
'ranking' => 0,
];
$rule_id = $rulecollection->add($input);
// Add criteria
$rule = $rulecollection->getRuleClass();
$rulecriteria = new RuleCriteria(get_class($rule));
$input = [
'rules_id' => $rule_id,
'criteria' => "itemtype",
'pattern' => 1,
'condition' => 9
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "mac",
'pattern' => 1,
'condition' => 10
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "mac",
'pattern' => 1,
'condition' => 8
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "ifnumber",
'pattern' => 1,
'condition' => 10
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "ifnumber",
'pattern' => 1,
'condition' => 8
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "link_criteria_port",
'pattern' => 1,
'condition' => 203
];
$rulecriteria->add($input);
// Add action
$ruleaction = new RuleAction(get_class($rule));
$input = [
'rules_id' => $rule_id,
'action_type' => 'assign',
'field' => '_fusion',
'value' => '1'
];
$ruleaction->add($input);
// Create rule for : Device update (by mac+ifnumber not restricted port)
$rulecollection = new PluginFusioninventoryInventoryRuleImportCollection();
$ruleimport = new Rule();
$input = [
'name' => 'Device update (by mac+ifnumber not restricted port)',
'match' => 'AND',
'sub_type' => 'PluginFusioninventoryInventoryRuleImport',
'is_active' => 1,
'ranking' => 1,
];
$rule_id = $rulecollection->add($input);
// Add criteria
$rule = $rulecollection->getRuleClass();
$rulecriteria = new RuleCriteria(get_class($rule));
$input = [
'rules_id' => $rule_id,
'criteria' => "itemtype",
'pattern' => 1,
'condition' => 9
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "mac",
'pattern' => 1,
'condition' => 10
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "mac",
'pattern' => 1,
'condition' => 8
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "ifnumber",
'pattern' => 1,
'condition' => 10
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "ifnumber",
'pattern' => 1,
'condition' => 8
];
$rulecriteria->add($input);
// Add action
$ruleaction = new RuleAction(get_class($rule));
$input = [
'rules_id' => $rule_id,
'action_type' => 'assign',
'field' => '_fusion',
'value' => '1'
];
$ruleaction->add($input);
// Create rule for : Device update (by mac+ifnumber not restricted port)
$rulecollection = new PluginFusioninventoryInventoryRuleImportCollection();
$ruleimport = new Rule();
$input = [
'name' => 'Device update (by ip+ifdescr restricted port)',
'match' => 'AND',
'sub_type' => 'PluginFusioninventoryInventoryRuleImport',
'is_active' => 1,
'ranking' => 2,
];
$rule_id = $rulecollection->add($input);
// Add criteria
$rule = $rulecollection->getRuleClass();
$rulecriteria = new RuleCriteria(get_class($rule));
$input = [
'rules_id' => $rule_id,
'criteria' => "itemtype",
'pattern' => 1,
'condition' => 9
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "ip",
'pattern' => 1,
'condition' => 10
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "ip",
'pattern' => 1,
'condition' => 8
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "ifdescr",
'pattern' => 1,
'condition' => 10
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "ifdescr",
'pattern' => 1,
'condition' => 8
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "link_criteria_port",
'pattern' => 1,
'condition' => 203
];
$rulecriteria->add($input);
// Add action
$ruleaction = new RuleAction(get_class($rule));
$input = [
'rules_id' => $rule_id,
'action_type' => 'assign',
'field' => '_fusion',
'value' => '1'
];
$ruleaction->add($input);
// Create rule for : Device update (by mac+ifnumber not restricted port)
$rulecollection = new PluginFusioninventoryInventoryRuleImportCollection();
$ruleimport = new Rule();
$input = [
'name' => 'Device update (by ip+ifdescr not restricted port)',
'match' => 'AND',
'sub_type' => 'PluginFusioninventoryInventoryRuleImport',
'is_active' => 1,
'ranking' => 3,
];
$rule_id = $rulecollection->add($input);
// Add criteria
$rule = $rulecollection->getRuleClass();
$rulecriteria = new RuleCriteria(get_class($rule));
$input = [
'rules_id' => $rule_id,
'criteria' => "itemtype",
'pattern' => 1,
'condition' => 9
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "ip",
'pattern' => 1,
'condition' => 10
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "ip",
'pattern' => 1,
'condition' => 8
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "ifdescr",
'pattern' => 1,
'condition' => 10
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "ifdescr",
'pattern' => 1,
'condition' => 8
];
$rulecriteria->add($input);
// Add action
$ruleaction = new RuleAction(get_class($rule));
$input = [
'rules_id' => $rule_id,
'action_type' => 'assign',
'field' => '_fusion',
'value' => '1'
];
$ruleaction->add($input);
// Create rule for : Device import (by mac+ifnumber)
$rulecollection = new PluginFusioninventoryInventoryRuleImportCollection();
$ruleimport = new Rule();
$input = [
'name' => 'Device import (by mac+ifnumber)',
'match' => 'AND',
'sub_type' => 'PluginFusioninventoryInventoryRuleImport',
'is_active' => 1,
'ranking' => 4,
];
$rule_id = $rulecollection->add($input);
// Add criteria
$rule = $rulecollection->getRuleClass();
$rulecriteria = new RuleCriteria(get_class($rule));
$input = [
'rules_id' => $rule_id,
'criteria' => "itemtype",
'pattern' => 1,
'condition' => 9
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "mac",
'pattern' => 1,
'condition' => 8
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "ifnumber",
'pattern' => 1,
'condition' => 8
];
$rulecriteria->add($input);
// Add action
$ruleaction = new RuleAction(get_class($rule));
$input = [
'rules_id' => $rule_id,
'action_type' => 'assign',
'field' => '_fusion',
'value' => '1'
];
$ruleaction->add($input);
// Create rule for : Device import (by ip+ifdescr)
$rulecollection = new PluginFusioninventoryInventoryRuleImportCollection();
$ruleimport = new Rule();
$input = [
'name' => 'Device import (by ip+ifdescr)',
'match' => 'AND',
'sub_type' => 'PluginFusioninventoryInventoryRuleImport',
'is_active' => 1,
'ranking' => 5,
];
$rule_id = $rulecollection->add($input);
// Add criteria
$rule = $rulecollection->getRuleClass();
$rulecriteria = new RuleCriteria(get_class($rule));
$input = [
'rules_id' => $rule_id,
'criteria' => "itemtype",
'pattern' => 1,
'condition' => 9
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "ip",
'pattern' => 1,
'condition' => 8
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "ifdescr",
'pattern' => 1,
'condition' => 8
];
$rulecriteria->add($input);
// Add action
$ruleaction = new RuleAction(get_class($rule));
$input = [
'rules_id' => $rule_id,
'action_type' => 'assign',
'field' => '_fusion',
'value' => '1'
];
$ruleaction->add($input);
// Create rule for : Update only mac address (mac on switch port)
$rulecollection = new PluginFusioninventoryInventoryRuleImportCollection();
$ruleimport = new Rule();
$input = [
'name' => 'Update only mac address (mac on switch port)',
'match' => 'AND',
'sub_type' => 'PluginFusioninventoryInventoryRuleImport',
'is_active' => 1,
'ranking' => 6,
];
$rule_id = $rulecollection->add($input);
// Add criteria
$rule = $rulecollection->getRuleClass();
$rulecriteria = new RuleCriteria(get_class($rule));
$input = [
'rules_id' => $rule_id,
'criteria' => "itemtype",
'pattern' => 1,
'condition' => 9
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "mac",
'pattern' => 1,
'condition' => 10
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "mac",
'pattern' => 1,
'condition' => 8
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "only_these_criteria",
'pattern' => 1,
'condition' => 204
];
$rulecriteria->add($input);
// Add action
$ruleaction = new RuleAction(get_class($rule));
$input = [
'rules_id' => $rule_id,
'action_type' => 'assign',
'field' => '_fusion',
'value' => '1'
];
$ruleaction->add($input);
// Create rule for : Import only mac address (mac on switch port)
$rulecollection = new PluginFusioninventoryInventoryRuleImportCollection();
$ruleimport = new Rule();
$input = [
'name' => 'Import only mac address (mac on switch port)',
'match' => 'AND',
'sub_type' => 'PluginFusioninventoryInventoryRuleImport',
'is_active' => 1,
'ranking' => 7,
];
$rule_id = $rulecollection->add($input);
// Add criteria
$rule = $rulecollection->getRuleClass();
$rulecriteria = new RuleCriteria(get_class($rule));
$input = [
'rules_id' => $rule_id,
'criteria' => "itemtype",
'pattern' => 1,
'condition' => 9
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "mac",
'pattern' => 1,
'condition' => 8
];
$rulecriteria->add($input);
$input = [
'rules_id' => $rule_id,
'criteria' => "only_these_criteria",
'pattern' => 1,
'condition' => 204
];
$rulecriteria->add($input);
// Add action
$ruleaction = new RuleAction(get_class($rule));
$input = [
'rules_id' => $rule_id,
'action_type' => 'assign',
'field' => '_fusion',
'value' => '1'
];
$ruleaction->add($input);
}
}
/**
* Manage the task part migration
*
* @global object $DB
* @param object $migration
*/
function do_task_migration($migration) {
global $DB;
/*
* Table glpi_plugin_fusioninventory_taskjobs
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_fusioninventory_taskjobs';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['plugin_fusioninventory_tasks_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['entities_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['name'] = ['type' => 'string',
'value' => null];
$a_table['fields']['date_creation'] = ['type' => 'datetime',
'value' => null];
$a_table['fields']['method'] = ['type' => 'string',
'value' => null];
$a_table['fields']['targets'] = ['type' => 'text',
'value' => null];
$a_table['fields']['actors'] = ['type' => 'text',
'value' => null];
$a_table['fields']['comment'] = ['type' => 'text',
'value' => null];
$a_table['fields']['rescheduled_taskjob_id'] = ['type' => 'integer',
'value' => null];
$a_table['fields']['statuscomments'] = ['type' => 'text',
'value' => null];
$a_table['fields']['enduser'] = ['type' => 'text',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'plugin_fusioninventory_tasks_id', 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'entities_id', 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'method', 'name' => '', 'type' => 'INDEX'];
$a_table['oldkeys'] = [];
migrateTablesFusionInventory($migration, $a_table);
}
/**
* Migrate search params from the old system to the new one
* As search engine integration has been improved with GLPI 0.85
*
* @since 0.85+1.0
*
* @global object $DB
*/
function doDynamicDataSearchParamsMigration() {
global $DB;
$iterator = $DB->request([
'SELECT' => ['id', 'fields_array'],
'FROM' => 'glpi_plugin_fusioninventory_deploygroups_dynamicdatas'
]);
if (count($iterator)) {
$update = $DB->buildUpdate(
'glpi_plugin_fusioninventory_deploygroups_dynamicdatas', [
'fields_array' => new \QueryParam()
], [
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($update);
while ($dynamic_data = $iterator->next()) {
$new_values = migrationDynamicGroupFields($dynamic_data['fields_array']);
$stmt->bind_param(
'ss',
$new_values,
$dynamic_data['id']
);
}
mysqli_stmt_close($stmt);
}
}
/**
* Migration of one dynamic group
*
* @since 0.85+1.0
*
* @param array $fields search paramas in old format (serialized)
* @return string search paramas in new format (serialized)
*/
function migrationDynamicGroupFields($fields) {
$data = json_decode($fields, true);
$new_fields = [];
if (!is_array($data)) {
$data = unserialize($fields);
}
//We're still in 0.85 or higher,
//no need for migration !
if (isset($data['criteria'])) {
return $fields;
}
//Upgrade from 0.84
if (isset($data['field'])) {
$count_fields = count ($data['field']);
for ($i = 0; $i < $count_fields; $i++) {
$new_value = [];
$new_value['value'] = $data['contains'][$i];
$new_value['field'] = $data['field'][$i];
$new_value['searchtype'] = $data['searchtype'][$i];
$new_fields['criteria'][] = $new_value;
}
if (isset($data['field2'])) {
$count_fields = count ($data['field2']);
for ($i = 0; $i < $count_fields; $i++) {
$new_value = [];
$new_value['value'] = $data['contains2'][$i];
$new_value['field'] = $data['field2'][$i];
$new_value['itemtype'] = $data['itemtype2'][$i];
$new_value['searchtype'] = $data['searchtype2'][$i];
$new_fields['metacriteria'][] = $new_value;
}
}
} else if (isset($data['itemtype']) && isset($data['name'])) {
//Ugrapde from 0.83, where the number of fields to search was fixed
$oldfields = ['name' => 2,
'serial' => 5,
'otherserial' => 6,
'locations_id' => 3,
'operatingsystems_id' => 45,
'room' => 92,
'building' => 91];
foreach ($oldfields as $name => $id) {
$new_value = [];
if (isset($data[$name]) && $data[$name] != '') {
$new_value['field'] = $id;
$new_value['value'] = $data[$name];
$new_value['searchtype'] = 'equals';
}
if (!empty($new_value)) {
$new_fields['criteria'][] = $new_value;
}
}
}
return serialize($new_fields);
}
/**
* Manage the display preference part migration
*
* @global object $DB
* @param string $olditemtype
* @param string $newitemtype
*/
function changeDisplayPreference($olditemtype, $newitemtype) {
global $DB;
$query = "SELECT `users_id`, `num`, count(*) as `cnt`, GROUP_CONCAT( id SEPARATOR ' ') as id
FROM `glpi_displaypreferences`
WHERE (`itemtype` = '".$newitemtype."'
OR `itemtype` = '".$olditemtype."')
group by `users_id`, `num`";
$result = $DB->query($query);
while ($data = $DB->fetchArray($result)) {
if ($data['cnt'] > 1) {
$ids = explode(' ', $data['id']);
array_shift($ids);
$DB->delete(
'glpi_displaypreferences', [
'id' => $ids
]
);
}
}
$DB->update(
'glpi_displaypreferences', [
'itemtype' => $newitemtype
], [
'itemtype' => $olditemtype
]
);
}
/**
* Manage the update of mapping part migration
*/
function pluginFusioninventoryUpdatemapping() {
/*
* Udpate mapping
*/
$pfMapping = new PluginFusioninventoryMapping();
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'location';
$a_input['table'] = 'glpi_networkequipments';
$a_input['tablefield'] = 'locations_id';
$a_input['locale'] = 1;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'firmware';
$a_input['table'] = 'glpi_networkequipments';
$a_input['tablefield'] = 'networkequipmentfirmwares_id';
$a_input['locale'] = 2;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'firmware1';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 2;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'firmware2';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 2;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'contact';
$a_input['table'] = 'glpi_networkequipments';
$a_input['tablefield'] = 'contact';
$a_input['locale'] = 403;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'comments';
$a_input['table'] = 'glpi_networkequipments';
$a_input['tablefield'] = 'comment';
$a_input['locale'] = 404;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'uptime';
$a_input['table'] = 'glpi_plugin_fusioninventory_networkequipments';
$a_input['tablefield'] = 'uptime';
$a_input['locale'] = 3;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'cpu';
$a_input['table'] = 'glpi_plugin_fusioninventory_networkequipments';
$a_input['tablefield'] = 'cpu';
$a_input['locale'] = 12;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'cpuuser';
$a_input['table'] = 'glpi_plugin_fusioninventory_networkequipments';
$a_input['tablefield'] = 'cpu';
$a_input['locale'] = 401;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'cpusystem';
$a_input['table'] = 'glpi_plugin_fusioninventory_networkequipments';
$a_input['tablefield'] = 'cpu';
$a_input['locale'] = 402;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'serial';
$a_input['table'] = 'glpi_networkequipments';
$a_input['tablefield'] = 'serial';
$a_input['locale'] = 13;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'otherserial';
$a_input['table'] = 'glpi_networkequipments';
$a_input['tablefield'] = 'otherserial';
$a_input['locale'] = 419;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'name';
$a_input['table'] = 'glpi_networkequipments';
$a_input['tablefield'] = 'name';
$a_input['locale'] = 20;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'ram';
$a_input['table'] = 'glpi_networkequipments';
$a_input['tablefield'] = 'ram';
$a_input['locale'] = 21;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'memory';
$a_input['table'] = 'glpi_plugin_fusioninventory_networkequipments';
$a_input['tablefield'] = 'memory';
$a_input['locale'] = 22;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'vtpVlanName';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 19;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'vmvlan';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 430;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'entPhysicalModelName';
$a_input['table'] = 'glpi_networkequipments';
$a_input['tablefield'] = 'networkequipmentmodels_id';
$a_input['locale'] = 17;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'macaddr';
$a_input['table'] = 'glpi_networkequipments';
$a_input['tablefield'] = 'ip';
$a_input['locale'] = 417;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'cdpCacheAddress';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 409;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'cdpCacheDevicePort';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 410;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'cdpCacheVersion';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 435;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'cdpCacheDeviceId';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 436;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'cdpCachePlatform';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 437;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'lldpRemChassisId';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 431;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'lldpRemPortId';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 432;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'lldpLocChassisId';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 432;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'lldpRemSysDesc';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 438;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'lldpRemSysName';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 439;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'lldpRemPortDesc';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 440;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'vlanTrunkPortDynamicStatus';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 411;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'dot1dTpFdbAddress';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 412;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'ipNetToMediaPhysAddress';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 413;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'dot1dTpFdbPort';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 414;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'dot1dBasePortIfIndex';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 415;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'ipAdEntAddr';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 421;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'PortVlanIndex';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 422;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'ifIndex';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 408;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'ifmtu';
$a_input['table'] = 'glpi_plugin_fusioninventory_networkports';
$a_input['tablefield'] = 'ifmtu';
$a_input['locale'] = 4;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'ifspeed';
$a_input['table'] = 'glpi_plugin_fusioninventory_networkports';
$a_input['tablefield'] = 'ifspeed';
$a_input['locale'] = 5;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'ifinternalstatus';
$a_input['table'] = 'glpi_plugin_fusioninventory_networkports';
$a_input['tablefield'] = 'ifinternalstatus';
$a_input['locale'] = 6;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'iflastchange';
$a_input['table'] = 'glpi_plugin_fusioninventory_networkports';
$a_input['tablefield'] = 'iflastchange';
$a_input['locale'] = 7;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'ifinoctets';
$a_input['table'] = 'glpi_plugin_fusioninventory_networkports';
$a_input['tablefield'] = 'ifinoctets';
$a_input['locale'] = 8;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'ifoutoctets';
$a_input['table'] = 'glpi_plugin_fusioninventory_networkports';
$a_input['tablefield'] = 'ifoutoctets';
$a_input['locale'] = 9;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'ifinerrors';
$a_input['table'] = 'glpi_plugin_fusioninventory_networkports';
$a_input['tablefield'] = 'ifinerrors';
$a_input['locale'] = 10;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'ifouterrors';
$a_input['table'] = 'glpi_plugin_fusioninventory_networkports';
$a_input['tablefield'] = 'ifouterrors';
$a_input['locale'] = 11;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'ifstatus';
$a_input['table'] = 'glpi_plugin_fusioninventory_networkports';
$a_input['tablefield'] = 'ifstatus';
$a_input['locale'] = 14;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'ifPhysAddress';
$a_input['table'] = 'glpi_networkports';
$a_input['tablefield'] = 'mac';
$a_input['locale'] = 15;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'ifName';
$a_input['table'] = 'glpi_networkports';
$a_input['tablefield'] = 'name';
$a_input['locale'] = 16;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'ifType';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 18;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'ifdescr';
$a_input['table'] = 'glpi_plugin_fusioninventory_networkports';
$a_input['tablefield'] = 'ifdescr';
$a_input['locale'] = 23;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'portDuplex';
$a_input['table'] = 'glpi_plugin_fusioninventory_networkports';
$a_input['tablefield'] = 'portduplex';
$a_input['locale'] = 33;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'NetworkEquipment';
$a_input['name'] = 'ifalias';
$a_input['table'] = 'glpi_plugin_fusioninventory_networkports';
$a_input['tablefield'] = 'ifalias';
$a_input['locale'] = 120;
$pfMapping->set($a_input);
// Printers
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'model';
$a_input['table'] = 'glpi_printers';
$a_input['tablefield'] = 'printermodels_id';
$a_input['locale'] = 25;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'enterprise';
$a_input['table'] = 'glpi_printers';
$a_input['tablefield'] = 'manufacturers_id';
$a_input['locale'] = 420;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'serial';
$a_input['table'] = 'glpi_printers';
$a_input['tablefield'] = 'serial';
$a_input['locale'] = 27;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'contact';
$a_input['table'] = 'glpi_printers';
$a_input['tablefield'] = 'contact';
$a_input['locale'] = 405;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'comments';
$a_input['table'] = 'glpi_printers';
$a_input['tablefield'] = 'comment';
$a_input['locale'] = 406;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'name';
$a_input['table'] = 'glpi_printers';
$a_input['tablefield'] = 'comment';
$a_input['locale'] = 24;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'otherserial';
$a_input['table'] = 'glpi_printers';
$a_input['tablefield'] = 'otherserial';
$a_input['locale'] = 418;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'memory';
$a_input['table'] = 'glpi_printers';
$a_input['tablefield'] = 'memory_size';
$a_input['locale'] = 26;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'location';
$a_input['table'] = 'glpi_printers';
$a_input['tablefield'] = 'locations_id';
$a_input['locale'] = 56;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'informations';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 165;
$a_input['shortlocale'] = 165;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'tonerblack';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 157;
$a_input['shortlocale'] = 157;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'tonerblackmax';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 166;
$a_input['shortlocale'] = 166;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'tonerblackused';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 167;
$a_input['shortlocale'] = 167;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'tonerblackremaining';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 168;
$a_input['shortlocale'] = 168;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'tonerblack2';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 157;
$a_input['shortlocale'] = 157;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'tonerblack2max';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 166;
$a_input['shortlocale'] = 166;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'tonerblack2used';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 167;
$a_input['shortlocale'] = 167;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'tonerblack2remaining';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 168;
$a_input['shortlocale'] = 168;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'tonercyan';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 158;
$a_input['shortlocale'] = 158;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'tonercyanmax';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 169;
$a_input['shortlocale'] = 169;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'tonercyanused';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 170;
$a_input['shortlocale'] = 170;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'tonercyanremaining';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 171;
$a_input['shortlocale'] = 171;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'tonermagenta';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 159;
$a_input['shortlocale'] = 159;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'tonermagentamax';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 172;
$a_input['shortlocale'] = 172;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'tonermagentaused';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 173;
$a_input['shortlocale'] = 173;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'tonermagentaremaining';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 174;
$a_input['shortlocale'] = 174;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'toneryellow';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 160;
$a_input['shortlocale'] = 160;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'toneryellowmax';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 175;
$a_input['shortlocale'] = 175;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'toneryellowused';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 176;
$a_input['shortlocale'] = 176;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'toneryellowused';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 177;
$a_input['shortlocale'] = 177;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'wastetoner';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 151;
$a_input['shortlocale'] = 151;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'wastetonermax';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 190;
$a_input['shortlocale'] = 190;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'wastetonerused';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 191;
$a_input['shortlocale'] = 191;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'wastetonerremaining';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 192;
$a_input['shortlocale'] = 192;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgeblack';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 134;
$a_input['shortlocale'] = 134;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgeblackmatte';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 133;
$a_input['shortlocale'] = 133;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgematteblack';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 133;
$a_input['shortlocale'] = 133;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgeblackphoto';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 135;
$a_input['shortlocale'] = 135;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgephotoblack';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 135;
$a_input['shortlocale'] = 135;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgecyan';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 136;
$a_input['shortlocale'] = 136;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgecyanlight';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 139;
$a_input['shortlocale'] = 139;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgelightcyan';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 139;
$a_input['shortlocale'] = 139;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgemagenta';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 138;
$a_input['shortlocale'] = 138;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgemagentalight';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 140;
$a_input['shortlocale'] = 140;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgelightmagenta';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 140;
$a_input['shortlocale'] = 140;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgeyellow';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 137;
$a_input['shortlocale'] = 137;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgegrey';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 196;
$a_input['shortlocale'] = 196;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgegray';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 196;
$a_input['shortlocale'] = 196;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgegreylight';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 211;
$a_input['shortlocale'] = 211;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgegraylight';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 211;
$a_input['shortlocale'] = 211;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgelightgrey';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 211;
$a_input['shortlocale'] = 211;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgelightgray';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 211;
$a_input['shortlocale'] = 211;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgeglossenhancer';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 206;
$a_input['shortlocale'] = 206;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgeblue';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 207;
$a_input['shortlocale'] = 207;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgegreen';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 208;
$a_input['shortlocale'] = 208;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgered';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 209;
$a_input['shortlocale'] = 209;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'cartridgechromaticred';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 210;
$a_input['shortlocale'] = 210;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'maintenancekit';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 156;
$a_input['shortlocale'] = 156;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'maintenancekitmax';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 193;
$a_input['shortlocale'] = 193;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'maintenancekitused';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 194;
$a_input['shortlocale'] = 194;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'maintenancekitremaining';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 195;
$a_input['shortlocale'] = 195;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'transferkit';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 212;
$a_input['shortlocale'] = 212;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'transferkitmax';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 199;
$a_input['shortlocale'] = 199;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'transferkitused';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 200;
$a_input['shortlocale'] = 200;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'transferkitremaining';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 201;
$a_input['shortlocale'] = 201;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'fuserkit';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 202;
$a_input['shortlocale'] = 202;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'fuserkitmax';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 203;
$a_input['shortlocale'] = 203;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'fuserkitused';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 204;
$a_input['shortlocale'] = 204;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'fuserkitremaining';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 205;
$a_input['shortlocale'] = 205;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'drumblack';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 161;
$a_input['shortlocale'] = 161;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'drumblackmax';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 178;
$a_input['shortlocale'] = 178;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'drumblackused';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 179;
$a_input['shortlocale'] = 179;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'drumblackremaining';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 180;
$a_input['shortlocale'] = 180;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'drumcyan';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 162;
$a_input['shortlocale'] = 162;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'drumcyanmax';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 181;
$a_input['shortlocale'] = 181;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'drumcyanused';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 182;
$a_input['shortlocale'] = 182;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'drumcyanremaining';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 183;
$a_input['shortlocale'] = 183;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'drummagenta';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 163;
$a_input['shortlocale'] = 163;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'drummagentamax';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 184;
$a_input['shortlocale'] = 184;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'drummagentaused';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 185;
$a_input['shortlocale'] = 185;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'drummagentaremaining';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 186;
$a_input['shortlocale'] = 186;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'drumyellow';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 164;
$a_input['shortlocale'] = 164;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'drumyellowmax';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 187;
$a_input['shortlocale'] = 187;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'drumyellowused';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 188;
$a_input['shortlocale'] = 188;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'drumyellowremaining';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 189;
$a_input['shortlocale'] = 189;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'pagecountertotalpages';
$a_input['table'] = 'glpi_plugin_fusioninventory_printerlogs';
$a_input['tablefield'] = 'pages_total';
$a_input['locale'] = 28;
$a_input['shortlocale'] = 128;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'pagecounterblackpages';
$a_input['table'] = 'glpi_plugin_fusioninventory_printerlogs';
$a_input['tablefield'] = 'pages_n_b';
$a_input['locale'] = 29;
$a_input['shortlocale'] = 129;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'pagecountercolorpages';
$a_input['table'] = 'glpi_plugin_fusioninventory_printerlogs';
$a_input['tablefield'] = 'pages_color';
$a_input['locale'] = 30;
$a_input['shortlocale'] = 130;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'pagecounterrectoversopages';
$a_input['table'] = 'glpi_plugin_fusioninventory_printerlogs';
$a_input['tablefield'] = 'pages_recto_verso';
$a_input['locale'] = 54;
$a_input['shortlocale'] = 154;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'pagecounterscannedpages';
$a_input['table'] = 'glpi_plugin_fusioninventory_printerlogs';
$a_input['tablefield'] = 'scanned';
$a_input['locale'] = 55;
$a_input['shortlocale'] = 155;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'pagecountertotalpages_print';
$a_input['table'] = 'glpi_plugin_fusioninventory_printerlogs';
$a_input['tablefield'] = 'pages_total_print';
$a_input['locale'] = 423;
$a_input['shortlocale'] = 1423;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'pagecounterblackpages_print';
$a_input['table'] = 'glpi_plugin_fusioninventory_printerlogs';
$a_input['tablefield'] = 'pages_n_b_print';
$a_input['locale'] = 424;
$a_input['shortlocale'] = 1424;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'pagecountercolorpages_print';
$a_input['table'] = 'glpi_plugin_fusioninventory_printerlogs';
$a_input['tablefield'] = 'pages_color_print';
$a_input['locale'] = 425;
$a_input['shortlocale'] = 1425;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'pagecountertotalpages_copy';
$a_input['table'] = 'glpi_plugin_fusioninventory_printerlogs';
$a_input['tablefield'] = 'pages_total_copy';
$a_input['locale'] = 426;
$a_input['shortlocale'] = 1426;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'pagecounterblackpages_copy';
$a_input['table'] = 'glpi_plugin_fusioninventory_printerlogs';
$a_input['tablefield'] = 'pages_n_b_copy';
$a_input['locale'] = 427;
$a_input['shortlocale'] = 1427;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'pagecountercolorpages_copy';
$a_input['table'] = 'glpi_plugin_fusioninventory_printerlogs';
$a_input['tablefield'] = 'pages_color_copy';
$a_input['locale'] = 428;
$a_input['shortlocale'] = 1428;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'pagecountertotalpages_fax';
$a_input['table'] = 'glpi_plugin_fusioninventory_printerlogs';
$a_input['tablefield'] = 'pages_total_fax';
$a_input['locale'] = 429;
$a_input['shortlocale'] = 1429;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'pagecounterlargepages';
$a_input['table'] = 'glpi_plugin_fusioninventory_printerlogs';
$a_input['tablefield'] = 'pages_total_large';
$a_input['locale'] = 434;
$a_input['shortlocale'] = 1434;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'ifPhysAddress';
$a_input['table'] = 'glpi_networkports';
$a_input['tablefield'] = 'mac';
$a_input['locale'] = 48;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'ifName';
$a_input['table'] = 'glpi_networkports';
$a_input['tablefield'] = 'name';
$a_input['locale'] = 57;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'ifaddr';
$a_input['table'] = 'glpi_networkports';
$a_input['tablefield'] = 'ip';
$a_input['locale'] = 407;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'ifType';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 97;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'ifIndex';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 416;
$pfMapping->set($a_input);
// ** Computer
$a_input = [];
$a_input['itemtype'] = 'Computer';
$a_input['name'] = 'serial';
$a_input['table'] = '';
$a_input['tablefield'] = 'serial';
$a_input['locale'] = 13;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Computer';
$a_input['name'] = 'ifPhysAddress';
$a_input['table'] = '';
$a_input['tablefield'] = 'mac';
$a_input['locale'] = 15;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Computer';
$a_input['name'] = 'ifaddr';
$a_input['table'] = '';
$a_input['tablefield'] = 'ip';
$a_input['locale'] = 407;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'paperrollinches';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 197;
$a_input['shortlocale'] = 197;
$pfMapping->set($a_input);
$a_input = [];
$a_input['itemtype'] = 'Printer';
$a_input['name'] = 'paperrollcentimeters';
$a_input['table'] = '';
$a_input['tablefield'] = '';
$a_input['locale'] = 198;
$a_input['shortlocale'] = 198;
$pfMapping->set($a_input);
}
/**
* Manage the update from 2.13 to 2.20 version (very old) part migration
*
* @global object $DB
* @param object $migration
*/
function update213to220_ConvertField($migration) {
global $DB;
// ----------------------------------------------------------------------
//NETWORK MAPPING MAPPING
// ----------------------------------------------------------------------
$constantsfield = [];
$constantsfield['reseaux > lieu'] = 'location';
$constantsfield['networking > location'] = 'location';
$constantsfield['Netzwerk > Standort'] = 'location';
$constantsfield['réseaux > firmware'] = 'firmware';
$constantsfield['networking > firmware'] = 'firmware';
$constantsfield['Netzwerk > Firmware'] = 'firmware';
$constantsfield['réseaux > firmware'] = 'firmware1';
$constantsfield['networking > firmware'] = 'firmware1';
$constantsfield['Netzwerk > Firmware'] = 'firmware1';
$constantsfield['réseaux > firmware'] = 'firmware2';
$constantsfield['networking > firmware'] = 'firmware2';
$constantsfield['Netzwerk > Firmware'] = 'firmware2';
$constantsfield['réseaux > contact'] = 'contact';
$constantsfield['networking > contact'] = 'contact';
$constantsfield['Netzwerk > Kontakt'] = 'contact';
$constantsfield['réseaux > description'] = 'comments';
$constantsfield['networking > comments'] = 'comments';
$constantsfield['Netzwerk > Kommentar'] = 'comments';
$constantsfield['réseaux > uptime'] = 'uptime';
$constantsfield['networking > uptime'] = 'uptime';
$constantsfield['Netzwerk > Uptime'] = 'uptime';
$constantsfield['réseaux > utilisation du CPU'] = 'cpu';
$constantsfield['networking > CPU usage'] = 'cpu';
$constantsfield['Netzwerk > CPU Auslastung'] = 'cpu';
$constantsfield['réseaux > CPU user'] = 'cpuuser';
$constantsfield['networking > CPU usage (user)'] = 'cpuuser';
$constantsfield['Netzwerk > CPU Benutzer'] = 'cpuuser';
$constantsfield['réseaux > CPU système'] = 'cpusystem';
$constantsfield['networking > CPU usage (system)'] = 'cpusystem';
$constantsfield['Netzwerk > CPU System'] = 'cpusystem';
$constantsfield['réseaux > numéro de série'] = 'serial';
$constantsfield['networking > serial number'] = 'serial';
$constantsfield['Netzwerk > Seriennummer'] = 'serial';
$constantsfield['réseaux > numéro d\'inventaire'] = 'otherserial';
$constantsfield['networking > Inventory number'] = 'otherserial';
$constantsfield['Netzwerk > Inventarnummer'] = 'otherserial';
$constantsfield['réseaux > nom'] = 'name';
$constantsfield['networking > name'] = 'name';
$constantsfield['Netzwerk > Name'] = 'name';
$constantsfield['réseaux > mémoire totale'] = 'ram';
$constantsfield['networking > total memory'] = 'ram';
$constantsfield['Netzwerk > Gesamter Speicher'] = 'ram';
$constantsfield['réseaux > mémoire libre'] = 'memory';
$constantsfield['networking > free memory'] = 'memory';
$constantsfield['Netzwerk > Freier Speicher'] = 'memory';
$constantsfield['réseaux > VLAN'] = 'vtpVlanName';
$constantsfield['networking > VLAN'] = 'vtpVlanName';
$constantsfield['Netzwerk > VLAN'] = 'vtpVlanName';
$constantsfield['réseaux > port > vlan'] = 'vmvlan';
$constantsfield['networking > port > vlan'] = 'vmvlan';
$constantsfield['réseaux > modèle'] = 'entPhysicalModelName';
$constantsfield['networking > model'] = 'entPhysicalModelName';
$constantsfield['Netzwerk > Modell'] = 'entPhysicalModelName';
$constantsfield['réseaux > adresse MAC'] = 'macaddr';
$constantsfield['networking > MAC address'] = 'macaddr';
$constantsfield['Netzwerk > MAC Adresse'] = 'macaddr';
$constantsfield['réseaux > Adresse CDP'] = 'cdpCacheAddress';
$constantsfield['networking > CDP address'] = 'cdpCacheAddress';
$constantsfield['Netzwerk > Adresse CDP'] = 'cdpCacheAddress';
$constantsfield['réseaux > port CDP'] = 'cdpCacheDevicePort';
$constantsfield['networking > CDP port'] = 'cdpCacheDevicePort';
$constantsfield['Netzwerk > Port CDP'] = 'cdpCacheDevicePort';
$constantsfield['réseaux > chassis id distant LLDP'] = 'lldpRemChassisId';
$constantsfield['networking > remote chassis id LLDP'] = 'lldpRemChassisId';
$constantsfield['réseaux > port distant LLDP'] = 'lldpRemPortId';
$constantsfield['networking > remote port LLDP'] = 'lldpRemPortId';
$constantsfield['réseaux > chassis id local LLDP'] = 'lldpLocChassisId';
$constantsfield['networking > localchassis id LLDP'] = 'lldpLocChassisId';
$constantsfield['réseaux > port > trunk/tagged'] = 'vlanTrunkPortDynamicStatus';
$constantsfield['networking > port > trunk/tagged'] = 'vlanTrunkPortDynamicStatus';
$constantsfield['Netzwerk > Port > trunk/tagged'] = 'vlanTrunkPortDynamicStatus';
$constantsfield['trunk'] = 'vlanTrunkPortDynamicStatus';
$constantsfield['réseaux > Adresses mac filtrées (dot1dTpFdbAddress)'] = 'dot1dTpFdbAddress';
$constantsfield['networking > MAC address filters (dot1dTpFdbAddress)'] = 'dot1dTpFdbAddress';
$constantsfield['Netzwerk > MAC Adressen Filter (dot1dTpFdbAddress)'] = 'dot1dTpFdbAddress';
$constantsfield['réseaux > adresses physiques mémorisées (ipNetToMediaPhysAddress)'] =
'ipNetToMediaPhysAddress';
$constantsfield['networking > Physical addresses in memory (ipNetToMediaPhysAddress)'] =
'ipNetToMediaPhysAddress';
$constantsfield['Netzwerk > Physikalische Adressen im Speicher (ipNetToMediaPhysAddress)'] =
'ipNetToMediaPhysAddress';
$constantsfield['réseaux > instances de ports (dot1dTpFdbPort)'] = 'dot1dTpFdbPort';
$constantsfield['networking > Port instances (dot1dTpFdbPort)'] = 'dot1dTpFdbPort';
$constantsfield['Netzwerk > Instanzen des Ports (dot1dTpFdbPort)'] = 'dot1dTpFdbPort';
$constantsfield['réseaux > numéro de ports associé ID du port (dot1dBasePortIfIndex)'] =
'dot1dBasePortIfIndex';
$constantsfield['networking > Port number associated with port ID (dot1dBasePortIfIndex)'] =
'dot1dBasePortIfIndex';
$constantsfield['Netzwerk > Verkn&uuml;pfung der Portnummerierung mit der ID des Ports (dot1dBasePortIfIndex)'] = 'dot1dBasePortIfIndex';
$constantsfield['réseaux > addresses IP'] = 'ipAdEntAddr';
$constantsfield['networking > IP addresses'] = 'ipAdEntAddr';
$constantsfield['Netzwerk > IP Adressen'] = 'ipAdEntAddr';
$constantsfield['réseaux > portVlanIndex'] = 'PortVlanIndex';
$constantsfield['networking > portVlanIndex'] = 'PortVlanIndex';
$constantsfield['Netzwerk > portVlanIndex'] = 'PortVlanIndex';
$constantsfield['réseaux > port > numéro index'] = 'ifIndex';
$constantsfield['networking > port > index number'] = 'ifIndex';
$constantsfield['Netzwerk > Port > Nummerischer Index'] = 'ifIndex';
$constantsfield['réseaux > port > mtu'] = 'ifmtu';
$constantsfield['networking > port > mtu'] = 'ifmtu';
$constantsfield['Netzwerk > Port > MTU'] = 'ifmtu';
$constantsfield['réseaux > port > vitesse'] = 'ifspeed';
$constantsfield['networking > port > speed'] = 'ifspeed';
$constantsfield['Netzwerk > Port > Geschwindigkeit'] = 'ifspeed';
$constantsfield['réseaux > port > statut interne'] = 'ifinternalstatus';
$constantsfield['networking > port > internal status'] = 'ifinternalstatus';
$constantsfield['Netzwerk > Port > Interner Zustand'] = 'ifinternalstatus';
$constantsfield['réseaux > port > Dernier changement'] = 'iflastchange';
$constantsfield['networking > ports > Last change'] = 'iflastchange';
$constantsfield['Netzwerk > Ports > Letzte &Auml;nderung'] = 'iflastchange';
$constantsfield['réseaux > port > nombre d\'octets entrés'] = 'ifinoctets';
$constantsfield['networking > port > number of bytes in'] = 'ifinoctets';
$constantsfield['Netzwerk > Port > Anzahl eingegangene Bytes'] = 'ifinoctets';
$constantsfield['réseaux > port > nombre d\'octets sortis'] = 'ifoutoctets';
$constantsfield['networking > port > number of bytes out'] = 'ifoutoctets';
$constantsfield['Netzwerk > Port > Anzahl ausgehende Bytes'] = 'ifoutoctets';
$constantsfield['réseaux > port > nombre d\'erreurs entrées'] = 'ifinerrors';
$constantsfield['networking > port > number of input errors'] = 'ifinerrors';
$constantsfield['Netzwerk > Port > Anzahl Input Fehler'] = 'ifinerrors';
$constantsfield['réseaux > port > nombre d\'erreurs sorties'] = 'ifouterrors';
$constantsfield['networking > port > number of output errors'] = 'ifouterrors';
$constantsfield['Netzwerk > Port > Anzahl Fehler Ausgehend'] = 'ifouterrors';
$constantsfield['réseaux > port > statut de la connexion'] = 'ifstatus';
$constantsfield['networking > port > connection status'] = 'ifstatus';
$constantsfield['Netzwerk > Port > Verbingungszustand'] = 'ifstatus';
$constantsfield['réseaux > port > adresse MAC'] = 'ifPhysAddress';
$constantsfield['networking > port > MAC address'] = 'ifPhysAddress';
$constantsfield['Netzwerk > Port > MAC Adresse'] = 'ifPhysAddress';
$constantsfield['réseaux > port > nom'] = 'ifName';
$constantsfield['networking > port > name'] = 'ifName';
$constantsfield['Netzwerk > Port > Name'] = 'ifName';
$constantsfield['réseaux > port > type'] = 'ifType';
$constantsfield['networking > ports > type'] = 'ifType';
$constantsfield['Netzwerk > Ports > Typ'] = 'ifType';
$constantsfield['réseaux > port > description du port'] = 'ifdescr';
$constantsfield['networking > port > port description'] = 'ifdescr';
$constantsfield['Netzwerk > Port > Port Bezeichnung'] = 'ifdescr';
$constantsfield['réseaux > port > type de duplex'] = 'portDuplex';
$constantsfield['networking > port > duplex type'] = 'portDuplex';
$constantsfield['Netzwerk > Port > Duplex Typ'] = 'portDuplex';
$constantsfield['imprimante > modèle'] = 'model';
$constantsfield['printer > model'] = 'model';
$constantsfield['Drucker > Modell'] = 'model';
$constantsfield['imprimante > fabricant'] = 'enterprise';
$constantsfield['printer > manufacturer'] = 'enterprise';
$constantsfield['Drucker > Hersteller'] = 'enterprise';
$constantsfield['imprimante > numéro de série'] = 'serial';
$constantsfield['printer > serial number'] = 'serial';
$constantsfield['Drucker > Seriennummer'] = 'serial';
$constantsfield['imprimante > contact'] = 'contact';
$constantsfield['printer > contact'] = 'contact';
$constantsfield['Drucker > Kontakt'] = 'contact';
$constantsfield['imprimante > description'] = 'comments';
$constantsfield['printer > comments'] = 'comments';
$constantsfield['Drucker > Kommentar'] = 'comments';
$constantsfield['imprimante > nom'] = 'name';
$constantsfield['printer > name'] = 'name';
$constantsfield['Drucker > Name'] = 'name';
$constantsfield['imprimante > numéro d\'inventaire'] = 'otherserial';
$constantsfield['printer > Inventory number'] = 'otherserial';
$constantsfield['Drucker > Inventarnummer'] = 'otherserial';
$constantsfield['imprimante > mémoire totale'] = 'memory';
$constantsfield['printer > total memory'] = 'memory';
$constantsfield['Drucker > Gesamter Speicher'] = 'memory';
$constantsfield['imprimante > lieu'] = 'location';
$constantsfield['printer > location'] = 'location';
$constantsfield['Drucker > Standort'] = 'location';
$constantsfield['Informations diverses regroupées'] = 'informations';
$constantsfield['Many informations grouped'] = 'informations';
$constantsfield['Many informations grouped'] = 'informations';
$constantsfield['Toner Noir'] = 'tonerblack';
$constantsfield['Black toner'] = 'tonerblack';
$constantsfield['Toner Noir Max'] = 'tonerblackmax';
$constantsfield['Black toner Max'] = 'tonerblackmax';
$constantsfield['Toner Noir Utilisé'] = 'tonerblackused';
$constantsfield['Toner Noir Restant'] = 'tonerblackremaining';
$constantsfield['Toner Noir'] = 'tonerblack2';
$constantsfield['Black toner'] = 'tonerblack2';
$constantsfield['Toner Noir Max'] = 'tonerblack2max';
$constantsfield['Black toner Max'] = 'tonerblack2max';
$constantsfield['Toner Noir Utilisé'] = 'tonerblack2used';
$constantsfield['Toner Noir Restant'] = 'tonerblack2remaining';
$constantsfield['Toner Cyan'] = 'tonercyan';
$constantsfield['Cyan toner'] = 'tonercyan';
$constantsfield['Toner Cyan Max'] = 'tonercyanmax';
$constantsfield['Cyan toner Max'] = 'tonercyanmax';
$constantsfield['Toner Cyan Utilisé'] = 'tonercyanused';
$constantsfield['Toner Cyan Restant'] = 'tonercyanremaining';
$constantsfield['Toner Magenta'] = 'tonermagenta';
$constantsfield['Magenta toner'] = 'tonermagenta';
$constantsfield['Toner Magenta Max'] = 'tonermagentamax';
$constantsfield['Magenta toner Max'] = 'tonermagentamax';
$constantsfield['Toner Magenta Utilisé'] = 'tonermagentaused';
$constantsfield['Magenta toner Utilisé'] = 'tonermagentaused';
$constantsfield['Toner Magenta Restant'] = 'tonermagentaremaining';
$constantsfield['Magenta toner Restant'] = 'tonermagentaremaining';
$constantsfield['Toner Jaune'] = 'toneryellow';
$constantsfield['Yellow toner'] = 'toneryellow';
$constantsfield['Toner Jaune Max'] = 'toneryellowmax';
$constantsfield['Yellow toner Max'] = 'toneryellowmax';
$constantsfield['Toner Jaune Utilisé'] = 'toneryellowused';
$constantsfield['Yellow toner Utilisé'] = 'toneryellowused';
$constantsfield['Toner Jaune Restant'] = 'toneryellowremaining';
$constantsfield['Yellow toner Restant'] = 'toneryellowremaining';
$constantsfield['Bac récupérateur de déchet'] = 'wastetoner';
$constantsfield['Waste bin'] = 'wastetoner';
$constantsfield['Abfalleimer'] = 'wastetoner';
$constantsfield['Bac récupérateur de déchet Max'] = 'wastetonermax';
$constantsfield['Waste bin Max'] = 'wastetonermax';
$constantsfield['Bac récupérateur de déchet Utilisé'] = 'wastetonerused';
$constantsfield['Waste bin Utilisé'] = 'wastetonerused';
$constantsfield['Bac récupérateur de déchet Restant'] = 'wastetonerremaining';
$constantsfield['Waste bin Restant'] = 'wastetonerremaining';
$constantsfield['Cartouche noir'] = 'cartridgeblack';
$constantsfield['Black ink cartridge'] = 'cartridgeblack';
$constantsfield['Schwarze Kartusche'] = 'cartridgeblack';
$constantsfield['Cartouche noir'] = 'cartridgeblackmatte';
$constantsfield['Black ink cartridge'] = 'cartridgeblackmatte';
$constantsfield['Schwarze Kartusche'] = 'cartridgeblackmatte';
$constantsfield['Cartouche noir photo'] = 'cartridgeblackphoto';
$constantsfield['Photo black ink cartridge'] = 'cartridgeblackphoto';
$constantsfield['Photoschwarz Kartusche'] = 'cartridgeblackphoto';
$constantsfield['Cartouche cyan'] = 'cartridgecyan';
$constantsfield['Cyan ink cartridge'] = 'cartridgecyan';
$constantsfield['Cyan Kartusche'] = 'cartridgecyan';
$constantsfield['Cartouche cyan clair'] = 'cartridgecyanlight';
$constantsfield['Light cyan ink cartridge'] = 'cartridgecyanlight';
$constantsfield['Leichtes Cyan Kartusche'] = 'cartridgecyanlight';
$constantsfield['Cartouche magenta'] = 'cartridgemagenta';
$constantsfield['Magenta ink cartridge'] = 'cartridgemagenta';
$constantsfield['Magenta Kartusche'] = 'cartridgemagenta';
$constantsfield['Cartouche magenta clair'] = 'cartridgemagentalight';
$constantsfield['Light ink magenta cartridge'] = 'cartridgemagentalight';
$constantsfield['Leichtes Magenta Kartusche'] = 'cartridgemagentalight';
$constantsfield['Cartouche jaune'] = 'cartridgeyellow';
$constantsfield['Yellow ink cartridge'] = 'cartridgeyellow';
$constantsfield['Gelbe Kartusche'] = 'cartridgeyellow';
$constantsfield['Cartouche grise'] = 'cartridgegrey';
$constantsfield['Grey ink cartridge'] = 'cartridgegrey';
$constantsfield['Grau Kartusche'] = 'cartridgegrey';
$constantsfield['Cartouche grise clair'] = 'cartridgegreylight';
$constantsfield['Light Grey ink cartridge'] = 'cartridgegreylight';
$constantsfield['Leichtes Grau Kartusche'] = 'cartridgegreylight';
$constantsfield['Cartouche le amplificateur de brillance'] = 'cartridgeglossenhancer';
$constantsfield['Gloss Enhancer ink cartridge'] = 'cartridgeglossenhancer';
$constantsfield['Gloss Enhancer Kartusche'] = 'cartridgeglossenhancer';
$constantsfield['Cartouche bleu'] = 'cartridgeblue';
$constantsfield['Blue ink cartridge'] = 'cartridgeblue';
$constantsfield['Kartusche blau'] = 'cartridgeblue';
$constantsfield['Cartouche vert'] = 'cartridgegreen';
$constantsfield['green ink cartridge'] = 'cartridgegreen';
$constantsfield['Kartusche grün'] = 'cartridgegreen';
$constantsfield['Cartouche rouge'] = 'cartridgered';
$constantsfield['Red ink cartridge'] = 'cartridgered';
$constantsfield['Kartusche rot'] = 'cartridgered';
$constantsfield['Cartouche rouge chromatique'] = 'cartridgechromaticred';
$constantsfield['Chromatic red ink cartridge'] = 'cartridgechromaticred';
$constantsfield['Kartusche chromatische rot'] = 'cartridgechromaticred';
$constantsfield['Kit de maintenance'] = 'maintenancekit';
$constantsfield['Maintenance kit'] = 'maintenancekit';
$constantsfield['Wartungsmodul'] = 'maintenancekit';
$constantsfield['Kit de maintenance Max'] = 'maintenancekitmax';
$constantsfield['Maintenance kit Max'] = 'maintenancekitmax';
$constantsfield['Kit de maintenance Utilisé'] = 'maintenancekitused';
$constantsfield['Maintenance kit Used'] = 'maintenancekitused';
$constantsfield['Kit de maintenance Restant'] = 'maintenancekitremaining';
$constantsfield['Maintenance kit Remaining'] = 'maintenancekitremaining';
$constantsfield['Kit de transfert'] = 'transferkit';
$constantsfield['Transfer kit'] = 'transferkit';
$constantsfield['Transfermodul'] = 'transferkit';
$constantsfield['Kit de transfert Max'] = 'transferkitmax';
$constantsfield['Transfer kit Max'] = 'transferkitmax';
$constantsfield['Kit de transfert Utilisé'] = 'transferkitused';
$constantsfield['Transfer kit Used'] = 'transferkitused';
$constantsfield['Kit de transfert Restant'] = 'transferkitremaining';
$constantsfield['Transfer kit Remaining'] = 'transferkitremaining';
$constantsfield['Kit de fusion'] = 'fuserkit';
$constantsfield['Fuser kit'] = 'fuserkit';
$constantsfield['fixiereinheitmodul'] = 'fuserkit';
$constantsfield['Kit de fusion Max'] = 'fuserkitmax';
$constantsfield['fusion kit Max'] = 'fuserkitmax';
$constantsfield['Kit de fusion Utilisé'] = 'fuserkitused';
$constantsfield['Fuser kit used'] = 'fuserkitused';
$constantsfield['Kit de fusion Restant'] = 'fuserkitremaining';
$constantsfield['Fuser kit remaining'] = 'fuserkitremaining';
$constantsfield['Tambour Noir'] = 'drumblack';
$constantsfield['Black drum'] = 'drumblack';
$constantsfield['Tambour Noir Max'] = 'drumblackmax';
$constantsfield['Black drum Max'] = 'drumblackmax';
$constantsfield['Tambour Noir Utilisé'] = 'drumblackused';
$constantsfield['Black drum Utilisé'] = 'drumblackused';
$constantsfield['Tambour Noir Restant'] = 'drumblackremaining';
$constantsfield['Black drum Restant'] = 'drumblackremaining';
$constantsfield['Tambour Cyan'] = 'drumcyan';
$constantsfield['Cyan drum'] = 'drumcyan';
$constantsfield['Tambour Cyan Max'] = 'drumcyanmax';
$constantsfield['Cyan drum Max'] = 'drumcyanmax';
$constantsfield['Tambour Cyan Utilisé'] = 'drumcyanused';
$constantsfield['Cyan drum Utilisé'] = 'drumcyanused';
$constantsfield['Tambour Cyan Restant'] = 'drumcyanremaining';
$constantsfield['Cyan drumRestant'] = 'drumcyanremaining';
$constantsfield['Tambour Magenta'] = 'drummagenta';
$constantsfield['Magenta drum'] = 'drummagenta';
$constantsfield['Tambour Magenta Max'] = 'drummagentamax';
$constantsfield['Magenta drum Max'] = 'drummagentamax';
$constantsfield['Tambour Magenta Utilisé'] = 'drummagentaused';
$constantsfield['Magenta drum Utilisé'] = 'drummagentaused';
$constantsfield['Tambour Magenta Restant'] = 'drummagentaremaining';
$constantsfield['Magenta drum Restant'] = 'drummagentaremaining';
$constantsfield['Tambour Jaune'] = 'drumyellow';
$constantsfield['Yellow drum'] = 'drumyellow';
$constantsfield['Tambour Jaune Max'] = 'drumyellowmax';
$constantsfield['Yellow drum Max'] = 'drumyellowmax';
$constantsfield['Tambour Jaune Utilisé'] = 'drumyellowused';
$constantsfield['Yellow drum Utilisé'] = 'drumyellowused';
$constantsfield['Tambour Jaune Restant'] = 'drumyellowremaining';
$constantsfield['Yellow drum Restant'] = 'drumyellowremaining';
$constantsfield['imprimante > compteur > nombre total de pages imprimées'] =
'pagecountertotalpages';
$constantsfield['printer > meter > total number of printed pages'] = 'pagecountertotalpages';
$constantsfield['Drucker > Messung > Gesamtanzahl gedruckter Seiten'] = 'pagecountertotalpages';
$constantsfield['imprimante > compteur > nombre de pages noir et blanc imprimées'] =
'pagecounterblackpages';
$constantsfield['printer > meter > number of printed black and white pages'] =
'pagecounterblackpages';
$constantsfield['Drucker > Messung > Gesamtanzahl gedrucker Schwarz/Wei&szlig; Seiten'] =
'pagecounterblackpages';
$constantsfield['imprimante > compteur > nombre de pages couleur imprimées'] =
'pagecountercolorpages';
$constantsfield['printer > meter > number of printed color pages'] = 'pagecountercolorpages';
$constantsfield['Drucker > Messung > Gesamtanzahl gedruckter Farbseiten'] =
'pagecountercolorpages';
$constantsfield['imprimante > compteur > nombre de pages recto/verso imprimées'] =
'pagecounterrectoversopages';
$constantsfield['printer > meter > number of printed duplex pages'] =
'pagecounterrectoversopages';
$constantsfield['Drucker > Messung > Anzahl der gedruckten Duplex Seiten'] =
'pagecounterrectoversopages';
$constantsfield['imprimante > compteur > nombre de pages scannées'] = 'pagecounterscannedpages';
$constantsfield['printer > meter > nomber of scanned pages'] = 'pagecounterscannedpages';
$constantsfield['Drucker > Messung > Anzahl der gescannten Seiten'] = 'pagecounterscannedpages';
$constantsfield['imprimante > compteur > nombre total de pages imprimées (impression)'] =
'pagecountertotalpages_print';
$constantsfield['printer > meter > total number of printed pages (print mode)'] =
'pagecountertotalpages_print';
$constantsfield['Drucker > Messung > Gesamtanzahl gedruckter Seiten (Druck)'] =
'pagecountertotalpages_print';
$constantsfield['imprimante > compteur > nombre de pages noir et blanc imprimées (impression)'] =
'pagecounterblackpages_print';
$constantsfield['printer > meter > number of printed black and white pages (print mode)'] =
'pagecounterblackpages_print';
$constantsfield['Drucker > Messung > Gesamtanzahl gedruckter Schwarz/Wei&szlig; Seiten (Druck)']=
'pagecounterblackpages_print';
$constantsfield['imprimante > compteur > nombre de pages couleur imprimées (impression)'] =
'pagecountercolorpages_print';
$constantsfield['printer > meter > number of printed color pages (print mode)'] =
'pagecountercolorpages_print';
$constantsfield['Drucker > Messung > Gesamtanzahl farbig gedruckter Seiten (Druck)'] =
'pagecountercolorpages_print';
$constantsfield['imprimante > compteur > nombre total de pages imprimées (copie)'] =
'pagecountertotalpages_copy';
$constantsfield['printer > meter > total number of printed pages (copy mode)'] =
'pagecountertotalpages_copy';
$constantsfield['Drucker > Messung > Gesamtanzahl gedruckter Seiten (Kopie)'] =
'pagecountertotalpages_copy';
$constantsfield['imprimante > compteur > nombre de pages noir et blanc imprimées (copie)'] =
'pagecounterblackpages_copy';
$constantsfield['printer > meter > number of printed black and white pages (copy mode)'] =
'pagecounterblackpages_copy';
$constantsfield['Drucker > Messung > Gesamtanzahl gedruckter Schwarz/Wei&szlig; Seite (Kopie)'] =
'pagecounterblackpages_copy';
$constantsfield['imprimante > compteur > nombre de pages couleur imprimées (copie)'] =
'pagecountercolorpages_copy';
$constantsfield['printer > meter > number of printed color pages (copy mode)'] =
'pagecountercolorpages_copy';
$constantsfield['Drucker > Messung > Gesamtanzahl farbig gedruckter Seiten (Kopie)'] =
'pagecountercolorpages_copy';
$constantsfield['imprimante > compteur > nombre total de pages imprimées (fax)'] =
'pagecountertotalpages_fax';
$constantsfield['printer > meter > total number of printed pages (fax mode)'] =
'pagecountertotalpages_fax';
$constantsfield['Drucker > Messung > Gesamtanzahl gedruckter Seiten (Fax)'] =
'pagecountertotalpages_fax';
$constantsfield['imprimante > compteur > nombre total de pages larges imprimées'] =
'pagecounterlargepages';
$constantsfield['printer > meter > total number of large printed pages'] =
'pagecounterlargepages';
$constantsfield['imprimante > port > adresse MAC'] = 'ifPhysAddress';
$constantsfield['printer > port > MAC address'] = 'ifPhysAddress';
$constantsfield['Drucker > Port > MAC Adresse'] = 'ifPhysAddress';
$constantsfield['imprimante > port > nom'] = 'ifName';
$constantsfield['printer > port > name'] = 'ifName';
$constantsfield['Drucker > Port > Name'] = 'ifName';
$constantsfield['imprimante > port > adresse IP'] = 'ifaddr';
$constantsfield['printer > port > IP address'] = 'ifaddr';
$constantsfield['Drucker > Port > IP Adresse'] = 'ifaddr';
$constantsfield['imprimante > port > type'] = 'ifType';
$constantsfield['printer > port > type'] = 'ifType';
$constantsfield['Drucker > port > Typ'] = 'ifType';
$constantsfield['imprimante > port > numéro index'] = 'ifIndex';
$constantsfield['printer > port > index number'] = 'ifIndex';
$constantsfield['Drucker > Port > Indexnummer'] = 'ifIndex';
if ($DB->tableExists("glpi_plugin_tracker_snmp_history")) {
//echo "Converting history port ...\n";
$i = 0;
$nb = count($constantsfield);
$migration->addKey("glpi_plugin_tracker_snmp_history",
"Field");
$migration->addKey("glpi_plugin_tracker_snmp_history",
["Field", "old_value"],
"Field_2");
$migration->addKey("glpi_plugin_tracker_snmp_history",
["Field", "new_value"],
"Field_3");
$migration->migrationOneTable("glpi_plugin_tracker_snmp_history");
$update = $DB->buildUpdate(
'glpi_plugin_tracker_snmp_history', [
'Field' => new \QueryParam()
], [
'Field' => new \QueryParam()
]
);
$stmt = $DB->prepare($update);
foreach ($constantsfield as $langvalue => $mappingvalue) {
$i++;
$stmt->bind_param(
'ss',
$mappingvalue,
$langvalue
);
$stmt->execute();
$migration->displayMessage("$i / $nb");
}
mysqli_stmt_close($stmt);
$migration->displayMessage("$i / $nb");
// Move connections from glpi_plugin_fusioninventory_snmp_history to
// glpi_plugin_fusioninventory_snmp_history_connections
//echo "Moving creation connections history\n";
$query = "SELECT *
FROM `glpi_plugin_tracker_snmp_history`
WHERE `Field` = '0'
AND ((`old_value` NOT LIKE '%:%')
OR (`old_value` IS NULL))";
$stmt = null;
if ($result=$DB->query($query)) {
$nb = $DB->numrows($result);
$i = 0;
$migration->displayMessage("$i / $nb");
while ($data=$DB->fetchArray($result)) {
$i++;
// Search port from mac address
$iterator = $DB->request([
'FROM' => 'glpi_networkports',
'WHERE' => ['mac' => $data['new_value']]
]);
if (count($iterator) == 1) {
$input = [];
$data_port = $iterator->next();
$input['FK_port_source'] = $data_port['id'];
$port_iterator = $DB->request([
'FROM' => 'glpi_networkports',
'WHERE' => [
'items_id' => $data['new_device_ID'],
'itemtype' => $data['new_device_type']
]
]);
if (count($port_iterator) == 1) {
if ($stmt == null) {
$insert = $DB->buildInsert(
'glpi_plugin_fusinvsnmp_networkportconnectionlogs', [
'date_mod' => new \QueryParam(),
'creation' => new \QueryParam(),
'networkports_id_source' => new \QueryParam(),
'networkports_id_destination' => new \QueryParam()
]
);
$stmt = $DB->prepare($insert);
}
$data_port2 = $port_iterator->next();
$input['FK_port_destination'] = $data_port2['id'];
$input['date'] = $data['date_mod'];
$input['creation'] = 1;
$input['process_number'] = $data['FK_process'];
$stmt->bind_param(
'ssss',
$input['date'],
$input['creation'],
$input['FK_port_source'],
$input['FK_port_destination']
);
$stmt->execute();
}
}
$DB->delete(
'glpi_plugin_tracker_snmp_history', [
'id' => $data['ID']
]
);
if (preg_match("/000$/", $i)) {
$migration->displayMessage("$i / $nb");
}
}
$migration->displayMessage("$i / $nb");
}
if ($stmt !== null) {
mysqli_stmt_close($stmt);
}
//echo "Moving deleted connections history\n";
$query = "SELECT *
FROM `glpi_plugin_tracker_snmp_history`
WHERE `Field` = '0'
AND ((`new_value` NOT LIKE '%:%')
OR (`new_value` IS NULL))";
$stmt = null;
if ($result=$DB->query($query)) {
$nb = $DB->numrows($result);
$i = 0;
$migration->displayMessage("$i / $nb");
while ($data=$DB->fetchArray($result)) {
$i++;
// Search port from mac address
$iterator = $DB->request([
'FROM' => 'glpi_networkports',
'WHERE' => ['mac' => $data['old_value']]
]);
if (count($iterator) == 1) {
$input = [];
$data_port = $iterator->next();
$input['FK_port_source'] = $data_port['id'];
$port_iterator = $DB->request([
'FROM' => 'glpi_networkports',
'WHERE' => [
'items_id' => $data['old_device_ID'],
'itemtype' => $data['old_device_type']
]
]);
if (count($port_iterator) == 1) {
$data_port2 = $port_iterator->next();
$input['FK_port_destination'] = $data_port2['id'];
$input['date'] = $data['date_mod'];
$input['creation'] = 1;
$input['process_number'] = $data['FK_process'];
if ($input['FK_port_source'] != $input['FK_port_destination']) {
if ($stmt == null) {
$insert = $DB->buildInsert(
'glpi_plugin_fusinvsnmp_networkportconnectionlogs', [
'date_mod' => new \QueryParam(),
'creation' => new \QueryParam(),
'networkports_id_source' => new \QueryParam(),
'networkports_id_destination' => new \QueryParam()
]
);
$stmt = $DB->prepare($insert);
}
$stmt->bind_param(
'ssss',
$input['date'],
$input['creation'],
$input['FK_port_source'],
$input['FK_port_destination']
);
$stmt->execute();
}
}
}
$DB->delete(
'glpi_plugin_tracker_snmp_history', [
'ID' => $data['ID']
]
);
if (preg_match("/000$/", $i)) {
$migration->displayMessage("$i / $nb");
}
}
$migration->displayMessage("$i / $nb");
}
if ($stmt !== null) {
mysqli_stmt_close($stmt);
}
}
}
/**
* Manage the migration of MySQL tables / fields
*
* @global object $DB
* @param object $migration
* @param array $a_table
*/
function migrateTablesFusionInventory($migration, $a_table) {
global $DB;
foreach ($a_table['oldname'] as $oldtable) {
$migration->renameTable($oldtable, $a_table['name']);
}
if (!$DB->tableExists($a_table['name'])) {
if (strstr($a_table['name'], 'glpi_plugin_fusioninventory_dblock')) {
$query = "CREATE TABLE `".$a_table['name']."` (
`value` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`value`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1";
} else {
$query = "CREATE TABLE `".$a_table['name']."` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1";
}
$DB->query($query);
}
foreach ($a_table['renamefields'] as $old=>$new) {
$migration->changeField($a_table['name'],
$old,
$new,
$a_table['fields'][$new]['type'],
['value' => $a_table['fields'][$new]['value'],
'update'=> true]);
}
foreach ($a_table['oldkeys'] as $field) {
$migration->dropKey($a_table['name'],
$field);
}
$migration->migrationOneTable($a_table['name']);
foreach ($a_table['oldfields'] as $field) {
$migration->dropField($a_table['name'],
$field);
}
$migration->migrationOneTable($a_table['name']);
foreach ($a_table['fields'] as $field=>$data) {
$migration->changeField($a_table['name'],
$field,
$field,
$data['type'],
['value' => $data['value']]);
}
$migration->migrationOneTable($a_table['name']);
foreach ($a_table['fields'] as $field=>$data) {
$migration->addField($a_table['name'],
$field,
$data['type'],
['value' => $data['value']]);
}
$migration->migrationOneTable($a_table['name']);
foreach ($a_table['keys'] as $data) {
$migration->addKey($a_table['name'],
$data['field'],
$data['name'],
$data['type']);
}
$migration->migrationOneTable($a_table['name']);
$DB->listFields($a_table['name'], false);
}
/**
* Migrate tables from plugin fusinvdeploy to fusioninventory
* all datas in exploded tables are merged and stored in json in order table
*
* @global object $DB
* @param object $migration
*/
function migrateTablesFromFusinvDeploy ($migration) {
global $DB;
if ($DB->tableExists("glpi_plugin_fusioninventory_deployorders")
&& $DB->tableExists("glpi_plugin_fusinvdeploy_checks")
&& $DB->tableExists("glpi_plugin_fusinvdeploy_files")
&& $DB->tableExists("glpi_plugin_fusinvdeploy_actions")) {
//add json field in deploy order table to store datas from old misc tables
$field_created = $migration->addField("glpi_plugin_fusioninventory_deployorders",
"json",
"longtext DEFAULT NULL");
$migration->migrationOneTable("glpi_plugin_fusioninventory_deployorders");
$final_datas = [];
//== glpi_plugin_fusioninventory_deployorders ==
$o_iterator = $DB->request(['FROM' => 'glpi_plugin_fusioninventory_deployorders']);
while ($o_datas = $o_iterator->next()) {
$order_id = $o_datas['id'];
$o_line = [];
$of_line = [];
$o_line['checks'] = [];
$o_line['actions'] = [];
$o_line['associatedFiles'] = [];
//=== Checks ===
if ($DB->tableExists("glpi_plugin_fusinvdeploy_checks")) {
$c_query = "SELECT type, path, value, 'error' as `return`
FROM glpi_plugin_fusinvdeploy_checks
WHERE plugin_fusinvdeploy_orders_id = $order_id
ORDER BY ranking ASC";
$c_res = $DB->query($c_query);
$c_i = 0;
while ($c_datas = $DB->fetchAssoc($c_res)) {
foreach ($c_datas as $c_key => $c_value) {
//specific case for filesytem sizes, convert to bytes
if (!empty($c_value)
&& is_numeric($c_value)
&& $c_datas['type'] !== 'freespaceGreater') {
$c_value = $c_value * 1024 * 1024;
}
//construct job check entry
$o_line['checks'][$c_i][$c_key] = $c_value;
}
$c_i++;
}
}
$files_list = [];
//=== Files ===
if ($DB->tableExists("glpi_plugin_fusinvdeploy_files")) {
$f_query =
"SELECT id, name, is_p2p as p2p, filesize, mimetype, ".
"p2p_retention_days as `p2p-retention-duration`, uncompress, sha512 ".
"FROM glpi_plugin_fusinvdeploy_files ".
"WHERE plugin_fusinvdeploy_orders_id = $order_id";
$f_res = $DB->query($f_query);
while ($f_datas = $DB->fetchAssoc($f_res)) {
//jump to next entry if sha512 is empty
// This kind of entries could happen sometimes on upload errors
if (empty($f_datas['sha512'])) {
continue;
}
//construct job file entry
$o_line['associatedFiles'][] = $f_datas['sha512'];
foreach ($f_datas as $f_key => $f_value) {
//we don't store the sha512 field in json
if ($f_key == "sha512"
|| $f_key == "id"
|| $f_key == "filesize"
|| $f_key == "mimetype") {
continue;
}
//construct order file entry
$of_line[$f_datas['sha512']][$f_key] = $f_value;
}
if (!in_array($f_datas['sha512'], $files_list)) {
$files_list[] = $f_datas['sha512'];
}
}
}
//=== Actions ===
$cmdStatus['RETURNCODE_OK'] = 'okCode';
$cmdStatus['RETURNCODE_KO'] = 'errorCode';
$cmdStatus['REGEX_OK'] = 'okPattern';
$cmdStatus['REGEX_KO'] = 'errorPattern';
if ($DB->tableExists("glpi_plugin_fusinvdeploy_actions")) {
$a_query = "SELECT *
FROM glpi_plugin_fusinvdeploy_actions
WHERE plugin_fusinvdeploy_orders_id = $order_id
ORDER BY ranking ASC";
$a_res = $DB->query($a_query);
$a_i = 0;
while ($a_datas = $DB->fetchAssoc($a_res)) {
//get type
$type = strtolower(str_replace("PluginFusinvdeployAction_", "", $a_datas['itemtype']));
//specific case for command type
$type = str_replace("command", "cmd", $type);
//table for action itemtype
$a_table = getTableForItemType($a_datas['itemtype']);
//get table fields
$at_query = "SELECT *
FROM $a_table
WHERE id = ".$a_datas['items_id'];
$at_res = $DB->query($at_query);
while ($at_datas = $DB->fetchAssoc($at_res)) {
foreach ($at_datas as $at_key => $at_value) {
//we don't store the id field of action itemtype table in json
if ($at_key == "id") {
continue;
}
//specific case for 'path' field
if ($at_key == "path") {
$o_line['actions'][$a_i][$type]['list'][] = $at_value;
} else {
//construct job actions entry
$o_line['actions'][$a_i][$type][$at_key] = $at_value;
}
}
//specific case for commands : we must add status and env vars
if ($a_datas['itemtype'] === "PluginFusinvdeployAction_Command") {
$ret_cmd_query = "SELECT type, value
FROM glpi_plugin_fusinvdeploy_actions_commandstatus
WHERE plugin_fusinvdeploy_commands_id = ".$at_datas['id'];
$ret_cmd_res = $DB->query($ret_cmd_query);
while ($res_cmd_datas = $DB->fetchAssoc($ret_cmd_res)) {
// Skip empty retchecks type:
// This surely means they have been drop at some point but entry has not been
// removed from database.
if (!empty($res_cmd_datas['type'])) {
//construct command status array entry
$o_line['actions'][$a_i][$type]['retChecks'][] = [
'type' => $cmdStatus[$res_cmd_datas['type']],
'values' => [$res_cmd_datas['value']]
];
}
}
}
}
$a_i++;
}
}
$final_datas[$order_id]['jobs'] = $o_line;
$final_datas[$order_id]['associatedFiles'] = $of_line;
unset($o_line);
unset($of_line);
}
$options = 0;
$options = $options | JSON_UNESCAPED_SLASHES;
//store json in order table
if (count($final_datas)) {
$update = $DB->buildUpdate(
'glpi_plugin_fusioninventory_deployorders', [
'json' => new \QueryParam()
], [
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($update);
foreach ($final_datas as $order_id => $data) {
$json = $DB->escape(json_encode($data, $options));
$stmt->bind_param(
'ss',
$json,
$order_id
);
}
}
}
//=== Fileparts ===
if ($DB->tableExists('glpi_plugin_fusinvdeploy_fileparts')
&& $DB->tableExists('glpi_plugin_fusinvdeploy_files')) {
$files_list = $DB->request('glpi_plugin_fusinvdeploy_files');
// multipart file datas
foreach ($files_list as $file) {
$sha = $file['sha512'];
if (empty($sha)) {
continue;
}
$shortsha = substr($sha, 0, 6);
$fp_query = "SELECT fp.`sha512` as filepart_hash, ".
" f.`sha512` as file_hash ".
"FROM `glpi_plugin_fusinvdeploy_files` as f ".
"INNER JOIN `glpi_plugin_fusinvdeploy_fileparts` as fp ".
"ON f.`id` = fp.`plugin_fusinvdeploy_files_id` ".
" AND f.`shortsha512` = '{$shortsha}' ".
"GROUP BY fp.`sha512` ".
"ORDER BY fp.`id`";
$fp_res = $DB->query($fp_query);
if ($DB->numrows($fp_res) > 0) {
//print("writing file : " . GLPI_PLUGIN_DOC_DIR."/fusioninventory/files/manifests/{$sha}" . "\n");
$fhandle = fopen(
GLPI_PLUGIN_DOC_DIR."/fusioninventory/files/manifests/{$sha}",
'w+'
);
while ($fp_datas = $DB->fetchAssoc($fp_res)) {
if ($fp_datas['file_hash'] === $sha) {
fwrite($fhandle, $fp_datas['filepart_hash']."\n");
}
}
fclose($fhandle);
}
}
}
//migrate fusinvdeploy_files to fusioninventory_deployfiles
if ($DB->tableExists("glpi_plugin_fusinvdeploy_files")) {
$DB->query("TRUNCATE TABLE `glpi_plugin_fusioninventory_deployfiles`");
if ($DB->fieldExists("glpi_plugin_fusinvdeploy_files", "filesize")) {
$f_query = implode(
" \n",
[
"SELECT files.`id`, files.`name`,",
" files.`filesize`, files.`mimetype`,",
" files.`sha512`, files.`shortsha512`,",
" files.`create_date`,",
" files.`entities_id`, files.`is_recursive`",
"FROM glpi_plugin_fusinvdeploy_files as files",
"WHERE",
" files.`shortsha512` != \"\""
]
);
$f_res = $DB->query($f_query);
while ($f_datas = $DB->fetchAssoc($f_res)) {
$entry = [
"id" => $f_datas["id"],
"name" => $f_datas["name"],
"filesize" => $f_datas["filesize"],
"mimetype" => $f_datas["mimetype"],
"shortsha512" => $f_datas["shortsha512"],
"sha512" => $f_datas["sha512"],
"comments" => "",
"date_mod" => $f_datas["create_date"],
"entities_id" => $f_datas["entities_id"],
"is_recursive" => $f_datas["is_recursive"],
];
$migration->displayMessage("\n");
// Check if file exists
$i_DeployFile = new PluginFusioninventoryDeployFile();
$migration->displayMessage(
"migrating file ". $entry['name'] .
" sha:" . $entry['sha512'] .
"\n"
);
if ($i_DeployFile->checkPresenceManifest($entry['sha512'])) {
$migration->displayMessage(
"manifest exists" .
"\n"
);
$migration->insertInTable(
"glpi_plugin_fusioninventory_deployfiles", $entry
);
}
}
}
}
/**
* JSON orders fixer:
* This piece of code makes sure that JSON orders in database are valid and will fix it
* otherwise.
*/
$packages = $DB->request('glpi_plugin_fusioninventory_deploypackages');
foreach ($packages as $order_config) {
$json_order = json_decode($order_config['json']);
//print("deployorders fixer : actual order structure for ID ".$order_config['id']."\n" . print_r($json_order,true) ."\n");
// Checks for /jobs json property
if (!isset($json_order->jobs) || !is_object($json_order->jobs)) {
//print("deployorders fixer : create missing required 'jobs' property\n");
$json_order->jobs = new stdClass();
}
if (!isset($json_order->jobs->checks)) {
//print("deployorders fixer : create missing required '/jobs/checks' array property\n");
$json_order->jobs->checks = [];
}
if (!isset($json_order->jobs->actions)) {
//print("deployorders fixer : create missing required '/jobs/actions' array property\n");
$json_order->jobs->actions = [];
}
if (!isset($json_order->jobs->associatedFiles)) {
//print("deployorders fixer : create missing required '/jobs/associatedFiles' array property\n");
$json_order->jobs->associatedFiles = [];
}
// Checks for /associatedFiles json property
if (!isset($json_order->associatedFiles) || !is_object($json_order->associatedFiles)) {
//print("deployorders fixer : create missing required 'associatedFiles' property\n");
$json_order->associatedFiles = new stdClass();
}
//print(
//"deployorders fixer : final order structure for ID ".$order_config['id']."\n" .
// json_encode($json_order,JSON_PRETTY_PRINT) ."\n"
//);
$pfDeployPackageItem = new PluginFusioninventoryDeployPackageItem();
$pfDeployPackageItem->updateOrderJson($order_config['id'], $json_order);
}
/**
* Drop unused tables
*/
$old_deploy_tables = [
'glpi_plugin_fusinvdeploy_actions',
'glpi_plugin_fusinvdeploy_actions_commandenvvariables',
'glpi_plugin_fusinvdeploy_actions_commands',
'glpi_plugin_fusinvdeploy_actions_commandstatus',
'glpi_plugin_fusinvdeploy_actions_copies',
'glpi_plugin_fusinvdeploy_actions_deletes',
'glpi_plugin_fusinvdeploy_actions_messages',
'glpi_plugin_fusinvdeploy_actions_mkdirs',
'glpi_plugin_fusinvdeploy_actions_moves',
'glpi_plugin_fusinvdeploy_checks',
'glpi_plugin_fusinvdeploy_fileparts',
'glpi_plugin_fusinvdeploy_files',
'glpi_plugin_fusinvdeploy_files_mirrors',
'glpi_plugin_fusioninventory_inventorycomputerstorages',
'glpi_plugin_fusioninventory_inventorycomputerstoragetypes',
'glpi_plugin_fusioninventory_inventorycomputerstorages_storages'
];
foreach ($old_deploy_tables as $table) {
$migration->dropTable($table);
}
//drop unused views
$old_deploy_views = [
'glpi_plugin_fusinvdeploy_taskjobs',
'glpi_plugin_fusinvdeploy_tasks'
];
foreach ($old_deploy_views as $view) {
$DB->query("DROP VIEW IF EXISTS $view");
}
}