* @copyright Copyright (c) 2020 Samuel Marshall / JCH Optimize * @license GNU/GPLv3, or later. See LICENSE file * * If LICENSE file missing, see . */ namespace JchOptimize\WordPress\Admin\Settings; use JchOptimize\Core\Admin\MultiSelectItems; use JchOptimize\Core\FeatureHelpers\ResponsiveImages; use JchOptimize\WordPress\Container\ContainerFactory; use function __; use function array_key_exists; use function array_unshift; use function call_user_func; use function call_user_func_array; use function esc_attr_e; use function explode; use function get_option; use function htmlspecialchars; use function in_array; use function is_array; use function is_multisite; use function ucfirst; use function wp_create_nonce; use const JSON_HEX_AMP; use const JSON_HEX_APOS; use const JSON_HEX_QUOT; use const JSON_HEX_TAG; use const JSON_UNESCAPED_SLASHES; use const JSON_UNESCAPED_UNICODE; class ControlRenderer { /** * @param string $key * @param string $settingName * @param array|string $defaultValue * @param mixed ...$args * * @return void * @psalm-suppress InvalidGlobal */ public static function render(string $key, string $settingName, array|string $defaultValue, ...$args): void { if (defined('JCH_OPTIMIZE_GET_WORDPRESS_SETTINGS')) { global $jchParams; $jchParams[$settingName] = $defaultValue; return; } list($function, $proOnly) = static::extract($key); if ($proOnly && !JCH_PRO) { $html = '
' . __('Only available in Pro Version!', 'jch-optimize') . '
'; echo $html; return; } $aSavedSettings = get_option('jch-optimize_settings'); if (!isset($aSavedSettings[$settingName])) { $activeValue = $defaultValue; } else { $activeValue = $aSavedSettings[$settingName]; } $callable = [__CLASS__, $function]; //prepend $settingName, $activeValue to arguments array_unshift($args, $settingName, $activeValue); call_user_func_array($callable, $args); } protected static function extract(string $key): array { $parts = explode('.', $key); $function = $parts[0]; $proOnly = isset($parts[1]) && $parts[1] === 'pro'; return [$function, $proOnly]; } public static function description(string $title, string $description, bool $new = false): string { $popOver = $description ? "class=\"hasPopover pe-1\" data-bs-content=\"$description\" data-bs-title=\"$title\"" : ''; $html = "
" . $title; if ($description) { $html .= ' '; } if ($new) { $html .= 'New!'; } $html .= '
'; return $html; } public static function radio(string $settingName, string $activeValue, string $class = ''): void { $disabled = ($settingName == 'pro_capture_cache_enable' && is_multisite()) ? 'disabled' : ''; ?>
" class="btn-check" value="0" > " class="btn-check" value="1" >
" value="1" > " value="0">
$value) { $selected = $activeValue == $key ? ' selected' : ''; $disabled = ''; if (!empty($conditions) && array_key_exists($key, $conditions)) { if (!call_user_func($conditions[$key])) { $disabled = ' disabled'; } } $html .= ''; } return $html; } public static function multiselect( string $settingName, array $activeValues, string $type, string $group, string $class = '' ): void { $container = ContainerFactory::getInstance(); $multiSelect = $container->buildObject(MultiSelectItems::class); ?>
buildObject(MultiSelectItems::class); $nextIndex = count($activeValues); $i = 0; $jsSubfields = []; $subfieldsCount = count($subfields); foreach ($subfields as $sf) { $cfg = [ 'name' => $sf['name'], 'type' => $sf['type'], ]; if (!empty($sf['class'])) { $cfg['class'] = $sf['class']; } if (array_key_exists('checked', $sf)) { $cfg['checked'] = $sf['checked']; } if (array_key_exists('defaultValue', $sf)) { $cfg['defaultValue'] = $sf['defaultValue']; } if (!empty($sf['options']) && is_array($sf['options'])) { $cfg['options'] = $sf['options']; } $jsSubfields[] = $cfg; } $json = json_encode( $jsSubfields, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_HEX_AMP | JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT ); ?>
      $method($value[$valueType]); } else { $dataValue = $value[$valueType]; } ?> " >
" > " value="" size="" class="form-control "> " value=""> " value="" class="form-control" > $value) { $attrString .= $name . '="' . $value . '" '; } return $attrString; } public static function checkbox(string $settingName, string $activeValue, string $class = ''): void { $checked = $activeValue == '1' ? 'checked="checked"' : ''; ?> " data-toggle="toggle" data-onstyle="success" data-offstyle="danger" data-on="" data-off="" value="1" > 7) { $cols = ceil($cols / 2); } ?>