plugin_path . 'vendors/class-settings-api.php'; /** * Mind Settings Class */ class Mind_Settings { /** * Settings API instance * * @var object */ public static $settings_api; /** * Cached settings fields. We call settings fields method a lot of times to get default values. * So, for performance reasons we need to cache the output. * * @var object */ public static $cached_settings_fields; /** * Mind_Settings constructor. */ public function __construct() { self::init_actions(); } /** * Get Option Value * * @param string $option - option name. * @param string $section - section name. * @param string $deprecated_default - default option value. * * @return bool|string */ public static function get_option( $option, $section, $deprecated_default = '' ) { $options = get_option( $section ); $result = ''; if ( isset( $options[ $option ] ) ) { $result = $options[ $option ]; } else { // find default. $fields = self::get_settings_fields(); if ( isset( $fields[ $section ] ) && is_array( $fields[ $section ] ) ) { foreach ( $fields[ $section ] as $field_data ) { if ( $option === $field_data['name'] && isset( $field_data['default'] ) ) { $result = $field_data['default']; } } } } return 'off' === $result ? false : ( 'on' === $result ? true : $result ); } /** * Update Option Value * * @param string $option - option name. * @param string $section - section name. * @param string $value - new option value. */ public static function update_option( $option, $section, $value ) { $options = get_option( $section ); if ( ! is_array( $options ) ) { $options = array(); } $options[ $option ] = $value; update_option( $section, $options ); } /** * Init actions */ public static function init_actions() { self::$settings_api = new Mind_Settings_API(); add_action( 'admin_init', array( __CLASS__, 'admin_init' ) ); } /** * Initialize the settings * * @return void */ public static function admin_init() { // set the settings. self::$settings_api->set_sections( self::get_settings_sections() ); self::$settings_api->set_fields( self::get_settings_fields() ); // initialize settings. self::$settings_api->admin_init(); } /** * Plugin settings sections * * @return array */ public static function get_settings_sections() { $sections = array( array( 'id' => 'mind_general', 'title' => esc_html__( 'General', 'mind' ), 'icon' => '', ), ); return apply_filters( 'mind_settings_sections', $sections ); } /** * Returns all the settings fields * * @return array settings fields */ public static function get_settings_fields() { if ( ! empty( self::$cached_settings_fields ) ) { return self::$cached_settings_fields; } // retrieve openai key from the DB. // we can't use Mind Settings API as it will result a stack trace error. $openai_key = false; $general_settings = get_option( 'mind_general' ); if ( isset( $general_settings['openai_key'] ) ) { $openai_key = $general_settings['openai_key']; } $settings_fields = array( 'mind_general' => array( array( 'name' => 'openai_key', 'label' => esc_html__( 'OpenAI API Key', 'mind' ), 'desc' => esc_html__( 'This setting is required, since our plugin works with OpenAI.', 'mind' ) . ' Create API key', 'type' => $openai_key ? 'password' : 'text', 'default' => '', ), ), ); self::$cached_settings_fields = apply_filters( 'mind_settings_fields', $settings_fields ); return self::$cached_settings_fields; } /** * The plugin page handler * * @return void */ public static function print_settings_page() { self::$settings_api->admin_enqueue_scripts(); echo '