예제 #1
0
 /**
  * \brief update all related elements after adding or updating an element
  *
  * splitInputForElements() prepare the data for adding or updating NetworkPortInstantiation and
  * NetworkName. This method will update NetworkPortInstantiation and NetworkName. I must be call
  * after NetworkPort::add or NetworkPort::update otherwise, the networkport ID will not be known
  * and the dependencies won't have a valid items_id field.
  *
  * @since version 0.84
  *
  * @param $history   (default 1)
  *
  * @see splitInputForElements() for preparing the input
  **/
 function updateDependencies($history = 1)
 {
     $instantiation = $this->getInstantiation();
     if ($instantiation !== false && count($this->input_for_instantiation) > 0) {
         $this->input_for_instantiation['networkports_id'] = $this->getID();
         if ($instantiation->isNewID($instantiation->getID())) {
             $instantiation->add($this->input_for_instantiation, $history);
         } else {
             $instantiation->update($this->input_for_instantiation, $history);
         }
     }
     unset($this->input_for_instantiation);
     if (count($this->input_for_NetworkName) > 0 && !isset($_POST['several'])) {
         // Check to see if the NetworkName is empty
         $empty_networkName = empty($this->input_for_NetworkName['name']) && empty($this->input_for_NetworkName['fqdns_id']);
         if ($empty_networkName && is_array($this->input_for_NetworkName['_ipaddresses'])) {
             foreach ($this->input_for_NetworkName['_ipaddresses'] as $ip_address) {
                 if (!empty($ip_address)) {
                     $empty_networkName = false;
                     break;
                 }
             }
         }
         $network_name = new NetworkName();
         if (isset($this->input_for_NetworkName['id'])) {
             if ($empty_networkName) {
                 // If the NetworkName is empty, then delete it !
                 $network_name->delete($this->input_for_NetworkName, $history);
             } else {
                 // Else, update it
                 $network_name->update($this->input_for_NetworkName, $history);
             }
         } else {
             if (!$empty_networkName) {
                 // Only create a NetworkName if it is not empty
                 $this->input_for_NetworkName['itemtype'] = 'NetworkPort';
                 $this->input_for_NetworkName['items_id'] = $this->getID();
                 $network_name->add($this->input_for_NetworkName, $history);
             }
         }
     }
     unset($this->input_for_NetworkName);
     if (count($this->input_for_NetworkPortConnect) > 0) {
         if (isset($this->input_for_NetworkPortConnect['networkports_id_1']) && isset($this->input_for_NetworkPortConnect['networkports_id_2']) && !empty($this->input_for_NetworkPortConnect['networkports_id_2'])) {
             $nn = new NetworkPort_NetworkPort();
             $nn->add($this->input_for_NetworkPortConnect);
         }
     }
     unset($this->input_for_NetworkPortConnect);
 }
 /**
  * @param $mac
  * @param $name
  * @param $computers_id
  * @param $instantiation_type
  * @param $inst_input
  * @param $ips
  * @param $check_name
  * @param $dohistory
  * @param $already_known_ports
  * @return ID
  */
 private static function updateNetworkPort($mac, $name, $computers_id, $instantiation_type, $inst_input, $ips, $check_name, $dohistory, $already_known_ports)
 {
     global $DB;
     $network_port = new NetworkPort();
     // Then, find or create the base NetworkPort
     $query = "SELECT `id`, `is_dynamic`\n                FROM `glpi_networkports`\n                WHERE `itemtype` = 'Computer'\n                   AND `items_id` = '{$computers_id}'\n                   AND `mac` = '{$mac}'";
     // If there is virtual ports, then, filter by port's name
     if ($check_name) {
         $query .= " AND `name` = '{$name}'";
     }
     if (count($already_known_ports) > 0) {
         $query .= " AND `id` NOT IN (" . implode(',', $already_known_ports) . ")";
     }
     // We order by is_dynamic to be sure to get the static ones first !
     $query .= " ORDER BY `is_dynamic`, `id`";
     $ports = $DB->request($query);
     if ($ports->numrows() == 0) {
         $port_input = array('name' => $name, 'mac' => $mac, 'items_id' => $computers_id, 'itemtype' => 'Computer', '_no_history' => !$dohistory, 'instantiation_type' => $instantiation_type, '_create_children' => 1, 'is_dynamic' => 1, 'is_deleted' => 0);
         $networkports_id = $network_port->add($port_input, array(), $dohistory);
         if ($networkports_id === false) {
             return -1;
         }
         $inst_input['networkports_id'] = $networkports_id;
         $instantiation = $network_port->getInstantiation();
         $instantiation->update($inst_input);
         unset($instantiation);
     } else {
         $line = $ports->next();
         $networkports_id = $line['id'];
         $network_port->getFromDB($networkports_id);
         if (!$check_name && $network_port->fields['name'] != $name) {
             $port_input = array('id' => $network_port->getID(), 'name' => $name, 'is_dynamic' => 1);
             $network_port->update($port_input);
         }
         if ($network_port->fields['instantiation_type'] != $instantiation_type && $network_port->fields['is_dynamic'] == 1) {
             $network_port->switchInstantiationType($instantiation_type);
             $inst_input['networkports_id'] = $network_port->getID();
             $instantiation = $network_port->getInstantiation();
             $instantiation->add($inst_input);
             unset($instantiation);
         }
         if ($network_port->fields['instantiation_type'] == $instantiation_type) {
             $instantiation = $network_port->getInstantiation();
             $inst_input['id'] = $instantiation->getID();
             $inst_input['networkports_id'] = $network_port->getID();
             $instantiation->update($inst_input);
             unset($instantiation);
         }
     }
     if ($network_port->isNewItem()) {
         return -1;
     }
     $network_name = new NetworkName();
     $query = "SELECT `id`, `is_dynamic`\n                FROM `glpi_networknames`\n                WHERE `itemtype` = 'NetworkPort'\n                   AND `items_id` = '{$networkports_id}'\n                ORDER BY `is_dynamic`";
     if (!$ips || count($ips) == 0) {
         foreach ($DB->request($query) as $line) {
             if ($line['is_dynamic']) {
                 $network_name->delete($line, true, $dohistory);
             }
         }
     } else {
         $names = $DB->request($query);
         if ($names->numrows() == 0) {
             $name_input = array('itemtype' => 'NetworkPort', 'items_id' => $networkports_id, 'is_dynamic' => 1, 'is_deleted' => 0, '_no_history' => !$dohistory, 'name' => 'OCS-INVENTORY-NG');
             $networknames_id = $network_name->add($name_input);
         } else {
             $line = $names->next();
             $networknames_id = $line['id'];
             foreach ($names as $line) {
                 if ($line['is_dynamic'] == 1 && $line['id'] != $networknames_id) {
                     $network_port->delete($line, true, $dohistory);
                 }
             }
         }
         $ip_address = new IPAddress();
         $already_known_addresses = array();
         $query = "SELECT `id`, `name`, `is_dynamic`, `mainitems_id`\n                   FROM `glpi_ipaddresses`\n                   WHERE `itemtype` = 'NetworkName'\n                     AND `items_id` = '{$networknames_id}'\n                   ORDER BY `is_dynamic`";
         foreach ($DB->request($query) as $line) {
             if (in_array($line['name'], $ips) && !empty($line['mainitems_id'])) {
                 $already_known_addresses[] = $line['id'];
                 $ips = array_diff($ips, array($line['name']));
             } elseif ($line['is_dynamic'] == 1) {
                 $ip_address->delete($line, true, $dohistory);
             }
         }
     }
     if ($ips) {
         foreach ($ips as $ip) {
             $ip_input = array('name' => $ip, 'itemtype' => 'NetworkName', 'items_id' => $networknames_id, '_no_history' => !$dohistory, 'is_dynamic' => 1, 'is_deleted' => 0);
             $ip_address->add($ip_input);
         }
     }
     return $network_port->getID();
 }
예제 #3
0
*/
include '../inc/includes.php';
$nn = new NetworkName();
if (isset($_POST["add"])) {
    $nn->check(-1, CREATE, $_POST);
    if ($newID = $nn->add($_POST)) {
        Event::log($newID, "networkname", 5, "inventory", sprintf(__('%s adds an item'), $_SESSION["glpiname"]));
        if ($_SESSION['glpibackcreated']) {
            Html::redirect($nn->getFormURL() . "?id=" . $newID);
        }
    }
    Html::back();
} else {
    if (isset($_POST["purge"])) {
        $nn->check($_POST['id'], PURGE);
        $nn->delete($_POST, 1);
        Event::log($_POST["id"], "networkname", 5, "inventory", sprintf(__('%s purges an item'), $_SESSION["glpiname"]));
        if ($node = getItemForItemtype($nn->fields["itemtype"])) {
            if ($node->can($nn->fields["items_id"], READ)) {
                Html::redirect($node->getLinkURL());
            }
        }
        $nn->redirectToList();
    } else {
        if (isset($_POST["update"])) {
            $nn->check($_POST['id'], UPDATE);
            $nn->update($_POST);
            Event::log($_POST["id"], "networkname", 4, "inventory", sprintf(__('%s updates an item'), $_SESSION["glpiname"]));
            Html::back();
        } else {
            if (isset($_POST["unaffect"])) {
예제 #4
0
 --------------------------------------------------------------------------
*/
/** @file
* @brief
*/
include '../inc/includes.php';
$nn = new NetworkName();
if (isset($_POST["add"])) {
    $nn->check(-1, 'w', $_POST);
    $newID = $nn->add($_POST);
    Event::log($newID, "networkname", 5, "inventory", sprintf(__('%s adds an item'), $_SESSION["glpiname"]));
    Html::back();
} else {
    if (isset($_POST["delete"])) {
        $nn->check($_POST['id'], 'd');
        $nn->delete($_POST);
        Event::log($_POST["id"], "networkname", 5, "inventory", sprintf(__('%s purges an item'), $_SESSION["glpiname"]));
        if ($node = getItemForItemtype($nn->fields["itemtype"])) {
            if ($node->can($nn->fields["items_id"], 'r')) {
                Html::redirect($node->getLinkURL());
            }
        }
        $nn->redirectToList();
    } else {
        if (isset($_POST["update"])) {
            $nn->check($_POST['id'], 'w');
            $nn->update($_POST);
            Event::log($_POST["id"], "networkname", 4, "inventory", sprintf(__('%s updates an item'), $_SESSION["glpiname"]));
            Html::back();
        } else {
            if (isset($_POST["unaffect"])) {