Files
torebki-fabiola.pl/wp-content/plugins/post-smtp/Postman/Postman-Email-Log/PostmanEmailQueryLog.php
2026-03-05 13:07:40 +01:00

295 lines
6.7 KiB
PHP

<?php
if( !class_exists( 'PostmanEmailQueryLog' ) ):
class PostmanEmailQueryLog {
private $db = '';
public $table = 'post_smtp_logs';
private $query = '';
private $columns = array();
/**
* The Construct PostmanEmailQueryLog
*
* @since 2.5.0
* @version 1.0.0
*/
public function __construct() {
global $wpdb;
$this->db = $wpdb;
$this->table = $this->db->prefix . $this->table;
}
/**
* Get Logs
*
* @param $args String
* @since 2.5.0
* @version 1.0.0
*/
public function get_logs( $args = array() ) {
/**
* Filter the query arguments
*
* @param $args Array
* @since 2.5.0
* @version 1.0.0
*/
$args = apply_filters( 'post_smtp_get_logs_args', $args );
$clause_for_date = empty( $args['search'] ) ? $this->query .= " WHERE" : $this->query .= " AND";
$args['search_by'] = array(
'original_subject',
'success',
'to_header'
);
if( !isset( $args['columns'] ) ) {
$this->columns = array(
'id',
'original_subject',
'to_header',
'success',
'time'
);
}
else {
$this->columns = $args['columns'];
}
$this->columns = array_map( function( $column ) {
return "pl.`{$column}`";
}, $this->columns );
$this->columns = implode( ',', $this->columns );
/**
* Filter the query columns
*
* @param $query String
* @param $args Array
* @since 2.5.0
* @version 1.0.0
*/
$this->columns = apply_filters( 'post_smtp_get_logs_query_cols', $this->columns, $args );
$this->query = $this->db->prepare(
"SELECT {$this->columns} FROM %i AS pl",
$this->table
);
/**
* Filter the query after the table name
*
* @param $query String
* @param $args Array
* @since 2.5.0
* @version 1.0.0
*/
$this->query = apply_filters( 'post_smtp_get_logs_query_after_table', $this->query, $args );
//Search
if( !empty( $args['search'] ) ) {
$this->query .= " WHERE";
$counter = 1;
foreach( $args['search_by'] as $key ) {
$this->query .= " {$key} LIKE '%{$this->db->esc_like( $args["search"] )}%'";
$this->query .= $counter != count( $args['search_by'] ) ? ' OR' : '';
$counter++;
}
}
//Date Filter :)
if( isset( $args['from'] ) ) {
$this->query .= $this->db->prepare(
" {$clause_for_date} pl.`time` >= %d",
$args['from']
);
}
if( isset( $args['to'] ) ) {
$clause_for_date = ( empty( $args['search'] ) && !isset( $args['from'] ) ) ? " WHERE" : " AND";
$this->query .= $this->db->prepare(
" {$clause_for_date} pl.`time` <= %d",
$args['to']
);
}
if( isset( $args['site_id'] ) && $args['site_id'] != -1 ) {
$clause_for_site = ( empty( $args['search'] ) ) ? " WHERE" : " AND";
$this->query .= " {$clause_for_site} lm.meta_value = '{$args['site_id']}'";
}
//Order By
if( !empty( $args['order'] ) && !empty( $args['order_by'] ) ) {
$orderby_sql = sanitize_sql_orderby( "`{$args['order_by']}` {$args['order']}" );
//If no alias added, add one
if( !strpos( $args['order_by'], '.' ) ) {
$orderby_sql = "pl.{$orderby_sql}";
}
$this->query .= " ORDER BY {$orderby_sql}";
}
//Lets say from 0 to 25
if( isset( $args['start'] ) && isset( $args['end'] ) ) {
$this->query .= $this->db->prepare(
" LIMIT %d, %d",
$args['start'],
$args['end']
);
}
return $this->db->get_results( $this->query );
}
/**
* Get Filtered Rows Count
* Total records, after filtering (i.e. the total number of records after filtering has been applied - not just the number of records being returned for this page of data).
*
* @since 2.5.0
* @version 1.0.0
*/
public function get_filtered_rows_count() {
$query = str_replace( $this->columns, 'COUNT(*) as count', $this->query );
//Remove LIMIT clouse to use COUNT clouse properly
$query = substr( $query, 0, strpos( $query, "LIMIT" ) );
return $this->db->get_results( $query );
}
/**
* Gets Total Rows Count
* Total records, before filtering (i.e. the total number of records in the database)
*
* @since 2.5.0
* @version 1.0.0
*/
public function get_total_row_count() {
return $this->db->get_results(
"SELECT COUNT(*) as count FROM `{$this->table}`;"
);
}
/**
* Get Last Log ID
*
* @since 2.5.0
* @version 1.0.0
*/
public function get_last_log_id() {
$result = $this->db->get_results(
"SELECT id FROM `{$this->table}` ORDER BY id DESC LIMIT 1;"
);
return empty( $result ) ? false : $result[0]->id;
}
/**
* Delete Logs
*
* @param $ids Array
* @since 2.5.0
* @version 1.0.0
*/
public function delete_logs( $ids = array() ) {
$ids = implode( ',', $ids );
$ids = $ids == -1 ? '' : "WHERE id IN ({$ids});";
return $this->db->query(
"DELETE FROM `{$this->table}` {$ids}"
);
}
/**
* Get All Logs
*
* @param $ids Array
* @since 2.5.0
* @version 1.0.0
*/
public function get_all_logs( $ids = array() ) {
$ids = implode( ',', $ids );
$ids = $ids == -1 ? '' : "WHERE id IN ({$ids});";
return $this->db->get_results(
"SELECT * FROM `{$this->table}` {$ids}"
);
}
/**
* Get Log
*
* @param $id Int
* @param $columns Array
* @since 2.5.0
* @version 1.0.0
*/
public function get_log( $id, $columns = array() ) {
$columns = empty( $columns ) ? '*' : implode( ',', $columns );
return $this->db->get_row(
$this->db->prepare(
"SELECT {$columns} FROM %i WHERE id = %d",
$this->table,
$id
),
ARRAY_A
);
}
}
endif;