Field::accept()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
c 0
b 0
f 0
rs 10
cc 1
nc 1
nop 1
1
<?php
2
3
namespace Kaliop\EzFindSearchEngineBundle\Core\Persistence\eZFind\Content\Search\Common\Gateway\FacetHandler;
4
5
use eZ\Publish\API\Repository\Values\Content\Query\FacetBuilder;
6
use eZ\Publish\API\Repository\Values\Content\Search\Facet\FieldFacet;
7
use Kaliop\EzFindSearchEngineBundle\Core\Persistence\eZFind\Content\Search\Common\Gateway\FacetHandler;
8
9
class Field extends FacetHandler
10
{
11
    /**
12
     * @inheritdoc
13
     */
14
    public function accept(FacetBuilder $facetBuilder)
15
    {
16
        return $facetBuilder instanceof FacetBuilder\FieldFacetBuilder;
17
    }
18
19
    /**
20
     * @inheritdoc
21
     *
22
     * @param FacetBuilder\FieldFacetBuilder $facetBuilder
23
     */
24
    public function handle(FacetBuilder $facetBuilder)
25
    {
26
        $facet = $this->buildFacet($facetBuilder);
27
        $facet['field'] = $facetBuilder->fieldPaths;
28
29
        return $facet;
30
    }
31
32
    /**
33
     * @inheritdoc
34
     *
35
     * @param FacetBuilder\FieldFacetBuilder $facetBuilder
36
     */
37
    public function createFacetResult(FacetBuilder $facetBuilder, $fields = [], $queries = [], $dates = [], $ranges = [])
38
    {
39
        $facetKey = $this->getFacetKey($facetBuilder);
40
        $fieldNames = [];
41
        foreach ((array) $facetBuilder->fieldPaths as $fieldPath) {
42
            $fieldNames[] = \eZSolr::getFieldName($fieldPath, false, 'facet');
43
        }
44
45
        $entries = [];
46
        $total = 0;
47
48
        foreach ($fields as $field) {
49
            if (
50
                (isset($field['facet_key']) && $field['facet_key'] == $facetKey) ||
51
                (!isset($field['facet_key']) && in_array($field['field'], $fieldNames))
52
            ) {
53
                foreach ($field['countList'] as $word => $count) {
54
                    $entries[$word] = $count;
55
                }
56
57
                foreach ($entries as $word => $count) {
58
                    $total += intval($count);
59
                }
60
61
                if (isset($field['facet_key'])) {
62
                    break;
63
                }
64
            }
65
        }
66
67
        return new FieldFacet([
68
            'name' => $facetBuilder->name,
69
            'entries' => $entries,
70
            'totalCount' => $total,
71
        ]);
72
    }
73
}