Current File : /pages/54/47/d0016649/home/htdocs/ipc1/wp-content/plugins/burst-statistics/goals/class-goals.php |
<?php
defined( 'ABSPATH' ) or die( 'you do not have access to this page!' );
if ( ! class_exists( 'burst_goals' ) ) {
class burst_goals {
public function __construct() {
}
public function sanitize_orderby( $orderby ) {
global $wpdb;
// Get all columns from {$wpdb->prefix}burst_goals table
$table_name = $wpdb->prefix . 'burst_goals';
$cols = $wpdb->get_results( "SHOW COLUMNS FROM $table_name", ARRAY_A );
// Extract the 'Field' values into an array
$col_names = array_column( $cols, 'Field' );
// If $orderby is not in $col_names, set it to 'ID'
if ( ! in_array( $orderby, $col_names, true ) ) {
$orderby = 'ID';
}
return $orderby;
}
/**
* Get predefined goals from the integrations list
*
* @return array
*/
public function get_predefined_goals(): array {
global $burst_integrations_list;
$predefined_goals = [];
foreach ( $burst_integrations_list as $plugin => $details ) {
if ( ! isset( $details['goals'] ) ) {
continue;
}
if ( ! burst_integration_plugin_is_active( $plugin, true ) ) {
continue;
}
$predefined_goals = array_merge( $details['goals'], $predefined_goals );
}
return $predefined_goals;
}
/**
* Get list of goals
*
* @param $args
*
* @return array
*/
public function get_goals( array $args = [] ): array {
if ( ! burst_user_can_view() ) {
return array();
}
global $wpdb;
$default_args = array(
'status' => 'all',
'limit' => 9999,
'offset' => 0,
'orderby' => 'ID',
'order' => 'ASC',
);
// merge args
$args = wp_parse_args( $args, $default_args );
// sanitize args
$args['order'] = $args['order'] === 'DESC' ? 'DESC' : 'ASC';
$args['orderby'] = $this->sanitize_orderby( $args['orderby'] );
require_once burst_path . 'goals/class-goal.php';
$goal = new burst_goal();
$args['status'] = $goal->sanitize_status( $args['status'] );
$args['limit'] = (int) $args['limit'];
$args['offset'] = (int) $args['offset'];
$query = "SELECT * FROM {$wpdb->prefix}burst_goals";
$where = array();
if ( $args['status'] !== 'all' ) {
$where[] = $wpdb->prepare( 'status = %s', $args['status'] );
}
if ( ! empty( $where ) ) {
$query .= ' WHERE ' . implode( ' AND ', $where );
}
$query .= " ORDER BY {$args['orderby']} {$args['order']}";// can only be columns or DESC/ASC because of sanitizing
$query .= " LIMIT {$args['offset']}, {$args['limit']}"; // can only be integer because of sanitizing
$results = $wpdb->get_results( $query, ARRAY_A );
$goals = array_reduce(
$results,
static function ( $accumulator, $currentValue ) {
$id = $currentValue['ID'];
unset( $currentValue['ID'] );
$accumulator[ $id ] = $currentValue;
return $accumulator;
},
array()
);
// loop through goals and add the fields and get then object for each goal
require_once burst_path . 'goals/class-goal.php';
$objects = array();
foreach ( $goals as $goal_id => $goal ) {
$goal = new burst_goal( $goal_id );
$objects[] = $goal;
}
return $objects;
}
} // class closure
} // class exists closure
/**
* Install goal table
* */
add_action( 'burst_install_tables', 'burst_install_goals_table', 10 );
function burst_install_goals_table() {
if ( get_option( 'burst_goals_db_version' ) !== burst_version ) {
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
$table_name = $wpdb->prefix . 'burst_goals';
$sql = "CREATE TABLE $table_name (
`ID` int NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`type` varchar(30) NOT NULL,
`status` varchar(30) NOT NULL,
`server_side` tinyint NOT NULL,
`url` varchar(255) NOT NULL,
`conversion_metric` varchar(255) NOT NULL,
`date_created` int NOT NULL,
`date_start` int NOT NULL,
`date_end` int NOT NULL,
`attribute` varchar(255) NOT NULL,
`attribute_value` varchar(255) NOT NULL,
`hook` varchar(255) NOT NULL,
PRIMARY KEY (ID)
) $charset_collate;";
dbDelta( $sql );
// insert default goal
update_option( 'burst_goals_db_version', burst_version, false );
}
}