<?php
namespace Cms\Widgets\FeedList;
use App\Doctrine\Repository\Feed\FeedSearch;
use App\Entity\Feed\Entry\AbstractContentEntry;
use App\Entity\System\School;
use App\Enum\ChannelEnum;
use Cms\ContentBundle\Service\FrontendRenderer;
use Cms\FrontendBundle\Service\ResolverManager;
use Cms\WidgetBundle\Model\AbstractWidgetProcessor;
use Cms\WidgetBundle\Model\WidgetObject;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
*
*/
final class WidgetProcessor extends AbstractWidgetProcessor
{
private const LIMITS__MAX = 12;
private const LIMITS__DEFAULT = 6;
protected ResolverManager $rm;
/**
* {@inheritdoc}
*/
public function setup(ContainerInterface $container): void
{
parent::setup($container);
$this->rm = $container->get(ResolverManager::class);
}
/**
* {@inheritdoc}
* @param FeedList $object
*/
public function process(WidgetObject $object, FrontendRenderer $renderer): array
{
// get the school
switch ($object->getSchool() ?: null) {
case null:
$school = null;
break;
case 'current':
$school = $this->rm->getSchoolResolver()->resolveSchoolByDepartment(
$renderer->peekGlobals()->getContainer(),
);
break;
default:
$school = $this->em->getRepository(School::class)->findOneByUlid($object->getSchool());
}
// determine if we should be pulling the district or not
$district = $object->getDistrict() ?: (!$school);
// query for feed items
$items = $this->em->getRepository(AbstractContentEntry::class)->findBySearch(
(new FeedSearch())
->setRoot($renderer->peekGlobals()->getSite())
->setDistrict($district)
->setSchools($school)
->setBoosted(true)
->setDeep(false)
->setChannels(ChannelEnum::WEBSITE),
min($object->getLimit() ?: self::LIMITS__DEFAULT, self::LIMITS__MAX),
);
return [
'school' => $school,
'department' => $school
? $school->getDepartment()
: $this->rm->getSchoolResolver()->resolveDistrictByTenant($renderer->peekGlobals()->getTenant())->getDepartment(),
'items' => $items,
];
}
}