20 const ID =
'gk_settings';
62 $this->_capability = apply_filters(
'gk/foundation/settings/capability', $this->_capability );
75 if ( ! self::$_instance ) {
76 self::$_instance =
new self();
79 return self::$_instance;
90 if ( did_action(
'gk/foundation/settings/initialized' ) || is_network_admin() ) {
94 add_action(
'admin_enqueue_scripts', [ $this,
'enqueue_assets' ] );
96 add_filter(
'gk/foundation/ajax/' . self::AJAX_ROUTER .
'/routes', [ $this,
'configure_ajax_routes' ] );
107 do_action(
'gk/foundation/settings/initialized', $this );
122 return array_merge( $routes, [
123 'save_settings' => [ $this,
'save_ui_settings' ],
137 $site_id = $site_id ?: get_current_blog_id();
139 if ( ! isset( $this->_settings_data[ $site_id ] ) ) {
140 $this->_settings_data[ $site_id ] = is_multisite() ? get_blog_option( $site_id, self::ID, [] ) : get_option( self::ID, [] );
143 if ( doing_action(
'gk/foundation/settings/data/plugins' ) ) {
145 return $this->_settings_data[ $site_id ];
151 foreach ( $plugins_settings as $plugin_id => $plugin_settings ) {
152 if ( ! isset( $this->_settings_data[ $site_id ][ $plugin_id ] ) ) {
155 $this->_settings_data[ $site_id ][ $plugin_id ] = wp_parse_args( $this->_settings_data[ $site_id ][ $plugin_id ], $this->
get_default_settings( $plugin_id ) );
159 return $this->_settings_data[ $site_id ];
170 $plugins_settings_data = apply_filters(
'gk/foundation/settings/data/plugins', [] );
172 if ( ! is_array( $plugins_settings_data ) ) {
174 LoggerFramework::get_instance()->error(
'Invalid settings data. Expected array, got ' . print_r( $plugins_settings_data,
true ) );
186 return array_filter( $plugins_settings_data );
202 if ( empty( $plugins_data ) ) {
206 if ( ! $plugin_id ) {
207 return array_map(
function ( $plugin_data ) {
208 return Arr::get( $plugin_data,
'defaults', [] );
212 return Arr::get( $plugins_data,
"{$plugin_id}.defaults", [] );
226 $site_id = $site_id ?: get_current_blog_id();
228 $this->_settings_data[ $site_id ] =
$settings;
230 return is_multisite() ? update_blog_option( $site_id, self::ID, $settings ) : update_option( self::ID, $settings );
245 public function get_plugin_setting( $plugin, $plugin_setting_name, $default = null, $site_id = null ) {
246 $site_id = $site_id ?: get_current_blog_id();
250 if ( array_key_exists( $plugin_setting_name, $plugin_settings ) ) {
251 return $plugin_settings[ $plugin_setting_name ];
255 if ( is_array( $default ) && array_key_exists( $plugin_setting_name, $default ) ) {
256 return $default[ $plugin_setting_name ];
274 public function save_plugin_setting( $plugin, $plugin_setting_name, $plugin_setting_value, $site_id = null ) {
275 $site_id = $site_id ?: get_current_blog_id();
279 $plugin_settings[ $plugin_setting_name ] = $plugin_setting_value;
295 $site_id = $site_id ?: get_current_blog_id();
314 $site_id = $site_id ?: get_current_blog_id();
318 $settings_data[ $plugin ] = ! empty( $settings_data[ $plugin ] ) ? $settings_data[ $plugin ] : [];
320 $settings_data[ $plugin ] = array_merge( $settings_data[ $plugin ], $plugin_settings );
329 $settings_data[ $plugin ] = apply_filters(
"gk/foundation/settings/${plugin}/save/before", $settings_data[ $plugin ] );
342 $page_title = $menu_title = esc_html__(
'Settings',
'gk-gravityview' );
345 'page_title' => $page_title,
346 'menu_title' => $menu_title,
347 'capability' => $this->_capability,
349 'callback' =>
'__return_false',
364 return add_query_arg( [
367 ], admin_url(
'admin.php' ) );
382 foreach (
Arr::pluck( $plugins_data,
'id' ) as $plugin_id ) {
383 add_filter(
"gk/foundation/settings/${plugin_id}/settings-url",
function () use ( $plugin_id ) {
388 ksort( $plugins_data );
390 if ( empty( $plugins_data ) ) {
394 LoggerFramework::get_instance()->warning(
'There are no plugins with settings to display.' );
399 if ( strpos( $page, self::ID ) ===
false ) {
403 $script =
'settings.js';
404 $style =
'settings.css';
406 if ( ! file_exists( CoreHelpers::get_assets_path( $script ) ) || ! file_exists( CoreHelpers::get_assets_path( $style ) ) ) {
407 LoggerFramework::get_instance()->warning(
'UI assets not found.' );
419 $config = apply_filters(
'gk/foundation/settings/data/config', [] );
421 $script_data = array_merge(
424 'plugins' => array_values( $plugins_data ),
426 FoundationCore::get_ajax_params( self::AJAX_ROUTER )
431 CoreHelpers::get_assets_url( $script ),
432 [
'wp-hooks',
'wp-i18n' ],
433 filemtime( CoreHelpers::get_assets_path( $script ) )
439 [
'data' => $script_data ]
444 CoreHelpers::get_assets_url( $style ),
446 filemtime( CoreHelpers::get_assets_path( $style ) )
450 wp_deregister_style(
'forms' );
451 wp_register_style(
'forms',
false );
454 $registered_plugins = FoundationCore::get_instance()->get_registered_plugins();
455 $foundation_source_plugin_data = CoreHelpers::get_plugin_data( $registered_plugins[
'foundation_source'] );
456 TranslationsFramework::get_instance()->load_frontend_translations( $foundation_source_plugin_data[
'TextDomain'],
'',
'gk-foundation' );
471 $plugin_id = ! empty( $settings_data[
'plugin'] ) ? $settings_data[
'plugin'] : null;
472 $ui_settings = ! empty( $settings_data[
'settings'] ) ? $settings_data[
'settings'] : null;
474 if ( ! $plugin_id || ! $ui_settings ) {
475 throw new Exception( esc_html__(
'Invalid request.',
'gk-gravityview' ) );
483 foreach ( $plugins_data as $settings_data ) {
484 if ( empty( $settings_data ) ) {
488 if ( $plugin_id === $settings_data[
'id'] ) {
489 $plugin_data = $settings_data;
495 if ( empty( $plugin_data[
'sections'] ) ) {
496 throw new ValidatorException( esc_html__(
'Plugin settings data not found.',
'gk-gravityview' ) );
499 foreach ( $ui_settings as $id =>
$value ) {
500 $ui_settings[
'id'] = sanitize_text_field(
$value );
503 $plugin_settings = [];
505 foreach ( $plugin_data[
'sections'] as $section ) {
506 if ( empty( $section[
'settings'] ) ) {
510 foreach ( $section[
'settings'] as $plugin_setting ) {
512 if ( ! empty( $plugin_setting[
'html'] ) || ! empty( $plugin_setting[
'excludeFromSave'] ) ) {
513 unset( $ui_settings[ $plugin_setting[
'id'] ] );
519 if ( ! empty( $plugin_setting[
'requires'] ) && is_array( $plugin_setting[
'requires'] ) && ! $this->
are_setting_requirements_met( $plugin_setting, $ui_settings ) ) {
521 if ( ! isset( $ui_settings[ $plugin_setting[
'id'] ] ) ) {
527 esc_html_x(
'Setting [setting] has unmet requirements.',
'Placeholders inside [] are not to be translated.',
'gk-gravityview' ),
528 [
'[setting]' => $plugin_setting[
'title'] ]
533 $plugin_settings[ $plugin_setting[
'id'] ] = $plugin_setting;
538 foreach ( $ui_settings as $id =>
$value ) {
539 if ( ! isset( $plugin_settings[ $id ] ) ) {
540 unset( $ui_settings[ $id ] );
551 $ui_settings = apply_filters(
"gk/foundation/settings/${plugin_id}/validation/before", $ui_settings );
553 $this->_validator->validate( $plugin_id, $plugin_settings, $ui_settings );
562 $ui_settings = apply_filters(
"gk/foundation/settings/${plugin_id}/validation/after", $ui_settings );
566 return esc_html__(
'Settings were successfully saved.',
'gk-gravityview' );
568 throw new Exception( sprintf(
'%s %s', esc_html__(
'Error saving settings.',
'gk-gravityview' ), $e->getMessage() ) );
583 $requirements = is_array( array_values( $plugin_setting[
'requires'] )[0] ) ? $plugin_setting[
'requires'] : [ $plugin_setting[
'requires'] ];
585 foreach ( $requirements as $requirement ) {
586 $required_value = $requirement[
'value'];
587 $setting_value = isset(
$settings[ $requirement[
'id'] ] ) ?
$settings[ $requirement[
'id'] ] : null;
588 $operator = $requirement[
'operator'];
get_plugin_setting( $plugin, $plugin_setting_name, $default=null, $site_id=null)
Gets a single setting for a GravityKit plugin.
save_all_settings(array $settings, $site_id=null)
Saves settings for all GravityKit plugins.
static compare_values( $first, $second, $op)
Compares 2 values using an operator.
static get( $array, $key, $default=null)
{}
save_ui_settings(array $settings_data)
Saves UI settings.
add_gk_submenu_item()
Adds Settings submenu to the GravityKit top-level admin menu.
get_plugins_settings_data()
Returns settings data object for all plugins.
static pluck( $array, $value, $key=null)
{}
get_plugin_settings( $plugin, $site_id=null)
Get all settings for a GravityKit plugin.
configure_ajax_routes(array $routes)
Configures AJAX routes handled by this class.
enqueue_assets( $page)
Enqueues UI assets.
static get_instance()
Returns class instance.
are_setting_requirements_met( $plugin_setting, $settings)
Determines if a setting's requirements are met based on the value(s) of other setting(s).
get_plugin_settings_url( $plugin_id)
Returns link to the plugin settings page.
save_plugin_setting( $plugin, $plugin_setting_name, $plugin_setting_value, $site_id=null)
Saves a single setting for a GravityKit plugin.
init()
Initializes Settings framework.
get_default_settings( $plugin_id=null)
Returns default settings for a plugin all plugins.
get_all_settings( $site_id=null)
Gets settings for all GravityKit plugins.
Logging framework for GravityKit.
save_plugin_settings( $plugin, array $plugin_settings, $site_id=null)
Saves all settings for a GravityKit plugin.