267 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			267 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /**
 | |
|  * Menu Icons
 | |
|  *
 | |
|  * @package Menu_Icons
 | |
|  * @version 0.10.2
 | |
|  * @author Dzikri Aziz <kvcrvt@gmail.com>
 | |
|  *
 | |
|  *
 | |
|  * Plugin name: Menu Icons
 | |
|  * Plugin URI:  https://github.com/Codeinwp/wp-menu-icons
 | |
|  * Description: Spice up your navigation menus with pretty icons, easily.
 | |
|  * Version:     0.12.11
 | |
|  * Author:      ThemeIsle
 | |
|  * Author URI:  https://themeisle.com
 | |
|  * License:     GPLv2
 | |
|  * Text Domain: menu-icons
 | |
|  * Domain Path: /languages
 | |
|  * WordPress Available:  yes
 | |
|  * Requires License:    no
 | |
|  */
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Main plugin class
 | |
|  */
 | |
| final class Menu_Icons {
 | |
| 
 | |
| 	const DISMISS_NOTICE = 'menu-icons-dismiss-notice';
 | |
| 
 | |
| 	const VERSION = '0.12.11';
 | |
| 
 | |
| 	/**
 | |
| 	 * Holds plugin data
 | |
| 	 *
 | |
| 	 * @access protected
 | |
| 	 * @since  0.1.0
 | |
| 	 * @var    array
 | |
| 	 */
 | |
| 	protected static $data;
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Get plugin data
 | |
| 	 *
 | |
| 	 * @since  0.1.0
 | |
| 	 * @since  0.9.0  Return NULL if $name is not set in $data.
 | |
| 	 * @param  string $name
 | |
| 	 *
 | |
| 	 * @return mixed
 | |
| 	 */
 | |
| 	public static function get( $name = null ) {
 | |
| 		if ( is_null( $name ) ) {
 | |
| 			return self::$data;
 | |
| 		}
 | |
| 
 | |
| 		if ( isset( self::$data[ $name ] ) ) {
 | |
| 			return self::$data[ $name ];
 | |
| 		}
 | |
| 
 | |
| 		return null;
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Load plugin
 | |
| 	 *
 | |
| 	 * 1. Load translation
 | |
| 	 * 2. Set plugin data (directory and URL paths)
 | |
| 	 * 3. Attach plugin initialization at icon_picker_init hook
 | |
| 	 *
 | |
| 	 * @since   0.1.0
 | |
| 	 * @wp_hook action plugins_loaded
 | |
| 	 * @link    http://codex.wordpress.org/Plugin_API/Action_Reference/plugins_loaded
 | |
| 	 */
 | |
| 	public static function _load() {
 | |
| 		load_plugin_textdomain( 'menu-icons', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
 | |
| 
 | |
| 		self::$data = array(
 | |
| 			'dir'   => plugin_dir_path( __FILE__ ),
 | |
| 			'url'   => plugin_dir_url( __FILE__ ),
 | |
| 			'types' => array(),
 | |
| 		);
 | |
| 
 | |
| 		Icon_Picker::instance();
 | |
| 
 | |
| 		require_once self::$data['dir'] . 'includes/library/compat.php';
 | |
| 		require_once self::$data['dir'] . 'includes/library/functions.php';
 | |
| 		require_once self::$data['dir'] . 'includes/meta.php';
 | |
| 
 | |
| 		Menu_Icons_Meta::init();
 | |
| 
 | |
| 		// Font awesome 5 backward compatible functionalities.
 | |
| 		require_once self::$data['dir'] . 'includes/library/font-awesome5/backward-compatible-icons.php';
 | |
| 		require_once self::$data['dir'] . 'includes/library/font-awesome5/font-awesome.php';
 | |
| 		Menu_Icons_Font_Awesome::init();
 | |
| 
 | |
| 		add_action( 'icon_picker_init', array( __CLASS__, '_init' ), 9 );
 | |
| 
 | |
| 		add_action( 'admin_enqueue_scripts', array( __CLASS__, '_admin_enqueue_scripts' ) );
 | |
| 		add_action( 'wp_dashboard_setup', array( __CLASS__, '_wp_menu_icons_dashboard_notice' ) );
 | |
| 		add_action( 'wp_ajax_wp_menu_icons_dismiss_dashboard_notice', array( __CLASS__, 'wp_menu_icons_dismiss_dashboard_notice' ) );
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Initialize
 | |
| 	 *
 | |
| 	 * 1. Get registered types from Icon Picker
 | |
| 	 * 2. Load settings
 | |
| 	 * 3. Load front-end functionalities
 | |
| 	 *
 | |
| 	 * @since   0.1.0
 | |
| 	 * @since   0.9.0  Hook into `icon_picker_init`.
 | |
| 	 * @wp_hook action icon_picker_init
 | |
| 	 * @link    http://codex.wordpress.org/Plugin_API/Action_Reference
 | |
| 	 */
 | |
| 	public static function _init() {
 | |
| 		/**
 | |
| 		 * Allow themes/plugins to add/remove icon types
 | |
| 		 *
 | |
| 		 * @since 0.1.0
 | |
| 		 * @param array $types Icon types
 | |
| 		 */
 | |
| 		self::$data['types'] = apply_filters(
 | |
| 			'menu_icons_types',
 | |
| 			Icon_Picker_Types_Registry::instance()->types
 | |
| 		);
 | |
| 
 | |
| 		// Nothing to do if there are no icon types registered.
 | |
| 		if ( empty( self::$data['types'] ) ) {
 | |
| 			if ( WP_DEBUG ) {
 | |
| 				trigger_error( esc_html__( 'Menu Icons: No registered icon types found.', 'menu-icons' ) );
 | |
| 			}
 | |
| 
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		// Load settings.
 | |
| 		require_once self::$data['dir'] . 'includes/settings.php';
 | |
| 		Menu_Icons_Settings::init();
 | |
| 
 | |
| 		// Load front-end functionalities.
 | |
| 		if ( ! is_admin() ) {
 | |
| 			require_once self::$data['dir'] . '/includes/front.php';
 | |
| 			Menu_Icons_Front_End::init();
 | |
| 		}
 | |
| 
 | |
| 		do_action( 'menu_icons_loaded' );
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Display notice about missing Icon Picker
 | |
| 	 *
 | |
| 	 * @since   0.9.1
 | |
| 	 * @wp_hook action admin_notice
 | |
| 	 */
 | |
| 	public static function _notice_missing_icon_picker() {
 | |
| 		?>
 | |
| 		<div class="error">
 | |
| 			<p><?php esc_html_e( 'Looks like Menu Icons was installed via Composer. Please activate Icon Picker first.', 'menu-icons' ); ?></p>
 | |
| 		</div>
 | |
| 		<?php
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Register assets.
 | |
| 	 */
 | |
| 	public static function _admin_enqueue_scripts() {
 | |
| 		$url    = self::get( 'url' );
 | |
| 		$suffix = kucrut_get_script_suffix();
 | |
| 
 | |
| 		if ( defined( 'MENU_ICONS_SCRIPT_DEBUG' ) && MENU_ICONS_SCRIPT_DEBUG ) {
 | |
| 			$script_url = '//localhost:8081/';
 | |
| 		} else {
 | |
| 			$script_url = $url;
 | |
| 		}
 | |
| 
 | |
| 		wp_register_style(
 | |
| 			'menu-icons-dashboard',
 | |
| 			"{$url}css/dashboard-notice{$suffix}.css",
 | |
| 			false,
 | |
| 			self::VERSION
 | |
| 		);
 | |
| 
 | |
| 		wp_register_script(
 | |
| 			'menu-icons-dashboard',
 | |
| 			"{$script_url}js/dashboard-notice{$suffix}.js",
 | |
| 			array( 'jquery' ),
 | |
| 			self::VERSION,
 | |
| 			true
 | |
| 		);
 | |
| 
 | |
| 		wp_localize_script(
 | |
| 			'menu-icons-dashboard',
 | |
| 			'menuIcons',
 | |
| 			array(
 | |
| 				'ajaxUrls' => admin_url( 'admin-ajax.php' ),
 | |
| 				'_nonce'   => wp_create_nonce( self::DISMISS_NOTICE ),
 | |
| 			)
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Render dashboard notice.
 | |
| 	 */
 | |
| 	public static function _wp_menu_icons_dashboard_notice() {
 | |
| 		if ( false === get_transient( self::DISMISS_NOTICE ) ) {
 | |
| 			wp_enqueue_style( 'menu-icons-dashboard' );
 | |
| 			wp_enqueue_script( 'menu-icons-dashboard' );
 | |
| 			add_action( 'admin_notices', array( __CLASS__, '_upsell_admin_notice' ) );
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Ajax request handle for dissmiss dashboard notice.
 | |
| 	 */
 | |
| 	public static function wp_menu_icons_dismiss_dashboard_notice() {
 | |
| 		check_ajax_referer( self::DISMISS_NOTICE, '_nonce' );
 | |
| 
 | |
| 		$dismiss = ! empty( $_POST['dismiss'] ) ? intval( $_POST['dismiss'] ) : 0;
 | |
| 		set_transient( self::DISMISS_NOTICE, $dismiss, 365 * DAY_IN_SECONDS );
 | |
| 
 | |
| 		wp_send_json_success(
 | |
| 			array(
 | |
| 				'status' => 0,
 | |
| 			)
 | |
| 		);
 | |
| 		die();
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Upsell admin notice.
 | |
| 	 */
 | |
| 	public static function _upsell_admin_notice() {
 | |
| 		$neve_theme_url = add_query_arg(
 | |
| 			array(
 | |
| 				'theme' => 'neve',
 | |
| 			),
 | |
| 			admin_url( 'theme-install.php' )
 | |
| 		);
 | |
| 		?>
 | |
| 		<div class="notice notice-info is-dismissible menu-icon-dashboard-notice">
 | |
| 			<h2><?php esc_html_e( 'Thank you for installing Menu Icons!', 'menu-icons' ); ?></h2>
 | |
| 			<p><?php esc_html_e( 'Have you heard about our latest FREE theme - Neve? Using a mobile-first approach, compatibility with AMP and popular page-builders, Neve makes website building accessible for everyone.', 'menu-icons' ); ?></p>
 | |
| 			<a href="<?php echo esc_url( $neve_theme_url ); ?>" class="button button-primary button-large"><?php esc_html_e( 'Preview Neve', 'menu-icons' ); ?></a>
 | |
| 		</div>
 | |
| 		<?php
 | |
| 	}
 | |
| }
 | |
| add_action( 'plugins_loaded', array( 'Menu_Icons', '_load' ) );
 | |
| 
 | |
| $vendor_file = dirname(__FILE__) . '/vendor/autoload.php';
 | |
| 
 | |
| if ( is_readable( $vendor_file ) ) {
 | |
| 	require_once $vendor_file;
 | |
| }
 | |
| 
 | |
| add_filter( 'themeisle_sdk_products', 'kucrut_register_sdk', 10, 1 );
 | |
| function kucrut_register_sdk( $products ) {
 | |
| 
 | |
| 	$products[] = __FILE__;
 | |
| 	return $products;
 | |
| }
 |