123 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Font awesome 5 icons support.
 | |
|  *
 | |
|  * @package Menu_Icons
 | |
|  */
 | |
| final class Menu_Icons_Font_Awesome {
 | |
| 
 | |
| 	/**
 | |
| 	 * Font Awesome version
 | |
| 	 *
 | |
| 	 * @access static
 | |
| 	 * @var    string
 | |
| 	 */
 | |
| 	public static $version = '5.15.4';
 | |
| 
 | |
| 	/**
 | |
| 	 * Init hooks.
 | |
| 	 */
 | |
| 	public static function init() {
 | |
| 		add_filter( 'icon_picker_icon_type_stylesheet_uri', array( __CLASS__, '_icon_type_stylesheet_uri' ), 10, 3 );
 | |
| 		add_filter( 'icon_picker_fa_items', array( __CLASS__, '_icon_picker_fa_items' ) );
 | |
| 		add_filter( 'icon_picker_font_media_templates', array( __CLASS__, '_icon_picker_font_media_templates' ) );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Font Awesome's stylesheet.
 | |
| 	 *
 | |
| 	 * @param  string                $stylesheet_uri Icon type's stylesheet URI.
 | |
| 	 * @param  string                $icon_type_id   Icon type's ID.
 | |
| 	 * @param  Icon_Picker_Type_Font $icon_type      Icon type's instance.
 | |
| 	 *
 | |
| 	 * @return string
 | |
| 	 */
 | |
| 	public static function _icon_type_stylesheet_uri( $stylesheet_uri, $icon_type_id, $icon_type ) {
 | |
| 		if ( 'fa' === $icon_type_id ) {
 | |
| 			$url = Menu_Icons::get( 'url' );
 | |
| 
 | |
| 			$stylesheet_uri = sprintf(
 | |
| 				"{$url}css/fontawesome/css/all.min.css",
 | |
| 				$icon_type->version
 | |
| 			);
 | |
| 		}
 | |
| 
 | |
| 		return $stylesheet_uri;
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Icon picker fontawesome items.
 | |
| 	 *
 | |
| 	 * @param array $icons Icons.
 | |
| 	 * @return array Icons.
 | |
| 	 */
 | |
| 	public static function _icon_picker_fa_items( $icons ) {
 | |
| 		if ( empty( $icons ) ) {
 | |
| 			return $icons;
 | |
| 		}
 | |
| 
 | |
| 		$deprecated_icons = array_search( 'fa-tripadvisor', array_column( $icons, 'id' ), true );
 | |
| 		if ( false !== $deprecated_icons ) {
 | |
| 			unset( $icons[ $deprecated_icons ] );
 | |
| 			$icons = array_values( $icons );
 | |
| 		}
 | |
| 
 | |
| 		$font_awesome = font_awesome_backward_compatible();
 | |
| 		foreach ( $icons as $key => $icon ) {
 | |
| 			$old_fa_icon = sprintf( 'fa-%s', $icons[ $key ]['id'] );
 | |
| 			if ( array_key_exists( $old_fa_icon, $font_awesome ) ) {
 | |
| 				$icons[ $key ]['id'] = trim( $font_awesome[ $old_fa_icon ] );
 | |
| 			} else {
 | |
| 				$icons[ $key ]['id'] = sprintf( 'fa %s', trim( $icons[ $key ]['id'] ) );
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		// Fa5 extra icons support.
 | |
| 		$global_settins = get_option( 'menu-icons', false );
 | |
| 		if ( ! empty( $global_settins['global']['fa5_extra_icons'] ) ) {
 | |
| 			$fa5_extra_icons = $global_settins['global']['fa5_extra_icons'];
 | |
| 			$fa5_extra_icons = explode( ',', $fa5_extra_icons );
 | |
| 			$fa5_extra_icons = array_map( 'trim', $fa5_extra_icons );
 | |
| 			if ( ! empty( $fa5_extra_icons ) ) {
 | |
| 				foreach ( $fa5_extra_icons as $fa5_icon ) {
 | |
| 					$icon_name = explode( '-', $fa5_icon );
 | |
| 					$icon_name = end( $icon_name );
 | |
| 					$icons[]   = array(
 | |
| 						'group' => 'all',
 | |
| 						'id'    => $fa5_icon,
 | |
| 						'name'  => $icon_name,
 | |
| 					);
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return $icons;
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Icon picker font media template.
 | |
| 	 *
 | |
| 	 * @param string $template Media template.
 | |
| 	 * @return string Media template.
 | |
| 	 */
 | |
| 	public static function _icon_picker_font_media_templates( $template ) {
 | |
| 		$templates = array(
 | |
| 			'icon' => '<i class="_icon {{data.type}} {{ data.icon }}"></i>',
 | |
| 			'item' => sprintf(
 | |
| 				'<div class="attachment-preview js--select-attachment">
 | |
| 			<div class="thumbnail">
 | |
| 			<span class="_icon"><i class="{{"fa" == data.type ? "" : data.type}} {{ data.id }}"></i></span>
 | |
| 			<div class="filename"><div>{{ data.name }}</div></div>
 | |
| 			</div>
 | |
| 			</div>
 | |
| 			<a class="check" href="#" title="%s"><div class="media-modal-icon"></div></a>',
 | |
| 				esc_attr__( 'Deselect', 'icon-picker' )
 | |
| 			),
 | |
| 		);
 | |
| 
 | |
| 		return $templates;
 | |
| 	}
 | |
| }
 |