JezK
Edit File: css-file.php
<?php /** * CSS files manager */ // If this file is called directly, abort. if ( ! defined( 'WPINC' ) ) { die; } if ( ! class_exists( 'Jet_Menu_CSS_File' ) ) { /** * Define Jet_Menu_CSS_File class */ class Jet_Menu_CSS_File { /** * A reference to an instance of this class. * * @since 1.0.0 * @var object */ private static $instance = null; private $menu_dir = null; private $menu_url = null; private $enqueued = array(); private $presets_to_save = array(); /** * Constructor for the class */ public function init() { $enbaled = jet_menu()->settings_manager->options_manager->get_option( 'jet-menu-cache-css', 'true' ); if ( 'true' !== $enbaled ) { return; } add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_menu_css' ) ); add_action( 'jet-menu/options-page/save', array( $this, 'remove_css_file' ) ); add_action( 'jet-menu/presets/created', array( $this, 'remove_css_file' ) ); add_action( 'jet-menu/presets/updated', array( $this, 'remove_css_file' ) ); add_action( 'jet-menu/presets/loaded', array( $this, 'remove_css_file' ) ); add_action( 'jet-menu/presets/deleted', array( $this, 'remove_css_file' ) ); add_action( 'jet-menu/item-settings/save', array( $this, 'remove_css_file' ) ); add_action( 'jet-menu/db_updater/update', array( $this, 'remove_css_file' ) ); add_filter( 'cx_dynamic_css/collector/localize_object', array( $this, 'maybe_create_css_file' ) ); } /** * Maybe create menu CSS file * * @param [type] $data [description] * @return [type] [description] */ public function maybe_create_css_file( $data ) { foreach ( $this->presets_to_save as $preset ) { if ( ! empty( $data['css'] ) && ! $this->menu_css_exists( $preset ) ) { file_put_contents( $this->menu_css_path( $preset ), htmlspecialchars_decode( $data['css'] ) ); } } return $data; } /** * [add_preset_to_save description] * @param integer $preset [description] */ public function add_preset_to_save( $preset = 0 ) { if ( ! $preset ) { $preset = 'general'; } if ( ! in_array( $preset, $this->presets_to_save ) ) { $this->presets_to_save[] = $preset; } } /** * Remove CSS file on options save * * @return [type] [description] */ public function remove_css_file() { foreach ( glob( $this->menu_dir() . '*.css' ) as $file ) { $slug = basename( $file, '.css' ); $preset = str_replace( 'jet-menu-', '', $slug ); if ( $this->menu_css_exists( $preset ) ) { unlink( $this->menu_css_path( $preset ) ); } } } /** * Enqueue menu CSS * @return [type] [description] */ public function enqueue_menu_css() { if ( ! $this->ensure_menu_dir() ) { return; } foreach ( glob( $this->menu_dir() . '*.css' ) as $file ) { $slug = basename( $file, '.css' ); $preset = str_replace( 'jet-menu-', '', $slug ); if ( $this->menu_css_exists( $preset ) ) { wp_enqueue_style( $slug, $this->menu_css_url( $preset ), array(), filemtime( $this->menu_css_path( $preset ) ) ); $this->enqueued[] = $preset; } } } /** * Check if menu CSS file exists * * @return [type] [description] */ public function menu_css_exists( $preset = 'general' ) { return file_exists( $this->menu_css_path( $preset ) ); } /** * Return path to menu CSS file * * @return [type] [description] */ public function menu_css_path( $preset = 'general' ) { return $this->menu_dir() . 'jet-menu-' . $preset . '.css'; } /** * Return url to menu CSS file * * @return [type] [description] */ public function menu_css_url( $preset = 'general' ) { return $this->menu_url() . 'jet-menu-' . $preset . '.css'; } /** * Check if passed preset is already enqueued * * @param integer|string $preset Preset to check * @return boolean */ public function is_enqueued( $preset = 0 ) { if ( ! $preset ) { $preset = 'general'; } return in_array( $preset, $this->enqueued ); } /** * Returns menu CSS directory URL * * @return [type] [description] */ public function menu_url() { if ( null !== $this->menu_url ) { return $this->menu_url; } $upload_dir = wp_upload_dir(); $upload_base_dir = $upload_dir['baseurl']; $this->menu_url = trailingslashit( $upload_base_dir ) . 'jet-menu/'; if ( is_ssl() ) { $this->menu_url = set_url_scheme( $this->menu_url ); } return $this->menu_url; } /** * Returns menu CSS directory path * * @return [type] [description] */ public function menu_dir() { if ( null !== $this->menu_dir ) { return $this->menu_dir; } $upload_dir = wp_upload_dir(); $upload_base_dir = $upload_dir['basedir']; $this->menu_dir = trailingslashit( $upload_base_dir ) . 'jet-menu/'; return $this->menu_dir; } /** * Ensure that CSS directory exists and try to create if not. * * @return bool */ public function ensure_menu_dir() { if ( file_exists( $this->menu_dir() ) ) { return true; } else { return mkdir( $this->menu_dir() ); } } /** * Returns the instance. * * @since 1.0.0 * @return object */ public static function get_instance() { // If the single instance hasn't been set, set it now. if ( null == self::$instance ) { self::$instance = new self; } return self::$instance; } } } /** * Returns instance of Jet_Menu_CSS_File * * @return object */ function jet_menu_css_file() { return Jet_Menu_CSS_File::get_instance(); }