1 | <?php |
||
50 | class Repository implements RepositoryInterface |
||
51 | { |
||
52 | // Name of the php class used to create entities. Subclasses have to set a value to this, to be able to create entities |
||
53 | protected $entityClass; |
||
54 | |||
55 | protected $repository; |
||
56 | protected $entityManager; |
||
57 | protected $contentTypeIdentifier; |
||
58 | protected $settings; |
||
59 | protected $logger; |
||
60 | |||
61 | 10 | public function __construct(eZRepository $repository, $entityManager, array $settings=array(), $contentTypeIdentifier='') |
|
68 | |||
69 | 10 | public function setContentTypeIdentifier($contentTypeIdentifier) |
|
74 | |||
75 | public function setSettings(array $settings) |
||
80 | |||
81 | 10 | public function setLogger(LoggerInterface $logger=null) |
|
82 | { |
||
83 | 10 | $this->logger = $logger; |
|
84 | 10 | return $this; |
|
85 | } |
||
86 | |||
87 | /** |
||
88 | * Called from the constructor, with the settings received from the caller. |
||
89 | * Subclasses can implement checking here, or merge the received settings with other data, using f.e. the Symfony |
||
90 | * OptionsResolver component (see http://symfony.com/doc/current/components/options_resolver.html). |
||
91 | * |
||
92 | * @param array $settings |
||
93 | * @return array |
||
94 | */ |
||
95 | 10 | protected function validateSettings(array $settings) |
|
99 | |||
100 | /** |
||
101 | * Nice syntactic sugar ( manually typehinted :-) ) |
||
102 | * Allow all logger methods and eZ repo methods to be called on this extended repo |
||
103 | * |
||
104 | * @param string $method |
||
105 | * @param array $args |
||
106 | * @return mixed |
||
107 | * |
||
108 | * @todo !important move this method to protected access? |
||
109 | */ |
||
110 | 10 | public function __call($method, $args) |
|
131 | |||
132 | /** |
||
133 | * To be overridden in subclasses, this method allows injecting extra services/settings in the entities created. |
||
134 | * This version 'knows' about EntityManagerAware and Logging entity traits. |
||
135 | * |
||
136 | * @param \Kaliop\eZObjectWrapperBundle\Core\EntityInterface $entity |
||
137 | * @return \Kaliop\eZObjectWrapperBundle\Core\EntityInterface |
||
138 | */ |
||
139 | 10 | protected function enrichEntityAtLoad($entity) |
|
149 | |||
150 | /** |
||
151 | * @param Content $content |
||
152 | * @return \Kaliop\eZObjectWrapperBundle\Core\EntityInterface |
||
153 | * |
||
154 | * @todo optionally (?) throw an error if bad content type is detected |
||
155 | */ |
||
156 | 10 | public function loadEntityFromContent(Content $content) |
|
162 | |||
163 | /** |
||
164 | * @param Location $location |
||
165 | * @return \Kaliop\eZObjectWrapperBundle\Core\EntityInterface |
||
166 | */ |
||
167 | 4 | public function loadEntityFromLocation(Location $location) |
|
173 | |||
174 | /** |
||
175 | * This method is useful f.e. when you want to create an Entity that matches a given version and specific location. |
||
176 | * This happens notably when doing content previews, where eZ will inject into your controllers both of them. |
||
177 | * |
||
178 | 2 | * @param Content $content |
|
179 | * @param Location $location |
||
180 | 2 | * @return \Kaliop\eZObjectWrapperBundle\Core\EntityInterface |
|
181 | */ |
||
182 | public function loadEntityFromContentAndLocation(Content $content, Location $location) |
||
183 | { |
||
184 | $class = $this->entityClass; |
||
185 | $entity = new $class($this->repository, $content, $location); |
||
186 | return $this->enrichEntityAtLoad($entity); |
||
187 | } |
||
188 | |||
189 | 10 | /** |
|
190 | * @param ContentInfo $contentInfo |
||
191 | 10 | * @return \Kaliop\eZObjectWrapperBundle\Core\EntityInterface |
|
192 | */ |
||
193 | public function loadEntityFromContentInfo(ContentInfo $contentInfo) |
||
197 | |||
198 | /** |
||
199 | * @param int $id |
||
200 | * @return \Kaliop\eZObjectWrapperBundle\Core\EntityInterface |
||
201 | 10 | * @throws \eZ\Publish\API\Repository\Exceptions\NotFoundException if the content with the given id does not exist |
|
202 | * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException If the user has no access to read content and in case of un-published content: read versions |
||
203 | 10 | */ |
|
204 | public function loadEntityFromContentId($id) |
||
208 | |||
209 | /** |
||
210 | * An alias for loadEntityFromContentId, to keep the API close to Doctrine |
||
211 | * @param int $id |
||
212 | 1 | * @return \Kaliop\eZObjectWrapperBundle\Core\EntityInterface |
|
213 | * @throws \eZ\Publish\API\Repository\Exceptions\NotFoundException if the content with the given id does not exist |
||
214 | 1 | * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException If the user has no access to read content and in case of un-published content: read versions |
|
215 | */ |
||
216 | public function find($id) |
||
220 | |||
221 | /** |
||
222 | * @param int $id |
||
223 | 1 | * @return \Kaliop\eZObjectWrapperBundle\Core\EntityInterface |
|
224 | * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException If the current user user is not allowed to read this location |
||
225 | 1 | * @throws \eZ\Publish\API\Repository\Exceptions\NotFoundException If the specified location is not found |
|
226 | */ |
||
227 | public function loadEntityFromLocationId($id) |
||
231 | |||
232 | /** |
||
233 | * @param string $remoteId |
||
234 | 1 | * @return \Kaliop\eZObjectWrapperBundle\Core\EntityInterface |
|
235 | * @throws \eZ\Publish\API\Repository\Exceptions\NotFoundException if the content with the given id does not exist |
||
236 | 1 | * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException If the user has no access to read content and in case of un-published content: read versions |
|
237 | */ |
||
238 | public function loadEntityFromContentRemoteId($remoteId) |
||
242 | |||
243 | /** |
||
244 | * @param string $remoteId |
||
245 | * @return \Kaliop\eZObjectWrapperBundle\Core\EntityInterface |
||
246 | * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException If the current user user is not allowed to read this location |
||
247 | * @throws \eZ\Publish\API\Repository\Exceptions\NotFoundException If the specified location is not found |
||
248 | */ |
||
249 | public function loadEntityFromLocationRemoteId($remoteId) |
||
253 | |||
254 | /** |
||
255 | * NB: assumes that all search results are homogeneous (same content type) |
||
256 | * @param SearchResult $searchResult |
||
257 | * @return \Kaliop\eZObjectWrapperBundle\Core\EntityInterface[] |
||
258 | */ |
||
259 | protected function loadEntitiesFromSearchResults(SearchResult $searchResult) |
||
272 | } |
||
273 |
This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.
Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.