has_at_least_ten_visits() ) {
return;
}
wp_add_dashboard_widget( $this->handle, sprintf( 'Optimole - %s', __( 'Image Optimization Stats', 'optimole-wp' ) ), [ $this, 'render_widget' ] );
}
/**
* Enqueue the widget assets.
*/
public function enqueue_widget() {
if ( ! $this->is_main_dashboard_page() || ! $this->has_at_least_ten_visits() ) {
return;
}
$asset_file = include OPTML_PATH . 'assets/build/widget/index.asset.php';
wp_register_script( $this->handle, OPTML_URL . 'assets/build/widget/index.js', $asset_file['dependencies'], $asset_file['version'], true );
wp_localize_script( $this->handle, 'optimoleDashboardWidget', $this->get_script_localization() );
wp_enqueue_script( $this->handle );
wp_enqueue_style( $this->handle, OPTML_URL . 'assets/build/widget/style-index.css', [], $asset_file['version'] );
}
/**
* Render the widget.
*/
public function render_widget() {
echo '
' . $this->get_skeleton_loader() . '
';
}
/**
* Check if the current page is the main dashboard page.
*
* @return bool
*/
private function is_main_dashboard_page() {
global $pagenow;
return is_admin() && $pagenow === 'index.php';
}
/**
* Check if the user has at least 10 visits.
*
* @return bool
*/
private function has_at_least_ten_visits() {
$settings = new Optml_Settings();
if ( OPTML_DEBUG && $settings->is_connected() ) {
return true;
}
$service_data = $this->get_service_data();
if ( ! isset( $service_data['visitors'] ) ) {
return false;
}
$visits = $service_data['visitors'];
return $visits >= 10;
}
/**
* Get the script localization.
*
* @return array
*/
private function get_script_localization() {
return [
'i18n' => [
'averageCompression' => __( 'Average compression', 'optimole-wp' ),
'traffic' => __( 'Traffic', 'optimole-wp' ),
'duringLastMonth' => __( 'During last month', 'optimole-wp' ),
'viewAllStats' => __( 'View all stats', 'optimole-wp' ),
'monthlyVisitsQuota' => __( 'Monthly visits quota', 'optimole-wp' ),
'upgrade' => __( 'Upgrade', 'optimole-wp' ),
],
'skeletonLoader' => $this->get_skeleton_loader(),
'billingURL' => tsdk_translate_link( 'https://dashboard.optimole.com/settings/billing', 'query' ),
'serviceData' => $this->get_service_data(),
'assetsURL' => OPTML_URL . 'assets/',
'dashboardMetricsURL' => esc_url( 'https://dashboard.optimole.com/metrics' ),
'dashboardURL' => esc_url( tsdk_translate_link( 'https://dashboard.optimole.com' ) ),
];
}
/**
* Get the service data.
*
* @return array
*/
private function get_service_data() {
$settings = new Optml_Settings();
return $settings->get( 'service_data' );
}
/**
* Get the skeleton loader markup.
*
* @return string
*/
private function get_skeleton_loader() {
return '
';
}
}