%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /proc/3163975/root/home/infra/glpiinventory/inc/
Upload File :
Create Path :
Current File : //proc/3163975/root/home/infra/glpiinventory/inc/agentmodule.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 (enable or not) the modules in the agent.
 */
class PluginGlpiinventoryAgentmodule extends CommonDBTM
{
   /**
    * The right name for this class
    * Uses the same right as Agents in native GLPI Inventory
    *
    * @var string
    */
    public static $rightname = 'agent';


   /**
    * Get the tab name used for item
    *
    * @param CommonGLPI $item the item object
    * @param integer $withtemplate 1 if is a template form
    * @return string name of the tab
    */
    public function getTabNameForItem(CommonGLPI $item, $withtemplate = 0)
    {

        if ($item->getType() == 'PluginGlpiinventoryConfig') {
            return __('Agents modules', 'glpiinventory');
        } elseif ($item->getType() == 'Agent') {
            return __('Agents modules', '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(CommonGLPI $item, $tabnum = 1, $withtemplate = 0)
    {

        if ($item instanceof PluginGlpiinventoryConfig) {
            $pfAgentmodule = new self();
            $pfAgentmodule->showModuleForm();
            return true;
        } elseif ($item instanceof Agent) {
            $pfAgentmodule = new self();
            $pfAgentmodule->showFormAgentException($item->fields['id']);
            return true;
        }
        return false;
    }


   /**
    * Display form to configure modules in agents
    *
    * @return boolean true if no problem
    */
    public function showModuleForm()
    {

        $agent = new Agent();

        $a_modules = $this->find();
        foreach ($a_modules as $data) {
            echo "<form name='form_ic' method='post' action='" .
                 Toolbox::getItemTypeFormURL(__CLASS__) . "'>";
            echo "<table class='tab_cadre_fixe'>";
            echo "<tr>";
            echo "<th width='130'>" . __('Module', 'glpiinventory') . "</th>";
            echo "<th width='180'>" . __('Activation (by default)', 'glpiinventory') . "</th>";
            echo "<th>" . __('Exceptions', 'glpiinventory') . "</th>";
            echo "</tr>";

            echo "<tr class='tab_bg_1'>";
            $a_methods = PluginGlpiinventoryStaticmisc::getmethods();
            $modulename = $data["modulename"];

            foreach ($a_methods as $datamod) {
                if (
                    (strtolower($data["modulename"]) == strtolower($datamod['method'])) ||
                    isset($datamod['task']) &&
                    (strtolower($data["modulename"]) == strtolower($datamod['task']))
                ) {
                    if (isset($datamod['name'])) {
                        $modulename = $datamod['name'];
                    }
                    break;
                }
            }
           // Hack for snmpquery
            if ($data["modulename"] == 'SNMPQUERY') {
                $modulename = __('Network inventory (SNMP)', 'glpiinventory');
            }
           // Hack for deploy
            if ($data["modulename"] == 'DEPLOY') {
                $modulename = __('Package deployment', 'glpiinventory');
            }

            echo "<td align='center'><strong>" . $modulename . "</strong></td>";
            echo "<td align='center'>";
            $checked = $data['is_active'];

            Html::showCheckbox(['name'    => 'activation',
                                  'value'   => '1',
                                  'checked' => $checked]);
            echo "</td>";
            echo "<td>";
             echo "<table>";
             echo "<tr>";
             echo "<td width='45%'>";
             $a_agentList = importArrayFromDB($data['exceptions']);
             $a_used = [];
            foreach ($a_agentList as $agent_id) {
                 $a_used[] = $agent_id;
            }
            Dropdown::show("Agent", ["name" => "agent_to_add[]",
                                                               "used" => $a_used]);
             echo "</td>";
             echo "<td align='center'>";
             echo "<input type='submit' class='btn btn-secondary' name='agent_add' value='" .
               __s('Add') . " >>'>";
             echo "<br><br>";
             echo "<input type='submit' class='btn btn-secondary' name='agent_delete' value='<< " .
               __s('Delete') . "'>";
             echo "</td>";
             echo "<td width='45%'>";

             echo "<select class='form-select' size='6' name='agent_to_delete[]'>";
            foreach ($a_agentList as $agent_id) {
                 $agent->getFromDB($agent_id);
                 echo "<option value='" . $agent_id . "'>" . $agent->getName() . "</option>";
            }
            echo "</select>";
            echo "</td>";
            echo "</tr>";
            echo "</table>";
            echo "</td>";

            echo "<tr>";
            echo "<td class='tab_bg_2 center' colspan='3'>";
            echo "<input type='submit' name='update' value=\"" . __s('Update') . "\" class='btn btn-primary'>";
            echo "</td>";
            echo "</tr>";
            echo "</table>";
            echo Html::hidden('id', ['value' => $data['id']]);
            Html::closeForm();
            echo "<br/>";
        }
        return true;
    }


   /**
    * Display form to configure activation of modules in agent form (in tab)
    *
    * @global array $CFG_GLPI
    * @param integer $agents_id id of the agent
    */
    public function showFormAgentException($agents_id)
    {
        $agent = new Agent();
        $agent->getFromDB($agents_id);
        $canedit = $agent->can($agents_id, UPDATE);

        echo "<br/>";
        if ($canedit) {
            echo "<form name='form_ic' method='post' action='" . Plugin::getWebDir('glpiinventory') .
               "/front/agentmodule.form.php'>";
        }
        echo "<table class='tab_cadre_fixe'>";
        echo "<tr>";
        echo "<th>" . __('Module', 'glpiinventory') . "</th>";
        echo "<th>Activation</th>";
        echo "<th>" . __('Module', 'glpiinventory') . "</th>";
        echo "<th>Activation</th>";
        echo "</tr>";

        $a_modules = $this->find();
        $i = 0;
        $a_methods = PluginGlpiinventoryStaticmisc::getmethods();
        foreach ($a_modules as $data) {
            if ($i == 0) {
                echo "<tr class='tab_bg_1'>";
            }
            $modulename = $data["modulename"];
            foreach ($a_methods as $datamod) {
                if (
                    (strtolower($data["modulename"]) == strtolower($datamod['method'])) ||
                    isset($datamod['task']) &&
                    (strtolower($data["modulename"]) == strtolower($datamod['task']))
                ) {
                    if (isset($datamod['name'])) {
                        $modulename = $datamod['name'];
                    }
                    break;
                }
            }
           // Hack for snmpquery
            if ($data["modulename"] == 'SNMPQUERY') {
                $modulename = __('Network inventory (SNMP)', 'glpiinventory');
            }
           // Hack for deploy
            if ($data["modulename"] == 'DEPLOY') {
                $modulename = __('Package deployment', 'glpiinventory');
            }

            echo "<td width='50%'>" . $modulename . " :</td>";
            echo "<td align='center'>";

            $checked = $data['is_active'];
            $a_agentList = importArrayFromDB($data['exceptions']);
            if (in_array($agents_id, $a_agentList)) {
                if ($checked == 1) {
                    $checked = 0;
                } else {
                    $checked = 1;
                }
            }
            Html::showCheckbox(['name'    => "activation-" . $data["modulename"],
                                  'value'   => '1',
                                  'checked' => $checked]);
            echo "</td>";
            if ($i == 1) {
                echo "</tr>";
                $i = -1;
            }
            $i++;
        }
        if ($i == 1) {
            echo "<td></td>";
            echo "<td></td>";
            echo "</tr>";
        }
        if ($canedit) {
            echo "<tr>";
            echo "<td class='tab_bg_2 card-body mx-n2 mb-4  border-top' colspan='4'>";
            echo Html::hidden('id', ['value' => $agents_id]);
            echo "<input type='submit' name='updateexceptions' " .
                 "value=\"" . __('Update') . "\" class='btn btn-primary'>";
            echo "</td>";
            echo "</tr>";
            echo "</table>";
            Html::closeForm();
        } else {
            echo "</table>";
        }
    }


   /**
    * Get global activation status of a module
    *
    * @param string $module_name name of module
    * @return array information of module activation
    */
    public function getActivationExceptions($module_name)
    {
        $a_modules = $this->find(['modulename' => $module_name], [], 1);
        return current($a_modules);
    }


   /**
    * Get list of agents have this module activated
    *
    * @param string $module_name name of the module
    * @return array id list of agents
    */
    public function getAgentsCanDo($module_name)
    {

        $agent = new Agent();

        if ($module_name == 'SNMPINVENTORY') {
            $module_name = 'SNMPQUERY';
        }
        $agentModule = $this->getActivationExceptions($module_name);

        $where = [];
        if ($agentModule['is_active'] == 0) {
            $a_agentList = importArrayFromDB($agentModule['exceptions']);
            if (count($a_agentList) > 0) {
                $ips = [];
                $i = 0;
                foreach ($a_agentList as $agent_id) {
                    if ($i > 0) {
                        $ips[] = $agent_id;
                    }
                    $i++;
                }
                if (count($ips) > 0) {
                    $where = ['id' => $ips];
                }
                if (isset($_SESSION['glpiactiveentities_string'])) {
                    $where += getEntitiesRestrictCriteria($agent->getTable());
                }
            } else {
                return [];
            }
        } else {
            $a_agentList = importArrayFromDB($agentModule['exceptions']);
            if (count($a_agentList) > 0) {
                $ips = [];
                $i = 0;
                foreach ($a_agentList as $agent_id) {
                    if ($i > 0) {
                        $ips[] = $agent_id;
                    }
                    $i++;
                }
                if (count($ips) > 0) {
                    $where = ['id' => ['NOT' => $ips]];
                }
                if (isset($_SESSION['glpiactiveentities_string'])) {
                    $where += getEntitiesRestrictCriteria($agent->getTable());
                }
            }
        }
        $a_agents = $agent->find($where);
        return $a_agents;
    }


   /**
    * Get if agent has this module enabled
    *
    * @param string $module_name module name
    * @param integer $agents_id id of the agent
    * @return boolean true if enabled, otherwise false
    */
    public function isAgentCanDo($module_name, $agents_id)
    {

        $agentModule = $this->getActivationExceptions($module_name);

        if ($agentModule['is_active'] == 0) {
            $a_agentList = importArrayFromDB($agentModule['exceptions']);
            if (in_array($agents_id, $a_agentList)) {
                return true;
            } else {
                return false;
            }
        } else {
            $a_agentList = importArrayFromDB($agentModule['exceptions']);
            if (in_array($agents_id, $a_agentList)) {
                return false;
            } else {
                return true;
            }
        }
    }


   /**
    * Generate the server module URL to send to agent
    *
    * @param string $modulename name of the module
    * @param integer $entities_id id of the entity
    * @return string the URL generated
    */
    public static function getUrlForModule($modulename, $entities_id = -1)
    {
        $plugin_dir = '/' . Plugin::getWebDir('glpiinventory', false);

        $entity = new Entity();
        $base_url = $entity->getUsedConfig('agent_base_url', $entities_id, 'agent_base_url', '');

        //trim the ending / if needed
        $base_url = rtrim($base_url, '/');

        if (!empty($base_url)) {
            PluginGlpiinventoryToolbox::logIfExtradebug(
                "pluginGlpiinventory-agent-url",
                "Entity " . $entities_id . ", agent base URL: " . $base_url
            );
        } else {
            // ... else use global GLPI configuration parameter.
            global $CFG_GLPI;
            $base_url = $CFG_GLPI['url_base'];

            PluginGlpiinventoryToolbox::logIfExtradebug(
                "pluginGlpiinventory-agent-url",
                "Global configuration URL: " . $base_url
            );
        }

        // Add plugin_dir only if still not set in agent_base_url
        if (!preg_match('/(plugins|marketplace)/', $base_url)) {
            $base_url .= $plugin_dir;
        }

        // Construct the path to the JSON back from the agent_base_url.
        // agent_base_url is the initial URL used by the agent
        return $base_url . '/b/' . strtolower($modulename) . '/';
    }


   /**
    * Get list of all modules
    *
    * @return array list of name of modules
    */
    public static function getModules()
    {
        $a_modules = [];
        $a_data = getAllDataFromTable(PluginGlpiinventoryAgentmodule::getTable());
        foreach ($a_data as $data) {
            $a_modules[] = $data['modulename'];
        }
        return $a_modules;
    }
}

Zerion Mini Shell 1.0