<?php namespace CarouselSlider; defined( 'ABSPATH' ) || exit; /** * Assets class */ class Assets { /** * The instance of the class * * @var self */ private static $instance; /** * Plugin name slug * * @var string */ private $plugin_name; /** * The plugin version * * @var string */ private $version; /** * Ensures only one instance of the class is loaded or can be loaded. * * @return self */ public static function init() { if ( is_null( self::$instance ) ) { self::$instance = new self(); add_action( 'wp_loaded', [ self::$instance, 'register' ] ); add_action( 'admin_head', [ self::$instance, 'admin_localize_data' ], 9 ); } return self::$instance; } /** * Check if script debugging is enabled * * @return bool */ private function is_script_debug_enabled(): bool { return defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG; } /** * Checks to see if the site has SSL enabled or not. * * @return bool */ public static function is_ssl(): bool { if ( is_ssl() ) { return true; } elseif ( 0 === stripos( get_option( 'siteurl' ), 'https://' ) ) { return true; } elseif ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' === $_SERVER['HTTP_X_FORWARDED_PROTO'] ) { return true; } return false; } /** * Get assets URL * * @param string $path Optional path. * * @return string */ public static function get_assets_url( string $path = '' ): string { $url = CAROUSEL_SLIDER_ASSETS; if ( static::is_ssl() && 0 === stripos( $url, 'http://' ) ) { $url = str_replace( 'http://', 'https://', $url ); } if ( ! empty( $path ) ) { return rtrim( $url, '/' ) . '/' . ltrim( $path, '/' ); } return $url; } /** * Register our app scripts and styles * * @return void */ public function register() { $this->plugin_name = CAROUSEL_SLIDER; $this->version = CAROUSEL_SLIDER_VERSION; if ( $this->is_script_debug_enabled() ) { $this->version = $this->version . '-' . time(); } $this->register_scripts( $this->get_scripts() ); $this->register_styles( $this->get_styles() ); } /** * Register scripts * * @param array $scripts The scripts to register. * * @return void */ private function register_scripts( array $scripts ) { foreach ( $scripts as $handle => $script ) { $deps = $script['deps'] ?? false; $in_footer = $script['in_footer'] ?? true; $version = $script['version'] ?? $this->version; wp_register_script( $handle, $script['src'], $deps, $version, $in_footer ); } } /** * Register styles * * @param array $styles The styles to register. * * @return void */ public function register_styles( array $styles ) { foreach ( $styles as $handle => $style ) { $deps = $style['deps'] ?? false; wp_register_style( $handle, $style['src'], $deps, $this->version ); } } /** * Get all registered scripts * * @return array */ public function get_scripts(): array { return [ 'carousel-slider-admin' => [ 'src' => static::get_assets_url( 'js/admin.js' ), 'deps' => [ 'jquery', 'wp-color-picker', 'jquery-ui-accordion', 'jquery-ui-tabs', 'jquery-ui-sortable', ], ], 'carousel-slider-admin-new-carousel' => [ 'src' => static::get_assets_url( 'js/admin-add-new-carousel.js' ), ], 'carousel-slider-frontend' => [ 'src' => static::get_assets_url( 'js/frontend.js' ), 'deps' => [ 'jquery' ], ], 'carousel-slider-frontend-v2' => [ 'src' => static::get_assets_url( 'js/frontend-v2.js' ), ], ]; } /** * Get registered styles * * @return array */ public function get_styles(): array { return [ 'carousel-slider-frontend' => [ 'src' => static::get_assets_url( 'css/frontend.css' ), ], 'carousel-slider-frontend-v2' => [ 'src' => static::get_assets_url( 'css/frontend-v2.css' ), ], 'carousel-slider-admin' => [ 'src' => static::get_assets_url( 'css/admin.css' ), 'deps' => [ 'wp-color-picker' ], ], 'carousel-slider-admin-new-carousel' => [ 'src' => static::get_assets_url( 'css/admin-add-new-carousel.css' ), ], ]; } /** * Script to load css file via javaScript * * @return string */ public static function get_style_loader_script(): string { $data = self::get_assets_url( 'css/frontend.css' ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents $javascript = file_get_contents( self::get_assets_url( '/js/frontend-style-loader.js' ) ); $script = '<script id="carousel-slider-style-loader">' . PHP_EOL; $script .= 'window.carouselSliderCssUrl = ' . wp_json_encode( $data ) . ';' . PHP_EOL; $script .= $javascript . PHP_EOL; $script .= '</script>' . PHP_EOL; return $script; } /** * Global localize data both for admin and frontend */ public static function admin_localize_data() { $user = wp_get_current_user(); $is_user_logged_in = $user->exists(); $data = [ 'homeUrl' => home_url(), 'ajaxUrl' => admin_url( 'admin-ajax.php' ), 'restRoot' => esc_url_raw( rest_url( 'carousel-slider/v1' ) ), 'nonce' => wp_create_nonce( 'carousel_slider_ajax_nonce' ), ]; if ( $is_user_logged_in ) { $data['restNonce'] = wp_create_nonce( 'wp_rest' ); } if ( is_admin() ) { $slider_types = []; foreach ( Helper::get_slider_types() as $slug => $args ) { $slider_types[] = array_merge( [ 'slug' => $slug ], $args ); } $data['sliderTypes'] = $slider_types; $data['l10n'] = [ 'confirmDelete' => __( 'Are you sure to delete it?', 'carousel-slider' ), ]; } echo '<script>window.CarouselSliderL10n = ' . wp_json_encode( $data ) . '</script>' . PHP_EOL; } }