static function addLogConnection($status, $port)
 {
     $pfNetworkPortConnectionLog = new PluginFusioninventoryNetworkPortConnectionLog();
     $NetworkPort_NetworkPort = new NetworkPort_NetworkPort();
     $input = array();
     // Récupérer le port de la machine associé au port du switch
     // Récupérer le type de matériel
     $input["networkports_id_source"] = $port;
     $opposite_port = $NetworkPort_NetworkPort->getOppositeContact($port);
     if (!$opposite_port) {
         return;
     }
     $input['networkports_id_destination'] = $opposite_port;
     $input['date_mod'] = date("Y-m-d H:i:s");
     if ($status == 'remove') {
         $input['creation'] = 0;
     } else {
         if ($status == 'make') {
             $input['creation'] = 1;
         }
     }
     $pfNetworkPortConnectionLog->add($input);
 }
Ejemplo n.º 2
0
 /**
  * Get port opposite port ID if linked item
  *
  * @param $ID networking port ID
  *
  * @return ID of the NetworkPort found, false if not found
  **/
 function getContact($ID)
 {
     $wire = new NetworkPort_NetworkPort();
     if ($contact_id = $wire->getOppositeContact($ID)) {
         return $contact_id;
     }
     return false;
 }
 /**
  * Remove all connections on a hub
  *
  * @param $hub_id integer id of the hub
  * @param $pfNetworkport object Informations of the network port
  *
  * @return nothing
  *
  **/
 function releaseHub($hub_id, $pfNetworkport, $a_mac)
 {
     $Netport = new NetworkPort();
     $nn = new NetworkPort_NetworkPort();
     $a_macOnSwitch = array();
     foreach ($a_mac as $ifmac) {
         $a_macOnSwitch["{$ifmac}"] = 1;
     }
     // get all ports of hub
     $releasePorts = array();
     $a_ports = $Netport->find("`items_id`='" . $hub_id . "' AND `itemtype`='" . $this->getType() . "' " . "AND (`name` != 'Link' OR `name` IS NULL)");
     foreach (array_keys($a_ports) as $ports_id) {
         $id = $nn->getOppositeContact($ports_id);
         if ($id) {
             $Netport->getFromDB($id);
             if (!isset($a_macOnSwitch[$Netport->fields["mac"]])) {
                 $releasePorts[$ports_id] = 1;
             }
         }
     }
 }
 /**
  * Function used to detect if port has multiple mac connected
  */
 static function isPortHasMultipleMac($networkports_id)
 {
     $nw = new NetworkPort_NetworkPort();
     $networkPort = new NetworkPort();
     $is_multiple = FALSE;
     $opposite_port = $nw->getOppositeContact($networkports_id);
     if ($opposite_port != "" && $opposite_port != 0) {
         $networkPort->getFromDB($opposite_port);
         if ($networkPort->fields["itemtype"] == 'PluginFusioninventoryUnmanaged') {
             $pfUnmanaged = new PluginFusioninventoryUnmanaged();
             if ($pfUnmanaged->getFromDB($networkPort->fields['items_id'])) {
                 if ($pfUnmanaged->fields['hub'] == 1) {
                     $is_multiple = TRUE;
                 }
             }
         }
     }
     return $is_multiple;
 }
 /**
  * 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;
     $nw = new NetworkPort_NetworkPort();
     $networkName = new NetworkName();
     $networkPort = new NetworkPort();
     $pfNetworkPort = new PluginFusioninventoryNetworkPort();
     $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(\"" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/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(\"" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/pics/multiple_mac_addresses.png\"); '";
         } else {
             if (strstr($pfNetworkPort->fields["ifstatus"], "up") || $pfNetworkPort->fields["ifstatus"] == 1) {
                 $background_img = " style='background-image: url(\"" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/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)) {
             $checked = '';
             if ($state) {
                 $checked = 'checked';
             }
             echo "<input type='checkbox' name='networkports_id[]' value='" . $data['id'] . "' " . $checked . "/>";
         } 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='" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/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 background='#cf9b9b' class='tab_bg_1_2'>";
                     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());
                         // * GetIP
                         $a_networknames = current($networkName->find("`itemtype`='NetworkPort'\n                                          AND `items_id`='" . $item->getID() . "'", "", 1));
                         $a_ipaddresses = current($iPAddress->find("`itemtype`='NetworkName'\n                                          AND `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'\n                                     class='tab_bg_1_2'>" . $icon . $link1;
                             } else {
                                 echo "<td background='#cf9b9b'\n                                     class='tab_bg_1_2'>" . $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 *\n                                   FROM `glpi_networkports`\n                                   WHERE `itemtype`='Phone'\n                                       AND `items_id`='" . $data_device["items_id"] . "'\n                                       AND `id`!='" . $data_device["id"] . "'\n                                   LIMIT 1";
                                 $result_devicephone = $DB->query($query_devicephone);
                                 if ($DB->numrows($result_devicephone) > 0) {
                                     $data_devicephone = $DB->fetch_assoc($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='" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/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='" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/pics/wired_on.png'/>";
                 } else {
                     if (strstr($pfNetworkPort->fields["ifstatus"], "down") || strstr($pfNetworkPort->fields["ifstatus"], "2")) {
                         echo "<img src='" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/pics/wired_off.png'/>";
                     } else {
                         if (strstr($pfNetworkPort->fields["ifstatus"], "testing") || strstr($pfNetworkPort->fields["ifstatus"], "3")) {
                             echo "<img src='" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/pics/yellowbutton.png'/>";
                         } else {
                             if (strstr($pfNetworkPort->fields["ifstatus"], "dormant") || strstr($pfNetworkPort->fields["ifstatus"], "5")) {
                                 echo "<img src='" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/pics/orangebutton.png'/>";
                             }
                         }
                     }
                 }
                 echo "</td>";
                 break;
             case 12:
                 echo "<td>";
                 $canedit = Session::haveRight('networking', UPDATE);
                 $used = array();
                 $query_vlan = "SELECT * FROM glpi_networkports_vlans\n                              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->fetch_array($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&amp;id=" . $line["id"] . "'>";
                             echo "<img src=\"" . $CFG_GLPI["root_doc"] . "/pics/delete.png\" alt='" . __('Delete', 'fusioninventory') . "' title='" . __('Delete', 'fusioninventory') . "'></a>";
                         } else {
                             echo "&nbsp;";
                         }
                         echo "</td>";
                         echo "</tr>";
                     }
                     echo "</table>";
                 } else {
                     echo "&nbsp;";
                 }
                 echo "</td>";
                 break;
             case 15:
                 echo "<td align='center'>";
                 if ($pfNetworkPort->fields['ifstatus'] == 1) {
                     echo __('Connected');
                 } else {
                     if ($pfNetworkPort->fields['lastup'] == "0000-00-00 00:00:00") {
                         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;
         }
     }
     echo "</tr>";
 }
 /**
  * @test
  */
 public function NetworkPortConnection()
 {
     global $DB;
     $DB->connect();
     $networkPort = new NetworkPort();
     $networkPort_NetworkPort = new NetworkPort_NetworkPort();
     $pfUnmanaged = new PluginFusioninventoryUnmanaged();
     $a_networkports = $networkPort->find("`logical_number`='10001'");
     $this->assertEquals(1, count($a_networkports), 'Number of networkport 10001 may be 1');
     $a_networkport = current($a_networkports);
     $opposites_id = $networkPort_NetworkPort->getOppositeContact($a_networkport['id']);
     $networkPort->getFromDB($opposites_id);
     $pfUnmanaged->getFromDB($networkPort->fields['items_id']);
     $this->assertEquals(0, $pfUnmanaged->fields['hub'], 'May not be a hub');
     $a_networkports = $networkPort->find("`items_id`='" . $pfUnmanaged->fields['id'] . "'\n         AND `itemtype`='PluginFusioninventoryUnmanaged'");
     $this->assertEquals(1, count($a_networkports), 'Number of networkport of unknown ports may be 1');
 }
Ejemplo n.º 7
0
 /**
  * Display a connection of a networking port
  *
  * @param $device1 the device of the port
  * @param $netport to be displayed
  * @param $withtemplate
  **/
 static function showConnection(&$device1, &$netport, $withtemplate = '')
 {
     global $CFG_GLPI, $LANG;
     if (!$device1->can($device1->fields["id"], 'r')) {
         return false;
     }
     $contact = new NetworkPort_NetworkPort();
     $canedit = $device1->can($device1->fields["id"], 'w');
     $ID = $netport->fields["id"];
     if ($contact_id = $contact->getOppositeContact($ID)) {
         $netport->getFromDB($contact_id);
         if (class_exists($netport->fields["itemtype"])) {
             $device2 = new $netport->fields["itemtype"]();
             if ($device2->getFromDB($netport->fields["items_id"])) {
                 echo "\n<table width='100%'>\n";
                 echo "<tr " . ($device2->fields["is_deleted"] ? "class='tab_bg_2_2'" : "") . ">";
                 echo "<td><strong>";
                 if ($device2->can($device2->fields["id"], 'r')) {
                     echo $netport->getLink();
                     echo "</strong>\n";
                     showToolTip($netport->fields['comment']);
                     echo "&nbsp;" . $LANG['networking'][25] . " <strong>";
                     echo $device2->getLink();
                     echo "</strong>";
                     if ($device1->fields["entities_id"] != $device2->fields["entities_id"]) {
                         echo "<br>(" . Dropdown::getDropdownName("glpi_entities", $device2->getEntityID()) . ")";
                     }
                     // 'w' on dev1 + 'r' on dev2 OR 'r' on dev1 + 'w' on dev2
                     if ($canedit || $device2->can($device2->fields["id"], 'w')) {
                         echo "</td>\n<td class='right'><strong>";
                         if ($withtemplate != 2) {
                             echo "<a href=\"" . $netport->getFormURL() . "?disconnect=" . "disconnect&amp;id=" . $contact->fields['id'] . "\">" . $LANG['buttons'][10] . "</a>";
                         } else {
                             "&nbsp;";
                         }
                         echo "</strong>";
                     }
                 } else {
                     if (rtrim($netport->fields["name"]) != "") {
                         echo $netport->fields["name"];
                     } else {
                         echo $LANG['common'][0];
                     }
                     echo "</strong> " . $LANG['networking'][25] . " <strong>";
                     echo $device2->getName();
                     echo "</strong><br>(" . Dropdown::getDropdownName("glpi_entities", $device2->getEntityID()) . ")";
                 }
                 echo "</td></tr></table>\n";
             }
         }
     } else {
         echo "\n<table width='100%'><tr>";
         if ($canedit) {
             echo "<td class='left'>";
             if ($withtemplate != 2 && $withtemplate != 1) {
                 self::dropdownConnect($ID, array('name' => 'dport', 'entity' => $device1->fields["entities_id"], 'entity_sons' => $device1->isRecursive()));
             } else {
                 echo "&nbsp;";
             }
             echo "</td>\n";
         }
         echo "<td><div id='not_connected_display{$ID}'>" . $LANG['connect'][1] . "</div></td>";
         echo "</tr></table>\n";
     }
 }
 echo "<tr><th>" . $LANG['common'][15] . "</th>";
 echo "<th>" . $LANG['reports'][52] . "</th>";
 echo "<th>" . $LANG['networking'][14] . "</th>";
 echo "<th>" . $LANG['reports'][46] . "</th>";
 echo "<th>" . $LANG['device_iface'][2] . "</th>";
 echo "<th>" . $LANG['reports'][47] . "</th>";
 echo "<th>" . $LANG['networking'][14] . "</th>";
 echo "<th>" . $LANG['device_iface'][2] . "</th>";
 echo "<th>" . $LANG['reports'][36] . "</th>";
 echo "</tr>";
 while ($ligne = $DB->fetch_array($result)) {
     $prise = $ligne['prise'];
     $ID = $ligne['id'];
     $lieu = Dropdown::getDropdownName("glpi_locations", $ID);
     $nw = new NetworkPort_NetworkPort();
     $networkports_id_1 = $nw->getOppositeContact($ligne['IDport']);
     $np = new NetworkPort();
     $ordi = "";
     $ip2 = "";
     $mac2 = "";
     $portordi = "";
     if ($networkports_id_1) {
         $np->getFromDB($networkports_id_1);
         $ordi = '';
         if (class_exists($np->fields["itemtype"])) {
             $item = new $np->fields["itemtype"]();
             if ($item->getFromDB($np->fields["items_id"])) {
                 $ordi = $item->getName();
             }
         }
         $ip2 = $np->fields['ip'];
 /**
  * @param $values
  * @param $add                (true by default)
  * @param $rights    array
  **/
 function processAfterInsertOrUpdate($values, $add = true, $rights = array())
 {
     global $DB;
     //Should the port be connected to another one ?
     $use_name = isset($values['NetworkPort']["netname"]) || !empty($values['NetworkPort']["netname"]);
     $use_logical_number = isset($values['NetworkPort']["netport"]) || !empty($values['NetworkPort']["netport"]);
     $use_mac = isset($values['NetworkPort']["netmac"]) || !empty($values['NetworkPort']["netmac"]);
     if (!$use_name && !$use_logical_number && !$use_mac) {
         return false;
     }
     // Find port in database
     $sql = "SELECT `glpi_networkports`.`id`\n              FROM `glpi_networkports`, `glpi_networkequipments`\n              WHERE `glpi_networkports`.`itemtype`='NetworkEquipment'\n                    AND `glpi_networkports`.`items_id` = `glpi_networkequipments`.`id`\n                    AND `glpi_networkequipments`.`is_template` = '0'\n                    AND `glpi_networkequipments`.`entities_id`\n                           = '" . $values['NetworkPort']["entities_id"] . "'";
     if ($use_name) {
         $sql .= " AND `glpi_networkequipments`.`name` = '" . $values['NetworkPort']["netname"] . "'";
     }
     if ($use_logical_number) {
         $sql .= " AND `glpi_networkports`.`logical_number` = '" . $values['NetworkPort']["netport"] . "'";
     }
     if ($use_mac) {
         $sql .= " AND `glpi_networkports`.`mac` = '" . $values['NetworkPort']["netmac"] . "'";
     }
     $res = $DB->query($sql);
     //if at least one parameter is given
     $nb = $DB->numrows($res);
     if ($nb == 1) {
         //Get data for this port
         $netport = $DB->fetch_array($res);
         $netport_netport = new NetworkPort_NetworkPort();
         //If this port already connected to another one ?
         if (!$netport_netport->getOppositeContact($netport['id'])) {
             //No, add a new port to port connection
             $tmp['networkports_id_1'] = $values['NetworkPort']['id'];
             $tmp['networkports_id_2'] = $netport['id'];
             $netport_netport->add($tmp);
         }
     }
     //TODO add injection warning if no port found or more than one
 }
 function importConnectionMac($a_portconnection, $networkports_id)
 {
     $wire = new NetworkPort_NetworkPort();
     $networkPort = new NetworkPort();
     $pfNetworkPort = new PluginFusioninventoryNetworkPort();
     $pfUnmanaged = new PluginFusioninventoryUnmanaged();
     $a_snmpports = current($pfNetworkPort->find("`networkports_id`='" . $networkports_id . "'", "", 1));
     $pfNetworkPort->getFromDB($a_snmpports['id']);
     $count = count($a_portconnection);
     $pfNetworkPort->loadNetworkport($networkports_id);
     if ($pfNetworkPort->getValue('trunk') != '1') {
         if ($count == '2') {
             // detect if phone IP is one of the 2 devices
             $phonecase = 0;
             $macNotPhone_id = 0;
             $macNotPhone = '';
             $phonePort_id = 0;
             foreach ($a_portconnection as $ifmac) {
                 $a_ports = $networkPort->find("`mac`='" . $ifmac . "'", "", 1);
                 $a_port = current($a_ports);
                 if ($a_port['itemtype'] == 'Phone') {
                     // Connect phone on switch port and other (computer..) in this phone
                     $phonePort_id = $a_port['id'];
                     $phonecase++;
                 } else {
                     $macNotPhone_id = $a_port['id'];
                     $macNotPhone = $ifmac;
                 }
             }
             if ($phonecase == '1') {
                 $wire->add(array('networkports_id_1' => $networkports_id, 'networkports_id_2' => $phonePort_id));
                 $networkPort->getFromDB($phonePort_id);
                 $Phone = new Phone();
                 $Phone->getFromDB($networkPort->fields['items_id']);
                 $a_portsPhone = $networkPort->find("`items_id`='" . $networkPort->fields['items_id'] . "'\n                                                AND `itemtype`='Phone'\n                                                AND `name`='Link'", '', 1);
                 $portLink_id = 0;
                 if (count($a_portsPhone) == '1') {
                     $a_portPhone = current($a_portsPhone);
                     $portLink_id = $a_portPhone['id'];
                 } else {
                     // Create Port Link
                     $input = array();
                     $input['name'] = 'Link';
                     $input['itemtype'] = 'Phone';
                     $input['items_id'] = $Phone->fields['id'];
                     $input['entities_id'] = $Phone->fields['entities_id'];
                     $portLink_id = $networkPort->add($input);
                 }
                 $opposite_id = FALSE;
                 if ($opposite_id == $wire->getOppositeContact($portLink_id)) {
                     if ($opposite_id != $macNotPhone_id) {
                         $pfNetworkPort->disconnectDB($portLink_id);
                         // disconnect this port
                         $pfNetworkPort->disconnectDB($macNotPhone_id);
                         // disconnect destination port
                     }
                 }
                 if (!isset($macNotPhone_id)) {
                     // Create unmanaged ports
                     $unmanagedn_infos = array();
                     $unmanagedn_infos["name"] = '';
                     if (isset($_SESSION["plugin_fusioninventory_entity"])) {
                         $input['entities_id'] = $_SESSION["plugin_fusioninventory_entity"];
                     }
                     $newID = $pfUnmanaged->add($unmanagedn_infos);
                     // Add networking_port
                     $port_add = array();
                     $port_add["items_id"] = $newID;
                     $port_add["itemtype"] = 'PluginFusioninventoryUnmanaged';
                     $port_add['mac'] = $macNotPhone;
                     $port_add['instantiation_type'] = "NetworkPortEthernet";
                     $macNotPhone_id = $networkPort->add($port_add);
                 }
                 $wire->add(array('networkports_id_1' => $portLink_id, 'networkports_id_2' => $macNotPhone_id));
             } else {
                 $pfUnmanaged->hubNetwork($pfNetworkPort, $a_portconnection);
             }
         } else {
             if ($count > 1) {
                 // MultipleMac
                 $pfUnmanaged->hubNetwork($pfNetworkPort, $a_portconnection);
             } else {
                 // One mac on port
                 foreach ($a_portconnection as $ifmac) {
                     //Only 1 time
                     $a_ports = $networkPort->find("`mac`='" . $ifmac . "' AND `logical_number`='1'", "", 1);
                     if (count($a_ports) == 0) {
                         $a_ports = $networkPort->find("`mac`='" . $ifmac . "'", "", 1);
                     }
                     if (count($a_ports) > 0) {
                         $a_port = current($a_ports);
                         $hub = 0;
                         $id = $networkPort->getContact($a_port['id']);
                         if ($id and $networkPort->getFromDB($id)) {
                             if ($networkPort->fields['itemtype'] == 'PluginFusioninventoryUnmanaged') {
                                 $pfUnmanaged->getFromDB($networkPort->fields['items_id']);
                                 if ($pfUnmanaged->fields['hub'] == '1') {
                                     $hub = 1;
                                 }
                             }
                         }
                         $direct_id = $networkPort->getContact($networkports_id);
                         if ($id and $id != $networkports_id and $hub == '0') {
                             $directconnect = 0;
                             if (!$direct_id) {
                                 $directconnect = 1;
                             } else {
                                 $networkPort->getFromDB($direct_id);
                                 if ($networkPort->fields['itemtype'] == 'PluginFusioninventoryUnmanaged') {
                                     // 1. Hub connected to this switch port
                                     $pfUnmanaged->connectPortToHub(array($a_port), $networkPort->fields['items_id']);
                                 } else {
                                     // 2. direct connection
                                     $directconnect = 1;
                                 }
                             }
                             if ($directconnect == '1') {
                                 $pfNetworkPort->disconnectDB($networkports_id);
                                 // disconnect this port
                                 $pfNetworkPort->disconnectDB($a_port['id']);
                                 // disconnect destination port
                                 $wire->add(array('networkports_id_1' => $networkports_id, 'networkports_id_2' => $a_port['id']));
                             }
                         } else {
                             if ($id and $hub == '1') {
                                 $directconnect = 0;
                                 if (!$direct_id) {
                                     $directconnect = 1;
                                 } else {
                                     $networkPort->getFromDB($direct_id);
                                     $ddirect = $networkPort->fields;
                                     $networkPort->getFromDB($id);
                                     if ($ddirect['items_id'] == $networkPort->fields['items_id'] and $ddirect['itemtype'] == $networkPort->fields['itemtype']) {
                                         // 1.The hub where this device is connected is yet connected
                                         // to this switch port
                                         // => Do nothing
                                     } else {
                                         // 2. The hub where this device is connected to is not connected
                                         // to this switch port
                                         if ($ddirect['itemtype'] == 'PluginFusioninventoryUnmanaged') {
                                             // b. We have a hub connected to the switch port
                                             $pfUnmanaged->connectPortToHub(array($a_port), $ddirect['items_id']);
                                         } else {
                                             // a. We have a direct connexion to another device
                                             // (on the switch port)
                                             $directconnect = 1;
                                         }
                                     }
                                 }
                                 if ($directconnect == '1') {
                                     $pfNetworkPort->disconnectDB($networkports_id);
                                     // disconnect this port
                                     $pfNetworkPort->disconnectDB($a_port['id']);
                                     // disconnect destination port
                                     $wire->add(array('networkports_id_1' => $networkports_id, 'networkports_id_2' => $a_port['id']));
                                 }
                             } else {
                                 if ($id) {
                                     // Yet connected
                                 } else {
                                     // Not connected
                                     $pfNetworkPort->disconnectDB($networkports_id);
                                     // disconnect this port
                                     $wire->add(array('networkports_id_1' => $networkports_id, 'networkports_id_2' => $a_port['id']));
                                 }
                             }
                         }
                     } else {
                         // Create unmanaged device
                         $pfUnmanaged = new PluginFusioninventoryUnmanaged();
                         $input = array();
                         $manufacturer = PluginFusioninventoryInventoryExternalDB::getManufacturerWithMAC($ifmac);
                         $input['name'] = $manufacturer;
                         if (isset($_SESSION["plugin_fusioninventory_entity"])) {
                             $input['entities_id'] = $_SESSION["plugin_fusioninventory_entity"];
                         }
                         $newID = $pfUnmanaged->add($input);
                         $input['itemtype'] = "PluginFusioninventoryUnmanaged";
                         $input['items_id'] = $newID;
                         $input['mac'] = $ifmac;
                         $input['instantiation_type'] = "NetworkPortEthernet";
                         $newPortID = $networkPort->add($input);
                         $pfNetworkPort->disconnectDB($networkports_id);
                         // disconnect this port
                         $wire->add(array('networkports_id_1' => $networkports_id, 'networkports_id_2' => $newPortID));
                     }
                 }
             }
         }
     }
 }
 function Query($ID, $PluginArchiresView, $for)
 {
     global $DB;
     $this->getFromDB($ID);
     $types = array();
     $devices = array();
     $ports = array();
     if ($PluginArchiresView->fields["computer"] != 0) {
         $types[] = 'Computer';
     }
     if ($PluginArchiresView->fields["printer"] != 0) {
         $types[] = 'Printer';
     }
     if ($PluginArchiresView->fields["peripheral"] != 0) {
         $types[] = 'Peripheral';
     }
     if ($PluginArchiresView->fields["phone"] != 0) {
         $types[] = 'Phone';
     }
     if ($PluginArchiresView->fields["networking"] != 0) {
         $types[] = 'NetworkEquipment';
     }
     $query_switch = "SELECT `glpi_networkports`.`name` AS port,\n                              `glpi_networkports`.`id` AS idport\n                       FROM `glpi_networkequipments`\n                       LEFT JOIN `glpi_networkports`\n                           ON (`glpi_networkports`.`itemtype` = 'NetworkEquipment'\n                               AND `glpi_networkports`.`items_id` = `glpi_networkequipments`.`id`)\n                       WHERE `glpi_networkequipments`.`id` = '" . $this->fields["networkequipments_id"] . "'\n                             AND `glpi_networkequipments`.`is_deleted` = '0'\n                             AND `glpi_networkequipments`.`is_template` = '0'" . getEntitiesRestrictRequest(" AND", "glpi_networkequipments");
     if ($result_switch = $DB->query($query_switch)) {
         while ($ligne = $DB->fetch_array($result_switch)) {
             $port = $ligne['port'];
             $nw = new NetworkPort_NetworkPort();
             $end = $nw->getOppositeContact($ligne['idport']);
             if ($end) {
                 foreach ($types as $key => $val) {
                     $itemtable = getTableForItemType($val);
                     $fieldsnp = "`np`.`id`, `np`.`items_id`, `np`.`logical_number`,\n                               `np`.`instantiation_type`, `glpi_ipaddresses`.`name` AS ip,\n                               `ipn`.`netmask`, `np`.`name` AS namep";
                     $query = "SELECT `{$itemtable}`.`id` AS idc, {$fieldsnp} , `{$itemtable}`.`name`,\n                                   `{$itemtable}`.`" . getForeignKeyFieldForTable(getTableForItemType($val . "Type")) . "`\n                                       AS `type`,\n                                   `{$itemtable}`.`users_id`, `{$itemtable}`.`groups_id`,\n                                   `{$itemtable}`.`contact`, `{$itemtable}`.`states_id`,\n                                   `{$itemtable}`.`entities_id`,`{$itemtable}`.`locations_id`\n                   FROM `glpi_networkports` np,\n                        `{$itemtable}`,\n                        `glpi_ipnetworks` AS ipn\n                   LEFT JOIN `glpi_networknames`\n                        ON (`glpi_networknames`.`itemtype` = 'NetworkPort'\n                            AND `glpi_networkports`.`id` = `glpi_networknames`.`items_id`)\n                   LEFT JOIN `glpi_ipaddresses`\n                        ON (`glpi_ipaddresses`.`itemtype` = 'NetworkName'\n                            AND `glpi_networknames`.`id` = `glpi_ipaddresses`.`items_id`)\n                    WHERE `glpi_networkports`.`instantiation_type` = 'NetworkPortEthernet' ";
                     if ($this->fields["vlans_id"] > "0") {
                         $query .= ", `glpi_networkports_vlans` nv";
                     }
                     $query .= " WHERE `np`.`itemtype` = '{$val}'\n                                    AND `np`.`items_id` = `{$itemtable}`.`id`\n                                    AND `np`.`id` ='{$end}'\n                                    AND `{$itemtable}`.`is_deleted` = '0'\n                                    AND `{$itemtable}`.`is_template` = '0'" . getEntitiesRestrictRequest(" AND", $itemtable);
                     if ($this->fields["vlans_id"] > "0") {
                         $query .= " AND `nv`.`networkports_id` = `np`.`id`\n                                 AND vlans_id= '" . $this->fields["vlans_id"] . "'";
                     }
                     if ($this->fields["networks_id"] > "0" && $val != 'Phone' && $val != 'Peripheral') {
                         $query .= " AND `{$itemtable}`.`networks_id` = '" . $this->fields["networks_id"] . "'";
                     }
                     if ($this->fields["states_id"] > "0") {
                         $query .= " AND `{$itemtable}`.`states_id` = '" . $this->fields["states_id"] . "'";
                     }
                     if ($this->fields["groups_id"] > "0") {
                         $query .= " AND `{$itemtable}`.`groups_id` = '" . $this->fields["groups_id"] . "'";
                     }
                     //types
                     $PluginArchiresQueryType = new PluginArchiresQueryType();
                     $query .= $PluginArchiresQueryType->queryTypeCheck($this->getType(), $ID, $val);
                     $query .= "ORDER BY `np`.`ip` ASC ";
                     if ($result = $DB->query($query)) {
                         while ($data = $DB->fetch_array($result)) {
                             if ($PluginArchiresView->fields["display_state"] != 0) {
                                 $devices[$val][$data["items_id"]]["states_id"] = $data["states_id"];
                             }
                             $devices[$val][$data["items_id"]]["type"] = $data["type"];
                             $devices[$val][$data["items_id"]]["name"] = $data["name"];
                             $devices[$val][$data["items_id"]]["users_id"] = $data["users_id"];
                             $devices[$val][$data["items_id"]]["groups_id"] = $data["groups_id"];
                             $devices[$val][$data["items_id"]]["contact"] = $data["contact"];
                             $devices[$val][$data["items_id"]]["entity"] = $data["entities_id"];
                             $devices[$val][$data["items_id"]]["locations_id"] = $data["locations_id"];
                             $ports[$data["id"]]["items_id"] = $data["items_id"];
                             $ports[$data["id"]]["logical_number"] = $data["logical_number"];
                             $ports[$data["id"]]["networkinterfaces_id"] = $data["networkinterfaces_id"];
                             $ports[$data["id"]]["ip"] = $data["ip"];
                             $ports[$data["id"]]["netmask"] = $data["netmask"];
                             $ports[$data["id"]]["namep"] = $data["namep"];
                             $ports[$data["id"]]["idp"] = $data["id"];
                             $ports[$data["id"]]["itemtype"] = $val;
                             //ip
                             if ($data["ip"]) {
                                 if (!empty($devices[$val][$data["items_id"]]["ip"])) {
                                     $devices[$val][$data["items_id"]]["ip"] .= " - ";
                                     $devices[$val][$data["items_id"]]["ip"] .= $data["ip"];
                                 } else {
                                     $devices[$val][$data["items_id"]]["ip"] = $data["ip"];
                                 }
                             }
                             //fin ip
                         }
                     }
                 }
             }
         }
     }
     //The networking
     $query = "SELECT `n`.`id` AS `idn`, `np`.`id`, `np`.`items_id`, `np`.`logical_number`,\n                       `np`.`networkinterfaces_id` , `glpi_ipaddresses`.`name` AS ip,\n                       `np`.`name` AS `namep`,\n                       `n`.`ip` AS `nip`,`ipn`.`netmask`, `n`.`name`,\n                       `n`.`networkequipmenttypes_id` AS `type`, `n`.`users_id`, `n`.`groups_id`,\n                       `n`.`contact`, `n`.`states_id`, `n`.`entities_id`,`n`.`locations_id`\n                FROM `glpi_networkports` `np`, `glpi_networkequipments` `n`,\n                     `glpi_ipnetworks` AS ipn\n                LEFT JOIN `glpi_networknames`\n                        ON (`glpi_networknames`.`itemtype` = 'NetworkPort'\n                            AND `glpi_networkports`.`id` = `glpi_networknames`.`items_id`)\n                LEFT JOIN `glpi_ipaddresses`\n                        ON (`glpi_ipaddresses`.`itemtype` = 'NetworkName'\n                            AND `glpi_networknames`.`id` = `glpi_ipaddresses`.`items_id`)";
     if ($this->fields["vlans_id"] > "0") {
         $query .= ", `glpi_networkports_vlans` nv ";
     }
     $query .= "WHERE `np`.`itemtype` = 'NetworkEquipment'\n                       AND `np`.`items_id` = `n`.`id`\n                       AND `n`.`id` = '" . $this->fields["networkequipments_id"] . "'\n                       AND `n`.`is_deleted` = '0'\n                       AND `n`.`is_template` = '0'";
     if ($this->fields["vlans_id"] > "0") {
         $query .= " AND `nv`.`networkports_id` = `np`.`id`\n                     AND vlans_id= '" . $this->fields["vlans_id"] . "' ";
     }
     $query .= "ORDER BY `np`.`ip` ASC ";
     if ($result = $DB->query($query)) {
         while ($data = $DB->fetch_array($result)) {
             if ($PluginArchiresView->fields["display_state"] != 0) {
                 $devices['NetworkEquipment'][$data["items_id"]]["states_id"] = $data["states_id"];
             }
             $devices['NetworkEquipment'][$data["items_id"]]["name"] = $data["name"];
             $devices['NetworkEquipment'][$data["items_id"]]["type"] = $data["type"];
             $devices['NetworkEquipment'][$data["items_id"]]["users_id"] = $data["users_id"];
             $devices['NetworkEquipment'][$data["items_id"]]["groups_id"] = $data["groups_id"];
             $devices['NetworkEquipment'][$data["items_id"]]["contact"] = $data["contact"];
             $devices['NetworkEquipment'][$data["items_id"]]["ip"] = $data["nip"];
             $devices['NetworkEquipment'][$data["items_id"]]["entity"] = $data["entities_id"];
             $devices['NetworkEquipment'][$data["items_id"]]["locations_id"] = $data["locations_id"];
             $ports[$data["id"]]["items_id"] = $data["items_id"];
             $ports[$data["id"]]["logical_number"] = $data["logical_number"];
             $ports[$data["id"]]["networkinterfaces_id"] = $data["networkinterfaces_id"];
             $ports[$data["id"]]["ip"] = $data["ip"];
             $ports[$data["id"]]["netmask"] = $data["netmask"];
             $ports[$data["id"]]["namep"] = $data["namep"];
             $ports[$data["id"]]["idp"] = $data["id"];
             $ports[$data["id"]]["itemtype"] = 'NetworkEquipment';
         }
     }
     if ($for) {
         return $devices;
     }
     return $ports;
 }