172 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			PHP
		
	
			
		
		
	
	
			172 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			PHP
		
	
| <?php
 | |
| 
 | |
| /**
 | |
|  * class Component
 | |
|  *
 | |
|  * Provides methods to interact with Jitsi component events in the database.
 | |
|  */
 | |
| class Component {
 | |
|     /**
 | |
|      * @var PDO|null $db The database connection instance.
 | |
|      */
 | |
|     private $db;
 | |
| 
 | |
|     /**
 | |
|      * Component constructor.
 | |
|      * Initializes the database connection.
 | |
|      *
 | |
|      * @param object $database The database object to initialize the connection.
 | |
|      */
 | |
|     public function __construct($database) {
 | |
|         $this->db = $database->getConnection();
 | |
|     }
 | |
| 
 | |
| 
 | |
|     /**
 | |
|      * Retrieves Jitsi component events based on various filters.
 | |
|      *
 | |
|      * @param string $jitsi_component The Jitsi component name.
 | |
|      * @param int $component_id The component ID.
 | |
|      * @param string $event_type The type of event to filter by.
 | |
|      * @param string $from_time The start date in 'YYYY-MM-DD' format.
 | |
|      * @param string $until_time The end date in 'YYYY-MM-DD' format.
 | |
|      * @param int $offset The offset for pagination.
 | |
|      * @param int $items_per_page The number of items to retrieve per page.
 | |
|      *
 | |
|      * @return array The list of Jitsi component events or an empty array if no results.
 | |
|      */
 | |
|     public function jitsiComponents($jitsi_component, $component_id, $event_type, $from_time, $until_time, $offset=0, $items_per_page='') {
 | |
|         global $logObject;
 | |
|         try {
 | |
|             // Add time part to dates if not present
 | |
|             if (strlen($from_time) <= 10) {
 | |
|                 $from_time .= ' 00:00:00';
 | |
|             }
 | |
|             if (strlen($until_time) <= 10) {
 | |
|                 $until_time .= ' 23:59:59';
 | |
|             }
 | |
| 
 | |
|             // list of jitsi component events
 | |
|             $sql = "SELECT jitsi_component, loglevel, time, component_id, event_type, event_param
 | |
|                     FROM jitsi_components
 | |
|                     WHERE time >= :from_time 
 | |
|                     AND time <= :until_time";
 | |
| 
 | |
|             // Only add component and event filters if they're not the default values
 | |
|             if ($jitsi_component !== 'jitsi_component') {
 | |
|                 $sql .= " AND LOWER(jitsi_component) = LOWER(:jitsi_component)";
 | |
|             }
 | |
|             if ($component_id !== 'component_id') {
 | |
|                 $sql .= " AND component_id = :component_id";
 | |
|             }
 | |
|             if ($event_type !== 'event_type') {
 | |
|                 $sql .= " AND event_type LIKE :event_type";
 | |
|             }
 | |
| 
 | |
|             $sql .= " ORDER BY time";
 | |
| 
 | |
|             if ($items_per_page) {
 | |
|                 $sql .= ' LIMIT :offset, :items_per_page';
 | |
|             }
 | |
| 
 | |
|             $stmt = $this->db->prepare($sql);
 | |
|             
 | |
|             // Bind parameters only if they're not default values
 | |
|             if ($jitsi_component !== 'jitsi_component') {
 | |
|                 $stmt->bindValue(':jitsi_component', trim($jitsi_component, "'"));
 | |
|             }
 | |
|             if ($component_id !== 'component_id') {
 | |
|                 $stmt->bindValue(':component_id', trim($component_id, "'"));
 | |
|             }
 | |
|             if ($event_type !== 'event_type') {
 | |
|                 $stmt->bindValue(':event_type', '%' . trim($event_type, "'") . '%');
 | |
|             }
 | |
| 
 | |
|             $stmt->bindParam(':from_time', $from_time);
 | |
|             $stmt->bindParam(':until_time', $until_time);
 | |
| 
 | |
|             if ($items_per_page) {
 | |
|                 $stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
 | |
|                 $stmt->bindParam(':items_per_page', $items_per_page, PDO::PARAM_INT);
 | |
|             }
 | |
| 
 | |
|             $stmt->execute();
 | |
|             $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
 | |
|             
 | |
|             if (!empty($result)) {
 | |
|                 $logObject->insertLog(0, "Retrieved " . count($result) . " Jitsi component events");
 | |
|             }
 | |
|             return $result;
 | |
|         } catch (PDOException $e) {
 | |
|             $logObject->insertLog(0, "Failed to retrieve Jitsi component events: " . $e->getMessage());
 | |
|             return [];
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Gets the total count of components events matching the filter criteria
 | |
|      * 
 | |
|      * @param string $jitsi_component The Jitsi component name.
 | |
|      * @param int $component_id The component ID.
 | |
|      * @param string $event_type The type of event to filter by.
 | |
|      * @param string $from_time The start date in 'YYYY-MM-DD' format.
 | |
|      * @param string $until_time The end date in 'YYYY-MM-DD' format.
 | |
|      * 
 | |
|      * @return int The total count of matching components
 | |
|      */
 | |
|     public function getComponentEventsCount($jitsi_component, $component_id, $event_type, $from_time, $until_time) {
 | |
|         global $logObject;
 | |
|         try {
 | |
|             // Add time part to dates if not present
 | |
|             if (strlen($from_time) <= 10) {
 | |
|                 $from_time .= ' 00:00:00';
 | |
|             }
 | |
|             if (strlen($until_time) <= 10) {
 | |
|                 $until_time .= ' 23:59:59';
 | |
|             }
 | |
| 
 | |
|             // Build the query
 | |
|             $sql = "SELECT COUNT(*) as total
 | |
|                     FROM jitsi_components
 | |
|                     WHERE time >= :from_time
 | |
|                     AND time <= :until_time";
 | |
| 
 | |
|             // Only add component and event filters if they're not the default values
 | |
|             if ($jitsi_component !== 'jitsi_component') {
 | |
|                 $sql .= " AND LOWER(jitsi_component) = LOWER(:jitsi_component)";
 | |
|             }
 | |
|             if ($component_id !== 'component_id') {
 | |
|                 $sql .= " AND component_id = :component_id";
 | |
|             }
 | |
|             if ($event_type !== 'event_type') {
 | |
|                 $sql .= " AND event_type LIKE :event_type";
 | |
|             }
 | |
| 
 | |
|             $stmt = $this->db->prepare($sql);
 | |
| 
 | |
|             // Bind parameters only if they're not default values
 | |
|             if ($jitsi_component !== 'jitsi_component') {
 | |
|                 $stmt->bindValue(':jitsi_component', trim($jitsi_component, "'"));
 | |
|             }
 | |
|             if ($component_id !== 'component_id') {
 | |
|                 $stmt->bindValue(':component_id', trim($component_id, "'"));
 | |
|             }
 | |
|             if ($event_type !== 'event_type') {
 | |
|                 $stmt->bindValue(':event_type', '%' . trim($event_type, "'") . '%');
 | |
|             }
 | |
| 
 | |
|             $stmt->bindParam(':from_time', $from_time);
 | |
|             $stmt->bindParam(':until_time', $until_time);
 | |
| 
 | |
|             $stmt->execute();
 | |
|             $result = $stmt->fetch(PDO::FETCH_ASSOC);
 | |
|             return (int)$result['total'];
 | |
|         } catch (PDOException $e) {
 | |
|             $logObject->insertLog(0, "Failed to retrieve component events count: " . $e->getMessage());
 | |
|             return 0;
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| ?>
 |