oont-contents/plugins/jetpack/jetpack_vendor/automattic/jetpack-stats-admin/src/class-wp-dashboard-odyssey-widget.php
2025-02-08 15:10:23 +01:00

90 lines
2.5 KiB
PHP

<?php
/**
* A class that adds Jetpack Stats widget for WP Dashboard.
*
* @package automattic/jetpack-stats-admin
*/
namespace Automattic\Jetpack\Stats_Admin;
/**
* Responsible for loading Jetpack Stats widget for WP Dashboard.
*
* @package jetpack-stats-admin
*/
class WP_Dashboard_Odyssey_Widget {
const DASHBOARD_WIDGET_ID = 'jetpack_summary_widget';
/**
* Renders the widget and fires a dashboard widget action.
*/
public function render() {
// The widget is always rendered, so if it was hidden and then toggled open, we need to ask user to refresh the page to load data properly.
$is_toggled_open = $this->is_widget_hidden();
?>
<div id="dashboard_stats" class="jp-stats-widget" style="min-height: 200px;">
<div class="hide-if-js"><?php esc_html_e( 'Your Jetpack Stats widget requires JavaScript to function properly.', 'jetpack-stats-admin' ); ?></div>
<div class="hide-if-no-js" style="height: 100%">
<img
class="jp-stats-widget-loading-spinner"
width="32"
height="32"
style="position: absolute; left: calc(50% - 28px); top: calc(50% - 36px);"
alt=<?php echo esc_attr( __( 'Loading', 'jetpack-stats-admin' ) ); ?>
src="//en.wordpress.com/i/loading/loading-64.gif"
/>
<p>
<?php
if ( $is_toggled_open ) {
echo esc_html__( 'Please reload the page to see your stats...', 'jetpack-stats-admin' );
}
?>
</p>
</div>
</div>
<?php
/**
* Fires when the dashboard is loaded, but no longer used anywhere in the Jetpack plugin.
* The action is still available for backward compatibility.
*
* @since 3.4.0
*/
do_action( 'jetpack_dashboard_widget' );
}
/**
* Load the admin scripts.
*/
public function load_admin_scripts() {
$config_data = ( new Odyssey_Config_Data() )->get_data();
( new Odyssey_Assets() )->load_admin_scripts(
'jetpack_stats_widget',
'widget-loader.min',
array(
'config_variable_name' => 'jetpackStatsOdysseyWidgetConfigData',
'config_data' => $config_data,
'enqueue_css' => false,
)
);
}
/**
* Load the admin scripts when the widget is visible.
*/
public function maybe_load_admin_scripts() {
if ( $this->is_widget_hidden() ) {
return;
}
$this->load_admin_scripts();
}
/**
* Returns true if the widget is hidden for the current screen and current user.
*
* @return bool
*/
public function is_widget_hidden() {
$hidden = get_hidden_meta_boxes( get_current_screen() );
return in_array( self::DASHBOARD_WIDGET_ID, $hidden, true );
}
}