grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026.
--------------------------------------------------------------------------
*/
/** @file
* @brief
*/
if (!defined('GLPI_ROOT')) {
die("Sorry. You can't access this file directly");
}
/**
* Event Class
**/
class Event extends CommonDBTM {
static $rightname = 'logs';
static function getTypeName($nb=0) {
return _n('Log', 'Logs', $nb);
}
function prepareInputForAdd($input) {
global $CFG_GLPI;
if (isset($input['level']) && ($input['level'] <= $CFG_GLPI["event_loglevel"])) {
return $input;
}
return false;
}
function post_addItem() {
//only log in file, important events (connections and critical events; TODO : we need to add a general option to filter this in 9.1)
if (isset($this->fields['level']) && $this->fields['level'] <= 3) {
$message_type = "";
if (isset($this->fields['type']) && $this->fields['type'] != 'system') {
$message_type = "[".$this->fields['type']." ".$this->fields['id']."] ";
}
$full_message = "[".$this->fields['service']."] ".
$message_type.
$this->fields['level'].": ".
Toolbox::stripslashes_deep($this->fields['message'])."\n";
Toolbox::logInFile("event", $full_message);
}
}
/**
* Log an event.
*
* Log the event $event on the glpi_event table with all the others args, if
* $level is above or equal to setting from configuration.
*
* @param $items_id
* @param $type
* @param $level
* @param $service
* @param $event
**/
static function log($items_id, $type, $level, $service, $event) {
global $DB;
$input = array('items_id' => intval($items_id),
'type' => $DB->escape($type),
'date' => $_SESSION["glpi_currenttime"],
'service' => $DB->escape($service),
'level' => intval($level),
'message' => $DB->escape($event));
$tmp = new self();
return $tmp->add($input);
}
/**
* Clean old event - Call by cron
*
* @param $day integer
*
* @return integer number of events deleted
**/
static function cleanOld($day) {
global $DB;
$secs = $day * DAY_TIMESTAMP;
$query_exp = "DELETE
FROM `glpi_events`
WHERE UNIX_TIMESTAMP(date) < UNIX_TIMESTAMP()-$secs";
$DB->query($query_exp);
return $DB->affected_rows();
}
/**
* Return arrays for function showEvent et lastEvent
**/
static function logArray() {
static $logItemtype = array();
static $logService = array();
if (count($logItemtype)) {
return array($logItemtype, $logService);
}
$logItemtype = array('system' => __('System'),
'devices' => _n('Component', 'Components', Session::getPluralNumber()),
'planning' => __('Planning'),
'reservation' => _n('Reservation', 'Reservations', Session::getPluralNumber()),
'dropdown' => _n('Dropdown', 'Dropdowns', Session::getPluralNumber()),
'rules' => _n('Rule', 'Rules', Session::getPluralNumber()));
$logService = array('inventory' => __('Assets'),
'tracking' => _n('Ticket', 'Tickets', Session::getPluralNumber()),
'maintain' => __('Assistance'),
'planning' => __('Planning'),
'tools' => __('Tools'),
'financial' => __('Management'),
'login' => __('Connection'),
'setup' => __('Setup'),
'security' => __('Security'),
'reservation' => _n('Reservation', 'Reservations', Session::getPluralNumber()),
'cron' => _n('Automatic action', 'Automatic actions', Session::getPluralNumber()),
'document' => _n('Document', 'Documents', Session::getPluralNumber()),
'notification' => _n('Notification', 'Notifications', Session::getPluralNumber()),
'plugin' => _n('Plugin', 'Plugins', Session::getPluralNumber()));
return array($logItemtype, $logService);
}
/**
* @param $type
* @param $items_id
**/
static function displayItemLogID($type, $items_id) {
global $CFG_GLPI;
if (($items_id == "-1") || ($items_id == "0")) {
echo " ";//$item;
} else {
switch ($type) {
case "rules" :
echo "".$items_id."";
break;
case "infocom" :
$rand = mt_rand();
echo " $items_id";
Ajax::createIframeModalWindow('infocom'.$rand,
$CFG_GLPI["root_doc"]."/front/infocom.form.php".
"?id=".$items_id,
array('height' => 600));
case "devices" :
echo $items_id;
break;
case "reservationitem" :
echo "".$items_id."";
break;
default :
$type = getSingular($type);
$url = '';
if ($item = getItemForItemtype($type)) {
$url = $item->getFormURL();
}
if (!empty($url)) {
echo "".$items_id."";
} else {
echo $items_id;
}
break;
}
}
}
/**
* Print a nice tab for last event from inventory section
*
* Print a great tab to present lasts events occured on glpi
*
* @param $user string name user to search on message (default '')
**/
static function showForUser($user="") {
global $DB, $CFG_GLPI;
// Show events from $result in table form
list($logItemtype, $logService) = self::logArray();
// define default sorting
$usersearch = "";
if (!empty($user)) {
$usersearch = $user." ";
}
// Query Database
$query = "SELECT *
FROM `glpi_events`
WHERE `message` LIKE '".$usersearch."%'
ORDER BY `date` DESC
LIMIT 0,".intval($_SESSION['glpilist_limit']);
// Get results
$result = $DB->query($query);
// Number of results
$number = $DB->numrows($result);
// No Events in database
if ($number < 1) {
echo "
";
echo "| ".__('No Event')." |
";
echo "
";
return;
}
// Output events
$i = 0;
echo "
";
echo "| ";
//TRANS: %d is the number of item to display
echo "".
sprintf(__('Last %d events'), $_SESSION['glpilist_limit'])."";
echo " |
";
echo "| ".__('Source')." | ";
echo "".__('Date')." | ";
echo "".__('Service')." | ";
echo "".__('Message')." |
";
while ($i < $number) {
$ID = $DB->result($result, $i, "id");
$items_id = $DB->result($result, $i, "items_id");
$type = $DB->result($result, $i, "type");
$date = $DB->result($result, $i, "date");
$service = $DB->result($result, $i, "service");
$message = $DB->result($result, $i, "message");
$itemtype = " ";
if (isset($logItemtype[$type])) {
$itemtype = $logItemtype[$type];
} else {
$type = getSingular($type);
if ($item = getItemForItemtype($type)) {
$itemtype = $item->getTypeName(1);
}
}
echo "| ".$itemtype." | ";
echo "";
self::displayItemLogID($type, $items_id);
echo " | ".Html::convDateTime($date)." | ";
echo "".(isset($logService[$service])?$logService[$service]:'');
echo " | ".$message." |
";
$i++;
}
echo "
";
}
/**
* Print a nice tab for last event
*
* Print a great tab to present lasts events occured on glpi
*
* @param $target where to go when complete
* @param $order order by clause occurences (eg: ) (default 'DESC')
* @param $sort order by clause occurences (eg: date) (defaut 'date')
* @param $start (default 0)
**/
static function showList($target, $order='DESC', $sort='date', $start=0) {
global $DB, $CFG_GLPI;
// Show events from $result in table form
list($logItemtype, $logService) = self::logArray();
// Columns of the Table
$items = array("type" => array(__('Source'), ""),
"items_id" => array(__('ID'), ""),
"date" => array(__('Date'), ""),
"service" => array(__('Service'), "width='8%'"),
"level" => array(__('Level'), "width='8%'"),
"message" => array(__('Message'), "width='50%'"));
// define default sorting
if (!isset($items[$sort])) {
$sort = "date";
}
if ($order != "ASC") {
$order = "DESC";
}
// Query Database
$query_limit = "SELECT *
FROM `glpi_events`
ORDER BY `$sort` $order
LIMIT ".intval($start).",".intval($_SESSION['glpilist_limit']);
// Number of results
$numrows = countElementsInTable("glpi_events");
// Get results
$result = $DB->query($query_limit);
$number = $DB->numrows($result);
// No Events in database
if ($number < 1) {
echo "".__('No Event')."
";
return;
}
// Output events
$i = 0;
echo "";
$parameters = "sort=$sort&order=$order";
Html::printPager($start, $numrows, $target, $parameters);
echo "
";
echo "";
foreach ($items as $field => $args) {
echo "| ".$args[0].
" | ";
}
echo "
";
while ($i < $number) {
$ID = $DB->result($result, $i, "id");
$items_id = $DB->result($result, $i, "items_id");
$type = $DB->result($result, $i, "type");
$date = $DB->result($result, $i, "date");
$service = $DB->result($result, $i, "service");
$level = $DB->result($result, $i, "level");
$message = $DB->result($result, $i, "message");
$itemtype = " ";
if (isset($logItemtype[$type])) {
$itemtype = $logItemtype[$type];
} else {
$type = getSingular($type);
if ($item = getItemForItemtype($type)) {
$itemtype = $item->getTypeName(1);
}
}
echo "";
echo "| $itemtype | ";
echo "";
self::displayItemLogID($type, $items_id);
echo " | ".Html::convDateTime($date)." | ";
echo "".(isset($logService[$service])?$logService[$service]:$service);
echo " | ".$level." | ".$message." |
";
$i++;
}
echo "
";
}
/** Display how many logins since
*
* @return nothing
**/
static function getCountLogin() {
global $DB;
$query = "SELECT COUNT(*)
FROM `glpi_events`
WHERE `message` LIKE '%logged in%'";
$query2 = "SELECT `date`
FROM `glpi_events`
ORDER BY `date` ASC
LIMIT 1";
$result = $DB->query($query);
$result2 = $DB->query($query2);
$nb_login = $DB->result($result, 0, 0);
$date = $DB->result($result2, 0, 0);
// Only for DEMO mode (not need to be translated)
printf(_n('%1$s login since %2$s', '%1$s logins since %2$s', $nb_login),
''.$nb_login.'', $date);
}
}