/home/skemvmse/www/wp-content/plugins/ultimate-elementor/modules/timeline/widgets/skin-style.php
<?php
/**
* UAEL Base Skin.
*
* @package UAEL
*/
namespace UltimateElementor\Modules\Timeline\Widgets;
use Elementor\Group_Control_Image_Size;
use UltimateElementor\Classes\UAEL_Helper;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Class Skin_Base
*/
class Skin_Style {
/**
* Query object
*
* @since 1.5.2
* @var object $query
*/
public static $query;
/**
* Query object
*
* @since 1.5.2
* @var object $query_obj
*/
public static $query_obj;
/**
* Settings
*
* @since 1.5.2
* @var object $settings
*/
public static $settings;
/**
* Node ID of element
*
* @since 1.5.2
* @var object $node_id
*/
public static $node_id;
/**
* Rendered Settings
*
* @since 1.5.2
* @var object $_render_attributes
*/
public $_render_attributes; // phpcs:ignore PSR2.Classes.PropertyDeclaration.Underscore
/**
* Render settings array for selected skin
*
* @since 1.5.2
* @param string $control_base_id control ID.
* @access public
*/
public function get_instance_value( $control_base_id ) {
if ( isset( $settings[ $control_base_id ] ) ) {
return $settings[ $control_base_id ];
} else {
return null;
}
}
/**
* Get featured image.
*
* Returns the featured image HTML wrap.
*
* @since 1.5.2
* @param array $settings object.
* @access public
*/
public function render_featured_image( $settings ) {
$settings['post_image_size'] = array(
'id' => get_post_thumbnail_id(),
);
$thumbnail_html = Group_Control_Image_Size::get_attachment_image_html( $settings, 'post_image_size' );
if ( empty( $thumbnail_html ) ) {
return;
}
echo wp_kses_post( $thumbnail_html );
}
/**
* Get post title.
*
* Returns the post title HTML wrap.
*
* @since 1.5.2
* @access public
*/
public function render_title() {
echo esc_attr( the_title() ) . '</br>';
}
/**
* Get post excerpt length.
*
* Returns the length of Timeline post excerpt.
*
* @since 1.7.0
* @access public
*/
public function uael_timeline_excerpt_length() {
$settings = self::$settings;
return $settings['excerpt_length'];
}
/**
* Get post excerpt end text.
*
* Returns the string to append to Timeline post excerpt.
*
* @param string $more returns string.
* @since 1.7.0
* @access public
*/
public function uael_timeline_excerpt_more( $more ) {
return ' ...';
}
/**
* Get post excerpt.
*
* Returns the post excerpt HTML wrap.
*
* @since 1.5.2
* @param array $settings object.
* @access public
*/
public function render_excerpt( $settings ) {
$excerpt_length = $settings['excerpt_length'];
if ( 0 === $excerpt_length ) {
return;
}
add_filter( 'excerpt_length', array( $this, 'uael_timeline_excerpt_length' ), 20 );
add_filter( 'excerpt_more', array( $this, 'uael_timeline_excerpt_more' ), 20 );
the_excerpt();
remove_filter( 'excerpt_length', array( $this, 'uael_excerpt_length_filter' ), 20 );
remove_filter( 'excerpt_more', array( $this, 'uael_excerpt_more_filter' ), 20 );
}
/**
* Get post published date.
*
* Returns the post published date HTML wrap.
*
* @since 1.5.2
* @param array $settings object.
* @access public
*/
public function render_date( $settings ) {
echo wp_kses_post( apply_filters( 'uael_timeline_the_date_format', get_the_date(), get_option( 'date_format' ), '', '' ) );
}
/**
* Get Pagination.
*
* Returns the Pagination HTML.
*
* @since 1.5.2
* @param array $settings object.
* @param array $query object.
* @param array $query_obj object.
* @access public
*/
public function render_pagination( $settings, $query, $query_obj ) {
if ( 'no' === $settings['timeline_infinite'] ) {
return;
}
// Get current page number.
$paged = $query_obj->get_paged();
$total_pages = $query->max_num_pages;
// Users can change the limit of no. of pages in infinite load using this filter
// default is 5.
$total_pages = apply_filters( 'uael_timeline_infinite_limit', $total_pages = 5 );
// Return pagination html.
if ( $total_pages > 1 ) {
$current_page = $paged;
if ( ! $current_page ) {
$current_page = 1;
}
$links = paginate_links(
array(
'current' => $current_page,
'total' => $total_pages,
'type' => 'array',
)
);
$class = (
'yes' === $settings['timeline_infinite']
) ? 'style=display:none;' : '';
$id = 'uael-timeline-' . self::$node_id;
?>
<nav class="uael-timeline-pagination" id="<?php echo esc_attr( $id ); ?>" <?php echo esc_attr( $class ); ?> role="navigation" aria-label="<?php esc_attr_e( 'Pagination', 'uael' ); ?>">
<?php echo wp_kses_post( implode( PHP_EOL, $links ) ); ?>
</nav>
<?php
}
}
/**
* Get Search Box HTML.
*
* Returns the Search Box HTML.
*
* @since 1.5.2
* @param array $settings object.
* @access public
*/
public function render_search( $settings ) {
?>
<div class="uael-timeline-post-empty">
<p><?php echo wp_kses_post( $settings['no_results_text'] ); ?></p>
<?php if ( 'yes' === $settings['show_search_box'] ) { ?>
<?php get_search_form(); ?>
<?php } ?>
</div>
<?php
}
/**
* Get body.
*
* Returns body.
*
* @since 1.5.2
* @param array $settings object.
* @param array $query object.
* @param array $query_obj object.
* @param array $dynamic object.
* @access public
*/
public function get_body( $settings, $query, $query_obj, $dynamic ) {
global $post;
$count = 0;
$index = 0;
$is_featured = false;
$args = $query_obj->get_query_posts( $settings );
$page_id = \Elementor\Plugin::$instance->documents->get_current()->get_main_id();
$is_editor = \Elementor\Plugin::instance()->editor->is_edit_mode();
$dynamic_date = $settings['post_timeline_date_text'];
$custom_meta = '';
if ( ! $query->have_posts() ) {
$this->render_search( $settings );
return;
}
if ( 'yes' === $settings['timeline_cards_box_shadow'] ) {
$this->add_render_attribute( 'timeline_main', 'class', 'uael-timeline-shadow-yes' );
}
$this->add_render_attribute( 'timeline_main', 'class', 'uael-timeline-main' );
$this->add_render_attribute( 'timeline_days', 'class', 'uael-days' );
$this->add_render_attribute( 'line', 'class', 'uael-timeline__line' );
$this->add_render_attribute( 'line-inner', 'class', 'uael-timeline__line__inner' );
if ( ! $is_editor ) {
if ( 'yes' === $settings['timeline_infinite'] ) {
$this->add_render_attribute( 'timeline_days', 'class', 'uael-timeline-infinite-load' );
}
}
$count = 0;
$current_side = '';
$per_posts = $settings['posts_per_page'];
?>
<div <?php echo wp_kses_post( $this->get_render_attribute_string( 'timeline_main' ) ); ?>>
<div <?php echo wp_kses_post( $this->get_render_attribute_string( 'timeline_days' ) ); ?>>
<?php
while ( $query->have_posts() ) {
$query->the_post();
$post_id = get_the_ID();
$this->add_render_attribute(
array(
'timeline_single_content' => array( 'class' => 'uael-date' ),
)
);
$this->add_render_attribute( 'heading_setting_key', 'class', 'uael-timeline-heading' );
$this->add_render_attribute( 'card_' . $post_id, 'class', 'timeline-icon-new' );
$this->add_render_attribute( 'card_' . $post_id, 'class', 'out-view-timeline-icon' );
$this->add_render_attribute( 'current_' . $post_id, 'class', 'elementor-repeater-item-' . $post_id );
$this->add_render_attribute( 'current_' . $post_id, 'class', 'uael-timeline-field animate-border' );
$this->add_render_attribute( 'current_' . $post_id, 'class', 'out-view' );
$this->add_render_attribute( 'timeline_alignment' . $post_id, 'class', 'uael-day-new' );
$this->add_render_attribute( 'data_alignment' . $post_id, 'class', 'uael-timeline-widget' );
$page_no = get_query_var( 'paged' );
if ( 'yes' === $settings['timeline_infinite'] && 0 !== $page_no ) {
if ( 0 !== (int) $per_posts % 2 && 0 === (int) $page_no % 2 ) {
$current_side = ( 0 === $count % 2 ) ? 'Right' : 'Left';
} else {
$current_side = ( 0 === $count % 2 ) ? 'Left' : 'Right';
}
} else {
$current_side = ( 0 === $count % 2 ) ? 'Left' : 'Right';
}
if ( 'Right' === $current_side ) {
$this->add_render_attribute( 'timeline_alignment' . $post_id, 'class', 'uael-day-left' );
$this->add_render_attribute( 'data_alignment' . $post_id, 'class', 'uael-timeline-left' );
} else {
$this->add_render_attribute( 'timeline_alignment' . $post_id, 'class', 'uael-day-right' );
$this->add_render_attribute( 'data_alignment' . $post_id, 'class', 'uael-timeline-right' );
}
$this->add_render_attribute( 'timeline_events' . $post_id, 'class', 'uael-events-new' );
$this->add_render_attribute( 'timeline_events_inner' . $post_id, 'class', 'uael-events-inner-new' );
$this->add_render_attribute( 'timeline_content' . $post_id, 'class', 'uael-content' );
?>
<div <?php echo wp_kses_post( $this->get_render_attribute_string( 'current_' . esc_attr( $post_id ) ) ); ?>>
<div <?php echo wp_kses_post( $this->get_render_attribute_string( 'data_alignment' . esc_attr( $post_id ) ) ); ?>>
<div class="uael-timeline-marker">
<span <?php echo wp_kses_post( $this->get_render_attribute_string( 'card_' . esc_attr( $post_id ) ) ); ?>>
<?php
if ( UAEL_Helper::is_elementor_updated() ) {
if ( ! empty( $settings['timeline_all_icon'] ) || ! empty( $settings['new_timeline_all_icon'] ) ) {
$icon_migrated = isset( $settings['__fa4_migrated']['new_timeline_all_icon'] );
$icon_is_new = ! isset( $settings['timeline_all_icon'] );
if ( $icon_migrated || $icon_is_new ) {
\Elementor\Icons_Manager::render_icon( $settings['new_timeline_all_icon'], array( 'aria-hidden' => 'true' ) );
} elseif ( ! empty( $settings['timeline_all_icon'] ) ) {
?>
<i class="<?php echo esc_attr( $settings['timeline_all_icon'] ); ?>" aria-hidden="true"></i>
<?php
}
}
} elseif ( ! empty( $settings['timeline_all_icon'] ) ) {
?>
<i class="<?php echo esc_attr( $settings['timeline_all_icon'] ); ?>" aria-hidden="true"></i>
<?php
}
?>
</span>
</div>
<div <?php echo wp_kses_post( $this->get_render_attribute_string( 'timeline_alignment' . esc_attr( $post_id ) ) ); ?>>
<div <?php echo wp_kses_post( $this->get_render_attribute_string( 'timeline_events' . esc_attr( $post_id ) ) ); ?>>
<?php if ( 'module' === $settings['post_timeline_cta_type'] ) { ?>
<a href="<?php the_permalink(); ?>">
<?php } ?>
<div <?php echo wp_kses_post( $this->get_render_attribute_string( 'timeline_events_inner' . esc_attr( $post_id ) ) ); ?>>
<?php if ( 'yes' === $settings['post_thumbnail'] && '' !== get_the_post_thumbnail_url( $post_id ) ) { ?>
<div class="uael-timeline-featured-img">
<?php echo wp_kses_post( $this->render_featured_image( $settings ) ); ?>
</div>
<?php } ?>
<div class="uael-timeline-date-hide uael-date-inner">
<div class="inner-date-new">
<?php if ( '' === $settings['post_timeline_date_type'] ) { ?>
<p><?php echo wp_kses_post( $this->render_date( $settings ) ); ?></p>
<?php } elseif ( 'updated' === $settings['post_timeline_date_type'] ) { ?>
<p><?php echo wp_kses_post( get_the_modified_date( '', $post_id ) ); ?></p>
<?php } elseif ( 'custom' === $settings['post_timeline_date_type'] ) { ?>
<p>
<?php
if ( '' !== $dynamic_date ) {
echo wp_kses_post( get_post_meta( $post_id, $dynamic_date, 'true' ) );
} else {
$custom_meta = apply_filters( 'uael_timeline_date_content', $post_id, $settings );
echo esc_attr( $custom_meta );
}
?>
</p>
<?php } ?>
</div>
</div>
<div <?php echo wp_kses_post( $this->get_render_attribute_string( 'timeline_content' . esc_attr( $post_id ) ) ); ?>>
<?php
if ( 'yes' === $settings['post_title'] && '' !== get_the_title( $post_id ) ) {
$heading_size_tag = UAEL_Helper::validate_html_tag( $settings['timeline_heading_tag'] );
?>
<div class="uael-timeline-heading-text">
<<?php echo esc_attr( $heading_size_tag ); ?> <?php echo wp_kses_post( $this->get_render_attribute_string( 'heading_setting_key' ) ); ?>><?php echo wp_kses_post( $this->render_title() ); ?></<?php echo esc_attr( $heading_size_tag ); ?>>
</div>
<?php } ?>
<?php if ( 'yes' === $settings['post_excerpt'] ) { ?>
<div class="uael-timeline-desc-content"><?php echo wp_kses_post( $this->render_excerpt( $settings ) ); ?></div>
<?php } ?>
<?php if ( 'link' === $settings['post_timeline_cta_type'] ) { ?>
<div class="uael-timeline-link-style">
<a href="<?php the_permalink(); ?>" class="uael-timeline-link">
<span><?php echo wp_kses_post( $dynamic['post_timeline_link_text'] ); ?></span>
</a>
</div>
<?php } ?>
</div>
<?php if ( 'yes' === $settings['show_card_arrow'] ) { ?>
<div class="uael-timeline-arrow"></div>
<?php } ?>
</div>
<?php if ( 'module' === $settings['post_timeline_cta_type'] ) { ?>
</a>
<?php } ?>
</div>
</div>
<?php if ( 'center' === $settings['timeline_align'] ) { ?>
<div class="uael-timeline-date-new">
<div class="uael-date-new">
<div class="inner-date-new">
<?php if ( '' === $settings['post_timeline_date_type'] ) { ?>
<p><?php echo wp_kses_post( $this->render_date( $settings ) ); ?></p>
<?php } elseif ( 'updated' === $settings['post_timeline_date_type'] ) { ?>
<p><?php echo wp_kses_post( get_the_modified_date( '', $post_id ) ); ?></p>
<?php } elseif ( 'custom' === $settings['post_timeline_date_type'] ) { ?>
<p>
<?php
if ( '' !== $dynamic_date ) {
echo wp_kses_post( get_post_meta( $post_id, $dynamic_date, 'true' ) );
} else {
$custom_meta = apply_filters( 'uael_timeline_date_content', $post_id, $settings );
echo esc_attr( $custom_meta );
}
?>
</p>
<?php } ?>
</div>
</div>
</div>
<?php } ?>
</div>
</div>
<?php
++$count;
++$index;
?>
<?php
}
wp_reset_postdata();
?>
</div>
<div <?php echo wp_kses_post( $this->get_render_attribute_string( 'line' ) ); ?>>
<div <?php echo wp_kses_post( $this->get_render_attribute_string( 'line-inner' ) ); ?>></div>
</div>
<?php
if ( 'yes' === $settings['timeline_infinite'] ) {
$this->render_pagination( $settings, $query, $query_obj );
}
?>
</div>
<?php
}
/**
* Add render attribute.
*
* Used to add attributes to a specific HTML element.
*
* The HTML tag is represented by the element parameter, then you need to
* define the attribute key and the attribute key. The final result will be:
* `<element attribute_key="attribute_value">`.
*
* Example usage:
*
* `$this->add_render_attribute( 'wrapper', 'class', 'custom-widget-wrapper-class' );`
* `$this->add_render_attribute( 'widget', 'id', 'custom-widget-id' );`
* `$this->add_render_attribute( 'button', [ 'class' => 'custom-button-class', 'id' => 'custom-button-id' ] );`
*
* @since 1.5.2
* @access public
*
* @param array|string $element The HTML element.
* @param array|string $key Optional. Attribute key. Default is null.
* @param array|string $value Optional. Attribute value. Default is null.
* @param bool $overwrite Optional. Whether to overwrite existing
* attribute. Default is false, not to overwrite.
*
* @return Element_Base Current instance of the element.
*/
public function add_render_attribute( $element, $key = null, $value = null, $overwrite = false ) {
if ( is_array( $element ) ) {
foreach ( $element as $element_key => $attributes ) {
$this->add_render_attribute( $element_key, $attributes, null, $overwrite );
}
return $this;
}
if ( is_array( $key ) ) {
foreach ( $key as $attribute_key => $attributes ) {
$this->add_render_attribute( $element, $attribute_key, $attributes, $overwrite );
}
return $this;
}
if ( empty( $this->_render_attributes[ $element ][ $key ] ) ) {
$this->_render_attributes[ $element ][ $key ] = array();
}
settype( $value, 'array' );
if ( $overwrite ) {
$this->_render_attributes[ $element ][ $key ] = $value;
} else {
$this->_render_attributes[ $element ][ $key ] = array_merge( $this->_render_attributes[ $element ][ $key ], $value );
}
return $this;
}
/**
* Get render attribute string.
*
* Used to retrieve the value of the render attribute.
*
* @since 1.5.2
* @access public
*
* @param array|string $element The element.
*
* @return string Render attribute string, or an empty string if the attribute
* is empty or not exist.
*/
public function get_render_attribute_string( $element ) {
if ( empty( $this->_render_attributes[ $element ] ) ) {
return '';
}
$render_attributes = $this->_render_attributes[ $element ];
$attributes = array();
foreach ( $render_attributes as $attribute_key => $attribute_values ) {
$attributes[] = sprintf( '%1$s="%2$s"', $attribute_key, esc_attr( implode( ' ', $attribute_values ) ) );
}
return implode( ' ', $attributes );
}
/**
* Render output on the frontend.
*
* Written in PHP and used to generate the final HTML.
*
* @param array $settings Settings Object.
* @param string $node_id Node ID.
* @param array $dynamic object.
* @since 1.5.2
* @access public
*/
public function render( $settings, $node_id, $dynamic ) {
self::$settings = $settings;
$dynamic = $dynamic;
self::$node_id = $node_id;
$query_obj = new Build_Post_Query( $settings, '' );
$query_obj->query_posts();
$query = $query_obj->get_query();
$this->get_body( $settings, $query, $query_obj, $dynamic );
}
}