/**
  * Update config of a new software
  *
  * This function create a new software in GLPI with some general datas.
  *
  * @param $computers_id integer : glpi computer id.
  * @param $ocsid integer : ocs computer id (ID).
  * @param $ocsservers_id integer : ocs server id
  * @param $cfg_ocs array : ocs config
  * @param $dohistory array:
  *
  *@return Nothing (void).
  **/
 static function updateDisk($computers_id, $ocsid, $ocsservers_id, $cfg_ocs, $dohistory)
 {
     global $PluginOcsinventoryngDBocs, $DB;
     $already_processed = array();
     self::checkOCSconnection($ocsservers_id);
     $query = "SELECT*\n                FROM `drives`\n                WHERE `HARDWARE_ID` = '{$ocsid}'";
     $result = $PluginOcsinventoryngDBocs->query($query);
     $d = new ComputerDisk();
     if ($PluginOcsinventoryngDBocs->numrows($result) > 0) {
         while ($line = $PluginOcsinventoryngDBocs->fetch_array($result)) {
             $line = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line));
             // Only not empty disk
             if ($line['TOTAL'] > 0) {
                 $disk = array();
                 $disk['computers_id'] = $computers_id;
                 $disk['is_dynamic'] = 1;
                 // TYPE : vxfs / ufs  : VOLUMN = mount / FILESYSTEM = device
                 if (in_array($line['TYPE'], array("vxfs", "ufs"))) {
                     $disk['name'] = $line['VOLUMN'];
                     $disk['mountpoint'] = $line['VOLUMN'];
                     $disk['device'] = $line['FILESYSTEM'];
                     $disk['filesystems_id'] = Dropdown::importExternal('Filesystem', $line["TYPE"]);
                 } else {
                     if (in_array($line['FILESYSTEM'], array('ext2', 'ext3', 'ext4', 'ffs', 'fuseblk', 'fusefs', 'hfs', 'jfs', 'jfs2', 'Journaled HFS+', 'nfs', 'smbfs', 'reiserfs', 'vmfs', 'VxFS', 'ufs', 'xfs', 'zfs'))) {
                         // Try to detect mount point : OCS database is dirty
                         $disk['mountpoint'] = $line['VOLUMN'];
                         $disk['device'] = $line['TYPE'];
                         // Found /dev in VOLUMN : invert datas
                         if (strstr($line['VOLUMN'], '/dev/')) {
                             $disk['mountpoint'] = $line['TYPE'];
                             $disk['device'] = $line['VOLUMN'];
                         }
                         if ($line['FILESYSTEM'] == "vmfs") {
                             $disk['name'] = basename($line['TYPE']);
                         } else {
                             $disk['name'] = $disk['mountpoint'];
                         }
                         $disk['filesystems_id'] = Dropdown::importExternal('Filesystem', $line["FILESYSTEM"]);
                     } else {
                         if (in_array($line['FILESYSTEM'], array('FAT', 'FAT32', 'NTFS'))) {
                             if (!empty($line['VOLUMN'])) {
                                 $disk['name'] = $line['VOLUMN'];
                             } else {
                                 $disk['name'] = $line['LETTER'];
                             }
                             $disk['mountpoint'] = $line['LETTER'];
                             $disk['filesystems_id'] = Dropdown::importExternal('Filesystem', $line["FILESYSTEM"]);
                         }
                     }
                 }
                 // Ok import disk
                 if (isset($disk['name']) && !empty($disk["name"])) {
                     $disk['totalsize'] = $line['TOTAL'];
                     $disk['freesize'] = $line['FREE'];
                     $query = "SELECT `id`\n                            FROM `glpi_computerdisks`\n                            WHERE `computers_id`='{$computers_id}'\n                               AND `name`='" . $disk['name'] . "'\n                               AND `is_dynamic`";
                     $results = $DB->query($query);
                     if ($DB->numrows($results) == 1) {
                         $id = $DB->result($results, 0, 'id');
                     } else {
                         $id = false;
                     }
                     if (!$id) {
                         $d->reset();
                         if (!$dohistory) {
                             $disk['_no_history'] = true;
                         }
                         $disk['is_dynamic'] = 1;
                         $id_disk = $d->add($disk);
                         $already_processed[] = $id_disk;
                     } else {
                         // Only update if needed
                         if ($d->getFromDB($id)) {
                             // Update on type, total size change or variation of 5%
                             if ($d->fields['totalsize'] != $disk['totalsize'] || $d->fields['filesystems_id'] != $disk['filesystems_id'] || abs($disk['freesize'] - $d->fields['freesize']) / $disk['totalsize'] > 0.05) {
                                 $toupdate['id'] = $id;
                                 $toupdate['totalsize'] = $disk['totalsize'];
                                 $toupdate['freesize'] = $disk['freesize'];
                                 $toupdate['filesystems_id'] = $disk['filesystems_id'];
                                 $d->update($toupdate);
                             }
                             $already_processed[] = $id;
                         }
                     }
                 }
             }
         }
     }
     // Delete Unexisting Items not found in OCS
     //Look for all ununsed disks
     $query = "SELECT `id`\n                FROM `glpi_computerdisks`\n                WHERE `computers_id`='{$computers_id}'\n                   AND `is_dynamic`";
     if (!empty($already_processed)) {
         $query .= "AND `id` NOT IN (" . implode(',', $already_processed) . ")";
     }
     foreach ($DB->request($query) as $data) {
         //Delete all connexions
         $d->delete(array('id' => $data['id'], '_ocsservers_id' => $ocsservers_id), true);
     }
 }
 /**
  * Update config of a new software
  *
  * This function create a new software in GLPI with some general datas.
  *
  * @param $computers_id integer : glpi computer id.
  * @param $ocsid integer : ocs computer id (ID).
  * @param $ocsservers_id integer : ocs server id
  * @param $cfg_ocs array : ocs config
  * @param $import_disk array : already imported softwares
  * @param $dohistory array : already imported softwares
  *
  *@return Nothing (void).
  **/
 static function updateDisk($computers_id, $ocsid, $ocsservers_id, $cfg_ocs, $import_disk, $dohistory)
 {
     global $DBocs;
     self::checkOCSconnection($ocsservers_id);
     $query = "SELECT *\n                FROM `drives`\n                WHERE `HARDWARE_ID` = '{$ocsid}'";
     $result = $DBocs->query($query);
     $d = new ComputerDisk();
     if ($DBocs->numrows($result) > 0) {
         while ($line = $DBocs->fetch_array($result)) {
             $line = clean_cross_side_scripting_deep(addslashes_deep($line));
             // Only not empty disk
             if ($line['TOTAL'] > 0) {
                 $disk = array();
                 $disk['computers_id'] = $computers_id;
                 // TYPE : vxfs / ufs  : VOLUMN = mount / FILESYSTEM = device
                 if (in_array($line['TYPE'], array("vxfs", "ufs"))) {
                     $disk['name'] = $line['VOLUMN'];
                     $disk['mountpoint'] = $line['VOLUMN'];
                     $disk['device'] = $line['FILESYSTEM'];
                     $disk['filesystems_id'] = Dropdown::importExternal('Filesystem', $line["TYPE"]);
                 } else {
                     if (in_array($line['FILESYSTEM'], array('ext2', 'ext3', 'ext4', 'ffs', 'fuseblk', 'fusefs', 'hfs', 'jfs', 'jfs2', 'Journaled HFS+', 'nfs', 'smbfs', 'reiserfs', 'vmfs', 'VxFS', 'ufs', 'xfs', 'zfs'))) {
                         // Try to detect mount point : OCS database is dirty
                         $disk['mountpoint'] = $line['VOLUMN'];
                         $disk['device'] = $line['TYPE'];
                         // Found /dev in VOLUMN : invert datas
                         if (strstr($line['VOLUMN'], '/dev/')) {
                             $disk['mountpoint'] = $line['TYPE'];
                             $disk['device'] = $line['VOLUMN'];
                         }
                         $disk['name'] = $disk['mountpoint'];
                         $disk['filesystems_id'] = Dropdown::importExternal('Filesystem', $line["FILESYSTEM"]);
                     } else {
                         if (in_array($line['FILESYSTEM'], array('FAT', 'FAT32', 'NTFS'))) {
                             if (!empty($line['VOLUMN'])) {
                                 $disk['name'] = $line['VOLUMN'];
                             } else {
                                 $disk['name'] = $line['LETTER'];
                             }
                             $disk['mountpoint'] = $line['LETTER'];
                             $disk['filesystems_id'] = Dropdown::importExternal('Filesystem', $line["FILESYSTEM"]);
                         }
                     }
                 }
                 // Ok import disk
                 if (isset($disk['name']) && !empty($disk["name"])) {
                     $disk['totalsize'] = $line['TOTAL'];
                     $disk['freesize'] = $line['FREE'];
                     if (!in_array(stripslashes($disk["name"]), $import_disk)) {
                         $d->reset();
                         if (!$dohistory) {
                             $disk['_no_history'] = true;
                         }
                         $id_disk = $d->add($disk);
                         if ($id_disk) {
                             self::addToOcsArray($computers_id, array($id_disk => $disk["name"]), "import_disk");
                         }
                     } else {
                         // Only update sizes if needed
                         $id = array_search(stripslashes($disk["name"]), $import_disk);
                         if ($d->getFromDB($id)) {
                             // Update on total size change or variation of 5%
                             if ($d->fields['totalsize'] != $disk['totalsize'] || abs($disk['freesize'] - $d->fields['freesize']) / $disk['totalsize'] > 0.05) {
                                 $toupdate['id'] = $id;
                                 $toupdate['totalsize'] = $disk['totalsize'];
                                 $toupdate['freesize'] = $disk['freesize'];
                                 $d->update($toupdate);
                             }
                             unset($import_disk[$id]);
                         }
                     }
                 }
             }
         }
     }
     // Delete Unexisting Items not found in OCS
     if (count($import_disk)) {
         foreach ($import_disk as $key => $val) {
             $d->delete(array("id" => $key));
             self::deleteInOcsArray($computers_id, $key, "import_device");
         }
     }
 }