Skip to content

Commit

Permalink
Add support for click analytics
Browse files Browse the repository at this point in the history
  • Loading branch information
rvanoord committed Jan 31, 2025
1 parent d937b48 commit fb7c60d
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 7 deletions.
4 changes: 2 additions & 2 deletions plugins/bcc-login/endpoints/access-token.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?php

$token = '';
$token_id = $_COOKIE['oidc_token_id'];
$token = '';
$token_id = $_COOKIE['oidc_token_id'] ?? '';

if ( ! empty( $token_id ) ) {
setcookie('wordpress_nocache', 'true');
Expand Down
2 changes: 1 addition & 1 deletion plugins/bcc-login/endpoints/id-token.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

setcookie('wordpress_nocache', 'true');
$token = '';
$token_id = $_COOKIE['oidc_token_id'];
$token_id = $_COOKIE['oidc_token_id'] ?? '';
if ( ! empty( $token_id ) ) {
$token = get_transient( 'oidc_id_token_' . $token_id );
}
Expand Down
2 changes: 1 addition & 1 deletion plugins/bcc-login/endpoints/user-profile.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
setcookie('wordpress_nocache', 'true');

$token = '';
$token_id = $_COOKIE['oidc_token_id'];
$token_id = $_COOKIE['oidc_token_id'] ?? '';

if ( ! empty( $token_id ) ) {
$token = get_transient( 'oidc_id_token_' . $token_id );
Expand Down
65 changes: 65 additions & 0 deletions plugins/bcc-login/includes/class-bcc-login-settings.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ class BCC_Login_Settings {
public $coreapi_base_url;
public $disable_pubsub;
public $widgets_base_url;
public $track_clicks;
public $track_page_load;
public $track_page_interaction;
}

/**
Expand Down Expand Up @@ -81,6 +84,9 @@ function __construct () {
$settings->coreapi_base_url = 'https://api.bcc.no';
$settings->disable_pubsub = false;
$settings->widgets_base_url = 'https://widgets.bcc.no';
$settings->track_clicks = false;
$settings->track_page_load = true;
$settings->track_page_interaction = true;



Expand Down Expand Up @@ -161,6 +167,22 @@ function __construct () {
$settings->filtering_groups = explode(",", $filtering_groups_option);
}

$track_clicks_option = get_option('bcc_track_clicks', -1);
if ($track_clicks_option != -1) {
$settings->track_clicks = $track_clicks_option;
}

$track_page_load_option = get_option('bcc_track_page_load', -1);
if ($track_page_load_option != -1) {
$settings->track_page_load = $track_page_load_option;
}

$track_page_interaction_option = get_option('bcc_track_page_interaction', -1);
if ($track_page_interaction_option != -1) {
$settings->track_page_interaction = $track_page_interaction_option;
}


// Backwards compatibility with old plugin configuration.
if ( ! isset( $settings->client_id ) ) {
$old_oidc_settings = (array) get_option( 'openid_connect_generic_settings', array () );
Expand Down Expand Up @@ -250,6 +272,9 @@ function register_settings() {
register_setting( $this->option_name, 'bcc_full_content_access_groups' );
register_setting( $this->option_name, 'bcc_filtering_groups' );
register_setting( $this->option_name, 'show_protected_menu_items' );
register_setting( $this->option_name, 'bcc_track_clicks' );
register_setting( $this->option_name, 'bcc_track_page_load' );
register_setting( $this->option_name, 'bcc_track_page_interaction' );

$use_groups_settings = !empty($this->_settings->site_groups) || BCC_Coreapi_Client::check_groups_access(
$this->_settings->token_endpoint,
Expand All @@ -268,6 +293,7 @@ function register_settings() {
{
add_settings_section( 'notifications', __( 'Notifications', 'bcc-login' ), null, $this->options_page );
}
add_settings_section( 'analytics', __( 'Analytics', 'bcc-login' ), null, $this->options_page );

add_settings_field(
'client_id',
Expand Down Expand Up @@ -555,6 +581,45 @@ function register_settings() {
'label' => __( 'Show protected menu items to all/public users.', 'bcc-login' )
)
);

add_settings_field(
'bcc_track_clicks',
__( 'Track Clicks', 'bcc-login' ),
array( $this, 'render_checkbox_field' ),
$this->options_page,
'analytics',
array(
'name' => 'bcc_track_clicks',
'value' => $this->_settings->track_clicks,
'label' => __( 'Track analytics for buttons and links', 'bcc-login' )
)
);

add_settings_field(
'bcc_track_page_load',
__( 'Track Page Load', 'bcc-login' ),
array( $this, 'render_checkbox_field' ),
$this->options_page,
'analytics',
array(
'name' => 'bcc_track_page_load',
'value' => $this->_settings->track_page_load,
'label' => __( 'Track analytics for page url, referrer etc.', 'bcc-login' )
)
);

add_settings_field(
'bcc_track_page_interaction',
__( 'Track Page Interaction', 'bcc-login' ),
array( $this, 'render_checkbox_field' ),
$this->options_page,
'analytics',
array(
'name' => 'bcc_track_page_interaction',
'value' => $this->_settings->track_page_interaction,
'label' => __( 'Track analytics for time spent on page', 'bcc-login' )
)
);
}

/**
Expand Down
16 changes: 13 additions & 3 deletions plugins/bcc-login/includes/class-bcc-login-widgets.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ function __construct( BCC_Login_Settings $settings, BCC_Login_Client $client ) {
$this->client = $client;

add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_styles' ) );
add_action( 'wp_head', array( $this, 'render_topbar' ) );
add_action( 'wp_head', array( $this, 'render_topbar_and_analytics' ) );
add_filter( 'body_class', array( $this, 'body_class' ) );
add_action( 'init', array( $this, 'bcc_widgets_shortcodes' ) );
}
Expand All @@ -23,9 +23,11 @@ function enqueue_styles() {
}
}

function render_topbar() {
function render_topbar_and_analytics() {
if ( $this->should_show_topbar() ) {
echo '<script id="script-bcc-topbar" data-authentication-type="WebApp" data-authentication-location="' . site_url( '?bcc-login=access-token' ) . '" src="'.$this->settings->widgets_base_url.'/widgets/TopbarJs" defer></script>' . PHP_EOL;
echo '<script id="script-bcc-topbar" '.($this->settings->track_clicks ? "data-click-analytics=true" : "data-click-analytics=false").' '.($this->settings->track_page_interaction ? "data-page-interaction-analytics=true" : "data-page-interaction-analytics=false").' '.($this->settings->track_page_load ? "data-page-load-analytics=true" : "data-page-load-analytics=false").' data-authentication-type="WebApp" data-authentication-location="' . site_url( '?bcc-login=access-token' ) . '" src="'.$this->settings->widgets_base_url.'/widgets/TopbarJs" defer></script>' . PHP_EOL;
} else if ( $this->should_load_analytics() ) {
echo '<script id="script-bcc-analytics" '.($this->settings->track_clicks ? "data-click-analytics=true" : "data-click-analytics=false").' '.($this->settings->track_page_interaction ? "data-page-interaction-analytics=true" : "data-page-interaction-analytics=false").' '.($this->settings->track_page_load ? "data-page-load-analytics=true" : "data-page-load-analytics=false").' data-authentication-type="WebApp" data-authentication-location="' . site_url( '?bcc-login=access-token' ) . '" src="'.$this->settings->widgets_base_url.'/widgets/AnalyticsJs" defer></script>' . PHP_EOL;
}
}

Expand All @@ -45,6 +47,14 @@ function should_show_topbar() {
);
}

function should_load_analytics() {
return (
($this->settings->track_clicks || $this->settings->track_page_load || $this->settings->track_page_interaction) &&
! wp_is_json_request() &&
! is_customize_preview()
);
}

function bcc_widgets_shortcodes() {
add_shortcode( 'bcc-widgets-week-calendar', function ($attributes) {
$attributes = array_change_key_case((array)$attributes, CASE_LOWER);
Expand Down

0 comments on commit fb7c60d

Please sign in to comment.