'public',
),
$atts,
'aistma_dashboard_widget'
);
if ( ! self::user_can_view( $atts['viewable_by'] ) ) {
return '';
}
if ( class_exists( 'AISTMA_Widgets_Manager' ) ) {
AISTMA_Widgets_Manager::load_widget_classes();
}
if ( ! class_exists( $widget_class ) || ! method_exists( $widget_class, 'render_widget' ) ) {
return '';
}
ob_start();
self::maybe_print_assets( $widget_class );
echo '
';
call_user_func( array( $widget_class, 'render_widget' ), array( 'show_footer' => false ) );
echo '
';
return ob_get_clean();
}
private static function maybe_print_assets( $widget_class ) {
if ( isset( self::$assets_printed_for[ $widget_class ] ) ) {
return;
}
self::$assets_printed_for[ $widget_class ] = true;
if ( method_exists( $widget_class, 'get_widget_styles' ) ) {
$css = call_user_func( array( $widget_class, 'get_widget_styles' ) );
if ( ! empty( $css ) ) {
echo '';
}
}
if ( method_exists( $widget_class, 'get_widget_scripts' ) ) {
$js = call_user_func( array( $widget_class, 'get_widget_scripts' ) );
if ( ! empty( $js ) ) {
echo '';
}
}
}
private static function user_can_view( $viewable_by ) {
switch ( $viewable_by ) {
case 'admin':
return current_user_can( 'manage_options' );
case 'logged_in':
return is_user_logged_in();
case 'public':
default:
return true;
}
}
}
AISTMA_Dashboard_Shortcodes::init();