wp/wp-includes/fonts/class-wp-font-library.php
changeset 21 48c4eec2b7e6
equal deleted inserted replaced
20:7b1b88e27a20 21:48c4eec2b7e6
       
     1 <?php
       
     2 /**
       
     3  * Font Library class.
       
     4  *
       
     5  * This file contains the Font Library class definition.
       
     6  *
       
     7  * @package    WordPress
       
     8  * @subpackage Fonts
       
     9  * @since      6.5.0
       
    10  */
       
    11 
       
    12 /**
       
    13  * Font Library class.
       
    14  *
       
    15  * @since 6.5.0
       
    16  */
       
    17 class WP_Font_Library {
       
    18 
       
    19 	/**
       
    20 	 * Font collections.
       
    21 	 *
       
    22 	 * @since 6.5.0
       
    23 	 * @var array
       
    24 	 */
       
    25 	private $collections = array();
       
    26 
       
    27 	/**
       
    28 	 * Container for the main instance of the class.
       
    29 	 *
       
    30 	 * @since 6.5.0
       
    31 	 * @var WP_Font_Library|null
       
    32 	 */
       
    33 	private static $instance = null;
       
    34 
       
    35 	/**
       
    36 	 * Register a new font collection.
       
    37 	 *
       
    38 	 * @since 6.5.0
       
    39 	 *
       
    40 	 * @param string $slug Font collection slug. May only contain alphanumeric characters, dashes,
       
    41 	 *                     and underscores. See sanitize_title().
       
    42 	 * @param array  $args Font collection data. See wp_register_font_collection() for information on accepted arguments.
       
    43 	 * @return WP_Font_Collection|WP_Error A font collection if it was registered successfully,
       
    44 	 *                                     or WP_Error object on failure.
       
    45 	 */
       
    46 	public function register_font_collection( string $slug, array $args ) {
       
    47 		$new_collection = new WP_Font_Collection( $slug, $args );
       
    48 
       
    49 		if ( $this->is_collection_registered( $new_collection->slug ) ) {
       
    50 			$error_message = sprintf(
       
    51 				/* translators: %s: Font collection slug. */
       
    52 				__( 'Font collection with slug: "%s" is already registered.' ),
       
    53 				$new_collection->slug
       
    54 			);
       
    55 			_doing_it_wrong(
       
    56 				__METHOD__,
       
    57 				$error_message,
       
    58 				'6.5.0'
       
    59 			);
       
    60 			return new WP_Error( 'font_collection_registration_error', $error_message );
       
    61 		}
       
    62 		$this->collections[ $new_collection->slug ] = $new_collection;
       
    63 		return $new_collection;
       
    64 	}
       
    65 
       
    66 	/**
       
    67 	 * Unregisters a previously registered font collection.
       
    68 	 *
       
    69 	 * @since 6.5.0
       
    70 	 *
       
    71 	 * @param string $slug Font collection slug.
       
    72 	 * @return bool True if the font collection was unregistered successfully and false otherwise.
       
    73 	 */
       
    74 	public function unregister_font_collection( string $slug ) {
       
    75 		if ( ! $this->is_collection_registered( $slug ) ) {
       
    76 			_doing_it_wrong(
       
    77 				__METHOD__,
       
    78 				/* translators: %s: Font collection slug. */
       
    79 				sprintf( __( 'Font collection "%s" not found.' ), $slug ),
       
    80 				'6.5.0'
       
    81 			);
       
    82 			return false;
       
    83 		}
       
    84 		unset( $this->collections[ $slug ] );
       
    85 		return true;
       
    86 	}
       
    87 
       
    88 	/**
       
    89 	 * Checks if a font collection is registered.
       
    90 	 *
       
    91 	 * @since 6.5.0
       
    92 	 *
       
    93 	 * @param string $slug Font collection slug.
       
    94 	 * @return bool True if the font collection is registered and false otherwise.
       
    95 	 */
       
    96 	private function is_collection_registered( string $slug ) {
       
    97 		return array_key_exists( $slug, $this->collections );
       
    98 	}
       
    99 
       
   100 	/**
       
   101 	 * Gets all the font collections available.
       
   102 	 *
       
   103 	 * @since 6.5.0
       
   104 	 *
       
   105 	 * @return array List of font collections.
       
   106 	 */
       
   107 	public function get_font_collections() {
       
   108 		return $this->collections;
       
   109 	}
       
   110 
       
   111 	/**
       
   112 	 * Gets a font collection.
       
   113 	 *
       
   114 	 * @since 6.5.0
       
   115 	 *
       
   116 	 * @param string $slug Font collection slug.
       
   117 	 * @return WP_Font_Collection|null Font collection object, or null if the font collection doesn't exist.
       
   118 	 */
       
   119 	public function get_font_collection( string $slug ) {
       
   120 		if ( $this->is_collection_registered( $slug ) ) {
       
   121 			return $this->collections[ $slug ];
       
   122 		}
       
   123 		return null;
       
   124 	}
       
   125 
       
   126 	/**
       
   127 	 * Utility method to retrieve the main instance of the class.
       
   128 	 *
       
   129 	 * The instance will be created if it does not exist yet.
       
   130 	 *
       
   131 	 * @since 6.5.0
       
   132 	 *
       
   133 	 * @return WP_Font_Library The main instance.
       
   134 	 */
       
   135 	public static function get_instance() {
       
   136 		if ( null === self::$instance ) {
       
   137 			self::$instance = new self();
       
   138 		}
       
   139 
       
   140 		return self::$instance;
       
   141 	}
       
   142 }