File "hustle-tracking-model.php"
Full Path: /home/londdqdw/public_html/06/wp-content/plugins/wordpress-popup/inc/hustle-tracking-model.php
File size: 25.75 KB
MIME-type: text/x-php
Charset: utf-8
<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
/**
* Tracking model.
* Base model for all tracking data: views and conversions.
*
* @since 4.0
* @package Hustle
*/
/**
* Hustle_Tracking_Model class
*/
class Hustle_Tracking_Model {
/**
* The table name
*
* @since 4.0
* @var string
*/
protected $table_name;
/**
* Tracking_Model instance
*
* @since 4.0
* @var null
*/
private static $instance = null;
/**
* WordPress' wpdb class.
*
* @since 4.2.1
* @var Object
*/
private $wpdb;
/**
* Return the Tracking_Model instance
*
* @since 4.0
* @return Hustle_Tracking_Model
*/
public static function get_instance() {
if ( is_null( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Hustle_Tracking_Model constructor.
*
* @since 4.0
*/
public function __construct() {
global $wpdb;
$this->table_name = Hustle_Db::tracking_table();
$this->wpdb = $wpdb;
}
/**
* Save conversion
*
* @since 4.0
* @param int $module_id Module ID.
* @param string $action - 'cta_conversion' || 'optin_conversion' || 'conversion' || 'view'.
* @param string $module_type Module type.
* @param int $page_id Page ID.
* @param string $module_sub_type Sub type.
* @param string $date_created Created date, default null will be * completed.
* @param string $ip IP.
*
* @return boolean
*/
public function save_tracking( $module_id, $action, $module_type, $page_id, $module_sub_type = null, $date_created = null, $ip = null ) {
global $wpdb;
/**
* IP Tracking
*/
$ip_query = ' AND `ip` IS NULL';
$settings = Hustle_Settings_Admin::get_privacy_settings();
$ip_tracking = ! isset( $settings['ip_tracking'] ) || 'on' === $settings['ip_tracking'];
if ( $ip_tracking ) {
$ip = $ip ? $ip : Opt_In_Geo::get_user_ip();
$ip_query = ' AND `ip` = %s';
}
if ( ! in_array( $action, array( 'conversion', 'cta_conversion', 'cta_1_conversion', 'cta_2_conversion', 'optin_conversion' ), true ) ) {
$action = 'view';
}
// Store the subtype for embeddeds and social sharing. Whether they're "widget", "embedded", etc.
if ( ! is_null( $module_sub_type ) ) {
$module_type = $module_type . '_' . $module_sub_type;
}
$sql = "SELECT `tracking_id` FROM {$this->table_name} WHERE `module_id` = %d AND `page_id` = %d {$ip_query} AND `action` = %s AND `module_type` = %s AND `date_created` BETWEEN ";
if ( empty( $date_created ) ) {
$sql .= sprintf(
" '%s' AND '%s' ",
current_time( 'Y-m-d' ),
current_time( 'Y-m-d H:i:s' )
);
} else {
$sql .= sprintf(
"'%s' AND '%s 23:59:59'",
substr( $date_created, 0, 10 ),
substr( $date_created, 0, 10 )
);
}
if ( $ip_tracking ) {
$prepared_sql = $wpdb->prepare( $sql, $module_id, $page_id, $ip, $action, $module_type );// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
} else {
$prepared_sql = $wpdb->prepare( $sql, $module_id, $page_id, $action, $module_type );// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
}
$tracking_id = $wpdb->get_var( $prepared_sql );// phpcs:ignore
if ( $tracking_id ) {
$this->update( $tracking_id, $wpdb );
} else {
$this->save( $module_id, $page_id, $module_type, $action, $ip, $wpdb, $date_created );
}
return true;
}
/**
* Used only to keep this data coming from 3.x.
*
* @since 4.0
*
* @param int $page_id Page ID.
* @param int $count Count.
* @return void
*/
public function save_old_migrated_sshare_page_count( $page_id, $count ) {
// Exclude the counter for the pages that don't exist in this blog.
if ( ! is_object( get_post( $page_id ) ) ) {
return;
}
global $wpdb;
$db = $wpdb;
$date_created = Hustle_Time_Helper::get_current_date();
$db->insert(
$this->table_name,
array(
'module_id' => 0,
'page_id' => $page_id,
'module_type' => Hustle_Module_Model::SOCIAL_SHARING_MODULE,
'action' => '_page_shares',
'ip' => null,
'date_created' => $date_created,
'date_updated' => $date_created,
'counter' => $count,
)
);
}
/**
* Save tracking to database
*
* @since 4.0
*
* @param int $module_id Module ID.
* @param int $page_id Page ID.
* @param string $module_type popup | slidein | embedded.
* @param string $action view | conversion.
* @param string $ip - the user ip.
* @param bool|object $db - the wp db object.
* @param string $date_created Created date, default null will be * completed.
*/
private function save( $module_id, $page_id, $module_type, $action, $ip, $db = false, $date_created = null ) {
if ( ! $db ) {
global $wpdb;
$db = $wpdb;
}
if ( empty( $date_created ) ) {
$date_created = current_time( 'Y-m-d H:i:s' );
}
$db->insert(
$this->table_name,
array(
'module_id' => $module_id,
'page_id' => $page_id,
'module_type' => $module_type,
'action' => $action,
'ip' => $ip,
'date_created' => $date_created,
'date_updated' => $date_created,
)
);
}
/**
* Update tracking
*
* @since 4.0
* @param int $id - tracking id.
* @param bool|object $db - the wp db object.
*/
private function update( $id, $db = false ) {
if ( ! $db ) {
global $wpdb;
$db = $wpdb;
}
$date = current_time( 'Y-m-d H:i:s' );
$db->query(
$db->prepare(
"UPDATE {$this->table_name} SET `counter` = `counter`+1, `date_updated` = %s WHERE `tracking_id` = %d",
$date,
$id
)
);
}
/**
* Count conversions
*
* @since 4.0
* @param int $module_id Modul ID.
* @param string $action - view | all_conversion | optin_conversion | cta_conversion.
* @param string $module_subtype - the module subtype.
* @param string $starting_date - the start date (dd-mm-yyy).
* @param string $ending_date - the end date (dd-mm-yyy).
*
* @return int - total views based on parameters
*/
public function count_tracking_data( $module_id, $action, $module_subtype = null, $starting_date = null, $ending_date = null ) {
if ( ! in_array( $action, array( 'all_conversion', 'cta_conversion', 'cta_1_conversion', 'cta_2_conversion', 'optin_conversion' ), true ) ) {
$action = 'view';
}
return $this->count( $action, $module_id, $module_subtype, $starting_date, $ending_date );
}
/**
* Check has module conversions before 4.0.4 or not
*
* @since 4.0.4
* @global object $wpdb
* @param string $module_id Module ID.
*
* @return bool
*/
public function has_old_tracking_data( $module_id ) {
global $wpdb;
$result = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT( tracking_id ) FROM {$this->table_name} WHERE module_id = %d AND action = 'conversion'", $module_id ) ); // phpcs:ignore
return ! empty( $result );
}
/**
* Count tracking data according to arguments.
*
* @since 4.0
*
* @param string $action view | all_conversion | optin_conversion | cta_conversion.
* @param int $module_id - the module id.
* @param string $module_subtype - the module subtype.
* @param string $starting_date - the start date (dd-mm-yyy).
* @param string $ending_date - the end date (dd-mm-yyy).
*
* @return int - total counts based on parameters
*/
private function count( $action, $module_id = null, $module_subtype = null, $starting_date = null, $ending_date = null ) {
global $wpdb;
if ( 'all_conversion' === $action ) {
$where_query = "WHERE `action` IN ( 'conversion', 'optin_conversion', 'cta_conversion', 'cta_1_conversion', 'cta_2_conversion' )";
} else {
$where_query = $wpdb->prepare( 'WHERE `action` = %s', $action );
}
if ( $module_id ) {
$where_query .= $wpdb->prepare( ' AND `module_id` = %d', $module_id );
}
if ( $module_subtype ) {
if ( in_array( $module_subtype, array( 'social_sharing', 'embedded' ), true ) ) {
$where_query .= ' AND `module_type` like \'' . $module_subtype . '%\'';
} else {
$where_query .= $wpdb->prepare( ' AND `module_type` = %s', $module_subtype );
}
}
$date_query = $this->generate_date_query( $wpdb, $starting_date, $ending_date );
$sql = "SELECT SUM(`counter`) FROM {$this->table_name} {$where_query} $date_query";
$counts = $wpdb->get_var( $sql );// phpcs:ignore
if ( $counts ) {
return $counts;
}
return 0;
}
/**
* Generate the date query
*
* @since 4.0
* @param object $wpdb - the WordPress database object.
* @param string $starting_date - the start date (dd-mm-yyy).
* @param string $ending_date - the end date (dd-mm-yyy).
* @param string $prefix Prefix.
* @param string $clause Clause.
*
* @return string $date_query
*/
private function generate_date_query( $wpdb, $starting_date = null, $ending_date = null, $prefix = '', $clause = 'AND' ) {
$date_query = '';
$date_format = '%%Y-%%m-%%d';
if ( ! is_null( $starting_date ) && ! is_null( $ending_date ) && ! empty( $starting_date ) && ! empty( $ending_date ) ) {
$date_query = $wpdb->prepare( "$clause DATE_FORMAT($prefix`date_created`, '$date_format') >= %s AND DATE_FORMAT($prefix`date_created`, '$date_format') <= %s", $starting_date, $ending_date );// phpcs:ignore
} else {
if ( ! is_null( $starting_date ) && ! empty( $starting_date ) ) {
$date_query = $wpdb->prepare( "$clause DATE_FORMAT($prefix`date_created`, '$date_format') >= %s", $starting_date );// phpcs:ignore
} elseif ( ! is_null( $ending_date ) && ! empty( $ending_date ) ) {
$date_query = $wpdb->prepare( "$clause DATE_FORMAT($prefix`date_created`, '$date_format') <= %s", $starting_date );// phpcs:ignore
}
}
return $date_query;
}
/**
* Get tracking data newer than $date_created of module_id grouped by date_created Day
*
* @since 4.0
*
* @param int $module_id Module ID.
* @param string $date_created Date created.
* @param string $action Action.
* @param string $module_type Module type.
* @param string $module_sub_type Sub type.
*
* @return boolean|array
*/
public function get_form_latest_tracking_data_count_grouped_by_day( $module_id, $date_created, $action, $module_type = null, $module_sub_type = null ) {
global $wpdb;
$table_name = $this->table_name;
if ( ! in_array( $action, array( 'all_conversion', 'cta_conversion', 'cta_1_conversion', 'cta_2_conversion', 'optin_conversion' ), true ) ) {
$action = 'view';
}
if ( 'all_conversion' === $action ) {
$and_action = "AND e.action IN ( 'conversion', 'optin_conversion', 'cta_conversion', 'cta_1_conversion', 'cta_2_conversion' )";
} else {
$and_action = $wpdb->prepare( 'AND e.action = %s', $action );
}
$sub_type_query = '';
if ( $module_type && $module_sub_type && 'overall' !== $module_sub_type ) {
if ( Hustle_Module_Model::EMBEDDED_MODULE === $module_type ) {
$sub_types_array = Hustle_Module_Model::get_embedded_types();
} elseif ( Hustle_Module_Model::SOCIAL_SHARING_MODULE === $module_type ) {
$sub_types_array = Hustle_SShare_Model::get_sshare_types();
} else {
return false;
}
$module_sub_type = in_array( $module_sub_type, $sub_types_array, true ) ? $module_type . '_' . $module_sub_type : false;
if ( ! $module_sub_type ) {
return false;
}
$sub_type_query = $wpdb->prepare( 'AND e.module_type = %s', $module_sub_type );
}
$date_query = $this->generate_date_query( $wpdb, $date_created );
$sql = "SELECT SUM(`counter`) AS tracked_count,
DATE(e.date_created) AS date_created
FROM {$table_name} e
WHERE e.module_id = %d
{$and_action}
{$sub_type_query}
{$date_query}
GROUP BY DATE(e.date_created)
ORDER BY e.date_created DESC";
$sql = $wpdb->prepare(
$sql, // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
$module_id
);
$conversions_amount = $wpdb->get_results( $sql ); // phpcs:ignore
return $conversions_amount;
}
/**
* Get latest conversion date
*
* @since 4.0
*
* @param string $module_type Module type.
*
* @return string
*/
public function get_latest_conversion_date( $module_type = 'popup' ) {
$available_entry_types = array(
'popup',
'slidein',
'embedded',
'social_sharing',
'all',
);
if ( ! in_array( $module_type, $available_entry_types, true ) ) {
return null;
}
global $wpdb;
$entry = null;
if ( 'all' !== $module_type ) {
if ( in_array( $module_type, array( 'social_sharing', 'embedded' ), true ) ) {
$where_query = 'WHERE `module_type` like \'' . $module_type . '%\'';
} else {
$where_query = $wpdb->prepare( 'WHERE `module_type` = %s', $module_type );
}
$sql = "SELECT `date_updated` FROM {$this->table_name} {$where_query} AND `action` IN ( 'conversion', 'optin_conversion', 'cta_conversion' ) ORDER BY `date_updated` DESC";
} else {
$sql = "SELECT `date_updated` FROM {$this->table_name} WHERE `action` IN ( 'conversion', 'optin_conversion', 'cta_conversion' ) ORDER BY `date_updated` DESC";
}
$date = $wpdb->get_var( $sql );// phpcs:ignore
return $date;
}
/**
* Get latest tracked conversion date by module_id
*
* @since 4.0
*
* @param int $module_id Module ID.
* @param string $sub_type Optional.
* @param string $cta_or_optin Optional. cta_conversion|optin_conversion|all_conversion CTA or Opt-in conversion.
*
* @return Hustle_Entry_Model|null
*/
public function get_latest_conversion_date_by_module_id( $module_id, $sub_type = '', $cta_or_optin = 'all_conversion' ) {
global $wpdb;
$and_subtype = '';
if ( ! empty( $sub_type ) ) {
$and_subtype = $wpdb->prepare( ' AND `module_type` = %s', $sub_type );
}
if ( 'all_conversion' === $cta_or_optin ) {
$and_action = " AND `action` IN ( 'cta_conversion', 'optin_conversion', 'conversion' )";
} else {
$and_action = $wpdb->prepare( ' AND `action` = %s', $cta_or_optin );
}
$sql = "SELECT `date_updated` FROM {$this->table_name} WHERE `module_id` = %d {$and_action}{$and_subtype} ORDER BY `date_updated` DESC";
$date = $wpdb->get_var( $wpdb->prepare( $sql, $module_id ) );// phpcs:ignore
return $date;
}
/**
* Count conversions newer than $date_created
*
* @since 4.0
*
* @param string $module_type Module type.
* @param string $date_created Date created.
*
* @return array
*/
public function count_newer_conversions_by_module_type( $module_type, $date_created ) {
$count = $this->count( 'all_conversion', null, $module_type, $date_created, null );
return $count;
}
/**
* Get the tracking count by module type (can omit sub-type), and action
* grouped by the page id.
*
* @since 4.0
*
* @param string $module_type Module type.
* @param string $action Action.
* @param int $limit Limit.
* @param int $offset Offset.
*
* @return array
*/
public function get_module_type_tracking_count_per_page( $module_type, $action, $limit = 5, $offset = 0 ) {
global $wpdb;
$table_name = $this->table_name;
if ( ! in_array( $module_type, Hustle_Data::get_module_types(), true ) ) {
$module_type = '';
}
$sql = ' AND e.action = %s
GROUP BY e.page_id
ORDER BY tracked_count DESC
LIMIT %d';
$sql = $wpdb->prepare( $sql, $action, $limit );// phpcs:ignore
$sql = "SELECT SUM(`counter`) AS tracked_count,
e.page_id AS page_id
FROM {$table_name} e
WHERE e.module_type LIKE '{$module_type}%'" . $sql;
$conversions_amount = $wpdb->get_results( $sql ); // phpcs:ignore
return $conversions_amount;
}
/**
* Get Social Sharing per page conversion count
*
* @global object $wpdb WPDB.
* @param int $limit Limit.
* @return array
*/
public function get_ssharing_per_page_conversion_count( $limit ) {
global $wpdb;
$table_name = $this->table_name;
$query = $wpdb->prepare(
// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
"SELECT SUM(`counter`) AS tracked_count, `page_id` AS page_id FROM {$table_name}
WHERE `action` = '_page_shares'
OR ( `module_type` LIKE %s AND `action` = 'conversion' )
GROUP BY `page_id`
ORDER BY `counter` DESC
LIMIT %d",
Hustle_Module_Model::SOCIAL_SHARING_MODULE . '%',
$limit
);
return $wpdb->get_results( $query ); // phpcs:ignore
}
/**
* Get the paged tracking count by module type and page id.
*
* @since 4.0
*
* @param string $module_type Module type.
* @param array $pages_ids Page IDs.
* @param string $action Action.
* @return array
*/
public function get_tracking_count_by_page_id_and_module_type( $module_type, $pages_ids, $action ) {
global $wpdb;
$table_name = $this->table_name;
if ( ! in_array( $module_type, Hustle_Data::get_module_types(), true ) ) {
$module_type = '';
}
$pages_ids_placeholders = implode( ', ', array_fill( 0, count( $pages_ids ), '%d' ) );
$pages_ids_query = $wpdb->prepare( "WHERE page_id IN ({$pages_ids_placeholders})", $pages_ids ); // phpcs:ignore
$sql = $wpdb->prepare(
// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
"SELECT SUM(`counter`) AS tracked_count, `page_id` AS page_id FROM {$table_name} {$pages_ids_query}
AND module_type LIKE %s AND `action` = %s",
$module_type . '%',
$action
);
$conversions_amount = $wpdb->get_results( $sql ); // phpcs:ignore
return $conversions_amount;
}
/**
* Delete tracking data
*
* @since 4.0.0
* @param int $module_id Module ID.
*/
public function delete_data( $module_id ) {
global $wpdb;
$wpdb->delete( // phpcs:ignore
$this->table_name,
array( 'module_id' => $module_id ),
array( '%d' )
);
}
/**
* Get Average Conversion Rate
*
* @since 4.0.0
*
* @return number $value Percent of conversions.
*/
public function get_average_conversion_rate() {
$conversions = $this->count( 'all_conversion' );
$views = $this->count( 'view' );
if ( 0 < $views ) {
return sprintf( '%.2f%%', 100 * $conversions / $views );
}
return 0;
}
/**
* Ger number of total conversions.
*
* @since 4.0.0
*
* @return integer $value Number of conversions.
*/
public function get_total_conversions() {
return $this->count( 'all_conversion' );
}
/**
* Get module id of most conversions module.
*
* @since 4.0.0
*
* @return integer $value Module ID.
*/
public function get_most_conversions_module_id() {
global $wpdb;
$value = intval(
// phpcs:ignore
$wpdb->get_var( 'SELECT `module_id` FROM ' . $this->table_name . " WHERE `action` IN ( 'conversion', 'optin_conversion', 'cta_conversion' ) GROUP BY `module_id` ORDER BY sum(`counter`) DESC LIMIT 1" )
);
return $value;
}
/**
* Get Today Conversions
*
* @since 4.0.0
*
* @return integer $value Number of conversions.
*/
public function get_today_conversions() {
global $wpdb;
$sql = sprintf(
'SELECT COUNT(*) FROM `%s` WHERE `action` IN ( "conversion", "optin_conversion", "cta_conversion" ) AND `date_created` > DATE_SUB( NOW(), INTERVAL 24 hour )',
$this->table_name
);
$value = intval( $wpdb->get_var( $sql ) );// phpcs:ignore
return $value;
}
/**
* Get Last Week Conversions
*
* @since 4.0.0
*
* @return integer $value Number of conversions.
*/
public function get_last_week_conversions() {
global $wpdb;
$sql = sprintf(
'SELECT COUNT(*) FROM `%s` WHERE `action` IN ( "conversion", "optin_conversion", "cta_conversion" ) AND `date_created` > DATE_SUB( NOW(), INTERVAL 7 DAY )',
$this->table_name
);
$value = intval( $wpdb->get_var( $sql ) );// phpcs:ignore
return $value;
}
/**
* Get Last Month Conversions
*
* @since 4.0.0
*
* @return integer $value Number of conversions.
*/
public function get_last_month_conversions() {
global $wpdb;
$sql = sprintf(
'SELECT COUNT(*) FROM `%s` WHERE `action` IN ( "conversion", "optin_conversion", "cta_conversion" ) AND `date_created` > DATE_SUB( NOW(), INTERVAL 1 MONTH )',
$this->table_name
);
$value = intval( $wpdb->get_var( $sql ) );// phpcs:ignore
return $value;
}
/**
* Set null on all IP
*
* @since 4.0.0
*/
public function set_null_on_all_ips() {
global $wpdb;
$query = sprintf(
'UPDATE `%s` SET `ip` = NULL WHERE `ip` IS NOT NULL',
$this->table_name
);
$wpdb->query( $query );// phpcs:ignore
}
/**
* Set null on selected IP
*
* @since 4.0.0
*
* @param array $ips Array of IPs to remove.
*/
public function set_null_on_selected_ips( $ips ) {
if ( empty( $ips ) || ! is_array( $ips ) ) {
return;
}
global $wpdb;
$in = array();
$ranges = array();
foreach ( $ips as $one ) {
if ( is_array( $one ) ) {
$ranges[] = sprintf(
'( INET_ATON( `ip` ) BETWEEN %d AND %d )',
$one[0],
$one[1]
);
} else {
$in[] = $one;
}
}
$query = sprintf( 'UPDATE `%s` SET `ip` = NULL WHERE ', $this->table_name );
if ( ! empty( $in ) ) {
$query .= sprintf(
'`ip` IN ( %s ) ',
implode( ', ', array_map( array( $this, 'wrap_ip' ), $in ) )
);
if ( ! empty( $ranges ) ) {
$query .= 'OR ';
}
}
if ( ! empty( $ranges ) ) {
$query .= implode( ' OR ', $ranges );
}
$wpdb->query( $query );// phpcs:ignore
}
/**
* Helper to wrap IP into "''"
*
* @param string $a IP.
*/
private function wrap_ip( $a ) {
return sprintf( '\'%s\'', $a );
}
/**
* Delete tracking data by tracking id
*
* @since 4.0.2
* @param int $tracking_id Tracking ID.
*/
public static function delete_data_by_tracking_id( $tracking_id ) {
global $wpdb;
$wpdb->delete( // phpcs:ignore
Hustle_Db::tracking_table(),
array( 'tracking_id' => $tracking_id ),
array( '%d' )
);
}
/**
* Get entries older than $date_created
*
* @since 4.0.2
*
* @param string $date_created Date created.
*
* @return array
*/
public static function get_older_tracking_ids( $date_created ) {
global $wpdb;
$tracking_table = Hustle_Db::tracking_table();
$query = "SELECT e.tracking_id AS tracking_id
FROM {$tracking_table} e
WHERE e.date_created < %s";
// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
$query = $wpdb->prepare( $query, $date_created );
return $wpdb->get_col( $query );// phpcs:ignore
}
/**
* Get ip from tracking id
*
* @since 4.0.2
* @param int $tracking_id Tracking ID.
*
* @return array ip address
*/
public static function get_ip_from_tracking_id( $tracking_id ) {
global $wpdb;
$tracking_table = Hustle_Db::tracking_table();
$query = "SELECT e.ip AS ip
FROM {$tracking_table} e
WHERE e.tracking_id < %s";
// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
$query = $wpdb->prepare( $query, $tracking_id );
return $wpdb->get_col( $query );// phpcs:ignore
}
/**
* Set ip of a tracking id
*
* @since 4.0.2
*
* @param int $tracking_id Tracking ID.
* @param string $ip IP.
*/
public static function anonymise_tracked_id( $tracking_id, $ip ) {
global $wpdb;
$tracking_table = Hustle_Db::tracking_table();
// phpcs:ignore
$wpdb->query( $wpdb->prepare( "UPDATE {$tracking_table} SET `ip` = %s WHERE `tracking_id` = %d", $ip, $tracking_id ) );
}
/**
* Gets the daily data for the WP Dashboard analytics stats widget.
* This data is used and cached by Hustle_Wp_Dashboard_Page::get_wp_dashboard_widget_data().
* Make sure to handle the cache properly if using this method somewhere else.
*
* @since 4.1.0
*
* @param int $days_ago Retrieve the data from how many days ago.
* @return array
*/
public function get_wp_dash_daily_stats_data( $days_ago ) {
global $wpdb;
// Get the data from today to $days_ago before.
$query = $wpdb->prepare(
"SELECT module_type, action, date_created, counter
FROM {$wpdb->prefix}hustle_tracking
WHERE date_created > subdate( current_date, %d )",
$days_ago
);
$result = $this->wpdb->get_results( $query, ARRAY_A ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
return $result;
}
/**
* Gets the total count per tracking action per modules type for the WP Dashboard analytics stats widget.
* This data is used and cached by Hustle_Wp_Dashboard_Page::get_wp_dashboard_widget_data().
* Make sure to handle the cache properly if using this method somewhere else.
*
* @since 4.2.1
* @param integer $days_ago Amount of the last days to check.
* @return array
*/
public function get_per_module_type_totals_prev_range( $days_ago ) {
$sql = $this->wpdb->prepare(
// phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
"SELECT module_type, action, SUM(counter) AS tracked_count
FROM {$this->table_name}
WHERE date_created > subdate( current_date, %d )
AND date_created < subdate( current_date, %d )
GROUP BY module_type, action",
$days_ago * 2,
$days_ago
// phpcs:enable
);
$result = $this->wpdb->get_results( $sql ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
return $result;
}
/**
* Get Time of latest tracked conversion based on $module_id
*
* @since 4.3.1
*
* @param int $module_id Module ID.
* @param string $subtype Sub type.
* @param string $cta_or_optin Optional. cta_conversion|optin_conversion|all_conversion CTA or Opt-in conversion.
* @return string
*/
public function get_latest_conversion_time_by_module_id( $module_id, $subtype = '', $cta_or_optin = 'all_conversion' ) {
$latest_entry = $this->get_latest_conversion_date_by_module_id( $module_id, $subtype, $cta_or_optin );
if ( $latest_entry ) {
$entry_date = date_i18n( 'j M Y @ H:i A', strtotime( $latest_entry ) );
return $entry_date;
} else {
return esc_html__( 'Never', 'hustle' );
}
}
/**
* Get the time of the latest tracked conversion based on $entry_type
* [popup,slide-in,embedded]
*
* @since 4.3.1
*
* @param string $entry_type Entry type.
* @return string
*/
public function get_latest_conversion_time( $entry_type ) {
$date = $this->get_latest_conversion_date( $entry_type );
if ( $date ) {
$last_entry_time = mysql2date( 'U', $date );
$time_diff = human_time_diff( current_time( 'timestamp' ), $last_entry_time ); // phpcs:ignore WordPress.DateTime.CurrentTimeTimestamp.Requested
$last_entry_time = /* translators: time diff */ sprintf( __( '%s ago', 'hustle' ), $time_diff );
return $last_entry_time;
} else {
return __( 'Never', 'hustle' );
}
}
}