HEX
Server: Apache
System: Linux webm006.cluster111.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User: perditaeyz (838589)
PHP: 7.3.33
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/p/e/r/perditaeyz/www/wp-content/plugins/better-wp-security/core/lib/settings.php
<?php

use iThemesSecurity\User_Groups;

abstract class ITSEC_Settings {
	protected $settings;

	public function __construct() {
		$this->load();

		add_action( 'itsec-lib-clear-caches', array( $this, 'load' ), 0 );
	}

	abstract public function get_id();
	abstract public function get_defaults();
	protected function after_save() {}

	protected function handle_settings_changes( $old_settings ) {
		$user_group_settings = ITSEC_Modules::get_container()->get( User_Groups\Settings_Registry::class );

		foreach ( $user_group_settings->get_settings() as $user_group_setting ) {
			if ( $user_group_setting->get_module() !== $this->get_id() ) {
				continue;
			}

			$current = ITSEC_Lib::array_get( $this->settings, $user_group_setting->get_setting() );
			$previous = ITSEC_Lib::array_get( $old_settings, $user_group_setting->get_setting() );

			if ( $previous !== $current ) {
				ITSEC_Response::add_store_dispatch( 'ithemes-security/user-groups', 'fetchGroupsSettings' );
				break;
			}
		}
	}

	public function export() {
		return $this->settings;
	}

	public function import( $settings ) {
		$this->set_all( $settings );
	}

	public function get( $name, $default = null ) {
		if ( isset( $this->settings[$name] ) ) {
			return $this->settings[$name];
		}

		return $default;
	}

	public function get_all() {
		return $this->settings;
	}

	public function set( $name, $value ) {
		$settings = $this->settings;
		$settings[$name] = $value;

		return $this->set_all( $settings );
	}

	public function set_all( $settings ) {
		$retval = array(
			'old_settings' => $this->settings,
			'new_settings' => $this->settings,
			'errors'       => array(),
			'messages'     => array(),
			'saved'        => false,
		);

		$validator = ITSEC_Modules::get_validator( $this->get_id() );

		if ( is_null( $validator ) ) {
			$retval['errors'][] = new WP_Error( 'itsec-settings-missing-validator-for-' . $this->get_id(), sprintf( __( 'The data validator for %1$s is missing. Data for the module cannot be saved without the validator. This error could indicate a bad install of iThemes Security. Please remove the plugin and reinstall it. If this message persists, please contact support and send them this error message.', 'better-wp-security' ), $this->get_id() ) );
		} else {
			$validator->validate( $settings );

			$retval['errors'] = $validator->get_errors();
			$retval['messages'] = $validator->get_messages();

			if ( $validator->can_save() ) {
				$this->settings = $validator->get_settings();

				ITSEC_Storage::set( $this->get_id(), $this->settings );
				$this->after_save();
				$this->handle_settings_changes( $retval['old_settings'] );

				$retval['new_settings'] = $this->settings;
				$retval['saved'] = true;

				do_action( 'itsec-settings-updated', $this->get_id() );
			} else {
				ITSEC_Response::set_success( false );
			}
		}

		ITSEC_Response::add_errors( $retval['errors'] );
		ITSEC_Response::add_messages( $retval['messages'] );

		return $retval;
	}

	public function load() {
		$this->settings = ITSEC_Storage::get( $this->get_id() );
		$defaults = $this->get_defaults();

		if ( ! is_array( $this->settings ) ) {
			$this->settings = array();
		}

		$this->settings = array_merge( $defaults, $this->settings );
	}
}