FieldRange   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 69
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 5

Importance

Changes 0
Metric Value
wmc 9
lcom 0
cbo 5
dl 0
loc 69
c 0
b 0
f 0
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A accept() 0 4 1
A handle() 0 15 1
B createFacetResult() 0 32 7
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\FieldRangeFacet;
7
use eZ\Publish\API\Repository\Values\Content\Search\Facet\RangeFacetEntry;
8
use Kaliop\EzFindSearchEngineBundle\API\Repository\Values\Content\Query\FacetBuilder\FieldRangeFacetBuilder;
9
use Kaliop\EzFindSearchEngineBundle\Core\Persistence\eZFind\Content\Search\Common\Gateway\FacetHandler;
10
11
class FieldRange extends FacetHandler
12
{
13
    /**
14
     * @inheritdoc
15
     */
16
    public function accept(FacetBuilder $facetBuilder)
17
    {
18
        return $facetBuilder instanceof FieldRangeFacetBuilder;
19
    }
20
21
    /**
22
     * @inheritdoc
23
     *
24
     * @param FieldRangeFacetBuilder $facetBuilder
25
     */
26
    public function handle(FacetBuilder $facetBuilder)
27
    {
28
        $facet = $this->buildFacet($facetBuilder);
29
        $facet['range'] = [
30
            'field' => $facetBuilder->fieldPath,
31
            'start' => $facetBuilder->start,
32
            'end' => $facetBuilder->end,
33
            'gap' => $facetBuilder->gap,
34
            'hardend' => $facetBuilder->hardend,
35
            'include' => $facetBuilder->include,
36
            'other' => $facetBuilder->other,
37
        ];
38
39
        return $facet;
40
    }
41
42
    /**
43
     * @inheritdoc
44
     *
45
     * @param FieldRangeFacetBuilder $facetBuilder
46
     */
47
    public function createFacetResult(FacetBuilder $facetBuilder, $fields = [], $queries = [], $dates = [], $ranges = [])
48
    {
49
        $facetKey = $this->getFacetKey($facetBuilder);
50
        $fieldName = \eZSolr::getFieldName($facetBuilder->fieldPath, false, 'facet');
51
52
        $entries = [];
53
        $totalCount = 0;
54
        foreach ($ranges as $field => $range) {
55
            if (
56
                (isset($range['facet_key']) && $range['facet_key'] == $facetKey) ||
57
                (!isset($range['facet_key']) && $field == $fieldName)
58
            ) {
59
                foreach ($range['counts'] as $value => $count) {
60
                    $facetEntry = new RangeFacetEntry();
61
                    $facetEntry->from = $value;
62
                    $facetEntry->to = $value;
63
                    $facetEntry->totalCount = $count;
64
65
                    $entries[] = $facetEntry;
66
                    $totalCount += $count;
67
                }
68
69
                break;
70
            }
71
        }
72
73
        return new FieldRangeFacet([
74
            'name' => $facetBuilder->name,
75
            'entries' => $entries,
76
            'totalCount' => $totalCount,
77
        ]);
78
    }
79
}