Passed
Push — master ( 3dc1a3...8beebe )
by Gordon
05:38 queued 03:19
created

Indexer::setIndexName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
c 0
b 0
f 0
dl 0
loc 3
rs 10
cc 1
nc 1
nop 1
1
<?php declare(strict_types = 1);
2
3
/**
4
 * Created by PhpStorm.
5
 * User: gordon
6
 * Date: 24/3/2561
7
 * Time: 20:36 น.
8
 */
9
10
namespace Suilven\FreeTextSearch\Base;
11
12
use SilverStripe\ORM\DataObject;
13
use Suilven\FreeTextSearch\Helper\IndexingHelper;
14
use Suilven\FreeTextSearch\Indexes;
15
16
abstract class Indexer implements \Suilven\FreeTextSearch\Interfaces\Indexer
17
{
18
    /** @var string */
19
    protected $indexName;
20
21
    /**
22
     * Index a single data object
23
     */
24
    abstract public function index(DataObject $dataObject): void;
25
26
27
    /** @param string $newIndexName the new index name */
28
    public function setIndexName(string $newIndexName): void
29
    {
30
        $this->indexName = $newIndexName;
31
    }
32
33
34
    /** @return array<string, array<string,string|int|float|bool>> */
35
    public function getIndexablePayload(\SilverStripe\ORM\DataObject $dataObject): array
36
    {
37
        $helper = new IndexingHelper();
38
39
        $payload = $helper->getFieldsToIndex($dataObject);
40
41
        $indexes = new Indexes();
42
        $index = $indexes->getIndex($this->indexName);
43
44
        // populate MVA columns
45
        $mvaColumns = $index->getHasManyFields();
46
        foreach (\array_keys($mvaColumns) as $mvaColumnName) {
47
            $relationship = $mvaColumns[$mvaColumnName]['relationship'];
48
49
            /** @phpstan-ignore-next-line */
50
            $relationshipDOs = $dataObject->$relationship();
51
            $values = [];
52
            foreach ($relationshipDOs as $mvaDO) {
53
                $values[] = $mvaDO->ID;
54
            }
55
56
            $payload[$this->indexName][$mvaColumnName] = $values;
57
        }
58
59
        return $payload;
60
    }
61
}
62