kratos/inc/codestar-framework/classes/abstract.class.php

129 lines
4.1 KiB
PHP

<?php if (!defined('ABSPATH')) {
die;
}
/**
*
* Abstract Class
*
* @since 1.0.0
* @version 1.0.0
*
*/
if (!class_exists('CSF_Abstract')) {
abstract class CSF_Abstract
{
// PHP 8.2: Dynamic Properties are deprecated
public $args;
public $unique;
public $pre_fields;
public $options;
public $abstract = '';
public $output_css = '';
public function __construct()
{
// Collect output css and typography
if (!empty($this->args['output_css']) || !empty($this->args['enqueue_webfont'])) {
add_action('wp_enqueue_scripts', array($this, 'collect_output_css_and_typography'), 10);
CSF::$css = apply_filters("csf_{$this->unique}_output_css", CSF::$css, $this);
}
}
public function collect_output_css_and_typography()
{
$this->recursive_output_css($this->pre_fields);
}
public function recursive_output_css($fields = array(), $combine_field = array())
{
if (!empty($fields)) {
foreach ($fields as $field) {
$field_id = (!empty($field['id'])) ? $field['id'] : '';
$field_type = (!empty($field['type'])) ? $field['type'] : '';
$field_output = (!empty($field['output'])) ? $field['output'] : '';
$field_check = ($field_type === 'typography' || $field_output) ? true : false;
$field_class = 'CSF_Field_' . $field_type;
if ($field_type && $field_id) {
if ($field_type === 'fieldset') {
if (!empty($field['fields'])) {
$this->recursive_output_css($field['fields'], $field);
}
}
if ($field_type === 'accordion') {
if (!empty($field['accordions'])) {
foreach ($field['accordions'] as $accordion) {
$this->recursive_output_css($accordion['fields'], $field);
}
}
}
if ($field_type === 'tabbed') {
if (!empty($field['tabs'])) {
foreach ($field['tabs'] as $accordion) {
$this->recursive_output_css($accordion['fields'], $field);
}
}
}
if (class_exists($field_class)) {
if (method_exists($field_class, 'output') || method_exists($field_class, 'enqueue_google_fonts')) {
$field_value = '';
if ($field_check && ($this->abstract === 'options' || $this->abstract === 'customize')) {
if (!empty($combine_field)) {
$field_value = (isset($this->options[$combine_field['id']][$field_id])) ? $this->options[$combine_field['id']][$field_id] : '';
} else {
$field_value = (isset($this->options[$field_id])) ? $this->options[$field_id] : '';
}
} else if ($field_check && ($this->abstract === 'metabox' && is_singular() || $this->abstract === 'taxonomy' && is_archive())) {
if (!empty($combine_field)) {
$meta_value = $this->get_meta_value($combine_field);
$field_value = (isset($meta_value[$field_id])) ? $meta_value[$field_id] : '';
} else {
$meta_value = $this->get_meta_value($field);
$field_value = (isset($meta_value)) ? $meta_value : '';
}
}
$instance = new $field_class($field, $field_value, $this->unique, 'wp/enqueue', $this);
// typography enqueue and embed google web fonts
if ($field_type === 'typography' && $this->args['enqueue_webfont'] && !empty($field_value['font-family'])) {
$method = (!empty($this->args['async_webfont'])) ? 'async' : 'enqueue';
$instance->enqueue_google_fonts($method);
}
// output css
if ($field_output && $this->args['output_css']) {
CSF::$css .= $instance->output();
}
unset($instance);
}
}
}
}
}
}
}
}