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 ""; echo "
".__('No Event')."
"; return; } // Output events $i = 0; echo "
"; echo ""; echo ""; echo ""; echo ""; 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"); $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 ""; echo ""; $i++; } echo "
"; //TRANS: %d is the number of item to display echo "". sprintf(__('Last %d events'), $_SESSION['glpilist_limit']).""; echo "
".__('Source')."".__('Date')."".__('Service')."".__('Message')."
".$itemtype.""; self::displayItemLogID($type, $items_id); echo "".Html::convDateTime($date)."".(isset($logService[$service])?$logService[$service]:''); echo "".$message."
"; } /** * 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 ""; } 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 ""; echo ""; echo ""; $i++; } echo "
".$args[0]. "
$itemtype"; self::displayItemLogID($type, $items_id); echo "".Html::convDateTime($date)."".(isset($logService[$service])?$logService[$service]:$service); echo "".$level."".$message."

"; } /** 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); } }