1125 lines
42 KiB
PHP
1125 lines
42 KiB
PHP
<?php
|
|
|
|
/**
|
|
* FusionInventory
|
|
*
|
|
* Copyright (C) 2010-2016 by the FusionInventory Development Team.
|
|
*
|
|
* http://www.fusioninventory.org/
|
|
* https://github.com/fusioninventory/fusioninventory-for-glpi
|
|
* http://forge.fusioninventory.org/
|
|
*
|
|
* ------------------------------------------------------------------------
|
|
*
|
|
* LICENSE
|
|
*
|
|
* This file is part of FusionInventory project.
|
|
*
|
|
* FusionInventory 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.
|
|
*
|
|
* FusionInventory 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 FusionInventory. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
* ------------------------------------------------------------------------
|
|
*
|
|
* This file is used to manage and display extended information of
|
|
* network equipments.
|
|
*
|
|
* ------------------------------------------------------------------------
|
|
*
|
|
* @package FusionInventory
|
|
* @author Vincent Mazzoni
|
|
* @author David Durieux
|
|
* @copyright Copyright (c) 2010-2016 FusionInventory team
|
|
* @license AGPL License 3.0 or (at your option) any later version
|
|
* http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
|
* @link http://www.fusioninventory.org/
|
|
* @link https://github.com/fusioninventory/fusioninventory-for-glpi
|
|
*
|
|
*/
|
|
|
|
if (!defined('GLPI_ROOT')) {
|
|
die("Sorry. You can't access this file directly");
|
|
}
|
|
|
|
/**
|
|
* Manage and display extended information of network equipments.
|
|
*/
|
|
class PluginFusioninventoryNetworkEquipment extends PluginFusioninventoryItem {
|
|
|
|
/**
|
|
* The right name for this class
|
|
*
|
|
* @var string
|
|
*/
|
|
static $rightname = 'plugin_fusioninventory_networkequipment';
|
|
|
|
public $itemtype = 'NetworkEquipment';
|
|
|
|
/**
|
|
* Get the tab name used for item
|
|
*
|
|
* @param object $item the item object
|
|
* @param integer $withtemplate 1 if is a template form
|
|
* @return string name of the tab
|
|
*/
|
|
function getTabNameForItem(CommonGLPI $item, $withtemplate = 0) {
|
|
if ($this->canView()) {
|
|
return self::createTabEntry(__('FusionInventory SNMP', 'fusioninventory'));
|
|
}
|
|
return '';
|
|
}
|
|
|
|
|
|
/**
|
|
* Display the content of the tab
|
|
*
|
|
* @param object $item
|
|
* @param integer $tabnum number of the tab to display
|
|
* @param integer $withtemplate 1 if is a template form
|
|
* @return boolean
|
|
*/
|
|
static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0) {
|
|
|
|
if ($item->fields['id'] > 0) {
|
|
$pfNetworkEquipment = new self();
|
|
$options = [
|
|
'target' => Plugin::getWebDir('fusioninventory').'/front/switch_info.form.php'
|
|
];
|
|
|
|
switch (Session::getActiveTab('NetworkEquipment')) {
|
|
case 'PluginFusioninventoryNetworkEquipment$1':
|
|
$pfNetworkEquipment->showForm($item, $options);
|
|
break;
|
|
|
|
case 'NetworkPort$1':
|
|
$pfNetworkEquipment->showExtendedInfos($item, $options);
|
|
break;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
/**
|
|
* Get the type of the itemtype
|
|
*
|
|
* @return string
|
|
*/
|
|
static function getType() {
|
|
return "NetworkEquipment";
|
|
}
|
|
|
|
|
|
/**
|
|
* Display form
|
|
*
|
|
* @global object $DB
|
|
* @global array $CFG_GLPI
|
|
* @param object $item
|
|
* @param array $options
|
|
*/
|
|
function showExtendedInfos(CommonDBTM $item, $options = []) {
|
|
global $DB, $CFG_GLPI;
|
|
|
|
if (!Session::haveRight('plugin_fusioninventory_networkequipment', READ)) {
|
|
NetworkPort::showForItem($item);
|
|
return;
|
|
}
|
|
$canedit = false;
|
|
if (Session::haveRight('plugin_fusioninventory_networkequipment', UPDATE)) {
|
|
$canedit = true;
|
|
}
|
|
|
|
$id = $item->getID();
|
|
if (!$data = $this->find(['networkequipments_id' => $id], [], 1)) {
|
|
// Add in database if not exist
|
|
$input = [];
|
|
$input['networkequipments_id'] = $id;
|
|
$_SESSION['glpi_plugins_fusinvsnmp_table'] = 'glpi_networkequipments';
|
|
$ID_tn = $this->add($input);
|
|
$this->getFromDB($ID_tn);
|
|
} else {
|
|
foreach ($data as $datas) {
|
|
$this->fields = $datas;
|
|
}
|
|
}
|
|
|
|
if (!isset($_SESSION['plugin_fusioninventory_networkportview'])) {
|
|
$_SESSION['plugin_fusioninventory_networkportview'] = 'fusioninventory';
|
|
}
|
|
|
|
// Display glpi network port view if no fusionnetworkport
|
|
$query = "SELECT glpi_plugin_fusioninventory_networkports.id
|
|
FROM glpi_plugin_fusioninventory_networkports
|
|
LEFT JOIN glpi_networkports
|
|
ON glpi_plugin_fusioninventory_networkports.networkports_id = glpi_networkports.id
|
|
WHERE glpi_networkports.items_id='".$id."'
|
|
AND glpi_networkports.itemtype='NetworkEquipment'";
|
|
$result = $DB->query($query);
|
|
if ($DB->numrows($result) == 0) {
|
|
NetworkPort::showForItem($item);
|
|
return;
|
|
}
|
|
|
|
echo "<form action='".Plugin::getWebDir('fusioninventory')."/front/networkport.display.php' method='post'>";
|
|
echo __('Display the view', 'fusioninventory');
|
|
echo ' <i>'.$_SESSION['plugin_fusioninventory_networkportview']."</i>. ";
|
|
echo __('If you prefer, you can display the view', 'fusioninventory');
|
|
echo ' ';
|
|
if ($_SESSION['plugin_fusioninventory_networkportview'] == 'fusioninventory') {
|
|
echo '<input type="submit" class="submit" name="selectview" value="glpi" />';
|
|
} else {
|
|
echo '<input type="submit" class="submit" name="selectview" value="fusioninventory" />';
|
|
}
|
|
Html::closeForm();
|
|
|
|
if ($_SESSION['plugin_fusioninventory_networkportview'] == 'glpi') {
|
|
NetworkPort::showForItem($item);
|
|
return;
|
|
}
|
|
|
|
$canedit = $item->can($item->getID(), UPDATE);
|
|
if ($canedit) {
|
|
$networkPort = new NetworkPort();
|
|
echo "\n<form method='get' action='" . $networkPort->getFormURL() ."'>\n";
|
|
echo "<input type='hidden' name='items_id' value='".$item->getID()."'>\n";
|
|
echo "<input type='hidden' name='itemtype' value='".$item->getType()."'>\n";
|
|
echo "<div class='firstbloc'><table class='tab_cadre_fixe'>\n";
|
|
echo "<tr class='tab_bg_2'><td class='center'>\n";
|
|
echo __('Network port type to be added');
|
|
echo " ";
|
|
Dropdown::showFromArray('instantiation_type',
|
|
NetworkPort::getNetworkPortInstantiationsWithNames(),
|
|
['value' => 'NetworkPortEthernet']);
|
|
echo "</td>\n";
|
|
echo "<td class='tab_bg_2 center' width='50%'>";
|
|
echo __('Add several ports');
|
|
echo " <input type='checkbox' name='several' value='1'></td>\n";
|
|
echo "<td>\n";
|
|
echo "<input type='submit' name='create' value=\""._sx('button', 'Add')."\" ".
|
|
"class='submit'>\n";
|
|
echo "</td></tr></table></div>\n";
|
|
Html::closeForm();
|
|
}
|
|
|
|
$monitoring = 0;
|
|
if (class_exists("PluginMonitoringNetworkport")) {
|
|
$monitoring = 1;
|
|
}
|
|
|
|
// * Get all ports compose tha aggregat
|
|
$a_aggregated_ports = [];
|
|
$query = "SELECT *, glpi_plugin_fusioninventory_networkports.mac as ifmacinternal
|
|
FROM glpi_plugin_fusioninventory_networkports
|
|
LEFT JOIN glpi_networkports
|
|
ON glpi_plugin_fusioninventory_networkports.networkports_id = glpi_networkports.id
|
|
WHERE glpi_networkports.items_id='".$id."'
|
|
AND glpi_networkports.itemtype='NetworkEquipment'
|
|
AND `instantiation_type`='NetworkPortAggregate'
|
|
ORDER BY logical_number ";
|
|
$result = $DB->query($query);
|
|
while ($data = $DB->fetchArray($result)) {
|
|
$query_ag = "SELECT * FROM `glpi_networkportaggregates`
|
|
WHERE `networkports_id`='".$data['id']."'
|
|
LIMIT 1";
|
|
$result_ag = $DB->query($query_ag);
|
|
if ($DB->numrows($result_ag) > 0) {
|
|
$data_ag = $DB->fetchAssoc($result_ag);
|
|
$a_ports = importArrayFromDB($data_ag['networkports_id_list']);
|
|
foreach ($a_ports as $port_id) {
|
|
$a_aggregated_ports[$port_id] = $port_id;
|
|
}
|
|
}
|
|
}
|
|
|
|
$where = '';
|
|
if (count($a_aggregated_ports) > 0) {
|
|
$where = "AND `glpi_networkports`.`id` NOT IN ".
|
|
"('".implode("', '", $a_aggregated_ports)."')";
|
|
}
|
|
|
|
$query = "SELECT `glpi_networkports`.`id`, `instantiation_type`,
|
|
`ifdescr`,
|
|
`glpi_plugin_fusioninventory_networkports`.`id` as `fusionid`
|
|
FROM glpi_plugin_fusioninventory_networkports
|
|
|
|
LEFT JOIN glpi_networkports
|
|
ON glpi_plugin_fusioninventory_networkports.networkports_id = glpi_networkports.id
|
|
WHERE glpi_networkports.items_id='".$id."'
|
|
AND `glpi_networkports`.`itemtype`='NetworkEquipment'
|
|
".$where."
|
|
AND NOT (glpi_networkports.name='general'
|
|
AND glpi_networkports.logical_number=0) ";
|
|
|
|
$nbcol = 5;
|
|
if ($monitoring == '1') {
|
|
if (Session::haveRight("plugin_monitoring_componentscatalog", READ)) {
|
|
echo "<form name='form' method='post' action='".$CFG_GLPI['root_doc'].
|
|
"/plugins/monitoring/front/networkport.form.php'>";
|
|
echo "<input type='hidden' name='items_id' value='".$id."' />";
|
|
echo "<input type='hidden' name='itemtype' value='NetworkEquipment' />";
|
|
}
|
|
$nbcol++;
|
|
}
|
|
|
|
$a_pref = DisplayPreference::getForTypeUser('PluginFusioninventoryNetworkport',
|
|
Session::getLoginUserID());
|
|
|
|
echo "<table class='tab_cadre' cellpadding='".$nbcol."' width='1100'>";
|
|
|
|
$result = $this->showNetworkPortDetailHeader($monitoring, $query);
|
|
|
|
if ($result) {
|
|
$aDescr = []; $aResult = [];
|
|
while ($data = $DB->fetchArray($result)) {
|
|
$aDescr[] = $data['ifdescr'];
|
|
$aResult[] = $data;
|
|
}
|
|
array_multisort($aDescr, SORT_ASC, SORT_NATURAL, $aResult);
|
|
|
|
foreach ($aResult as $data) {
|
|
$this->showNetworkPortDetail($data, $monitoring);
|
|
|
|
if ($data['instantiation_type'] == 'NetworkPortAggregate') {
|
|
$query_ag = "SELECT * FROM `glpi_networkportaggregates`
|
|
WHERE `networkports_id`='".$data['id']."'
|
|
LIMIT 1";
|
|
$result_ag = $DB->query($query_ag);
|
|
if ($DB->numrows($result_ag) > 0) {
|
|
$data_ag = $DB->fetchAssoc($result_ag);
|
|
$a_ports = importArrayFromDB($data_ag['networkports_id_list']);
|
|
foreach ($a_ports as $port_id) {
|
|
$query_agp = "
|
|
SELECT `glpi_networkports`.`id`, `instantiation_type`,
|
|
`glpi_plugin_fusioninventory_networkports`.`id` as `fusionid`
|
|
|
|
FROM glpi_plugin_fusioninventory_networkports
|
|
|
|
LEFT JOIN glpi_networkports
|
|
ON glpi_plugin_fusioninventory_networkports.networkports_id =
|
|
glpi_networkports.id
|
|
WHERE `glpi_networkports`.`id`='".$port_id."'
|
|
LIMIT 1 ";
|
|
$result_agp = $DB->query($query_agp);
|
|
if ($DB->numrows($result_agp) > 0) {
|
|
$data_agp = $DB->fetchAssoc($result_agp);
|
|
$this->showNetworkPortDetail($data_agp, $monitoring, true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ($monitoring == '1') {
|
|
if (Session::haveRight("plugin_monitoring_componentscatalog", UPDATE)) {
|
|
echo "<tr class='tab_bg_1 center'>";
|
|
echo "<td colspan='2'></td>";
|
|
echo "<td class='center'>";
|
|
echo "<input type='submit' class='submit' name='update' value='".__s('Save')."'/>";
|
|
echo "</td>";
|
|
echo "<td colspan='".(count($a_pref))."'></td>";
|
|
echo "</tr>";
|
|
}
|
|
}
|
|
echo "</table>";
|
|
if ($monitoring == '1') {
|
|
if (Session::haveRight("plugin_monitoring_componentscatalog", UPDATE)) {
|
|
Html::closeForm();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Convert size of octets
|
|
*
|
|
* @param number $bytes
|
|
* @param number $sizeoct
|
|
*
|
|
* @return better size format
|
|
*/
|
|
private function byteSize($bytes, $sizeoct = 1024) {
|
|
$size = $bytes / $sizeoct;
|
|
if ($size < $sizeoct) {
|
|
$size = number_format($size, 0);
|
|
$size .= ' K';
|
|
} else {
|
|
if ($size / $sizeoct < $sizeoct) {
|
|
$size = number_format($size / $sizeoct, 0);
|
|
$size .= ' M';
|
|
} else if ($size / $sizeoct / $sizeoct < $sizeoct) {
|
|
$size = number_format($size / $sizeoct / $sizeoct, 0);
|
|
$size .= ' G';
|
|
} else if ($size / $sizeoct / $sizeoct / $sizeoct < $sizeoct) {
|
|
$size = number_format($size / $sizeoct / $sizeoct / $sizeoct, 0);
|
|
$size .= ' T';
|
|
}
|
|
}
|
|
return $size;
|
|
}
|
|
|
|
|
|
/**
|
|
* Display connections with hub
|
|
*
|
|
* @param integer $items_id
|
|
* @param string $background_img
|
|
*/
|
|
function displayHubConnections($items_id, $background_img) {
|
|
|
|
$NetworkPort = new NetworkPort();
|
|
|
|
$a_ports = $NetworkPort->find(
|
|
['itemtype' => 'PluginFusioninventoryUnmanaged',
|
|
'items_id' => $items_id]);
|
|
echo "<table width='100%' class='tab_cadre' cellpadding='5'>";
|
|
foreach ($a_ports as $a_port) {
|
|
if ($a_port['name'] != "Link") {
|
|
$id = $NetworkPort->getContact($a_port['id']);
|
|
if ($id) {
|
|
$NetworkPort->getFromDB($id);
|
|
$link = '';
|
|
$link1 = '';
|
|
$link2 = '';
|
|
if ($NetworkPort->fields['itemtype'] == 'PluginFusioninventoryUnmanaged') {
|
|
$classname = $NetworkPort->fields['itemtype'];
|
|
$item = new $classname;
|
|
$item->getFromDB($NetworkPort->fields['items_id']);
|
|
$link1 = $item->getLink(1);
|
|
$link = str_replace($item->getName(0), $NetworkPort->fields["mac"],
|
|
$item->getLink());
|
|
// Get ips
|
|
$a_ips = PluginFusioninventoryToolbox::getIPforDevice(
|
|
'PluginFusioninventoryUnmanaged',
|
|
$item->getID()
|
|
);
|
|
$link2 = str_replace($item->getName(0), implode(", ", $a_ips),
|
|
$item->getLink());
|
|
$icon = $this->getItemtypeIcon($item->fields["item_type"]);
|
|
if ($item->fields['accepted'] == 1) {
|
|
echo "<tr>";
|
|
echo "<td align='center' style='background:#bfec75'
|
|
class='tab_bg_1_2'>".$icon.$item->getLink(1);
|
|
|
|
} else {
|
|
echo "<tr>";
|
|
echo "<td align='center' style='background:#cf9b9b'
|
|
class='tab_bg_1_2'>".$icon.$item->getLink(1);
|
|
}
|
|
if (!empty($link)) {
|
|
echo "<br/>".$link;
|
|
}
|
|
if (!empty($link2)) {
|
|
echo "<br/>".$link2;
|
|
}
|
|
echo "</td>";
|
|
echo "</tr>";
|
|
} else {
|
|
$classname = $NetworkPort->fields['itemtype'];
|
|
$item = new $classname;
|
|
$item->getFromDB($NetworkPort->fields['items_id']);
|
|
$link1 = $item->getLink(1);
|
|
$link = str_replace($item->getName(0), $NetworkPort->fields["mac"],
|
|
$item->getLink());
|
|
echo "<tr>";
|
|
$icon = $this->getItemtypeIcon($classname);
|
|
echo "<td align='center' ".$background_img."
|
|
class='tab_bg_1_2'>".$icon.$item->getLink(1);
|
|
if (!empty($link)) {
|
|
echo "<br/>".$link;
|
|
}
|
|
if (!empty($link2)) {
|
|
echo "<br/>".$link2;
|
|
}
|
|
echo "</td>";
|
|
echo "</tr>";
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
echo "</table>";
|
|
}
|
|
|
|
|
|
/**
|
|
* Update the network equipement extended information
|
|
*
|
|
* @global object $DB
|
|
* @param integer $id
|
|
* @param integer $configsecurities_id
|
|
* @param string $sysdescr
|
|
*/
|
|
function updateNetworkInfo($id, $configsecurities_id, $sysdescr) {
|
|
global $DB;
|
|
|
|
$query = "SELECT *
|
|
FROM `glpi_plugin_fusioninventory_networkequipments`
|
|
WHERE `networkequipments_id`='".$id."';";
|
|
$result = $DB->query($query);
|
|
if ($DB->numrows($result) == "0") {
|
|
$DB->insert(
|
|
'glpi_plugin_fusioninventory_networkequipments', [
|
|
'networkequipments_id' => $id
|
|
]
|
|
);
|
|
}
|
|
if (empty($configsecurities_id)) {
|
|
$configsecurities_id = 0;
|
|
}
|
|
$DB->update(
|
|
'glpi_plugin_fusioninventory_networkequipments', [
|
|
'plugin_fusioninventory_configsecurities_id' => $configsecurities_id,
|
|
'sysdescr' => $sysdescr
|
|
], [
|
|
'networkequipments_id' => $id
|
|
]
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Display informations about networkequipment (automatic inventory)
|
|
*
|
|
* @param object $item NetworkEquipment instance
|
|
*/
|
|
static function showInfo($item) {
|
|
|
|
// Manage locks pictures
|
|
PluginFusioninventoryLock::showLockIcon('NetworkEquipment');
|
|
|
|
$pfNetworkEquipment = new PluginFusioninventoryNetworkEquipment();
|
|
|
|
$params = ['networkequipments_id' => $item->getID()];
|
|
if ($pfNetworkEquipment->getFromDBByCrit($params) === false) {
|
|
return;
|
|
}
|
|
|
|
echo '<table class="tab_glpi" width="100%">';
|
|
echo '<tr>';
|
|
echo '<th colspan="2">'.__('FusionInventory', 'fusioninventory').'</th>';
|
|
echo '</tr>';
|
|
|
|
echo '<tr class="tab_bg_1">';
|
|
echo '<td>';
|
|
echo __('Last inventory', 'fusioninventory');
|
|
echo '</td>';
|
|
echo '<td>';
|
|
echo Html::convDateTime($pfNetworkEquipment->fields['last_fusioninventory_update']);
|
|
echo '</td>';
|
|
echo '</tr>';
|
|
|
|
if ($pfNetworkEquipment->fields['uptime'] != '') {
|
|
echo '<tr class="tab_bg_1">';
|
|
echo '<td>'.__('Uptime', 'fusioninventory').'</td>';
|
|
echo '<td>';
|
|
echo $pfNetworkEquipment->displayUptimeAsString($pfNetworkEquipment->fields['uptime']);
|
|
echo '</td>';
|
|
echo '</tr>';
|
|
}
|
|
|
|
echo '</table>';
|
|
}
|
|
|
|
|
|
/**
|
|
* Display network port detail header
|
|
*
|
|
* @global object $DB
|
|
* @global array $CFG_GLPI
|
|
* @param string $monitoring
|
|
* @param string $query
|
|
* @return object
|
|
*/
|
|
function showNetworkPortDetailHeader($monitoring, $query) {
|
|
global $DB, $CFG_GLPI;
|
|
|
|
$fi_path = Plugin::getWebDir('fusioninventory');
|
|
|
|
$a_pref = DisplayPreference::getForTypeUser('PluginFusioninventoryNetworkport',
|
|
Session::getLoginUserID());
|
|
|
|
echo "<tr class='tab_bg_1'>";
|
|
|
|
echo "<th colspan='".(count($a_pref) + 3)."'>";
|
|
echo __('Ports array', 'fusioninventory');
|
|
|
|
$result = $DB->query($query);
|
|
echo ' ('.$DB->numrows($result).')';
|
|
|
|
$tmp = " class='pointer' onClick=\"";
|
|
$tmp .= Html::jsGetElementbyID('search_config_top').
|
|
".dialog('open');\">";
|
|
$tmp .= Ajax::createIframeModalWindow('search_config_top',
|
|
$CFG_GLPI["root_doc"].
|
|
"/front/displaypreference.form.php?itemtype=PluginFusioninventoryNetworkPort",
|
|
['title'
|
|
=> __('Select default items to show'),
|
|
'reloadonclose'
|
|
=> true,
|
|
'display'
|
|
=> false]);
|
|
|
|
echo " <img alt=\"".__s('Select default items to show')."\" title=\"".
|
|
__s('Select default items to show')."\" src='".
|
|
$CFG_GLPI["root_doc"]."/pics/options_search.png' ";
|
|
echo $tmp;
|
|
|
|
$url_legend = "https://forge.indepnet.net/wiki/fusioninventory/".
|
|
"En_VI_visualisationsdonnees_2_reseau";
|
|
if ($_SESSION["glpilanguage"] == "fr_FR") {
|
|
$url_legend = "https://forge.indepnet.net/wiki/fusioninventory/".
|
|
"Fr_VI_visualisationsdonnees_2_reseau";
|
|
}
|
|
echo "<a href='legend'></a>";
|
|
echo "<div id='legendlink'><a onClick='Ext.get(\"legend\").toggle();'>".
|
|
"[ ".__('Legend', 'fusioninventory')." ]</a></div>";
|
|
echo "</th>";
|
|
echo "</tr>";
|
|
|
|
// Display legend
|
|
echo "
|
|
<tr class='tab_bg_1' style='display: none;' id='legend'>
|
|
<td colspan='".(count($a_pref) + 4)."'>
|
|
<ul>
|
|
<li>".
|
|
__('Connection with a switch or a server in trunk or tagged mode', 'fusioninventory').
|
|
" :</li>
|
|
</ul>
|
|
<img src='".$fi_path."/pics/port_trunk.png' ".
|
|
"width='750' />
|
|
<ul>
|
|
<li>".__('Other connections (with a computer, a printer...)', 'fusioninventory').
|
|
" :</li>
|
|
</ul>
|
|
<img src='".$fi_path."/pics/connected_trunk.png' ".
|
|
"width='750' />
|
|
</td>
|
|
</tr>";
|
|
echo "<script>Ext.get('legend').setVisibilityMode(Ext.Element.DISPLAY);</script>";
|
|
|
|
echo "<tr class='tab_bg_1'>";
|
|
|
|
echo "<th colspan='2'>".__('Name')."</th>";
|
|
|
|
if ($monitoring == '1') {
|
|
echo "<th>".__('Monitoring', 'fusioninventory')."</th>";
|
|
}
|
|
|
|
foreach ($a_pref as $data_array) {
|
|
|
|
echo "<th>";
|
|
switch ($data_array) {
|
|
case 3:
|
|
echo __('MTU', 'fusioninventory');
|
|
break;
|
|
|
|
case 5:
|
|
echo __('Speed');
|
|
break;
|
|
|
|
case 6:
|
|
echo __('Internal status', 'fusioninventory');
|
|
break;
|
|
|
|
case 7:
|
|
echo __('Last Change', 'fusioninventory');
|
|
break;
|
|
|
|
case 8:
|
|
echo __('Traffic received/sent', 'fusioninventory');
|
|
break;
|
|
|
|
case 9:
|
|
echo __('Errors received/sent', 'fusioninventory');
|
|
break;
|
|
|
|
case 10 :
|
|
echo __('Duplex', 'fusioninventory');
|
|
break;
|
|
|
|
case 11 :
|
|
echo __('Internal MAC address', 'fusioninventory');
|
|
break;
|
|
|
|
case 12:
|
|
echo __('VLAN');
|
|
break;
|
|
|
|
case 13:
|
|
echo __('Connected to');
|
|
break;
|
|
|
|
case 14:
|
|
echo __('Connection');
|
|
break;
|
|
|
|
case 15:
|
|
echo __('Port not connected since', 'fusioninventory');
|
|
break;
|
|
|
|
case 16:
|
|
echo __('Alias', 'fusioninventory');
|
|
break;
|
|
|
|
case 17:
|
|
echo _n('Network outlet', 'Network outlets', 1);
|
|
break;
|
|
|
|
}
|
|
echo "</th>";
|
|
}
|
|
echo "</tr>";
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* Display detail networkport based on glpi core networkport and fusioninventory
|
|
* networkport
|
|
*
|
|
* @param array $data with id ant fusionid
|
|
* @param boolean $monitoring true if monitoring installed && actived
|
|
* @param boolean $aggrega true if this port is aggregate port
|
|
*
|
|
* @return nothing
|
|
*/
|
|
function showNetworkPortDetail($data, $monitoring, $aggrega = 0) {
|
|
global $CFG_GLPI, $DB;
|
|
|
|
$fi_path = Plugin::getWebDir('fusioninventory');
|
|
|
|
$nw = new NetworkPort_NetworkPort();
|
|
$networkName = new NetworkName();
|
|
$networkPort = new NetworkPort();
|
|
$pfNetworkPort = new PluginFusioninventoryNetworkPort();
|
|
$networkPortEthernet = new NetworkPortEthernet();
|
|
$iPAddress = new IPAddress();
|
|
|
|
$networkPort->getFromDB($data['id']);
|
|
$pfNetworkPort->getFromDB($data['fusionid']);
|
|
|
|
$background_img = "";
|
|
if (($pfNetworkPort->fields["trunk"] == "1")
|
|
&& (strstr($pfNetworkPort->fields["ifstatus"], "up")
|
|
|| $pfNetworkPort->fields["ifstatus"] == 1)) {
|
|
$background_img = " style='background-image: url(\"".$fi_path."/pics/port_trunk.png\"); '";
|
|
} else if (PluginFusioninventoryNetworkPort::isPortHasMultipleMac($data['id'])
|
|
&& (strstr($pfNetworkPort->fields["ifstatus"], "up")
|
|
|| $pfNetworkPort->fields["ifstatus"] == 1)) {
|
|
$background_img = " style='background-image: url(\"".$fi_path."/pics/multiple_mac_addresses.png\"); '";
|
|
} else if (strstr($pfNetworkPort->fields["ifstatus"], "up")
|
|
|| $pfNetworkPort->fields["ifstatus"] == 1) {
|
|
$background_img = " style='background-image: url(\"".$fi_path."/pics/connected_trunk.png\"); '";
|
|
}
|
|
echo "<tr class='tab_bg_1 center' height='40'".$background_img.">";
|
|
|
|
if ($aggrega) {
|
|
echo "<td style='background-color: #f2f2f2;'></td><td>";
|
|
}
|
|
if (!$aggrega) {
|
|
if ($networkPort->fields['instantiation_type'] == 'NetworkPortAggregate') {
|
|
echo "<td>";
|
|
} else {
|
|
echo "<td colspan='2'>";
|
|
}
|
|
}
|
|
echo "<a href='networkport.form.php?id=".$networkPort->fields["id"]."'>".
|
|
$networkPort->fields["name"]."</a>";
|
|
Html::showToolTip($pfNetworkPort->fields['ifdescr']);
|
|
if (!$aggrega) {
|
|
if ($networkPort->fields['instantiation_type'] == 'NetworkPortAggregate') {
|
|
echo "<td><i><font style='color: grey'>".__('Aggregation port')."</font></i></td>";
|
|
}
|
|
}
|
|
|
|
if ($monitoring == '1') {
|
|
echo "<td>";
|
|
$state = PluginMonitoringNetworkport::isMonitoredNetworkport($data['id']);
|
|
if (Session::haveRight("plugin_monitoring_componentscatalog", UPDATE)) {
|
|
Html::showCheckbox(['name' => 'networkports_id[]',
|
|
'value' => $data['id'],
|
|
'checked' => $state]);
|
|
} else if (Session::haveRight("plugin_monitoring_componentscatalog", READ)) {
|
|
echo Dropdown::getYesNo($state);
|
|
}
|
|
echo "</td>";
|
|
}
|
|
|
|
$a_pref = DisplayPreference::getForTypeUser('PluginFusioninventoryNetworkport',
|
|
Session::getLoginUserID());
|
|
foreach ($a_pref as $data_array) {
|
|
|
|
switch ($data_array) {
|
|
case 3:
|
|
echo "<td>".$pfNetworkPort->fields["ifmtu"]."</td>";
|
|
break;
|
|
|
|
case 5:
|
|
echo "<td>".$this->byteSize($pfNetworkPort->fields["ifspeed"], 1000)."bps</td>";
|
|
break;
|
|
|
|
case 6:
|
|
echo "<td>";
|
|
if (strstr($pfNetworkPort->fields["ifstatus"], "up")
|
|
|| strstr($pfNetworkPort->fields["ifinternalstatus"], "1")) {
|
|
echo "<img src='".$CFG_GLPI['root_doc']."/pics/greenbutton.png'/>";
|
|
} else if (strstr($pfNetworkPort->fields["ifstatus"], "down")
|
|
|| strstr($pfNetworkPort->fields["ifinternalstatus"], "2")) {
|
|
echo "<img src='".$CFG_GLPI['root_doc']."/pics/redbutton.png'/>";
|
|
} else if (strstr($pfNetworkPort->fields["ifstatus"], "testing")
|
|
|| strstr($pfNetworkPort->fields["ifinternalstatus"], "3")) {
|
|
echo "<img src='".$fi_path."/pics/yellowbutton.png'/>";
|
|
}
|
|
echo "</td>";
|
|
break;
|
|
|
|
case 7:
|
|
echo "<td>".$pfNetworkPort->fields["iflastchange"]."</td>";
|
|
break;
|
|
|
|
case 8:
|
|
echo "<td>";
|
|
if ($pfNetworkPort->fields["ifinoctets"] == "0") {
|
|
echo "-";
|
|
} else {
|
|
echo $this->byteSize($pfNetworkPort->fields["ifinoctets"], 1000)."o";
|
|
}
|
|
echo " / ";
|
|
if ($pfNetworkPort->fields["ifinoctets"] == "0") {
|
|
echo "-";
|
|
} else {
|
|
echo $this->byteSize($pfNetworkPort->fields["ifoutoctets"], 1000)."o";
|
|
}
|
|
|
|
echo "</td>";
|
|
break;
|
|
|
|
case 9:
|
|
$color = '';
|
|
if ($pfNetworkPort->fields["ifinerrors"] != "0"
|
|
|| $pfNetworkPort->fields["ifouterrors"] != "0") {
|
|
$color = "background='#cf9b9b' class='tab_bg_1_2'";
|
|
}
|
|
if ($pfNetworkPort->fields["ifinerrors"] == "0") {
|
|
echo "<td ".$color.">-";
|
|
} else {
|
|
echo "<td ".$color.">";
|
|
echo $pfNetworkPort->fields["ifinerrors"];
|
|
}
|
|
echo " / ";
|
|
if ($pfNetworkPort->fields["ifouterrors"] == "0") {
|
|
echo "-";
|
|
} else {
|
|
echo $pfNetworkPort->fields["ifouterrors"];
|
|
}
|
|
echo "</td>";
|
|
break;
|
|
|
|
case 10:
|
|
if ($pfNetworkPort->fields["portduplex"] == 2) {
|
|
echo "<td class='tab_bg_1_2' style='background-color:#cf9b9b'>";
|
|
echo __('Half', 'fusioninventory');
|
|
echo '</td>';
|
|
} else if ($pfNetworkPort->fields["portduplex"] == 3) {
|
|
echo '<td>';
|
|
echo __('Full', 'fusioninventory');
|
|
echo '</td>';
|
|
} else {
|
|
echo "<td></td>";
|
|
}
|
|
break;
|
|
|
|
case 11:
|
|
// ** internal mac
|
|
echo "<td>".$networkPort->fields["mac"]."</td>";
|
|
break;
|
|
|
|
case 13:
|
|
// ** Mac address and link to device which are connected to this port
|
|
$opposite_port = $nw->getOppositeContact($data["id"]);
|
|
if ($opposite_port != ""
|
|
&& $opposite_port != 0) {
|
|
$networkPortOpposite = new NetworkPort();
|
|
if ($networkPortOpposite->getFromDB($opposite_port)) {
|
|
$data_device = $networkPortOpposite->fields;
|
|
$item = new $data_device["itemtype"];
|
|
$item->getFromDB($data_device["items_id"]);
|
|
$link1 = $item->getLink(1);
|
|
$link = str_replace($item->getName(0), $data_device["mac"],
|
|
$item->getLink());
|
|
$link2 = '';
|
|
// * GetIP
|
|
$a_networknames = current($networkName->find(
|
|
['itemtype' => 'NetworkPort',
|
|
'items_id' => $opposite_port],
|
|
[], 1));
|
|
if (isset($a_networknames['id'])) {
|
|
$a_ipaddresses = current($iPAddress->find(
|
|
['itemtype' => 'NetworkName',
|
|
'items_id' => $a_networknames['id']],
|
|
[], 1));
|
|
$link2 = str_replace($item->getName(0), $a_ipaddresses['name'],
|
|
$item->getLink());
|
|
}
|
|
|
|
if ($data_device["itemtype"] == 'PluginFusioninventoryUnmanaged') {
|
|
$icon = $this->getItemtypeIcon($item->fields["item_type"]);
|
|
if ($item->getField("accepted") == "1") {
|
|
echo "<td style='background:#bfec75'
|
|
class='tab_bg_1_2'>".$icon.$link1;
|
|
} else {
|
|
echo "<td class='tab_bg_1_2' style='background-color:#cf9b9b'>".$icon.$link1;
|
|
}
|
|
if (!empty($link)) {
|
|
echo "<br/>".$link;
|
|
}
|
|
if (!empty($link2)) {
|
|
echo "<br/>".$link2;
|
|
}
|
|
if ($item->getField("hub") == "1") {
|
|
$this->displayHubConnections($data_device["items_id"], $background_img);
|
|
}
|
|
echo "</td>";
|
|
} else {
|
|
$icon = $this->getItemtypeIcon($data_device["itemtype"]);
|
|
|
|
echo "<td>".$icon.$link1;
|
|
if (!empty($link)) {
|
|
echo "<br/>".$link;
|
|
}
|
|
if (!empty($link2)) {
|
|
echo "<br/>".$link2;
|
|
}
|
|
if ($data_device["itemtype"] == 'Phone') {
|
|
$query_devicephone = "SELECT *
|
|
FROM `glpi_networkports`
|
|
WHERE `itemtype`='Phone'
|
|
AND `items_id`='".$data_device["items_id"]."'
|
|
AND `id`!='".$data_device["id"]."'
|
|
LIMIT 1";
|
|
$result_devicephone = $DB->query($query_devicephone);
|
|
if ($DB->numrows($result_devicephone) > 0) {
|
|
$data_devicephone = $DB->fetchAssoc($result_devicephone);
|
|
$computer_ports_id = $nw->getOppositeContact($data_devicephone["id"]);
|
|
if ($computer_ports_id) {
|
|
$networkport = new NetworkPort();
|
|
$networkport->getFromDB($computer_ports_id);
|
|
if ($networkport->fields['itemtype'] == 'Computer') {
|
|
echo "<hr/>";
|
|
echo "<img src='".$fi_path."/pics/computer_icon.png' ".
|
|
"style='float:left'/> ";
|
|
$computer = new Computer();
|
|
$computer->getFromDB($networkport->fields["items_id"]);
|
|
$link1 = $computer->getLink(1);
|
|
$link = str_replace($computer->getName(0),
|
|
$networkport->fields["mac"],
|
|
$computer->getLink());
|
|
$link2 = str_replace($computer->getName(0),
|
|
$networkport->fields["ip"],
|
|
$computer->getLink());
|
|
|
|
echo $icon.$link1;
|
|
if (!empty($link)) {
|
|
echo "<br/>".$link;
|
|
}
|
|
if (!empty($link2)) {
|
|
echo "<br/>".$link2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
echo "</td>";
|
|
}
|
|
} else {
|
|
echo "<td></td>";
|
|
}
|
|
} else {
|
|
echo "<td></td>";
|
|
}
|
|
break;
|
|
|
|
case 14:
|
|
// ** Connection status
|
|
echo "<td>";
|
|
if (strstr($pfNetworkPort->fields["ifstatus"], "up")
|
|
|| strstr($pfNetworkPort->fields["ifstatus"], "1")) {
|
|
echo "<img src='".$fi_path."/pics/wired_on.png'/>";
|
|
} else if (strstr($pfNetworkPort->fields["ifstatus"], "down")
|
|
|| strstr($pfNetworkPort->fields["ifstatus"], "2")) {
|
|
echo "<img src='".$fi_path."/pics/wired_off.png'/>";
|
|
} else if (strstr($pfNetworkPort->fields["ifstatus"], "testing")
|
|
|| strstr($pfNetworkPort->fields["ifstatus"], "3")) {
|
|
echo "<img src='".$fi_path."/pics/yellowbutton.png'/>";
|
|
} else if (strstr($pfNetworkPort->fields["ifstatus"], "dormant")
|
|
|| strstr($pfNetworkPort->fields["ifstatus"], "5")) {
|
|
echo "<img src='".$fi_path."/pics/orangebutton.png'/>";
|
|
}
|
|
echo "</td>";
|
|
break;
|
|
|
|
case 12:
|
|
echo "<td>";
|
|
|
|
$canedit = Session::haveRight('networking', UPDATE);
|
|
|
|
$used = [];
|
|
|
|
$query_vlan = "SELECT * FROM glpi_networkports_vlans
|
|
WHERE networkports_id='".$data["id"]."'";
|
|
$result_vlan = $DB->query($query_vlan);
|
|
if ($DB->numrows($result_vlan) > 0) {
|
|
echo "<table cellpadding='0' cellspacing='0'>";
|
|
while ($line = $DB->fetchArray($result_vlan)) {
|
|
$used[] = $line["vlans_id"];
|
|
$vlan = new Vlan();
|
|
$vlan->getFromDB($line["vlans_id"]);
|
|
if ($line['tagged'] == '1') {
|
|
$state = 'T';
|
|
} else {
|
|
$state = 'U';
|
|
}
|
|
echo "<tr><td>" . $vlan->fields['name']." [".$vlan->fields['tag']."] " . $state;
|
|
echo "</td><td>";
|
|
if ($canedit) {
|
|
echo "<a href='" . $CFG_GLPI["root_doc"].
|
|
"/front/networkport.form.php?unassign_vlan=unassigned&id=".
|
|
$line["id"] . "'>";
|
|
echo "<img src=\"" . $CFG_GLPI["root_doc"] . "/pics/delete.png\" alt='".
|
|
__('Delete', 'fusioninventory') . "' title='" .
|
|
__('Delete', 'fusioninventory') . "'></a>";
|
|
} else {
|
|
echo " ";
|
|
}
|
|
echo "</td>";
|
|
echo "</tr>";
|
|
}
|
|
echo "</table>";
|
|
} else {
|
|
echo " ";
|
|
}
|
|
echo "</td>";
|
|
break;
|
|
|
|
case 15:
|
|
echo "<td align='center'>";
|
|
if ($pfNetworkPort->fields['ifstatus'] == 1) {
|
|
echo __('Connected');
|
|
} else if ($pfNetworkPort->fields['lastup'] == "") {
|
|
echo '-';
|
|
} else {
|
|
$time = strtotime(date('Y-m-d H:i:s')) - strtotime($pfNetworkPort->fields['lastup']);
|
|
echo Html::timestampToString($time, false);
|
|
}
|
|
echo "</td>";
|
|
break;
|
|
|
|
case 16:
|
|
echo "<td>".$pfNetworkPort->fields["ifalias"]."</td>";
|
|
break;
|
|
|
|
case 17:
|
|
echo "<td>";
|
|
if ($networkPort->fields['instantiation_type'] == 'NetworkPortEthernet') {
|
|
$npes = $networkPortEthernet->find(['networkports_id' => $networkPort->fields['id']], [], 1);
|
|
foreach ($npes as $npe) {
|
|
echo Dropdown::getDropdownName("glpi_netpoints", $npe["netpoints_id"]);
|
|
}
|
|
}
|
|
echo "</td>";
|
|
break;
|
|
|
|
}
|
|
}
|
|
echo "</tr>";
|
|
}
|
|
|
|
|
|
/**
|
|
* Get the icon related to the itemtype
|
|
*
|
|
* @global array $CFG_GLPI
|
|
* @param string $itemtype
|
|
* @return string
|
|
*/
|
|
function getItemtypeIcon($itemtype) {
|
|
global $CFG_GLPI;
|
|
|
|
$icon = false;
|
|
switch ($itemtype) {
|
|
case 'Computer':
|
|
$icon = "computer_icon.png";
|
|
break;
|
|
case 'Phone':
|
|
$icon = "phone_icon.png";
|
|
break;
|
|
case 'NetworkEquipment':
|
|
$icon = "network_icon.png";
|
|
break;
|
|
}
|
|
if ($icon) {
|
|
return "<img src='".Plugin::getWebDir('fusioninventory')."/pics/$icon' ".
|
|
"style='float:left'/> ";
|
|
} else {
|
|
return '';
|
|
}
|
|
}
|
|
|
|
|
|
function addMoreInfos($options = []) {
|
|
global $DB;
|
|
|
|
echo "<tr class='tab_bg_1'>";
|
|
echo "<td align='center'>";
|
|
echo __('CPU usage (in %)', 'fusioninventory');
|
|
echo "</td>";
|
|
echo "<td>";
|
|
Html::displayProgressBar(250, $this->fields['cpu'],
|
|
['simple' => true]);
|
|
echo "</td>";
|
|
echo "</tr>";
|
|
|
|
echo "<tr class='tab_bg_1'>";
|
|
echo "<td align='center'>";
|
|
echo __('Memory usage (in %)', 'fusioninventory');
|
|
echo "</td>";
|
|
echo "<td>";
|
|
$params = [
|
|
'FROM' => 'glpi_networkequipments',
|
|
'FIELDS' => ['ram'],
|
|
'WHERE' => [
|
|
'id' => $this->fields['networkequipments_id']
|
|
],
|
|
'LIMIT' => 1
|
|
];
|
|
$iterator = $DB->request($params);
|
|
if ($iterator->numrows()) {
|
|
$ram_pourcentage = 0;
|
|
$data = $iterator->next();
|
|
if (!empty($data["ram"])
|
|
&& !empty($this->fields['memory'])) {
|
|
$ram_pourcentage = ceil((100 * ($data["ram"] - $this->fields['memory'])) / $data["ram"]);
|
|
}
|
|
if ((($data["ram"] - $this->fields['memory']) < 0)
|
|
|| (empty($this->fields['memory']))) {
|
|
echo "<center><strong>".__('No data available', 'fusioninventory')."</strong></center>";
|
|
} else {
|
|
Html::displayProgressBar(250, $ram_pourcentage,
|
|
['title' => " (".($data["ram"] - $this->fields['memory']).__('Mio')." / ".
|
|
$data["ram"].__('Mio').")"]);
|
|
}
|
|
}
|
|
echo "</td>";
|
|
echo "</tr>";
|
|
}
|
|
}
|