is_enabled( $tab_slug ) ) { return; } /** Render title. */ $this->render_title( $tab_slug ); /** Render fields. */ $this->do_settings_base( $tab_slug ); } /** * Generate General Tab. * * @since 1.0.0 * @access public * * @param string $tab_slug - Slug of current tab. * * @return void **/ public function add_settings( $tab_slug ) { /** Custom General Tab. */ $this->add_settings_base( $tab_slug ); $group = 'AdUnlocker' . $tab_slug . 'OptionsGroup'; $section = 'pp_AdUnlocker_' . $tab_slug . '_page_status_section'; /** Exit if no fields to process. */ if ( empty( Plugin::get_tabs()[$tab_slug]['fields'] ) ) { return; } $fields = Plugin::get_tabs()[$tab_slug]['fields']; /** Create settings for each field. */ foreach ( $fields as $key => $field ) { /** Prepare field label. */ $label = isset( $field[ 'label' ] ) && ! empty( $field[ 'label' ] ) ? $field[ 'label' ] : ''; /** Hide label for header fields. */ if ( 'header' === $field['type'] ) { $label = ''; } /** Create field. */ add_settings_field( $key, $label, [ $this, 'create_field' ], $group, $section, [ 'key' => $key, 'type' => $field[ 'type' ], 'tab_slug' => $tab_slug ] ); } } /** * Render Settings field. * * @param array $args - Array of params for render: field key and type. * * @since 1.0.0 * @access public * * @return void **/ public function create_field( $args = [] ) { /** Do we have custom handler for this field type? */ $handler = $this->get_field_handler( $args ); if ( is_array( $handler ) && is_callable( $handler ) ) { /** Call custom render for field. */ $handler( $args[ 'key' ], $args[ 'tab_slug' ] ); return; } /** In field haven't custom render check maybe we have standard handler for this field type? */ if ( ! is_callable( [ $this, 'render_' . $args[ 'type' ] ] ) ) { ?>
{'render_' . $args[ 'type' ]}( $args['key'], $args['tab_slug'] ); } /** * Return custom handler for field or false. * * @param array $args - Array of params for render: field key and type. * * @since 1.0.0 * @access public * * @return array|false **/ private function get_field_handler( $args ) { /** Get field. */ $tabs = Plugin::get_tabs(); $tab = $tabs[ $args[ 'tab_slug' ] ]; $fields = $tab[ 'fields' ]; $field = $fields[ $args[ 'key' ] ]; if ( ! empty( $field[ 'render' ] ) ) { return $field[ 'render' ]; } return false; } /** * Render Divider field. * * @param string $key - Field key. * @param string $tab_slug - Tab slug to which the field belongs. * * @since 1.0.0 * @access public * * @return void **/ public function render_divider( $key, $tab_slug ) { ?>
prepare_general_params( $tab_slug, $key ); /** Render WP Editor. */ wp_editor( Settings::get_instance()->options[$key], $attr['id'], [ 'textarea_rows' => $attr['textarea_rows'], 'textarea_name' => $attr['name'] ] ); if ( $description ) { ?>
prepare_general_params( $tab_slug, $key ); if ( empty( $field[ 'placeholder' ] ) ) { $label = ''; } /** Render Icon. */ UI::get_instance()->render_icon( Settings::get_instance()->options[$key], $label, $description, $attr, $field['meta'] ); } /** * Render Colorpicker field. * * @param string $key - Field key. * @param string $tab_slug - Tab slug to which the field belongs. * * @since 1.0.0 * @access public * * @return void **/ public function render_colorpicker( $key, $tab_slug ) { /** Prepare general field params. */ list( $field, $label, $description, $attr ) = $this->prepare_general_params( $tab_slug, $key ); /** Render colorpicker. */ UI::get_instance()->render_colorpicker( Settings::get_instance()->options[$key], $label, $description, $attr ); } /** * Render Textarea field. * * @param string $key - Field key. * @param string $tab_slug - Tab slug to which the field belongs. * * @since 1.0.0 * @access public * * @return void **/ public function render_textarea( $key, $tab_slug ) { /** Prepare general field params. */ list( $field, $label, $description, $attr ) = $this->prepare_general_params( $tab_slug, $key ); /** Render Textarea. */ UI::get_instance()->render_textarea( Settings::get_instance()->options[$key], $label, $description, $attr ); } /** * Render Button field. * * @param string $key - Field key. * @param string $tab_slug - Tab slug to which the field belongs. * * @since 1.0.0 * @access public * * @return void **/ public function render_button( $key, $tab_slug ) { /** Prepare general field params. */ list( $field, $label, $description, $attr ) = $this->prepare_general_params( $tab_slug, $key ); UI::get_instance()->render_button( $label, $description, $field['icon'], $attr ); } /** * Render Header field. * * @param string $key - Field key. * @param string $tab_slug - Tab slug to which the field belongs. * * @since 1.0.0 * @access public * * @return void **/ public function render_header( $key, $tab_slug ) { /** Prepare general field params. */ list( $field, $label, $description, $attr ) = $this->prepare_general_params( $tab_slug, $key ); /** Render Header. */ UI::get_instance()->render_header( $label, $description, 'h5' ); } /** * Render Slider field. * * @param string $key - Field key. * @param string $tab_slug - Tab slug to which the field belongs. * * @since 1.0.0 * @access public * * @return void **/ public function render_slider( $key, $tab_slug ) { /** Prepare general field params. */ list( $field, $label, $description, $attr ) = $this->prepare_general_params( $tab_slug, $key ); /** Render slider. */ UI::get_instance()->render_slider( Settings::get_instance()->options[$key], $field['min'], $field['max'], $field['step'], $label, $description, $attr, $field['discrete'] ); } /** * Render Switcher field. * * @param string $key - Field key. * @param string $tab_slug - Tab slug to which the field belongs. * * @since 1.0.0 * @access public * * @return void **/ public function render_switcher( $key, $tab_slug ) { /** Prepare general field params. */ list( $field, $label, $description, $attr ) = $this->prepare_general_params( $tab_slug, $key ); /** Render switcher. */ UI::get_instance()->render_switcher( Settings::get_instance()->options[$key], $label, $description, $attr ); } /** * Render Select field. * * @param string $key - Field key. * @param string $tab_slug - Tab slug to which the field belongs. * * @since 1.0.0 * @access public * * @return void **/ public function render_select( $key, $tab_slug ) { /** Prepare general field params. */ list( $field, $label, $description, $attr ) = $this->prepare_general_params( $tab_slug, $key ); /** Render select. */ UI::get_instance()->render_select( $field['options'], Settings::get_instance()->options[$key], // Selected option. $label, $description, $attr ); } /** * Render Select field with helper image. * * @param string $key - Field key. * @param string $tab_slug - Tab slug to which the field belongs. * * @since 1.0.0 * @access public * * @return void **/ public function render_select_img( $key, $tab_slug ) { /** Prepare general field params. */ list( $field, $label, $description, $attr ) = $this->prepare_general_params( $tab_slug, $key ); /** Render select. */ UI::get_instance()->render_select_img( $field['options'], Settings::get_instance()->options[$key], // Selected option. $label, $description, $attr ); } /** * Render Text field. * * @param string $key - Field key. * @param string $tab_slug - Tab slug to which the field belongs. * * @since 1.0.0 * @access public * * @return void **/ public function render_text( $key, $tab_slug ) { /** Prepare general field params. */ list( $field, $label, $description, $attr ) = $this->prepare_general_params( $tab_slug, $key ); /** Render input. */ UI::get_instance()->render_input( Settings::get_instance()->options[$key], $label, $description, $attr ); } /** * Prepare general field params. * * @param $tab_slug * @param $key * * @return array **/ public function prepare_general_params( $tab_slug, $key ) { /** Get field settings. */ $field = Plugin::get_tabs()[ $tab_slug ][ 'fields' ][ $key ]; /** Prepare label, description and attributes. */ if ( isset( $field[ 'placeholder' ] ) && ! empty( $field[ 'placeholder' ] ) ) { $label = $field[ 'placeholder' ]; } else { $label = isset( $field[ 'label' ] ) && ! empty( $field[ 'label' ] ) ? $field[ 'label' ] : ''; } $description = ! empty( $field[ 'description' ] ) ? $field[ 'description' ] : ''; $attr = $this->prepare_attr( $key, $tab_slug, $field ); return [ $field, $label, $description, $attr ]; } /** * Prepare array with attributes. * * @param string $key - Field key. * @param string $tab_slug - Tab slug to which the field belongs. * @param array $field * * @since 1.0.0 * @access private * * @return array **/ private function prepare_attr( $key, $tab_slug, $field ) { $name = 'pp_AdUnlocker_' . $tab_slug . '_settings'; $attr = [ 'name' => $name . '[' . $key . ']', 'id' => $name . '_' . $key, ]; if ( ! empty( $field['attr'] ) ) { $attr = array_merge( $attr, $field['attr'] ); } return $attr; } /** * Render Chosen field. * * @param string $key - Field key. * @param string $tab_slug - Tab slug to which the field belongs. * * @since 1.0.0 * @access public * * @return void **/ public function render_chosen( $key, $tab_slug ) { /** Prepare general field params. */ list( $field, $label, $description, $attr ) = $this->prepare_general_params( $tab_slug, $key ); /** Render select. */ UI::get_instance()->render_chosen( $field['options'], Settings::get_instance()->options[$key], // Selected options. $description, $attr ); } /** * Render Custom Post Types with chosen. * * @param string $key - Field key. * @param string $tab_slug - Tab slug to which the field belongs. * * @since 1.0.0 * @access public * * @return void **/ public function render_cpt( $key, $tab_slug ) { /** Prepare general field params. */ list( $field, $label, $description, $attr ) = $this->prepare_general_params( $tab_slug, $key ); /** Render select. */ UI::get_instance()->render_chosen( $this->get_cpt_list(), Settings::get_instance()->options[$key], // Selected options. $description, $attr ); } /** * Render Layout field. * * @param string $key - Field key. * @param string $tab_slug - Tab slug to which the field belongs. * * @since 1.0.0 * @access public * * @return void **/ public function render_layout( $key, $tab_slug ) { /** Prepare general field params. */ list( $field, $label, $description, $attr ) = $this->prepare_general_params( $tab_slug, $key ); /** Render layouts. */ UI::get_instance()->render_layouts( $field['options'], Settings::get_instance()->options[$key], // Selected option. $label, $description, $attr ); } /** * Return list of Custom Post Types. * * @since 1.0.0 * @access private * * @return array **/ private function get_cpt_list() { /** All available post types. */ return Helper::get_instance()->get_cpt( [ 'exclude' => [ 'attachment', 'elementor_library' ] ] ); } /** * Main TabGeneral Instance. * Insures that only one instance of TabGeneral exists in memory at any one time. * * @static * @return TabGeneral **/ public static function get_instance() { if ( ! isset( self::$instance ) && ! ( self::$instance instanceof self ) ) { self::$instance = new self; } return self::$instance; } }