Opal-Estate-Pro/inc/rating/class-opalestate-rating.php
2019-09-10 11:27:33 +07:00

103 lines
3.1 KiB
PHP
Executable File

<?php
class Opalestate_Rating {
public function __construct() {
$this->includes();
$this->process();
// Template loader.
add_filter( 'comments_template', [ $this, 'comments_template_loader' ] );
// Add shortcode User property reviews.
add_shortcode( 'opalestate_user_property_reviews', [ $this, 'property_reviews_template' ] );
add_filter( 'opalestate_user_content_reviews_page', [ $this, 'property_reviews_template' ] );
}
public function includes() {
require_once 'class-opalestate-rating-features-posttype.php';
require_once 'class-opalestate-rating-metabox.php';
require_once 'class-opalestate-rating-helper.php';
require_once 'class-opalestate-rating-init.php';
require_once 'rating-functions.php';
require_once 'rating-hook-functions.php';
}
public static function get_rating_supports() {
return [
// Support property rating.
'opalestate_property' => [
'post_type' => 'opalestate_property',
'features_cpt' => 'opalestate_rating_ft',
'prefix' => OPALESTATE_PROPERTY_PREFIX,
],
// Support agency rating.
'opalestate_agency' => [
'post_type' => 'opalestate_agency',
'features_cpt' => 'opalestate_agency_ft',
'prefix' => OPALESTATE_AGENCY_PREFIX,
],
// Support agent rating.
'opalestate_agent' => [
'post_type' => 'opalestate_agent',
'features_cpt' => 'opalestate_agent_ft',
'prefix' => OPALESTATE_AGENT_PREFIX,
],
];
}
public function process() {
$rating_supports = static::get_rating_supports();
foreach ( $rating_supports as $key => $support ) {
new Opalestate_Rating_Init( $support['post_type'], $support['features_cpt'], $support['prefix'] );
}
}
/**
* Load comments template.
*
* @param string $template template to load.
* @return string
*/
public function comments_template_loader( $template ) {
$supports = static::get_rating_supports();
$post_type_supports = array_keys( $supports );
if ( ! in_array( get_post_type(), $post_type_supports ) ) {
return $template;
}
$check_dirs = [
trailingslashit( get_stylesheet_directory() ) . 'opalestate/rating/',
trailingslashit( get_template_directory() ) . 'opalestate/rating/',
trailingslashit( get_stylesheet_directory() ),
trailingslashit( get_template_directory() ),
trailingslashit( OPALESTATE_PLUGIN_DIR ) . 'templates/rating/',
];
foreach ( $check_dirs as $dir ) {
$file = 'opalestate-ratings.php';
if ( file_exists( trailingslashit( $dir ) . $file ) ) {
return trailingslashit( $dir ) . $file;
}
}
}
public function property_reviews_template() {
if ( ! is_user_logged_in() || ! $current_user_id = get_current_user_id() ) {
return '';
}
$args = [
'post_author__in' => [ $current_user_id ],
'status' => 'approve',
'type' => 'property_review',
];
$comments = get_comments( $args );
return opalestate_load_template_path( 'user/property-ratings', [ 'comments' => $comments ] );
}
}
new Opalestate_Rating();