Current File : /home/escuelai/public_html/wp-content/plugins/learnpress/inc/abstract-settings.php |
<?php
/**
* Class LP_Abstract_Settings
*/
abstract class LP_Abstract_Settings {
/**
* LP_Abstract_Settings constructor.
*/
public function __construct() {
add_filter( 'learn-press/update-settings/redirect', array( $this, '_do_save' ) );
}
public function _do_save( $url ) {
$this->save();
return $url;
}
public function save() {
// This function should be overwritten from its child
}
/**
* @return bool|mixed|array
*/
public function get_settings() {
return false;
}
/**
* Get name for field
*
* @param $name
*
* @return mixed
*/
public function get_admin_field_name( $name ) {
$items = LP_Admin_Menu::instance()->get_menu_items();
$section = '';
if ( ! empty( $items['settings'] ) ) {
$tab = $items['settings']->get_active_tab();
$section = $items['settings']->get_active_section();
}
if ( $tab === 'payments' && $section !== 'general' && ! empty( $name ) ) {
if ( strpos( $name, '[' ) === 0 ) {
$name = $section . $name;
} else {
$name = $section . '_' . $name;
}
}
if ( empty( $name ) ) {
$name = md5( microtime( true ) );
}
$field_name = apply_filters( 'learn_press_settings_field_name_' . $name, "learn_press_{$name}" );
return $field_name;
}
/**
* Get ID for field
*
* @param $name
*
* @return mixed
*/
public function get_admin_field_id( $name ) {
return preg_replace( array( '!\[|(\]\[)!', '!\]!' ), array( '_', '' ), $this->get_field_name( $name ) );
}
/**
* Print admin fields options.
*
* @version 4.0.0
*/
public function admin_option_settings() {
$settings = $this->get_settings();
$settings = $this->sanitize_settings( $settings );
do_action( 'learn-press/settings-render' );
if ( $settings ) {
LP_Meta_Box_Helper::output_fields( $settings );
} else {
echo esc_html__( 'No settings available.', 'learnpress' );
}
}
/**
* Sanitize settings before rendering.
* Fill std from database, reformat conditional fields...
*
* @param $settings
*
* @return mixed
*/
public function sanitize_settings( $settings ) {
if ( $settings ) {
foreach ( $settings as $k => $field ) {
// except heading options.
if ( isset( $field['id'] ) ) {
$field['id'] = $this->get_admin_field_name( $field['id'] );
// A field is an array of values, find the real name.
if ( strpos( $field['id'], '[' ) !== false ) {
parse_str( $field['id'], $group );
$keys = array_keys( $group );
$option_name = reset( $keys );
} else {
$option_name = $field['id'];
}
// Get value from option
$std = get_option( $option_name );
if ( false === $std ) {
$std = array_key_exists( 'default', $field ) ? $field['default'] : '';
}
// If the field is an array
if ( isset( $group ) && is_array( $std ) ) {
$loop = 0;
while ( is_array( $group ) && $loop ++ < 10 ) {
if ( ! empty( $group[ $option_name ] ) ) {
$option_keys = array_keys( $group[ $option_name ] );
$option_name = reset( $option_keys );
$group = ! empty( $group[ $option_name ] ) ? $group[ $option_name ] : false;
$std = ! empty( $std[ $option_name ] ) ? $std[ $option_name ] : false;
}
}
}
$field['std'] = apply_filters( 'learn-press/settings/default-field-value', $std, $field );
$field['learn-press-settings'] = 'yes';
$this->parse_conditional( $field );
$settings[ $k ] = $field;
}
}
}
return $settings;
}
public function parse_conditional( &$field ) {
// Re-format conditional logic fields
if ( ! empty( $field['visibility'] ) ) {
$conditional = $field['visibility'];
if ( ! array_key_exists( 0, $conditional['conditional'] ) ) {
$conditional['conditional'] = array(
$conditional['conditional'],
);
}
foreach ( $conditional['conditional'] as $kk => $conditional_field ) {
$conditional['conditional'][ $kk ]['field'] = $this->get_admin_field_name( $conditional_field['field'] );
}
$field['visibility'] = $conditional;
}
return $field;
}
/**
* @param $option_name
* @param null $default
*
* @return array|null|string
*/
public function get_option( $option_name, $default = null ) {
if ( strstr( $option_name, '[' ) ) {
parse_str( $option_name, $option_array );
// Option name is first key
$option_name = current( array_keys( $option_array ) );
// Get value
$option_values = get_option( $option_name, '' );
$key = key( $option_array[ $option_name ] );
if ( isset( $option_values[ $key ] ) ) {
$option_value = $option_values[ $key ];
} else {
$option_value = null;
}
// Single value
} else {
$option_value = LP_Settings::instance()->get( preg_replace( '!^learn_press_!', '', $option_name ), null );
}
if ( is_array( $option_value ) ) {
$option_value = array_map( 'stripslashes', $option_value );
} elseif ( ! is_null( $option_value ) ) {
$option_value = stripslashes( $option_value );
}
return $option_value === null ? $default : $option_value;
}
}