Completed
Push — twig-extension ( a2f84c...43e457 )
by Quentin
03:31
created

ZoneOrmLoader::retrieveForTemplate()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 14
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 14
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 11
nc 1
nop 1
1
<?php
2
3
namespace Synapse\Cmf\Bundle\Loader\Orm;
4
5
use Majora\Framework\Loader\LazyLoaderInterface;
6
use Synapse\Cmf\Bundle\Entity\Orm\Template;
7
use Synapse\Cmf\Bundle\Entity\Orm\Zone;
8
use Synapse\Cmf\Framework\Theme\ZoneType\Loader\LoaderInterface as SynapseZoneTypeLoader;
9
use Synapse\Cmf\Framework\Theme\Zone\Loader\Doctrine\DoctrineLoader as SynapseZoneDoctrineLoader;
10
11
/**
12
 * Zone loader override to register lazy loaders.
13
 */
14
class ZoneOrmLoader extends SynapseZoneDoctrineLoader implements LazyLoaderInterface
15
{
16
    /**
17
     * @var SynapseZoneTypeLoader
18
     */
19
    protected $zoneTypeLoader;
20
21
    /**
22
     * Construct.
23
     *
24
     * @param SynapseZoneTypeLoader $zoneTypeLoader
25
     */
26
    public function __construct(SynapseZoneTypeLoader $zoneTypeLoader)
27
    {
28
        $this->zoneTypeLoader = $zoneTypeLoader;
29
    }
30
31
    /**
32
     * @see LazyLoaderInterface::getLoadingDelegates()
33
     */
34
    public function getLoadingDelegates()
35
    {
36
        return array(
37
            'zoneType' => function (Zone $zone) {
38
                return $this->zoneTypeLoader->retrieve($zone->getZoneTypeId());
39
            },
40
        );
41
    }
42
43
    /**
44
     * Retrieve all zones and components for given template
45
     *
46
     * @param Template $template
47
     *
48
     * @return ZoneCollection
49
     */
50
    public function retrieveForTemplate(Template $template)
51
    {
52
        return $this->toEntityCollection(
53
            $this->getEntityRepository()
54
                ->createQueryBuilder('zone')
55
                    ->select('zone', 'components')
56
                        ->leftJoin('zone.components', 'components')
57
                    ->where('zone.template = :template')
58
                        ->setParameter(':template', $template)
59
                    ->addOrderBy('components.ranking', 'asc')
60
                ->getQuery()
61
                    ->getResult()
62
        );
63
    }
64
}
65