258 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			258 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
/*
 | 
						|
 * This file is part of the package thucke/th-rating.
 | 
						|
 *
 | 
						|
 * For the full copyright and license information, please read the
 | 
						|
 * LICENSE file that was distributed with this source code.
 | 
						|
 */
 | 
						|
 | 
						|
namespace WapplerSystems\BookmarksLikesRatings\Domain\Model;
 | 
						|
 | 
						|
use WapplerSystems\BookmarksLikesRatings\Domain\Repository\RatingRepository;
 | 
						|
use WapplerSystems\BookmarksLikesRatings\Domain\Repository\StepconfRepository;
 | 
						|
use WapplerSystems\BookmarksLikesRatings\Service\ExtensionHelperService;
 | 
						|
use TYPO3\CMS\Extbase\Annotation as Extbase;
 | 
						|
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
 | 
						|
use TYPO3\CMS\Extbase\Persistence\ObjectStorage;
 | 
						|
 | 
						|
/**
 | 
						|
 * Aggregate object for rating of content objects
 | 
						|
 *
 | 
						|
 * @version  $Id:$
 | 
						|
 * @copyright  Copyright belongs to the respective authors
 | 
						|
 * @license  http://opensource.org/licenses/gpl-license.php GNU Public License, version 2
 | 
						|
 * @entity
 | 
						|
 */
 | 
						|
class Ratingobject extends AbstractEntity
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Table name of the cObj
 | 
						|
     * Defaults to Typo3 tablename of pages
 | 
						|
     *
 | 
						|
     * @Extbase\Validate("StringLength", options={"minimum": 3})
 | 
						|
     * @Extbase\Validate("StringLength", options={"maximum": 60})
 | 
						|
     * @Extbase\Validate("NotEmpty")
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $ratetable;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Fieldname within the table of the cObj
 | 
						|
     * Defaults to the field 'uid'
 | 
						|
     *
 | 
						|
     * @Extbase\Validate("StringLength", options={"minimum": 3})
 | 
						|
     * @Extbase\Validate("StringLength", options={"maximum": 60})
 | 
						|
     * @Extbase\Validate("NotEmpty")
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $ratefield;
 | 
						|
 | 
						|
    /**
 | 
						|
     * The stepconfs of this object
 | 
						|
     *
 | 
						|
     * @Extbase\ORM\Lazy
 | 
						|
     * @Extbase\ORM\Cascade("remove")
 | 
						|
     * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\WapplerSystems\BookmarksLikesRatings\Domain\Model\Stepconf>
 | 
						|
     */
 | 
						|
    protected $stepconfs;
 | 
						|
 | 
						|
    /**
 | 
						|
     * The ratings of this object
 | 
						|
     *
 | 
						|
     * @Extbase\ORM\Lazy
 | 
						|
     * @Extbase\ORM\Cascade("remove")
 | 
						|
     * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\WapplerSystems\BookmarksLikesRatings\Domain\Model\Rating>
 | 
						|
     */
 | 
						|
    protected $ratings;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var \WapplerSystems\BookmarksLikesRatings\Domain\Repository\StepconfRepository
 | 
						|
     */
 | 
						|
    protected $stepconfRepository;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param \WapplerSystems\BookmarksLikesRatings\Domain\Repository\StepconfRepository $stepconfRepository
 | 
						|
     */
 | 
						|
    public function injectStepconfRepository(StepconfRepository $stepconfRepository)
 | 
						|
    {
 | 
						|
        $this->stepconfRepository = $stepconfRepository;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var  \WapplerSystems\BookmarksLikesRatings\Service\ExtensionHelperService
 | 
						|
     */
 | 
						|
    protected $extensionHelperService;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param \WapplerSystems\BookmarksLikesRatings\Service\ExtensionHelperService $extensionHelperService
 | 
						|
     */
 | 
						|
    /** @noinspection PhpUnused */
 | 
						|
    public function injectExtensionHelperService(ExtensionHelperService $extensionHelperService)
 | 
						|
    {
 | 
						|
        $this->extensionHelperService = $extensionHelperService;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Constructs a new rating object
 | 
						|
     * @param string $ratetable The rating objects table name
 | 
						|
     * @param string $ratefield The rating objects field name
 | 
						|
     * @Extbase\Validate("StringLength", options={"minimum": 3}, param="ratetable")
 | 
						|
     * @Extbase\Validate("StringLength", options={"maximum": 60}, param="ratetable")
 | 
						|
     * @Extbase\Validate("StringLength", options={"minimum": 3}, param="ratefield")
 | 
						|
     * @Extbase\Validate("StringLength", options={"maximum": 60}, param="ratefield")
 | 
						|
     */
 | 
						|
    public function __construct($ratetable = null, $ratefield = null)
 | 
						|
    {
 | 
						|
        if ($ratetable) {
 | 
						|
            $this->setRatetable($ratetable);
 | 
						|
        }
 | 
						|
        if ($ratefield) {
 | 
						|
            $this->setRatefield($ratefield);
 | 
						|
        }
 | 
						|
        $this->initializeObject();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Initializes a new ratingobject
 | 
						|
     */
 | 
						|
    public function initializeObject()
 | 
						|
    {
 | 
						|
        //Initialize rating storage if ratingobject is new
 | 
						|
        if (!is_object($this->ratings)) {
 | 
						|
            $this->ratings = new ObjectStorage();
 | 
						|
        }
 | 
						|
        //Initialize stepconf storage if ratingobject is new
 | 
						|
        if (!is_object($this->stepconfs)) {
 | 
						|
            $this->stepconfs = new ObjectStorage();
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the rating table name
 | 
						|
     *
 | 
						|
     * @param string $ratetable
 | 
						|
     */
 | 
						|
    public function setRatetable($ratetable)
 | 
						|
    {
 | 
						|
        $this->ratetable = $ratetable;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Gets the rating table name
 | 
						|
     *
 | 
						|
     * @return string Rating object table name
 | 
						|
     */
 | 
						|
    public function getRatetable()
 | 
						|
    {
 | 
						|
        return $this->ratetable;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the rating field name
 | 
						|
     *
 | 
						|
     * @param string $ratefield
 | 
						|
     */
 | 
						|
    public function setRatefield($ratefield)
 | 
						|
    {
 | 
						|
        $this->ratefield = $ratefield;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the rating field name
 | 
						|
     *
 | 
						|
     * @return string Rating object field name
 | 
						|
     */
 | 
						|
    public function getRatefield()
 | 
						|
    {
 | 
						|
        return $this->ratefield;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a rating to this object
 | 
						|
     *
 | 
						|
     * @param \WapplerSystems\BookmarksLikesRatings\Domain\Model\Rating $rating
 | 
						|
     */
 | 
						|
    /** @noinspection PhpUnused */
 | 
						|
    public function addRating(Rating $rating)
 | 
						|
    {
 | 
						|
        $this->ratings->attach($rating);
 | 
						|
        $this->extensionHelperService->persistRepository(RatingRepository::class, $rating);
 | 
						|
        $this->extensionHelperService->clearDynamicCssFile();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Remove a rating from this object
 | 
						|
     *
 | 
						|
     * @param \WapplerSystems\BookmarksLikesRatings\Domain\Model\Rating $rating The rating to be removed
 | 
						|
     */
 | 
						|
    public function removeRating(Rating $rating): void
 | 
						|
    {
 | 
						|
        $this->ratings->detach($rating);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Remove all ratings from this object
 | 
						|
     */
 | 
						|
    public function removeAllRatings(): void
 | 
						|
    {
 | 
						|
        $this->ratings = new ObjectStorage();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a stepconf to this object
 | 
						|
     *
 | 
						|
     * @param \WapplerSystems\BookmarksLikesRatings\Domain\Model\Stepconf $stepconf
 | 
						|
     */
 | 
						|
    public function addStepconf(Stepconf $stepconf): void
 | 
						|
    {
 | 
						|
        if (!$this->stepconfRepository->existStepconf($stepconf)) {
 | 
						|
            $this->stepconfs->attach($stepconf);
 | 
						|
            $this->extensionHelperService->persistRepository(StepconfRepository::class, $stepconf);
 | 
						|
            $this->extensionHelperService->clearDynamicCssFile();
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets all ratings of this ratingobject
 | 
						|
     *
 | 
						|
     * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\WapplerSystems\BookmarksLikesRatings\Domain\Model\Stepconf> $stepconfs
 | 
						|
     *        The step configurations for this ratingobject
 | 
						|
     */
 | 
						|
    public function setStepconfs(ObjectStorage $stepconfs)
 | 
						|
    {
 | 
						|
        $this->stepconfs = $stepconfs;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns all ratings in this object
 | 
						|
     *
 | 
						|
     * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\WapplerSystems\BookmarksLikesRatings\Domain\Model\Stepconf>
 | 
						|
     */
 | 
						|
    public function getStepconfs()
 | 
						|
    {
 | 
						|
        return clone $this->stepconfs;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets all ratings of this ratingobject
 | 
						|
     *
 | 
						|
     * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\WapplerSystems\BookmarksLikesRatings\Domain\Model\Rating> $ratings
 | 
						|
     *          The ratings of the organization
 | 
						|
     */
 | 
						|
    public function setRatings(ObjectStorage $ratings)
 | 
						|
    {
 | 
						|
        $this->ratings = $ratings;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns all ratings in this object
 | 
						|
     *
 | 
						|
     * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\WapplerSystems\BookmarksLikesRatings\Domain\Model\Rating>
 | 
						|
     */
 | 
						|
    public function getRatings()
 | 
						|
    {
 | 
						|
        return clone $this->ratings;
 | 
						|
    }
 | 
						|
}
 |