You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
287 lines
7.5 KiB
PHP
287 lines
7.5 KiB
PHP
<?php
|
|
/**
|
|
* Class BSF_Custom_Fonts_Menu.
|
|
*
|
|
* @package Bsf_Custom_Fonts
|
|
* @since 2.0.0
|
|
*/
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // Exit if accessed directly.
|
|
}
|
|
|
|
/**
|
|
* BSF_Custom_Fonts_Menu.
|
|
*
|
|
* @since 2.0.0
|
|
*/
|
|
class BSF_Custom_Fonts_Menu {
|
|
|
|
/**
|
|
* Instance
|
|
*
|
|
* @access private
|
|
* @var null $instance
|
|
* @since 2.0.0
|
|
*/
|
|
private static $instance;
|
|
|
|
/**
|
|
* Initiator
|
|
*
|
|
* @since 2.0.0
|
|
* @return object initialized object of class.
|
|
*/
|
|
public static function get_instance() {
|
|
if ( ! isset( self::$instance ) ) {
|
|
self::$instance = new self();
|
|
}
|
|
return self::$instance;
|
|
}
|
|
|
|
/**
|
|
* Plugin slug
|
|
*
|
|
* @since 2.0.0
|
|
* @var string $plugin_slug
|
|
*/
|
|
public static $plugin_slug = 'bsf-custom-fonts';
|
|
|
|
/**
|
|
* Parent Menu Slug
|
|
*
|
|
* @since 1.0.0
|
|
* @var (string) $parent_menu_slug
|
|
*/
|
|
protected $parent_menu_slug = 'themes.php';
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @since 2.0.0
|
|
*/
|
|
public function __construct() {
|
|
$this->initialize_hooks();
|
|
}
|
|
|
|
/**
|
|
* Init Hooks.
|
|
*
|
|
* @since 2.0.0
|
|
* @return void
|
|
*/
|
|
public function initialize_hooks() {
|
|
|
|
add_action( 'admin_menu', array( $this, 'register_custom_fonts_menu' ) );
|
|
add_action( 'admin_init', array( $this, 'settings_admin_scripts' ) );
|
|
|
|
add_filter( 'upload_mimes', array( $this, 'add_fonts_to_allowed_mimes' ) );
|
|
add_filter( 'wp_check_filetype_and_ext', array( $this, 'update_mime_types' ), 10, 3 );
|
|
}
|
|
|
|
/**
|
|
* Register custom font menu
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function register_custom_fonts_menu() {
|
|
$title = apply_filters( 'bsf_custom_fonts_menu_title', _x( 'Custom Fonts', 'Menu title', 'custom-fonts' ) );
|
|
add_theme_page(
|
|
$title,
|
|
$title,
|
|
'edit_theme_options',
|
|
self::$plugin_slug,
|
|
array( $this, 'render_admin_dashboard' )
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Allowed mime types and file extensions
|
|
*
|
|
* @since 1.0.0
|
|
* @param array $mimes Current array of mime types.
|
|
* @return array $mimes Updated array of mime types.
|
|
*/
|
|
public function add_fonts_to_allowed_mimes( $mimes ) {
|
|
$mimes['woff'] = 'application/x-font-woff';
|
|
$mimes['woff2'] = 'application/x-font-woff2';
|
|
$mimes['ttf'] = 'application/x-font-ttf';
|
|
$mimes['svg'] = 'image/svg+xml';
|
|
$mimes['eot'] = 'application/vnd.ms-fontobject';
|
|
$mimes['otf'] = 'font/otf';
|
|
|
|
return $mimes;
|
|
}
|
|
|
|
/**
|
|
* Correct the mime types and extension for the font types.
|
|
*
|
|
* @param array $defaults File data array containing 'ext', 'type', and
|
|
* 'proper_filename' keys.
|
|
* @param string $file Full path to the file.
|
|
* @param string $filename The name of the file (may differ from $file due to
|
|
* $file being in a tmp directory).
|
|
* @return Array File data array containing 'ext', 'type', and
|
|
*/
|
|
public function update_mime_types( $defaults, $file, $filename ) {
|
|
if ( 'ttf' === pathinfo( $filename, PATHINFO_EXTENSION ) ) {
|
|
$defaults['type'] = 'application/x-font-ttf';
|
|
$defaults['ext'] = 'ttf';
|
|
}
|
|
|
|
if ( 'otf' === pathinfo( $filename, PATHINFO_EXTENSION ) ) {
|
|
$defaults['type'] = 'application/x-font-otf';
|
|
$defaults['ext'] = 'otf';
|
|
}
|
|
|
|
return $defaults;
|
|
}
|
|
|
|
/**
|
|
* Initialize after Astra gets loaded.
|
|
*
|
|
* @since 2.0.0
|
|
*/
|
|
public function settings_admin_scripts() {
|
|
if ( $this->is_custom_fonts_screen() ) {
|
|
add_action( 'admin_enqueue_scripts', array( $this, 'styles_scripts' ) );
|
|
add_filter( 'admin_footer_text', array( $this, 'bsf_custom_fonts_admin_footer_link' ), 99 );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check BSF Custom Fonts plugin screen.
|
|
*
|
|
* @return bool true|false after checking plugins page.
|
|
* @since 2.0.0
|
|
*/
|
|
public function is_custom_fonts_screen() {
|
|
if ( isset( $_GET['page'] ) && sanitize_text_field( $_GET['page'] ) === self::$plugin_slug ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Renders the admin settings.
|
|
*
|
|
* @since 2.0.0
|
|
* @return void
|
|
*/
|
|
public function render_admin_dashboard() {
|
|
?>
|
|
<div class="bsf-cf-menu-page-wrapper">
|
|
<div id="bsf-cf-menu-page">
|
|
<div class="bsf-cf-menu-page-content">
|
|
<div id="bsf-custom-font-dashboard-app" class="bsf-custom-font-dashboard-app"> </div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Enqueues the needed CSS/JS for the builder's admin settings page.
|
|
*
|
|
* @return void
|
|
* @since 2.0.0
|
|
*/
|
|
public function styles_scripts() {
|
|
|
|
if ( is_customize_preview() ) {
|
|
return;
|
|
}
|
|
|
|
wp_enqueue_style( 'bsf-custom-fonts-admin-font', 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500&display=swap', array(), BSF_CUSTOM_FONTS_VER ); // Styles.
|
|
|
|
wp_enqueue_style( 'wp-components' );
|
|
|
|
$localize = array(
|
|
'admin_base_url' => admin_url(),
|
|
'plugin_dir' => BSF_CUSTOM_FONTS_URI,
|
|
'plugin_ver' => defined( 'BSF_CUSTOM_FONTS_VER' ) ? BSF_CUSTOM_FONTS_VER : '',
|
|
'plugin_name' => 'Custom Fonts',
|
|
'ajax_url' => admin_url( 'admin-ajax.php' ),
|
|
'home_slug' => self::$plugin_slug,
|
|
'app_base_url' => admin_url( 'themes.php?page=' . self::$plugin_slug ),
|
|
'update_nonce' => wp_create_nonce( 'astra_update_admin_setting' ),
|
|
'add_font_nonce' => wp_create_nonce( 'add_font_nonce' ),
|
|
'edit_font_nonce' => wp_create_nonce( 'edit_font_nonce' ),
|
|
'delete_font_nonce' => wp_create_nonce( 'delete_font_nonce' ),
|
|
'googleFonts' => BCF_Custom_Font_Families::get_google_fonts(),
|
|
'existingGoogleFonts' => BCF_Custom_Font_Families::get_existing_google_fonts(),
|
|
'fontPostCount' => wp_count_posts( BSF_CUSTOM_FONTS_POST_TYPE )->publish,
|
|
'googleFontAPI' => 'https://fonts.googleapis.com/css?family',
|
|
'fontWeightList' => BCF_Custom_Font_Families::get_font_weight_list(),
|
|
);
|
|
|
|
$this->settings_app_scripts( apply_filters( 'bsf_custom_fonts_dashboard_admin_localize', $localize ) );
|
|
}
|
|
|
|
/**
|
|
* Settings app scripts
|
|
*
|
|
* @param array $localize Variable names.
|
|
*
|
|
* @return void
|
|
* @since 2.0.0
|
|
*/
|
|
public function settings_app_scripts( $localize ) {
|
|
$handle = 'bsf-custom-fonts-admin-dashboard-app';
|
|
$build_url = BSF_CUSTOM_FONTS_ADMIN_URL . '/assets/build/';
|
|
|
|
wp_enqueue_media();
|
|
$script_dep = array( 'react', 'react-dom', 'wp-api-fetch', 'wp-components', 'wp-element', 'wp-i18n', 'updates', 'wp-hooks' );
|
|
|
|
wp_register_script(
|
|
$handle,
|
|
$build_url . 'dashboard-app.js',
|
|
$script_dep,
|
|
BSF_CUSTOM_FONTS_VER,
|
|
true
|
|
);
|
|
|
|
wp_register_style(
|
|
$handle,
|
|
$build_url . 'dashboard-app.css',
|
|
array(),
|
|
BSF_CUSTOM_FONTS_VER
|
|
);
|
|
|
|
wp_register_style(
|
|
'bsf-custom-fonts-admin-google-fonts',
|
|
'https://fonts.googleapis.com/css2?family=Inter:wght@200&display=swap',
|
|
array(),
|
|
BSF_CUSTOM_FONTS_VER
|
|
);
|
|
|
|
wp_enqueue_script( $handle );
|
|
|
|
wp_set_script_translations( $handle, 'custom-fonts' );
|
|
|
|
wp_enqueue_style( 'bsf-custom-fonts-admin-google-fonts' );
|
|
wp_enqueue_style( $handle );
|
|
|
|
wp_style_add_data( $handle, 'rtl', 'replace' );
|
|
|
|
wp_localize_script( $handle, 'bsf_custom_fonts_admin', $localize );
|
|
}
|
|
|
|
/**
|
|
* Add footer link.
|
|
*
|
|
* @since 2.0.0
|
|
*/
|
|
public function bsf_custom_fonts_admin_footer_link() {
|
|
$footer_text = sprintf(
|
|
/* translators: 1: Custom Fonts, 2: Plugin rating link */
|
|
__( 'Enjoyed %1$s? Please leave us a %2$s rating. We really appreciate your support!', 'custom-fonts' ),
|
|
'<span class="bcf-footer-thankyou"><strong> Custom Fonts </strong>',
|
|
'<a href="https://wordpress.org/support/plugin/custom-fonts/reviews/?filter=5#new-post" target="_blank">★★★★★</a></span>'
|
|
);
|
|
return $footer_text;
|
|
}
|
|
}
|
|
|
|
BSF_Custom_Fonts_Menu::get_instance();
|