File: /var/www/html/insiders/wp-load/wp-content/plugins/gutenmate/lib/icons/icons.php
<?php
defined( 'GTM_KEY_ICON_SET_ACTIVE_SETTING' ) || define( 'GTM_KEY_ICON_SET_ACTIVE_SETTING', 'gtm_icon_set_active' );
if ( ! class_exists( 'GTM_Icon_Set' ) ) {
class GTM_Icon_Set {
private static $instance;
public $icon_sets = [];
public static function getInstance() {
if ( is_null( static::$instance ) ) {
static::$instance = new self();
}
return static::$instance;
}
/* Register */
public static function register( $icon_set ) {
$instance = static::getInstance();
$icon_set = wp_parse_args( $icon_set, [
"slug" => "slug_is_required",
"enqueue_style" => "",
"name" => "(No name was set)",
"description" => "",
"link" => "",
"active" => false,
] );
// Register fail if already registered
foreach ( $instance->icon_sets as $existing ) {
if ( $icon_set['slug'] == $existing['slug'] ) {
return false;
}
}
$instance->icon_sets[] = $icon_set;
return true; // Register success
}
public static function all() {
$instance = static::getInstance();
return $instance->icon_sets;
}
public static function get( $slug ) {
$instance = static::getInstance();
foreach ( $instance->icon_sets as $icon_set ) {
if ( $slug == $icon_set['slug'] ) {
return $icon_set;
}
}
return false;
}
/**
* Get an icon sets of current active icons
*
* @return Array
*/
public static function get_active() {
$support_sets = get_theme_support( 'gutenmate-icon-sets' ) ?: [];
// Fix nested array from `get_theme_support()`
if ( ! empty( $support_sets ) ) {
$support_sets = $support_sets[0];
}
// Get user setting, The data will specify the final active status
// The data will not contain all registered icon sets
// Example data: ['gtm-basic-icons' => false, 'fontawesome-regular' => true]
$user_setting = get_option( GTM_KEY_ICON_SET_ACTIVE_SETTING, [] );
$active_sets = array_filter( static::all(), function ( $icon_set ) use ( $support_sets, $user_setting ) {
// Use user setting if existing
if ( ! empty( $user_setting ) && is_array( $user_setting ) && isset( $user_setting[$icon_set['slug']] ) ) {
return $user_setting[$icon_set['slug']];
} else {
// Use default state from registration
return $icon_set['active'] || in_array( $icon_set['slug'], $support_sets );
}
} );
return $active_sets;
}
/**
* Get a name listing of current active icons
*
* @return Array
*/
public static function get_active_list() {
$active_sets = static::get_active();
$result = [];
foreach ( $active_sets as $active_set ) {
$result[] = $active_set['slug'];
}
return $result;
}
public static function get_enqueue_handles() {
$active_sets = static::get_active();
$handles = [];
foreach ( $active_sets as $icon_set ) {
if ( $icon_set
&& ! empty( $icon_set['enqueue_style'] )
&& wp_style_is( $icon_set['enqueue_style'], 'registered' ) ) {
$handles[] = $icon_set['enqueue_style'];
}
}
return $handles;
}
/**
* Save setting into datbase. The $active_list must contain current activated slugs
*
* @param array $active_list
* @return void
*/
public static function save_setting( $active_list = [] ) {
$support_sets = get_theme_support( 'gutenmate-icon-sets' );
$data = [];
foreach ( static::all() as $icon_set ) {
// Status from registration
$default_state = $icon_set['active'] || in_array( $icon_set['slug'], $support_sets );
// Status from settings screen
$is_active = in_array( $icon_set['slug'], $active_list );
if ( $is_active != $default_state ) {
$data[$icon_set['slug']] = $is_active;
}
}
// Save setting
if ( empty( $data ) ) {
delete_option( GTM_KEY_ICON_SET_ACTIVE_SETTING );
} else {
update_option( GTM_KEY_ICON_SET_ACTIVE_SETTING, $data );
}
}
}
}
GTM_Icon_Set::register( [
"slug" => "gtm-basic-icons",
"name" => "Basic icons",
"description" => "Required icons for gutenmate plugin. We don't recommend to disable it.",
"enqueue_style" => "gtm-basic-icons",
"meta" => __DIR__ . '/gtm-basic-icons.json',
"active" => true,
] );
GTM_Icon_Set::register( [
"slug" => "fontawesome-brands",
"name" => "Fontawesome Brands",
"description" => "Brand logo & social network icons from Fontawesome.",
"link" => "https://fontawesome.com/v5.15/icons?d=gallery&p=2&s=brands&m=free",
"enqueue_style" => "fontawesome-brands",
"meta" => __DIR__ . '/fontawesome-brands.json',
"active" => false,
] );
GTM_Icon_Set::register( [
"slug" => "fontawesome-regular",
"name" => "Fontawesome Regular",
"description" => "Regular icons from Fontawesome.",
"link" => "https://fontawesome.com/v5.15/icons?d=gallery&p=2&s=regular&m=free",
"enqueue_style" => "fontawesome-regular",
"meta" => __DIR__ . '/fontawesome-regular.json',
"active" => false,
] );
GTM_Icon_Set::register( [
"slug" => "fontawesome-solid",
"name" => "Fontawesome Solid",
"description" => "Solid icons from Fontawesome.",
"link" => "https://fontawesome.com/v5.15/icons?d=gallery&p=2&s=solid&m=free",
"enqueue_style" => "fontawesome-solid",
"meta" => __DIR__ . '/fontawesome-solid.json',
"active" => false,
] );
GTM_Icon_Set::register( [
"slug" => "eva-icons",
"name" => "Eva Icons",
"description" => "480 beautifully crafted Open Source icons for common actions and items.",
"link" => "https://akveo.github.io/eva-icons",
"enqueue_style" => "eva-icons",
"meta" => __DIR__ . '/eva-icons.json',
"active" => false,
] );
GTM_Icon_Set::register( [
"slug" => "feather-icons",
"name" => "Feather icons",
"description" => "Simply beautiful open source icons.",
"link" => "https://feathericons.com",
"enqueue_style" => "feather-icons",
"meta" => __DIR__ . '/feather-icons.json',
"active" => false,
] );
GTM_Icon_Set::register( [
"slug" => "iconic-icons",
"name" => "Iconic icons",
"description" => "Pixel-perfect icons.",
"link" => "https://iconic.app",
"enqueue_style" => "iconic-icons",
"meta" => __DIR__ . '/iconic-icons.json',
"active" => false,
] );
add_action( 'rest_api_init', 'gtm_setup_rest_icons' );
function gtm_setup_rest_icons() {
register_rest_route(
'gutenmate/v1',
'/icons/',
[
[
'methods' => 'GET',
'callback' => 'gtm_rest_get_icons',
'permission_callback' => function () {
return current_user_can( 'edit_posts' );
},
],
]
);
}
function gtm_rest_get_icons( WP_REST_Request $req ) {
global $wp_filesystem;
// Init filesystem if not used before
if ( ! is_a( $wp_filesystem, 'WP_Filesystem_Base' ) ) {
include_once ABSPATH . 'wp-admin/includes/file.php';
WP_Filesystem();
}
try {
$icons = [];
$icon_sets = GTM_Icon_Set::get_active();
foreach ( $icon_sets as $set ) {
$content = $wp_filesystem->get_contents_array( $set['meta'] );
$icons = array_merge( $icons, array_map( 'trim', $content ) );
}
return rest_ensure_response( [
'success' => true,
'message' => esc_html__( 'Gutenmate icons has been fetched.', 'gutenmate' ),
'data' => [
'active' => GTM_Icon_Set::get_active_list(),
'icons' => $icons,
],
] );
} catch ( Exception $e ) {
return rest_ensure_response( [
'success' => false,
'message' => $e->getMessage(),
] );
}
}
function gtm_get_icon_set_enqueue_handles() {
return GTM_Icon_Set::get_enqueue_handles();
}