grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026. -------------------------------------------------------------------------- */ /** @file * @brief */ if (!defined('GLPI_ROOT')) { die("Sorry. You can't access this file directly"); } /** * Report class * * @ since version 0.84 **/ class Report extends CommonGLPI{ static protected $notable = false; static $rightname = 'reports'; /** * @since version 0.85.3 **/ static function canView() { return Session::haveRight(self::$rightname, READ); } static function getTypeName($nb=0) { return _n('Report', 'Reports', $nb); } /** * @see CommonGLPI::getMenuShorcut() * * @since version 0.85 **/ static function getMenuShorcut() { return 'e'; } /** * Show report title **/ static function title() { global $PLUGIN_HOOKS, $CFG_GLPI; // Report generation // Default Report included $report_list["default"]["name"] = __('Default report'); $report_list["default"]["file"] = "report.default.php"; if (Contract::canView()) { // Rapport ajoute par GLPI V0.2 $report_list["Contrats"]["name"] = __('By contract'); $report_list["Contrats"]["file"] = "report.contract.php"; } if (Infocom::canView()) { $report_list["Par_annee"]["name"] = __('By year'); $report_list["Par_annee"]["file"] = "report.year.php"; $report_list["Infocoms"]["name"] = __('Hardware financial and administrative information'); $report_list["Infocoms"]["file"] = "report.infocom.php"; $report_list["Infocoms2"]["name"] = __('Other financial and administrative information (licenses, cartridges, consumables)'); $report_list["Infocoms2"]["file"] = "report.infocom.conso.php"; } if (Session::haveRight("networking", READ)) { $report_list["Rapport prises reseau"]["name"] = __('Network report'); $report_list["Rapport prises reseau"]["file"] = "report.networking.php"; } if (Session::haveRight("reservation", READ)) { $report_list["reservation"]["name"] = __('Loan'); $report_list["reservation"]["file"] = "report.reservation.php"; } if (Computer::canView() || Monitor::canView() || Session::haveRight("networking", READ) || Peripheral::canView() || Printer::canView() || Phone::canView()) { $report_list["state"]["name"] = _n('Status', 'Statuses', Session::getPluralNumber()); $report_list["state"]["file"] = "report.state.php"; } //Affichage du tableau de presentation des stats echo ""; echo ""; echo ""; echo ""; echo "
".__('Select the report you want to generate')."
"; $count = count($report_list); $selected = -1; $values = array($CFG_GLPI["root_doc"].'/front/report.php' => Dropdown::EMPTY_VALUE); while ($data = each($report_list)) { $val = $data[0]; $name = $report_list["$val"]["name"]; $file = $report_list["$val"]["file"]; $key = $CFG_GLPI["root_doc"]."/front/".$file; $values[$key] = $name; if (stripos($_SERVER['REQUEST_URI'],$key) !== false) { $selected = $key; } } $names = array(); $optgroup = array(); if (isset($PLUGIN_HOOKS["reports"]) && is_array($PLUGIN_HOOKS["reports"])) { foreach ($PLUGIN_HOOKS["reports"] as $plug => $pages) { if (is_array($pages) && count($pages)) { foreach ($pages as $page => $name) { $names[$plug.'/'.$page] = array("name" => $name, "plug" => $plug); $optgroup[$plug] = Plugin::getInfo($plug, 'name'); } } } asort($names); } foreach ($optgroup as $opt => $title) { $group = $title; foreach ($names as $key => $val) { if ($opt == $val["plug"]) { $file = $CFG_GLPI["root_doc"]."/plugins/".$key; $values[$group][$file] = $val["name"]; if (stripos($_SERVER['REQUEST_URI'],$file) !== false) { $selected = $file; } } } } Dropdown::showFromArray('statmenu', $values, array('on_change' => "window.location.href=this.options[this.selectedIndex].value", 'value' => $selected)); echo "
"; } /** * Show Default Report * * @since version 0.84 **/ static function showDefaultReport() { global $DB; # Title echo "GLPI ".Report::getTypeName(Session::getPluralNumber())."

"; # 1. Get counts of itemtype $items = array('Computer', 'Monitor', 'NetworkEquipment', 'Peripheral', 'Phone', 'Printer', 'Software'); $linkitems = array('Monitor', 'Peripheral', 'Phone', 'Printer'); echo ""; foreach ($items as $itemtype) { $table_item = getTableForItemType($itemtype); $where = "WHERE `".$table_item."`.`is_deleted` = '0' AND `".$table_item."`.`is_template` = '0' "; $join = ""; if (in_array($itemtype, $linkitems)) { $join = "LEFT JOIN `glpi_computers_items` ON (`glpi_computers_items`.`itemtype` = '".$itemtype."' AND `glpi_computers_items`.`items_id` = `".$table_item."`.`id`)"; } $query = "SELECT COUNT(*) FROM `".$table_item."` $join $where ". getEntitiesRestrictRequest("AND",$table_item); $result = $DB->query($query); $number = $DB->result($result,0,0); echo ""; echo ""; } echo ""; # 2. Get some more number data (operating systems per computer) $where = "WHERE `is_deleted` = '0' AND `is_template` = '0' "; $query = "SELECT COUNT(*) AS count, `glpi_operatingsystems`.`name` AS name FROM `glpi_computers` LEFT JOIN `glpi_operatingsystems` ON (`glpi_computers`.`operatingsystems_id` = `glpi_operatingsystems`.`id`) $where ". getEntitiesRestrictRequest("AND","glpi_computers")." GROUP BY `glpi_operatingsystems`.`name`"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { if (empty($data['name'])) { $data['name'] = Dropdown::EMPTY_VALUE; } echo ""; echo ""; } # Get counts of types $val = array_flip($items); unset($val["Software"]); $items = array_flip($val); foreach ($items as $itemtype) { echo ""; $table_item = getTableForItemType($itemtype); $typeclass = $itemtype."Type"; $type_table = getTableForItemType($typeclass); $typefield = getForeignKeyFieldForTable(getTableForItemType($typeclass)); $where = "WHERE `".$table_item."`.`is_deleted` = '0' AND `".$table_item."`.`is_template` = '0' "; $join = ""; if (in_array($itemtype, $linkitems)) { $join = "LEFT JOIN `glpi_computers_items` ON (`glpi_computers_items`.`itemtype` = '".$itemtype."' AND `glpi_computers_items`.`items_id` = `".$table_item."`.`id`)"; } $query = "SELECT COUNT(*) AS count, `".$type_table."`.`name` AS name FROM `".$table_item."` LEFT JOIN `".$type_table."` ON (`".$table_item."`.`".$typefield."` = `".$type_table."`.`id`) $join $where ". getEntitiesRestrictRequest("AND",$table_item)." GROUP BY `".$type_table."`.`name`"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { if (empty($data['name'])) { $data['name'] = Dropdown:: EMPTY_VALUE; } echo ""; echo ""; } } echo "
".$itemtype::getTypeName(Session::getPluralNumber())."$number
".__('Operating system')."
".$data['name']."".$data['count']."
".$itemtype::getTypeName(Session::getPluralNumber()). "
".$data['name']."".$data['count']."
"; } /** * @since version 0.84 * * @param $networkport_prefix * @param $networkport_crit * @param $where_crit * @param $order (default '') * @param $field (default '') * @param $extra (default '') **/ static function reportForNetworkInformations($networkport_prefix, $networkport_crit, $where_crit, $order='', $field='', $extra='') { global $DB; // This SQL request matches the NetworkPort, then its NetworkName and IPAddreses. It also // match opposite NetworkPort, then its NetworkName and IPAddresses. // Results are groupes by NetworkPort. Then all IPs are concatenated by comma as separator. $query = "SELECT $field PORT_1.`itemtype` AS itemtype_1, PORT_1.`items_id` AS items_id_1, PORT_1.`id` AS id_1, PORT_1.`name` AS port_1, PORT_1.`mac` AS mac_1, PORT_1.`logical_number` AS logical_1, GROUP_CONCAT(ADDR_1.`name` SEPARATOR ',') AS ip_1, PORT_2.`itemtype` AS itemtype_2, PORT_2.`items_id` AS items_id_2, PORT_2.`id` AS id_2, PORT_2.`name` AS port_2, PORT_2.`mac` AS mac_2, GROUP_CONCAT(ADDR_2.`name` SEPARATOR ',') AS ip_2 FROM $networkport_prefix INNER JOIN `glpi_networkports` AS PORT_1 ON ($networkport_crit AND PORT_1.`is_deleted` = 0) LEFT JOIN `glpi_networknames` AS NAME_1 ON (NAME_1.`itemtype` = 'NetworkPort' AND PORT_1.`id` = NAME_1.`items_id` AND NAME_1.`is_deleted` = 0) LEFT JOIN `glpi_ipaddresses` AS ADDR_1 ON (ADDR_1.`itemtype` = 'NetworkName' AND NAME_1.`id` = ADDR_1.`items_id` AND ADDR_1.`is_deleted` = 0) LEFT JOIN `glpi_networkports_networkports` AS LINK ON (LINK.`networkports_id_1` = PORT_1.`id` OR LINK.`networkports_id_2` = PORT_1.`id`) LEFT JOIN `glpi_networkports` AS PORT_2 ON (PORT_2.`id` = IF(LINK.`networkports_id_1` = PORT_1.`id`, LINK.`networkports_id_2`, LINK.`networkports_id_1`)) LEFT JOIN `glpi_networknames` AS NAME_2 ON (NAME_2.`itemtype` = 'NetworkPort' AND PORT_2.`id` = NAME_2.`items_id` AND NAME_2.`is_deleted` = 0) LEFT JOIN `glpi_ipaddresses` AS ADDR_2 ON (ADDR_2.`itemtype` = 'NetworkName' AND NAME_2.`id` = ADDR_2.`items_id` AND ADDR_2.`is_deleted` = 0) WHERE $where_crit GROUP BY PORT_1.`id`"; if (!empty($order)) { $query .= "ORDER BY $order"; } $result = $DB->request($query); if ($result->numrows() > 0) { echo ""; echo ""; if (!empty($extra)) { echo ""; } echo ""; echo ""; echo "\n"; echo ""; if (!empty($extra)) { echo ""; } echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo "\n"; foreach ($result as $line) { echo ""; // To ensure that the NetworkEquipment remain the first item, we test its type if ($line['itemtype_2'] == 'NetworkEquipment') { $idx = 2; } else { $idx = 1; } if (!empty($extra)) { echo ""; } $itemtype = $line["itemtype_$idx"]; if (!empty($itemtype)) { echo ""; $item_name = ''; if ($item = getItemForItemtype($itemtype)) { if ($item->getFromDB($line["items_id_$idx"])) { $item_name = $item->getName(); } } echo ""; } else { echo ""; echo ""; } echo ""; echo ""; echo ""; echo ""; if ($idx == 1) { $idx = 2; } else { $idx = 1; } echo ""; echo ""; echo ""; $itemtype = $line["itemtype_$idx"]; if (!empty($itemtype)) { echo ""; $item_name = ''; if ($item = getItemForItemtype($itemtype)) { if ($item->getFromDB($line["items_id_$idx"])) { $item_name = $item->getName(); } } echo ""; } else { echo ""; echo ""; } echo "\n"; } echo "
 ".__('Device 1')."".__('Device 2')."
$extra".__('Device type')."".__('Device name')."".__('Port Number')."".NetworkPort::getTypeName(1)."".__('MAC address')."".IPAddress::getTypeName(0)."".NetworkPort::getTypeName(1)."".__('MAC address')."".IPAddress::getTypeName(0)."".__('Device type')."".__('Device name')."
".(empty($line['extra']) ? NOT_AVAILABLE : $line['extra'])."".$itemtype::getTypeName(1)."".(empty($item_name) ? NOT_AVAILABLE : $item_name)." ".NOT_AVAILABLE." ".NOT_AVAILABLE." ".(empty($line["logical_$idx"]) ? NOT_AVAILABLE : $line["logical_$idx"])."".(empty($line["port_$idx"]) ? NOT_AVAILABLE : $line["port_$idx"])."".(empty($line["mac_$idx"]) ? NOT_AVAILABLE : $line["mac_$idx"])."".(empty($line["ip_$idx"]) ? NOT_AVAILABLE : $line["ip_$idx"])."".(empty($line["port_$idx"]) ? NOT_AVAILABLE : $line["port_$idx"])."".(empty($line["mac_$idx"]) ? NOT_AVAILABLE : $line["mac_$idx"])."".(empty($line["ip_$idx"]) ? NOT_AVAILABLE : $line["ip_$idx"])."".$itemtype::getTypeName(1)."".(empty($item_name) ? NOT_AVAILABLE : $item_name)." ".NOT_AVAILABLE." ".NOT_AVAILABLE."



"; } } /** * @since version 0.85 * * @see commonDBTM::getRights() **/ function getRights($interface='central') { $values = array( READ => __('Read')); return $values; } } ?>