aristath/kirki

View on GitHub
packages/kirki-framework/module-webfonts/src/Webfonts.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php
/**
 * Handles webfonts.
 *
 * @package kirki-framework/module-webfonts
 * @author Ari Stathopoulos (@aristath)
 * @copyright Copyright (c) 2019, Ari Stathopoulos (@aristath)
 * @license https://opensource.org/licenses/MIT
 * @since 1.0.0
 */

namespace Kirki\Module;

use Kirki\Compatibility\Values;
use Kirki\Compatibility\Kirki;
use Kirki\Module\Webfonts\Google;
use Kirki\Module\Webfonts\Embed;
use Kirki\Module\Webfonts\Async;

/**
 * The Webfonts object.
 */
class Webfonts {

    /**
     * The Google object.
     *
     * @access protected
     * @since 1.0.0
     * @var \Kirki\Module\Webfonts\Google
     */
    protected $fonts_google;

    /**
     * An array of fields to be processed.
     *
     * @static
     * @access public
     * @since 1.0.0
     * @var array
     */
    public static $fields = [];

    /**
     * The class constructor
     *
     * @access public
     * @since 1.0.0
     */
    public function __construct() {
        add_action( 'kirki_field_init', [ $this, 'field_init' ], 10, 2 );
        add_action( 'wp_loaded', [ $this, 'run' ] );
    }

    /**
     * Run on after_setup_theme.
     *
     * @access public
     * @since 1.0.0
     */
    public function run() {
        $this->fonts_google = Google::get_instance();
        $this->init();
    }

    /**
     * Init other objects depending on the method we'll be using.
     *
     * @access protected
     * @since 1.0.0
     */
    protected function init() {
        foreach ( array_keys( Kirki::$config ) as $config_id ) {
            if ( 'async' === $this->get_method() ) {
                new Async( $config_id, $this, $this->fonts_google );
            }
            new Embed( $config_id, $this, $this->fonts_google );
        }
    }

    /**
     * Get the method we're going to use.
     *
     * @access public
     * @since 1.0.0
     * @deprecated in 3.0.36.
     * @return string
     */
    public function get_method() {
        return ( is_customize_preview() || is_admin() ) ? 'async' : 'embed';
    }

    /**
     * Runs when a field gets added.
     * Adds fields to this object so we can loop through them.
     *
     * @access public
     * @since 1.0.0
     * @param array  $args   The field args.
     * @param Object $object The field object.
     * @return void
     */
    public function field_init( $args, $object ) {
        if ( ! isset( $args['type'] ) && isset( $object->type ) ) {
            $args['type'] = $object->type;
        }

        if ( ! isset( $args['type'] ) || $args['type'] !== 'kirki-typography' ) {
            return;
        }

        // Use the settings ID as key:
        self::$fields[ $args['settings'] ] = $args;
    }


    /**
     * Goes through all our fields and then populates the $this->fonts property.
     *
     * @access public
     * @param string $config_id The config-ID.
     */
    public function loop_fields( $config_id ) {
        foreach ( self::$fields as $field ) {
            if ( isset( $field['kirki_config'] ) && $config_id !== $field['kirki_config'] ) {
                continue;
            }

            $this->fonts_google->generate_google_font( $field );
        }
    }
}