Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
digitalascetic/notifications / Service / NotificationQueryFilter.php
Size: Mime:
<?php


namespace DigitalAscetic\NotificationsBundle\Service;


use DigitalAscetic\NotificationsBundle\Entity\Notification;
use DigitalAscetic\NotificationsBundle\Entity\NotificationObject;
use DigitalAscetic\QueryFilterBundle\QueryFilter\Doctrine\AbstractDoctrineQueryFilter;

class NotificationQueryFilter extends AbstractDoctrineQueryFilter
{
    /** @var int */
    private $receiverId;

    /** @var string */
    private $status;

    /** @var bool */
    private $pending;

    protected function applyFilter()
    {
        $alias = self::getBaseClassAlias();

        if ($this->receiverId) {
            $this->qb->andWhere($alias . '.receiver.id = :receiver')
                ->setParameter('receiver', $this->receiverId);
        }

        if ($this->status) {
            $this->qb->andWhere($alias . '.status = :status')
                ->setParameter('status', $this->status);
        }

        if ($this->pending) {
            $this->qb->andWhere($alias . '.status != :read')
                ->setParameter('read', Notification::STATUS_READ);
        }
    }

    protected function getBaseClass(): string
    {
        return Notification::class;
    }

    protected function getBaseClassAlias(): string
    {
        return Notification::ALIAS;
    }

    protected function getJoins(): array
    {
        $joins = parent::getJoins();

        return array_merge($joins, [
            ['type' => 'inner', 'prop' => self::getBaseClassAlias() . '.notificationObject', 'alias' => NotificationObject::ALIAS]
        ]);
    }

    /**
     * @return int
     */
    public function getReceiverId(): int
    {
        return $this->receiverId;
    }

    /**
     * @param int $receiverId
     */
    public function setReceiverId(int $receiverId): void
    {
        $this->receiverId = $receiverId;
    }

    /**
     * @return string
     */
    public function getStatus(): string
    {
        return $this->status;
    }

    /**
     * @param string $status
     */
    public function setStatus(string $status): void
    {
        $this->status = $status;
    }

    /**
     * @return bool
     */
    public function isPending(): bool
    {
        return $this->pending;
    }

    /**
     * @param bool $pending
     */
    public function setPending(bool $pending): void
    {
        $this->pending = $pending;
    }
}