1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Kaliop\eZObjectWrapperBundle\Core; |
4
|
|
|
|
5
|
|
|
use eZ\Publish\API\Repository\Values\Content\Location; |
6
|
|
|
use eZ\Publish\API\Repository\Values\Content\Content; |
7
|
|
|
use eZ\Publish\API\Repository\Repository as eZRepository; |
8
|
|
|
use Kaliop\eZObjectWrapperBundle\Core\Traits\LoggingEntity; |
9
|
|
|
use Kaliop\eZObjectWrapperBundle\Core\Traits\EntityManagerAwareEntity; |
10
|
|
|
|
11
|
|
|
class Entity implements EntityInterface |
12
|
|
|
{ |
13
|
|
|
use LoggingEntity; |
14
|
|
|
use EntityManagerAwareEntity; |
15
|
|
|
|
16
|
|
|
/** |
17
|
|
|
* @var \eZ\Publish\API\Repository\Repository $repository |
18
|
|
|
*/ |
19
|
|
|
protected $repository; |
20
|
|
|
/** |
21
|
|
|
* @var \eZ\Publish\API\Repository\Values\Content\Location $location |
22
|
|
|
*/ |
23
|
|
|
protected $location; |
24
|
|
|
/** |
25
|
|
|
* @var \eZ\Publish\API\Repository\Values\Content\Content $content |
26
|
|
|
*/ |
27
|
|
|
protected $content; |
28
|
|
|
|
29
|
|
|
protected $settings; |
30
|
|
|
|
31
|
|
|
/** |
32
|
|
|
* @param eZRepository $repository |
33
|
|
|
* @param Content $content |
34
|
|
|
* @param Location $location |
35
|
|
|
* @param array $settings used to pass to the Entity instance anything that would be done via DIC if it was a service |
36
|
|
|
* @throws \InvalidArgumentException |
37
|
|
|
*/ |
38
|
10 |
|
public function __construct(eZRepository $repository, Content $content=null, Location $location=null, array $settings = array()) |
39
|
|
|
{ |
40
|
10 |
|
if ($content == null && $location == null) { |
41
|
|
|
throw new \InvalidArgumentException('Trying to create Entity with no content or location'); |
42
|
|
|
} |
43
|
10 |
|
if ($content != null && $location != null) { |
44
|
|
|
if ($location->contentId != $content->id) |
45
|
|
|
throw new \InvalidArgumentException('Trying to create Entity with mismatching content and location'); |
46
|
|
|
} |
47
|
10 |
|
$this->content = $content; |
48
|
10 |
|
$this->location = $location; |
49
|
10 |
|
$this->repository = $repository; |
50
|
10 |
|
$this->settings = $this->validateSettings($settings); |
51
|
10 |
|
} |
52
|
|
|
|
53
|
|
|
/** |
54
|
|
|
* Called from the constructor, with the settings received from the caller. |
55
|
|
|
* Subclasses can implement checking here, or merge the received settings with other data, using f.e. the Symfony |
56
|
|
|
* OptionsResolver component (see http://symfony.com/doc/current/components/options_resolver.html). |
57
|
|
|
* |
58
|
|
|
* @param array $settings |
59
|
|
|
* @return array |
60
|
|
|
*/ |
61
|
10 |
|
protected function validateSettings(array $settings) |
62
|
|
|
{ |
63
|
10 |
|
return $settings; |
64
|
|
|
} |
65
|
|
|
|
66
|
|
|
/** |
67
|
|
|
* Return the content of the current location |
68
|
|
|
* @return \eZ\Publish\API\Repository\Values\Content\Content |
69
|
|
|
*/ |
70
|
9 |
|
public function content() |
71
|
|
|
{ |
72
|
9 |
|
if ($this->content == null) { |
73
|
3 |
|
$this->content = $this->repository->getContentService()->loadContent($this->location->contentId); |
74
|
3 |
|
} |
75
|
9 |
|
return $this->content; |
76
|
|
|
} |
77
|
|
|
|
78
|
|
|
/** |
79
|
|
|
* NB: if entity has been created from a Content, returns its MAIN location. Otherwise, the Location set at creation |
80
|
|
|
* @return \eZ\Publish\API\Repository\Values\Content\Location |
81
|
|
|
*/ |
82
|
5 |
|
public function location() |
83
|
|
|
{ |
84
|
5 |
|
if ($this->location == null) { |
85
|
5 |
|
$this->location = $this->repository->getLocationService()->loadLocation($this->content->contentInfo->mainLocationId); |
86
|
5 |
|
} |
87
|
5 |
|
return $this->location; |
88
|
|
|
} |
89
|
|
|
} |
90
|
|
|
|