%PDF- %PDF-
| Direktori : /var/www/projetos/suporte.iigd.com.br/plugins/glpiinventory/inc/ |
| Current File : /var/www/projetos/suporte.iigd.com.br/plugins/glpiinventory/inc/config.class.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/>.
* ---------------------------------------------------------------------
*/
if (!defined('GLPI_ROOT')) {
die("Sorry. You can't access directly to this file");
}
/**
* Manage the configuration of the plugin.
*/
class PluginGlpiinventoryConfig extends CommonDBTM
{
/**
* Initialize the displaylist public variable
*
* @var boolean
*/
public $displaylist = false;
/**
* The right name for this class
*
* @var string
*/
public static $rightname = 'plugin_glpiinventory_configuration';
/**
* Define number to the action 'clean' of agents
*
* @var integer
*/
const ACTION_CLEAN = 0;
/**
* Define number to the action 'change status' of agents
*
* @var integer
*/
const ACTION_STATUS = 1;
/**
* Initialize config values of plugin
*
* @param boolean $getOnly
* @return array
*/
public function initConfigModule($getOnly = false)
{
$pfSetup = new PluginGlpiinventorySetup();
$users_id = $pfSetup->createGlpiInventoryUser();
$input = [];
$input['version'] = PLUGIN_GLPIINVENTORY_VERSION;
$input['ssl_only'] = '0';
$input['delete_task'] = '20';
$input['agent_port'] = '62354';
$input['extradebug'] = '0';
$input['users_id'] = $users_id;
$input['wakeup_agent_max'] = '10';
$input['import_software'] = 1;
$input['import_volume'] = 1;
$input['import_antivirus'] = 1;
$input['import_registry'] = 1;
$input['import_process'] = 1;
$input['import_vm'] = 1;
$input['import_monitor_on_partial_sn'] = 0;
$input['component_processor'] = 1;
$input['component_memory'] = 1;
$input['component_harddrive'] = 1;
$input['component_networkcard'] = 1;
$input['component_graphiccard'] = 1;
$input['component_soundcard'] = 1;
$input['component_drive'] = 1;
$input['component_networkdrive'] = 1;
$input['component_control'] = 1;
$input['component_removablemedia'] = 0;
$input['component_simcard'] = 1;
$input['component_powersupply'] = 1;
$input['states_id_default'] = 0;
$input['location'] = 0;
$input['group'] = 0;
$input['create_vm'] = 0;
$input['component_networkcardvirtual'] = 1;
$input['otherserial'] = 0;
$input['component_battery'] = 1;
$input['threads_networkdiscovery'] = 20;
$input['threads_networkinventory'] = 10;
$input['timeout_networkdiscovery'] = 1;
$input['timeout_networkinventory'] = 15;
//deploy config variables
$input['server_upload_path'] =
Toolbox::addslashes_deep(
implode(
DIRECTORY_SEPARATOR,
[
GLPI_PLUGIN_DOC_DIR,
'glpiinventory',
'upload'
]
)
);
$input['alert_winpath'] = 1;
$input['server_as_mirror'] = 1;
$input['manage_osname'] = 1;
$input['clean_on_demand_tasks'] = -1;
$input['reprepare_job'] = 0;
if (!$getOnly) {
$this->addValues($input);
}
return $input;
}
/**
* Get name of this type by language of the user connected
*
* @param integer $nb number of elements
* @return string name of this type
*/
public static function getTypeName($nb = 0)
{
return __('General setup');
}
/**
* Add multiple configuration values
*
* @param array $values configuration values, indexed by name
* @param boolean $update say if add or update in database
*/
public function addValues($values, $update = true)
{
foreach ($values as $type => $value) {
if ($this->getValue($type) === null) {
$this->addValue($type, $value);
} elseif ($update == true) {
$this->updateValue($type, $value);
}
}
}
/**
* Define tabs to display on form page
*
* @param array $options
* @return array containing the tabs name
*/
public function defineTabs($options = [])
{
$plugin = new Plugin();
$ong = [];
$moduleTabs = [];
$this->addStandardTab("PluginGlpiinventoryConfig", $ong, $options);
$this->addStandardTab("PluginGlpiinventoryAgentmodule", $ong, $options);
if (isset($_SESSION['glpi_plugin_glpiinventory']['configuration']['moduletabforms'])) {
$plugin_tabs = $ong;
$moduleTabForms =
$_SESSION['glpi_plugin_glpiinventory']['configuration']['moduletabforms'];
if (count($moduleTabForms)) {
foreach ($moduleTabForms as $module => $form) {
if ($plugin->isActivated($module)) {
$this->addStandardTab($form[key($form)]['class'], $ong, $options);
}
}
$moduleTabs = array_diff($ong, $plugin_tabs);
}
$_SESSION['glpi_plugin_glpiinventory']['configuration']['moduletabs'] = $moduleTabs;
}
return $ong;
}
/**
* Get the tab name used for item
*
* @param CommonGLPI $item the item object
* @param integer $withtemplate 1 if is a template form
* @return string|array name of the tab
*/
public function getTabNameForItem(CommonGLPI $item, $withtemplate = 0)
{
if ($item->getType() == __CLASS__) {
return [
__('General setup'),
__('Network Inventory', 'glpiinventory'),
__('Package management', 'glpiinventory')
];
}
return '';
}
/**
* Display the content of the tab
*
* @param CommonGLPI $item
* @param integer $tabnum number of the tab to display
* @param integer $withtemplate 1 if is a template form
* @return boolean
*/
public static function displayTabContentForItem($item, $tabnum = 1, $withtemplate = 0)
{
/** @var PluginGlpiinventoryConfig $item */
switch ($tabnum) {
case 0:
$item->showConfigForm();
return true;
case 1:
$item->showFormNetworkInventory();
return true;
case 2:
$item->showFormDeploy();
return true;
}
return false;
}
/**
* Get configuration value with name
*
* @global array $PF_CONFIG
* @param string $name name in configuration
* @return null|string|integer
*/
public function getValue($name)
{
global $PF_CONFIG;
if (isset($PF_CONFIG[$name])) {
return $PF_CONFIG[$name];
}
$config = current($this->find(['type' => $name]));
if (isset($config['value'])) {
return $config['value'];
}
return null;
}
/**
* Give state of a config field for plugin
*
* @param string $name name in configuration
* @return boolean
*/
public function isFieldActive($name)
{
if (!($this->getValue($name))) {
return false;
} else {
return true;
}
}
/**
* Display form
*
* @param array $options
* @return true
*/
public function showConfigForm($options = [])
{
$this->showFormHeader($options);
echo "<tr class='tab_bg_1'>";
echo "<td>" . __('SSL-only for agent', 'glpiinventory') . "</td>";
echo "<td width='20%'>";
Dropdown::showYesNo("ssl_only", $this->isFieldActive('ssl_only'));
echo "</td>";
echo "</tr>";
echo "<tr class='tab_bg_1'>";
echo "<td>" . __('Delete tasks logs after', 'glpiinventory') . "</td>";
echo "<td>";
Dropdown::showNumber(
"delete_task",
[
'value' => $this->getValue('delete_task'),
'min' => 1,
'max' => 240,
'unit' => 'day'
]
);
echo "</td>";
echo "<td>" . __('Agent port', 'glpiinventory') . "</td>";
echo "<td>";
echo "<input type='text' class='form-control' name='agent_port' value='" . $this->getValue('agent_port') . "'/>";
echo "</td>";
echo "</tr>";
echo "<tr class='tab_bg_1'>";
echo "<td>" . __('Extra-debug', 'glpiinventory') . "</td>";
echo "<td>";
Dropdown::showYesNo("extradebug", $this->isFieldActive('extradebug'));
echo "</td>";
echo "<td>" . __('Re-prepare successful jobs', 'glpiinventory') . "</td>";
echo "<td>";
Dropdown::showYesNo("reprepare_job", $this->isFieldActive('reprepare_job'));
echo "</td>";
echo "</tr>";
echo "<tr class='tab_bg_1'>";
echo "<td colspan =2></td>";
echo "<td>" . __('Maximum number of agents to wake up in a task', 'glpiinventory') . "</td>";
echo "<td width='20%'>";
Dropdown::showNumber(
"wakeup_agent_max",
[
'value' => $this->getValue('wakeup_agent_max'),
'min' => 1,
'max' => 100
]
);
echo "</td>";
echo "</tr>";
$options['candel'] = false;
$this->showFormButtons($options);
return true;
}
/**
* Get the action for agent action
*
* @param integer $action
* @return string
*/
public static function getActions($action)
{
switch ($action) {
case self::ACTION_STATUS:
return __('Change the status', 'glpiinventory');
case self::ACTION_CLEAN:
return __('Clean agents', 'glpiinventory');
}
return '';
}
/**
* Display form for tab 'Network inventory'
*
* @param array $options
* @return true
*/
public static function showFormNetworkInventory($options = [])
{
global $CFG_GLPI;
$pfConfig = new PluginGlpiinventoryConfig();
$pfsnmpConfig = new self();
$pfsnmpConfig->fields['id'] = 1;
$pfsnmpConfig->showFormHeader($options);
echo "<tr>";
echo "<th colspan='4'>";
echo __('Network options', 'glpiinventory');
echo "</th>";
echo "</tr>";
echo "<tr class='tab_bg_1'>";
echo "<td>" . __('Threads number', 'glpiinventory') . " " .
"(" . strtolower(__('Network discovery', 'glpiinventory')) . ")</td>";
echo "<td align='center'>";
Dropdown::showNumber("threads_networkdiscovery", [
'value' => $pfConfig->getValue('threads_networkdiscovery'),
'min' => 1,
'max' => 400]);
echo "</td>";
echo "<td>" . __('Threads number', 'glpiinventory') . " " .
"(" . strtolower(__('Network inventory (SNMP)', 'glpiinventory')) . ")</td>";
echo "<td align='center'>";
Dropdown::showNumber("threads_networkinventory", [
'value' => $pfConfig->getValue('threads_networkinventory'),
'min' => 1,
'max' => 400]);
echo "</td>";
echo "</tr>";
echo "<tr class='tab_bg_1'>";
echo "<td>" . __('SNMP timeout', 'glpiinventory') . " " .
"(" . strtolower(__('Network discovery', 'glpiinventory')) . ")</td>";
echo "<td align='center'>";
Dropdown::showNumber("timeout_networkdiscovery", [
'value' => $pfConfig->getValue('timeout_networkdiscovery'),
'min' => 1,
'max' => 60]);
echo "</td>";
echo "<td>" . __('SNMP timeout', 'glpiinventory') . " " .
"(" . strtolower(__('Network inventory (SNMP)', 'glpiinventory')) . ")</td>";
echo "<td align='center'>";
Dropdown::showNumber("timeout_networkinventory", [
'value' => $pfConfig->getValue('timeout_networkinventory'),
'min' => 1,
'max' => 60]);
echo "</td>";
echo "</tr>";
$options['candel'] = false;
$pfsnmpConfig->showFormButtons($options);
return true;
}
/**
* Display form for tab 'Deploy'
*
* @param array $options
* @return true
*/
public static function showFormDeploy($options = [])
{
$pfConfig = new PluginGlpiinventoryConfig();
$pfConfig->fields['id'] = 1;
$options['colspan'] = 1;
$pfConfig->showFormHeader($options);
if (GLPI_INSTALL_MODE !== 'CLOUD') {
echo "<tr class='tab_bg_1'>";
echo "<td>" . __('Root folder for sending files from server', 'glpiinventory') . "</td>";
echo "<td>";
echo "<input type='text' class='form-control' name='server_upload_path' value='" .
$pfConfig->getValue('server_upload_path') . "' size='60' />";
echo "</td>";
echo "</tr>";
}
echo "<tr>";
echo "<td>" . __('Use this GLPI server as a mirror server', 'glpiinventory') . "</td>";
echo "<td>";
Dropdown::showYesNo("server_as_mirror", $pfConfig->getValue('server_as_mirror'));
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>" . __('Match mirrors to agents', 'glpiinventory') . "</td>";
echo "<td>";
$mirror_options = [
PluginGlpiinventoryDeployMirror::MATCH_LOCATION => __('with location', 'glpiinventory'),
PluginGlpiinventoryDeployMirror::MATCH_ENTITY => __('with entity', 'glpiinventory'),
PluginGlpiinventoryDeployMirror::MATCH_BOTH => __('with both', 'glpiinventory')
];
Dropdown::showFromArray(
'mirror_match',
$mirror_options,
['value' => $pfConfig->getValue('mirror_match')]
);
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>" . __('Delete successful on demand tasks after (in days)', 'glpiinventory') . "</td>";
echo "<td width='20%'>";
$toadd = [-1 => __('Never')];
Dropdown::showNumber("clean_on_demand_tasks", [
'value' => $pfConfig->getValue('clean_on_demand_tasks'),
'min' => 1,
'max' => 1000,
'toadd' => $toadd]);
echo "</td>";
echo "</tr>";
$options['candel'] = false;
$pfConfig->showFormButtons($options);
return true;
}
/**
* Add name + value in configuration if not exist
*
* @param string $name
* @param string $value
* @return integer|false integer is the id of this configuration name
*/
public function addValue($name, $value)
{
$existing_value = $this->getValue($name);
if (!is_null($existing_value)) {
return $existing_value;
} else {
return $this->add(['type' => $name,
'value' => $value]);
}
}
/**
* Update configuration value
*
* @param string $name name of configuration
* @param string $value
* @return boolean
*/
public function updateValue($name, $value)
{
global $PF_CONFIG;
// retrieve current config
$config = current($this->find(['type' => $name]));
// set in db
if (isset($config['id'])) {
$result = $this->update(['id' => $config['id'], 'value' => $value]);
} else {
$result = $this->add(['type' => $name, 'value' => $value]);
}
// set cache
if ($result) {
$PF_CONFIG[$name] = $value;
}
return $result;
}
/**
* Check if extradebug mode is active
*
* @return null|integer the integer is 1 or 0 (it's like boolean)
*/
public static function isExtradebugActive()
{
$fConfig = new self();
return $fConfig->getValue('extradebug');
}
/**
* Log when extra-debug is activated
*
* @param string $file name of log file to update
* @param string $message the message to put in log file
*/
public static function logIfExtradebug($file, $message)
{
if (self::isExtradebugActive()) {
if (is_array($message)) {
$message = print_r($message, true);
}
Toolbox::logInFile($file, $message);
}
}
/**
* Load all configuration in global variable $PF_CONFIG
*
* Test if table exists before loading cache
* The only case where table doesn't exists is when you click on
* uninstall the plugin and it's already uninstalled
*
* @global object $DB
* @global array $PF_CONFIG
*/
public static function loadCache()
{
global $DB, $PF_CONFIG;
if ($DB->tableExists('glpi_plugin_glpiinventory_configs')) {
$PF_CONFIG = [];
foreach ($DB->request('glpi_plugin_glpiinventory_configs') as $data) {
$PF_CONFIG[$data['type']] = $data['value'];
}
}
}
}