Newscoop\Entity\Repository\SectionRepository::getAvailableSections PHP Метод

getAvailableSections() публичный Метод

Get list of publication sections
public getAvailableSections ( Publication $publication, Newscoop\Entity\Subscription $subscription, boolean $groupByLanguage = false ) : array
$publication Newscoop\Entity\Publication
$subscription Newscoop\Entity\Subscription
$groupByLanguage boolean
Результат array
    public function getAvailableSections(Publication $publication, Subscription $subscription, $groupByLanguage = false)
    {
        $em = $this->getEntityManager();
        $qb = $this->createQueryBuilder('s')->leftJoin('s.language', 'l')->where('s.publication = ?1');
        $groupBy = 's.number';
        if ($groupByLanguage) {
            $groupBy .= ', s.language';
        }
        $qb->groupBy($groupBy);
        $qb->setParameter(1, $publication);
        $sections = array();
        $subscribed = $subscription->getSections();
        foreach ($qb->getQuery()->getResult() as $section) {
            foreach ($subscribed as $pattern) {
                // filter subscribed sections
                if ($pattern->getSectionNumber() == $section->getNumber()) {
                    if ($groupByLanguage && !$pattern->getLanguageId()) {
                        // filter same section
                        continue 2;
                    }
                    if (!$groupByLanguage && $pattern->getLanguageId() == $section->getLanguageId()) {
                        // filter same section + language
                        continue 2;
                    }
                }
            }
            $sections[] = $section;
        }
        return $sections;
    }