static function pdfForItem(PluginPdfSimplePDF $pdf, CommonDBTM $item)
 {
     global $DB;
     $ID = $item->getField('id');
     $type = $item->getType();
     $crit = $type == 'Software' ? 'softwares_id' : 'id';
     if ($type == 'Software') {
         $crit = 'softwares_id';
         // Software ID
         $innerjoin = "INNER JOIN `glpi_softwareversions`\n                           ON (`glpi_computers_softwareversions`.`softwareversions_id`\n                               = `glpi_softwareversions`.`id`)";
         $where = "WHERE `glpi_softwareversions`.`softwares_id` = '" . $ID . "'";
     } else {
         $crit = 'id';
         //SoftwareVersion ID
         $innerjoin = '';
         $where = "WHERE `glpi_computers_softwareversions`.`softwareversions_id` = '" . $ID . "'";
     }
     $query_number = "SELECT COUNT(*) AS cpt\n                       FROM `glpi_computers_softwareversions`\n                       {$innerjoin}\n                       INNER JOIN `glpi_computers`\n                           ON (`glpi_computers_softwareversions`.`computers_id` = `glpi_computers`.`id`)\n                       {$where}" . getEntitiesRestrictRequest(' AND', 'glpi_computers') . "\n                            AND `glpi_computers`.`is_deleted` = '0'\n                            AND `glpi_computers`.`is_template` = '0'";
     $total = 0;
     if ($result = $DB->query($query_number)) {
         $total = $DB->result($result, 0, 0);
     }
     $query = "SELECT DISTINCT `glpi_computers_softwareversions`.*,\n                          `glpi_computers`.`name` AS compname,\n                          `glpi_computers`.`id` AS cID,\n                          `glpi_computers`.`serial`,\n                          `glpi_computers`.`otherserial`,\n                          `glpi_users`.`name` AS username,\n                          `glpi_users`.`id` AS userid,\n                          `glpi_users`.`realname` AS userrealname,\n                          `glpi_users`.`firstname` AS userfirstname,\n                          `glpi_softwareversions`.`name` AS version,\n                          `glpi_softwareversions`.`id` AS vID,\n                          `glpi_softwareversions`.`softwares_id` AS sID,\n                          `glpi_softwareversions`.`name` AS vername,\n                          `glpi_entities`.`completename` AS entity,\n                          `glpi_locations`.`completename` AS location,\n                          `glpi_states`.`name` AS state,\n                          `glpi_groups`.`name` AS groupe\n                FROM `glpi_computers_softwareversions`\n                INNER JOIN `glpi_softwareversions`\n                     ON (`glpi_computers_softwareversions`.`softwareversions_id`\n                              = `glpi_softwareversions`.`id`)\n                INNER JOIN `glpi_computers`\n                     ON (`glpi_computers_softwareversions`.`computers_id` = `glpi_computers`.`id`)\n                LEFT JOIN `glpi_entities` ON (`glpi_computers`.`entities_id` = `glpi_entities`.`id`)\n                LEFT JOIN `glpi_locations`\n                     ON (`glpi_computers`.`locations_id` = `glpi_locations`.`id`)\n                LEFT JOIN `glpi_states` ON (`glpi_computers`.`states_id` = `glpi_states`.`id`)\n                LEFT JOIN `glpi_groups` ON (`glpi_computers`.`groups_id` = `glpi_groups`.`id`)\n                LEFT JOIN `glpi_users` ON (`glpi_computers`.`users_id` = `glpi_users`.`id`)\n                WHERE (`glpi_softwareversions`.`{$crit}` = '{$ID}') " . getEntitiesRestrictRequest(' AND', 'glpi_computers') . "\n                      AND `glpi_computers`.`is_deleted` = '0'\n                      AND `glpi_computers`.`is_template` = '0'\n                ORDER BY version, compname\n                LIMIT 0," . intval($_SESSION['glpilist_limit']);
     $pdf->setColumnsSize(100);
     if (($result = $DB->query($query)) && ($number = $DB->numrows($result)) > 0) {
         if ($number == $total) {
             $pdf->displayTitle('<b>' . sprintf(__('%1$s: %2$s'), _n('Installation', 'Installations', 2), $number) . "</b>");
         } else {
             $pdf->displayTitle('<b>' . sprintf(__('%1$s: %2$s'), _n('Installation', 'Installations', 2), $number / $total) . "</b>");
         }
         $pdf->setColumnsSize(12, 16, 15, 15, 22, 20);
         $pdf->displayTitle('<b><i>' . _n('Version', 'Versions', 2), __('Name'), __('Serial number'), __('Inventory number'), __('Location'), _n('License', 'Licenses', 2) . '</i></b>');
         while ($data = $DB->fetch_assoc($result)) {
             $compname = $data['compname'];
             if (empty($compname) || $_SESSION['glpiis_ids_visible']) {
                 $compname = sprintf(__('%1$s (%2$s)'), $compname, $data['cID']);
             }
             $lics = Computer_SoftwareLicense::GetLicenseForInstallation($data['cID'], $data['vID']);
             $tmp = array();
             if (count($lics)) {
                 foreach ($lics as $lic) {
                     $licname = $lic['name'];
                     if (!empty($lic['type'])) {
                         $licname = sprintf(__('%1$s (%2$s)'), $licname, $lic['type']);
                     }
                     $tmp[] = $licname;
                 }
             }
             $pdf->displayLine($data['version'], $compname, $data['serial'], $data['otherserial'], $data['location'], implode(', ', $tmp));
         }
     } else {
         $pdf->displayTitle('<b>' . _n('Installation', 'Installations', 2) . '</b>');
         $pdf->displayLine(__('No item found'));
     }
     $pdf->displaySpace();
 }
 /**
  * Show installations of a software
  *
  * @param $searchID valeur to the ID to search
  * @param $crit to search : softwares_id (software) or id (version)
  *
  * @return nothing
  **/
 private static function showInstallations($searchID, $crit)
 {
     global $DB, $CFG_GLPI, $LANG;
     if (!haveRight("software", "r") || !$searchID) {
         return false;
     }
     $canedit = haveRight("software", "w");
     $canshowcomputer = haveRight("computer", "r");
     if (isset($_REQUEST["start"])) {
         $start = $_REQUEST["start"];
     } else {
         $start = 0;
     }
     if (isset($_REQUEST["order"]) && $_REQUEST["order"] == "DESC") {
         $order = "DESC";
     } else {
         $order = "ASC";
     }
     if (isset($_REQUEST["sort"]) && !empty($_REQUEST["sort"])) {
         // manage several param like location,compname :  order first
         $tmp = explode(",", $_REQUEST["sort"]);
         $sort = "`" . implode("` {$order},`", $tmp) . "`";
     } else {
         if ($crit == "softwares_id") {
             $sort = "`entity` {$order}, `version`, `compname`";
         } else {
             $sort = "`entity` {$order}, `compname`";
         }
     }
     // Total Number of events
     if ($crit == "softwares_id") {
         // Software ID
         $query_number = "SELECT COUNT(*) AS cpt\n                          FROM `glpi_computers_softwareversions`\n                          INNER JOIN `glpi_softwareversions`\n                              ON (`glpi_computers_softwareversions`.`softwareversions_id`\n                                    = `glpi_softwareversions`.`id`)\n                          INNER JOIN `glpi_computers`\n                              ON (`glpi_computers_softwareversions`.`computers_id`\n                                    = `glpi_computers`.`id`)\n                          WHERE `glpi_softwareversions`.`softwares_id` = '{$searchID}'" . getEntitiesRestrictRequest(' AND', 'glpi_computers') . "\n                                AND `glpi_computers`.`is_deleted` = '0'\n                                AND `glpi_computers`.`is_template` = '0'";
     } else {
         //SoftwareVersion ID
         $query_number = "SELECT COUNT(*) AS cpt\n                          FROM `glpi_computers_softwareversions`\n                          INNER JOIN `glpi_computers`\n                              ON (`glpi_computers_softwareversions`.`computers_id`\n                                    = `glpi_computers`.`id`)\n                          WHERE `glpi_computers_softwareversions`.`softwareversions_id` = '{$searchID}'" . getEntitiesRestrictRequest(' AND', 'glpi_computers') . "\n                                AND `glpi_computers`.`is_deleted` = '0'\n                                AND `glpi_computers`.`is_template` = '0'";
     }
     $number = 0;
     if ($result = $DB->query($query_number)) {
         $number = $DB->result($result, 0, 0);
     }
     echo "<div class='center'>";
     if ($number < 1) {
         echo "<table class='tab_cadre_fixe'>";
         echo "<tr><th>" . $LANG['search'][15] . "</th></tr>";
         echo "</table></div>\n";
         return;
     }
     // Display the pager
     printAjaxPager($LANG['software'][19], $start, $number);
     $query = "SELECT DISTINCT `glpi_computers_softwareversions`.*,\n                       `glpi_computers`.`name` AS compname,\n                       `glpi_computers`.`id` AS cID,\n                       `glpi_computers`.`serial`,\n                       `glpi_computers`.`otherserial`,\n                       `glpi_users`.`name` AS username,\n                       `glpi_users`.`id` AS userid,\n                       `glpi_users`.`realname` AS userrealname,\n                       `glpi_users`.`firstname` AS userfirstname,\n                       `glpi_softwareversions`.`name` AS version,\n                       `glpi_softwareversions`.`id` AS vID,\n                       `glpi_softwareversions`.`softwares_id` AS sID,\n                       `glpi_softwareversions`.`name` AS vername,\n                       `glpi_entities`.`completename` AS entity,\n                       `glpi_locations`.`completename` AS location,\n                       `glpi_states`.`name` AS state,\n                       `glpi_groups`.`name` AS groupe\n                FROM `glpi_computers_softwareversions`\n                INNER JOIN `glpi_softwareversions`\n                     ON (`glpi_computers_softwareversions`.`softwareversions_id`\n                           = `glpi_softwareversions`.`id`)\n                INNER JOIN `glpi_computers`\n                     ON (`glpi_computers_softwareversions`.`computers_id` = `glpi_computers`.`id`)\n                LEFT JOIN `glpi_entities` ON (`glpi_computers`.`entities_id` = `glpi_entities`.`id`)\n                LEFT JOIN `glpi_locations`\n                     ON (`glpi_computers`.`locations_id` = `glpi_locations`.`id`)\n                LEFT JOIN `glpi_states` ON (`glpi_computers`.`states_id` = `glpi_states`.`id`)\n                LEFT JOIN `glpi_groups` ON (`glpi_computers`.`groups_id` = `glpi_groups`.`id`)\n                LEFT JOIN `glpi_users` ON (`glpi_computers`.`users_id` = `glpi_users`.`id`)\n                WHERE (`glpi_softwareversions`.`{$crit}` = '{$searchID}') " . getEntitiesRestrictRequest(' AND', 'glpi_computers') . "\n                       AND `glpi_computers`.`is_deleted` = '0'\n                       AND `glpi_computers`.`is_template` = '0'\n                ORDER BY {$sort} {$order}\n                LIMIT " . intval($start) . "," . intval($_SESSION['glpilist_limit']);
     $rand = mt_rand();
     if ($result = $DB->query($query)) {
         if ($data = $DB->fetch_assoc($result)) {
             $softwares_id = $data['sID'];
             $soft = new Software();
             $showEntity = $soft->getFromDB($softwares_id) && $soft->isRecursive();
             $linkUser = haveRight('user', 'r');
             $title = $LANG['help'][31] . " = " . $soft->fields["name"];
             if ($crit == "id") {
                 $title .= " - " . $data["vername"];
             }
             initNavigateListItems('Computer', $title);
             $sort_img = "<img src='" . $CFG_GLPI["root_doc"] . "/pics/" . ($order == "DESC" ? "puce-down.png" : "puce-up.png") . "' alt='' title=''>";
             if ($canedit) {
                 echo "<form name='softinstall" . $rand . "' id='softinstall" . $rand . "' method='post'\n                      action='" . $CFG_GLPI["root_doc"] . "/front/computer_softwareversion.form.php'>";
                 echo "<input type='hidden' name='softwares_id' value='{$softwares_id}'>";
                 echo "<table class='tab_cadre_fixehov'><tr>";
                 echo "<th>&nbsp;</th>";
             } else {
                 echo "<table class='tab_cadre_fixehov'><tr>";
             }
             if ($crit == "softwares_id") {
                 echo "<th>" . ($sort == "`vername`" ? $sort_img : "") . "<a href='javascript:reloadTab(\"sort=vername&amp;order=" . ($order == "ASC" ? "DESC" : "ASC") . "&amp;start=0\");'>" . $LANG['software'][5] . "</a></th>";
             }
             echo "<th>" . ($sort == "`compname`" ? $sort_img : "") . "<a href='javascript:reloadTab(\"sort=compname&amp;order=" . ($order == "ASC" ? "DESC" : "ASC") . "&amp;start=0\");'>" . $LANG['common'][16] . "</a></th>";
             if ($showEntity) {
                 echo "<th>" . (strstr($sort, "entity") ? $sort_img : "") . "<a href='javascript:reloadTab(\"sort=entity,compname&amp;order=" . ($order == "ASC" ? "DESC" : "ASC") . "&amp;start=0\");'>" . $LANG['entity'][0] . "</a></th>";
             }
             echo "<th>" . ($sort == "`serial`" ? $sort_img : "") . "<a href='javascript:reloadTab(\"sort=serial&amp;order=" . ($order == "ASC" ? "DESC" : "ASC") . "&amp;start=0\");'>" . $LANG['common'][19] . "</a></th>";
             echo "<th>" . ($sort == "`otherserial`" ? $sort_img : "") . "<a href='javascript:reloadTab(\"sort=otherserial&amp;order=" . ($order == "ASC" ? "DESC" : "ASC") . "&amp;start=0\");'>" . $LANG['common'][20] . "</a></th>";
             echo "<th>" . (strstr($sort, "`location`") ? $sort_img : "") . "<a href='javascript:reloadTab(\"sort=location,compname&amp;order=" . ($order == "ASC" ? "DESC" : "ASC") . "&amp;start=0\");'>" . $LANG['common'][15] . "</a></th>";
             echo "<th>" . (strstr($sort, "state") ? $sort_img : "") . "<a href='javascript:reloadTab(\"sort=state,compname&amp;order=" . ($order == "ASC" ? "DESC" : "ASC") . "&amp;start=0\");'>" . $LANG['state'][0] . "</a></th>";
             echo "<th>" . (strstr($sort, "groupe") ? $sort_img : "") . "<a href='javascript:reloadTab(\"sort=groupe,compname&amp;order=" . ($order == "ASC" ? "DESC" : "ASC") . "&amp;start=0\");'>" . $LANG['common'][35] . "</a></th>";
             echo "<th>" . (strstr($sort, "username") ? $sort_img : "") . "<a href='javascript:reloadTab(\"sort=username,compname&amp;order=" . ($order == "ASC" ? "DESC" : "ASC") . "&amp;start=0\");'>" . $LANG['common'][34] . "</a></th>";
             echo "<th>" . ($sort == "`lname`" ? $sort_img : "") . "<a href='javascript:reloadTab(\"sort=lname&amp;order=" . ($order == "ASC" ? "DESC" : "ASC") . "&amp;start=0\");'>" . $LANG['software'][11] . "</a></th>";
             echo "</tr>\n";
             do {
                 addToNavigateListItems('Computer', $data["cID"]);
                 echo "<tr class='tab_bg_2'>";
                 if ($canedit) {
                     echo "<td><input type='checkbox' name='item[" . $data["id"] . "]' value='1'></td>";
                 }
                 if ($crit == "softwares_id") {
                     echo "<td><a href='softwareversion.form.php?id=" . $data['vID'] . "'>" . $data['version'];
                     echo "</a></td>";
                 }
                 $compname = $data['compname'];
                 if (empty($compname) || $_SESSION['glpiis_ids_visible']) {
                     $compname .= " (" . $data['cID'] . ")";
                 }
                 if ($canshowcomputer) {
                     echo "<td><a href='computer.form.php?id=" . $data['cID'] . "'>{$compname}</a></td>";
                 } else {
                     echo "<td>" . $compname . "</td>";
                 }
                 if ($showEntity) {
                     echo "<td>" . (empty($data['entity']) ? $LANG['entity'][2] : $data['entity']) . "</td>";
                 }
                 echo "<td>" . $data['serial'] . "</td>";
                 echo "<td>" . $data['otherserial'] . "</td>";
                 echo "<td>" . $data['location'] . "</td>";
                 echo "<td>" . $data['state'] . "</td>";
                 echo "<td>" . $data['groupe'] . "</td>";
                 echo "<td>" . formatUserName($data['userid'], $data['username'], $data['userrealname'], $data['userfirstname'], $linkUser) . "</td>";
                 $lics = Computer_SoftwareLicense::GetLicenseForInstallation($data['cID'], $data['vID']);
                 echo "<td>";
                 if (count($lics)) {
                     foreach ($lics as $data) {
                         echo "<a href='softwarelicense.form.php?id=" . $data['id'] . "'>" . $data['name'];
                         echo "</a> - " . $data['serial'];
                         if (!empty($data['type'])) {
                             echo "&nbsp;(" . $data['type'] . ")";
                         }
                         echo "<br>";
                     }
                 }
                 echo "</td>";
                 echo "</tr>\n";
             } while ($data = $DB->fetch_assoc($result));
             echo "</table>\n";
             if ($canedit) {
                 openArrowMassive("softinstall" . $rand . "", true);
                 SoftwareVersion::dropdown(array('name' => 'versionID', 'softwares_id' => $softwares_id));
                 echo "&nbsp;<input type='submit' name='moveinstalls' value='" . $LANG['buttons'][20] . "' class='submit'>&nbsp;";
                 closeArrowMassive('deleteinstalls', $LANG['buttons'][6]);
                 echo "</form>";
             }
         } else {
             // Not found
             echo $LANG['search'][15];
         }
     }
     // Query
     echo "</div>\n";
 }
 /**
  * Show installations of a software
  *
  * @param $searchID  value of the ID to search
  * @param $crit      to search : softwares_id (software) or id (version)
  *
  * @return nothing
  **/
 private static function showInstallations($searchID, $crit)
 {
     global $DB, $CFG_GLPI;
     if (!Session::haveRight("software", "r") || !$searchID) {
         return false;
     }
     $canedit = Session::haveRight("software", "w");
     $canshowcomputer = Session::haveRight("computer", "r");
     if (isset($_POST["start"])) {
         $start = $_POST["start"];
     } else {
         $start = 0;
     }
     if (isset($_POST["order"]) && $_POST["order"] == "DESC") {
         $order = "DESC";
     } else {
         $order = "ASC";
     }
     if (isset($_POST["sort"]) && !empty($_POST["sort"])) {
         // manage several param like location,compname :  order first
         $tmp = explode(",", $_POST["sort"]);
         $sort = "`" . implode("` {$order},`", $tmp) . "`";
     } else {
         if ($crit == "softwares_id") {
             $sort = "`entity` {$order}, `version`, `compname`";
         } else {
             $sort = "`entity` {$order}, `compname`";
         }
     }
     // Total Number of events
     if ($crit == "softwares_id") {
         // Software ID
         $query_number = "SELECT COUNT(*) AS cpt\n                          FROM `glpi_computers_softwareversions`\n                          INNER JOIN `glpi_softwareversions`\n                              ON (`glpi_computers_softwareversions`.`softwareversions_id`\n                                    = `glpi_softwareversions`.`id`)\n                          INNER JOIN `glpi_computers`\n                              ON (`glpi_computers_softwareversions`.`computers_id`\n                                    = `glpi_computers`.`id`)\n                          WHERE `glpi_softwareversions`.`softwares_id` = '{$searchID}'" . getEntitiesRestrictRequest(' AND', 'glpi_computers') . "\n                                AND `glpi_computers`.`is_deleted` = '0'\n                                AND `glpi_computers`.`is_template` = '0'\n                                AND `glpi_computers_softwareversions`.`is_deleted` = '0'";
     } else {
         //SoftwareVersion ID
         $query_number = "SELECT COUNT(*) AS cpt\n                          FROM `glpi_computers_softwareversions`\n                          INNER JOIN `glpi_computers`\n                              ON (`glpi_computers_softwareversions`.`computers_id`\n                                    = `glpi_computers`.`id`)\n                          WHERE `glpi_computers_softwareversions`.`softwareversions_id`\n                                       = '{$searchID}'" . getEntitiesRestrictRequest(' AND', 'glpi_computers') . "\n                                AND `glpi_computers`.`is_deleted` = '0'\n                                AND `glpi_computers`.`is_template` = '0'\n                                AND `glpi_computers_softwareversions`.`is_deleted` = '0'";
     }
     $number = 0;
     if ($result = $DB->query($query_number)) {
         $number = $DB->result($result, 0, 0);
     }
     echo "<div class='center'>";
     if ($number < 1) {
         echo "<table class='tab_cadre_fixe'>";
         echo "<tr><th>" . __('No item found') . "</th></tr>";
         echo "</table></div>\n";
         return;
     }
     // Display the pager
     Html::printAjaxPager(self::getTypeName(2), $start, $number);
     $query = "SELECT DISTINCT `glpi_computers_softwareversions`.*,\n                       `glpi_computers`.`name` AS compname,\n                       `glpi_computers`.`id` AS cID,\n                       `glpi_computers`.`serial`,\n                       `glpi_computers`.`otherserial`,\n                       `glpi_users`.`name` AS username,\n                       `glpi_users`.`id` AS userid,\n                       `glpi_users`.`realname` AS userrealname,\n                       `glpi_users`.`firstname` AS userfirstname,\n                       `glpi_softwareversions`.`name` AS version,\n                       `glpi_softwareversions`.`id` AS vID,\n                       `glpi_softwareversions`.`softwares_id` AS sID,\n                       `glpi_softwareversions`.`name` AS vername,\n                       `glpi_entities`.`completename` AS entity,\n                       `glpi_locations`.`completename` AS location,\n                       `glpi_states`.`name` AS state,\n                       `glpi_groups`.`name` AS groupe\n                FROM `glpi_computers_softwareversions`\n                INNER JOIN `glpi_softwareversions`\n                     ON (`glpi_computers_softwareversions`.`softwareversions_id`\n                           = `glpi_softwareversions`.`id`)\n                INNER JOIN `glpi_computers`\n                     ON (`glpi_computers_softwareversions`.`computers_id` = `glpi_computers`.`id`)\n                LEFT JOIN `glpi_entities` ON (`glpi_computers`.`entities_id` = `glpi_entities`.`id`)\n                LEFT JOIN `glpi_locations`\n                     ON (`glpi_computers`.`locations_id` = `glpi_locations`.`id`)\n                LEFT JOIN `glpi_states` ON (`glpi_computers`.`states_id` = `glpi_states`.`id`)\n                LEFT JOIN `glpi_groups` ON (`glpi_computers`.`groups_id` = `glpi_groups`.`id`)\n                LEFT JOIN `glpi_users` ON (`glpi_computers`.`users_id` = `glpi_users`.`id`)\n                WHERE (`glpi_softwareversions`.`{$crit}` = '{$searchID}') " . getEntitiesRestrictRequest(' AND', 'glpi_computers') . "\n                       AND `glpi_computers`.`is_deleted` = '0'\n                       AND `glpi_computers`.`is_template` = '0'\n                       AND `glpi_computers_softwareversions`.`is_deleted` = '0'\n                ORDER BY {$sort} {$order}\n                LIMIT " . intval($start) . "," . intval($_SESSION['glpilist_limit']);
     $rand = mt_rand();
     if ($result = $DB->query($query)) {
         if ($data = $DB->fetch_assoc($result)) {
             $softwares_id = $data['sID'];
             $soft = new Software();
             $showEntity = $soft->getFromDB($softwares_id) && $soft->isRecursive();
             $linkUser = Session::haveRight('user', 'r');
             $title = $soft->fields["name"];
             if ($crit == "id") {
                 $title = sprintf(__('%1$s - %2$s'), $title, $data["vername"]);
             }
             Session::initNavigateListItems('Computer', sprintf(__('%1$s = %2$s'), Software::getTypeName(1), $title));
             $sort_img = "<img src='" . $CFG_GLPI["root_doc"] . "/pics/" . ($order == "DESC" ? "puce-down.png" : "puce-up.png") . "' alt=''\n                          title=''>";
             if ($canedit) {
                 $rand = mt_rand();
                 Html::openMassiveActionsForm('mass' . __CLASS__ . $rand);
                 $paramsma = array('num_displayed' => $_SESSION['glpilist_limit'], 'specific_actions' => array('move_version' => _x('button', 'Move'), 'purge' => _x('button', 'Delete permanently')));
                 // Options to update version
                 $paramsma['extraparams']['options']['move']['softwares_id'] = $softwares_id;
                 if ($crit == 'softwares_id') {
                     $paramsma['extraparams']['options']['move']['used'] = array();
                 } else {
                     $paramsma['extraparams']['options']['move']['used'] = array($searchID);
                 }
                 Html::showMassiveActions(__CLASS__, $paramsma);
             }
             echo "<table class='tab_cadre_fixehov'><tr>";
             if ($canedit) {
                 echo "<th width='10'>";
                 Html::checkAllAsCheckbox('mass' . __CLASS__ . $rand);
                 echo "</th>";
             }
             if ($crit == "softwares_id") {
                 echo "<th>" . ($sort == "`vername`" ? $sort_img : "") . "<a href='javascript:reloadTab(\"sort=vername&amp;order=" . ($order == "ASC" ? "DESC" : "ASC") . "&amp;start=0\");'>" . _n('Version', 'Versions', 2) . "</a></th>";
             }
             echo "<th>" . ($sort == "`compname`" ? $sort_img : "") . "<a href='javascript:reloadTab(\"sort=compname&amp;order=" . ($order == "ASC" ? "DESC" : "ASC") . "&amp;start=0\");'>" . __('Name') . "</a></th>";
             if ($showEntity) {
                 echo "<th>" . (strstr($sort, "entity") ? $sort_img : "") . "<a href='javascript:reloadTab(\"sort=entity,compname&amp;order=" . ($order == "ASC" ? "DESC" : "ASC") . "&amp;start=0\");'>" . __('Entity') . "</a></th>";
             }
             echo "<th>" . ($sort == "`serial`" ? $sort_img : "") . "<a href='javascript:reloadTab(\"sort=serial&amp;order=" . ($order == "ASC" ? "DESC" : "ASC") . "&amp;start=0\");'>" . __('Serial number') . "</a></th>";
             echo "<th>" . ($sort == "`otherserial`" ? $sort_img : "") . "<a href='javascript:reloadTab(\"sort=otherserial&amp;order=" . ($order == "ASC" ? "DESC" : "ASC") . "&amp;start=0\");'>" . __('Inventory number') . "</a></th>";
             echo "<th>" . (strstr($sort, "`location`") ? $sort_img : "") . "<a href='javascript:reloadTab(\"sort=location,compname&amp;order=" . ($order == "ASC" ? "DESC" : "ASC") . "&amp;start=0\");'>" . __('Location') . "</a></th>";
             echo "<th>" . (strstr($sort, "state") ? $sort_img : "") . "<a href='javascript:reloadTab(\"sort=state,compname&amp;order=" . ($order == "ASC" ? "DESC" : "ASC") . "&amp;start=0\");'>" . __('Status') . "</a></th>";
             echo "<th>" . (strstr($sort, "groupe") ? $sort_img : "") . "<a href='javascript:reloadTab(\"sort=groupe,compname&amp;order=" . ($order == "ASC" ? "DESC" : "ASC") . "&amp;start=0\");'>" . __('Group') . "</a></th>";
             echo "<th>" . (strstr($sort, "username") ? $sort_img : "") . "<a href='javascript:reloadTab(\"sort=username,compname&amp;order=" . ($order == "ASC" ? "DESC" : "ASC") . "&amp;start=0\");'>" . __('User') . "</a></th>";
             echo "<th>" . ($sort == "`lname`" ? $sort_img : "") . "<a href='javascript:reloadTab(\"sort=lname&amp;order=" . ($order == "ASC" ? "DESC" : "ASC") . "&amp;start=0\");'>" . _n('License', 'Licenses', 2) . "</a></th>";
             echo "</tr>\n";
             do {
                 Session::addToNavigateListItems('Computer', $data["cID"]);
                 echo "<tr class='tab_bg_2'>";
                 if ($canedit) {
                     echo "<td>";
                     Html::showMassiveActionCheckBox(__CLASS__, $data["id"]);
                     echo "</td>";
                 }
                 if ($crit == "softwares_id") {
                     echo "<td><a href='softwareversion.form.php?id=" . $data['vID'] . "'>" . $data['version'] . "</a></td>";
                 }
                 $compname = $data['compname'];
                 if (empty($compname) || $_SESSION['glpiis_ids_visible']) {
                     $compname = sprintf(__('%1$s (%2$s)'), $compname, $data['cID']);
                 }
                 if ($canshowcomputer) {
                     echo "<td><a href='computer.form.php?id=" . $data['cID'] . "'>{$compname}</a></td>";
                 } else {
                     echo "<td>" . $compname . "</td>";
                 }
                 if ($showEntity) {
                     echo "<td>" . $data['entity'] . "</td>";
                 }
                 echo "<td>" . $data['serial'] . "</td>";
                 echo "<td>" . $data['otherserial'] . "</td>";
                 echo "<td>" . $data['location'] . "</td>";
                 echo "<td>" . $data['state'] . "</td>";
                 echo "<td>" . $data['groupe'] . "</td>";
                 echo "<td>" . formatUserName($data['userid'], $data['username'], $data['userrealname'], $data['userfirstname'], $linkUser) . "</td>";
                 $lics = Computer_SoftwareLicense::GetLicenseForInstallation($data['cID'], $data['vID']);
                 echo "<td>";
                 if (count($lics)) {
                     foreach ($lics as $data) {
                         $serial = $data['serial'];
                         if (!empty($data['type'])) {
                             $serial = sprintf(__('%1$s (%2$s)'), $serial, $data['type']);
                         }
                         echo "<a href='softwarelicense.form.php?id=" . $data['id'] . "'>" . $data['name'];
                         echo "</a> - " . $serial;
                         echo "<br>";
                     }
                 }
                 echo "</td>";
                 echo "</tr>\n";
             } while ($data = $DB->fetch_assoc($result));
             echo "</table>\n";
             if ($canedit) {
                 $paramsma['ontop'] = false;
                 Html::showMassiveActions(__CLASS__, $paramsma);
                 Html::closeForm();
             }
         } else {
             // Not found
             _e('No item found');
         }
     }
     // Query
     Html::printAjaxPager(self::getTypeName(2), $start, $number);
     echo "</div>\n";
 }