jilo-web/app/classes/log.php

96 lines
2.8 KiB
PHP
Raw Normal View History

2024-09-16 14:09:37 +00:00
<?php
2024-11-22 13:33:19 +00:00
/**
2024-11-29 16:38:49 +00:00
* class Log
2024-11-25 14:09:47 +00:00
*
2024-11-22 13:33:19 +00:00
* Handles logging events into a database and reading log entries.
*/
2024-09-16 14:09:37 +00:00
class Log {
2024-11-22 13:33:19 +00:00
/**
2024-11-25 14:09:47 +00:00
* @var PDO|null $db The database connection instance.
2024-11-22 13:33:19 +00:00
*/
2024-09-16 14:09:37 +00:00
private $db;
2024-11-22 13:33:19 +00:00
/**
2024-11-29 16:47:18 +00:00
* Logs constructor.
* Initializes the database connection.
2024-11-22 13:33:19 +00:00
*
2024-11-29 16:47:18 +00:00
* @param object $database The database object to initialize the connection.
2024-11-22 13:33:19 +00:00
*/
2024-09-16 14:09:37 +00:00
public function __construct($database) {
$this->db = $database->getConnection();
}
2024-11-29 17:06:27 +00:00
2024-11-22 13:33:19 +00:00
/**
* Insert a log event into the database.
*
* @param int $user_id The ID of the user associated with the log event.
* @param string $message The log message to insert.
* @param string $scope The scope of the log event (e.g., 'user', 'system'). Default is 'user'.
*
* @return bool|string True on success, or an error message on failure.
*/
2024-09-16 14:09:37 +00:00
public function insertLog($user_id, $message, $scope='user') {
try {
$sql = 'INSERT INTO logs
(user_id, scope, message)
VALUES
(:user_id, :scope, :message)';
$query = $this->db->prepare($sql);
$query->execute([
':user_id' => $user_id,
':scope' => $scope,
':message' => $message,
]);
return true;
} catch (Exception $e) {
return $e->getMessage();
}
}
2024-11-29 17:06:27 +00:00
2024-11-22 13:33:19 +00:00
/**
* Retrieve log entries from the database.
*
* @param int $user_id The ID of the user whose logs are being retrieved.
* @param string $scope The scope of the logs ('user' or 'system').
* @param int $offset The offset for pagination. Default is 0.
* @param int $items_per_page The number of log entries to retrieve per page. Default is no limit.
*
* @return array An array of log entries.
*/
2024-09-16 16:08:03 +00:00
public function readLog($user_id, $scope, $offset=0, $items_per_page='') {
2024-09-16 14:09:37 +00:00
if ($scope === 'user') {
2024-09-16 16:08:03 +00:00
$sql = 'SELECT * FROM logs WHERE user_id = :user_id ORDER BY time DESC';
if ($items_per_page) {
$items_per_page = (int)$items_per_page;
$sql .= ' LIMIT ' . $offset . ',' . $items_per_page;
}
2024-09-16 14:09:37 +00:00
$query = $this->db->prepare($sql);
$query->execute([
':user_id' => $user_id,
]);
}
if ($scope === 'system') {
2024-09-16 16:08:03 +00:00
$sql = 'SELECT * FROM logs ORDER BY time DESC';
if ($items_per_page) {
$items_per_page = (int)$items_per_page;
$sql .= ' LIMIT ' . $offset . ',' . $items_per_page;
}
2024-09-16 14:09:37 +00:00
$query = $this->db->prepare($sql);
$query->execute();
}
return $query->fetchAll(PDO::FETCH_ASSOC);
}
}
?>