Current File : /home/n742ef5/royalanteam.com/wp-content/plugins/myhome-core/src/Widgets/User/UserReviewsWidget.php
<?php

namespace Tangibledesign\MyHome\Widgets\User;

use Tangibledesign\Framework\Interfaces\HasReviewsInterface;
use Tangibledesign\Framework\Models\Review;
use Tangibledesign\Framework\Widgets\Helpers\BaseUserWidget;
use Tangibledesign\MyHome\Traits\Widgets\RatingContentControlsTrait;
use Tangibledesign\MyHome\Traits\Widgets\ReviewsContentControlsTrait;
use Tangibledesign\MyHome\Traits\Widgets\ReviewsStyleControlsTrait;

class UserReviewsWidget extends BaseUserWidget
{
    use ReviewsContentControlsTrait;
    use ReviewsStyleControlsTrait;
    use RatingContentControlsTrait;

    public function getKey(): string
    {
        return 'user_reviews';
    }

    public function getName(): string
    {
        return esc_html__('User Reviews', 'myhome-core');
    }

    protected function loadTemplate(): void
    {
        get_template_part('templates/widgets/shared/reviews/reviews_widget');
    }

    public function get_style_depends(): array
    {
        return ['photo-swipe'];
    }

    protected function register_controls(): void
    {
        $this->addContentSection();

        $this->addRatingContentSection();

        $this->addReviewsBaseListStyleSection();

        $this->addReviewStyleSection();

        $this->addReviewFormStyleSection();

        $this->addReviewsModalStyleSection();

        $this->addUserAvatarPlaceholderStyleSection();

        $this->addVisibilitySection();
    }

    private function addContentSection(): void
    {
        $this->startContentControlsSection();

        $this->addInitialReviewsNumberControl();

        $this->addReviewsLimitControl();

        $this->addInitialRatingControl();

        $this->endControlsSection();
    }

    public function getReviewType(): string
    {
        return Review::TYPE_USER;
    }

    public function getReviewSubjectId(): int
    {
        $user = $this->getUser();
        if (!$user) {
            return 0;
        }

        return $user->getId();
    }

    public function getReviewSubject(): ?HasReviewsInterface
    {
        $user = $this->getUser();

        return $user instanceof HasReviewsInterface ? $user : null;
    }
}