function displaySpecificTypeField($ID, $field = array()) { switch ($field['type']) { case 'instantiation_type': Dropdown::showFromArray($field['name'], NetworkPort::getNetworkPortInstantiationsWithNames(), array('value' => $this->fields[$field['name']])); break; case 'type': Dropdown::showFromArray('type', NetworkPortEthernet::getPortTypeName(), array('value' => $this->fields[$field['name']])); break; case 'speed': $standard_speeds = NetworkPortEthernet::getPortSpeed(); if (!isset($standard_speeds[$this->fields['speed']]) && !empty($this->fields['speed'])) { $speed = NetworkPortEthernet::transformPortSpeed($this->fields['speed'], true); } else { $speed = true; } Dropdown::showFromArray('speed', $standard_speeds, array('value' => $this->fields['speed'], 'other' => $speed)); break; case 'version': Dropdown::showFromArray('version', WifiNetwork::getWifiCardVersion(), array('value' => $this->fields['version'])); break; } }
static function displayInvalidList() { global $DB; $query = "SELECT DISTINCT `TYPE`\n FROM `glpi_plugin_ocsinventoryng_networkports`"; $type_results = $DB->request($query); echo "<br>\n<div class ='center'><table class='tab_cadrehov'>"; if ($type_results->numrows() > 0) { echo "<tr class='tab_bg_2'><th colspan='4'>" . self::getTypeName(2) . "</th></tr>"; foreach ($type_results as $type) { $query = "SELECT `TYPEMIB`, `TYPE`,\n GROUP_CONCAT(DISTINCT `speed` SEPARATOR '#') AS speed\n FROM `glpi_plugin_ocsinventoryng_networkports`\n WHERE `TYPE` = '" . $type['TYPE'] . "'\n GROUP BY `TYPEMIB`"; $typemib_results = $DB->request($query); echo "<tr class='tab_bg_1'>"; echo "<td rowspan='" . $typemib_results->numrows() . "'>" . self::getTextualType($type['TYPE']) . "</td>"; $first = True; foreach ($typemib_results as $typemib) { if (!$first) { echo "<tr class='tab_bg_1'>"; } else { $first = False; } echo "<td>" . self::getTextualType($typemib['TYPEMIB']) . "</td>"; // Normalize speeds ... $speeds = array(); foreach (explode('#', $typemib['speed']) as $speed) { $speed = NetworkPortEthernet::transformPortSpeed($speed, false); if ($speed !== false and !in_array($speed, $speeds)) { $speeds[] = $speed; } } asort($speeds); $printable_speeds = array(); foreach ($speeds as $speed) { $printable_speeds[] = NetworkPortEthernet::transformPortSpeed($speed, true); } $typemib['speed'] = implode(', ', $printable_speeds); echo "<td>" . $typemib['speed'] . "</td>"; echo "<td>" . PluginOcsinventoryngNetworkPortType::getLinkToCreateFromTypeAndTypeMIB($typemib) . "</td>"; echo "</tr>"; } } } else { echo "<tr class='tab_bg_2'><th>" . __('No unknown network port type from OCS !', 'ocsinventoryng') . "</th></tr>"; } echo "</table></div>"; }
static function importNetwork($PluginOcsinventoryngDBocs, $cfg_ocs, $ocsid, $computers_id, $dohistory) { global $DB; $query = "SELECT MIN(`ID`) AS ID, `DESCRIPTION`, `MACADDR`, `TYPE`, `TYPEMIB`,\n `SPEED`, `VIRTUALDEV`, GROUP_CONCAT(`IPADDRESS` SEPARATOR ',') AS IPADDRESS\n FROM `networks`\n WHERE `HARDWARE_ID` = '{$ocsid}'\n GROUP BY CONCAT(`DESCRIPTION`, `MACADDR`, `TYPE`, `TYPEMIB`,\n `SPEED`, `VIRTUALDEV`)\n ORDER BY `ID`"; $network_ports = array(); $network_ifaces = array(); foreach ($PluginOcsinventoryngDBocs->request($query) as $line) { $line = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line)); $mac = $line['MACADDR']; if (!isset($network_ports[$mac])) { $network_ports[$mac] = array('virtual' => array()); } $name = PluginOcsinventoryngOcsServer::encodeOcsDataInUtf8($cfg_ocs["ocs_db_utf8"], $line['DESCRIPTION']); if (!empty($line['IPADDRESS'])) { $ip = array_unique(explode(',', $line['IPADDRESS'])); } else { $ip = false; } $networkport_type = new PluginOcsinventoryngNetworkPortType(); $TYPEMIB = empty($line['TYPEMIB']) ? '' : $line['TYPEMIB']; $TYPE = empty($line['TYPE']) ? '' : $line['TYPE']; $networkport_type->getFromDBByQuery("WHERE `OCS_TYPE`='{$TYPE}'\n AND `OCS_TYPEMIB`='{$TYPEMIB}'"); if ($networkport_type->isNewItem()) { $networkport_type->getFromDBByQuery("WHERE `OCS_TYPE`='{$TYPE}' AND `OCS_TYPEMIB`='*'"); } if ($networkport_type->isNewItem()) { $networkport_type->getFromDBByQuery("WHERE `OCS_TYPE`='*' AND `OCS_TYPEMIB`='*'"); } $speed = NetworkPortEthernet::transformPortSpeed($line['SPEED'], false); if (!empty($speed)) { $networkport_type->fields['speed'] = $speed; } $values = array('name' => $name, 'type' => array_push($network_ifaces, $networkport_type) - 1, 'ip' => $ip, 'result' => $line); // Virtual dev can be : // 1°) specifically defined from OCS // 2°) if there is already one main device // 3°) if the networkport is issued by VMWare if (isset($line['VIRTUALDEV']) && $line['VIRTUALDEV'] == '1' || isset($network_ports[$mac]['main']) || preg_match('/^vm(k|nic)([0-9]+)$/', $name)) { $network_ports[$mac]['virtual'][$line['ID']] = $values; } else { $network_ports[$mac]['main'] = $values; } } $already_known_ports = array(); $already_known_ifaces = array(); foreach ($network_ports as $mac => $ports) { if (isset($ports['main'])) { $main = $ports['main']; $type = $network_ifaces[$main['type']]; // First search for the Network Card $item_device = new Item_DeviceNetworkCard(); $item_device->getFromDBByQuery("INNER JOIN `glpi_devicenetworkcards`\n ON (`glpi_devicenetworkcards`.`designation`='" . $main['name'] . "')\n WHERE `glpi_items_devicenetworkcards`.`itemtype`='Computer'\n AND `glpi_items_devicenetworkcards`.`items_id`='{$computers_id}'\n AND `glpi_items_devicenetworkcards`.`mac`='{$mac}'\n AND `glpi_items_devicenetworkcards`.`devicenetworkcards_id`=\n `glpi_devicenetworkcards`.`id`"); // If not found, then, create it if ($item_device->isNewItem()) { $deviceNetworkCard = new DeviceNetworkCard(); $device_input = array('designation' => $main['name'], 'bandwidth' => $type->fields['speed']); $net_id = $deviceNetworkCard->import($device_input); if ($net_id) { $item_device->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'devicenetworkcards_id' => $net_id, 'mac' => $mac, '_no_history' => !$dohistory, 'is_dynamic' => 1, 'is_deleted' => 0)); } } if (!$item_device->isNewItem()) { $already_known_ifaces[] = $item_device->getID(); } if ($type->fields['instantiation_type'] == __CLASS__) { $result = $main['result']; $inst_input = array('TYPE' => $result['TYPE'], 'TYPEMIB' => $result['TYPEMIB'], 'speed' => $result['SPEED']); } else { $inst_input = $type->fields; foreach (array('id', 'name', 'OCS_TYPE', 'OCS_TYPEMIB', 'instantiation_type', 'comment') as $field) { unset($inst_input[$field]); } } $inst_input['items_devicenetworkcards_id'] = $item_device->getID(); $networkports_id = self::updateNetworkPort($mac, $main['name'], $computers_id, $type->fields['instantiation_type'], $inst_input, $main['ip'], false, $dohistory, $already_known_ports); if ($networkports_id < 0) { continue; } $already_known_ports[] = $networkports_id; } else { $networkports_id = 0; } foreach ($ports['virtual'] as $port) { $inst_input = array('networkports_id_alias' => $networkports_id); $id = self::updateNetworkPort($mac, $port['name'], $computers_id, 'NetworkPortAlias', $inst_input, $port['ip'], true, $dohistory, $already_known_ports); if ($id > 0) { $already_known_ports[] = $id; } } } $query = "SELECT `id`\n FROM `glpi_networkports`\n WHERE `itemtype` = 'Computer'\n AND `items_id` = '{$computers_id}'\n AND `is_dynamic` = '1'"; if (count($already_known_ports) > 0) { $query .= " AND `id` NOT IN ('" . implode("', '", $already_known_ports) . "')"; } $network_ports = new NetworkPort(); foreach ($DB->request($query) as $line) { $network_ports->delete($line, true); } $query = "SELECT `id`\n FROM `glpi_items_devicenetworkcards`\n WHERE `itemtype` = 'Computer'\n AND `items_id` = '{$computers_id}'\n AND `is_dynamic` = '1'"; if (count($already_known_ifaces) > 0) { $query .= " AND `id` NOT IN ('" . implode("', '", $already_known_ifaces) . "')"; } $item_device = new Item_DeviceNetworkCard(); foreach ($DB->request($query) as $line) { $item_device->delete($line, true); } }
static function getLinkToCreateFromTypeAndTypeMIB(array $fields = array()) { $link = static::getFormURL() . '?TYPE=' . $fields['TYPE'] . '&TYPEMIB=' . $fields['TYPEMIB']; if (!empty($fields['speed'])) { $speed = NetworkPortEthernet::transformPortSpeed($fields['speed'], false); if (!empty($speed)) { $link .= '&SPEED=' . $speed; } } $link .= '&rand=1'; // To reload main window Ajax::createIframeModalWindow('create_network', $link, array('title' => __('Create', 'ocsinventoryng'))); return "<a href='#' onClick=\"\$('#create_network').dialog('open');\">" . __('Create', 'ocsinventoryng') . "</a>"; }