whoami7 - Manager
:
/
home
/
dataiclx
/
vielorbe.com
/
wp-content
/
plugins
/
suremails
/
inc
/
api
/
Upload File:
files >> //home/dataiclx/vielorbe.com/wp-content/plugins/suremails/inc/api/logs.php
<?php /** * Logs class * * Handles email logs related REST API endpoints for the SureMails plugin. * * @package SureMails\Inc\API */ namespace SureMails\Inc\API; use SureMails\Inc\DB\EmailLog; use SureMails\Inc\Traits\Instance; use WP_REST_Request; use WP_REST_Response; use WP_REST_Server; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } /** * Class Logs * * Handles email logs related REST API endpoints. */ class Logs extends Api_Base { use Instance; /** * Route base. * * @var string */ protected $rest_base = '/email-logs'; /** * Constructor * * @since 0.0.1 */ public function __construct() { } /** * Register API routes. * * @since 0.0.1 * @return void */ public function register_routes() { register_rest_route( $this->get_api_namespace(), $this->rest_base, [ 'methods' => WP_REST_Server::CREATABLE, // POST method. 'callback' => [ $this, 'get_email_logs' ], 'permission_callback' => [ $this, 'validate_permission' ], 'args' => [ 'page' => [ 'required' => false, 'validate_callback' => static function ( $param ) { return is_numeric( $param ) && (int) $param > 0; }, 'sanitize_callback' => 'absint', ], 'per_page' => [ 'required' => false, 'validate_callback' => static function ( $param ) { return is_numeric( $param ) && (int) $param > 0; }, 'sanitize_callback' => 'absint', ], 'start_date' => [ 'required' => false, 'validate_callback' => static function ( $param ) { return strtotime( $param ) !== false; }, 'sanitize_callback' => 'sanitize_text_field', ], 'end_date' => [ 'required' => false, 'validate_callback' => static function ( $param ) { return strtotime( $param ) !== false; }, 'sanitize_callback' => 'sanitize_text_field', ], 'filter' => [ 'required' => false, 'validate_callback' => static function ( $param ) { return in_array( $param, EmailLog::instance()->get_statuses(), true ); }, 'sanitize_callback' => 'sanitize_text_field', ], 'search' => [ 'required' => false, 'validate_callback' => static function ( $param ) { return is_string( $param ) && strlen( $param ) > 0; }, 'sanitize_callback' => 'sanitize_text_field', ], ], ] ); } /** * Retrieves email logs with optional filters and search. * * @param WP_REST_Request<array<string, mixed>> $request The REST request object. * @return WP_REST_Response The REST API response with email logs. */ public function get_email_logs( $request ) { // Retrieve parameters from the request. $page = max( 1, (int) ( $request->get_param( 'page' ) ?? 1 ) ); $per_page = max( 1, (int) ( $request->get_param( 'per_page' ) ?? 10 ) ); $start_date = sanitize_text_field( $request->get_param( 'start_date' ) ); $end_date = sanitize_text_field( $request->get_param( 'end_date' ) ); $filter = sanitize_text_field( $request->get_param( 'filter' ) ); $search = sanitize_text_field( $request->get_param( 'search' ) ); $start_datetime = $start_date ? new \DateTime( $start_date ) : null; $end_datetime = $end_date ? new \DateTime( $end_date ) : null; // Build 'where' conditions based on request parameters. $where = []; // Set start and end date in where array. if ( ! empty( $start_datetime ) ) { if ( empty( $end_datetime ) ) { $end_datetime = $start_datetime; } $start_datetime->setTime( 0, 0, 0 ); $end_datetime->setTime( 23, 59, 59 ); $where['updated_at >='] = $start_datetime->format( 'Y-m-d H:i:s' ); $where['updated_at <='] = $end_datetime->format( 'Y-m-d H:i:s' ); } if ( in_array( $filter, EmailLog::instance()->get_statuses(), true ) ) { $where['status'] = $filter; } if ( ! empty( $search ) ) { $where['subject LIKE'] = '%' . $search . '%'; $where['OR email_to LIKE'] = '%' . $search . '%'; } // Fetch paginated logs. $logs = $this->get_logs( $where, $page, $per_page ); // Get the total count of logs. $total_count = $this->get_total_count( $where ); if ( $logs === false || $total_count === false ) { return new WP_REST_Response( [ 'success' => false, 'message' => 'Failed to retrieve email logs.', ], 500 ); } // Return the response. return rest_ensure_response( [ 'success' => true, 'logs' => $logs, 'total_count' => $total_count, ] ); } /** * Retrieve email logs with pagination. * * @param array $where The 'where' conditions for the query. * @param int $page The current page number. * @param int $per_page The number of logs per page. * @return array|false The fetched logs or false on failure. */ protected function get_logs( array $where, int $page, int $per_page ) { $email_log = EmailLog::instance(); $offset = ( $page - 1 ) * $per_page; return $email_log->get( [ 'where' => $where, 'order' => [ 'updated_at' => 'DESC' ], 'limit' => $per_page, 'offset' => $offset, ] ); } /** * Retrieve the total count of email logs. * * @param array $where The 'where' conditions for the query. * @return int|false The total count or false on failure. */ protected function get_total_count( array $where ) { $email_log = EmailLog::instance(); $count_results = $email_log->get( [ 'select' => 'COUNT(*) as total_count', 'where' => $where, ] ); if ( $count_results === false || empty( $count_results ) ) { return false; } return (int) ( $count_results[0]['total_count'] ?? 0 ); } } Logs::instance();
Copyright ©2021 || Defacer Indonesia