419 lines
12 KiB
PHP
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();
|