wp_back/wp-content/plugins/visual-portfolio/classes/class-deprecated.php
2024-05-20 15:37:46 +03:00

419 lines
12 KiB
PHP

<?php
/**
* Deprecations.
*
* @package visual-portfolio
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Class Visual_Portfolio_Deprecations
*/
class Visual_Portfolio_Deprecations {
/**
* The list of all deprecated hooks.
*
* @var array
*/
public $hooks = array();
/**
* Visual_Portfolio_Deprecations constructor.
*/
public function __construct() {
// Deprecated filters since v2.9.0.
$this->add_deprecated_filter( 'vpf_print_layout_control_args', '2.9.0', 'vpf_registered_control_args' );
$this->add_deprecated_filter( 'vpf_get_layout_option', '2.9.0', 'vpf_control_value' );
$this->add_deprecated_filter( 'vpf_extend_popup_image', '2.9.0', 'vpf_popup_image_data' );
$this->add_deprecated_filter( 'vpf_extend_custom_popup_image', '2.9.0', 'vpf_popup_custom_image_data' );
$this->add_deprecated_filter( 'vpf_print_popup_data', '2.9.0', 'vpf_popup_output' );
$this->add_deprecated_filter( 'vpf_wp_get_attachment_image_extend', '2.9.0', 'vpf_wp_get_attachment_image' );
// Deprecated some builtin_controls for skins v3.0.0.
add_filter( 'vpf_items_style_builtin_controls_options', array( $this, 'deprecated_vpf_items_style_builtin_controls_options' ), 20 );
add_filter( 'vpf_items_style_builtin_controls', array( $this, 'deprecated_vpf_items_style_builtin_controls' ), 20, 4 );
add_filter( 'vpf_get_options', array( $this, 'deprecated_items_styles_attributes' ), 20, 2 );
// Deprecated image args for wp kses since v2.10.4.
// Since v2.20.0 we are using the `vp_image` kses.
add_filter( 'vpf_image_item_args', array( $this, 'deprecated_image_kses_args' ), 9 );
add_filter( 'vpf_post_item_args', array( $this, 'deprecated_image_kses_args' ), 9 );
// Deprecated image noscript argument since v2.6.0.
add_filter( 'vpf_each_item_args', array( $this, 'deprecated_noscript_args' ), 9 );
}
/**
* Add Deprecated Filter
*
* @param string $deprecated The deprecated hook.
* @param string $version The version this hook was deprecated.
* @param string $replacement The replacement hook.
*/
public function add_deprecated_filter( $deprecated, $version, $replacement ) {
// Store replacement data.
$this->hooks[] = array(
'type' => 'filter',
'deprecated' => $deprecated,
'replacement' => $replacement,
'version' => $version,
);
// Add generic handler.
// Use a priority of 10, and accepted args of 10 (ignored by WP).
add_filter( $replacement, array( $this, 'apply_deprecated_hook' ), 10, 10 );
}
/**
* Add Deprecated Action
*
* @param string $deprecated The deprecated hook.
* @param string $version The version this hook was deprecated.
* @param string $replacement The replacement hook.
*/
public function add_deprecated_action( $deprecated, $version, $replacement ) {
// Store replacement data.
$this->hooks[] = array(
'type' => 'action',
'deprecated' => $deprecated,
'replacement' => $replacement,
'version' => $version,
);
// Add generic handler.
// Use a priority of 10, and accepted args of 10 (ignored by WP).
add_action( $replacement, array( $this, 'apply_deprecated_hook' ), 10, 10 );
}
/**
* Apply Deprecated Hook
*
* Apply a deprecated filter during apply_filters() or do_action().
*
* @return mixed
*/
public function apply_deprecated_hook() {
// Get current hook.
$hook_name = current_filter();
// Get args provided to function.
$args = func_get_args();
foreach ( $this->hooks as $hook_data ) {
if ( $hook_name !== $hook_data['replacement'] ) {
continue;
}
// Check if anyone is hooked into this deprecated hook.
if ( has_filter( $hook_data['deprecated'] ) ) {
// Log warning.
// Most probably we will add it later.
//
// _deprecated_hook( $hook_data['deprecated'], $hook_data['version'], $hook_name ); .
// Apply filters.
if ( 'filter' === $hook_data['type'] ) {
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound
$args[0] = apply_filters_ref_array( $hook_data['deprecated'], $args );
// Or do action.
} else {
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound
do_action_ref_array( $hook_data['deprecated'], $args );
}
}
}
// Return first arg.
return $args[0];
}
/**
* Restore some old builtin_controls for skins.
*
* @param array $builtin_controls - builtin default controls.
*
* @return array
*/
public function deprecated_vpf_items_style_builtin_controls_options( $builtin_controls ) {
return array_merge(
$builtin_controls,
array(
'images_rounded_corners' => true,
'show_title' => true,
'show_categories' => true,
'show_date' => true,
'show_author' => true,
'show_comments_count' => true,
'show_views_count' => true,
'show_reading_time' => true,
'show_excerpt' => true,
'show_icons' => true,
'align' => true,
)
);
}
/**
* Restore some old builtin_controls for skins.
*
* @param array $fields - builtin fields.
* @param string $option_name - option name.
* @param array $options - builtin field options.
* @param string $style_name - items style name.
*
* @return array
*/
public function deprecated_vpf_items_style_builtin_controls( $fields, $option_name, $options, $style_name ) {
switch ( $option_name ) {
case 'images_rounded_corners':
$fields[] = array(
'type' => 'range',
'label' => esc_html__( 'Images Rounded Corners', 'visual-portfolio' ),
'name' => 'images_rounded_corners',
'min' => 0,
'max' => 100,
'default' => 0,
'style' => array(
array(
'element' => '.vp-portfolio__items-style-' . $style_name,
'property' => '--vp-items-style-' . $style_name . '--image__border-radius',
'mask' => '$px',
),
),
);
break;
case 'show_title':
$fields[] = array(
'type' => 'checkbox',
'alongside' => esc_html__( 'Display Title', 'visual-portfolio' ),
'name' => 'show_title',
'default' => true,
);
break;
case 'show_categories':
$fields[] = array(
'type' => 'checkbox',
'alongside' => esc_html__( 'Display Categories', 'visual-portfolio' ),
'name' => 'show_categories',
'group' => 'items_style_categories',
'default' => true,
);
$fields[] = array(
'type' => 'range',
'label' => esc_html__( 'Categories Count', 'visual-portfolio' ),
'name' => 'categories_count',
'group' => 'items_style_categories',
'min' => 1,
'max' => 20,
'default' => 1,
'condition' => array(
array(
'control' => 'show_categories',
),
),
);
break;
case 'show_date':
$fields[] = array(
'type' => 'radio',
'label' => esc_html__( 'Display Date', 'visual-portfolio' ),
'name' => 'show_date',
'group' => 'items_style_date',
'default' => 'false',
'options' => array(
'false' => esc_html__( 'Hide', 'visual-portfolio' ),
'true' => esc_html__( 'Default', 'visual-portfolio' ),
'human' => esc_html__( 'Human Format', 'visual-portfolio' ),
),
);
$fields[] = array(
'type' => 'text',
'name' => 'date_format',
'group' => 'items_style_date',
'default' => 'F j, Y',
'description' => esc_attr__( 'Date format example: F j, Y', 'visual-portfolio' ),
'wpml' => true,
'condition' => array(
array(
'control' => 'show_date',
),
),
);
break;
case 'show_author':
$fields[] = array(
'type' => 'checkbox',
'alongside' => esc_html__( 'Display Author', 'visual-portfolio' ),
'name' => 'show_author',
'default' => false,
);
break;
case 'show_comments_count':
$fields[] = array(
'type' => 'checkbox',
'alongside' => esc_html__( 'Display Comments Count', 'visual-portfolio' ),
'name' => 'show_comments_count',
'default' => false,
'condition' => array(
array(
'control' => 'GLOBAL_content_source',
'value' => 'post-based',
),
),
);
break;
case 'show_views_count':
$fields[] = array(
'type' => 'checkbox',
'alongside' => esc_html__( 'Display Views Count', 'visual-portfolio' ),
'name' => 'show_views_count',
'default' => false,
'condition' => array(
array(
'control' => 'GLOBAL_content_source',
'value' => 'post-based',
),
),
);
break;
case 'show_reading_time':
$fields[] = array(
'type' => 'checkbox',
'alongside' => esc_html__( 'Display Reading Time', 'visual-portfolio' ),
'name' => 'show_reading_time',
'default' => false,
'condition' => array(
array(
'control' => 'GLOBAL_content_source',
'value' => 'post-based',
),
),
);
break;
case 'show_excerpt':
$fields[] = array(
'type' => 'checkbox',
'alongside' => esc_html__( 'Display Excerpt', 'visual-portfolio' ),
'name' => 'show_excerpt',
'group' => 'items_style_excerpt',
'default' => false,
);
$fields[] = array(
'type' => 'number',
'label' => esc_html__( 'Excerpt Words Count', 'visual-portfolio' ),
'name' => 'excerpt_words_count',
'group' => 'items_style_excerpt',
'default' => 15,
'min' => 1,
'max' => 200,
'condition' => array(
array(
'control' => 'show_excerpt',
),
),
);
break;
case 'show_icons':
$fields[] = array(
'type' => 'checkbox',
'alongside' => esc_html__( 'Display Icon', 'visual-portfolio' ),
'name' => 'show_icon',
'default' => false,
);
break;
case 'align':
$fields[] = array(
'type' => 'align',
'label' => esc_html__( 'Caption Align', 'visual-portfolio' ),
'name' => 'align',
'default' => 'center',
'extended' => 'extended' === $options,
);
break;
// no default.
}
return $fields;
}
/**
* Add attributes to block rendering as a fallback
* to prevent errors in changed templates.
*
* @param array $options - block options.
* @param array $attrs - block attributes.
*
* @return array
*/
public function deprecated_items_styles_attributes( $options, $attrs ) {
$styles = array( 'default', 'fade', 'fly', 'emerge' );
foreach ( $styles as $style ) {
// Restore align option.
if ( ! isset( $options[ 'items_style_' . $style . '__align' ] ) ) {
$options[ 'items_style_' . $style . '__align' ] = $attrs[ 'items_style_' . $style . '__align' ] ?? 'center';
}
}
return $options;
}
/**
* Allowed attributes for wp_kses used in vp images.
*
* @param array $args vp item args.
*
* @return array
*/
public function deprecated_image_kses_args( $args ) {
if ( ! isset( $args['image_allowed_html'] ) ) {
$args['image_allowed_html'] = array();
}
if ( ! isset( $args['image_allowed_html']['img'] ) ) {
$args['image_allowed_html']['img'] = array();
}
$args['image_allowed_html']['noscript'] = array();
$args['image_allowed_html']['img'] = array_merge(
$args['image_allowed_html']['img'],
array(
'src' => array(),
'srcset' => array(),
'sizes' => array(),
'alt' => array(),
'class' => array(),
'width' => array(),
'height' => array(),
// Lazy loading attributes.
'loading' => array(),
'data-src' => array(),
'data-sizes' => array(),
'data-srcset' => array(),
'data-no-lazy' => array(),
)
);
return $args;
}
/**
* Add noscript string to prevent errors in old templates.
*
* @param array $args vp item args.
*
* @return array
*/
public function deprecated_noscript_args( $args ) {
$args['image_noscript'] = '';
return $args;
}
}
new Visual_Portfolio_Deprecations();