Initial commit: Atomaste website
This commit is contained in:
@@ -0,0 +1,329 @@
|
||||
<?php
|
||||
defined( 'ABSPATH' ) or die( 'you do not have access to this page!' );
|
||||
if ( ! class_exists( 'burst_frontend' ) ) {
|
||||
class burst_frontend {
|
||||
private static $_this;
|
||||
private $look_up_table_ids = array();
|
||||
|
||||
function __construct() {
|
||||
if ( isset( self::$_this ) ) {
|
||||
wp_die(
|
||||
burst_sprintf(
|
||||
'%s is a singleton class and you cannot create a second instance.',
|
||||
get_class( $this )
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
self::$_this = $this;
|
||||
|
||||
add_action( 'admin_bar_menu', array( $this, 'add_to_admin_bar_menu' ), 35 );
|
||||
add_action( 'admin_bar_menu', array( $this, 'add_top_bar_menu' ), 400 );
|
||||
add_action( 'init', array( $this, 'register_pageviews_block' ) );
|
||||
add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_burst_time_tracking_script' ], 0 );
|
||||
add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_burst_tracking_script' ], 0 );
|
||||
add_filter( 'script_loader_tag', [ $this, 'defer_burst_tracking_script' ], 10, 3 );
|
||||
|
||||
add_shortcode( 'burst-most-visited', [ $this, 'most_visited_posts' ] );
|
||||
}
|
||||
|
||||
|
||||
static function this() {
|
||||
return self::$_this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Enqueue some assets
|
||||
*
|
||||
* @param $hook
|
||||
*/
|
||||
public function enqueue_burst_time_tracking_script( $hook ) {
|
||||
$minified = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
|
||||
if ( ! $this->exclude_from_tracking() ) {
|
||||
wp_enqueue_script(
|
||||
'burst-timeme',
|
||||
burst_url . "helpers/timeme/timeme$minified.js",
|
||||
[],
|
||||
burst_version,
|
||||
false
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueue some assets
|
||||
*
|
||||
* @param $hook
|
||||
*/
|
||||
public function enqueue_burst_tracking_script( $hook ) {
|
||||
// don't enqueue if headless.
|
||||
if ( defined( 'BURST_HEADLESS' ) || burst_get_option( 'headless' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! $this->exclude_from_tracking() ) {
|
||||
$in_footer = burst_get_option( 'enable_turbo_mode' );
|
||||
$beacon_enabled = (int) burst_tracking_status_beacon();
|
||||
$deps = $beacon_enabled ? array( 'burst-timeme' ) : array( 'burst-timeme', 'wp-api-fetch' );
|
||||
$combine_vars_and_script = burst_get_option( 'combine_vars_and_script' );
|
||||
if ( $combine_vars_and_script ) {
|
||||
$upload_url = burst_upload_url( 'js' );
|
||||
$upload_path = burst_upload_dir( 'js' );
|
||||
wp_enqueue_script(
|
||||
'burst',
|
||||
$upload_url . 'burst.min.js',
|
||||
apply_filters( 'burst_script_dependencies', $deps ),
|
||||
filemtime( $upload_path . 'burst.min.js' ),
|
||||
$in_footer
|
||||
);
|
||||
} else {
|
||||
$minified = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
|
||||
$cookieless = burst_get_option( 'enable_cookieless_tracking' );
|
||||
$cookieless_text = $cookieless == '1' ? '-cookieless' : '';
|
||||
|
||||
$localize_args = apply_filters(
|
||||
'burst_tracking_options',
|
||||
burst_get_tracking_options()
|
||||
);
|
||||
wp_enqueue_script(
|
||||
'burst',
|
||||
burst_url . "assets/js/build/burst$cookieless_text$minified.js",
|
||||
apply_filters( 'burst_script_dependencies', $deps ),
|
||||
burst_version,
|
||||
$in_footer
|
||||
);
|
||||
wp_localize_script(
|
||||
'burst',
|
||||
'burst',
|
||||
$localize_args
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function defer_burst_tracking_script( $tag, $handle, $src ) {
|
||||
// time me load asap but async to avoid blocking the page load
|
||||
if ( 'burst-timeme' === $handle ) {
|
||||
return str_replace( ' src', ' async src', $tag );
|
||||
}
|
||||
|
||||
$turbo = burst_get_option( 'enable_turbo_mode' );
|
||||
if ( $turbo ) {
|
||||
if ( 'burst' == $handle ) {
|
||||
return str_replace( ' src', ' defer src', $tag );
|
||||
}
|
||||
}
|
||||
|
||||
if ( 'burst' === $handle ) {
|
||||
return str_replace( ' src', ' async src', $tag );
|
||||
}
|
||||
|
||||
return $tag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ID from lookup table, cached in class
|
||||
*
|
||||
* @param string $item
|
||||
* @param null | string $value
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function get_lookup_table_id( string $item, $value):int {
|
||||
if ( isset( $this->look_up_table_ids[$item][$value] ) ){
|
||||
return $this->look_up_table_ids[$item][$value];
|
||||
}
|
||||
|
||||
$ID = burst_get_lookup_table_id($item, $value);
|
||||
$this->look_up_table_ids[$item][$value] = $ID;
|
||||
return (int) $ID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if this should be excluded from tracking
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function exclude_from_tracking() {
|
||||
if ( is_user_logged_in() ) {
|
||||
$user = wp_get_current_user();
|
||||
$user_role_blocklist = burst_get_option( 'user_role_blocklist' );
|
||||
$get_excluded_roles = is_array( $user_role_blocklist ) ? $user_role_blocklist : [ 'adminstrator' ];
|
||||
$excluded_roles = apply_filters( 'burst_roles_excluded_from_tracking', $get_excluded_roles );
|
||||
if ( array_intersect( $excluded_roles, $user->roles ) ) {
|
||||
return true;
|
||||
}
|
||||
if ( is_preview() || burst_is_pagebuilder_preview() ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show content conditionally, based on consent
|
||||
*
|
||||
* @param array $atts
|
||||
* @param string $content
|
||||
* @param string $tag
|
||||
*
|
||||
* @return false|string
|
||||
*/
|
||||
public function most_visited_posts(
|
||||
$atts = [],
|
||||
$content = null,
|
||||
$tag = ''
|
||||
) {
|
||||
// normalize attribute keys, lowercase
|
||||
$atts = array_change_key_case( (array) $atts, CASE_LOWER );
|
||||
// override default attributes with user attributes
|
||||
$atts = shortcode_atts(
|
||||
[
|
||||
'count' => 5,
|
||||
'post_type' => 'post',
|
||||
'show_count' => false,
|
||||
],
|
||||
$atts,
|
||||
$tag
|
||||
);
|
||||
|
||||
// sanitize post type
|
||||
$post_types = get_post_types();
|
||||
if ( ! in_array( $atts['post_type'], $post_types ) ) {
|
||||
$atts['post_type'] = 'post';
|
||||
}
|
||||
|
||||
$count = (int) $atts['count'];
|
||||
$show_count = (bool) $atts['show_count'];
|
||||
$post_type = (string) $atts['post_type'];
|
||||
// posts, sorted by post_meta
|
||||
$args = array(
|
||||
'post_type' => $post_type,
|
||||
'numberposts' => $count,
|
||||
'meta_key' => 'burst_total_pageviews_count',
|
||||
'orderby' => 'meta_value_num',
|
||||
'order' => 'DESC',
|
||||
'meta_query' => array(
|
||||
'key' => 'burst_total_pageviews_count', // Same meta key for sorting
|
||||
'type' => 'NUMERIC', // Make sure to specify the type as numeric for correct sorting
|
||||
),
|
||||
);
|
||||
$posts = get_posts( $args );
|
||||
ob_start();
|
||||
|
||||
if ( count( $posts ) > 0 ) {
|
||||
?>
|
||||
<ul class="burst-posts-list">
|
||||
<?php
|
||||
foreach ( $posts as $post ) {
|
||||
$count = (int) get_post_meta( $post->ID, 'burst_total_pageviews_count', true );
|
||||
$count_html = '';
|
||||
if ( $show_count ) {
|
||||
$count_html = ' <span class="burst-post-count">(' . apply_filters( 'burst_most_visited_count', $count, $post ) . ')</span>';
|
||||
}
|
||||
?>
|
||||
|
||||
<li class="burst-posts-list__item"><a href="<?php echo esc_url_raw( get_the_permalink( $post ) ); ?>"><?php echo esc_html( get_the_title( $post ) ); ?><?php echo $count_html; ?></a></li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
<?php
|
||||
} else {
|
||||
?>
|
||||
<p class="burst-posts-list__not-found">
|
||||
<?php _e( 'No posts found', 'burst-statistics' ); ?>
|
||||
</p>
|
||||
<?php
|
||||
}
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
public function add_to_admin_bar_menu( $wp_admin_bar ) {
|
||||
if ( ! burst_user_can_view() || is_admin() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// don't show on subsites if networkwide activated, and this is not the main site.
|
||||
if ( burst_is_networkwide_active() && ! is_main_site() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$wp_admin_bar->add_node(
|
||||
[
|
||||
'parent' => 'site-name',
|
||||
'id' => 'burst-statistics',
|
||||
'title' => __( 'Statistics', 'burst-statistics' ),
|
||||
'href' => burst_dashboard_url,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add top bar menu for page views
|
||||
*
|
||||
* @param $wp_admin_bar
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function add_top_bar_menu( $wp_admin_bar ) {
|
||||
global $wp_admin_bar;
|
||||
global $wpdb;
|
||||
if ( is_admin() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! burst_user_can_view() ) {
|
||||
return;
|
||||
}
|
||||
global $post;
|
||||
if ( $post && is_object( $post ) ) {
|
||||
$post_id = $post->ID;
|
||||
$count = (int) get_post_meta( $post_id, 'burst_total_pageviews_count', true );
|
||||
} else {
|
||||
$count = 0;
|
||||
}
|
||||
$wp_admin_bar->add_menu(
|
||||
[
|
||||
'id' => 'burst-front-end',
|
||||
'title' => $count . ' ' . __( 'Pageviews', 'burst-statistics' ),
|
||||
]
|
||||
);
|
||||
$wp_admin_bar->add_menu(
|
||||
[
|
||||
'parent' => 'burst-front-end',
|
||||
'id' => 'burst-statistics-link',
|
||||
'title' => __( 'Go to dashboard', 'burst-statistics' ),
|
||||
'href' => burst_dashboard_url,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
public function register_pageviews_block() {
|
||||
wp_register_script(
|
||||
'burst-pageviews-block-editor',
|
||||
plugins_url( 'blocks/pageviews.js', __FILE__ ), // Adjust the path to your JavaScript file
|
||||
[ 'wp-blocks', 'wp-element', 'wp-editor' ],
|
||||
filemtime( plugin_dir_path( __FILE__ ) . 'blocks/pageviews.js' )
|
||||
);
|
||||
wp_set_script_translations( 'burst-pageviews-block-editor', 'burst-statistics', burst_path . '/languages' );
|
||||
|
||||
register_block_type(
|
||||
'burst/pageviews-block',
|
||||
[
|
||||
'editor_script' => 'burst-pageviews-block-editor',
|
||||
'render_callback' => array( $this, 'render_burst_pageviews' ),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
public function render_burst_pageviews() {
|
||||
global $post;
|
||||
$burst_total_pageviews_count = get_post_meta( $post->ID, 'burst_total_pageviews_count', true );
|
||||
$count = (int) $burst_total_pageviews_count ?: 0;
|
||||
$text = sprintf( _n( 'This page has been viewed %d time.', 'This page has been viewed %d times.', $count, 'burst-statistics' ), $count );
|
||||
|
||||
return '<p class="burst-pageviews">' . $text . '</p>';
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user