Current File : /home/n742ef5/royalanteam.com/wp-content/plugins/myhome-core/framework/app/Queries/QueryReviews.php
<?php

namespace Tangibledesign\Framework\Queries;

use Tangibledesign\Framework\Factories\BasePostFactory;
use Tangibledesign\Framework\Models\Review;

class QueryReviews extends QueryPosts
{
    protected string $postType = 'review';

    protected bool $prefixPostType = true;

    public function getPostType(): string
    {
        return tdf_prefix() . '_review';
    }

    protected function getFactory(): BasePostFactory
    {
        return tdf_review_factory();
    }

    public function model(int $modelId, string $reviewType): QueryReviews
    {
        $this->metaQuery[] = [
            'key' => Review::MODEL,
            'value' => apply_filters(tdf_prefix() . '/query/reviews/model', $modelId, $reviewType),
        ];

        if ($reviewType === tdf_model_post_type()) {
            $this->metaQuery[] = [
                'relation' => 'OR',
                [
                    'key' => Review::TYPE,
                    'value' => $reviewType,
                ],
                [
                    'key' => Review::TYPE,
                    'compare' => 'NOT EXISTS'
                ]
            ];
        } else {
            $this->metaQuery[] = [
                'key' => Review::TYPE,
                'value' => $reviewType,
            ];
        }

        return $this;
    }

    public function orderByThumbUp(): QueryReviews
    {
        $this->orderByMeta(Review::THUMB_UP_COUNT);

        return $this;
    }

    public function filterByRating(int $rating): QueryReviews
    {
        $this->metaQuery[] = [
            'key' => Review::RATING,
            'value' => $rating,
        ];

        return $this;
    }
}