%PDF- %PDF-
| Direktori : /var/www/projetos/suporte.iigd.com.br/plugins/glpiinventory/install/ |
| Current File : //var/www/projetos/suporte.iigd.com.br/plugins/glpiinventory/install/update.php |
<?php
/**
* ---------------------------------------------------------------------
* GLPI Inventory Plugin
* Copyright (C) 2021 Teclib' and contributors.
*
* http://glpi-project.org
*
* based on FusionInventory for GLPI
* Copyright (C) 2010-2021 by the FusionInventory Development Team.
*
* ---------------------------------------------------------------------
*
* LICENSE
*
* This file is part of GLPI Inventory Plugin.
*
* GLPI Inventory Plugin 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.
*
* GLPI Inventory Plugin 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 GLPI Inventory Plugin. If not, see <https://www.gnu.org/licenses/>.
* ---------------------------------------------------------------------
*/
use Glpi\Dashboard\Dashboard;
use Glpi\Dashboard\Item as Dashboard_Item;
use Glpi\Dashboard\Right as Dashboard_Right;
use Ramsey\Uuid\Uuid;
include_once(PLUGIN_GLPI_INVENTORY_DIR . "/install/update.tasks.php");
/**
* Get the current version of the plugin
*
* @global object $DB
* @return string
*/
function pluginGlpiinventoryGetCurrentVersion()
{
global $DB;
require_once(PLUGIN_GLPI_INVENTORY_DIR . "/inc/module.class.php");
if (
(!$DB->tableExists("glpi_plugin_tracker_config")) &&
(!$DB->tableExists("glpi_plugin_fusioninventory_config")) &&
(!$DB->tableExists("glpi_plugin_fusioninventory_configs")) &&
(!$DB->tableExists("glpi_plugin_glpiinventory_configs"))
) {
return '0';
} elseif (
($DB->tableExists("glpi_plugin_tracker_config")) ||
($DB->tableExists("glpi_plugin_glpiinventory_config"))
) {
if ($DB->tableExists("glpi_plugin_glpiinventory_configs")) {
$iterator = $DB->request([
'FROM' => 'glpi_plugin_glpiinventory_configs',
'WHERE' => ['type' => 'version'],
'LIMIT' => 1
]);
$data = [];
if (count($iterator)) {
$data = $iterator->current();
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->current();
}
if ($data['version'] == "0") {
return "2.0.2";
} else {
return $data['version'];
}
}
} elseif ($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->current();
return $data['value'];
}
} elseif ($DB->tableExists("glpi_plugin_glpiinventory_configs")) {
$iterator = $DB->request([
'SELECT' => ['value'],
'FROM' => 'glpi_plugin_glpiinventory_configs',
'WHERE' => ['type' => 'version'],
'LIMIT' => 1
]);
$data = [];
if (count($iterator)) {
$data = $iterator->current();
return $data['value'];
}
}
return "1.1.0";
}
/**
* The main function to update the plugin
*
* @global object $DB
* @param string $current_version
* @param string $migrationname
*/
function pluginGlpiinventoryUpdate($current_version, $migrationname = 'Migration')
{
global $DB;
$DB->disableTableCaching();
ini_set("max_execution_time", "0");
ini_set("memory_limit", "-1");
$migration = new $migrationname($current_version);
$prepare_task = [];
$prepare_rangeip = [];
$prepare_Config = [];
$a_plugin = plugin_version_glpiinventory();
$plugins_id = PluginGlpiinventoryModule::getModuleId($a_plugin['shortname']);
$migration->displayMessage("Migration Classname : " . $migrationname);
$migration->displayMessage("Update of plugin GLPI Inventory");
$plugin_doc_dir = GLPI_PLUGIN_DOC_DIR . '/glpiinventory';
$sub_directories = [
'tmp' => false,
'files' => false,
'files/import' => true,
'files/export' => true,
'files/manifests' => true,
'files/repository' => true,
'upload' => true,
];
// ********* Ensure plugin directories are existing ********************** //
if (!is_dir($plugin_doc_dir)) {
mkdir($plugin_doc_dir);
}
foreach (array_keys($sub_directories) as $sub_directory) {
$directory_full_path = $plugin_doc_dir . '/' . $sub_directory;
if (!is_dir($directory_full_path)) {
mkdir($directory_full_path);
}
}
// ********* Copy files from FusionInventory ***************************** //
foreach ($sub_directories as $sub_directory => $copy) {
if (!$copy) {
continue;
}
$directory_full_path = $plugin_doc_dir . '/' . $sub_directory;
foreach (['fusinvdeploy', 'fusioninventory'] as $fi_plugin_directory) {
$fi_directory_full_path = GLPI_PLUGIN_DOC_DIR . '/' . $fi_plugin_directory . '/' . $sub_directory;
if (!is_dir($fi_directory_full_path)) {
continue;
}
$files_iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($fi_directory_full_path, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST
);
foreach ($files_iterator as $file) {
$dest_path = $directory_full_path . '/' . $files_iterator->getSubPathname();
if (file_exists($dest_path)) {
continue; // Do not overwrite files (file has probably been copied by a previous migration)
}
if ($file->isDir()) {
mkdir($dest_path);
} else {
copy($file->getRealPath(), $dest_path);
}
}
}
}
// ********* Rename fileparts without .gz extension (cf #1999) *********** //
if (is_dir(GLPI_PLUGIN_DOC_DIR . '/glpiinventory/files')) {
$gzfiles = new \RegexIterator(
new \RecursiveIteratorIterator(
new \RecursiveDirectoryIterator(GLPI_PLUGIN_DOC_DIR . '/glpiinventory/files')
),
'/\.gz$/'
);
foreach ($gzfiles as $gzfile) {
$name = $gzfile->getRealPath();
rename($name, str_replace('.' . $gzfile->getExtension(), '', $name));
}
unset($gzfiles);
}
// Drop unused views
// Have to be done prior to renamePlugin() to prevent following warning:
// "View 'glpi.glpi_plugin_fusinvdeploy_taskjobs' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them"
$old_deploy_views = [
'glpi_plugin_fusinvdeploy_taskjobs',
'glpi_plugin_fusinvdeploy_tasks'
];
foreach ($old_deploy_views as $view) {
$DB->dropView($view, true);
}
renamePlugin($migration);
// conversion in very old version
update213to220_ConvertField($migration);
// ********* Migration internal / common ********************************* //
// ********* Rename tables ******************************************** //
$migration->renameTable(
"glpi_plugin_glpiinventory_lock",
"glpi_plugin_glpiinventory_locks"
);
$migration->renameTable(
"glpi_plugin_glpiinventory_unknown_device",
"glpi_plugin_glpiinventory_unknowndevices"
);
$migration->renameTable(
"glpi_plugin_glpiinventory_config",
"glpi_plugin_glpiinventory_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_glpiinventory_rangeip",
"glpi_plugin_glpiinventory_ipranges"
);
$migration->renameTable(
"glpi_plugin_glpiinventory_networking_ports",
"glpi_plugin_fusinvsnmp_networkports"
);
$migration->renameTable(
"glpi_plugin_glpiinventory_construct_device",
"glpi_plugin_fusinvsnmp_constructdevices"
);
$migration->renameTable(
"glpi_plugin_glpiinventory_construct_mibs",
"glpi_plugin_glpiinventory_snmpmodelconstructdevice_miboids"
);
$migration->renameTable(
"glpi_plugin_glpiinventory_networking",
"glpi_plugin_glpiinventory_networkequipments"
);
$migration->renameTable(
"glpi_plugin_glpiinventory_networking_ifaddr",
"glpi_plugin_fusinvsnmp_networkequipmentips"
);
$migration->renameTable(
"glpi_plugin_glpiinventory_printers",
"glpi_plugin_fusinvsnmp_printers"
);
$migration->renameTable(
"glpi_plugin_glpiinventory_printers_cartridges",
"glpi_plugin_fusinvsnmp_printercartridges"
);
$migration->renameTable(
"glpi_plugin_glpiinventory_printers_history",
"glpi_plugin_fusinvsnmp_printerlogs"
);
$migration->renameTable(
"glpi_plugin_glpiinventory_model_infos",
"glpi_plugin_glpiinventory_snmpmodels"
);
$migration->renameTable(
"glpi_plugin_glpiinventory_mib_networking",
"glpi_plugin_fusinvsnmp_modelmibs"
);
$migration->renameTable(
"glpi_plugin_glpiinventory_snmp_connection",
"glpi_plugin_fusinvsnmp_configsecurities"
);
$migration->renameTable(
"glpi_plugin_glpiinventory_snmp_history",
"glpi_plugin_fusinvsnmp_networkportlogs"
);
$migration->renameTable(
"glpi_plugin_glpiinventory_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_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 ************************************************ //
pluginGlpiinventoryUpdateTasks($migration, $plugins_id);
do_timeslot_migration($migration);
// ********* Drop tables not used **************************************** //
$a_droptable = ['glpi_plugin_glpiinventory_agents_inventory_state',
'glpi_plugin_glpiinventory_config_modules',
'glpi_plugin_glpiinventory_connection_stats',
'glpi_plugin_glpiinventory_discovery',
'glpi_plugin_glpiinventory_errors',
'glpi_plugin_glpiinventory_lockable',
'glpi_plugin_glpiinventory_connection_history',
'glpi_plugin_glpiinventory_walks',
'glpi_plugin_glpiinventory_config_snmp_history',
'glpi_plugin_glpiinventory_config_snmp_networking',
'glpi_plugin_glpiinventory_task',
'glpi_plugin_fusinvinventory_pcidevices',
'glpi_plugin_fusinvinventory_pcivendors',
'glpi_plugin_fusinvinventory_usbdevices',
'glpi_plugin_fusinvinventory_usbvendors',
'glpi_plugin_fusinvsnmp_constructdevicewalks',
'glpi_plugin_glpiinventory_snmpmodelmiblabels',
'glpi_plugin_glpiinventory_snmpmodelmibobjects',
'glpi_plugin_glpiinventory_snmpmodelmiboids',
'glpi_plugin_glpiinventory_snmpmodelconstructdevices',
'glpi_plugin_glpiinventory_snmpmodelconstructdevicewalks' .
'glpi_plugin_glpiinventory_snmpmodelconstructdevices_users',
'glpi_plugin_glpiinventory_snmpmodelconstructdevice_miboids',
'glpi_plugin_glpiinventory_snmpmodelmibs',
'glpi_plugin_glpiinventory_snmpmodels',
'glpi_plugin_glpiinventory_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_glpiinventory_construct_walks',
'glpi_plugin_glpiinventory_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_glpiinventory_agents_errors',
'glpi_plugin_glpiinventory_agents_processes',
'glpi_plugin_glpiinventory_computers',
'glpi_plugin_glpiinventory_config_snmp_networking',
'glpi_plugin_glpiinventory_config_snmp_history',
'glpi_plugin_fusinvsnmp_agentconfigs',
'glpi_dropdown_plugin_glpiinventory_mib_label',
'glpi_dropdown_plugin_glpiinventory_mib_object',
'glpi_dropdown_plugin_glpiinventory_mib_oid',
'glpi_dropdown_plugin_glpiinventory_snmp_auth_auth_protocol',
'glpi_dropdown_plugin_glpiinventory_snmp_auth_priv_protocol',
'glpi_dropdown_plugin_glpiinventory_snmp_version',
'glpi_plugin_fusinvsnmp_temp_profiles',
'glpi_plugin_fusinvsnmp_tmp_agents',
'glpi_plugin_fusinvsnmp_tmp_configs',
'glpi_plugin_fusinvsnmp_tmp_tasks',
'glpi_plugin_glpiinventory_networkequipmentips',
'glpi_plugin_glpiinventory_inventorycomputerbatteries',
'glpi_plugin_glpiinventory_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_glpiinventory_tasks', 'last_agent_wakeup', 'timestamp');
$migration->addField('glpi_plugin_glpiinventory_tasks', 'wakeup_agent_counter', "int NOT NULL DEFAULT '0'");
$migration->addField('glpi_plugin_glpiinventory_tasks', 'wakeup_agent_time', "int NOT NULL DEFAULT '0'");
$migration->addField('glpi_plugin_glpiinventory_tasks', 'reprepare_if_successful', "tinyint NOT NULL DEFAULT '1'");
$deploy_on_demand = $migration->addField('glpi_plugin_glpiinventory_tasks', 'is_deploy_on_demand', "tinyint NOT NULL DEFAULT '0'");
$migration->addKey('glpi_plugin_glpiinventory_tasks', 'wakeup_agent_counter');
$migration->addKey('glpi_plugin_glpiinventory_tasks', 'reprepare_if_successful');
$migration->addKey('glpi_plugin_glpiinventory_tasks', 'is_deploy_on_demand');
$migration->migrationOneTable('glpi_plugin_glpiinventory_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 PluginGlpiinventoryTask();
foreach (
getAllDataFromTable(
'glpi_plugin_glpiinventory_tasks',
['name' => ['LIKE', '%[self-deploy]%']]
) as $tsk
) {
$task->update(['id' => $tsk['id'], 'is_deploy_on_demand' => 1]);
}
}
/*
* Clean display preferences not used
*/
$DB->delete(
'glpi_displaypreferences',
[
'itemtype' => [
'5150',
'5160',
'5161',
'5163',
'5165',
'5190'
]
]
);
// If no PluginGlpiinventoryTaskjoblog in preferences, add them
$iterator = $DB->request([
'FROM' => 'glpi_displaypreferences',
'WHERE' => [
'itemtype' => 'PluginGlpiinventoryTaskjoblog',
'users_id' => 0
]
]);
if (!count($iterator)) {
$insert = $DB->buildInsert(
'glpi_displaypreferences',
[
'itemtype' => 'PluginGlpiinventoryTaskjoblog',
'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]
);
$DB->executeStatement($stmt);
}
mysqli_stmt_close($stmt);
}
/*
* Convert taskjob definition from PluginFusinvsnmpIPRange to PluginGlpiinventoryIPRange
* onvert taskjob definition from PluginFusinvdeployPackage to PluginGlpiinventoryDeployPackage
*/
$iterator = $DB->request([
'FROM' => 'glpi_plugin_glpiinventory_taskjobs'
]);
if (count($iterator)) {
$update = $DB->buildUpdate(
'glpi_plugin_glpiinventory_taskjobs',
[
'targets' => new \QueryParam()
],
[
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($update);
foreach ($iterator as $data) {
$a_defs = importArrayFromDB($data['targets']);
foreach ($a_defs as $num => $a_def) {
if (in_array(key($a_def), ['PluginFusinvsnmpIPRange', 'PluginFusioninventoryIPRange'])) {
$a_defs[$num] = ['PluginGlpiinventoryIPRange' => current($a_def)];
} elseif (in_array(key($a_def), ['PluginFusinvdeployPackage', 'PluginFusioninventoryDeployPackage'])) {
$a_defs[$num] = ['PluginGlpiinventoryDeployPackage' => current($a_def)];
}
}
$targets = exportArrayToDB($a_defs);
$stmt->bind_param(
'ss',
$targets,
$data['id']
);
$DB->executeStatement($stmt);
}
mysqli_stmt_close($stmt);
}
/*
* Convert taskjoblogs itemtype from PluginFusinvdeployPackage to
* PluginGlpiinventoryDeployPackage
*/
$DB->update(
'glpi_plugin_glpiinventory_taskjoblogs',
[
'itemtype' => 'PluginGlpiinventoryDeployPackage'
],
[
'itemtype' => 'PluginFusinvdeployPackage'
]
);
/*
* Convert taskjobstates itemtype from PluginFusinvdeployPackage to
* PluginGlpiinventoryDeployPackage
*/
$DB->update(
'glpi_plugin_glpiinventory_taskjobstates',
[
'itemtype' => 'PluginGlpiinventoryDeployPackage'
],
[
'itemtype' => 'PluginFusinvdeployPackage'
]
);
/*
* Convert taskjob action from PluginFusinvdeployGroup to PluginGlpiinventoryDeployGroup
*/
$iterator = $DB->request(['FROM' => 'glpi_plugin_glpiinventory_taskjobs']);
if (count($iterator)) {
$update = $DB->buildUpdate(
'glpi_plugin_glpiinventory_taskjobs',
[
'actors' => new \QueryParam()
],
[
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($update);
foreach ($iterator as $data) {
$a_defs = importArrayFromDB($data['actors']);
foreach ($a_defs as $num => $a_def) {
if (key($a_def) == 'PluginFusinvdeployGroup') {
$a_defs[$num] = ['PluginGlpiinventoryDeployGroup' => current($a_def)];
}
}
$actors = exportArrayToDB($a_defs);
$stmt->bind_param(
'ss',
$actors,
$data['id']
);
$DB->executeStatement($stmt);
}
mysqli_stmt_close($stmt);
}
/*
* Convert taskjob method deployuninstall in deployinstall
*/
$DB->update(
'glpi_plugin_glpiinventory_taskjobs',
[
'method' => 'deployinstall'
],
[
'method' => 'deployuninstall'
]
);
/*
* Manage configuration of plugin
*/
$config = new PluginGlpiinventoryConfig();
$pfSetup = new PluginGlpiinventorySetup();
$users_id = $pfSetup->createGlpiInventoryUser();
$a_input = [];
$a_input['ssl_only'] = 0;
$a_input['delete_task'] = 20;
$a_input['agent_port'] = 62354;
$a_input['extradebug'] = 0;
$a_input['users_id'] = $users_id;
$config->addValues($a_input, false);
$a_input = [];
$a_input['version'] = PLUGIN_GLPIINVENTORY_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['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,
'glpiinventory',
'upload'
]
)
);
$a_input['alert_winpath'] = 1;
$a_input['server_as_mirror'] = 1;
$a_input['mirror_match'] = 0;
$config->addValues($a_input, false);
$pfSetup = new PluginGlpiinventorySetup();
$users_id = $pfSetup->createGlpiInventoryUser();
$DB->update(
'glpi_plugin_glpiinventory_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,
'component_powersupply' => 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('PluginGlpiinventoryTaskjob', 'taskscheduler')) {
$crontask->fields['itemtype'] = 'PluginGlpiinventoryTask';
$crontask->updateInDB(['itemtype']);
}
if (!$crontask->getFromDBbyName('PluginGlpiinventoryTask', 'taskscheduler')) {
CronTask::Register(
'PluginGlpiinventoryTask',
'taskscheduler',
'60',
['mode' => 2, 'allowmode' => 3, 'logs_lifetime' => 30]
);
}
if (
$crontask->getFromDBbyName('PluginGlpiinventoryTaskjobstate', 'cleantaskjob')
and $crontask->getFromDBbyName('PluginGlpiinventoryTaskjobstatus', 'cleantaskjob')
) {
$crontask->getFromDBbyName('PluginGlpiinventoryTaskjobstatus', 'cleantaskjob');
$crontask->delete($crontask->fields);
}
if ($crontask->getFromDBbyName('PluginGlpiinventoryTaskjobstatus', 'cleantaskjob')) {
$DB->update(
'glpi_crontasks',
[
'itemtype' => 'PluginGlpiinventoryTaskjobstate'
],
[
'itemtype' => 'PluginGlpiinventoryTaskjobstatus'
]
);
}
if (!$crontask->getFromDBbyName('PluginGlpiinventoryTaskjobstate', 'cleantaskjob')) {
CronTask::Register(
'PluginGlpiinventoryTaskjobstate',
'cleantaskjob',
(3600 * 24),
['mode' => 2, 'allowmode' => 3, 'logs_lifetime' => 30]
);
}
if ($crontask->getFromDBbyName('PluginFusinvsnmpNetworkPortLog', 'cleannetworkportlogs')) {
$crontask->delete($crontask->fields);
}
if ($crontask->getFromDBbyName('PluginGlpiinventoryConfigurationManagement', 'checkdevices')) {
$crontask->delete($crontask->fields);
}
if ($crontask->getFromDBbyName('PluginGlpiinventoryTaskjob', 'updatedynamictasks')) {
$crontask->delete($crontask->fields);
}
if (!$crontask->getFromDBbyName('PluginGlpiinventoryAgent', 'cleanoldagents')) {
CronTask::Register(
'PluginGlpiinventoryAgent',
'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.',
'glpiinventory'
))]
);
}
if (!$crontask->getFromDBbyName('PluginGlpiinventoryTask', 'cleanondemand')) {
CronTask::Register(
'PluginGlpiinventoryTask',
'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('PluginGlpiinventoryAgentWakeup', 'wakeupAgents')) {
CronTask::Register(
'PluginGlpiinventoryAgentWakeup',
'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);
foreach ($iterator as $data) {
$stmt->bind_param(
'ss',
$data['entities_id'],
$data['id']
);
$DB->executeStatement($stmt);
}
mysqli_stmt_close($stmt);
}
if ($DB->tableExists('glpi_plugin_glpiinventory_profiles')) {
//Migrate rights to the new system introduction in GLPI 0.85
PluginGlpiinventoryProfile::migrateProfiles();
//Drop old table
$migration->dropTable('glpi_plugin_glpiinventory_profiles');
}
//Antivirus stuff has been integrated in GLPI's core
if ($DB->tableExists('glpi_plugin_glpiinventory_inventorycomputerantiviruses')) {
//Antivirus migration from FI table to GLPi core table
$antivirus = new ComputerAntivirus();
foreach (getAllDataFromTable('glpi_plugin_glpiinventory_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_glpiinventory_inventorycomputerantiviruses');
}
//Create first access to the current profile is needed
if (isset($_SESSION['glpiactiveprofile'])) {
PluginGlpiinventoryProfile::createFirstAccess($_SESSION['glpiactiveprofile']['id']);
}
// ********* Clean orphan data ********************************************** //
// Clean timeslotentries
$entries = [];
$iterator = $DB->request([
'SELECT' => 'glpi_plugin_glpiinventory_timeslotentries.id',
'FROM' => 'glpi_plugin_glpiinventory_timeslotentries',
'LEFT JOIN' => [
'glpi_plugin_glpiinventory_timeslots' => [
'FKEY' => [
'glpi_plugin_glpiinventory_timeslotentries' => 'plugin_glpiinventory_timeslots_id',
'glpi_plugin_glpiinventory_timeslots' => 'id'
]
]
],
'WHERE' => ['glpi_plugin_glpiinventory_timeslots.id' => null]
]);
if (count($iterator)) {
foreach ($iterator as $data) {
$entries[] = $data['id'];
}
$DB->delete('glpi_plugin_glpiinventory_timeslotentries', ['id' => $entries]);
}
// Clean entities
$entities = [];
$iterator = $DB->request([
'SELECT' => 'glpi_plugin_glpiinventory_entities.id',
'FROM' => 'glpi_plugin_glpiinventory_entities',
'LEFT JOIN' => [
'glpi_entities' => [
'FKEY' => [
'glpi_plugin_glpiinventory_entities' => 'entities_id',
'glpi_entities' => 'id'
]
]
],
'WHERE' => ['glpi_entities.id' => null]
]);
if (count($iterator)) {
foreach ($iterator as $data) {
$entities[] = $data['id'];
}
$DB->delete('glpi_plugin_glpiinventory_entities', ['id' => $entities]);
}
// Clean packages
$tables = [
'glpi_plugin_glpiinventory_deploypackages_entities',
'glpi_plugin_glpiinventory_deploypackages_groups',
'glpi_plugin_glpiinventory_deploypackages_profiles',
'glpi_plugin_glpiinventory_deploypackages_users'
];
foreach ($tables as $table) {
$entries = [];
$iterator = $DB->request([
'SELECT' => $table . '.id',
'FROM' => $table,
'LEFT JOIN' => [
'glpi_plugin_glpiinventory_deploypackages' => [
'FKEY' => [
$table => 'plugin_glpiinventory_deploypackages_id',
'glpi_plugin_glpiinventory_deploypackages' => 'id'
]
]
],
'WHERE' => ['glpi_plugin_glpiinventory_deploypackages.id' => null]
]);
if (count($iterator)) {
foreach ($iterator as $data) {
$entries[] = $data['id'];
}
$DB->delete($table, ['id' => $entries]);
}
}
// Migrate search params for dynamic groups
doDynamicDataSearchParamsMigration();
installDashboard();
// Add missing index on `glpi_plugin_glpiinventory_taskjoblogs`
$migration = addTaskJobLogIndex($migration);
$migration->executeMigration();
}
function addTaskJobLogIndex(Migration $migration)
{
$migration->addKey(
"glpi_plugin_glpiinventory_taskjoblogs",
['itemtype', 'items_id'],
'item'
);
return $migration;
}
function installDashboard()
{
$dashboard = new Dashboard();
if ($dashboard->getFromDB('plugin_glpiinventory_dashboard') !== false) {
// The dashboard already exists, nothing to create
return;
}
$dashboard->add([
'key' => 'plugin_glpiinventory_dashboard',
'name' => 'Glpi inventory reports',
'context' => 'core',
]);
if ($dashboard->isNewItem()) {
// Failed to create the dashboard
return;
};
$commonOptions = [
'widgettype' => 'bigNumber',
'use_gradient' => '0',
'point_labels' => '0',
];
$cards = [
'plugin_glpiinventory_nb_agent' => [
'color' => '#606f91'
],
'plugin_glpiinventory_nb_task' => [
'color' => '#606f91'
],
'plugin_glpiinventory_nb_printer' => [
'color' => '#606f91'
],
'plugin_glpiinventory_nb_networkequipement' => [
'color' => '#606f91'
],
'plugin_glpiinventory_nb_phone' => [
'color' => '#606f91'
],
'plugin_glpiinventory_nb_computer' => [
'color' => '#606f91'
],
'plugin_glpiinventory_nb_unmanaged' => [
'color' => '#e69138'
]
];
// With counters
$x = 0;
$w = 3; // Width
$h = 2; // Height
$y = 0;
foreach ($cards as $key => $options) {
$item = new Dashboard_Item();
$item->addForDashboard($dashboard->fields['id'], [[
'card_id' => $key,
'gridstack_id' => $key . '_' . Uuid::uuid4(),
'x' => $x,
'y' => $y,
'width' => $w,
'height' => $h,
'card_options' => array_merge($commonOptions, $options),
]]);
$x = $x + $w;
}
}
/**
* Manage the agent part migration
*
* @global object $DB
* @param object $migration
* @return array
*/
function do_agent_migration($migration)
{
global $DB;
/*
* Table glpi_plugin_glpiinventory_agents
*/
$newTable = "glpi_plugin_glpiinventory_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']);
foreach ($iterator as $data) {
$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']
];
}
} elseif (
$DB->tableExists("glpi_plugin_tracker_agents")
and $DB->fieldExists(
"glpi_plugin_tracker_agents",
"core_discovery"
)
) {
$iterator = $DB->request(['FROM' => 'glpi_plugin_tracker_agents']);
foreach ($iterator as $data) {
$prepare_agentConfig[] = [
"name" => $data["name"],
"lock" => $data['lock'],
"threads_networkinventory" => $data['threads_query'],
"threads_networkdiscovery" => $data['threads_discovery']
];
}
} elseif ($DB->tableExists("glpi_plugin_glpiinventory_agents")) {
if ($DB->fieldExists($newTable, "module_snmpquery")) {
$iterator = $DB->request(['FROM' => 'glpi_plugin_tracker_agents']);
foreach ($iterator as $data) {
$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']
];
}
}
}
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_agents';
$a_table['oldname'] = ['glpi_plugin_tracker_agents'];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['entities_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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' => 'timestamp',
'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' => 'int unsigned NOT NULL DEFAULT 0',
'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 NOT NULL DEFAULT '1' COMMENT 'array(xmltag=>value)'",
'value' => null];
$a_table['fields']['threads_networkinventory'] = [
'type' => "int 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 NOT NULL DEFAULT '0' COMMENT 'Network Discovery task timeout'",
'value' => null
];
$a_table['fields']['timeout_networkinventory'] = [
'type' => "int 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',
'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'];
migratePluginTables($migration, $a_table);
/*
* Table glpi_plugin_glpiinventory_agentmodules
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_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'];
migratePluginTables($migration, $a_table);
/*
* Add Deploy module
*/
$iterator = $DB->request([
'FROM' => 'glpi_plugin_glpiinventory_agentmodules',
'WHERE' => ['modulename' => 'DEPLOY'],
'LIMIT' => 1
]);
if (!count($iterator)) {
$DB->insert(
'glpi_plugin_glpiinventory_agentmodules',
[
'modulename' => 'DEPLOY',
'is_active' => 0,
'exceptions' => exportArrayToDB([])
]
);
}
/*
* Add SNMPQUERY module if not present
*/
$DB->update(
'glpi_plugin_glpiinventory_agentmodules',
[
'modulename' => 'NETWORKINVENTORY'
],
[
'modulename' => 'SNMPQUERY'
]
);
$iterator = $DB->request([
'FROM' => 'glpi_plugin_glpiinventory_agentmodules',
'WHERE' => ['modulename' => 'NETWORKINVENTORY'],
'LIMIT' => 1
]);
if (!count($iterator)) {
$agentmodule = new PluginGlpiinventoryAgentmodule();
$input = [];
$input['modulename'] = "NETWORKINVENTORY";
$input['is_active'] = 0;
$input['exceptions'] = exportArrayToDB([]);
$agentmodule->add($input);
}
/*
* Add NETDISCOVERY module if not present
*/
$DB->update(
'glpi_plugin_glpiinventory_agentmodules',
[
'modulename' => 'NETWORKDISCOVERY'
],
[
'modulename' => 'NETDISCOVERY'
]
);
$iterator = $DB->request([
'SELECT' => ['id'],
'FROM' => 'glpi_plugin_glpiinventory_agentmodules',
'WHERE' => ['modulename' => 'NETWORKDISCOVERY'],
'LIMIT' => 1
]);
if (!count($iterator)) {
$agentmodule = new PluginGlpiinventoryAgentmodule();
$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_glpiinventory_agentmodules',
'WHERE' => ['modulename' => 'INVENTORY'],
'LIMIT' => 1
]);
if (!count($iterator)) {
$agentmodule = new PluginGlpiinventoryAgentmodule();
$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_glpiinventory_agentmodules',
[
'modulename' => 'InventoryComputerESX'
],
[
'modulename' => 'ESX'
]
);
$agentmodule = new PluginGlpiinventoryAgentmodule();
$iterator = $DB->request([
'SELECT' => ['id'],
'FROM' => 'glpi_plugin_glpiinventory_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 PluginGlpiinventoryAgentmodule();
$iterator = $DB->request([
'SELECT' => ['id'],
'FROM' => 'glpi_plugin_glpiinventory_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_glpiinventory_agents
*/
if ($DB->tableExists("glpi_plugin_fusinvsnmp_agentconfigs")) {
$iterator = $DB->request(['FROM' => 'glpi_plugin_fusinvsnmp_agentconfigs']);
if (count($iterator)) {
$update = $DB->buildUpdate(
'glpi_plugin_glpiinventory_agents',
[
'threads_networkdiscovery' => new \QueryParam(),
'threads_networkinventory' => new \QueryParam(),
'senddico' => new \QueryParam()
],
[
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($update);
foreach ($iterator as $data) {
$stmt->bind_param(
'ssss',
$data['threads_netdiscovery'],
$data['threads_snmpquery'],
$data['senddico'],
$data['plugin_glpiinventory_agents_id']
);
$DB->executeStatement($stmt);
}
mysqli_stmt_close($stmt);
}
}
changeDisplayPreference("5158", "PluginGlpiinventoryAgent");
// Delete data in glpi_logs(agent problem => ticket http://forge.fusioninventory.org/issues/1546)
// ** Token
$DB->delete(
'glpi_logs',
[
'itemtype' => 'PluginGlpiinventoryAgent',
'id_search_option' => 9
]
);
// ** Last contact
$DB->delete(
'glpi_logs',
[
'itemtype' => 'PluginGlpiinventoryAgent',
'id_search_option' => 4
]
);
// ** Version
$DB->delete(
'glpi_logs',
[
'itemtype' => 'PluginGlpiinventoryAgent',
'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_glpiinventory_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->current();
$prepare_Config['ssl_only'] = $data['ssl_only'];
}
}
}
if ($DB->tableExists('glpi_plugin_glpiinventory_configs')) {
$id = 'id';
if ($DB->fieldExists('glpi_plugin_glpiinventory_configs', 'ID')) {
$id = 'ID';
}
$iterator = $DB->request([
'FROM' => 'glpi_plugin_glpiinventory_configs',
'WHERE' => ['type' => 'version'],
'START' => 1,
'LIMIT' => 10
]);
if (count($iterator)) {
$delete = $DB->buildDelete(
'glpi_plugin_glpiinventory_configs',
[
$id => new \QueryParam()
]
);
$stmt = $DB->prepare($delete);
foreach ($iterator as $data) {
$stmt->bind_param('s', $data['id']);
$DB->executeStatement($stmt);
}
mysqli_stmt_close($stmt);
}
}
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_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'][] = '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'];
migratePluginTables($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_glpiinventory_entities
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_entities';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['entities_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['transfers_id_auto'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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'] = [];
// Fix -1 values in `transfers_id_auto`
if ($DB->tableExists('glpi_plugin_glpiinventory_entities') && $DB->fieldExists('glpi_plugin_glpiinventory_entities', 'transfers_id_auto')) {
$DB->update(
'glpi_plugin_glpiinventory_entities',
['transfers_id_auto' => '0'],
['transfers_id_auto' => '-1'],
);
}
migratePluginTables($migration, $a_table);
if (countElementsInTable($a_table['name']) == 0) {
$a_configs = getAllDataFromTable(
'glpi_plugin_glpiinventory_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_glpiinventory_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_glpiinventory_entities',
[
'entities_id' => 0,
'transfers_id_auto' => $transfers_id_auto,
'agent_base_url' => $agent_base_url
]
);
} elseif (countElementsInTable($a_table['name']) > 0) {
$a_configs = getAllDataFromTable(
'glpi_plugin_glpiinventory_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_glpiinventory_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_glpiinventory_ipranges
*/
if ($DB->tableExists("glpi_plugin_tracker_rangeip")) {
// Get all data to create task
$iterator = $DB->request(['FROM' => 'glpi_plugin_tracker_rangeip']);
foreach ($iterator as $data) {
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_glpiinventory_rangeip")
&& $DB->fieldExists(
"glpi_plugin_glpiinventory_rangeip",
"FK_fusioninventory_agents_discover"
)
) {
// Get all data to create task
$iterator = $DB->request(['FROM' => 'glpi_plugin_glpiinventory_rangeip']);
foreach ($iterator as $data) {
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_glpiinventory_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' => 'int unsigned NOT NULL DEFAULT 0', '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'
];
migratePluginTables($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_glpiinventory_locks
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_locks';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['tablename'] = [
'type' => "varchar(64) NOT NULL DEFAULT ''",
'value' => null];
$a_table['fields']['items_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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'] = [];
migratePluginTables($migration, $a_table);
// Deduplicate entries
$iterator = $DB->request([
'SELECT' => [
'tablename',
'COUNT' => ['tablename as cpt'],
'items_id'
],
'FROM' => 'glpi_plugin_glpiinventory_locks',
'GROUPBY' => [
'tablename',
'items_id'
],
'HAVING' => [
'cpt' => ['>', 1]
]
]);
foreach ($iterator as $data) {
$DB->delete(
'glpi_plugin_glpiinventory_locks',
[
'tablename' => $data['tablename'],
'items_id' => $data['items_id']
],
['ORDER' => 'ID desc', 'LIMIT' => ($data['cpt'] - 1)]
);
}
// add unique key
$a_table['keys'][] = ['field' => ["tablename", "items_id"],
'name' => 'unicity', 'type' => 'UNIQUE'];
migratePluginTables($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_glpiinventory_ipranges_configsecurities
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_ipranges_configsecurities';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['plugin_glpiinventory_ipranges_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['plugin_glpiinventory_configsecurities_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['rank'] = ['type' => 'integer',
'value' => '1'];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['oldkeys'] = [];
migratePluginTables($migration, $a_table);
/*
* Clean SNMP communities orphelin associated to deleted ipranges
*/
$iterator = $DB->request([
'SELECT' => 'glpi_plugin_glpiinventory_ipranges_configsecurities.id',
'FROM' => 'glpi_plugin_glpiinventory_ipranges_configsecurities',
'LEFT JOIN' => [
'glpi_plugin_glpiinventory_ipranges' => [
'FKEY' => [
'glpi_plugin_glpiinventory_ipranges_configsecurities' => 'plugin_glpiinventory_ipranges_id',
'glpi_plugin_glpiinventory_ipranges' => 'id'
]
]
],
'WHERE' => ['glpi_plugin_glpiinventory_ipranges_configsecurities.id' => null]
]);
if (count($iterator)) {
$delete = $DB->buildDelete(
'glpi_plugin_glpiinventory_ipranges_configsecurities',
[
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($delete);
foreach ($iterator as $data) {
$stmt->bind_param('s', $data['id']);
$DB->executeStatement($stmt);
}
mysqli_stmt_close($stmt);
}
}
/**
* Manage the profile part migration
*
* @global object $DB
* @param object $migration
*/
function do_profile_migration($migration)
{
global $DB;
if ($DB->tableExists('glpi_plugin_glpiinventory_profiles')) {
/*
* Table glpi_plugin_glpiinventory_profiles
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_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' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['profiles_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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',
'configuration'];
$a_table['renamefields'] = [];
$a_table['renamefields']['ID'] = 'id';
$a_table['keys'] = [];
$a_table['oldkeys'] = [];
migratePluginTables($migration, $a_table);
// Remove multiple lines can have problem with unicity
$query = "SELECT * , count(`id`) AS cnt
FROM `glpi_plugin_glpiinventory_profiles`
GROUP BY `type`,`plugins_id`,`profiles_id`
HAVING cnt >1
ORDER BY cnt";
$result = $DB->doQuery($query);
while ($data = $DB->fetchArray($result)) {
//DB::delete() not yet supports limit nor order
$queryd = "DELETE FROM `glpi_plugin_glpiinventory_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->doQuery($queryd);
}
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_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'] = [];
migratePluginTables($migration, $a_table);
}
}
/**
* Manage the timeslot (of task) part migration
*
* @param object $migration
*/
function do_timeslot_migration($migration)
{
/*
* Table glpi_plugin_glpiinventory_timeslots
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_timeslots';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['entities_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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' => 'timestamp',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['oldkeys'] = [];
migratePluginTables($migration, $a_table);
/*
* Table glpi_plugin_glpiinventory_timeslotentries
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_timeslotentries';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['plugin_glpiinventory_timeslots_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['entities_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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 DEFAULT NULL',
'value' => null];
$a_table['fields']['end'] = ['type' => 'int DEFAULT NULL',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['oldkeys'] = [];
migratePluginTables($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_glpiinventory_unmanageds
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_unmanageds';
$a_table['oldname'] = [
'glpi_plugin_glpiinventory_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' => 'timestamp',
'value' => null];
$a_table['fields']['entities_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['locations_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['is_deleted'] = ['type' => 'bool',
'value' => null];
$a_table['fields']['users_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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']['agents_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['ip'] = ['type' => 'string',
'value' => null];
$a_table['fields']['hub'] = ['type' => 'bool',
'value' => null];
$a_table['fields']['states_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['sysdescr'] = ['type' => 'text',
'value' => null];
$a_table['fields']['plugin_glpiinventory_configsecurities_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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_glpiinventory_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_glpiinventory_configsecurities_id',
'plugin_glpiinventory_agents_id' => 'agents_id',
];
$a_table['keys'] = [
['field' => 'entities_id', 'name' => '', 'type' => 'INDEX'],
['field' => 'agents_id', 'name' => '', 'type' => 'INDEX'],
['field' => 'is_deleted', 'name' => '', 'type' => 'INDEX'],
['field' => 'date_mod', 'name' => '', 'type' => 'INDEX']
];
$a_table['oldkeys'] = [
'plugin_glpiinventory_agents_id',
];
migratePluginTables($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_glpiinventory_unmanageds',
[
'sysdescr' => new \QueryParam(),
'plugin_glpiinventory_configsecurities_id' => new \QueryParam()
],
[
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($update);
foreach ($iterator as $data) {
$stmt->bind_param(
'sss',
$data['sysdescr'],
$data['plugin_fusinvsnmp_configsecurities_id'],
$data['plugin_glpiinventory_unknowndevices_id']
);
}
mysqli_stmt_close($stmt);
}
$migration->dropTable('glpi_plugin_fusinvsnmp_unknowndevices');
}
changeDisplayPreference("5153", "PluginGlpiinventoryUnmanaged");
changeDisplayPreference(
"PluginGlpiinventoryUnknownDevice",
"PluginGlpiinventoryUnmanaged"
);
/*
* Delete IP and MAC of PluginGlpiinventoryUnmanaged in displaypreference
*/
$DB->delete(
'glpi_displaypreferences',
[
'itemtype' => 'PluginGlpiinventoryUnmanaged',
'OR' => [
'num' => [11, 12, 16]
]
]
);
/*
* Convert itemtype from glpi_plugin_glpiinventory_unknowndevices to
* PluginGlpiinventoryUnmanaged
*/
$tables = ['glpi_networkports', 'glpi_logs',
'glpi_plugin_glpiinventory_ignoredimportdevices'];
foreach ($tables as $table) {
$DB->update(
$table,
[
'itemtype' => 'PluginGlpiinventoryUnmanaged'
],
[
'itemtype' => 'PluginGlpiinventoryUnknowndevice'
]
);
}
$DB->update(
'glpi_ipaddresses',
[
'mainitemtype' => 'PluginGlpiinventoryUnmanaged'
],
[
'mainitemtype' => 'PluginGlpiinventoryUnknowndevice'
]
);
}
/**
* Manage the ignored import rules part migration
*
* @param object $migration
*/
function do_ignoredimport_migration($migration)
{
/*
* Table glpi_plugin_glpiinventory_ignoredimportdevices
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_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' => 'timestamp',
'value' => null];
$a_table['fields']['itemtype'] = [
'type' => "varchar(100) DEFAULT NULL",
'value' => null];
$a_table['fields']['entities_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['ip'] = ['type' => 'string',
'value' => null];
$a_table['fields']['mac'] = ['type' => 'string',
'value' => null];
$a_table['fields']['rules_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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']['agents_id']
= ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [
'plugin_glpiinventory_agents_id' => 'agents_id',
];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'agents_id',
'name' => '',
'type' => 'INDEX'];
$a_table['oldkeys'] = [
'plugin_glpiinventory_agents_id',
];
migratePluginTables($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_glpiinventory_inventorycomputercriterias
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_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'] = [];
migratePluginTables($migration, $a_table);
/*
* Table glpi_plugin_glpiinventory_inventorycomputerblacklists
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_inventorycomputerblacklists';
$a_table['oldname'] = ['glpi_plugin_fusinvinventory_blacklists'];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['plugin_glpiinventory_criterium_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['value'] = ['type' => 'string',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'plugin_glpiinventory_criterium_id',
'name' => '',
'type' => 'KEY'];
$a_table['oldkeys'] = [];
migratePluginTables($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_glpiinventory_inventorycomputercriterias',
'WHERE' => ['name' => $name]
]);
if (!count($iterator)) {
$DB->insert(
'glpi_plugin_glpiinventory_inventorycomputercriterias',
[
'name' => $name,
'comment' => $comment
]
);
}
}
$a_criteria = [];
$iterator = $DB->request(['FROM' => 'glpi_plugin_glpiinventory_inventorycomputercriterias']);
foreach ($iterator as $data) {
$a_criteria[$data['comment']] = $data['id'];
}
/*
* Update blacklist
*/
$newTable = "glpi_plugin_glpiinventory_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_glpiinventory_criterium_id' => $a_criteria['ssn'],
'value' => $value
]
]);
if (!count($iterator)) {
$DB->insert(
$newTable,
[
'plugin_glpiinventory_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_glpiinventory_criterium_id' => $a_criteria['uuid'],
'value' => $value
]
]);
if (!count($iterator)) {
$DB->insert(
$newTable,
[
'plugin_glpiinventory_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_glpiinventory_criterium_id' => $a_criteria['macAddress'],
'value' => $value
]
]);
if (!count($iterator)) {
$DB->insert(
$newTable,
[
'plugin_glpiinventory_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_glpiinventory_criterium_id' => $a_criteria['smodel'],
'value' => $value
]
]);
if (!count($iterator)) {
$DB->insert(
$newTable,
[
'plugin_glpiinventory_criterium_id' => $a_criteria['smodel'],
'value' => $value
]
);
}
}
// * manufacturer
$a_input = ['System manufacturer'];
foreach ($a_input as $value) {
$iterator = $DB->request([
'FROM' => $newTable,
'WHERE' => [
'plugin_glpiinventory_criterium_id' => $a_criteria['manufacturer'],
'value' => $value
]
]);
if (!count($iterator)) {
$DB->insert(
$newTable,
[
'plugin_glpiinventory_criterium_id' => $a_criteria['manufacturer'],
'value' => $value
]
);
}
}
// * ip
$iterator = $DB->request([
'FROM' => 'glpi_plugin_glpiinventory_inventorycomputercriterias',
'WHERE' => ['name' => 'IP']
]);
if (!count($iterator)) {
$DB->insert(
'glpi_plugin_glpiinventory_inventorycomputercriterias',
[
'id' => 11,
'name' => 'IP',
'comment' => 'IP'
]
);
}
$a_criteria = [];
$iterator = $DB->request(['FROM' => 'glpi_plugin_glpiinventory_inventorycomputercriterias']);
foreach ($iterator as $data) {
$a_criteria[$data['comment']] = $data['id'];
}
$a_input = ['0.0.0.0'];
foreach ($a_input as $value) {
$iterator = $DB->request([
'FROM' => $newTable,
'WHERE' => [
'plugin_glpiinventory_criterium_id' => $a_criteria['IP'],
'value' => $value
]
]);
if (!count($iterator)) {
$DB->insert(
$newTable,
[
'plugin_glpiinventory_criterium_id' => $a_criteria['IP'],
'value' => $value
]
);
}
}
changeDisplayPreference(
"PluginFusinvinventoryBlacklist",
"PluginGlpiinventoryInventoryComputerBlacklist"
);
}
/**
* Manage the rules matched log part migration
*
* @global object $DB
* @param object $migration
*/
function do_rulematchedlog_migration($migration)
{
global $DB;
/*
* Table glpi_plugin_glpiinventory_rulematchedlogs
*/
$newTable = "glpi_plugin_glpiinventory_rulematchedlogs";
if (!$DB->tableExists($newTable)) {
$query = "CREATE TABLE `" . $newTable . "` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC";
$DB->doQuery($query);
}
$migration->changeField(
$newTable,
"id",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->migrationOneTable($newTable);
$migration->addField(
$newTable,
"date",
"timestamp NULL DEFAULT NULL"
);
$migration->addField(
$newTable,
"items_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"itemtype",
"varchar(100) DEFAULT NULL"
);
$migration->addField(
$newTable,
"rules_id",
"int unsigned NOT NULL DEFAULT '0'"
);
if ($DB->fieldExists($newTable, "plugin_glpiinventory_agents_id")) {
$migration->changeField(
$newTable,
"plugin_glpiinventory_agents_id",
"agents_id",
"int unsigned NOT NULL DEFAULT '0'"
);
} else {
$migration->addField(
$newTable,
"agents_id",
"int unsigned NOT NULL DEFAULT '0'"
);
}
$migration->addField(
$newTable,
"method",
"varchar(255) DEFAULT NULL"
);
$migration->addField(
$newTable,
"criteria",
'text 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_glpiinventory_inventorycomputerantiviruses
*/
$newTable = "glpi_plugin_glpiinventory_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_glpiinventory_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']);
foreach ($iterator as $data) {
if ($Computer->getFromDB($data['items_id'])) {
$input = [
'id' => $data['items_id'],
'uuid' => $data['uuid']
];
$Computer->update($input);
}
}
$DB->dropTable('glpi_plugin_fusinvinventory_computers');
}
if ($DB->tableExists("glpi_plugin_fusinvinventory_tmp_agents")) {
$DB->dropTable('glpi_plugin_fusinvinventory_tmp_agents');
}
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_inventorycomputercomputers';
$a_table['oldname'] = ['glpi_plugin_fusinvinventory_computers'];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['computers_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['operatingsystem_installationdate'] = ['type' => 'timestamp',
'value' => null];
$a_table['fields']['winowner'] = ['type' => 'string',
'value' => null];
$a_table['fields']['wincompany'] = ['type' => 'string',
'value' => null];
$a_table['fields']['last_inventory_update'] = ['type' => 'timestamp',
'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' => 'timestamp',
'value' => null];
$a_table['oldfields'] = [
'plugin_glpiinventory_computerarchs_id',
'bios_assettag',
'bios_date',
'bios_version',
'bios_manufacturers_id'
];
$a_table['renamefields']['last_fusioninventory_update'] = 'last_inventory_update';
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'computers_id', 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'last_inventory_update', 'name' => '', 'type' => 'INDEX'];
$a_table['oldkeys'] = [];
do_biosascomponentmigration();
migratePluginTables($migration, $a_table);
$migration->dropTable('glpi_plugin_fusinvinventory_libserialization');
/*
* Manage devices with is_dynamic
*/
$iterator = $DB->request(['FROM' => 'glpi_plugin_glpiinventory_inventorycomputercomputers']);
if (count($iterator)) {
$update = $DB->buildUpdate(
'glpi_computers',
[
'is_dynamic' => 1
],
[
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($update);
foreach ($iterator as $data) {
$stmt->bind_param('s', $data['computers_id']);
$DB->executeStatement($stmt);
}
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_glpiinventory_inventorycomputercomputers') &&
($DB->fieldExists('glpi_plugin_glpiinventory_inventorycomputercomputers', 'bios_date') ||
$DB->fieldExists('glpi_plugin_glpiinventory_inventorycomputercomputers', 'bios_version') ||
$DB->fieldExists('glpi_plugin_glpiinventory_inventorycomputercomputers', 'bios_manufacturers_id'))
) {
$bioses = [];
//retrieve exiting
$bios_iterator = $DB->request([
'SELECT' => [
'computers_id',
'bios_date',
'bios_version',
'bios_manufacturers_id',
'glpi_manufacturers.name AS mname'
],
'FROM' => 'glpi_plugin_glpiinventory_inventorycomputercomputers',
'LEFT JOIN' => [
'glpi_manufacturers' => [
'FKEY' => [
'glpi_plugin_glpiinventory_inventorycomputercomputers' => 'bios_manufacturers_id',
'glpi_manufacturers' => 'id'
]
]
],
'WHERE' => [
[
'OR' => [
'NOT' => ['bios_date' => null],
'AND' => [
'NOT' => ['bios_version' => null],
'bios_version' => ['!=', '']
],
'bios_manufacturers_id' => ['!=', 0]
]
]
]
]);
$deviceBios = new DeviceFirmware();
$item_DeviceBios = new Item_DeviceFirmware();
foreach ($bios_iterator as $data) {
if (empty($data['bios_date'])) {
continue; // Ignore invalid dates
}
$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->current();
$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_glpiinventory_inventorycomputerstats
*/
if (!$DB->tableExists("glpi_plugin_glpiinventory_inventorycomputerstats")) {
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_inventorycomputerstats';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => "smallint unsigned NOT NULL AUTO_INCREMENT",
'value' => ''];
$a_table['fields']['day'] = ['type' => "smallint NOT NULL DEFAULT '0'",
'value' => ''];
$a_table['fields']['hour'] = ['type' => "tinyint 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'] = [];
migratePluginTables($migration, $a_table);
require_once(PLUGIN_GLPI_INVENTORY_DIR . "/inc/inventorycomputerstat.class.php");
PluginGlpiinventoryInventoryComputerStat::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_glpiinventory_configlogfields
*/
$newTable = "glpi_plugin_glpiinventory_configlogfields";
$migration->renameTable(
"glpi_plugin_glpiinventory_config_snmp_history",
$newTable
);
$migration->renameTable(
"glpi_plugin_fusinvsnmp_configlogfields",
$newTable
);
renamePluginFields($migration, $newTable);
if (!$DB->tableExists($newTable)) {
$query = "CREATE TABLE `" . $newTable . "` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC";
$DB->doQuery($query);
}
$migration->changeField(
$newTable,
"ID",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"id",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"plugin_glpiinventory_mappings_id",
"plugin_glpiinventory_mappings_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"days",
"days",
"int NOT NULL DEFAULT '-1'"
);
$migration->migrationOneTable($newTable);
$migration->changeField(
$newTable,
"ID",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"field",
"plugin_glpiinventory_mappings_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->migrationOneTable($newTable);
$migration->addField(
$newTable,
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->addField(
$newTable,
"plugin_glpiinventory_mappings_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"days",
"int NOT NULL DEFAULT '-1'"
);
$migration->addKey(
$newTable,
"plugin_glpiinventory_mappings_id"
);
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
}
/**
* Manage the network port part migration
*
* @global object $DB
* @param object $migration
*/
function do_networkport_migration($migration)
{
global $DB;
/*
* Table glpi_plugin_glpiinventory_networkportconnectionlogs
*/
$newTable = "glpi_plugin_glpiinventory_networkportconnectionlogs";
$migration->renameTable(
"glpi_plugin_fusinvsnmp_networkportconnectionlogs",
$newTable
);
renamePluginFields($migration, $newTable);
if (!$DB->tableExists($newTable)) {
$DB->doQuery('CREATE TABLE `' . $newTable . '` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC');
}
$migration->changeField(
$newTable,
"ID",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"id",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"date",
"date_mod",
"timestamp NULL DEFAULT NULL"
);
$migration->changeField(
$newTable,
"date_mod",
"date_mod",
"timestamp NULL DEFAULT NULL"
);
$migration->changeField(
$newTable,
"creation",
"creation",
"tinyint NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"FK_port_source",
"networkports_id_source",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"networkports_id_source",
"networkports_id_source",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"FK_port_destination",
"networkports_id_destination",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"networkports_id_destination",
"networkports_id_destination",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"plugin_glpiinventory_agentprocesses_id",
"plugin_glpiinventory_agentprocesses_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->dropField($newTable, "process_number");
$migration->migrationOneTable($newTable);
$migration->addField(
$newTable,
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->addField(
$newTable,
"date_mod",
"timestamp NULL DEFAULT NULL"
);
$migration->addField(
$newTable,
"creation",
"tinyint NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"networkports_id_source",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"networkports_id_destination",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"plugin_glpiinventory_agentprocesses_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addKey(
$newTable,
["networkports_id_source",
"networkports_id_destination",
"plugin_glpiinventory_agentprocesses_id"],
"networkports_id_source"
);
$migration->addKey(
$newTable,
"date_mod"
);
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
/*
* Table glpi_plugin_glpiinventory_networkporttypes
*/
$newTable = "glpi_plugin_glpiinventory_networkporttypes";
$migration->renameTable(
"glpi_plugin_fusinvsnmp_networkporttypes",
$newTable
);
renamePluginFields($migration, $newTable);
if (!$DB->tableExists($newTable)) {
$query = "CREATE TABLE `" . $newTable . "` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC";
$DB->doQuery($query);
}
$migration->changeField(
$newTable,
"id",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"name",
"name",
"varchar(255) DEFAULT NULL"
);
$migration->changeField(
$newTable,
"number",
"number",
"int NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"othername",
"othername",
"varchar(255) DEFAULT NULL"
);
$migration->changeField(
$newTable,
"import",
"import",
"tinyint NOT NULL DEFAULT '0'"
);
$migration->migrationOneTable($newTable);
$migration->addField(
$newTable,
"name",
"varchar(255) DEFAULT NULL"
);
$migration->addField(
$newTable,
"number",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"othername",
"varchar(255) DEFAULT NULL"
);
$migration->addField(
$newTable,
"import",
"tinyint NOT NULL DEFAULT '0'"
);
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
/*
* glpi_plugin_glpiinventory_networkports
*/
$newTable = "glpi_plugin_glpiinventory_networkports";
$migration->renameTable(
"glpi_plugin_fusinvsnmp_networkports",
$newTable
);
$migration->renameTable(
"glpi_plugin_tracker_networking_ports",
$newTable
);
renamePluginFields($migration, $newTable);
if (!$DB->tableExists($newTable)) {
$DB->doQuery('CREATE TABLE `' . $newTable . '` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC');
}
$migration->changeField(
$newTable,
"id",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"networkports_id",
"networkports_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"ifmtu",
"ifmtu",
"int NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"ifspeed",
"ifspeed",
"bigint NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"ifinternalstatus",
"ifinternalstatus",
"varchar(255) DEFAULT NULL"
);
$migration->changeField(
$newTable,
"ifconnectionstatus",
"ifconnectionstatus",
"int NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"iflastchange",
"iflastchange",
"varchar(255) DEFAULT NULL"
);
$migration->changeField(
$newTable,
"ifinoctets",
"ifinoctets",
"bigint NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"ifinerrors",
"ifinerrors",
"bigint NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"ifoutoctets",
"ifoutoctets",
"bigint NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"ifouterrors",
"ifouterrors",
"bigint NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"ifstatus",
"ifstatus",
"varchar(255) DEFAULT NULL"
);
$migration->changeField(
$newTable,
"mac",
"mac",
"varchar(255) DEFAULT NULL"
);
$migration->changeField(
$newTable,
"ifdescr",
"ifdescr",
"varchar(255) DEFAULT NULL"
);
$migration->changeField(
$newTable,
"portduplex",
"portduplex",
"varchar(255) DEFAULT NULL"
);
$migration->changeField(
$newTable,
"trunk",
"trunk",
"tinyint NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"lastup",
"lastup",
"timestamp NULL DEFAULT NULL"
);
$migration->migrationOneTable($newTable);
$migration->changeField(
$newTable,
"ID",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"FK_networking_ports",
"networkports_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"ifmac",
"mac",
"varchar(255) DEFAULT NULL"
);
$migration->dropKey(
$newTable,
"FK_networking_ports"
);
$migration->migrationOneTable($newTable);
$migration->addField(
$newTable,
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->addField(
$newTable,
"networkports_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"ifmtu",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"ifspeed",
"bigint NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"ifinternalstatus",
"varchar(255) DEFAULT NULL"
);
$migration->addField(
$newTable,
"ifconnectionstatus",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"iflastchange",
"varchar(255) DEFAULT NULL"
);
$migration->addField(
$newTable,
"ifinoctets",
"bigint NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"ifinerrors",
"bigint NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"ifoutoctets",
"bigint NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"ifouterrors",
"bigint NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"ifstatus",
"varchar(255) DEFAULT NULL"
);
$migration->addField(
$newTable,
"mac",
"varchar(255) DEFAULT NULL"
);
$migration->addField(
$newTable,
"ifdescr",
"varchar(255) DEFAULT NULL"
);
$migration->addField(
$newTable,
"ifalias",
"varchar(255) DEFAULT NULL"
);
$migration->addField(
$newTable,
"portduplex",
"varchar(255) DEFAULT NULL"
);
$migration->addField(
$newTable,
"trunk",
"tinyint NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"lastup",
"timestamp NULL DEFAULT NULL"
);
$migration->addKey(
$newTable,
"networkports_id"
);
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
/*
* Table glpi_plugin_glpiinventory_networkportlogs
*/
$newTable = "glpi_plugin_glpiinventory_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->current();
$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
]);
foreach ($iterator as $thread_connection) {
$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';
} elseif ($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'];
} elseif ($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->current();
}
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' => $input['FK_port_source'],
'networkports_id_destination' => $input['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
);
renamePluginFields($migration, $newTable);
if (!$DB->tableExists($newTable)) {
$query = "CREATE TABLE `" . $newTable . "` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC";
$DB->doQuery($query);
}
$migration->changeField(
$newTable,
"id",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"networkports_id",
"networkports_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"plugin_glpiinventory_mappings_id",
"plugin_glpiinventory_mappings_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"date_mod",
"date_mod",
"timestamp NULL 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_glpiinventory_agentprocesses_id",
"plugin_glpiinventory_agentprocesses_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->migrationOneTable($newTable);
$migration->changeField(
$newTable,
"ID",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"FK_ports",
"networkports_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"plugin_glpiinventory_mappings_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->migrationOneTable($newTable);
// Update with mapping
if ($DB->fieldExists($newTable, "Field")) {
$pfMapping = new PluginGlpiinventoryMapping();
$iterator = $DB->request([
'FROM' => $newTable,
'GROUPBY' => 'Field'
]);
foreach ($iterator as $data) {
$mapping = 0;
if ($mapping = $pfMapping->get("NetworkEquipment", $data['Field'])) {
$DB->update(
$newTable,
[
'plugin_glpiinventory_mappings_id' => $mapping['id']
],
[
'Field' => $data['Field'],
'plugin_glpiinventory_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 unsigned NOT NULL AUTO_INCREMENT"
);
$migration->addField(
$newTable,
"networkports_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"plugin_glpiinventory_mappings_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"date_mod",
"timestamp NULL DEFAULT NULL"
);
$migration->addField(
$newTable,
"value_old",
"varchar(255) DEFAULT NULL"
);
$migration->addField(
$newTable,
"value_new",
"varchar(255) DEFAULT NULL"
);
$migration->addField(
$newTable,
"plugin_glpiinventory_agentprocesses_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addKey(
$newTable,
["networkports_id", "date_mod"],
"networkports_id"
);
$migration->addKey(
$newTable,
"plugin_glpiinventory_mappings_id"
);
$migration->addKey(
$newTable,
"plugin_glpiinventory_agentprocesses_id"
);
$migration->addKey(
$newTable,
"date_mod"
);
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
/*
* Update networports to convert itemtype 5153 to PluginGlpiinventoryUnknownDevice
*/
$DB->update(
'glpi_networkports',
[
'itemtype' => 'PluginGlpiinventoryUnmanaged'
],
[
'itemtype' => [5153, 'PluginGlpiinventoryUnknownDevice']
]
);
$DB->update(
'glpi_networkports',
[
'itemtype' => 'PluginGlpiinventoryTask'
],
[
'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 information in SNMP tables
*/
$iterator = $DB->request([
'SELECT' => 'glpi_plugin_glpiinventory_networkports.id',
'FROM' => 'glpi_plugin_glpiinventory_networkports',
'LEFT JOIN' => [
'glpi_networkports' => [
'FKEY' => [
'glpi_plugin_glpiinventory_networkports' => 'networkports_id',
'glpi_networkports' => 'id'
]
],
'glpi_networkequipments' => [
'FKEY' => [
'glpi_networkports' => 'items_id',
'glpi_networkequipments' => 'id'
]
]
],
'WHERE' => [
'glpi_networkequipments.id' => null
]
]);
foreach ($iterator as $data) {
$DB->delete(
'glpi_plugin_glpiinventory_networkports',
[
'id' => $data['id']
]
);
}
changeDisplayPreference("5162", "PluginFusinvsnmpNetworkPortLog");
}
/**
* Manage the printer part migration
*
* @global object $DB
* @param object $migration
*/
function do_printer_migration($migration)
{
global $DB;
/*
* Table glpi_plugin_glpiinventory_printers
*/
$newTable = "glpi_plugin_glpiinventory_printers";
$migration->renameTable(
"glpi_plugin_fusinvsnmp_printers",
$newTable
);
$migration->renameTable(
"glpi_plugin_tracker_printers",
$newTable
);
renamePluginFields($migration, $newTable);
if (!$DB->tableExists($newTable)) {
$DB->doQuery('CREATE TABLE `' . $newTable . '` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC');
}
$migration->changeField(
$newTable,
"id",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"printers_id",
"printers_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"sysdescr",
"sysdescr",
"text DEFAULT NULL"
);
$migration->changeField(
$newTable,
"plugin_fusinvsnmp_configsecurities_id",
"plugin_glpiinventory_configsecurities_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"plugin_glpiinventory_configsecurities_id",
"plugin_glpiinventory_configsecurities_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"frequence_days",
"frequence_days",
"int NOT NULL DEFAULT '1'"
);
$migration->changeField(
$newTable,
"last_fusioninventory_update",
"last_inventory_update",
"timestamp NULL DEFAULT NULL"
);
$migration->migrationOneTable($newTable);
$migration->changeField(
$newTable,
"ID",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"FK_printers",
"printers_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"FK_snmp_connection",
"plugin_glpiinventory_configsecurities_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"last_tracker_update",
"last_inventory_update",
"timestamp NULL DEFAULT NULL"
);
$migration->dropKey(
$newTable,
"FK_printers"
);
$migration->dropKey(
$newTable,
"FK_snmp_connection"
);
$migration->dropKey(
$newTable,
"plugin_glpiinventory_snmpmodels_id"
);
$migration->migrationOneTable($newTable);
$migration->dropField(
$newTable,
"plugin_fusinvsnmp_models_id"
);
$migration->dropField(
$newTable,
"plugin_glpiinventory_snmpmodels_id"
);
$migration->dropField(
$newTable,
"FK_model_infos"
);
$migration->addField(
$newTable,
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->addField(
$newTable,
"printers_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"sysdescr",
"text DEFAULT NULL"
);
$migration->addField(
$newTable,
"plugin_glpiinventory_configsecurities_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"frequence_days",
"int NOT NULL DEFAULT '1'"
);
$migration->addField(
$newTable,
"last_inventory_update",
"timestamp NULL DEFAULT NULL"
);
$migration->addField(
$newTable,
"serialized_inventory",
"longblob"
);
/*$migration->addKey($newTable,
"plugin_glpiinventory_configsecurities_id");*/
$migration->addKey(
$newTable,
"printers_id"
);
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
/*
* Table glpi_plugin_glpiinventory_printerlogs
*/
$newTable = "glpi_plugin_glpiinventory_printerlogs";
$migration->renameTable(
"glpi_plugin_fusinvsnmp_printerlogs",
$newTable
);
$migration->renameTable(
"glpi_plugin_tracker_printers_history",
$newTable
);
renamePluginFields($migration, $newTable);
if (!$DB->tableExists($newTable)) {
$DB->doQuery('CREATE TABLE `' . $newTable . '` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC');
}
$migration->changeField(
$newTable,
"id",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"printers_id",
"printers_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"date",
"date",
"timestamp NULL DEFAULT NULL"
);
$migration->changeField(
$newTable,
"pages_total",
"pages_total",
"int NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"pages_n_b",
"pages_n_b",
"int NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"pages_color",
"pages_color",
"int NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"pages_recto_verso",
"pages_recto_verso",
"int NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"scanned",
"scanned",
"int NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"pages_total_print",
"pages_total_print",
"int NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"pages_n_b_print",
"pages_n_b_print",
"int NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"pages_color_print",
"pages_color_print",
"int NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"pages_total_copy",
"pages_total_copy",
"int NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"pages_n_b_copy",
"pages_n_b_copy",
"int NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"pages_color_copy",
"pages_color_copy",
"int NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"pages_total_fax",
"pages_total_fax",
"int NOT NULL DEFAULT '0'"
);
$migration->migrationOneTable($newTable);
$migration->changeField(
$newTable,
"ID",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"FK_printers",
"printers_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->migrationOneTable($newTable);
$migration->addField(
$newTable,
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->addField(
$newTable,
"printers_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"date",
"timestamp NULL DEFAULT NULL"
);
$migration->addField(
$newTable,
"pages_total",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"pages_n_b",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"pages_color",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"pages_recto_verso",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"scanned",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"pages_total_print",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"pages_n_b_print",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"pages_color_print",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"pages_total_copy",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"pages_n_b_copy",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"pages_color_copy",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"pages_total_fax",
"int NOT NULL DEFAULT '0'"
);
$migration->addKey(
$newTable,
["printers_id", "date"],
"printers_id"
);
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
/*
* glpi_plugin_glpiinventory_printercartridges
*/
$newTable = "glpi_plugin_glpiinventory_printercartridges";
$migration->renameTable(
"glpi_plugin_fusinvsnmp_printercartridges",
$newTable
);
$migration->renameTable(
"glpi_plugin_tracker_printers_cartridges",
$newTable
);
renamePluginFields($migration, $newTable);
if (!$DB->tableExists($newTable)) {
$DB->doQuery('CREATE TABLE `' . $newTable . '` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC');
}
$migration->changeField(
$newTable,
"id",
"id",
"bigint unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"printers_id",
"printers_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"plugin_glpiinventory_mappings_id",
"plugin_glpiinventory_mappings_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"cartridges_id",
"cartridges_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"state",
"state",
"int NOT NULL DEFAULT '100'"
);
$migration->migrationOneTable($newTable);
$migration->changeField(
$newTable,
"ID",
"id",
"bigint unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"FK_printers",
"printers_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"FK_cartridges",
"cartridges_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"plugin_glpiinventory_mappings_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->migrationOneTable($newTable);
// Update with mapping
if ($DB->fieldExists($newTable, "object_name")) {
$iterator = $DB->request([
'FROM' => $newTable,
'GROUP' => 'object_name'
]);
foreach ($iterator as $data) {
$pfMapping = new PluginGlpiinventoryMapping();
$mapping = 0;
if (($mapping = $pfMapping->get("Printer", $data['object_name']))) {
$DB->update(
$newTable,
[
'plugin_glpiinventory_mappings_id' => $mapping['id']
],
[
'object_name' => $data['object_name']
]
);
}
}
}
$migration->dropField(
$newTable,
"object_name"
);
$migration->migrationOneTable($newTable);
$migration->addField(
$newTable,
"id",
"bigint unsigned NOT NULL AUTO_INCREMENT"
);
$migration->addField(
$newTable,
"printers_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"plugin_glpiinventory_mappings_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"cartridges_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"state",
"int NOT NULL DEFAULT '100'"
);
$migration->addKey(
$newTable,
"printers_id"
);
$migration->addKey(
$newTable,
"plugin_glpiinventory_mappings_id"
);
$migration->addKey(
$newTable,
"cartridges_id"
);
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
/*
* Clean for printer more information again in DB when printer is purged
*/
//echo "Clean for printer more information again in DB when printer is purged\n";
$iterator = $DB->request([
'SELECT' => 'glpi_plugin_glpiinventory_printers.id',
'FROM' => 'glpi_plugin_glpiinventory_printers',
'LEFT JOIN' => [
'glpi_printers' => [
'FKEY' => [
'glpi_plugin_glpiinventory_printers' => 'printers_id',
'glpi_printers' => 'id'
]
]
],
'WHERE' => ['glpi_printers.id' => null]
]);
if (count($iterator)) {
$delete = $DB->buildDelete(
'glpi_plugin_glpiinventory_printers',
[
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($delete);
foreach ($iterator as $data) {
$stmt->bind_param('s', $data['id']);
$DB->executeStatement($stmt);
}
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_glpiinventory_printercartridges.id',
'FROM' => 'glpi_plugin_glpiinventory_printercartridges',
'LEFT JOIN' => [
'glpi_printers' => [
'FKEY' => [
'glpi_plugin_glpiinventory_printercartridges' => 'printers_id',
'glpi_printers' => 'id'
]
]
],
'WHERE' => ['glpi_printers.id' => null]
]);
$stmt = null;
foreach ($iterator as $data) {
$DB->delete(
'glpi_plugin_glpiinventory_printercartridges',
[
'id' => $data['id']
]
);
changeDisplayPreference("5168", "PluginGlpiinventoryPrinterLogReport");
changeDisplayPreference(
"PluginFusinvsnmpPrinterLogReport",
"PluginGlpiinventoryPrinterLogReport"
);
changeDisplayPreference(
"PluginFusioninventoryPrinterLogReport",
"PluginGlpiinventoryPrinterLogReport"
);
changeDisplayPreference("5156", "PluginFusinvsnmpPrinterCartridge");
}
/*
* Manage devices with is_dynamic
*/
$iterator = $DB->request(['FROM' => 'glpi_plugin_glpiinventory_printers']);
if (count($iterator)) {
$update = $DB->buildUpdate(
'glpi_printers',
[
'is_dynamic' => 1
],
[
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($update);
foreach ($iterator as $data) {
$stmt->bind_param('s', $data['printers_id']);
$DB->executeStatement($stmt);
}
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', '%/']]
]);
foreach ($iterator as $data) {
$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_glpiinventory_networkequipments
*/
$newTable = "glpi_plugin_glpiinventory_networkequipments";
$migration->renameTable(
"glpi_plugin_fusinvsnmp_networkequipments",
$newTable
);
$migration->renameTable(
"glpi_plugin_tracker_networking",
$newTable
);
renamePluginFields($migration, $newTable);
if (!$DB->tableExists($newTable)) {
$DB->doQuery('CREATE TABLE `' . $newTable . '` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC');
}
$migration->changeField(
$newTable,
"id",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"networkequipments_id",
"networkequipments_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"sysdescr",
"sysdescr",
"text DEFAULT NULL"
);
$migration->changeField(
$newTable,
"plugin_glpiinventory_configsecurities_id",
"plugin_glpiinventory_configsecurities_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"uptime",
"uptime",
"varchar(255) NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"cpu",
"cpu",
"int NOT NULL DEFAULT '0' COMMENT '%'"
);
$migration->changeField(
$newTable,
"memory",
"memory",
"int NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"last_fusioninventory_update",
"last_inventory_update",
"timestamp NULL DEFAULT NULL"
);
$migration->changeField(
$newTable,
"last_PID_update",
"last_PID_update",
"int NOT NULL DEFAULT '0'"
);
$migration->migrationOneTable($newTable);
$migration->changeField(
$newTable,
"ID",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"FK_networking",
"networkequipments_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"FK_snmp_connection",
"plugin_glpiinventory_configsecurities_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"last_tracker_update",
"last_inventory_update",
"timestamp NULL DEFAULT NULL"
);
$migration->changeField(
$newTable,
"plugin_fusinvsnmp_configsecurities_id",
"plugin_glpiinventory_configsecurities_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->dropKey(
$newTable,
"FK_networking"
);
$migration->dropKey(
$newTable,
"FK_model_infos"
);
$migration->dropKey(
$newTable,
"plugin_glpiinventory_snmpmodels_id"
);
$migration->migrationOneTable($newTable);
$migration->dropField(
$newTable,
"plugin_glpiinventory_snmpmodels_id"
);
$migration->dropField(
$newTable,
"plugin_fusinvsnmp_models_id"
);
$migration->dropField(
$newTable,
"FK_model_infos"
);
$migration->addField(
$newTable,
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->addField(
$newTable,
"networkequipments_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"sysdescr",
"text DEFAULT NULL"
);
$migration->addField(
$newTable,
"plugin_glpiinventory_configsecurities_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"uptime",
"varchar(255) NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"cpu",
"int NOT NULL DEFAULT '0' COMMENT '%'"
);
$migration->addField(
$newTable,
"memory",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"last_inventory_update",
"timestamp NULL DEFAULT NULL"
);
$migration->addField(
$newTable,
"last_PID_update",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"serialized_inventory",
"longblob"
);
$migration->addKey(
$newTable,
"networkequipments_id"
);
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
/*
* glpi_plugin_glpiinventory_networkequipmentips
* Removed in 0.84, but required here for update, we drop in edn of this function
*/
if (
$DB->tableExists("glpi_plugin_glpiinventory_networkequipmentips")
|| $DB->tableExists("glpi_plugin_fusinvsnmp_networkequipmentips")
|| $DB->tableExists("glpi_plugin_tracker_networking_ifaddr")
) {
$newTable = "glpi_plugin_glpiinventory_networkequipmentips";
$migration->renameTable(
"glpi_plugin_fusinvsnmp_networkequipmentips",
$newTable
);
$migration->renameTable(
"glpi_plugin_tracker_networking_ifaddr",
$newTable
);
renamePluginFields($migration, $newTable);
if (!$DB->tableExists($newTable)) {
$DB->doQuery('CREATE TABLE `' . $newTable . '` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC');
}
$migration->changeField(
$newTable,
"id",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"networkequipments_id",
"networkequipments_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"ip",
"ip",
"varchar(255) DEFAULT NULL"
);
$migration->migrationOneTable($newTable);
$migration->changeField(
$newTable,
"ID",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"FK_networking",
"networkequipments_id",
"int unsigned 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 unsigned NOT NULL AUTO_INCREMENT"
);
$migration->addField(
$newTable,
"networkequipments_id",
"int unsigned 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_glpiinventory_networkequipmentips")) {
$networkPort = new NetworkPort();
$networkName = new NetworkName();
$ipAddress = new IPAddress();
$networkEquipment = new NetworkEquipment();
$iterator = $DB->request(['FROM' => 'glpi_plugin_glpiinventory_networkequipments']);
foreach ($iterator as $data) {
if ($networkEquipment->getFromDB($data['networkequipments_id'])) {
$oldtableip = [];
$iterator2 = $DB->request([
'FROM' => 'glpi_plugin_glpiinventory_networkequipmentips',
'WHERE' => ['networkequipments_id' => $data['networkequipments_id']]
]);
foreach ($iterator2 as $dataIP) {
$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_glpiinventory_networkequipments.id',
'FROM' => 'glpi_plugin_glpiinventory_networkequipments',
'LEFT JOIN' => [
'glpi_networkequipments' => [
'FKEY' => [
'glpi_networkequipments' => 'id',
'glpi_plugin_glpiinventory_networkequipments' => 'networkequipments_id'
]
]
],
'WHERE' => [
'glpi_networkequipments.id' => null
]
]);
if (count($iterator)) {
$delete = $DB->buildDelete(
'glpi_plugin_glpiinventory_networkequipments',
[
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($delete);
foreach ($iterator as $data) {
$stmt->bind_param('s', $data['id']);
$DB->executeStatement($stmt);
}
}
changeDisplayPreference("5157", "PluginGlpiinventoryNetworkEquipment");
changeDisplayPreference(
"PluginFusinvsnmpNetworkEquipment",
"PluginGlpiinventoryNetworkEquipment"
);
/*
* Manage devices with is_dynamic
*/
$iterator = $DB->request(['FROM' => 'glpi_plugin_glpiinventory_networkequipments']);
if (count($iterator)) {
$update = $DB->buildUpdate(
'glpi_networkequipments',
[
'is_dynamic' => 1
],
[
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($update);
foreach ($iterator as $data) {
$stmt->bind_param('s', $data['networkequipments_id']);
$DB->executeStatement($stmt);
}
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_glpiinventory_configsecurities
*/
// TODO get info to create SNMP authentification with old values of Tracker plugin
$newTable = "glpi_plugin_glpiinventory_configsecurities";
$migration->renameTable(
"glpi_plugin_fusinvsnmp_configsecurities",
$newTable
);
$migration->renameTable(
"glpi_plugin_tracker_snmp_connection",
$newTable
);
renamePluginFields($migration, $newTable);
if (!$DB->tableExists($newTable)) {
$DB->doQuery('CREATE TABLE `' . $newTable . '` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC');
}
$migration->changeField(
$newTable,
"id",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"name",
"name",
"varchar(64) DEFAULT NULL"
);
$migration->changeField(
$newTable,
"snmpversion",
"snmpversion",
"varchar(8) NOT NULL DEFAULT '1'"
);
$migration->changeField(
$newTable,
"community",
"community",
"varchar(255) DEFAULT NULL"
);
$migration->changeField(
$newTable,
"username",
"username",
"varchar(255) DEFAULT NULL"
);
$migration->changeField(
$newTable,
"authentication",
"authentication",
"varchar(255) DEFAULT NULL"
);
$migration->changeField(
$newTable,
"auth_passphrase",
"auth_passphrase",
"varchar(255) DEFAULT NULL"
);
$migration->changeField(
$newTable,
"encryption",
"encryption",
"varchar(255) DEFAULT NULL"
);
$migration->changeField(
$newTable,
"priv_passphrase",
"priv_passphrase",
"varchar(255) DEFAULT NULL"
);
$migration->changeField(
$newTable,
"is_deleted",
"is_deleted",
"tinyint NOT NULL DEFAULT '0'"
);
$migration->migrationOneTable($newTable);
$migration->changeField(
$newTable,
"ID",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"FK_snmp_version",
"snmpversion",
"varchar(8) NOT NULL DEFAULT '1'"
);
$migration->changeField(
$newTable,
"sec_name",
"username",
"varchar(255) 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 unsigned NOT NULL AUTO_INCREMENT"
);
$migration->addField(
$newTable,
"name",
"varchar(64) DEFAULT NULL"
);
$migration->addField(
$newTable,
"snmpversion",
"varchar(8) NOT NULL DEFAULT '1'"
);
$migration->addField(
$newTable,
"community",
"varchar(255) DEFAULT NULL"
);
$migration->addField(
$newTable,
"username",
"varchar(255) DEFAULT NULL"
);
$migration->addField(
$newTable,
"authentication",
"varchar(255) DEFAULT NULL"
);
$migration->addField(
$newTable,
"auth_passphrase",
"varchar(255) DEFAULT NULL"
);
$migration->addField(
$newTable,
"encryption",
"varchar(255) DEFAULT NULL"
);
$migration->addField(
$newTable,
"priv_passphrase",
"varchar(255) DEFAULT NULL"
);
$migration->addField(
$newTable,
"is_deleted",
"tinyint NOT NULL DEFAULT '0'"
);
$migration->addKey(
$newTable,
"snmpversion"
);
$migration->addKey(
$newTable,
"is_deleted"
);
$migration->migrationOneTable($newTable);
$DB->listFields($newTable, false);
changeDisplayPreference("5152", "PluginGlpiinventoryConfigSecurity");
// Remove the protocols AES192 and AES256 because not managed in the agent
// with the perl module NET-SNMP
$DB->update(
'glpi_plugin_glpiinventory_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_glpiinventory_statediscoveries
*/
$newTable = "glpi_plugin_glpiinventory_statediscoveries";
$migration->renameTable(
"glpi_plugin_fusinvsnmp_statediscoveries",
$newTable
);
renamePluginFields($migration, $newTable);
if (!$DB->tableExists($newTable)) {
$DB->doQuery("CREATE TABLE `" . $newTable . "` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC");
}
$migration->changeField(
$newTable,
"id",
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->changeField(
$newTable,
"plugin_glpiinventory_taskjob_id",
"plugin_glpiinventory_taskjob_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"plugin_glpiinventory_agents_id",
"agents_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"start_time",
"start_time",
"timestamp NULL DEFAULT NULL"
);
$migration->changeField(
$newTable,
"end_time",
"end_time",
"timestamp NULL DEFAULT NULL"
);
$migration->changeField(
$newTable,
"date_mod",
"date_mod",
"timestamp NULL DEFAULT NULL"
);
$migration->changeField(
$newTable,
"threads",
"threads",
"int NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"nb_ip",
"nb_ip",
"int NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"nb_found",
"nb_found",
"int NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"nb_error",
"nb_error",
"int NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"nb_exists",
"nb_exists",
"int NOT NULL DEFAULT '0'"
);
$migration->changeField(
$newTable,
"nb_import",
"nb_import",
"int NOT NULL DEFAULT '0'"
);
$migration->migrationOneTable($newTable);
$migration->addField(
$newTable,
"id",
"int unsigned NOT NULL AUTO_INCREMENT"
);
$migration->addField(
$newTable,
"plugin_glpiinventory_taskjob_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"agents_id",
"int unsigned NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"start_time",
"timestamp NULL DEFAULT NULL"
);
$migration->addField(
$newTable,
"end_time",
"timestamp NULL DEFAULT NULL"
);
$migration->addField(
$newTable,
"date_mod",
"timestamp NULL DEFAULT NULL"
);
$migration->addField(
$newTable,
"threads",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"nb_ip",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"nb_found",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"nb_error",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"nb_exists",
"int NOT NULL DEFAULT '0'"
);
$migration->addField(
$newTable,
"nb_import",
"int 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_glpiinventory_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_glpiinventory_computerlicenseinfos';
$a_table['oldname'] = ['glpi_plugin_fusinvinventory_licenseinfos'];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['computers_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['softwarelicenses_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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' => 'timestamp',
'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'] = [];
migratePluginTables($migration, $a_table);
}
/**
* Manage the computer remote management part migration
*
* @param object $migration
*/
function do_computerremotemgmt_migration($migration)
{
/*
* Table PluginGlpiinventoryComputerRemoteManagement
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_computerremotemanagements';
$a_table['oldname'] = ['glpi_plugin_glpiinventory_computerremotemanagements'];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['computers_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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'] = [];
migratePluginTables($migration, $a_table);
}
/**
* Manage the computer architecture part migration
*
* @param object $migration
*/
function do_computerarch_migration($migration)
{
global $DB;
if ($DB->tableExists('glpi_plugin_glpiinventory_computerarches')) {
//Rename field in coputeroperatingsystems table
$a_table = [
'name' => 'glpi_plugin_glpiinventory_computeroperatingsystems',
'renamefields' => [
'plugin_glpiinventory_computerarches_id' => 'operatingsystemarchitectures_id'
]
];
migratePluginTables($migration, $a_table);
//Arches migration from FI table to GLPi core table
$arches = new OperatingSystemArchitecture();
foreach (getAllDataFromTable('glpi_plugin_glpiinventory_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(
'glpi_plugin_glpiinventory_computeroperatingsystems AS pf_os',
[
'pf_os.operatingsystemarchitectures_id' => $new_id
],
[
'os_arch.name' => $arch['name']
],
[
'LEFT JOIN' => [
'operatingsystemarchitectures AS os_arch' => [
'ON' => [
'pf_os' => 'operatingsystemarchitectures_id',
'os_arch' => 'id',
]
]
]
]
);
}
$migration->dropTable('glpi_plugin_glpiinventory_computerarches');
//Update dictionnary to match the new operating system
$DB->update(
'glpi_rules',
[
'sub_type' => 'RuleDictionnaryOperatingSystemArchitectureCollection'
],
[
'sub_type' => 'PluginGlpiinventoryRuleDictionnaryComputerArchCollection'
]
);
}
}
/**
* Manage the operating system edition part migration
*
* @param object $migration
*/
function do_operatingsystemedition_migration($migration)
{
global $DB;
if ($DB->tableExists('glpi_plugin_glpiinventory_computeroperatingsystemeditions')) {
//OS editions migration from FI table to GLPi core table
$ose = new OperatingSystemEdition();
foreach (getAllDataFromTable('glpi_plugin_glpiinventory_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(
'glpi_plugin_glpiinventory_computeroperatingsystems AS pf_os',
[
'pf_os.plugin_glpiinventory_computeroperatingsystemeditions_id' => $new_id
],
[
'os_edition.name' => $edition['name']
],
[
'LEFT JOIN' => [
'glpi_plugin_glpiinventory_computeroperatingsystemeditions AS os_edition' => [
'ON' => [
'pf_os' => 'plugin_glpiinventory_computeroperatingsystemeditions_id',
'os_edition' => 'id'
]
]
]
]
);
}
$migration->dropTable('glpi_plugin_glpiinventory_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_glpiinventory_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_glpiinventory_computeroperatingsystems AS fi_cos
INNER JOIN glpi_plugin_glpiinventory_computeroskernelnames AS fi_kname
ON fi_kname.id = fi_cos.plugin_glpiinventory_computeroskernelnames_id
INNER JOIN glpi_plugin_glpiinventory_computeroskernelversions AS fi_kversion
ON fi_kversion.id = fi_cos.plugin_glpiinventory_computeroskernelversions_id
";
$iterator = $DB->request($query);
foreach ($iterator as $row) {
$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_glpiinventory_computeroskernelnames');
$migration->dropTable('glpi_plugin_glpiinventory_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_glpiinventory_computeroperatingsystems")) {
$ios = new Item_OperatingSystem();
$query = "SELECT DISTINCT(fi_computer.computers_id) AS cid, fi_computer.computers_id, fi_cos.*
FROM glpi_plugin_glpiinventory_inventorycomputercomputers AS fi_computer
INNER JOIN glpi_plugin_glpiinventory_computeroperatingsystems AS fi_cos
ON fi_computer.plugin_glpiinventory_computeroperatingsystems_id = fi_cos.id
";
$iterator = $DB->request($query);
foreach ($iterator as $row) {
$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_glpiinventory_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_glpiinventory_computeroperatingsystems');
$migration->dropField(
'glpi_plugin_glpiinventory_inventorycomputercomputers',
'plugin_glpiinventory_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
5150 => 9 //Last Update
];
foreach ($sopts as $oldid => $newid) {
$iterator = $DB->request(
"SELECT * FROM `glpi_displaypreferences`
WHERE
`itemtype`='Computer' AND (
`num`='$oldid' OR `num`='$newid'
)"
);
$users = [];
foreach ($iterator as $row) {
if (!in_array($row['users_id'], $users)) {
$users[] = $row['users_id'];
$DB->update(
'glpi_displaypreferences',
[
'num' => $newid
],
[
'id' => $row['id']
]
);
} elseif ($row['num'] == $oldid) {
$DB->delete(
'glpi_displaypreferences',
[
'id' => $row['id']
]
);
}
}
}
//handle bookmarks
$iterator = $DB->request([
'FROM' => 'glpi_savedsearches',
'WHERE' => [
'itemtype' => 'Computer'
]
]);
foreach ($iterator as $row) {
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_glpiinventory_deploygroups_dynamicdatas'
]);
foreach ($iterator as $row) {
$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 PluginGlpiinventoryDeployGroup_Dynamicdata();
$dyndata->update([
'id' => $row['id'],
'fields_array' => serialize($fields)
]);
}
}
}
$migration->addField(
'glpi_plugin_glpiinventory_inventorycomputercomputers',
"hostid",
"string",
['after' => 'oscomment']
);
$migration->migrationOneTable('glpi_plugin_glpiinventory_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_glpiinventory_deployuserinteractions')) {
$query = "CREATE TABLE IF NOT EXISTS `glpi_plugin_glpiinventory_deployuserinteractiontemplates` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`entities_id` int unsigned NOT NULL DEFAULT '0',
`is_recursive` tinyint NOT NULL DEFAULT '0',
`date_creation` timestamp NULL DEFAULT NULL,
`date_mod` timestamp NULL 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=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC";
$DB->doQuery($query);
}
}
/**
* Manage the deploy files part migration
*
* @global object $DB
* @param object $migration
*/
function do_deployfile_migration($migration)
{
global $DB;
/*
* glpi_plugin_glpiinventory_deployfiles
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_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 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 unsigned NOT NULL',
'value' => null
],
'is_recursive' => [
'type' => 'tinyint NOT NULL DEFAULT \'0\'',
'value' => 0
],
'date_mod' => [
'type' => 'timestamp NULL 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'] = [
];
migratePluginTables($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',
'int unsigned NOT NULL DEFAULT 0',
['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")) {
$iterator = $DB->request([
'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' => [
'FKEY' => [
'orders' => 'id',
'files' => 'plugin_fusinvdeploy_orders_id'
]
],
'glpi_plugin_fusinvdeploy_packages AS pkgs' => [
'FKEY' => [
'pkgs' => 'id',
'orders' => 'plugin_fusinvdeploy_packages_id'
]
]
],
'WHERE' => [
'files.shortsha512' => ['!=', '']
]
]);
if (count($iterator) > 0) {
$update = $DB->buildUpdate(
'glpi_plugin_fusinvdeploy_files',
[
'entities_id' => new \QueryParam(),
'is_recursive' => new \QueryParam(),
],
[
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($update);
foreach ($iterator as $data) {
$stmt->bind_param(
'sss',
$data['entities_id'],
$data['is_recursive'],
$data['id']
);
$DB->executeStatement($stmt);
}
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_glpiinventory_deploypackages
*/
$a_table = [];
//table name
$a_table['name'] = 'glpi_plugin_glpiinventory_deploypackages';
$a_table['oldname'] = [
'glpi_plugin_fusinvdeploy_packages'
];
$a_table['fields'] = [
'id' => [
'type' => 'autoincrement',
'value' => null
],
'name' => [
'type' => 'varchar(255) NOT NULL',
'value' => null
],
'comment' => [
'type' => "text",
'value' => null
],
'entities_id' => [
'type' => 'int unsigned NOT NULL',
'value' => null
],
'is_recursive' => [
'type' => 'tinyint NOT NULL DEFAULT \'0\'',
'value' => null
],
'date_mod' => [
'type' => 'timestamp NULL DEFAULT NULL',
'value' => null
],
'uuid' => [
'type' => 'string',
'value' => null
],
'json' => [
'type' => 'longtext DEFAULT NULL',
'value' => null
],
'plugin_glpiinventory_deploygroups_id' => [
'type' => 'int unsigned NOT NULL DEFAULT 0',
'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'] = [];
migratePluginTables($migration, $a_table);
// Before update, manage old Installation and Uninstallation
// see https://github.com/fusioninventory/fusioninventory-for-glpi/issues/1823
$order_table = 'glpi_plugin_glpiinventory_deployorders';
$migration->renameTable('glpi_plugin_fusinvdeploy_orders', $order_table);
if (
$DB->tableExists($order_table)
and $DB->fieldExists($order_table, 'type', false)
) {
require_once(PLUGIN_GLPI_INVENTORY_DIR . "/inc/deploypackage.class.php");
$pfDeployPackage = new PluginGlpiinventoryDeployPackage();
$installs = getAllDataFromTable($order_table, ['type' => '0']);
foreach ($installs as $install) {
$pfDeployPackage->getFromDB($install['plugin_glpiinventory_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_glpiinventory_deploypackages_id' => $uninstall['plugin_glpiinventory_deploypackages_id'],
'json' => ['<>', ''],
]) > 0
) {
// have install and uninstall, so duplicate package
$pfDeployPackage->getFromDB($uninstall['plugin_glpiinventory_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_glpiinventory_deploypackages_id' => $deploypackage_id
],
[
'id' => $uninstall['id']
]
);
}
}
}
if ($DB->tableExists($order_table)) {
$migration->dropTable($order_table);
}
/*
* Table glpi_plugin_glpiinventory_deploypackages_entities
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_deploypackages_entities';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['plugin_glpiinventory_deploypackages_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['entities_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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_glpiinventory_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'] = [];
migratePluginTables($migration, $a_table);
/*
* Table glpi_plugin_glpiinventory_deploypackages_groups
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_deploypackages_groups';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['plugin_glpiinventory_deploypackages_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['groups_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['entities_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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_glpiinventory_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'] = [];
migratePluginTables($migration, $a_table);
/*
* Table glpi_plugin_glpiinventory_deploypackages_profiles
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_deploypackages_profiles';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['plugin_glpiinventory_deploypackages_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['profiles_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['entities_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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_glpiinventory_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'] = [];
migratePluginTables($migration, $a_table);
/*
* Table glpi_plugin_glpiinventory_deploypackages_users
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_deploypackages_users';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['plugin_glpiinventory_deploypackages_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['users_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['keys'][] = ['field' => 'plugin_glpiinventory_deploypackages_id', 'name' => '', 'type' => 'INDEX'];
$a_table['keys'][] = ['field' => 'users_id', 'name' => '', 'type' => 'INDEX'];
$a_table['oldkeys'] = [];
migratePluginTables($migration, $a_table);
}
/**
* Manage the deploy mirror part migration
*
* @param object $migration
*/
function do_deploymirror_migration($migration)
{
global $DB;
/*
* glpi_plugin_glpiinventory_deploymirrors
*/
$a_table = [];
//If table doesn't exists, then we're sure the is_active field is not present
if (!$DB->tableExists('glpi_plugin_glpiinventory_deploymirrors')) {
$is_active_exists = false;
} else {
$is_active_exists = ($DB->fieldExists(
'glpi_plugin_glpiinventory_deploymirrors',
'is_active'
));
}
//table name
$a_table['name'] = 'glpi_plugin_glpiinventory_deploymirrors';
$a_table['oldname'] = [
'glpi_plugin_fusinvdeploy_mirrors'
];
$a_table['fields'] = [
'id' => [
'type' => 'autoincrement',
'value' => null
],
'entities_id' => [
'type' => 'int unsigned NOT NULL',
'value' => null
],
'is_active' => [
'type' => 'tinyint NOT NULL DEFAULT \'0\'',
'value' => null
],
'is_recursive' => [
'type' => 'tinyint NOT NULL DEFAULT \'0\'',
'value' => null
],
'name' => [
'type' => 'varchar(255) NOT NULL',
'value' => null
],
'url' => [
'type' => "varchar(255)" .
" NOT NULL DEFAULT ''",
'value' => null
],
'locations_id' => [
'type' => 'int unsigned NOT NULL',
'value' => 0
],
'comment' => [
'type' => "text",
'value' => null
],
'date_mod' => [
'type' => 'timestamp NULL 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'] = [
];
migratePluginTables($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_glpiinventory_deploymirrors',
[
'is_active' => 1
],
[1 => 1]
);
}
}
/**
* Manage the deploy group part migration
*
* @param object $migration
*/
function do_deploygroup_migration($migration)
{
/*
* glpi_plugin_glpiinventory_deploygroups
*/
$a_table = [];
//table name
$a_table['name'] = 'glpi_plugin_glpiinventory_deploygroups';
$a_table['oldname'] = [
'glpi_plugin_fusinvdeploy_groups'
];
$a_table['fields'] = [
'id' => [
'type' => 'autoincrement',
'value' => null
],
'name' => [
'type' => 'varchar(255) NOT NULL',
'value' => null
],
'comment' => [
'type' => "text",
'value' => null
],
'type' => [
'type' => 'varchar(255) NOT NULL',
'value' => null
],
];
$a_table['oldfields'] = [
];
$a_table['renamefields'] = [
];
$a_table['keys'] = [
];
$a_table['oldkeys'] = [
];
migratePluginTables($migration, $a_table);
/*
* glpi_plugin_glpiinventory_deploygroups_staticdatas
*/
$a_table = [];
//table name
$a_table['name'] = 'glpi_plugin_glpiinventory_deploygroups_staticdatas';
$a_table['oldname'] = [
'glpi_plugin_fusinvdeploy_groups_staticdatas'
];
$a_table['fields'] = [
'id' => [
'type' => 'autoincrement',
'value' => null
],
'plugin_glpiinventory_deploygroups_id' => [
'type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null
],
'itemtype' => [
'type' => 'varchar(100) DEFAULT NULL',
'value' => null
],
'items_id' => [
'type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null
],
];
$a_table['oldfields'] = [
];
$a_table['renamefields'] = [
'groups_id' => 'plugin_glpiinventory_deploygroups_id',
];
$a_table['keys'] = [
/*[
'field' => 'plugin_glpiinventory_deploygroups_id',
'name' => '',
'type' => 'KEY'
],*/
[
'field' => 'items_id',
'name' => '',
'type' => 'KEY'
],
];
$a_table['oldkeys'] = [
];
migratePluginTables($migration, $a_table);
/*
* glpi_plugin_glpiinventory_deploygroups_dynamicdatas
*/
$a_table = [];
//table name
$a_table['name'] = 'glpi_plugin_glpiinventory_deploygroups_dynamicdatas';
$a_table['oldname'] = [
'glpi_plugin_fusinvdeploy_groups_dynamicdatas'
];
$a_table['fields'] = [
'id' => [
'type' => 'autoincrement',
'value' => null
],
'plugin_glpiinventory_deploygroups_id' => [
'type' => 'int unsigned NOT NULL DEFAULT 0',
'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_glpiinventory_deploygroups_id',
];
$a_table['keys'] = [
/*[
'field' => 'plugin_glpiinventory_deploygroups_id',
'name' => '',
'type' => 'KEY'
],*/
[
'field' => 'can_update_group',
'name' => '',
'type' => 'KEY'
],
];
$a_table['oldkeys'] = [
];
migratePluginTables($migration, $a_table);
}
/**
* Manage the database locks part migration
*
* @param object $migration
*/
function do_dblocks_migration($migration)
{
/*
* Table glpi_plugin_glpiinventory_dblockinventorynames
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_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'] = [];
migratePluginTables($migration, $a_table);
/*
* Table glpi_plugin_glpiinventory_dblockinventories
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_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'] = [];
migratePluginTables($migration, $a_table);
/*
* Table glpi_plugin_glpiinventory_dblocksoftwares
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_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'] = [];
migratePluginTables($migration, $a_table);
/*
* Table glpi_plugin_glpiinventory_dblocksoftwareversions
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_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'] = [];
migratePluginTables($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_glpiinventory_credentials
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_credentials';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['entities_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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' => 'timestamp',
'value' => null];
$a_table['fields']['itemtype'] = ['type' => 'string',
'value' => ""];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['oldkeys'] = [];
migratePluginTables($migration, $a_table);
// Fix itemtype changed in 0.84
$DB->update(
'glpi_plugin_glpiinventory_credentials',
[
'itemtype' => 'PluginGlpiinventoryInventoryComputerESX'
],
[
'itemtype' => 'PluginFusinvinventoryVmwareESX'
]
);
/*
* Table glpi_plugin_glpiinventory_credentialips
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_credentialips';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['entities_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['plugin_glpiinventory_credentials_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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' => 'timestamp',
'value' => null];
$a_table['oldfields'] = [];
$a_table['renamefields'] = [];
$a_table['keys'] = [];
$a_table['oldkeys'] = [];
migratePluginTables($migration, $a_table);
}
/**
* Manage the collect part migration
*
* @param object $migration
*/
function do_collect_migration($migration)
{
/*
* Table glpi_plugin_glpiinventory_collects
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_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' => 'int unsigned NOT NULL DEFAULT 0',
'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'] = [];
migratePluginTables($migration, $a_table);
/*
* Table glpi_plugin_glpiinventory_collects_registries
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_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_glpiinventory_collects_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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'] = [];
migratePluginTables($migration, $a_table);
/*
* Table glpi_plugin_glpiinventory_collects_registries_contents
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_collects_registries_contents';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => "autoincrement",
'value' => ''];
$a_table['fields']['computers_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['plugin_glpiinventory_collects_registries_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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'] = [];
migratePluginTables($migration, $a_table);
/*
* Table glpi_plugin_glpiinventory_collects_wmis
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_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_glpiinventory_collects_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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'] = [];
migratePluginTables($migration, $a_table);
/*
* Table glpi_plugin_glpiinventory_collects_wmis_contents
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_collects_wmis_contents';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => "autoincrement",
'value' => ''];
$a_table['fields']['computers_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['plugin_glpiinventory_collects_wmis_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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'] = [];
migratePluginTables($migration, $a_table);
/*
* Table glpi_plugin_glpiinventory_collects_files
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_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_glpiinventory_collects_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['dir'] = ['type' => 'string',
'value' => null];
$a_table['fields']['limit'] = ['type' => "int 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'] = [];
migratePluginTables($migration, $a_table);
/*
* Table glpi_plugin_glpiinventory_collects_files_contents
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_collects_files_contents';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => "autoincrement",
'value' => ''];
$a_table['fields']['computers_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['plugin_glpiinventory_collects_files_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'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'] = [];
migratePluginTables($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',
'PluginGlpiinventorySnmpmodel', 'PluginFusinvsnmpConstructDevice',
'PluginGlpiinventorySnmpmodelConstructDevice', '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' => 'PluginGlpiinventoryInventoryRuleImport'
],
[
'sub_type' => 'PluginGlpiinventoryRuleImportEquipment'
]
);
$iterator = $DB->request([
'FROM' => 'glpi_rules',
'WHERE' => ['sub_type' => 'PluginGlpiinventoryInventoryRuleImport']
]);
if (count($iterator)) {
$update = $DB->buildUpdate(
'glpi_ruleactions',
[
'value' => 1
],
[
'rules_id' => new \QueryParam(),
'value' => 0,
'field' => '_fusion'
]
);
$stmt = $DB->prepare($update);
foreach ($iterator as $data) {
$stmt->bind_param('s', $data['id']);
$DB->executeStatement($stmt);
}
mysqli_stmt_close($stmt);
}
/*
* Manage configuration of plugin
*/
$config = new PluginGlpiinventoryConfig();
$pfSetup = new PluginGlpiinventorySetup();
$users_id = $pfSetup->createGlpiInventoryUser();
$a_input = [];
$a_input['ssl_only'] = 0;
$a_input['delete_task'] = 20;
$a_input['agent_port'] = 62354;
$a_input['extradebug'] = 0;
$a_input['users_id'] = $users_id;
$config->addValues($a_input, false);
$a_input = [];
$a_input['version'] = PLUGIN_GLPIINVENTORY_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['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,
'glpiinventory',
'upload'
]
)
);
$a_input['alert_winpath'] = 1;
$a_input['server_as_mirror'] = 1;
$a_input['mirror_match'] = 0;
$config->addValues($a_input, false);
$pfSetup = new PluginGlpiinventorySetup();
$users_id = $pfSetup->createGlpiInventoryUser();
$DB->update(
'glpi_plugin_glpiinventory_configs',
[
'value' => $users_id
],
[
'type' => 'users_id'
]
);
// Delete old configs
$DB->delete(
'glpi_plugin_glpiinventory_configs',
[
'type' => 'import_printer'
]
);
$DB->delete(
'glpi_plugin_glpiinventory_configs',
[
'type' => 'import_peripheral'
]
);
$DB->delete(
'glpi_plugin_glpiinventory_configs',
[
'type' => 'import_printer'
]
);
}
/**
* Manage the task part migration
*
* @global object $DB
* @param object $migration
*/
function do_task_migration($migration)
{
global $DB;
/*
* Table glpi_plugin_glpiinventory_taskjobs
*/
$a_table = [];
$a_table['name'] = 'glpi_plugin_glpiinventory_taskjobs';
$a_table['oldname'] = [];
$a_table['fields'] = [];
$a_table['fields']['id'] = ['type' => 'autoincrement',
'value' => ''];
$a_table['fields']['plugin_glpiinventory_tasks_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['entities_id'] = ['type' => 'int unsigned NOT NULL DEFAULT 0',
'value' => null];
$a_table['fields']['name'] = ['type' => 'string',
'value' => null];
$a_table['fields']['date_creation'] = ['type' => 'timestamp',
'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' => 'int unsigned NOT NULL DEFAULT 0',
'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_glpiinventory_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'] = [];
migratePluginTables($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_glpiinventory_deploygroups_dynamicdatas'
]);
if (count($iterator)) {
$update = $DB->buildUpdate(
'glpi_plugin_glpiinventory_deploygroups_dynamicdatas',
[
'fields_array' => new \QueryParam()
],
[
'id' => new \QueryParam()
]
);
$stmt = $DB->prepare($update);
foreach ($iterator as $dynamic_data) {
$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;
}
}
} elseif (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->doQuery($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 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ü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 Ä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ß 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ß 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ß 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
);
$DB->executeStatement($stmt);
$migration->displayMessage("$i / $nb");
}
mysqli_stmt_close($stmt);
$migration->displayMessage("$i / $nb");
// Move connections from glpi_plugin_glpiinventory_snmp_history to
// glpi_plugin_glpiinventory_snmp_history_connections
//echo "Moving creation connections history\n";
$hist_iterator = $DB->request([
'FROM' => 'glpi_plugin_tracker_snmp_history',
'WHERE' => [
'Field' => 0,
'OR' => [
'NOT' => ['old_value' => ['LIKE', '%:%']],
'old_value' => null,
],
]
]);
$stmt = null;
if (count($hist_iterator)) {
$nb = count($hist_iterator);
$i = 0;
$migration->displayMessage("$i / $nb");
foreach ($hist_iterator as $data) {
$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->current();
$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->current();
$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']
);
$DB->executeStatement($stmt);
}
}
$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";
$hist_iterator = $DB->request([
'FROM' => 'glpi_plugin_tracker_snmp_history',
'WHERE' => [
'Field' => 0,
'OR' => [
'NOT' => ['new_value' => ['LIKE', '%:%']],
['new_value' => null]
]
]
]);
$stmt = null;
if (count($hist_iterator)) {
$nb = count($hist_iterator);
$i = 0;
$migration->displayMessage("$i / $nb");
foreach ($hist_iterator as $data) {
$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->current();
$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->current();
$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']
);
$DB->executeStatement($stmt);
}
}
}
$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 migratePluginTables($migration, $a_table)
{
global $DB;
foreach ($a_table['oldname'] as $oldtable) {
$migration->renameTable($oldtable, $a_table['name']);
renamePluginFields($migration, $a_table['name']);
}
if (!$DB->tableExists($a_table['name'])) {
if (strstr($a_table['name'], 'glpi_plugin_glpiinventory_dblock')) {
$query = "CREATE TABLE `" . $a_table['name'] . "` (
`value` int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC";
} else {
$query = "CREATE TABLE `" . $a_table['name'] . "` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC";
}
$DB->doQuery($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
* 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_glpiinventory_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_glpiinventory_deployorders",
"json",
"longtext DEFAULT NULL"
);
$migration->migrationOneTable("glpi_plugin_glpiinventory_deployorders");
$final_datas = [];
//== glpi_plugin_glpiinventory_deployorders ==
$o_iterator = $DB->request(['FROM' => 'glpi_plugin_glpiinventory_deployorders']);
foreach ($o_iterator as $o_datas) {
$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")) {
$iterator = $DB->request([
'SELECT' => [
'type',
'path',
'value',
'error AS return'
],
'FROM' => 'glpi_plugin_fusinvdeploy_checks',
'WHERE' => [
'plugin_fusinvdeploy_orders_id' => $order_id
],
'ORDER' => [
'ranking ASC'
]
]);
$c_i = 0;
foreach ($iterator as $c_datas) {
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_iterator = $DB->request([
'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
]
]);
foreach ($f_iterator as $f_datas) {
//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_iterator = $DB->request([
'FROM' => 'glpi_plugin_fusinvdeploy_actions',
'WHERE' => [
'plugin_fusinvdeploy_orders_id' => $order_id
],
'ORDER' => [
'ranking ASC'
]
]);
$a_i = 0;
foreach ($a_iterator as $a_datas) {
//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_iterator = $DB->request([
'FROM' => $a_table,
'WHERE' => [
'id' => $a_datas['items_id']
]
]);
foreach ($at_iterator as $at_datas) {
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_iterator = $DB->request([
'SELECT' => [
'type',
'value'
],
'FROM' => 'glpi_plugin_fusinvdeploy_actions_commandstatus',
'WHERE' => [
'plugin_fusinvdeploy_commands_id' => $at_datas['id']
]
]);
foreach ($ret_cmd_iterator as $res_cmd_datas) {
// 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_glpiinventory_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_iterator = $DB->request([
'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' => 'fp.id'
]);
if (count($fp_iterator) > 0) {
$fhandle = fopen(
GLPI_PLUGIN_DOC_DIR . "/glpiinventory/files/manifests/{$sha}",
'w+'
);
foreach ($fp_iterator as $fp_datas) {
if ($fp_datas['file_hash'] === $sha) {
fwrite($fhandle, $fp_datas['filepart_hash'] . "\n");
}
}
fclose($fhandle);
}
}
}
//migrate fusinvdeploy_files
if ($DB->tableExists("glpi_plugin_fusinvdeploy_files")) {
$DB->doQuery("TRUNCATE TABLE `glpi_plugin_glpiinventory_deployfiles`");
if ($DB->fieldExists("glpi_plugin_fusinvdeploy_files", "filesize")) {
$f_iterator = $DB->request([
'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' => [
'!=' => ''
]
]
]);
foreach ($f_iterator as $f_datas) {
$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 PluginGlpiinventoryDeployFile();
$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_glpiinventory_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_glpiinventory_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"
//);
$DB->update(
PluginGlpiinventoryDeployPackage::getTable(),
[
'json' => Toolbox::addslashes_deep(json_encode($json_order, JSON_UNESCAPED_SLASHES)),
],
[
'id' => $order_config['id'],
]
);
}
/**
* 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_glpiinventory_inventorycomputerstorages',
'glpi_plugin_glpiinventory_inventorycomputerstoragetypes',
'glpi_plugin_glpiinventory_inventorycomputerstorages_storages'
];
foreach ($old_deploy_tables as $table) {
$migration->dropTable($table);
}
}
function renamePlugin(Migration $migration)
{
global $DB;
$tables = $DB->listTables('glpi_plugin_fusioninventory%');
if (count($tables)) {
//plugin has not yet been renamed; we should not have any tables with new name.
$new_tables = $DB->listTables('glpi_plugin_glpiinventory%');
foreach ($new_tables as $new_table) {
$migration->dropTable($new_table);
}
}
foreach ($tables as $table) {
$old_table = $table['TABLE_NAME'];
$new_table = str_replace('fusioninventory', 'glpiinventory', $old_table);
$migration->renameTable($old_table, $new_table);
renamePluginFields($migration, $new_table);
}
// Rename itemtypes
$itemtypes_iterator = $DB->request(
[
'SELECT' => [
'information_schema.columns.table_name AS TABLE_NAME',
'information_schema.columns.column_name AS COLUMN_NAME',
],
'FROM' => 'information_schema.columns',
'INNER JOIN' => [
'information_schema.tables' => [
'FKEY' => [
'information_schema.tables' => 'table_name',
'information_schema.columns' => 'table_name',
[
'AND' => [
'information_schema.tables.table_schema' => new QueryExpression(
$DB->quoteName('information_schema.columns.table_schema')
),
]
],
]
]
],
'WHERE' => [
'information_schema.tables.table_type' => 'BASE TABLE',
'information_schema.columns.table_schema' => $DB->dbdefault,
'information_schema.columns.table_name' => ['LIKE', 'glpi\_%'],
'OR' => [
['information_schema.columns.column_name' => 'itemtype'],
['information_schema.columns.column_name' => ['LIKE', 'itemtype_%']],
],
],
'ORDER' => 'information_schema.columns.table_name',
]
);
foreach ($itemtypes_iterator as $itemtype) {
$table_name = $itemtype['TABLE_NAME'];
$itemtype_col = $itemtype['COLUMN_NAME'];
$DB->update(
$table_name,
[
$itemtype_col => new \QueryExpression(
'REPLACE(' . $DB->quoteName($itemtype_col) . ', "PluginFusioninventory", "PluginGlpiinventory")'
)
],
[
$itemtype_col => ['LIKE', 'PluginFusioninventory%']
]
);
}
}
function renamePluginFields(Migration $migration, string $table)
{
global $DB;
if (!$DB->tableExists($table)) {
return;
}
$has_changes = false;
$fields = $DB->listFields($table, false);
foreach ($fields as $field) {
$old_field = $field['Field'];
if (preg_match('/plugin_fusioninventory.*_id/', $old_field)) {
$new_field = str_replace('fusion', 'glpi', $old_field);
$migration->changeField(
$table,
$old_field,
$new_field,
'int unsigned NOT NULL DEFAULT 0'
);
$migration->dropKey($table, $old_field);
$migration->addKey($table, $new_field);
$has_changes = true;
}
}
if ($has_changes) {
$migration->migrationOneTable($table);
}
}