?AlkantarClanX12
| Current Path : /home/r/a/n/rankinh/villavanille/wp-content/plugins/reviews-feed/class/Common/ |
| Current File : /home/r/a/n/rankinh/villavanille/wp-content/plugins/reviews-feed/class/Common/FeedDisplay.php |
<?php
/**
* Class FeedDisplay
*
* @since 1.0
*/
namespace SmashBalloon\Reviews\Common;
class FeedDisplay {
protected $feed;
protected $parser;
protected $translations;
public function __construct( Feed $feed, Parser $parser ) {
$this->feed = $feed;
$this->parser = $parser;
$settings = sbr_recursive_parse_args(get_option('sbr_settings', []), sbr_plugin_settings_defaults());
$this->translations = $settings['translations'];
}
public function with_wrap() {
$header_data = ! $this->feed->is_single_manual_review() ? $this->feed->get_header_data() : [];
$header_data = is_array( $header_data ) ? $header_data : [];
$posts = $this->feed->get_post_set_page();
$feed_id = $this->feed->get_feed_id();
$shortcode_atts = '{}';
$settings = $this->feed->get_settings();
$parser = $this->parser;
wp_enqueue_script( 'sbr_scripts' );
ob_start();
echo $this->custom_styles();
include sbr_get_feed_template_part( 'feed', $settings );
$html = ob_get_contents();
ob_get_clean();
return $html;
}
public function items_only( $page = 1 ) {
$posts = $this->feed->get_post_set_page( $page );
$feed_id = $this->feed->get_feed_id();
$shortcode_atts = '{}';
$settings = $this->feed->get_settings();
$parser = $this->parser;
ob_start();
$this->posts_loop( $posts, $settings );
$html = ob_get_contents();
ob_get_clean();
return $html;
}
public function custom_styles() {
$settings = $this->feed->get_settings();
$feed_id = $this->feed->get_feed_id();
ob_start();
?>
<style>
<?php echo '#' . sbr_container_id($feed_id); ?>{
--column-gutter : <?php echo isset( $settings['horizontalSpacing'] ) ? $settings['horizontalSpacing'] : 0 ?>px;
}
<?php echo $this->feed->get_feed_style(); ?>
</style>
<?php
$html = ob_get_contents();
ob_get_clean();
return $html;
}
public function render_post_elements( $post ) {
$settings = $this->feed->get_settings();
$allowed_files = array( 'author', 'text', 'rating' );
foreach ( $settings['postElements'] as $file_name ) {
if ( in_array( $file_name, $allowed_files, true ) ) {
include sbr_get_feed_template_part( 'post-elements/' . $file_name, $settings );
}
}
}
public function should_show( $element, $item = '' ) {
$settings = $this->feed->get_settings();
if ( $element === 'header' ) {
if ( empty( $item ) ) {
return ! empty( $settings['showHeader'] );
}
if ( in_array( $item, (array) $settings['headerContent'], true ) ) {
return true;
}
} elseif ( $element === 'author' ) {
if ( in_array( $item, (array) $settings['authorContent'], true ) ) {
return true;
}
}
return false;
}
public function get_header_heading_content() {
if( $this->feed->is_init_wpml() ){
return __( 'Reviews', 'reviews-feed' );
}
$settings = $this->feed->get_settings();
if ( ! empty( $settings['headerHeadingContent'] ) ) {
return $settings['headerHeadingContent'];
}
return __( 'Reviews', 'reviews-feed' );
}
public function get_header_button_text( ) {
return isset( $this->translations['writeReview'] ) && !$this->feed->is_init_wpml() ? $this->translations['writeReview'] : __( 'Write a Review', 'reviews-feed' );
}
public function get_review_link( $header_data ) {
$settings = $this->feed->get_settings();
if ( ! empty( $settings['headerButtonLinkTo'] ) && $settings['headerButtonLinkTo'] === 'external' && ! empty( $settings['headerButtonExternalLink'] ) ) {
$link = str_replace( array( 'https://', 'http://' ), '', $settings['headerButtonExternalLink'] );
return 'https://' . $link;
}
$header_data = isset( $header_data[0] ) ? $header_data[0] : $header_data;
$source_data = isset( $settings['sources'][0] ) ? $settings['sources'][0] : [];
return $this->parser->get_review_url(
$header_data,
$source_data
);
}
public function is_truncated_yelp_review( $post ) {
$text = $this->parser->get_text( $post );
if ( ! empty( $post['provider']['name'] ) && $post['provider']['name'] === 'yelp' ) {
if ( substr( $text, -3 ) === '...' ) {
return true;
}
}
return false;
}
public function more_link( $post ) {
if ( ! $this->is_truncated_yelp_review( $post ) ) {
return '';
}
if ( ! empty( $post['source']['url'] ) ) {
return $post['source']['url'];
}
}
public function get_review_text( $post ) {
if ( ! $this->is_truncated_yelp_review( $post ) ) {
return $this->parser->get_text( $post );
}
$text = $this->parser->get_text( $post );
// remove ellipsis
return substr( $text, 0, -3 );
}
public function posts_loop( $posts, $settings ) {
if (isset($settings['sortRandomEnabled']) && $settings['sortRandomEnabled'] === true) {
shuffle($posts);
}
foreach ( $posts as $post ) {
include sbr_get_feed_template_part( 'item', $settings );
}
}
public function star_rating_display( $post, $settings ) {
$star_rating = intval( $this->parser->get_rating($post) );
$return = '';
for ($i = 0; $i < 5; $i++) {
$iconClass = $star_rating - $i < 1 ? ' sb-item-rating-icon-dimmed' : '';
if ($star_rating - $i === 0.5) {
$return .= '<span class="sb-item-rating-icon sb-feed-item-icon-half">
<span class="sb-item-rating-icon sb-item-rating-icon-dimmed">' . DisplayElements::get_star_icon() . '</span>
<span class="sb-item-rating-icon-halfdimmed">' . DisplayElements::get_star_icon() . '</span>
</span>';
} else {
$return .= '<span class="sb-item-rating-icon ' . $iconClass . '">' . DisplayElements::get_star_icon() . '</span>';
}
}
return $return;
}
public function overall_star_rating_display( $business, $settings ) {
$star_rating = floatval( $this->parser->get_average_rating( $business ) );
$return = '';
for ( $i = 0; $i < 5 ; $i++ ) {
$iconClass = $star_rating - $i < 1 ? ' sb-item-rating-icon-dimmed' : '';
if($star_rating - $i < 1 && $star_rating - $i >= 0.5){
$return .= '<span class="sb-feed-item-icon sb-feed-item-icon-half">
<span class="sb-feed-header-icon sb-item-rating-icon-dimmed">' . DisplayElements::get_star_icon() . '</span>
<span class="sb-item-rating-icon-halfdimmed">' . DisplayElements::get_star_icon() . '</span>
</span>';
}else{
$return .= '<span class="sb-feed-header-icon ' . $iconClass . '">' . DisplayElements::get_star_icon() . '</span>';
}
}
return $return;
}
public function provider_icon_url( $post, $settings ) {
$provider = $this->parser->get_provider_name( $post ) ;
if ( ! empty( $provider ) ) {
return trailingslashit( SBR_PLUGIN_URL ) . 'assets/icons/' . $provider . '-provider.svg';
}
}
public function date( $post, $translations ) {
if( ! isset( $post['time'] ) || $post['time'] === null || !$post['time'] ){
return '';
}
$settings = $this->feed->get_settings();
$timestamp = $this->parser->get_time( $post );
$now = time();
$date_formats = self::get_date_formats();
if ( intval( $settings['dateFormat'] ) === 1 ) {
$second = $this->feed->is_init_wpml() ? __('second', 'reviews-feed') : $translations['second'];
$seconds = $this->feed->is_init_wpml() ? __('seconds', 'reviews-feed') : $translations['seconds'];
$minute = $this->feed->is_init_wpml() ? __('minute', 'reviews-feed') : $translations['minute'];
$minutes = $this->feed->is_init_wpml() ? __('minutes', 'reviews-feed') : $translations['minutes'];
$hour = $this->feed->is_init_wpml() ? __('hour', 'reviews-feed') : $translations['hour'];
$hours = $this->feed->is_init_wpml() ? __('hours', 'reviews-feed') : $translations['hours'];
$day = $this->feed->is_init_wpml() ? __('day', 'reviews-feed') : $translations['day'];
$days = $this->feed->is_init_wpml() ? __('days', 'reviews-feed') : $translations['days'];
$week = $this->feed->is_init_wpml() ? __('week', 'reviews-feed') : $translations['week'];
$weeks = $this->feed->is_init_wpml() ? __('weeks', 'reviews-feed') : $translations['weeks'];
$month = $this->feed->is_init_wpml() ? __('month', 'reviews-feed') : $translations['month'];
$months = $this->feed->is_init_wpml() ? __('months', 'reviews-feed') : $translations['months'];
$year = $this->feed->is_init_wpml() ? __('years', 'reviews-feed') : $translations['years'];
$years = $this->feed->is_init_wpml() ? __('years', 'reviews-feed') : $translations['years'];
$ago = $this->feed->is_init_wpml() ? __('ago', 'reviews-feed') : $translations['ago'];
$lengths = array("60", "60", "24", "7", "4.35", "12", "10");
$periods = array($second, $minute, $hour, $day, $week, $month, $year, "decade");
$periods_plural = array($seconds, $minutes, $hours, $days, $weeks, $months, $years, "decade");
// is it future date or past date
if ($now > $timestamp) {
$difference = $now - $timestamp;
$tense = $ago;
} else {
$difference = $timestamp - $now;
$tense = $ago;
}
for ($j = 0; $difference >= $lengths[$j] && $j < count($lengths) - 1; $j++) {
$difference /= $lengths[$j];
}
$difference = round($difference);
if ($difference != 1) {
$periods[$j] = $periods_plural[$j];
}
$date_str = "$difference $periods[$j] {$tense}";
} else {
if( $settings['dateFormat'] !== 'custom' ){
$date_str = date_i18n( $date_formats[ intval( $settings['dateFormat']) ], $timestamp );
}
}
$before_padding = '';
if ( ! empty( $settings['dateBeforeText'] ) ) {
$before_padding = ' ';
}
$after_padding = '';
if ( ! empty( $settings['dateAfterText'] ) ) {
$after_padding = ' ';
}
if ( $settings['dateFormat'] === 'custom' && !empty( $settings['dateCustomFormat'] ) ) {
$custom_date = $settings['dateCustomFormat'];
$custom_date = str_replace("{hide-start}", "<k>", $custom_date);
$custom_date = str_replace("{hide-end}", "</k>", $custom_date);
$date_str = date_i18n($custom_date, $timestamp);
}
return $settings['dateBeforeText'] . $before_padding . $date_str . $after_padding . $settings['dateAfterText'];
}
public static function get_date_formats(){
return [
2 => 'F jS, g:i a',
3 => 'F jS',
4=> 'D F jS',
5 => 'l F jS',
6 => 'D M jS, Y',
7=> 'l F jS, Y',
8=> 'l F jS, Y - g:i a',
9=> "l M jS, 'y",
10 => 'm.d.y',
18 => 'm.d.y - G:i',
11 => 'm/d/y',
12 => 'd.m.y',
19 => 'd.m.y - G:i',
13 => 'd/m/y',
14 => 'd-m-Y, G:i',
15 => 'jS F Y, G:i',
16 => 'd M Y, G:i',
17 => 'l jS F Y, G:i',
18 => 'Y-m-d',
];
}
public function feed_classes() {
$settings = $this->feed->get_settings();
$classes = array();
if ( $settings['layout'] === 'masonry' ) {
$classes[] = 'sb-cols-' . absint( $settings[ $settings['layout'] . "DesktopColumns"] );
$classes[] = 'sb-colstablet-' . absint( $settings[ $settings['layout'] . "TabletColumns"] );
$classes[] = 'sb-colsmobile-' . absint( $settings[ $settings['layout'] . "MobileColumns"] );
}
if ($settings['layout'] === 'grid') {
$classes[] = 'sb-grid-wrapper';
}
return implode( ' ', $classes );
}
public function item_classes( $post ) {
$classes = array();
$id = $this->parser->get_id( $post );
$classes[] = 'sbr-item-' . $id;
if ( ! empty( $post['provider']['name'] ) ) {
$classes[] = 'sbr-provider-' . $post['provider']['name'];
}
return implode( ' ', $classes );
}
public function should_show_header() {
$settings = $this->feed->get_settings();
}
public function misc_atts() {
$atts = '';
$settings = $this->feed->get_settings();
$misc_atts = array();
$misc_atts['num'] = array(
'desktop' => absint( $settings['numPostDesktop'] ),
'tablet' => absint( $settings['numPostTablet'] ),
'mobile' => absint( $settings['numPostMobile'] ),
);
$misc_atts['flagLastPage'] = $this->feed->is_last_page( 1 );
$misc_atts['contentLength'] = $settings['contentLength'];
$atts = ' data-misc="' . esc_attr( wp_json_encode( $misc_atts ) ) . '"';
if ($settings['layout'] === 'grid') {
$atts .= ' data-grid-columns="'.esc_attr( $settings['gridDesktopColumns'] ).'" data-grid-tablet-columns="' . esc_attr($settings['gridTabletColumns']) . '" data-grid-mobile-columns="' . esc_attr($settings['gridMobileColumns']) . '" ';
}
return $atts;
}
public function error_html() {
if ( ! sbr_current_user_can( 'manage_reviews_feed_options' ) ) {
return '';
}
$errors = $this->feed->get_errors();
if ( empty( $errors ) ) {
return '';
}
ob_start();
?>
<div class="sbr-feed-error">
<span><?php _e('This error message is only visible to WordPress admins', 'reviews-feed' ); ?></span><br />
<?php foreach ( $errors as $error ) : ?>
<p><strong><?php echo wp_kses_post( $error['message'] ); ?></strong>
<p><?php echo wp_kses_post( $error['directions'] ); ?></p>
<?php endforeach; ?>
</div>
<?php
$html = ob_get_contents();
ob_get_clean();
return $html;
}
public function get_header_reviews_number( $number )
{
$the_text = isset($this->translations['reviewsHeader']) && !$this->feed->is_init_wpml() ? $this->translations['reviewsHeader'] : __('Over %s Reviews', 'sb-customizer');
return !empty($number) ? str_replace('%s', $number, $the_text) : '';
}
}