850 lines
28 KiB
PHP
850 lines
28 KiB
PHP
<?php
|
|
|
|
/**
|
|
* FusionInventory
|
|
*
|
|
* Copyright (C) 2010-2016 by the FusionInventory Development Team.
|
|
*
|
|
* http://www.fusioninventory.org/
|
|
* https://github.com/fusioninventory/fusioninventory-for-glpi
|
|
* http://forge.fusioninventory.org/
|
|
*
|
|
* ------------------------------------------------------------------------
|
|
*
|
|
* LICENSE
|
|
*
|
|
* This file is part of FusionInventory project.
|
|
*
|
|
* FusionInventory is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* FusionInventory is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with FusionInventory. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
* ------------------------------------------------------------------------
|
|
*
|
|
* This file is used to manage the printer changes (history).
|
|
*
|
|
* ------------------------------------------------------------------------
|
|
*
|
|
* @package FusionInventory
|
|
* @author David Durieux
|
|
* @copyright Copyright (c) 2010-2016 FusionInventory team
|
|
* @license AGPL License 3.0 or (at your option) any later version
|
|
* http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
|
* @link http://www.fusioninventory.org/
|
|
* @link https://github.com/fusioninventory/fusioninventory-for-glpi
|
|
*
|
|
*/
|
|
|
|
if (!defined('GLPI_ROOT')) {
|
|
die("Sorry. You can't access this file directly");
|
|
}
|
|
|
|
/**
|
|
* Manage the printer changes (history).
|
|
*/
|
|
class PluginFusioninventoryPrinterLog extends CommonDBTM {
|
|
|
|
|
|
/**
|
|
* Get search function for the class
|
|
*
|
|
* @return array
|
|
*/
|
|
function rawSearchOptions() {
|
|
|
|
$tab = [];
|
|
|
|
$tab[] = [
|
|
'id' => 'common',
|
|
'name' => __('History meter printer', 'fusioninventory')
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '1',
|
|
'table' => "glpi_printers",
|
|
'field' => 'name',
|
|
'linkfield' => 'printers_id',
|
|
'name' => __('Name'),
|
|
'datatype' => 'itemlink',
|
|
'itemlink_type' => 'Printer',
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '2',
|
|
'table' => $this->getTable(),
|
|
'field' => 'id',
|
|
'name' => 'id',
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '24',
|
|
'table' => 'glpi_locations',
|
|
'field' => 'name',
|
|
'linkfield' => 'locations_id',
|
|
'name' => __('Location'),
|
|
'datatype' => 'itemlink',
|
|
'itemlink_type' => 'Location',
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '19',
|
|
'table' => 'glpi_printertypes',
|
|
'field' => 'name',
|
|
'linkfield' => 'printertypes_id',
|
|
'name' => __('Type'),
|
|
'datatype' => 'itemlink',
|
|
'itemlink_type' => 'PrinterType',
|
|
];
|
|
|
|
// $tab[] = [
|
|
// 'id' => 2,
|
|
// 'table' => 'glpi_printermodels',
|
|
// 'field' => 'name',
|
|
// 'linkfield' => 'printermodels_id',
|
|
// 'name' => __('Model'),
|
|
// 'datatype' => 'itemptype',
|
|
// ];
|
|
|
|
$tab[] = [
|
|
'id' => '18',
|
|
'table' => 'glpi_states',
|
|
'field' => 'name',
|
|
'linkfield' => 'states_id',
|
|
'name' => __('Status'),
|
|
'datatype' => '>dropdown',
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '20',
|
|
'table' => 'glpi_printers',
|
|
'field' => 'serial',
|
|
'linkfield' => 'printers_id',
|
|
'name' => __('Serial Number'),
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '23',
|
|
'table' => 'glpi_printers',
|
|
'field' => 'otherserial',
|
|
'linkfield' => 'printers_id',
|
|
'name' => __('Inventory number'),
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '21',
|
|
'table' => 'glpi_users',
|
|
'field' => 'name',
|
|
'linkfield' => 'users_id',
|
|
'name' => __('User'),
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '3',
|
|
'table' => 'glpi_manufacturers',
|
|
'field' => 'name',
|
|
'linkfield' => 'manufacturers_id',
|
|
'name' => Manufacturer::getTypeName(1),
|
|
];
|
|
|
|
$joinparams = [
|
|
'jointype' => 'itemtype_item',
|
|
'specific_itemtype' => 'Printer',
|
|
];
|
|
$networkNameJoin = [
|
|
'jointype' => 'itemtype_item',
|
|
'specific_itemtype' => 'NetworkPort',
|
|
'beforejoin' => [
|
|
'table' => 'glpi_networkports',
|
|
'joinparams' => $joinparams,
|
|
],
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '5',
|
|
'table' => 'glpi_ipaddresses',
|
|
'field' => 'name',
|
|
'name' => __('IP'),
|
|
'forcegroupby' => true,
|
|
'massiveaction' => false,
|
|
'joinparams' => [
|
|
'jointype' => 'itemtype_item',
|
|
'specific_itemtype' => 'NetworkName',
|
|
'beforejoin' => [
|
|
'table' => 'glpi_networknames',
|
|
'joinparams'
|
|
=> $networkNameJoin,
|
|
],
|
|
],
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '6',
|
|
'table' => 'glpi_plugin_fusioninventory_printerlogs',
|
|
'field' => 'pages_total',
|
|
'linkfield' => 'id',
|
|
'name' => __('Total number of printed pages', 'fusioninventory'),
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '7',
|
|
'table' => 'glpi_plugin_fusioninventory_printerlogs',
|
|
'field' => 'pages_n_b',
|
|
'linkfield' => 'id',
|
|
'name' => __('Number of printed black and white pages', 'fusioninventory'),
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '8',
|
|
'table' => 'glpi_plugin_fusioninventory_printerlogs',
|
|
'field' => 'pages_color',
|
|
'linkfield' => 'id',
|
|
'name' => __('Number of printed color pages', 'fusioninventory'),
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '9',
|
|
'table' => $this->getTable(),
|
|
'field' => 'pages_recto_verso',
|
|
'linkfield' => 'id',
|
|
'name' => __('Number of pages printed duplex', 'fusioninventory'),
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '10',
|
|
'table' => $this->getTable(),
|
|
'field' => 'scanned',
|
|
'linkfield' => 'id',
|
|
'name' => __('Number of scanned pages', 'fusioninventory'),
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '11',
|
|
'table' => $this->getTable(),
|
|
'field' => 'pages_total_print',
|
|
'linkfield' => 'id',
|
|
'name' => __('Total number of printed pages (print)', 'fusioninventory'),
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '12',
|
|
'table' => $this->getTable(),
|
|
'field' => 'pages_n_b_print',
|
|
'linkfield' => 'id',
|
|
'name' => __('Number of printed black and white pages (print)', 'fusioninventory'),
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '13',
|
|
'table' => $this->getTable(),
|
|
'field' => 'pages_color_print',
|
|
'linkfield' => 'id',
|
|
'name' => __('Number of printed color pages (print)', 'fusioninventory'),
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '14',
|
|
'table' => $this->getTable(),
|
|
'field' => 'pages_total_copy',
|
|
'linkfield' => 'id',
|
|
'name' => __('Total number of printed pages (copy)', 'fusioninventory'),
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '15',
|
|
'table' => $this->getTable(),
|
|
'field' => 'pages_n_b_copy',
|
|
'linkfield' => 'id',
|
|
'name' => __('Number of printed black and white pages (copy)', 'fusioninventory'),
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '16',
|
|
'table' => $this->getTable(),
|
|
'field' => 'pages_color_copy',
|
|
'linkfield' => 'id',
|
|
'name' => __('Number of printed color pages (copy)', 'fusioninventory'),
|
|
];
|
|
|
|
$tab[] = [
|
|
'id' => '17',
|
|
'table' => $this->getTable(),
|
|
'field' => 'pages_total_fax',
|
|
'linkfield' => 'id',
|
|
'name' => __('Total number of printed pages (fax)', 'fusioninventory'),
|
|
];
|
|
|
|
return $tab;
|
|
}
|
|
|
|
|
|
/**
|
|
* Count number entries for the printer
|
|
*
|
|
* @global object $DB
|
|
* @param integer $printers_id
|
|
* @return integer
|
|
*/
|
|
function countAllEntries($printers_id) {
|
|
global $DB;
|
|
|
|
$num = 0;
|
|
$query = "SELECT count(DISTINCT `id`)
|
|
FROM ".$this->getTable()."
|
|
WHERE `printers_id` = '".$printers_id."';";
|
|
$result_num=$DB->query($query);
|
|
if ($result_num) {
|
|
$field = $DB->result($result_num, 0, 0);
|
|
if ($field) {
|
|
$num += $field;
|
|
}
|
|
}
|
|
return $num;
|
|
}
|
|
|
|
|
|
/**
|
|
* Get logs of printer
|
|
*
|
|
* @global object $DB
|
|
* @param integer $printers_id
|
|
* @param integer $begin
|
|
* @param integer $limit
|
|
* @return array|false
|
|
*/
|
|
function getEntries($printers_id, $begin, $limit) {
|
|
global $DB;
|
|
|
|
$datas=[];
|
|
$query = "SELECT *
|
|
FROM ".$this->getTable()."
|
|
WHERE `printers_id` = '".$printers_id."'
|
|
LIMIT ".$begin.", ".$limit.";";
|
|
$result=$DB->query($query);
|
|
if ($result) {
|
|
$i = 0;
|
|
while ($data=$DB->fetchAssoc($result)) {
|
|
$data['date'] = Html::convDateTime($data['date']);
|
|
$datas["$i"] = $data;
|
|
$i++;
|
|
}
|
|
return $datas;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
/**
|
|
* Get printed pages statistics
|
|
*
|
|
* @global object $DB
|
|
* @param integer $printers_id
|
|
* @return array|false
|
|
*/
|
|
function stats($printers_id) {
|
|
global $DB;
|
|
|
|
$query = "SELECT MIN(`date`) AS `min_date`, MIN(`pages`) AS `min_pages`, ".
|
|
"MAX(`date`) AS `max_date`, MAX(`pages`) AS `max_pages`
|
|
FROM ".$this->getTable()."
|
|
WHERE `printers_id` = '".$printers_id."';";
|
|
$result = $DB->query($query);
|
|
if ($result) {
|
|
$fields = $DB->fetchAssoc($result);
|
|
if ($fields) {
|
|
$output = [];
|
|
$output['num_days'] =
|
|
ceil((strtotime($fields['max_date']) - strtotime($fields['min_date']))/(60*60*24));
|
|
$output['num_pages'] = $fields['max_pages'] - $fields['min_pages'];
|
|
$output['pages_per_day'] = round($output['num_pages'] / $output['num_days']);
|
|
return $output;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
/**
|
|
* Display form
|
|
*
|
|
* @param integer $printers_id
|
|
* @param array $options
|
|
* @return boolean
|
|
*/
|
|
function showForm($printers_id, $options = []) {
|
|
|
|
if (!Session::haveRight('plugin_fusioninventory_printer', READ)) {
|
|
return false;
|
|
}
|
|
|
|
// display stats
|
|
$stats = $this->stats($printers_id);
|
|
if ($stats) {
|
|
$this->initForm($printers_id, $options);
|
|
$this->showFormHeader($options);
|
|
|
|
echo "<tr class='tab_bg_1'>";
|
|
echo "<td>".__('Total printed pages', 'fusioninventory')." : </td>";
|
|
echo "<td>".$stats["num_pages"]."</td></tr>";
|
|
|
|
echo "<tr class='tab_bg_1'>";
|
|
echo "<td>".__('Pages / day', 'fusioninventory')." : </td>";
|
|
echo "<td>".$stats["pages_per_day"]."</td></tr>";
|
|
|
|
echo "</table></div>";
|
|
|
|
}
|
|
|
|
// preparing to display history
|
|
if (!isset($_GET['start'])) {
|
|
$_GET['start'] = 0;
|
|
}
|
|
|
|
$numrows = $this->countAllEntries($printers_id);
|
|
$parameters = "id=".$_GET["id"]."&onglet=".$_SESSION["glpi_onglet"];
|
|
|
|
echo "<br>";
|
|
Html::printPager($_GET['start'], $numrows, $_SERVER['PHP_SELF'], $parameters);
|
|
|
|
$limit = $numrows;
|
|
if ($_SESSION["glpilist_limit"] < $numrows) {
|
|
$limit = $_SESSION["glpilist_limit"];
|
|
}
|
|
// Get history
|
|
$data = $this->getEntries($printers_id, $_GET['start'], $limit);
|
|
if (!($data)) {
|
|
return false;
|
|
}
|
|
|
|
echo "<div align='center'><form method='post' name='printer_history_form'
|
|
id='printer_history_form' action=\"".Toolbox::getItemTypeFormURL(__CLASS__)."\">";
|
|
|
|
echo "<table class='tab_cadre' cellpadding='5'><tr><th colspan='3'>";
|
|
echo __('History meter printer', 'fusioninventory')." :</th></tr>";
|
|
|
|
echo "<tr class='tab_bg_1'>";
|
|
echo "<th></th>";
|
|
echo "<th>"._n('Date', 'Dates', 1)." :</th>";
|
|
echo "<th>".__('Meter', 'fusioninventory')." :</th></tr>";
|
|
|
|
for ($i=0; $i<$limit; $i++) {
|
|
echo "<tr class='tab_bg_1'>";
|
|
echo "<td align='center'>";
|
|
Html::showCheckbox(['name' => "checked_$i", 'value' => 1]);
|
|
echo "</td>";
|
|
echo "<td align='center'>".$data["$i"]['date']."</td>";
|
|
echo "<td align='center'>".$data["$i"]['pages']."</td>";
|
|
echo "</td></tr>";
|
|
echo "<input type='hidden' name='ID_$i' value='".$data["$i"]['id']."'>";
|
|
}
|
|
|
|
if (!Session::haveRight('plugin_fusioninventory_printer', UPDATE)) {
|
|
return false;
|
|
}
|
|
|
|
echo "<input type='hidden' name='limit' value='".$limit."'>";
|
|
echo "<tr class='tab_bg_1'><td colspan='3'>";
|
|
echo "<div align='center'><a onclick= \"if (markAllRows('printer_history_form'))
|
|
return FALSE;\"
|
|
href='".$_SERVER['PHP_SELF']."?select=all'>".
|
|
__('Check All', 'fusioninventory')."</a>";
|
|
echo " - <a onclick= \"if (unMarkAllRows('printer_history_form')) return FALSE;\"
|
|
href='".$_SERVER['PHP_SELF']."?select=none'>".
|
|
__('Uncheck All', 'fusioninventory')."</a> ";
|
|
echo "<input type='submit' name='delete' value=\"".__('Delete', 'fusioninventory').
|
|
"\" class='submit' ></div></td></tr>";
|
|
echo "</table>";
|
|
Html::closeForm();
|
|
echo "</div>";
|
|
return true;
|
|
}
|
|
|
|
|
|
/**
|
|
* Display printer graph form
|
|
*
|
|
* @global object $DB
|
|
* @global array $CFG_GLPI
|
|
* @param integer $id the id of printer
|
|
* @param array $options
|
|
*/
|
|
function showGraph($id, $options = []) {
|
|
global $DB, $CFG_GLPI;
|
|
|
|
$printer = new Printer();
|
|
|
|
$where='';
|
|
$begin='';
|
|
$end='';
|
|
$timeUnit='day';
|
|
$graphField='pages_total';
|
|
$pagecounters = [];$graphType='day';
|
|
if (isset($_SESSION['glpi_plugin_fusioninventory_graph_begin'])) {
|
|
$begin = $_SESSION['glpi_plugin_fusioninventory_graph_begin'];
|
|
}
|
|
if ($begin == 'NULL' OR $begin == '') {
|
|
$begin = date("Y-m-01"); // first day of current month
|
|
}
|
|
if (isset($_SESSION['glpi_plugin_fusioninventory_graph_end'])) {
|
|
$end=$_SESSION['glpi_plugin_fusioninventory_graph_end'];
|
|
}
|
|
if (isset($_SESSION['glpi_plugin_fusioninventory_graph_type'])) {
|
|
$graphType = $_SESSION['glpi_plugin_fusioninventory_graph_type'];
|
|
}
|
|
if ($end == 'NULL' OR $end == '') {
|
|
$end = date("Y-m-d"); // today
|
|
}
|
|
if (isset($_SESSION['glpi_plugin_fusioninventory_graph_timeUnit'])) {
|
|
$timeUnit = $_SESSION['glpi_plugin_fusioninventory_graph_timeUnit'];
|
|
}
|
|
if (!isset($_SESSION['glpi_plugin_fusioninventory_graph_printersComp'])) {
|
|
$_SESSION['glpi_plugin_fusioninventory_graph_printersComp']=[];
|
|
}
|
|
if (isset($_SESSION['glpi_plugin_fusioninventory_graph_printerCompAdd'])) {
|
|
$printerCompAdd = $_SESSION['glpi_plugin_fusioninventory_graph_printerCompAdd'];
|
|
if (!key_exists($printerCompAdd,
|
|
$_SESSION['glpi_plugin_fusioninventory_graph_printersComp'])) {
|
|
$oPrinter = new Printer();
|
|
if ($oPrinter->getFromDB($printerCompAdd)) {
|
|
$_SESSION['glpi_plugin_fusioninventory_graph_printersComp'][$printerCompAdd] =
|
|
$oPrinter->getField('name');
|
|
}
|
|
}
|
|
} else if (isset($_SESSION['glpi_plugin_fusioninventory_graph_printerCompRemove'])) {
|
|
unset($_SESSION['glpi_plugin_fusioninventory_graph_printersComp'][$_SESSION['glpi_plugin_fusioninventory_graph_printerCompRemove']]);
|
|
}
|
|
$oPrinter = new Printer();
|
|
$printers = $_SESSION['glpi_plugin_fusioninventory_graph_printersComp'];
|
|
$printersView = $printers; // printers without the current printer
|
|
if (isset($printersView[$id])) {
|
|
unset($printersView[$id]);
|
|
} else {
|
|
if ($oPrinter->getFromDB($id)) {
|
|
$printers[$id] = $oPrinter->getField('name');
|
|
}
|
|
}
|
|
|
|
$printersList = '';
|
|
foreach ($printers as $printers_id=>$printername) {
|
|
if ($printersList != '') {
|
|
$printersList .= '<br/>';
|
|
}
|
|
if ($printers_id == $id) {
|
|
$printersList .= $printername;
|
|
} else {
|
|
$oPrinter->getFromDB($printers_id);
|
|
$printersList .= $oPrinter->getLink(1);
|
|
}
|
|
}
|
|
$printersIds = "";
|
|
foreach (array_keys($printers) as $printerId) {
|
|
if ($printersIds != '') {
|
|
$printersIds.=', ';
|
|
}
|
|
$printersIds .= $printerId;
|
|
}
|
|
|
|
$where = " WHERE `printers_id` IN(".$printersIds.")";
|
|
if ($begin!='' || $end!='') {
|
|
$where .= " AND " .self::getDateRequest("`date`", $begin, $end);
|
|
}
|
|
$group = '';
|
|
switch ($timeUnit) {
|
|
case 'day':
|
|
$group = "GROUP BY `printers_id`, `year`, `month`, `day`";
|
|
break;
|
|
case 'week':
|
|
$group = "GROUP BY `printers_id`, `year`, `month`, `week`";
|
|
break;
|
|
case 'month':
|
|
$group = "GROUP BY `printers_id`, `year`, `month`";
|
|
break;
|
|
case 'year':
|
|
$group = "GROUP BY `printers_id`, `year`";
|
|
break;
|
|
}
|
|
|
|
echo "<form method='post' name='snmp_form' id='snmp_form' action='".
|
|
Plugin::getWebDir('fusioninventory')."/front/printer_info.form.php'>";
|
|
echo "<table class='tab_cadre' cellpadding='5' width='950'>";
|
|
$mapping = new PluginFusioninventoryMapping();
|
|
$maps = $mapping->find(['itemtype' => 'Printer']);
|
|
foreach ($maps as $mapfields) {
|
|
if (!isset($mapfields["shortlocale"])) {
|
|
$mapfields["shortlocale"] = $mapfields["locale"];
|
|
}
|
|
$pagecounters[$mapfields['name']] = $mapping->getTranslation($mapfields);
|
|
}
|
|
|
|
echo "<tr class='tab_bg_1'>";
|
|
echo "<th colspan='4'>";
|
|
echo __('Printed page counter', 'fusioninventory');
|
|
echo "</th>";
|
|
echo "</tr>";
|
|
|
|
echo "<tr class='tab_bg_1'>";
|
|
echo "<td class='left'>".__('Start date')." :</td>";
|
|
echo "<td class='left'>";
|
|
Html::showDateField("graph_begin", ['value' => $begin]);
|
|
echo "</td>";
|
|
echo "<td class='left'>".__('Time unit', 'fusioninventory')." :</td>";
|
|
echo "<td class='left'>";
|
|
$elementsTime=['day' => _n('Day', 'Days', 1),
|
|
'week' => __('Week'),
|
|
'month'=> _n('Month', 'Months', 1),
|
|
'year' => __('Year', 'fusioninventory')];
|
|
|
|
Dropdown::showFromArray('graph_timeUnit', $elementsTime,
|
|
['value'=>$timeUnit]);
|
|
echo "</td>";
|
|
echo "</tr>";
|
|
|
|
echo "<tr class='tab_bg_1'>";
|
|
echo "<td class='left'>".__('End date')." :</td>";
|
|
echo "<td class='left'>";
|
|
Html::showDateField("graph_end", ['value' => $end]);
|
|
echo "</td>";
|
|
echo "<td class='left'>".__('Display', 'fusioninventory')." :</td>";
|
|
echo "<td class='left'>";
|
|
$elements=['total'=>__('Total counter', 'fusioninventory'),
|
|
|
|
'day'=>__('pages per day', 'fusioninventory')];
|
|
|
|
Dropdown::showFromArray('graph_type', $elements,
|
|
['value'=>$graphType]);
|
|
echo "</td>";
|
|
echo "</tr>";
|
|
|
|
echo "<tr class='tab_bg_2'>";
|
|
echo "<td class='center' colspan='4'>
|
|
<input type='submit' class='submit' name='graph_plugin_fusioninventory_printer_period'
|
|
value='" . __('Update') . "'/>";
|
|
echo "</td>";
|
|
echo "</tr>\n";
|
|
|
|
echo "<tr>";
|
|
echo "<th colspan='4'>".__('Printers to compare', 'fusioninventory')."</th>";
|
|
echo "</tr>";
|
|
|
|
echo "<tr class='tab_bg_1'>";
|
|
echo "<td class='left' rowspan='3'>".__('Printer')." :</td>";
|
|
echo "<td class='left' rowspan='3'>";
|
|
echo $printersList;
|
|
echo "</td>";
|
|
echo "<td class='left'>".__('Add a printer', 'fusioninventory')." :</td>";
|
|
echo "<td class='left'>";
|
|
$printersused = [];
|
|
foreach ($printersView as $printer_id=>$name) {
|
|
$printersused[] = $printer_id;
|
|
}
|
|
$printer->getFromDB($id);
|
|
Dropdown::show('Printer', ['name' =>'graph_printerCompAdd',
|
|
'entity' => $printer->fields['entities_id'],
|
|
'used' => $printersused]);
|
|
echo " <input type='submit' value=\"".__('Add')."\" class='submit' ".
|
|
"name='graph_plugin_fusioninventory_printer_add'>";
|
|
echo "</td>";
|
|
echo "</tr>\n";
|
|
|
|
echo "<tr class='tab_bg_1'>";
|
|
echo "<td class='left'>".__('Remove a printer', 'fusioninventory')." :</td>";
|
|
echo "<td class='left'>";
|
|
$printersTmp = $printersView;
|
|
$printersTmp[0] = "-----";
|
|
asort($printersTmp);
|
|
Dropdown::showFromArray('graph_printerCompRemove', $printersTmp);
|
|
echo " <input type='submit' value=\"".__('Delete', 'fusioninventory')."\" ".
|
|
"class='submit' name='graph_plugin_fusioninventory_printer_remove'>";
|
|
echo "</td>";
|
|
echo "</tr>\n";
|
|
|
|
echo "<tr class='tab_bg_1'>";
|
|
echo "<td colspan='2'></td>";
|
|
echo "</tr>";
|
|
|
|
echo "</table>";
|
|
Html::closeForm();
|
|
|
|
$elementsField=[
|
|
'pages_total' => $pagecounters['pagecountertotalpages'],
|
|
'pages_n_b' => $pagecounters['pagecounterblackpages'],
|
|
'pages_color' => $pagecounters['pagecountercolorpages'],
|
|
'pages_recto_verso' => $pagecounters['pagecounterrectoversopages'],
|
|
'scanned' => $pagecounters['pagecounterscannedpages'],
|
|
'pages_total_print' => $pagecounters['pagecountertotalpages_print'],
|
|
'pages_n_b_print' => $pagecounters['pagecounterblackpages_print'],
|
|
'pages_color_print' => $pagecounters['pagecountercolorpages_print'],
|
|
'pages_total_copy' => $pagecounters['pagecountertotalpages_copy'],
|
|
'pages_n_b_copy' => $pagecounters['pagecounterblackpages_copy'],
|
|
'pages_color_copy' => $pagecounters['pagecountercolorpages_copy'],
|
|
'pages_total_fax' => $pagecounters['pagecountertotalpages_fax']];
|
|
|
|
echo "<br/>";
|
|
$a_graph = [];
|
|
foreach ($elementsField as $graphField=>$name) {
|
|
$query = "SELECT `printers_id`, DAY(`date`)-1 AS `day`, WEEK(`date`) AS `week`,
|
|
MONTH(`date`) AS `month`, YEAR(`date`) AS `year`, `date`,
|
|
`$graphField`
|
|
FROM `glpi_plugin_fusioninventory_printerlogs`"
|
|
.$where.
|
|
" AND `".$graphField."` > 0 "
|
|
.$group;
|
|
$result = $DB->query($query);
|
|
if ($DB->numrows($result) == 0 AND $graphField != "pages_total") {
|
|
unset($elementsField[$graphField]);
|
|
}
|
|
}
|
|
foreach ($elementsField as $graphField=>$name) {
|
|
$query = "SELECT `printers_id`, DAY(`date`)-1 AS `day`, WEEK(`date`) AS `week`,
|
|
MONTH(`date`) AS `month`, YEAR(`date`) AS `year`, `date`,
|
|
`$graphField`
|
|
FROM `glpi_plugin_fusioninventory_printerlogs`"
|
|
.$where
|
|
.$group."
|
|
ORDER BY `year`, `month`, `day`, `printers_id`";
|
|
|
|
$input = [];
|
|
$result = $DB->query($query);
|
|
|
|
if ($result) {
|
|
if ($DB->numrows($result) != 0) {
|
|
$pages = [];
|
|
$data = [];
|
|
$date = '';
|
|
while ($data = $DB->fetchAssoc($result)) {
|
|
switch ($timeUnit) {
|
|
|
|
case 'day':
|
|
$split = explode(" ", $data['date']);
|
|
$date = $split[0];
|
|
break;
|
|
|
|
case 'week':
|
|
$split = explode(" ", $data['date']);
|
|
$date = $split[0];
|
|
break;
|
|
|
|
case 'month':
|
|
$split = explode(" ", $data['date']);
|
|
$split2 = explode("-", $split[0]);
|
|
$date = $split2[0]."-".$split2[1];
|
|
break;
|
|
|
|
case 'year':
|
|
$split = explode(" ", $data['date']);
|
|
$split2 = explode("-", $split[0]);
|
|
$date = $split2[0];
|
|
break;
|
|
|
|
}
|
|
|
|
if ($graphType == 'day') {
|
|
if (!isset($pages[$data['printers_id']])) {
|
|
$pages[$data['printers_id']] = $data[$graphField];
|
|
} else {
|
|
$y = $data[$graphField] - $pages[$data['printers_id']];
|
|
if ($y < 0) {
|
|
$y = 0;
|
|
}
|
|
$input[] = ['x' => $date,
|
|
'y' => $y];
|
|
if ($data[$graphField] > 0) {
|
|
$pages[$data['printers_id']] = $data[$graphField];
|
|
}
|
|
}
|
|
} else {
|
|
$input[] = ['x' => $date,
|
|
'y' => $data[$graphField]];
|
|
}
|
|
}
|
|
} else {
|
|
if ($graphType == 'day') {
|
|
$input[] = ['x' => date("Y-m-d"),
|
|
'y' => 0];
|
|
}
|
|
}
|
|
}
|
|
|
|
$continue = 1;
|
|
|
|
if (($continue == '0') OR ($continue == '-1')) {
|
|
echo "<table class='tab_cadre' cellpadding='5' width='900'>";
|
|
echo "<tr class='tab_bg_1'>";
|
|
echo "<th>";
|
|
echo $name;
|
|
echo "</th>";
|
|
echo "</tr>";
|
|
|
|
echo "<tr class='tab_bg_1'>";
|
|
echo "<td align='center'>";
|
|
if ($continue == '0') {
|
|
echo __('Too datas to display', 'fusioninventory');
|
|
}
|
|
echo "</td>";
|
|
echo "</tr>";
|
|
|
|
echo "</table><br/>";
|
|
} else {
|
|
if (count($input) > 0) {
|
|
$split = explode(' > ', $name);
|
|
$a_graph[] = [
|
|
'key' => $split[count($split) - 1],
|
|
'values' => $input
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|
|
// Display graph
|
|
echo '<div id="chartPrinter">'.
|
|
'<svg style="height: 400px; width: 950px;"></svg>'.
|
|
'</div>';
|
|
|
|
echo "<script type='text/javascript'>
|
|
function drawGraph() {
|
|
var chart = nv.models.multiBarChart();
|
|
|
|
chart.yAxis
|
|
.tickFormat(d3.format(',0f'));
|
|
|
|
d3.select('#chartPrinter svg')
|
|
.datum(exampleData())
|
|
.transition().duration(500).call(chart);
|
|
|
|
nv.utils.windowResize(chart.update);
|
|
}
|
|
";
|
|
|
|
echo ' function exampleData() {
|
|
return '.json_encode($a_graph).'
|
|
}
|
|
|
|
drawGraph();
|
|
</script>';
|
|
|
|
}
|
|
|
|
public static function getDateRequest($field, $begin, $end) {
|
|
$sql = '';
|
|
if (!empty($begin)) {
|
|
$sql .= " $field >= '$begin' ";
|
|
}
|
|
|
|
if (!empty($end)) {
|
|
if (!empty($sql)) {
|
|
$sql .= " AND ";
|
|
}
|
|
$sql .= " $field <= ADDDATE('$end' , INTERVAL 1 DAY) ";
|
|
}
|
|
return " (".$sql.") ";
|
|
}
|
|
}
|