field = $field;
$this->value = $value;
$this->org_value = $value;
$this->unique = $unique;
$this->config = $config;
$this->where = ( isset( $this->config['type'] ) ) ? $this->config['type'] : '';
$this->multilang = ( isset( $this->config['multilang'] ) ) ? $this->config['multilang'] : false;
$this->is_multilang = ( isset( $this->config['is_multilang'] ) ) ? (bool) $this->config['is_multilang'] : false;
$this->google_fonts = '';
$this->lang_default = ( $this->multilang && isset( $this->multilang['default'] ) ) ? $this->multilang['default'] : mb_substr( get_locale(), 0, 2 );
$this->lang_current = ( $this->multilang && isset( $this->multilang['current'] ) ) ? $this->multilang['current'] : $this->lang_default;
$this->languages = (
$this->multilang &&
isset( $this->multilang['languages'] ) &&
is_array( $this->multilang['languages'] )
) ? $this->multilang['languages'] : array( $this->lang_default );
}
/*
* @return bool true if multilang is set to true
*/
public function is_multilang() {
return $this->is_multilang;
}
abstract public function output();
public function element_before() {
$element = 'div';
if ( isset( $this->field['pseudo'] ) && $this->field['pseudo'] ) {
$element = 'span';
}
return ( isset( $this->field['before'] ) ) ? '<' . $element . ' class="exopite-sof-before">' . $this->field['before'] . '' . $element . '>' : '';
}
public function element_after() {
$out = ( isset( $this->field['info'] ) ) ? '' . $this->field['info'] . '' : '';
$out .= $this->element_help();
$out .= ( isset( $this->field['after'] ) ) ? '
' . $this->field['after'] . '
' : '';
// $out .= $this->element_get_error();
return $out;
}
public function element_prepend() {
$out = '';
if ( isset( $this->field['prepend'] ) || isset( $this->field['append'] ) ) {
$out .= '';
}
if ( isset( $this->field['prepend'] ) ) {
$out .= '';
if ( strpos( $this->field['prepend'], 'fa-' ) !== false ) {
$out .= '';
} elseif ( strpos( $this->field['prepend'], 'dashicons' ) !== false ) {
$out .= '';
} else {
$out .= $this->field['prepend'];
}
$out .= '';
}
return $out;
}
public function element_append() {
$out = '';
if ( isset( $this->field['append'] ) ) {
$out .= '';
if ( strpos( $this->field['append'], 'fa-' ) !== false ) {
$out .= '';
} elseif ( strpos( $this->field['append'], 'dashicons' ) !== false ) {
$out .= '';
} else {
$out .= $this->field['append'];
}
$out .= '';
}
if ( isset( $this->field['prepend'] ) || isset( $this->field['append'] ) ) {
$out .= '';
}
return $out;
}
public function element_help() {
return ( isset( $this->field['help'] ) ) ? '' : '';
}
public function element_type() {
return $this->field['type'];
}
public function element_name( $extra_name = '' ) {
$extra_multilang = ( isset( $this->config['is_multilang'] ) && ( $this->config['is_multilang'] === true ) ) ? '[' . $this->lang_current . ']' : '';
// for some reason this not work, maybe because abstract class
// $extra_multilang = ( $this->is_multilang() ) ? '[' . $this->lang_current . ']' : '';
// Because we changed to unique, this will determinate if it is a "sub" field. Sub field is inside group.
if ( isset( $this->field['sub'] ) ) {
$name = $this->unique . '[' . $this->field['id'] . ']' . $extra_name;
} else {
if ( $this->config['is_options_simple'] ) {
$name = $this->field['id'] . $extra_name;
} else {
// This is the actual
$name = $this->unique . $extra_multilang . '[' . $this->field['id'] . ']' . $extra_name;
}
}
return ( ! empty( $this->unique ) ) ? $name : '';
}
public function element_value( $value = null ) {
$value = $this->value;
if ( ! isset( $value ) && isset( $this->field['default'] ) && ! empty( $this->field['default'] ) ) {
$default = $this->field['default'];
if ( is_array( $default ) ) {
if ( isset( $default['function'] ) && is_callable( $default['function'] ) ) {
$args = ( isset( $default['args'] ) ) ? $default['args'] : '';
return call_user_func( $default['function'], $args );
}
}
return $default;
}
return $value;
}
public function element_attributes( $el_attributes = array() ) {
$attributes = ( isset( $this->field['attributes'] ) ) ? $this->field['attributes'] : array();
$element_id = ( isset( $this->field['id'] ) ) ? $this->field['id'] : '';
if ( $el_attributes !== false ) {
$sub_element = ( isset( $this->field['sub'] ) ) ? 'sub-' : '';
$el_attributes = ( is_string( $el_attributes ) || is_numeric( $el_attributes ) ) ? array( 'data-' . $sub_element . 'depend-id' => $element_id . '_' . $el_attributes ) : $el_attributes;
$el_attributes = ( empty( $el_attributes ) && isset( $element_id ) ) ? array( 'data-' . $sub_element . 'depend-id' => $element_id ) : $el_attributes;
}
$attributes = wp_parse_args( $attributes, $el_attributes );
$atts = '';
if ( ! empty( $attributes ) ) {
foreach ( $attributes as $key => $value ) {
if ( $value === 'only-key' ) {
$atts .= ' ' . $key;
} else {
$atts .= ' ' . $key . '="' . $value . '"';
}
}
}
return $atts;
}
public function element_class( $el_class = '' ) {
$classes = ( isset( $this->field['class'] ) ) ? array_merge( explode( ' ', $el_class ), explode( ' ', $this->field['class'] ) ) : explode( ' ', $el_class );
$classes = array_filter( $classes );
$field_class = implode( ' ', $classes );
return ( ! empty( $field_class ) ) ? ' class="' . $field_class . '"' : '';
}
public function checked( $value = '', $current = '', $type = 'checked', $echo = false ) {
$value = maybe_unserialize( $value );
if ( is_array( $value ) && in_array( $current, $value ) ) {
$result = ' ' . $type . '="' . $type . '"';
} else if ( $value == $current ) {
$result = ' ' . $type . '="' . $type . '"';
} else {
$result = '';
}
if ( $echo ) {
echo $result;
}
return $result;
}
public function get_google_fonts_json() {
if( empty( $this->google_fonts ) ) {
$google_fonts_json_fn = implode( DIRECTORY_SEPARATOR, array( __DIR__, 'assets', 'google-fonts.json' ) );
if ( file_exists( $google_fonts_json_fn ) ) {
$google_fonts_json = file_get_contents( $google_fonts_json_fn );
$this->google_fonts = json_decode( $google_fonts_json );
}
}
return $this->google_fonts;
}
public static function do_enqueue( $styles_scripts, $args ) {
foreach ( $styles_scripts as $resource ) {
$resource_file = join( DIRECTORY_SEPARATOR, array(
$args['plugin_sof_path'] . 'assets',
$resource['fn']
) );
$resource_url = join( '/', array(
untrailingslashit( $args['plugin_sof_url'] ),
'assets',
$resource['fn']
) );
if ( ! file_exists( $resource_file ) ) {
continue;
}
if ( ! empty( $resource['version'] ) ) {
$version = $resource['version'];
} else {
$version = filemtime( $resource_file );
}
switch ( $resource['type'] ) {
case 'script':
$function = 'wp_enqueue_script';
break;
case 'style':
$function = 'wp_enqueue_style';
break;
default:
continue 2;
}
$function( $resource['name'], $resource_url, $resource['dependency'], $version, $resource['attr'] );
}
}
}
}