<?php /** * Display single reviews (comments) */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } if ( ! comments_open() ) { return; } $post_id = get_the_ID(); $post_type = get_post_type( $post_id ); $supports = Opalestate_Rating::get_rating_supports(); if ( ! isset( $supports[ $post_type ] ) ) { return; } switch ( $supports[ $post_type ]['post_type'] ) { case 'opalestate_property': global $property; $object = $property; break; case 'opalestate_agency': global $agency; $object = $agency; break; case 'opalestate_agent': global $agent; $object = $agent; break; } if( !is_object($object) ) { return; } $cpt_feature = $supports[ $post_type ]['features_cpt']; $features = Opalestate_Rating_Helper::get_features( $cpt_feature ); $counts = [ 5 => 0, 4 => 0, 3 => 0, 2 => 0, 1 => 0, ]; $average_stats = []; if ( $features ) { foreach ( $features as $feature_slug => $feature_title ) { $average_stats[ $feature_slug ] = '0.00'; } } $count = $object->get_rating_counts(); $counts = $object->get_rating_count_stats() ? $object->get_rating_count_stats() : $counts; $average = $object->get_average_rating(); $average_stats = $object->get_rating_average_stats() ? $object->get_rating_average_stats() : $average_stats; ?> <div id="reviews" class="opalestate-box-content opalestate-reviews"> <h4 class="outbox-title opalestate-reviews-title" id="block-reviews"> <?php esc_html_e( 'Ratings & Reviews', 'opalestate-pro' ); ?> </h4> <div class="opalestate-box"> <div id="comments"> <div class="opalestate-rating-header"> <div class="opalestate-rating-percent"> <?php if ( $counts ) : ?> <?php foreach ( $counts as $key => $value ) : ?> <?php $pc = $count == 0 ? 0 : ( ( $value / $object->get_rating_counts() ) * 100 ); ?> <div class="opalestate-rating-percent__item"> <label class="opalestate-rating-percent__label"> <span class="star-number"> <?php echo absint( $key ); ?> </span> <span class="star-text"> <?php esc_html_e( 'star', 'opalestate-pro' ); ?> </span> </label> <div class="opalestate-process-bar"> <div class="opalestate-process-bar__item" style="width: <?php echo esc_attr( $pc ); ?>%;"> <?php echo round( $pc, 2 ); ?>% </div> </div> <span class="opalestate-process-text"> <?php echo round( $pc, 0 ); ?>% </span> </div> <?php endforeach; ?> <?php endif; ?> </div> <div class="opalestate-overall"> <div class="opalestate-overall__info"> <div class="opalestate-overall__point"> <h3 class="point-number"> <?php echo esc_html( $object->get_average_rating() ? $object->get_average_rating() : '0.00' ); ?> </h3> </div> <div class="opalestate-overall__star"> <h5 class="opalestate-overall__heading"> <?php esc_html_e( 'Overall rating', 'opalestate-pro' ); ?> </h5> <?php if ( $average ) { echo opalestate_get_rating_html( $average ); // WPCS: XSS ok. } ?> <span class="opalestate-overall__rating-count <?php echo ! $count ? 'no-rating' : ''; ?>"> <?php printf( /* translators: %s number of ratings */ _nx( '%s rating', '%s ratings', absint( $count ), 'rating numbers', 'opalestate-pro' ), number_format_i18n( absint( $count ) ) ); ?> </span> <?php if ( $count ) : ?> <span class="opalestate-overall__rating-desc"> <?php esc_html_e( 'based on all ratings', 'opalestate-pro' ); ?> </span> <?php endif; ?> </div> </div> <?php if ( $average_stats ) : ?> <div class="opalestate-overall-features"> <?php foreach ( $average_stats as $feature_slug => $average_stars ) : ?> <?php $args = [ 'name' => $feature_slug, 'post_type' => $cpt_feature, 'post_status' => 'publish', 'numberposts' => 1, ]; $feature = get_posts( $args ); if ( ! $feature || ! isset( $feature[0] ) ) { continue; } ?> <div class="opalestate-overall-features__item"> <label class="opalestate-overall-features__label"> <?php echo esc_html( $feature[0]->post_title ) ?> </label> <div class="opalestate-overall-features__percent"> <?php echo number_format( $average_stars / 5 * 100, 2 ); ?>% </div> </div> <?php endforeach; ?> </div> <?php endif; ?> </div> </div> <h5 class="opalestate-review-count"> <?php printf( /* translators: %s number of reviews */ _nx( '%s review', '%s reviews', absint( $object->get_review_count() ), 'review numbers', 'opalestate-pro' ), number_format_i18n( absint( $object->get_review_count() ) ) ); ?> </h5> <?php if ( have_comments() ) : ?> <ol class="commentlist"> <?php wp_list_comments( apply_filters( $post_type . '_review_list_args', [ 'callback' => 'opalestate_comments' ] ) ); ?> </ol> <?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : echo '<nav class="opalestate-pagination">'; paginate_comments_links( apply_filters( 'opalestate_comment_pagination_args', [ 'prev_text' => '←', 'next_text' => '→', 'type' => 'list', ] ) ); echo '</nav>'; endif; ?> <?php else : ?> <p class="opalestate-noreviews"><?php esc_html_e( 'There are no reviews yet.', 'opalestate-pro' ); ?></p> <?php endif; ?> </div> <?php if ( is_user_logged_in() ) : ?> <?php $current_user_id = absint( get_current_user_id() );?> <?php if ( $current_user_id !== absint( $post->post_author ) ) : ?> <?php $count_comment_reviewed = get_comments( [ 'author__in' => $current_user_id, 'post_id' => $object->get_id(), 'status' => 'approve', 'count' => true, ] ); ?> <?php if ( ! $count_comment_reviewed ) : ?> <div id="review_form_wrapper"> <div id="review_form"> <?php $commenter = wp_get_current_commenter(); $comment_form = [ /* translators: %s is property title */ 'title_reply' => have_comments() ? esc_html__( 'Add a review', 'opalestate-pro' ) : sprintf( esc_html__( 'Be the first to review “%s”', 'opalestate-pro' ), get_the_title() ), /* translators: %s is property title */ 'title_reply_to' => esc_html__( 'Leave a Reply to %s', 'opalestate-pro' ), 'title_reply_before' => '<h5 id="reply-title" class="comment-reply-title">', 'title_reply_after' => '</h5>', 'comment_notes_after' => '', 'fields' => [ 'author' => '<p class="comment-form-author"><label for="author">' . esc_html__( 'Name', 'opalestate-pro' ) . ' <span class="required">*</span></label> ' . '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30" required /></p>', 'email' => '<p class="comment-form-email"><label for="email">' . esc_html__( 'Email', 'opalestate-pro' ) . ' <span class="required">*</span></label> ' . '<input id="email" name="email" type="email" value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30" required /></p>', ], 'label_submit' => esc_html__( 'Submit', 'opalestate-pro' ), 'logged_in_as' => '', 'comment_field' => '', ]; if ( $features ) { $feature_inputs = ''; foreach ( $features as $feature_slug => $feature_title ) { $feature_inputs .= '<div class="comment-form-rating"><label for="' . $cpt_feature . '_' . $feature_slug . '">' . esc_html( $feature_title ) . '</label><select class="opalestate_rating" name="' . $cpt_feature . '_' . $feature_slug . '" id="' . $cpt_feature . '_' . $feature_slug . '" required> <option value="">' . esc_html__( 'Rate…', 'opalestate-pro' ) . '</option> <option value="5">' . esc_html__( 'Perfect', 'opalestate-pro' ) . '</option> <option value="4">' . esc_html__( 'Good', 'opalestate-pro' ) . '</option> <option value="3">' . esc_html__( 'Average', 'opalestate-pro' ) . '</option> <option value="2">' . esc_html__( 'Not that bad', 'opalestate-pro' ) . '</option> <option value="1">' . esc_html__( 'Very poor', 'opalestate-pro' ) . '</option> </select></div>'; } $comment_form['comment_field'] = $feature_inputs; } else { $comment_form['comment_field'] = '<div class="comment-form-rating"><label for="opalestate_rating">' . esc_html__( 'Your rating', 'opalestate-pro' ) . '</label><select class="opalestate_rating" name="opalestate_rating" id="opalestate_rating" required> <option value="">' . esc_html__( 'Rate…', 'opalestate-pro' ) . '</option> <option value="5">' . esc_html__( 'Perfect', 'opalestate-pro' ) . '</option> <option value="4">' . esc_html__( 'Good', 'opalestate-pro' ) . '</option> <option value="3">' . esc_html__( 'Average', 'opalestate-pro' ) . '</option> <option value="2">' . esc_html__( 'Not that bad', 'opalestate-pro' ) . '</option> <option value="1">' . esc_html__( 'Very poor', 'opalestate-pro' ) . '</option> </select></div>'; } $comment_form['comment_field'] .= '<p class="comment-form-comment"><label for="comment">' . esc_html__( 'Your review', 'opalestate-pro' ) . ' <span class="required">*</span></label><textarea id="comment" name="comment" cols="45" rows="8" required></textarea></p>'; comment_form( apply_filters( 'opalestate_property_review_comment_form_args', $comment_form ) ); ?> </div> </div> <?php else : ?> <p class="opalestate-reviewed-notice"><?php esc_html_e( 'Your review already exists!', 'opalestate-pro' ); ?></p> <?php endif; ?> <?php else : ?> <p class="opalestate-reviewed-notice"><?php esc_html_e( 'You cannot write review on your own post.', 'opalestate-pro' ); ?></p> <?php endif; ?> <?php else : ?> <p class="opalestate-login-required"> <?php esc_html_e( 'You must be logged in to review.', 'opalestate-pro' ); ?> <a href="#" class="opalestate-need-login"><?php esc_html_e( 'Click here to login', 'opalestate-pro' ); ?></a> </p> <?php endif; ?> <div class="clear"></div> </div> </div>