Completed
Push — EZP-25088-search-handler-inter... ( f8bc81 )
by
unknown
26:40
created

Recover::receive()   B

Complexity

Conditions 6
Paths 7

Size

Total Lines 30
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
eloc 16
c 1
b 0
f 0
nc 7
nop 1
dl 0
loc 30
rs 8.439
1
<?php
2
3
/**
4
 * This file is part of the eZ Publish Kernel package.
5
 *
6
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
7
 * @license For full copyright and license information view LICENSE file distributed with this source code.
8
 *
9
 * @version //autogentag//
10
 */
11
namespace eZ\Publish\Core\Search\Common\Slot;
12
13
use eZ\Publish\Core\SignalSlot\Signal;
14
use eZ\Publish\Core\Search\Common\Slot;
15
use eZ\Publish\SPI\Search\Indexer;
16
use eZ\Publish\SPI\Search\Indexer\ContentIndexer;
17
use eZ\Publish\SPI\Search\Indexer\LocationIndexer;
18
19
/**
20
 * A Search Engine slot handling RecoverSignal.
21
 */
22
class Recover extends Slot
23
{
24
    /**
25
     * Receive the given $signal and react on it.
26
     *
27
     * @param \eZ\Publish\Core\SignalSlot\Signal $signal
28
     */
29
    public function receive(Signal $signal)
30
    {
31
        if (!$signal instanceof Signal\TrashService\RecoverSignal) {
32
            return;
33
        }
34
35
        if (!$this->searchHandler instanceof Indexer) {
36
            return;
37
        }
38
39
        $contentHandler = $this->persistenceHandler->contentHandler();
40
        $subtreeIds = $this->persistenceHandler->locationHandler()->loadSubtreeIds(
41
            $signal->newLocationId
42
        );
43
44
        foreach ($subtreeIds as $contentId) {
45
            if ($this->searchHandler instanceof ContentIndexer) {
46
                $contentInfo = $contentHandler->loadContentInfo($contentId);
47
                $this->searchHandler->indexContent(
48
                    $contentHandler->load($contentInfo->id, $contentInfo->currentVersionNo)
49
                );
50
            }
51
52
            if ($this->searchHandler instanceof LocationIndexer) {
53
                $this->searchHandler->indexLocation(
54
                    $this->persistenceHandler->locationHandler()->load($signal->newLocationId)
55
                );
56
            }
57
        }
58
    }
59
}
60