Files
medicalalert-web-reloaded/wp/wp-content/plugins/gravityforms/includes/theme-layers/class-gf-theme-layers-provider.php
2024-06-17 14:42:23 -04:00

172 lines
5.7 KiB
PHP

<?php
namespace Gravity_Forms\Gravity_Forms\Theme_Layers;
use \GFAddOn;
use Gravity_Forms\Gravity_Forms\GF_Service_Container;
use Gravity_Forms\Gravity_Forms\GF_Service_Provider;
use Gravity_Forms\Gravity_Forms\Theme_Layers\API\Fluent\Theme_Layer_Builder;
use Gravity_Forms\Gravity_Forms\Theme_Layers\Framework\Factories\Definition_Engine_Factory;
use Gravity_Forms\Gravity_Forms\Theme_Layers\Framework\Factories\Output_Engine_Factory;
use Gravity_Forms\Gravity_Forms\Theme_Layers\Assets\Scripts;
use Gravity_Forms\Gravity_Forms\Theme_Layers\Assets\Styles;
use Gravity_Forms\Gravity_Forms\Theme_Layers\Framework\GF_Theme_Layer;
/**
* Class GF_Theme_Layers_Provider
*
* Service provider for the Style Layers.
*
* @since 2.7
*
* @package Gravity_Forms\Gravity_Forms\Theme_Layers;
*/
class GF_Theme_Layers_Provider extends GF_Service_Provider {
// Global services
const THEME_LAYERS = 'theme_layers';
const DEFINITION_ENGINE_FACTORY = 'definition_engine_factory';
const OUTPUT_ENGINE_FACTORY = 'output_engine_factory';
// Definition Engines
const SETTINGS_DEFINITION_ENGINE = 'settings_definition_engine';
const BLOCK_SETTINGS_DEFINITION_ENGINE = 'block_settings_definition_engine';
// Output Engines
const MARKUP_OUTPUT_ENGINE = 'markup_output_engine';
const FORM_CSS_PROPERTIES_OUTPUT_ENGINE = 'form_css_properties_output_engine';
const ASSET_ENQUEUE_OUTPUT_ENGINE = 'asset_enqueue_output_engine';
protected $plugin_path;
protected $namespace;
public function __construct( $plugin_path, $namespace ) {
$this->plugin_path = $plugin_path;
$this->namespace = $namespace;
}
/**
* Register services to the container.
*
* @since 2.7
*
* @param GF_Service_Container $container
*/
public function register( GF_Service_Container $container ) {
$pp = $this->plugin_path;
$ns = $this->namespace;
$this->require_deps();
$container->add( self::DEFINITION_ENGINE_FACTORY, function () {
return new Definition_Engine_Factory();
} );
$container->add( self::OUTPUT_ENGINE_FACTORY, function () use ( $ns ) {
return new Output_Engine_Factory( $ns );
} );
$container->add( self::THEME_LAYERS, function () use ( $container ) {
return function () {
$layers = array();
return apply_filters( 'gform_registered_theme_layers', $layers );
};
} );
}
/**
* Require the dependencies.
*
* @since 2.7
*
* @return void
*/
protected function require_deps() {
// Framework
require_once( dirname( __FILE__ ) . '/framework/class-gf-theme-layer.php' );
require_once( dirname( __FILE__ ) . '/framework/traits/trait-has-settings-fields.php' );
require_once( dirname( __FILE__ ) . '/framework/traits/trait-has-block-settings.php' );
require_once( dirname( __FILE__ ) . '/framework/traits/trait-modifies-markup.php' );
require_once( dirname( __FILE__ ) . '/framework/traits/trait-outputs-form-css-properties.php' );
require_once( dirname( __FILE__ ) . '/framework/traits/trait-enqueues-assets.php' );
require_once( dirname( __FILE__ ) . '/framework/factories/class-definition-engine-factory.php' );
require_once( dirname( __FILE__ ) . '/framework/factories/class-output-engine-factory.php' );
require_once( dirname( __FILE__ ) . '/framework/engines/definition-engines/class-definition-engine.php' );
require_once( dirname( __FILE__ ) . '/framework/engines/definition-engines/class-settings-definition-engine.php' );
require_once( dirname( __FILE__ ) . '/framework/engines/definition-engines/class-block-settings-definition-engine.php' );
require_once( dirname( __FILE__ ) . '/framework/engines/output-engines/class-output-engine.php' );
require_once( dirname( __FILE__ ) . '/framework/engines/output-engines/class-php-markup-output-engine.php' );
require_once( dirname( __FILE__ ) . '/framework/engines/output-engines/class-form-css-properties-output-engine.php' );
require_once( dirname( __FILE__ ) . '/framework/engines/output-engines/class-asset-enqueue-output-engine.php' );
// API
require_once( dirname( __FILE__ ) . '/api/json/functions.php' );
require_once( dirname( __FILE__ ) . '/api/views/class-view.php' );
require_once( dirname( __FILE__ ) . '/api/class-gf-all-access-theme-layer.php' );
require_once( dirname( __FILE__ ) . '/api/fluent/layers/class-fluent-theme-layer.php' );
require_once( dirname( __FILE__ ) . '/api/json/rules/class-gf-theme-layer-rule.php' );
require_once( dirname( __FILE__ ) . '/api/json/layers/class-json-theme-layer.php' );
require_once( dirname( __FILE__ ) . '/api/fluent/class-theme-layer-builder.php' );
// Addon
require_once( dirname( __FILE__ ) . '/class-gf-theme-layers.php' );
}
/**
* Initialize any actions or hooks.
*
* @since 2.7
*
* @param GF_Service_Container $container
*
* @return void
*/
public function init( GF_Service_Container $container ) {
add_action( 'gform_loaded', function () {
GFAddOn::register( GF_Theme_Layers::class );
} );
$this->output_settings( $container );
}
/**
* Add a filter to output our settings when they exist.
*
* @since 2.7
*
* @param GF_Service_Container $container
*
* @return void
*/
public function output_settings( GF_Service_Container $container ) {
add_filter( 'gform_addon_form_settings_fields', function ( $sections, $form ) use ( $container ) {
/**
* @var GF_Theme_Layer[]
*/
$style_layers = $container->get( self::THEME_LAYERS );
$layer_name = rgget( 'theme_layer' );
foreach ( $style_layers as $layer ) {
/**
* @var GF_Theme_Layer $layer
*/
if ( $layer->name() !== $layer_name ) {
continue;
}
if ( empty( $layer->get_definitions()['settings'] ) ) {
continue;
}
return $layer->get_definitions()['settings'];
}
return $sections;
}, 0, 2 );
}
}