Commit | Line | Data |
---|---|---|
277feb35 P |
1 | <?php |
2 | //Options for GLPI 0.71 and newer : need slave db to access the report | |
3 | $USEDBREPLICATE=1; | |
4 | $DBCONNECTION_REQUIRED=0; | |
5 | ||
6 | include ("../../inc/includes.php"); | |
7 | ||
8 | Session::checkRight("reports", "r"); | |
9 | Session::checkRight("computer", "r"); | |
10 | ||
11 | #Html::header(Report::getTypeName(2), $_SERVER['PHP_SELF'], "utils", "report"); | |
12 | Html::header("Systèmes d'exploitation par implantation", $_SERVER['PHP_SELF'], "utils", "report"); | |
13 | Report::title(); | |
14 | ||
15 | $computer = new Computer(); | |
16 | ||
17 | $state_sql = ""; | |
18 | if (($state != "") AND ($state != "0")) { | |
19 | $state_sql = " AND `states_id` = '".$state."' "; | |
20 | } | |
21 | ||
22 | $itemtype = 'Computer'; | |
23 | $table_item = getTableForItemType($itemtype); | |
24 | ||
25 | echo "<span class='big b'>Systèmes d'exploitation par implantation</span><br><br>"; | |
26 | echo "<table class='tab_cadrehov'>"; | |
27 | echo "<tr class='tab_bg_1'><th>Implantation</th><th>Système d'exploitation</th><th>Quantité</th></tr>"; | |
28 | $green_grand_total = 0; | |
29 | $yellow_grand_total = 0; | |
30 | $red_grand_total = 0; | |
31 | $blue_grand_total = 0; | |
32 | $grand_total = 0; | |
33 | ||
34 | # parcours des régions | |
35 | $query = "SELECT id,name,completename FROM glpi_entities WHERE (id=0 OR entities_id=0)"; | |
36 | $query .= " ".getEntitiesRestrictRequest("AND", "glpi_entities"); | |
37 | $region_result = $DB->query($query); | |
38 | while ($region_data = $DB->fetch_assoc($region_result)) { | |
39 | $region_id = $region_data['id']; | |
40 | if ($region_id != 0) { | |
41 | $region_name = getTreeLeafValueName("glpi_entities", $region_id); | |
42 | } else { | |
43 | $region_name = "AUF (non classé)"; | |
44 | } | |
45 | echo "<tr class='tab_bg_1'><td colspan='3' class='b'>$region_name</td></tr>"; | |
46 | ||
47 | $green_total = 0; | |
48 | $yellow_total = 0; | |
49 | $red_total = 0; | |
50 | $blue_total = 0; | |
51 | $region_total = 0; | |
52 | ||
53 | # operating systems per computer | |
54 | $query = "SELECT COUNT(c.id) AS count, e.name AS ename, | |
55 | (CASE WHEN o.name REGEXP '^Debian ' THEN SUBSTRING_INDEX(REPLACE(o.name,' GNU/Linux',''),'.',1) | |
56 | WHEN o.name REGEXP '^Ubuntu ' THEN SUBSTRING_INDEX(REPLACE(o.name,' LTS',''),'.',2) | |
57 | WHEN o.name REGEXP '^Microsoft ' THEN REPLACE(o.name,'Microsoft ','') | |
58 | WHEN o.name REGEXP '^Mac ' THEN REPLACE(o.name,'Mac ','') | |
59 | ELSE o.name END) AS oname | |
60 | FROM `$table_item` c | |
61 | LEFT JOIN glpi_computers_items i ON (i.itemtype = 'Computer' AND i.items_id = c.id) | |
62 | LEFT JOIN glpi_entities e ON (c.entities_id = e.id) | |
63 | LEFT JOIN glpi_operatingsystems o ON (c.operatingsystems_id = o.id) | |
64 | WHERE c.is_deleted = '0' AND c.is_template = '0' | |
65 | ".getEntitiesRestrictRequest("AND", "c"); | |
66 | if ($region_id != 0) { | |
67 | $query .= " AND ".getRealQueryForTreeItem("glpi_entities", $region_id, "e.id"); | |
68 | } else { | |
69 | $query .= " AND e.id = '0'"; | |
70 | } | |
71 | $query .= " GROUP BY 2,3 ORDER BY 2,3"; | |
72 | $result = $DB->query($query); | |
73 | while ($data=$DB->fetch_assoc($result)) { | |
74 | if (empty($data['ename'])) { | |
75 | $data['ename'] = "<i>(indéterminé)</i>"; | |
76 | } | |
77 | if (empty($data['oname'])) { | |
78 | $data['oname'] = "<i>(indéterminé)</i>"; | |
79 | } | |
80 | if (($data['oname'] == 'Debian 7') || ($data['oname'] == 'Ubuntu 12.04')) { | |
81 | $oname_plus = '<svg width="5" height="5" style="background-color: #00ff00; margin: 1px;"/>'; | |
82 | $green_total += $data['count']; | |
83 | } elseif (($data['oname'] == 'Debian 6') || ($data['oname'] == 'Ubuntu 10.04')) { | |
84 | $oname_plus = '<svg width="5" height="5" style="background-color: #ffff00; margin: 1px;"/>'; | |
85 | $yellow_total += $data['count']; | |
86 | } elseif ((substr($data['oname'],0,7) == 'Windows') || (substr($data['oname'],strlen($data['oname'])-4,4) == 'OS X')) { | |
87 | $oname_plus = '<svg width="5" height="5" style="background-color: #0000ff; margin: 1px;"/>'; | |
88 | $blue_total += $data['count']; | |
89 | } else { | |
90 | $oname_plus = '<svg width="5" height="5" style="background-color: #ff0000; margin: 1px;"/>'; | |
91 | $red_total += $data['count']; | |
92 | } | |
93 | echo "<tr class='tab_bg_2 auf_show_details'>"; | |
94 | echo "<td> ".$data['ename']."</td>"; | |
95 | echo "<td>".$oname_plus." ".$data['oname']."</td>"; | |
96 | echo "<td class='numeric'>".$data['count']."</td></tr>"; | |
97 | $region_total += $data['count']; | |
98 | } | |
99 | ||
100 | $green_svg = '<svg width="'.(400*$green_total/$region_total).'" height="5" style="background-color: #00ff00; margin: 1px 0;"/>'; | |
101 | $yellow_svg = '<svg width="'.(400*$yellow_total/$region_total).'" height="5" style="background-color: #ffff00; margin: 1px 0;"/>'; | |
102 | $red_svg = '<svg width="'.(400*$red_total/$region_total).'" height="5" style="background-color: #ff0000; margin: 1px 0;"/>'; | |
103 | $blue_svg = '<svg width="'.(400*$blue_total/$region_total).'" height="5" style="background-color: #0000ff; margin: 1px 0;"/>'; | |
104 | echo "<tr class='tab_bg_2'><td class='b'> Sous-total</td>"; | |
105 | echo "<td>".$green_svg.$yellow_svg.$red_svg.$blue_svg."</td>"; | |
106 | echo "<td class='numeric b'>$region_total</td></tr>"; | |
107 | ||
108 | $green_grand_total += $green_total; | |
109 | $yellow_grand_total += $yellow_total; | |
110 | $red_grand_total += $red_total; | |
111 | $blue_grand_total += $blue_total; | |
112 | $grand_total += $region_total; | |
113 | } // fin des régions | |
114 | ||
115 | echo "<tr class='tab_bg_1'><td colspan='3'> </td></tr>"; | |
116 | ||
117 | # total operating systems | |
118 | $query = "SELECT COUNT(*) FROM `".$table_item."` | |
119 | LEFT JOIN `glpi_computers_items` | |
120 | ON (`glpi_computers_items`.`itemtype` = '".$itemtype."' | |
121 | AND `glpi_computers_items`.`items_id` = `".$table_item."`.`id`) | |
122 | WHERE `".$table_item."`.`is_deleted` = '0' | |
123 | AND `".$table_item."`.`is_template` = '0' ". | |
124 | getEntitiesRestrictRequest("AND", $table_item); | |
125 | $result = $DB->query($query); | |
126 | $total = $DB->result($result, 0, 0); | |
127 | ||
128 | $green_svg = '<svg width="'.(400*$green_grand_total/$grand_total).'" height="5" style="background-color: #00ff00; margin: 1px 0;"/>'; | |
129 | $yellow_svg = '<svg width="'.(400*$yellow_grand_total/$grand_total).'" height="5" style="background-color: #ffff00; margin: 1px 0;"/>'; | |
130 | $red_svg = '<svg width="'.(400*$red_grand_total/$grand_total).'" height="5" style="background-color: #ff0000; margin: 1px 0;"/>'; | |
131 | $blue_svg = '<svg width="'.(400*$blue_grand_total/$grand_total).'" height="5" style="background-color: #0000ff; margin: 1px 0;"/>'; | |
132 | echo "<tr class='tab_bg_1'><td class='b'>Total général</td>"; | |
133 | echo "<td>".$green_svg.$yellow_svg.$red_svg.$blue_svg."</td>"; | |
134 | echo "<td class='numeric b'>$total</td></tr>"; | |
135 | ||
136 | echo "</table>"; | |
137 | ||
138 | Html::footer(); | |
139 | ?> |