????
Current Path : /home/innovagencyco/www/abtest.innovagency.co.za/wp-content/plugins/gosmtp-pro/main/ |
Current File : /home/innovagencyco/www/abtest.innovagency.co.za/wp-content/plugins/gosmtp-pro/main/logger.php |
<?php namespace GOSMTP; /** * Class Logger. * * @since 1.0.0 */ class Logger{ public $table; public function __construct(){ global $wpdb; $this->table = $wpdb->prefix . GOSMTP_DB_PREFIX .'email_logs'; } public function create_table(){ global $wpdb; $charsetCollate = $wpdb->get_charset_collate(); if($wpdb->get_var("SHOW TABLES LIKE '$this->table'") == $this->table){ return; } $sql = "CREATE TABLE $this->table ( `id` INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, `site_id` INT UNSIGNED NULL, `message_id` VARCHAR(255) NULL, `to` VARCHAR(255), `from` VARCHAR(255), `subject` VARCHAR(255), `body` LONGTEXT NULL, `headers` LONGTEXT NULL, `attachments` LONGTEXT NULL, `status` VARCHAR(20) DEFAULT 'pending', `response` TEXT NULL, `extra` TEXT NULL, `retries` INT UNSIGNED NULL DEFAULT 0, `resent_count` INT UNSIGNED NULL DEFAULT 0, `provider` TEXT NULL, `source` VARCHAR(255) NULL, `created_at` TIMESTAMP NULL, `updated_at` TIMESTAMP NULL, `parent_id` INT UNSIGNED NULL DEFAULT 0 ) $charsetCollate;"; // Make Sitepad compatible $upgrade = ABSPATH . 'site-admin/includes/upgrade.php'; $upgrade = file_exists($upgrade) ? $upgrade : ABSPATH . 'wp-admin/includes/upgrade.php'; require_once( $upgrade ); dbDelta($sql); } public function add_logs($data){ global $wpdb; if(empty($data)){ return false; } $result = $wpdb->insert($this->table, $data); if($result){ return $wpdb->insert_id; } return false; } public function update_logs($data, $id){ global $wpdb; if(empty($data) || empty($id)){ return false; } $result = $wpdb->update( $this->table, $data, array( 'id' => $id ) ); if($result){ return true; } return false; } public function delete_log($id){ global $wpdb; $data['id'] = $id; $result = $wpdb->delete($this->table, $data); if(!empty($result)){ return true; } return false; } public function get_logs($for = 'records', $id = '', $args = array()){ global $wpdb; $defaults = array( 'interval' => array(), 'limit' => 10, 'offset' => 0, 'pagination' => true, 'multiselect' => array(), ); $args = wp_parse_args( $args, $defaults ); $query = ''; $start = ''; $end = date('y-m-d').' 23:59:59'; if(!empty($args['filter'])){ $query .= 'status="'.$args['filter'].'"'; } if(!empty($args['interval']) && !empty($args['interval']['start'])){ $start = $args['interval']['start'].' 00:00:00'; if(!empty($args['interval']['end'])){ $end = $args['interval']['end'].' 23:59:59'; } $query .= (!empty($query) ? ' and (' : '').'`created_at` between "'.$start.'" and "'.$end.'" '.(!empty($query) ? ') ' : ' '); } if(!empty($args['search']) && empty($args['multiselect'])){ $query .= (!empty($query) ? ' and ' : '').' ( `from` like "%'. $args['search'] .'%" or `subject` like "%'. $args['search'] .'%" or `to` like "%'. $args['search'] .'%" or `body` like "%'. $args['search'] .'%" )'; }else if(!empty($args['search'])){ $search_qry =''; foreach($args['multiselect'] as $key => $value){ $search_qry .= '`'.$value.'` like "%'.$args['search'].'%"'; if(count($args['multiselect']) - 1 > $key){ $search_qry .= ' or '; } } $query .= (!empty($query) ? ' and ' : '').' ('.$search_qry.')'; } if(!empty($query)){ $query = ' where '.$query; } if(!empty($id)){ $query = ' where id='.$id; }else if(!empty($args['pagination'])){ $query .= $for != 'count' ? ' order by id desc LIMIT '.$args['limit'].' OFFSET '.$args['offset'] : ' '; } // echo "SELECT * FROM ".$this->table. $query; try{ if($for == 'count'){ $result = $wpdb->get_results("SELECT count(*) as records FROM ".$this->table. $query)[0]; }else{ $result = $wpdb->get_results("SELECT * FROM ".$this->table. $query); if( count($result) == 0 ){ return false; } } return $result; }catch(\Exception $e){} return false; } public function clear_records( $period = 0 ){ if( empty($period) || $period == 0 ) return; global $wpdb; $date = ( new \DateTime( '-'.$period.' seconds' ))->format('Y-m-d H:i:s'); $query = 'DELETE FROM `'.$this->table.'` WHERE created_at < %s'; if( $period == -1 ){ $query = 'TRUNCATE TABLE '.$this->table; $date = ''; } $wpdb->query( $wpdb->prepare( $query , $date) ); } public static function retention_logs(){ global $gosmtp; if(empty($gosmtp->options['logs']['retention_period'])){ return; } $logger = new Logger(); // Clear logs $logger->clear_records($gosmtp->options['logs']['retention_period']); } }