Completed
Push — master ( 4c13d6...0e016e )
by Łukasz
23:32
created

Handler::urlAliasHandler()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
5
 * @license For full copyright and license information view LICENSE file distributed with this source code.
6
 */
7
declare(strict_types=1);
8
9
namespace eZ\Publish\Core\Persistence\Cache;
10
11
use eZ\Publish\SPI\Persistence\Handler as PersistenceHandlerInterface;
12
use eZ\Publish\Core\Persistence\Cache\SectionHandler as CacheSectionHandler;
13
use eZ\Publish\Core\Persistence\Cache\LocationHandler as CacheLocationHandler;
14
use eZ\Publish\Core\Persistence\Cache\ContentHandler as CacheContentHandler;
15
use eZ\Publish\Core\Persistence\Cache\ContentLanguageHandler as CacheContentLanguageHandler;
16
use eZ\Publish\Core\Persistence\Cache\ContentTypeHandler as CacheContentTypeHandler;
17
use eZ\Publish\Core\Persistence\Cache\UserHandler as CacheUserHandler;
18
use eZ\Publish\Core\Persistence\Cache\TransactionHandler as CacheTransactionHandler;
19
use eZ\Publish\Core\Persistence\Cache\TrashHandler as CacheTrashHandler;
20
use eZ\Publish\Core\Persistence\Cache\UrlAliasHandler as CacheUrlAliasHandler;
21
use eZ\Publish\Core\Persistence\Cache\ObjectStateHandler as CacheObjectStateHandler;
22
use eZ\Publish\Core\Persistence\Cache\URLHandler as CacheUrlHandler;
23
use eZ\Publish\Core\Persistence\Cache\BookmarkHandler as CacheBookmarkHandler;
24
use eZ\Publish\Core\Persistence\Cache\NotificationHandler as CacheNotificationHandler;
25
use eZ\Publish\Core\Persistence\Cache\UserPreferenceHandler as CacheUserPreferenceHandler;
26
27
/**
28
 * Persistence Cache Handler class.
29
 */
30
class Handler implements PersistenceHandlerInterface
31
{
32
    /** @var \eZ\Publish\SPI\Persistence\Handler */
33
    protected $persistenceHandler;
34
35
    /** @var \eZ\Publish\Core\Persistence\Cache\SectionHandler */
36
    protected $sectionHandler;
37
38
    /** @var \eZ\Publish\Core\Persistence\Cache\ContentHandler */
39
    protected $contentHandler;
40
41
    /** @var \eZ\Publish\Core\Persistence\Cache\ContentLanguageHandler */
42
    protected $contentLanguageHandler;
43
44
    /** @var \eZ\Publish\Core\Persistence\Cache\ContentTypeHandler */
45
    protected $contentTypeHandler;
46
47
    /** @var \eZ\Publish\Core\Persistence\Cache\LocationHandler */
48
    protected $locationHandler;
49
50
    /** @var \eZ\Publish\Core\Persistence\Cache\UserHandler */
51
    protected $userHandler;
52
53
    /** @var \eZ\Publish\Core\Persistence\Cache\TrashHandler */
54
    protected $trashHandler;
55
56
    /** @var \eZ\Publish\Core\Persistence\Cache\UrlAliasHandler */
57
    protected $urlAliasHandler;
58
59
    /** @var \eZ\Publish\Core\Persistence\Cache\ObjectStateHandler */
60
    protected $objectStateHandler;
61
62
    /** @var \eZ\Publish\Core\Persistence\Cache\TransactionHandler */
63
    protected $transactionHandler;
64
65
    /** @var \eZ\Publish\Core\Persistence\Cache\URLHandler */
66
    protected $urlHandler;
67
68
    /** @var \eZ\Publish\Core\Persistence\Cache\BookmarkHandler */
69
    protected $bookmarkHandler;
70
71
    /** @var \eZ\Publish\Core\Persistence\Cache\NotificationHandler */
72
    protected $notificationHandler;
73
74
    /** @var \eZ\Publish\Core\Persistence\Cache\UserPreferenceHandler */
75
    protected $userPreferenceHandler;
76
77
    /** @var \eZ\Publish\Core\Persistence\Cache\PersistenceLogger */
78
    protected $logger;
79
80
    /**
81
     * @param \eZ\Publish\SPI\Persistence\Handler $persistenceHandler Must be factory for inner persistence, ie: legacy
82
     * @param \eZ\Publish\Core\Persistence\Cache\SectionHandler $sectionHandler
83
     * @param \eZ\Publish\Core\Persistence\Cache\LocationHandler $locationHandler
84
     * @param \eZ\Publish\Core\Persistence\Cache\ContentHandler $contentHandler
85
     * @param \eZ\Publish\Core\Persistence\Cache\ContentLanguageHandler $contentLanguageHandler
86
     * @param \eZ\Publish\Core\Persistence\Cache\ContentTypeHandler $contentTypeHandler
87
     * @param \eZ\Publish\Core\Persistence\Cache\UserHandler $userHandler
88
     * @param \eZ\Publish\Core\Persistence\Cache\TransactionHandler $transactionHandler
89
     * @param \eZ\Publish\Core\Persistence\Cache\TrashHandler $trashHandler
90
     * @param \eZ\Publish\Core\Persistence\Cache\UrlAliasHandler $urlAliasHandler
91
     * @param \eZ\Publish\Core\Persistence\Cache\ObjectStateHandler $objectStateHandler
92
     * @param \eZ\Publish\Core\Persistence\Cache\URLHandler $urlHandler
93
     * @param \eZ\Publish\Core\Persistence\Cache\BookmarkHandler $bookmarkHandler
94
     * @param \eZ\Publish\Core\Persistence\Cache\NotificationHandler $notificationHandler
95
     * @param \eZ\Publish\Core\Persistence\Cache\UserPreferenceHandler $userPreferenceHandler
96
     * @param \eZ\Publish\Core\Persistence\Cache\PersistenceLogger $logger
97
     */
98 View Code Duplication
    public function __construct(
99
        PersistenceHandlerInterface $persistenceHandler,
100
        CacheSectionHandler $sectionHandler,
101
        CacheLocationHandler $locationHandler,
102
        CacheContentHandler $contentHandler,
103
        CacheContentLanguageHandler $contentLanguageHandler,
104
        CacheContentTypeHandler $contentTypeHandler,
105
        CacheUserHandler $userHandler,
106
        CacheTransactionHandler $transactionHandler,
107
        CacheTrashHandler $trashHandler,
108
        CacheUrlAliasHandler $urlAliasHandler,
109
        CacheObjectStateHandler $objectStateHandler,
110
        CacheUrlHandler $urlHandler,
111
        CacheBookmarkHandler $bookmarkHandler,
112
        CacheNotificationHandler $notificationHandler,
113
        CacheUserPreferenceHandler $userPreferenceHandler,
114
        PersistenceLogger $logger
115
    ) {
116
        $this->persistenceHandler = $persistenceHandler;
117
        $this->sectionHandler = $sectionHandler;
118
        $this->locationHandler = $locationHandler;
119
        $this->contentHandler = $contentHandler;
120
        $this->contentLanguageHandler = $contentLanguageHandler;
121
        $this->contentTypeHandler = $contentTypeHandler;
122
        $this->userHandler = $userHandler;
123
        $this->transactionHandler = $transactionHandler;
124
        $this->trashHandler = $trashHandler;
125
        $this->urlAliasHandler = $urlAliasHandler;
126
        $this->objectStateHandler = $objectStateHandler;
127
        $this->urlHandler = $urlHandler;
128
        $this->bookmarkHandler = $bookmarkHandler;
129
        $this->notificationHandler = $notificationHandler;
130
        $this->userPreferenceHandler = $userPreferenceHandler;
131
        $this->logger = $logger;
132
    }
133
134
    /**
135
     * @return \eZ\Publish\SPI\Persistence\Content\Handler
136
     */
137
    public function contentHandler()
138
    {
139
        return $this->contentHandler;
140
    }
141
142
    /**
143
     * @return \eZ\Publish\SPI\Persistence\Content\Type\Handler
144
     */
145
    public function contentTypeHandler()
146
    {
147
        return $this->contentTypeHandler;
148
    }
149
150
    /**
151
     * @return \eZ\Publish\SPI\Persistence\Content\Language\Handler
152
     */
153
    public function contentLanguageHandler()
154
    {
155
        return $this->contentLanguageHandler;
156
    }
157
158
    /**
159
     * @return \eZ\Publish\SPI\Persistence\Content\Location\Handler
160
     */
161
    public function locationHandler()
162
    {
163
        return $this->locationHandler;
164
    }
165
166
    /**
167
     * @return \eZ\Publish\SPI\Persistence\Content\ObjectState\Handler
168
     */
169
    public function objectStateHandler()
170
    {
171
        return $this->objectStateHandler;
172
    }
173
174
    /**
175
     * @return \eZ\Publish\SPI\Persistence\User\Handler
176
     */
177
    public function userHandler()
178
    {
179
        return $this->userHandler;
180
    }
181
182
    /**
183
     * @return \eZ\Publish\SPI\Persistence\Content\Section\Handler
184
     */
185
    public function sectionHandler()
186
    {
187
        return $this->sectionHandler;
188
    }
189
190
    /**
191
     * @return \eZ\Publish\SPI\Persistence\Content\Location\Trash\Handler
192
     */
193
    public function trashHandler()
194
    {
195
        return $this->trashHandler;
196
    }
197
198
    /**
199
     * @return \eZ\Publish\SPI\Persistence\Content\UrlAlias\Handler
200
     */
201
    public function urlAliasHandler()
202
    {
203
        return $this->urlAliasHandler;
204
    }
205
206
    /**
207
     * @return \eZ\Publish\SPI\Persistence\Content\UrlWildcard\Handler
208
     *
209
     * @todo Create cache implementation so we can avoid injecting persistenceHandler and logger
210
     */
211
    public function urlWildcardHandler()
212
    {
213
        $this->logger->logUnCachedHandler(__METHOD__);
214
215
        return $this->persistenceHandler->urlWildcardHandler();
216
    }
217
218
    /**
219
     * @return \eZ\Publish\SPI\Persistence\TransactionHandler
220
     */
221
    public function transactionHandler()
222
    {
223
        return $this->transactionHandler;
224
    }
225
226
    /**
227
     * @return \eZ\Publish\Core\Persistence\Cache\URLHandler
228
     */
229
    public function urlHandler()
230
    {
231
        return $this->urlHandler;
0 ignored issues
show
Bug Best Practice introduced by
The return type of return $this->urlHandler; (eZ\Publish\Core\Persistence\Cache\URLHandler) is incompatible with the return type declared by the interface eZ\Publish\SPI\Persistence\Handler::urlHandler of type eZ\Publish\Core\Persistence\Legacy\URL\Handler.

If you return a value from a function or method, it should be a sub-type of the type that is given by the parent type f.e. an interface, or abstract method. This is more formally defined by the Lizkov substitution principle, and guarantees that classes that depend on the parent type can use any instance of a child type interchangably. This principle also belongs to the SOLID principles for object oriented design.

Let’s take a look at an example:

class Author {
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}

abstract class Post {
    public function getAuthor() {
        return 'Johannes';
    }
}

class BlogPost extends Post {
    public function getAuthor() {
        return new Author('Johannes');
    }
}

class ForumPost extends Post { /* ... */ }

function my_function(Post $post) {
    echo strtoupper($post->getAuthor());
}

Our function my_function expects a Post object, and outputs the author of the post. The base class Post returns a simple string and outputting a simple string will work just fine. However, the child class BlogPost which is a sub-type of Post instead decided to return an object, and is therefore violating the SOLID principles. If a BlogPost were passed to my_function, PHP would not complain, but ultimately fail when executing the strtoupper call in its body.

Loading history...
232
    }
233
234
    /**
235
     * @return \eZ\Publish\Core\Persistence\Cache\BookmarkHandler
236
     */
237
    public function bookmarkHandler()
238
    {
239
        return $this->bookmarkHandler;
240
    }
241
242
    /**
243
     * @return \eZ\Publish\Core\Persistence\Cache\NotificationHandler
244
     */
245
    public function notificationHandler()
246
    {
247
        return $this->notificationHandler;
248
    }
249
250
    /**
251
     * @return \eZ\Publish\Core\Persistence\Cache\UserPreferenceHandler
252
     */
253
    public function userPreferenceHandler()
254
    {
255
        return $this->userPreferenceHandler;
256
    }
257
258
    /**
259
     * {@inheritdoc}
260
     */
261
    public function beginTransaction()
262
    {
263
        $this->transactionHandler->beginTransaction();
264
    }
265
266
    /**
267
     * {@inheritdoc}
268
     */
269
    public function commit()
270
    {
271
        $this->transactionHandler->commit();
272
    }
273
274
    /**
275
     * {@inheritdoc}
276
     */
277
    public function rollback()
278
    {
279
        $this->transactionHandler->rollback();
280
    }
281
}
282