%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/install.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/>.
* ---------------------------------------------------------------------
*/
/**
* This function manage the installation of the plugin.
*
* @global object $DB
* @param string $version
* @param string $migrationname class name related to Migration class of GLPI
*/
function pluginGlpiinventoryInstall($version, $migrationname = 'Migration')
{
global $CFG_GLPI, $DB;
ini_set("memory_limit", "-1");
ini_set("max_execution_time", "0");
$migration = new $migrationname($version);
/*
* Load classes
*/
require_once(PLUGIN_GLPI_INVENTORY_DIR . '/inc/commonview.class.php');
require_once(PLUGIN_GLPI_INVENTORY_DIR . '/inc/taskjobview.class.php');
require_once(PLUGIN_GLPI_INVENTORY_DIR . '/inc/taskview.class.php');
require_once(PLUGIN_GLPI_INVENTORY_DIR . '/inc/deploypackageitem.class.php');
require_once(PLUGIN_GLPI_INVENTORY_DIR . '/inc/collectcommon.class.php');
require_once(PLUGIN_GLPI_INVENTORY_DIR . '/inc/collectcontentcommon.class.php');
foreach (glob(PLUGIN_GLPI_INVENTORY_DIR . '/inc/*.php') as $file) {
require_once($file);
}
$migration->displayMessage("GLPI Inventory plugin installation");
// Get information of plugin
/*
* Clean if plugin has been installed and uninstalled (not clean correctly)
*/
$migration->displayMessage("Clean data from old installation of the plugin");
$DB->delete(
'glpi_displaypreferences',
[
'itemtype' => [
'5150',
'5151',
'5152',
'5153',
'5156',
'5157',
'5158',
'5159',
'5161',
'5165',
'5166',
'5167',
'5168',
]
]
);
$DB->delete(
'glpi_displaypreferences',
[
'itemtype' => ['LIKE', 'PluginGlpiinventory%']
]
);
$DB->delete(
'glpi_displaypreferences',
[
'itemtype' => ['LIKE', 'PluginFusioninventory%']
]
);
$DB->delete(
'glpi_displaypreferences',
[
'itemtype' => ['LIKE', 'PluginFusinvinventory%']
]
);
$DB->delete(
'glpi_displaypreferences',
[
'itemtype' => ['LIKE', 'PluginFusinvsnmp%']
]
);
// Purge network ports have itemtype tp 5153
$networkPort = new NetworkPort();
$iterator = $DB->request([
'FROM' => 'glpi_networkports',
'WHERE' => ['itemtype' => '5153']
]);
foreach ($iterator as $data) {
$networkPort->delete(['id' => $data['id']], 1);
}
/*
* Remove old rules
*/
$migration->displayMessage("Clean rules from old installation of the plugin");
$Rule = new Rule();
$a_rules = $Rule->find(['sub_type' => 'PluginGlpiinventoryInventoryRuleImport']);
foreach ($a_rules as $data) {
$Rule->delete($data);
}
$a_rules = $Rule->find(['sub_type' => 'PluginFusinvinventoryRuleEntity']);
foreach ($a_rules as $data) {
$Rule->delete($data);
}
$a_rules = $Rule->find(['sub_type' => 'PluginFusinvinventoryRuleLocation']);
foreach ($a_rules as $data) {
$Rule->delete($data);
}
/*
* Create DB structure
*/
$migration->displayMessage("Creation tables in database");
$DB_file = PLUGIN_GLPI_INVENTORY_DIR . "/install/mysql/plugin_glpiinventory-empty.sql";
if (!$DB->runFile($DB_file)) {
$migration->displayMessage("Error on creation tables in database");
}
/*
* Creation of folders
*/
$migration->displayMessage("Creation of folders");
if (!is_dir(GLPI_PLUGIN_DOC_DIR . '/glpiinventory')) {
mkdir(GLPI_PLUGIN_DOC_DIR . '/glpiinventory');
}
if (!is_dir(GLPI_PLUGIN_DOC_DIR . '/glpiinventory/tmp')) {
mkdir(GLPI_PLUGIN_DOC_DIR . '/glpiinventory/tmp');
}
if (!is_dir(GLPI_PLUGIN_DOC_DIR . '/glpiinventory/upload')) {
mkdir(GLPI_PLUGIN_DOC_DIR . '/glpiinventory/upload');
}
/*
* Deploy folders
*/
if (!is_dir(GLPI_PLUGIN_DOC_DIR . '/glpiinventory/files')) {
mkdir(GLPI_PLUGIN_DOC_DIR . '/glpiinventory/files');
}
if (!is_dir(GLPI_PLUGIN_DOC_DIR . '/glpiinventory/files/repository')) {
mkdir(GLPI_PLUGIN_DOC_DIR . '/glpiinventory/files/repository');
}
if (!is_dir(GLPI_PLUGIN_DOC_DIR . '/glpiinventory/files/manifests')) {
mkdir(GLPI_PLUGIN_DOC_DIR . '/glpiinventory/files/manifests');
}
if (!is_dir(GLPI_PLUGIN_DOC_DIR . '/glpiinventory/files/import')) {
mkdir(GLPI_PLUGIN_DOC_DIR . '/glpiinventory/files/import');
}
if (!is_dir(GLPI_PLUGIN_DOC_DIR . '/glpiinventory/files/export')) {
mkdir(GLPI_PLUGIN_DOC_DIR . '/glpiinventory/files/export');
}
/*
* Manage profiles
*/
$migration->displayMessage("Initialize profiles");
PluginGlpiinventoryProfile::initProfile();
/*
* Add config
*/
$migration->displayMessage("Initialize configuration");
$pfConfig = new PluginGlpiinventoryConfig();
$pfConfig->initConfigModule();
/*
* Register Agent TASKS
*/
$migration->displayMessage("Initialize agent TASKS");
$pfAgentmodule = new PluginGlpiinventoryAgentmodule();
$input = [];
$input['modulename'] = "INVENTORY";
$input['is_active'] = 1;
$input['exceptions'] = exportArrayToDB([]);
$pfAgentmodule->add($input);
$input = [];
$input['modulename'] = "InventoryComputerESX";
$input['is_active'] = 0;
$input['exceptions'] = exportArrayToDB([]);
$pfAgentmodule->add($input);
$input = [];
$input['modulename'] = "NETWORKINVENTORY";
$input['is_active'] = 0;
$input['exceptions'] = exportArrayToDB([]);
$pfAgentmodule->add($input);
$input = [];
$input['modulename'] = "NETWORKDISCOVERY";
$input['is_active'] = 0;
$input['exceptions'] = exportArrayToDB([]);
$pfAgentmodule->add($input);
$input = [];
$input['modulename'] = "DEPLOY";
$input['is_active'] = 1;
$input['exceptions'] = exportArrayToDB([]);
$pfAgentmodule->add($input);
$input = [];
$input['modulename'] = "Collect";
$input['is_active'] = 1;
$input['exceptions'] = exportArrayToDB([]);
$pfAgentmodule->add($input);
/*
* Add cron task
*/
$migration->displayMessage("Initialize cron task");
CronTask::Register(
'PluginGlpiinventoryTask',
'taskscheduler',
'60',
['mode' => 2, 'allowmode' => 3, 'logs_lifetime' => 30]
);
CronTask::Register(
'PluginGlpiinventoryTaskjobstate',
'cleantaskjob',
(3600 * 24),
['mode' => 2, 'allowmode' => 3, 'logs_lifetime' => 30]
);
CronTask::Register(
'PluginGlpiinventoryAgentWakeup',
'wakeupAgents',
120,
['mode' => 2, 'allowmode' => 3, 'logs_lifetime' => 30,
'comment' => Toolbox::addslashes_deep(__(
'Wake agents ups',
'glpiinventory'
))]
);
CronTask::Register(
'PluginGlpiinventoryTask',
'cleanondemand',
86400,
['mode' => 2, 'allowmode' => 3, 'logs_lifetime' => 30,
'comment' => Toolbox::addslashes_deep(__('Clean on demand deployment tasks'))]
);
/*
* Add notification for configuration management
*/
CronTask::Register(
'PluginGlpiinventoryTaskjobstate',
'cleantaskjob',
(3600 * 24),
['mode' => 2, 'allowmode' => 3, 'logs_lifetime' => 30]
);
require_once(PLUGIN_GLPI_INVENTORY_DIR . "/inc/inventorycomputerstat.class.php");
PluginGlpiinventoryInventoryComputerStat::init();
installDashboard();
/*
* Define when install agent_base_url in entity, unless:
* - it is already defined,
* - it matches the GLPI base URL.
*/
$agent_base_url = Entity::getUsedConfig('agent_base_url', 0, 'agent_base_url', '');
if (empty($agent_base_url)) {
$full_url = $_SERVER['PHP_SELF'] ?? null;
$https = filter_input(INPUT_SERVER, "HTTPS");
$http_host = filter_input(INPUT_SERVER, "HTTP_HOST");
if ($full_url && (strpos($full_url, '/ajax/marketplace.php') !== false || strpos($full_url, '/front/plugin.form.php') !== false)) {
$agent_base_url = str_replace(
['/ajax/marketplace.php', '/front/plugin.form.php'],
'',
(!empty($https) ? 'https://' : 'http://') . $http_host . $full_url
);
if ($agent_base_url !== $CFG_GLPI['url_base']) {
$DB->update(
'glpi_entities',
[
'agent_base_url' => $agent_base_url
],
[
'id' => 0
]
);
}
}
}
}