150 lines
4.1 KiB
PHP
150 lines
4.1 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Generate a random ID.
|
|
*
|
|
* Keep function_exists() check for some time because Blocksy Companion 1.9
|
|
* framework/helpers/blocksy-integration.php declares it again.
|
|
*/
|
|
if (! function_exists('blocksy_rand_md5')) {
|
|
function blocksy_rand_md5() {
|
|
return md5(time() . '-' . uniqid(wp_rand(), true) . '-' . wp_rand());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Extract a key from an array with defaults.
|
|
*
|
|
* @param string $keys 'a/b/c' path.
|
|
* @param array|object $array_or_object array to extract from.
|
|
* @param null|mixed $default_value defualt value.
|
|
*
|
|
* Keep function_exists() check for some time because Blocksy Companion 1.9
|
|
* framework/helpers/blocksy-integration.php declares it again.
|
|
*/
|
|
if (! function_exists('blocksy_default_akg')) {
|
|
function blocksy_default_akg($keys, $array_or_object, $default_value) {
|
|
return blocksy_akg($keys, $array_or_object, $default_value);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Recursively find a key's value in array
|
|
*
|
|
* @param string $keys 'a/b/c' path.
|
|
* @param array|object $array_or_object array to extract from.
|
|
* @param null|mixed $default_value defualt value.
|
|
*
|
|
* @return null|mixed
|
|
*/
|
|
if (! function_exists('blocksy_akg')) {
|
|
function blocksy_akg($keys, $array_or_object, $default_value = null) {
|
|
if (! is_array($keys)) {
|
|
$keys = explode('/', (string) $keys);
|
|
}
|
|
|
|
$array_or_object = $array_or_object;
|
|
$key_or_property = array_shift($keys);
|
|
|
|
if (is_null($key_or_property)) {
|
|
return $default_value;
|
|
}
|
|
|
|
$is_object = is_object($array_or_object);
|
|
|
|
if ($is_object) {
|
|
if (! property_exists($array_or_object, $key_or_property)) {
|
|
return $default_value;
|
|
}
|
|
} else {
|
|
if (! is_array($array_or_object) || ! array_key_exists($key_or_property, $array_or_object)) {
|
|
return $default_value;
|
|
}
|
|
}
|
|
|
|
if (isset($keys[0])) { // not used count() for performance reasons.
|
|
if ($is_object) {
|
|
return blocksy_akg($keys, $array_or_object->{$key_or_property}, $default_value);
|
|
} else {
|
|
return blocksy_akg($keys, $array_or_object[$key_or_property], $default_value);
|
|
}
|
|
} else {
|
|
if ($is_object) {
|
|
return $array_or_object->{$key_or_property};
|
|
} else {
|
|
return $array_or_object[ $key_or_property ];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function blocksy_akg_or_customizer($key, $source, $default = null) {
|
|
$source = wp_parse_args(
|
|
$source,
|
|
[
|
|
'prefix' => '',
|
|
|
|
// customizer | array
|
|
'strategy' => 'customizer',
|
|
]
|
|
);
|
|
|
|
if ($source['strategy'] !== 'customizer' && !is_array($source['strategy'])) {
|
|
throw new Error(
|
|
'strategy wrong value provided. Array or customizer is required.'
|
|
);
|
|
}
|
|
|
|
if (! empty($source['prefix'])) {
|
|
$source['prefix'] .= '_';
|
|
}
|
|
|
|
if ($source['strategy'] === 'customizer') {
|
|
return blocksy_get_theme_mod($source['prefix'] . $key, $default);
|
|
}
|
|
|
|
return blocksy_akg($source['prefix'] . $key, $source['strategy'], $default);
|
|
}
|
|
|
|
// When adding new migration, also implement same key in:
|
|
// - static/js/options/containers/MigrateValues.js
|
|
function blocksy_migrate_values($values, $args = []) {
|
|
$args = wp_parse_args($args, [
|
|
'migrations' => []
|
|
]);
|
|
|
|
$new_value = $values;
|
|
|
|
foreach ($args['migrations'] as $migration) {
|
|
if ($migration === 'popups_new_close_actions') {
|
|
if (
|
|
isset($new_value['close_button_type'])
|
|
&&
|
|
$new_value['close_button_type'] === 'none'
|
|
) {
|
|
$new_value['close_button_type'] = 'outside';
|
|
$new_value['popup_close_button'] = 'no';
|
|
}
|
|
|
|
if (isset($new_value['popup_additional_close_strategy'])) {
|
|
$new_value['popup_custom_close'] = 'yes';
|
|
$new_value['popup_custom_close_strategy'] = $new_value['popup_additional_close_strategy'];
|
|
|
|
if (isset($new_value['aditional_close_button_click_selector'])) {
|
|
$new_value['popup_custom_close_button_selector'] = $new_value['aditional_close_button_click_selector'];
|
|
}
|
|
|
|
if (isset($new_value['popup_additional_close_submit_delay'])) {
|
|
$new_value['popup_custom_close_action_delay'] = $new_value['popup_additional_close_submit_delay'];
|
|
}
|
|
|
|
unset($new_value['popup_additional_close_strategy']);
|
|
unset($new_value['aditional_close_button_click_selector']);
|
|
unset($new_value['popup_additional_close_submit_delay']);
|
|
}
|
|
}
|
|
}
|
|
|
|
return $new_value;
|
|
}
|