HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
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();
}