%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /proc/19851/cwd/wp-content/plugins/user-registration/includes/abstracts/
Upload File :
Create Path :
Current File : //proc/19851/cwd/wp-content/plugins/user-registration/includes/abstracts/abstract-ur-form-field.php

<?php

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}

/**
 * Abstract UR_Form_Field Class
 *
 * Implemented by classes using the same CRUD(s) pattern.
 *
 * @version  2.6.0
 * @package  UserRegistration/Abstracts
 */
abstract class UR_Form_Field {

	/**
	 * ID for this object.
	 *
	 * @since 1.0.0
	 * @var int
	 */
	public $id = 0;
	/**
	 * Default fields array.
	 *
	 * @var array
	 */
	public $field_defaults = array();
	/**
	 * Admin Data Array.
	 *
	 * @var array
	 */
	public $admin_data = array();
	/**
	 * Registered fields configuration.
	 *
	 * @var array
	 */
	public $registered_fields_config = array();

	/**
	 * Form ID for this object.
	 *
	 * @since 1.0.0
	 * @var int
	 */
	protected $form_id = 0;

	/**
	 * Abstract function to get regestered admin fields.
	 */
	abstract public function get_registered_admin_fields();

	/**
	 * Get General Setting fields
	 *
	 * @param string $key Atrribute of fields.
	 */
	public function get_general_setting_data( $key ) {

		if ( isset( $this->admin_data->general_setting->$key ) ) {
			return $this->admin_data->general_setting->$key;
		}

		if ( isset( $this->field_defaults[ 'default_' . $key ] ) ) {
			return $this->field_defaults[ 'default_' . $key ];
		}

		return '';
	}

	/**
	 * Get advance setting values.
	 *
	 * @param string $key Atrribute of fields.
	 */
	public function get_advance_setting_data( $key ) {

		if ( isset( $this->admin_data->advance_setting->$key ) ) {
			return $this->admin_data->advance_setting->$key;
		}

		if ( isset( $this->field_defaults[ 'default_' . $key ] ) ) {
			return $this->field_defaults[ 'default_' . $key ];
		}

		return '';
	}

	/**
	 * Include admin template for each form fields
	 *
	 * @param  array $admin_data Admin Data.
	 */
	public function get_admin_template( $admin_data = array() ) {

		$this->admin_data = $admin_data;

		ob_start();
		$template_path       = str_replace( '_', '-', str_replace( 'user_registration_', 'admin-', $this->id ) );
		$admin_template_path = apply_filters( $this->id . '_admin_template', UR_FORM_PATH . 'views' . UR_DS . 'admin' . UR_DS . $template_path . '.php' );

		if ( file_exists( $admin_template_path ) ) {
			include $admin_template_path;
		}
		$template = ob_get_clean();

		$settings = $this->get_setting();

		$this->admin_data = array();

		return array(
			'template' => $template . $settings,
			'settings' => $settings,
		);
	}


	/**
	 * Includes any classes we need within frontend.
	 */
	public function frontend_includes( $data = array(), $form_id, $field_type, $field_key ) {

		$this->form_id        = $form_id;
		$form_data            = (array) $data['general_setting'];
		$form_data['form_id'] = $form_id;
		$form_data['type']    = $field_type;

		if ( isset( $form_data['hide_label'] ) && 'yes' === $form_data['hide_label'] ) {
			unset( $form_data['label'] );
		}

		if ( isset( $data['general_setting']->required ) ) {

			if ( in_array( $field_key, ur_get_required_fields() )
				|| 'yes' === $data['general_setting']->required ) {

				$form_data['required']                      = true;
				$form_data['custom_attributes']['required'] = 'required';
			}
		}

		if ( isset( $data['advance_setting']->size ) ) {
			$form_data['size'] = $data['advance_setting']->size;
		}

		if ( isset( $data['advance_setting']->min ) ) {
			$form_data['min'] = $data['advance_setting']->min;
		}

		if ( isset( $data['advance_setting']->max ) ) {
			$form_data['max'] = $data['advance_setting']->max;
		}

		if ( isset( $data['advance_setting']->step ) ) {
			$form_data['step'] = $data['advance_setting']->step;
		}

		if ( isset( $data['advance_setting']->default_value ) ) {
			$form_data['default'] = $data['advance_setting']->default_value;
		}

		if ( isset( $data['general_setting']->max_files ) ) {
			$form_data['max_files'] = $data['general_setting']->max_files;
		}

		if ( isset( $data['advance_setting']->max_upload_size ) ) {
			$form_data['max_upload_size'] = $data['advance_setting']->max_upload_size;
		}

		if ( isset( $data['advance_setting']->valid_file_type ) ) {
			$form_data['valid_file_type'] = $data['advance_setting']->valid_file_type;
		}

		$form_data['input_class'] = array( 'ur-frontend-field ' );

		if ( isset( $data['advance_setting']->custom_class ) ) {
			array_push( $form_data['input_class'], $data['advance_setting']->custom_class );
		}

		if ( isset( $data['advance_setting']->date_format ) ) {
			update_option( 'user_registration_' . $data['general_setting']->field_name . '_date_format', $data['advance_setting']->date_format );
			$form_data['custom_attributes']['data-date-format'] = $data['advance_setting']->date_format;
		}

		if ( isset( $data['advance_setting']->enable_min_max ) && 'true' === $data['advance_setting']->enable_min_max ) {
			if ( isset( $data['advance_setting']->min_date ) ) {
				$min_date                                        = str_replace( '/', '-', $data['advance_setting']->min_date );
				$form_data['custom_attributes']['data-min-date'] = '' !== $min_date ? date_i18n( $data['advance_setting']->date_format, strtotime( $min_date ) ) : '';
			}

			if ( isset( $data['advance_setting']->max_date ) ) {
				$max_date                                        = str_replace( '/', '-', $data['advance_setting']->max_date );
				$form_data['custom_attributes']['data-max-date'] = '' !== $max_date ? date_i18n( $data['advance_setting']->date_format, strtotime( $max_date ) ) : '';
			}
		}

		if ( isset( $data['advance_setting']->set_current_date ) ) {
			$form_data['custom_attributes']['data-default-date'] = $data['advance_setting']->set_current_date;
		}

		if ( isset( $data['advance_setting']->enable_date_range ) ) {
			$form_data['custom_attributes']['data-mode'] = $data['advance_setting']->enable_date_range;
		}

		$form_data['custom_attributes']['data-label'] = ur_string_translation( $form_id, 'user_registration_' . $data['general_setting']->field_name . '_label', $data['general_setting']->label );

		if ( isset( $form_data['label'] ) ) {
			$form_data['label'] = ur_string_translation( $form_id, 'user_registration_' . $data['general_setting']->field_name . '_label', $form_data['label'] );
		}
		if ( isset( $form_data['placeholder'] ) ) {
			$form_data['placeholder'] = ur_string_translation( $form_id, 'user_registration_' . $data['general_setting']->field_name . '_placeholder', $form_data['placeholder'] );
		}
		if ( isset( $form_data['description'] ) ) {
			$form_data['description'] = ur_string_translation( $form_id, 'user_registration_' . $data['general_setting']->field_name . '_description', $form_data['description'] );
		}

		// Filter only selected countries for `Country` fields.
		if ( 'country' === $field_key || 'billing_country' === $field_key || 'shipping_country' === $field_key ) {
			$form_data['options'] = UR_Form_Field_Country::get_instance()->get_country();
			$filtered_options     = array();
			$selected_countries   = $data['advance_setting']->selected_countries;

			if ( is_array( $selected_countries ) ) {
				foreach ( $form_data['options'] as $iso => $country_name ) {
					if ( in_array( $iso, $selected_countries, true ) ) {
						$filtered_options[ $iso ] = $country_name;
					}
				}

				$form_data['options'] = $filtered_options;
			}
		}

		/**  Redundant codes. */
		if ( 'select' === $field_key || 'select2' === $field_key || 'multi_select2' === $field_key ) {
			$option_data = isset( $data['advance_setting']->options ) ? explode( ',', $data['advance_setting']->options ) : array(); // Backward compatibility. Modified since 1.5.7.
			$option_data = isset( $data['general_setting']->options ) ? $data['general_setting']->options : $option_data;
			$options     = array();

			if ( is_array( $option_data ) ) {
				foreach ( $option_data as $index_data => $option ) {
					$options[ $option ] = ur_string_translation( $form_id, 'user_registration_' . $data['general_setting']->field_name . '_option_' . ( ++$index_data ), $option );
				}

				$form_data['options'] = $options;
			}

			if( 'multi_select2' === $field_key ){
				$form_data['choice_limit'] =  isset( $data['advance_setting']->choice_limit ) ?  $data['advance_setting']->choice_limit : "";
			}
		}

		if ( 'radio' === $field_key ) {
			$option_data = isset( $data['advance_setting']->options ) ? explode( ',', $data['advance_setting']->options ) : array(); // Backward compatibility. Modified since 1.5.7.
			$option_data = isset( $data['general_setting']->options ) ? $data['general_setting']->options : $option_data;

			$options = array();
			if ( is_array( $option_data ) ) {
				foreach ( $option_data as $index_data => $option ) {
					$options[ $option ] = ur_string_translation( $form_id, 'user_registration_' . $data['general_setting']->field_name . '_option_' . ( ++$index_data ), $option );
				}

				$form_data['options'] = $options;
			}
		}

		if ( 'checkbox' === $field_key ) {
			$choices     = isset( $data['advance_setting']->choices ) ? explode( ',', $data['advance_setting']->choices ) : array(); // Backward compatibility. Modified since 1.5.7.
			$option_data = isset( $data['general_setting']->options ) ? $data['general_setting']->options : $choices;

			$options = array();
			if ( is_array( $option_data ) ) {
				foreach ( $option_data as $index_data => $option ) {
					$options[ $option ] = ur_string_translation( $form_id, 'user_registration_' . $data['general_setting']->field_name . '_option_' . ( ++$index_data ), $option );
				}

				$form_data['options'] = $options;
			}

			$form_data['choice_limit'] =  isset( $data['advance_setting']->choice_limit ) ?  $data['advance_setting']->choice_limit : "";
		}

		if( "user_login" === $field_key ) {
			$form_data['username_length'] = isset( $data['advance_setting']->username_length ) ? $data['advance_setting']->username_length : "";

			$form_data['username_character'] = isset( $data['advance_setting']->username_character ) ? $data['advance_setting']->username_character : "";
		}
		
	

		if( 'range' === $field_key ) {
			$form_data['range_min'] =  ( isset( $data['advance_setting']->range_min) && "" !== $data['advance_setting']->range_min) ? $data['advance_setting']->range_min : "0";
			$form_data['range_max'] =  ( isset( $data['advance_setting']->range_max)  && "" !== $data['advance_setting']->range_max ) ? $data['advance_setting']->range_max : "10";
			$form_data['range_step'] =  isset( $data['advance_setting']->range_step) ? $data['advance_setting']->range_step : "";
			$enable_prefix_postfix = isset( $data['advance_setting']->enable_prefix_postfix) ? $data['advance_setting']->enable_prefix_postfix : "false";
			$enable_text_prefix_postfix = isset( $data['advance_setting']->enable_text_prefix_postfix) ? $data['advance_setting']->enable_text_prefix_postfix : "false";

			if( "true" === $enable_prefix_postfix ) {

				if( "true" === $enable_text_prefix_postfix ) {
					$form_data['range_prefix'] = isset( $data['advance_setting']->range_prefix) ? $data['advance_setting']->range_prefix : "";
					$form_data['range_postfix'] = isset( $data['advance_setting']->range_postfix) ? $data['advance_setting']->range_postfix : "";
				} else {

					$form_data['range_prefix'] = $form_data['range_min'];
					$form_data['range_postfix'] = $form_data['range_max'];
				}
			}

		}
		/** Redundant Codes End. */

		$filter_data = array(
			'form_data' => $form_data,
			'data'      => $data,
		);

		$form_data_array = apply_filters( 'user_registration_' . $field_key . '_frontend_form_data', $filter_data );

		$form_data = isset( $form_data_array['form_data'] ) ? $form_data_array['form_data'] : $form_data;

		if ( isset( $data['general_setting']->field_name ) ) {
			user_registration_form_field( $data['general_setting']->field_name, $form_data );
		}

	}

	/**
	 * Inlcude advance settings file if exists
	 */
	public function get_field_advance_settings() {

		$file_name  = str_replace( 'user_registration_', '', $this->id );
		$file_path  = UR_FORM_PATH . 'settings' . UR_DS . 'class-ur-setting-' . strtolower( $file_name ) . '.php';
		$class_name = 'UR_Setting_' . ucwords( $file_name );

		if ( ! class_exists( $class_name ) ) {
			$file_path_array = apply_filters(
				'user_registration_' . strtolower( $file_name ) . '_advance_class',
				array(

					'file_name' => strtolower( $file_name ),
					'file_path' => $file_path,
				)
			);
			$file_path       = isset( $file_path_array['file_path'] ) ? $file_path_array['file_path'] : $file_path;

			if ( file_exists( $file_path ) ) {
				include_once $file_path;
				$instance = new $class_name();
				return $instance->output( $this->admin_data );
			}
		} else {

			$instance = new $class_name();
			return $instance->output( $this->admin_data );
		}

		return '';
	}

	/**
	 * @return string
	 * @param string $id Form field name
	 */
	public function get_field_general_settings() {

		$general_settings     = ur_get_general_settings( $this->id );
		$general_setting_html = '';

		foreach ( $general_settings as $setting_key => $setting_value ) {
			$tooltip_html             = ! empty( $setting_value['tip'] ) ? ur_help_tip( $setting_value['tip'], false, 'ur-portal-tooltip' ) : '';
			$general_setting_wrapper  = '<div class="ur-general-setting ur-setting-' . $setting_value['type'] . ' ur-general-setting-' . str_replace( ' ', '-', strtolower( $setting_value['label'] ) ) . '">';
			$general_setting_wrapper .= '<label for="ur-type-' . $setting_value['type'] . '">' . $setting_value['label'] . $tooltip_html . '</label>';
			$sub_string_key           = substr( $this->id, strlen( 'user_registration_' ), 5 );
			$strip_prefix             = substr( $this->id, 18 );

			switch ( $setting_value['type'] ) {
				case 'text':
					$extra_attribute          = in_array( $strip_prefix, ur_get_fields_without_prefix() ) && 'field_name' == $setting_key ? "disabled='disabled'" : '';
					$value                    = in_array( $strip_prefix, ur_get_fields_without_prefix() ) && 'field_name' == $setting_key ? trim( str_replace( 'user_registration_', '', $this->id ) ) : $this->get_general_setting_data( $setting_key );
					$general_setting_wrapper .= '<input value="' . $value . '" data-field="' . $setting_key . '" class="ur-general-setting-field ur-type-' . $setting_value['type'] . '" type="text" name="' . $setting_value['name'] . '"  placeholder="' . $setting_value['placeholder'] . '"';

					if ( true == $setting_value['required'] ) {
						$general_setting_wrapper .= ' required ';
					}
					$disabled = '';
					// To make invite code field name non editable.
					if ( 'learndash_course' === $value || 'invite_code' === $value || 'profile_pic_url' === $value ) {
						$disabled = 'disabled';
					}
					$general_setting_wrapper .= $extra_attribute . ' ' . $disabled . '/>';
					break;

				case 'radio':
					// Compatibility for older version. Get string value from options in advanced settings. Modified since @1.5.7.
					$default_options = isset( $this->field_defaults['default_options'] ) ? $this->field_defaults['default_options'] : array();
					$old_options     = isset( $this->admin_data->advance_setting->options ) ? explode( ',', trim( $this->admin_data->advance_setting->options, ',' ) ) : $default_options;
					$options         = isset( $this->admin_data->general_setting->options ) ? $this->admin_data->general_setting->options : $old_options;
					$options         = array_map( 'trim', $options );

					$default_value = $this->get_general_setting_data( 'default_value' );
					$default_value = ! empty( $default_value ) ? $default_value : '';

					$general_setting_wrapper .= '<ul class="ur-options-list">';
					$unique                   = uniqid();

					foreach ( $options as  $option ) {

						$general_setting_wrapper .= '<li>';
						$general_setting_wrapper .= '<div class="editor-block-mover__control-drag-handle editor-block-mover__control">
						<svg width="18" height="18" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18" role="img" aria-hidden="true" focusable="false"><path d="M13,8c0.6,0,1-0.4,1-1s-0.4-1-1-1s-1,0.4-1,1S12.4,8,13,8z M5,6C4.4,6,4,6.4,4,7s0.4,1,1,1s1-0.4,1-1S5.6,6,5,6z M5,10 c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S5.6,10,5,10z M13,10c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S13.6,10,13,10z M9,6 C8.4,6,8,6.4,8,7s0.4,1,1,1s1-0.4,1-1S9.6,6,9,6z M9,10c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S9.6,10,9,10z"></path></svg>
						</div>';
						$general_setting_wrapper .= '<input value="' . esc_attr( $option ) . '" data-field="default_value" class="ur-general-setting-field ur-type-' . $setting_value['type'] . '-value" type="radio" name="' . $unique . '_value" ';

						if ( true == $setting_value['required'] ) {
							$general_setting_wrapper .= ' required ';
						}

						$general_setting_wrapper .= '' . checked( $option, $default_value, false ) . ' />';
						$general_setting_wrapper .= '<input value="' . esc_attr( $option ) . '" data-field="' . $setting_key . '" class="ur-general-setting-field ur-type-' . $setting_value['type'] . '-label" type="text" name="' . $setting_value['name'] . '_label" >';

						$general_setting_wrapper .= '<a class="add" href="#"><i class="dashicons dashicons-plus"></i></a>';
						$general_setting_wrapper .= '<a class="remove" href="#"><i class="dashicons dashicons-minus"></i></a><br/>';
						$general_setting_wrapper .= '</li>';

					}
						$general_setting_wrapper .= '</ul>';
					break;

				case 'checkbox':
					// Compatibility for older version. Get string value from options in advanced settings. Modified since @1.5.7.
					$default_options = isset( $this->field_defaults['default_options'] ) ? $this->field_defaults['default_options'] : array();
					$old_options     = isset( $this->admin_data->advance_setting->choices ) ? explode( ',', trim( $this->admin_data->advance_setting->choices, ',' ) ) : $default_options;
					$options         = isset( $this->admin_data->general_setting->options ) ? $this->admin_data->general_setting->options : $old_options;

					$options = array_map( 'trim', $options );

					$default_values = $this->get_general_setting_data( 'default_value' );
					$default_values = ! empty( $default_values ) ? $default_values : array();
					$default_values = array_map( 'trim', $default_values );

					$general_setting_wrapper .= '<ul class="ur-options-list">';
					$unique                   = uniqid();

					foreach ( $options as  $option ) {

						$general_setting_wrapper .= '<li>';
						$general_setting_wrapper .= '<div class="editor-block-mover__control-drag-handle editor-block-mover__control">
						<svg width="18" height="18" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18" role="img" aria-hidden="true" focusable="false"><path d="M13,8c0.6,0,1-0.4,1-1s-0.4-1-1-1s-1,0.4-1,1S12.4,8,13,8z M5,6C4.4,6,4,6.4,4,7s0.4,1,1,1s1-0.4,1-1S5.6,6,5,6z M5,10 c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S5.6,10,5,10z M13,10c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S13.6,10,13,10z M9,6 C8.4,6,8,6.4,8,7s0.4,1,1,1s1-0.4,1-1S9.6,6,9,6z M9,10c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S9.6,10,9,10z"></path></svg>
						</div>';
						$general_setting_wrapper .= '<input value="' . esc_attr( $option ) . '" data-field="default_value" class="ur-general-setting-field ur-type-' . $setting_value['type'] . '-value" type="checkbox" name="' . $unique . '_value" ';

						if ( true == $setting_value['required'] ) {
							$general_setting_wrapper .= ' required ';
						}

						if ( in_array( $option, $default_values ) ) {
							$general_setting_wrapper .= 'checked ="checked" />';
						} else {
							$general_setting_wrapper .= '/>';
						}

						$general_setting_wrapper .= '<input value="' . esc_attr( $option ) . '" data-field="' . $setting_key . '" class="ur-general-setting-field ur-type-' . $setting_value['type'] . '-label" type="text" name="' . $setting_value['name'] . '_label" >';

						$general_setting_wrapper .= '<a class="add" href="#"><i class="dashicons dashicons-plus"></i></a>';
						$general_setting_wrapper .= '<a class="remove" href="#"><i class="dashicons dashicons-minus"></i></a><br/>';
						$general_setting_wrapper .= '</li>';

					}
						$general_setting_wrapper .= '</ul>';
					break;

				case 'select':
					if ( isset( $setting_value['options'] )
						&& gettype( $setting_value['options'] ) == 'array' ) {

						$disabled = '';
							// To make invite code required field non editable.
						if ( 'required' === $setting_key && 'invite_code' === $strip_prefix ) {
							$disabled = 'disabled';
						}

						$general_setting_wrapper .= '<select data-field="' . $setting_key . '" class="ur-general-setting-field ur-type-' . $setting_value['type'] . '"  name="' . $setting_value['name'] . '" ' . $disabled . '>';

						foreach ( $setting_value['options'] as $option_key => $option_value ) {
							$selected                 = $this->get_general_setting_data( $setting_key ) == $option_key ? "selected='selected'" : '';
							$general_setting_wrapper .= '<option ' . $selected . " value='" . $option_key . "'>" . $option_value . '</option>';
						}

						$general_setting_wrapper .= '</select>';
					}
					break;

				case 'textarea':
					$general_setting_wrapper .= '<textarea data-field="' . $setting_key . '" class="ur-general-setting-field ur-type-' . $setting_value['type'] . '"  name="' . $setting_value['name'] . '" placeholder= "' . esc_attr( $setting_value['placeholder'] ) . '" ';

					if ( true == $setting_value['required'] ) {
						$general_setting_wrapper .= ' required >';
					}

					$general_setting_wrapper .= $this->get_general_setting_data( $setting_key ) . '</textarea>';
					break;

				case 'hidden':
					$value = isset( $setting_value['default'] ) ? $setting_value['default'] : '';

					$general_setting_wrapper .= '<input value="' . $value . '" data-field="' . $setting_key . '" class="ur-general-setting-field ur-type-' . $setting_value['type'] . '" type="hidden" name="' . $setting_value['name'] . '"  placeholder="' . $setting_value['placeholder'] . '"';

					if ( true == $setting_value['required'] ) {
						$general_setting_wrapper .= ' required ';
					}

					$general_setting_wrapper .= '/>';

					break;
				case 'number':
					$val                      = $this->get_general_setting_data( $setting_key );
					$value                    = ! empty( $val ) ? $val : $setting_value['default'];
					$general_setting_wrapper .= '<input value="' . $value . '" data-field="' . $setting_key . '" class="ur-general-setting-field ur-type-' . $setting_value['type'] . '" type="number" name="' . $setting_value['name'] . '" min = "1"';

					if ( true == $setting_value['required'] ) {
						$general_setting_wrapper .= ' required ';
					}

					$general_setting_wrapper .= '/>';
					break;

				default:
					$general_setting_wrapper .= apply_filters( 'user_registration_form_field_general_setting_' . $setting_value['type'], $this );
			}// End switch().

			$general_setting_wrapper .= '</div>';
			$general_setting_html    .= $general_setting_wrapper;

		}// End foreach().

		return $general_setting_html;
	}

	/**
	 * Display Setting for each fields in options tab
	 *
	 * @return void
	 */
	public function get_setting() {

		$strip_prefix = substr( $this->id, 18 );
		$class        = 'ur-general-setting-' . $strip_prefix;

		$settings  = "<div class='ur-general-setting-block " . esc_attr( $class ) . "'>";
		$settings .= '<h2 class="ur-toggle-heading">' . esc_html__( 'General Settings', 'user-registration' ) . '</h2><hr>';
		$settings .= '<div class="ur-toggle-content">';
		$settings .= $this->get_field_general_settings();
		$settings .= '</div>';
		$settings .= '</div>';

		$advance_settings = $this->get_field_advance_settings();

		if ( ! empty( $advance_settings ) ) {
			$settings .= "<div class='ur-advance-setting-block'>";
			$settings .= '<h2 class="ur-toggle-heading">' . __( 'Advance Settings', 'user-registration' ) . '</h2><hr>';
			$settings .= '<div class="ur-toggle-content">';
			$settings .= $advance_settings;
			$settings .= '</div>';
			$settings .= '</div>';
		}

		// Redundent code start.
		ob_start();
		do_action( 'user_registration_after_advance_settings', $this->id, $this->admin_data );
		$settings .= ob_get_clean();
		// Redundent code end.
		$settings = apply_filters( 'user_registration_after_advance_settings_filter', $settings, $this->id, $this->admin_data );
		return $settings;
	}

	abstract public function validation( $single_form_field, $form_data, $filter_hook, $form_id );
}

Zerion Mini Shell 1.0