plugin install
This commit is contained in:
@@ -0,0 +1,209 @@
|
||||
<?php
|
||||
|
||||
namespace Gravity_Forms\Gravity_Forms\Config;
|
||||
|
||||
use Gravity_Forms\Gravity_Forms\Config\Items\GF_Config_Admin_I18n;
|
||||
use Gravity_Forms\Gravity_Forms\Config\Items\GF_Config_Block_Editor;
|
||||
use Gravity_Forms\Gravity_Forms\Config\Items\GF_Config_Global;
|
||||
use Gravity_Forms\Gravity_Forms\Config\Items\GF_Config_I18n;
|
||||
use Gravity_Forms\Gravity_Forms\Config\Items\GF_Config_Legacy_Check;
|
||||
use Gravity_Forms\Gravity_Forms\Config\Items\GF_Config_Legacy_Check_Multi;
|
||||
use Gravity_Forms\Gravity_Forms\Config\Items\GF_Config_Multifile;
|
||||
|
||||
use Gravity_Forms\Gravity_Forms\GF_Service_Container;
|
||||
use Gravity_Forms\Gravity_Forms\GF_Service_Provider;
|
||||
|
||||
/**
|
||||
* Class GF_Config_Service_Provider
|
||||
*
|
||||
* Service provider for the Config Service.
|
||||
*
|
||||
* @package Gravity_Forms\Gravity_Forms\Config
|
||||
*/
|
||||
class GF_Config_Service_Provider extends GF_Service_Provider {
|
||||
|
||||
// Organizational services
|
||||
const CONFIG_COLLECTION = 'config_collection';
|
||||
const DATA_PARSER = 'data_parser';
|
||||
|
||||
// Config services
|
||||
const I18N_CONFIG = 'i18n_config';
|
||||
const I18N_ADMIN_CONFIG = 'i18n_admin_config';
|
||||
const LEGACY_CONFIG = 'legacy_config';
|
||||
const LEGACY_MULTI_CONFIG = 'legacy_multi_config';
|
||||
const MULTIFILE_CONFIG = 'multifile_config';
|
||||
const BLOCK_EDITOR_CONFIG = 'block_editor_config';
|
||||
const GLOBAL_CONFIG = 'global_config';
|
||||
|
||||
/**
|
||||
* Array mapping config class names to their container ID.
|
||||
*
|
||||
* @since 2.6
|
||||
*
|
||||
* @var string[]
|
||||
*/
|
||||
protected $configs = array(
|
||||
self::I18N_CONFIG => GF_Config_I18n::class,
|
||||
self::I18N_ADMIN_CONFIG => GF_Config_Admin_I18n::class,
|
||||
self::LEGACY_CONFIG => GF_Config_Legacy_Check::class,
|
||||
self::LEGACY_MULTI_CONFIG => GF_Config_Legacy_Check_Multi::class,
|
||||
self::MULTIFILE_CONFIG => GF_Config_Multifile::class,
|
||||
self::BLOCK_EDITOR_CONFIG => GF_Config_Block_Editor::class,
|
||||
);
|
||||
|
||||
/**
|
||||
* Register services to the container.
|
||||
*
|
||||
* @since 2.6
|
||||
*
|
||||
* @param GF_Service_Container $container
|
||||
*/
|
||||
public function register( GF_Service_Container $container ) {
|
||||
|
||||
// Include required files.
|
||||
require_once( plugin_dir_path( __FILE__ ) . 'class-gf-config-collection.php' );
|
||||
require_once( plugin_dir_path( __FILE__ ) . 'class-gf-config.php' );
|
||||
require_once( plugin_dir_path( __FILE__ ) . 'class-gf-config-data-parser.php' );
|
||||
require_once( plugin_dir_path( __FILE__ ) . 'class-gf-app-config.php' );
|
||||
require_once( plugin_dir_path( __FILE__ ) . 'items/class-gf-config-global.php' );
|
||||
|
||||
// Add to container
|
||||
$container->add( self::CONFIG_COLLECTION, function () {
|
||||
return new GF_Config_Collection();
|
||||
} );
|
||||
|
||||
$container->add( self::DATA_PARSER, function () {
|
||||
return new GF_Config_Data_Parser();
|
||||
} );
|
||||
|
||||
$container->add( self::GLOBAL_CONFIG, function () {
|
||||
return new GF_Config_Global();
|
||||
} );
|
||||
|
||||
// Add configs to container.
|
||||
$this->register_config_items( $container );
|
||||
$this->register_configs_to_collection( $container );
|
||||
}
|
||||
|
||||
/**
|
||||
* Initiailize any actions or hooks.
|
||||
*
|
||||
* @since 2.6
|
||||
*
|
||||
* @param GF_Service_Container $container
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function init( GF_Service_Container $container ) {
|
||||
|
||||
// Need to pass $this to callbacks; save as variable.
|
||||
$self = $this;
|
||||
|
||||
add_action( 'wp_enqueue_scripts', function () use ( $container ) {
|
||||
$container->get( self::CONFIG_COLLECTION )->handle();
|
||||
}, 9999 );
|
||||
|
||||
add_action( 'admin_enqueue_scripts', function () use ( $container ) {
|
||||
$container->get( self::CONFIG_COLLECTION )->handle();
|
||||
}, 9999 );
|
||||
|
||||
add_action( 'gform_preview_init', function () use ( $container ) {
|
||||
$container->get( self::CONFIG_COLLECTION )->handle();
|
||||
}, 0 );
|
||||
|
||||
add_action( 'rest_api_init', function () use ( $container, $self ) {
|
||||
register_rest_route( 'gravityforms/v2', '/tests/mock-data', array(
|
||||
'methods' => 'GET',
|
||||
'callback' => array( $self, 'config_mocks_endpoint' ),
|
||||
'permission_callback' => function () {
|
||||
return true;
|
||||
},
|
||||
) );
|
||||
} );
|
||||
|
||||
// Add global config data to admin and theme.
|
||||
add_filter( 'gform_localized_script_data_gform_admin_config', function ( $data ) use ( $self ) {
|
||||
return $self->add_global_config_data( $data );
|
||||
} );
|
||||
|
||||
add_filter( 'gform_localized_script_data_gform_theme_config', function ( $data ) use ( $self ) {
|
||||
return $self->add_global_config_data( $data );
|
||||
} );
|
||||
}
|
||||
|
||||
/**
|
||||
* For each config defined in $configs, instantiate and add to container.
|
||||
*
|
||||
* @since 2.6
|
||||
*
|
||||
* @param GF_Service_Container $container
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function register_config_items( GF_Service_Container $container ) {
|
||||
require_once( plugin_dir_path( __FILE__ ) . '/items/class-gf-config-i18n.php' );
|
||||
require_once( plugin_dir_path( __FILE__ ) . '/items/class-gf-config-admin-i18n.php' );
|
||||
require_once( plugin_dir_path( __FILE__ ) . '/items/class-gf-config-legacy-check.php' );
|
||||
require_once( plugin_dir_path( __FILE__ ) . '/items/class-gf-config-legacy-check-multi.php' );
|
||||
require_once( plugin_dir_path( __FILE__ ) . '/items/class-gf-config-multifile.php' );
|
||||
require_once( plugin_dir_path( __FILE__ ) . '/items/class-gf-config-block-editor.php' );
|
||||
|
||||
$parser = $container->get( self::DATA_PARSER );
|
||||
|
||||
foreach ( $this->configs as $name => $class ) {
|
||||
$container->add( $name, function () use ( $class, $parser ) {
|
||||
return new $class( $parser );
|
||||
} );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Register each config defined in $configs to the GF_Config_Collection.
|
||||
*
|
||||
* @since 2.6
|
||||
*
|
||||
* @param GF_Service_Container $container
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register_configs_to_collection( GF_Service_Container $container ) {
|
||||
$collection = $container->get( self::CONFIG_COLLECTION );
|
||||
|
||||
foreach ( $this->configs as $name => $config ) {
|
||||
$config_class = $container->get( $name );
|
||||
$collection->add_config( $config_class );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback for the Config Mocks REST endpoint.
|
||||
*
|
||||
* @since 2.6
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function config_mocks_endpoint() {
|
||||
define( 'GFORMS_DOING_MOCK', true );
|
||||
$container = \GFForms::get_service_container();
|
||||
$data = $container->get( self::CONFIG_COLLECTION )->handle( false );
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add global data to both admin and theme configs so that it is available everywhere
|
||||
* within the system.
|
||||
*
|
||||
* @since 2.7
|
||||
*
|
||||
* @param $data
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function add_global_config_data( $data ) {
|
||||
$container = \GFForms::get_service_container();
|
||||
$global = $container->get( self::GLOBAL_CONFIG )->data();
|
||||
|
||||
return array_merge( $data, $global );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user