%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/menu.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/>.
* ---------------------------------------------------------------------
*/
use Glpi\Application\View\TemplateRenderer;
if (!defined('GLPI_ROOT')) {
die("Sorry. You can't access directly to this file");
}
/**
* Manage plugin menu
*/
class PluginGlpiinventoryMenu extends CommonGLPI
{
/**
* 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 __('GLPI Inventory', 'glpiinventory');
}
/**
* Check if can view item
*
* @return boolean
*/
public static function canView()
{
$can_display = false;
$profile = new PluginGlpiinventoryProfile();
foreach ($profile->getAllRights() as $right) {
if (Session::haveRight($right['field'], READ)) {
$can_display = true;
break;
}
}
return $can_display;
}
/**
* Check if can create an item
*
* @return boolean
*/
public static function canCreate()
{
return false;
}
/**
* Get the menu name
*
* @return string
*/
public static function getMenuName()
{
return self::getTypeName();
}
/**
* Get additional menu options and breadcrumb
*
* @global array $CFG_GLPI
* @return array
*/
public static function getAdditionalMenuOptions()
{
$fi_full_path = Plugin::getWebDir('glpiinventory');
$fi_rel_path = Plugin::getWebDir('glpiinventory', false);
$elements = [
'iprange' => 'PluginGlpiinventoryIPRange',
'config' => 'PluginGlpiinventoryConfig',
'task' => 'PluginGlpiinventoryTask',
'timeslot' => 'PluginGlpiinventoryTimeslot',
'unmanaged' => 'Unmanaged',
'configsecurity' => 'SNMPCredential',
'credential' => 'PluginGlpiinventoryCredential',
'credentialip' => 'PluginGlpiinventoryCredentialIp',
'collect' => 'PluginGlpiinventoryCollect',
'deploypackage' => 'PluginGlpiinventoryDeployPackage',
'deploymirror' => 'PluginGlpiinventoryDeployMirror',
'deploygroup' => 'PluginGlpiinventoryDeployGroup',
'deployuserinteractiontemplate' => 'PluginGlpiinventoryDeployUserinteractionTemplate',
'ignoredimportdevice' => 'RefusedEquipment'
];
$options = [];
$options['menu']['title'] = self::getTypeName();
$options['menu']['page'] = self::getSearchURL(false);
if (Session::haveRight('plugin_glpiinventory_configuration', READ)) {
$options['menu']['links']['config'] = PluginGlpiinventoryConfig::getFormURL(false);
}
foreach ($elements as $type => $itemtype) {
$options[$type] = [
'title' => $itemtype::getTypeName(),
'page' => $itemtype::getSearchURL(false)];
$options[$type]['links']['search'] = $itemtype::getSearchURL(false);
if ($itemtype::canCreate()) {
if ($type != 'ignoredimportdevice') {
$options[$type]['links']['add'] = $itemtype::getFormURL(false);
}
}
if (Session::haveRight('plugin_glpiinventory_configuration', READ)) {
$options[$type]['links']['config'] = PluginGlpiinventoryConfig::getFormURL(false);
}
}
// hack for config
$options['config']['page'] = PluginGlpiinventoryConfig::getFormURL(false);
// Add icon for import package
$img = Html::image(
$fi_full_path . "/pics/menu_import.png",
['alt' => __('Import', 'glpiinventory')]
);
$options['deploypackage']['links'][$img] = '/' . $fi_rel_path . '/front/deploypackage.import.php';
// Add icon for clean unused deploy files
$img = Html::image(
$fi_full_path . "/pics/menu_cleanfiles.png",
['alt' => __('Clean unused files', 'glpiinventory')]
);
$options['deploypackage']['links'][$img] = '/' . $fi_rel_path . '/front/deployfile.clean.php';
$options['agent'] = [
'title' => Agent::getTypeName(),
'page' => Agent::getSearchURL(false),
'links' => [
'search' => Agent::getSearchURL(false)
]];
if (Session::haveRight('plugin_glpiinventory_configuration', READ)) {
$options['agent']['links']['config'] = PluginGlpiinventoryConfig::getFormURL(false);
}
return $options;
}
/**
* Display the menu of plugin
*
* @global array $CFG_GLPI
* @param string $type
*/
public static function displayMenu($type = "big")
{
global $CFG_GLPI;
$fi_path = Plugin::getWebDir('glpiinventory');
$menu = [];
/*
* Dashboard
*/
if (Session::haveRight('dashboard', READ)) {
$dashboard_menu = [];
$dashboard_menu[0]['name'] = __('Inventory');
$dashboard_menu[0]['pic'] = "ti ti-dashboard";
$dashboard_menu[0]['link'] = $fi_path . "/front/menu.php";
$menu['dashboard'] = [
'name' => __('Dashboard'),
'pic' => "ti ti-dashboard",
'children' => $dashboard_menu
];
}
/*
* General
*/
$general_menu = [];
if (Session::haveRight('agent', READ)) {
$general_menu[0]['name'] = __('Agents management', 'glpiinventory');
$general_menu[0]['pic'] = "ti ti-robot";
$general_menu[0]['link'] = Agent::getSearchURL();
}
if (Session::haveRight('plugin_glpiinventory_group', READ)) {
$general_menu[2]['name'] = __('Groups of computers', 'glpiinventory');
$general_menu[2]['pic'] = "ti ti-devices-pc";
$general_menu[2]['link'] = $fi_path . "/front/deploygroup.php";
}
if (Session::haveRight('config', UPDATE) || Session::haveRight('plugin_glpiinventory_configuration', UPDATE)) {
$general_menu[3]['name'] = __('General configuration', 'glpiinventory');
$general_menu[3]['pic'] = "ti ti-settings";
$general_menu[3]['link'] = $fi_path . "/front/config.form.php";
}
if (!empty($general_menu)) {
$menu['general'] = [
'name' => __('General', 'glpiinventory'),
'pic' => "ti ti-settings",
'children' => $general_menu,
];
}
/*
* Tasks
*/
$tasks_menu = [];
if (Session::haveRight('plugin_glpiinventory_task', READ)) {
$tasks_menu[2]['name'] = __('Task management', 'glpiinventory');
$tasks_menu[2]['pic'] = "ti ti-list-check";
$tasks_menu[2]['link'] = Toolbox::getItemTypeSearchURL('PluginGlpiinventoryTask');
$tasks_menu[3]['name'] = __('Monitoring / Logs', 'glpiinventory');
$tasks_menu[3]['pic'] = "ti ti-activity";
$tasks_menu[3]['link'] = Toolbox::getItemTypeSearchURL('PluginGlpiinventoryTaskJob');
}
if (Session::haveRight('config', READ)) {
$tasks_menu[0]['name'] = __('Import agent XML file', 'glpiinventory');
$tasks_menu[0]['pic'] = "ti ti-file-import";
$tasks_menu[0]['link'] = $CFG_GLPI['root_doc'] . "/front/inventory.conf.php?forcetab=Glpi\Inventory\Conf$2";
}
if (Session::haveRight("plugin_glpiinventory_collect", READ)) {
$tasks_menu[11]['name'] = __('Computer information', 'glpiinventory');
$tasks_menu[11]['pic'] = "ti ti-devices-pc";
$tasks_menu[11]['link'] = Toolbox::getItemTypeSearchURL('PluginGlpiinventoryCollect');
}
if (Session::haveRight('plugin_glpiinventory_task', READ)) {
$tasks_menu[12]['name'] = __('Time slot', 'glpiinventory');
$tasks_menu[12]['pic'] = "ti ti-calendar-time";
$tasks_menu[12]['link'] = Toolbox::getItemTypeSearchURL('PluginGlpiinventoryTimeslot');
}
if (!empty($tasks_menu)) {
$menu['tasks'] = [
'name' => __('Tasks', 'glpiinventory'),
'pic' => "ti ti-list-check",
'children' => $tasks_menu,
];
}
/*
* Rules
*/
$rules_menu = [];
if (Session::haveRight('plugin_glpiinventory_ruleimport', READ)) {
$rules_menu[1]['name'] = __('Equipment import and link rules', 'glpiinventory');
$rules_menu[1]['pic'] = "ti ti-book";
$rules_menu[1]['link'] = Toolbox::getItemTypeSearchURL(
RuleImportAsset::class
);
}
if (Session::haveRight('config', READ)) {
$rules_menu[2]['name'] = __('Asset skipped during import', 'glpiinventory');
$rules_menu[2]['pic'] = "ti ti-device-desktop-off";
$rules_menu[2]['link'] = RefusedEquipment::getSearchURL();
}
if (Session::haveRight('rule_import', READ)) {
$rules_menu[3]['name'] = __('Computer entity rules', 'glpiinventory');
$rules_menu[3]['pic'] = "ti ti-book";
$rules_menu[3]['link'] = RuleImportEntity::getSearchURL();
//$rules_menu[3]['link'] = $fi_path."/front/inventoryruleentity.php";
}
if (Session::haveRight('config', READ)) {
$rules_menu[6]['name'] = Blacklist::getTypeName(1);
$rules_menu[6]['pic'] = "ti ti-ban";
$rules_menu[6]['link'] = Blacklist::getSearchURL();
}
if (!empty($rules_menu)) {
$menu['rules'] = [
'name' => __('Rules', 'glpiinventory'),
'pic' => "ti ti-book",
'children' => $rules_menu,
];
}
/*
* Network
*/
$network_menu = [];
if (Session::haveRight('plugin_glpiinventory_iprange', READ)) {
$network_menu[] = [
'name' => __('IP Ranges', 'glpiinventory'),
'pic' => "ti ti-viewfinder",
'link' => Toolbox::getItemTypeSearchURL('PluginGlpiinventoryIPRange')
];
}
if (Session::haveRight('plugin_glpiinventory_credentialip', READ)) {
$network_menu[] = [
'name' => __('Remote devices to inventory (VMware)', 'glpiinventory'),
'pic' => "ti ti-devices-pc",
'link' => Toolbox::getItemTypeSearchURL('PluginGlpiinventoryCredentialip')
];
}
if (Session::haveRight('plugin_glpiinventory_configsecurity', READ)) {
$network_menu[] = [
'name' => __('SNMP credentials', 'glpiinventory'),
'pic' => "ti ti-lock",
'link' => SNMPCredential::getSearchURL()
];
}
if (Session::haveRight('plugin_glpiinventory_credential', READ)) {
$network_menu[] = [
'name' => __('Authentication for remote devices (VMware)', 'glpiinventory'),
'pic' => "ti ti-lock",
'link' => Toolbox::getItemTypeSearchURL('PluginGlpiinventoryCredential')
];
}
if (Session::haveRight('plugin_glpiinventory_task', READ)) {
$network_menu[] = [
'name' => __('Discovery status', 'glpiinventory'),
'pic' => "ti ti-activity",
'link' => $fi_path . "/front/statediscovery.php"
];
$network_menu[] = [
'name' => __('Network inventory status', 'glpiinventory'),
'pic' => "ti ti-activity",
'link' => $fi_path . "/front/stateinventory.php",
];
}
if (Session::haveRight('plugin_glpiinventory_model', READ)) {
$network_menu[] = [
'name' => __('SNMP models creation', 'glpiinventory'),
'pic' => "ti ti-model",
'link' => $fi_path . "/front/constructmodel.php"
];
}
if (!empty($network_menu)) {
$menu['network'] = [
'name' => __('Networking', 'glpiinventory'),
'pic' => "ti ti-network",
'children' => $network_menu,
];
}
/*
* Deploy
*/
$deploy_menu = [];
if (Session::haveRight('plugin_glpiinventory_package', READ)) {
$deploy_menu[] = [
'name' => __('Package management', 'glpiinventory'),
'pic' => "ti ti-package",
'link' => $fi_path . "/front/deploypackage.php"
];
}
if (Session::haveRight('plugin_glpiinventory_deploymirror', READ)) {
$deploy_menu[1]['name'] = __('Mirror servers', 'glpiinventory');
$deploy_menu[1]['pic'] = "ti ti-server-2";
$deploy_menu[1]['link'] = $fi_path . "/front/deploymirror.php";
}
if (Session::haveRight('plugin_glpiinventory_userinteractiontemplate', READ)) {
$deploy_menu[2]['name'] = _n(
'User interaction template',
'User interaction templates',
2,
'glpiinventory'
);
$deploy_menu[2]['pic'] = "ti ti-template";
$deploy_menu[2]['link'] = $fi_path . "/front/deployuserinteractiontemplate.php";
}
if (!empty($deploy_menu)) {
$menu['deploy'] = [
'name' => __('Deploy', 'glpiinventory'),
'pic' => "ti ti-share",
'children' => $deploy_menu,
];
}
/*
* Guide
*/
$guide_menu = [];
$guide_menu[] = [
'name' => __('SNMP inventory', 'glpiinventory'),
'pic' => "ti ti-book",
'link' => $fi_path . "/front/menu_snmpinventory.php"
];
$menu['guide'] = [
'name' => __('Guide', 'glpiinventory'),
'pic' => "ti ti-book-2",
'children' => $guide_menu,
];
TemplateRenderer::getInstance()->display('@glpiinventory/submenu.html.twig', [
'menu' => $menu,
]);
}
/**
* Menu for SNMP inventory
*
* @global array $CFG_GLPI
*/
public static function displayMenuSNMPInventory()
{
$fi_path = Plugin::getWebDir('glpiinventory');
echo "<table class='tab_cadre_fixe'>";
echo "<tr class='tab_bg_1'>";
echo "<th colspan='2'>";
echo __('This is the steps to configure plugin for SNMP inventory (swicth, router, network printer)', 'glpiinventory');
echo "</th>";
echo "</tr>";
$a_steps = [
[
'text' => __('Configure SNMP credentials', 'glpiinventory'),
'url' => SNMPCredential::getFormURL(),
],
[
'text' => __('Define rules for import : merge and create new devices (CAUTION: same rules for computer inventory)', 'glpiinventory'),
'url' => RuleImportAsset::getFormURL(),
],
[
'text' => __('`Network Discovery`, used to discover the devices on the network', 'glpiinventory'),
'url' => "",
'title' => true
],
[
'text' => __('Define IP Ranges of your network + related SNMP credentials', 'glpiinventory'),
'url' => $fi_path . "/front/iprange.php"
],
[
'text' => __('Define an agent allowed to discover the network', 'glpiinventory'),
'url' => $fi_path . "/front/config.form.php?forcetab=PluginGlpiinventoryAgentmodule$1"
],
[
'text' => __('Create a new Task with discovery module and the agent defined previously', 'glpiinventory'),
'url' => $fi_path . "/front/task.php"
],
[
'text' => __('If you have devices not typed, import them from unmanaged devices', 'glpiinventory'),
'url' => Unmanaged::getSearchURL()
],
[
'text' => __('`Network Inventory`, used to complete inventory the discovered devices', 'glpiinventory'),
'url' => "",
'title' => true
],
[
'text' => __('Define an agent allowed to inventory the network by SNMP', 'glpiinventory'),
'url' => $fi_path . "/front/config.form.php?forcetab=PluginGlpiinventoryAgentmodule$1"
],
[
'text' => __('Create a new Task with network inventory module and the agent defined previously', 'glpiinventory'),
'url' => $fi_path . "/front/task.php"
],
];
$i = 1;
foreach ($a_steps as $data) {
echo "<tr class='tab_bg_1'>";
if (
isset($data['title'])
&& $data['title']
) {
echo "<th colspan='2'>";
echo $data['text'];
echo "</th>";
} else {
echo "<th width='25'>";
echo $i . ".";
echo "</th>";
echo "<td>";
if ($data['url'] == '') {
echo $data['text'];
} else {
echo '<a href="' . $data['url'] . '" target="_blank">' . $data['text'] . '</a>';
}
echo "</td>";
$i++;
}
echo "</tr>";
}
echo "</table>";
}
/**
* Display chart
*
* @param string $name
* @param array $data list of data for the chart
* @param string $title
*/
public static function showChart($name, $data, $title = ' ')
{
echo "<div class='fi_chart donut'>";
echo "<h2 class='fi_chart_title'>$title</h2>";
echo '<svg id="' . $name . '"></svg>';
echo Html::scriptBlock("$(function() {
statHalfDonut('" . $name . "', '" . json_encode($data) . "');
});");
echo "</div>";
}
/**
* Display chart bar
*
* @param string $name
* @param array $data list of data for the chart
* @param string $title
* @param integer $width
*/
public static function showChartBar($name, $data, $title = '', $width = 370)
{
echo "<div class='fi_chart bar'>";
echo "<h2 class='fi_chart_title'>$title</h2>";
echo '<svg id="' . $name . '"></svg>';
echo Html::scriptBlock("$(function() {
statBar('" . $name . "', '" . json_encode($data) . "');
});");
echo "</div>";
}
public static function getIcon()
{
return "ti ti-settings";
}
}