FacetHandler   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 106
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 2
dl 0
loc 106
c 0
b 0
f 0
rs 10

8 Methods

Rating   Name   Duplication   Size   Complexity  
A setLegacyKernel() 0 4 1
accept() 0 1 ?
handle() 0 1 ?
createFacetResult() 0 1 ?
A getLegacyKernel() 0 5 1
A buildFacet() 0 10 1
A getSolrFieldName() 0 9 1
A getFacetKey() 0 4 1
1
<?php
2
3
namespace Kaliop\EzFindSearchEngineBundle\Core\Persistence\eZFind\Content\Search\Common\Gateway;
4
5
use eZ\Publish\API\Repository\Values\Content\Query\FacetBuilder;
6
use eZ\Publish\API\Repository\Values\Content\Search\Facet;
7
use Closure;
8
use ezpKernel;
9
10
abstract class FacetHandler implements Handler
11
{
12
    /**
13
     * @var Closure
14
     */
15
    private $legacyKernel;
16
17
    /**
18
     * @param Closure $legacyKernel
19
     */
20
    public function setLegacyKernel(Closure $legacyKernel)
21
    {
22
        $this->legacyKernel = $legacyKernel;
23
    }
24
25
    /**
26
     * Check if this facet handler accepts to handle the given facet builder.
27
     *
28
     * @param FacetBuilder $facetBuilder
29
     *
30
     * @return bool
31
     */
32
    abstract public function accept(FacetBuilder $facetBuilder);
33
34
    /**
35
     * Map facet builder value to a proper SOLR representation.
36
     *
37
     * @param FacetBuilder $facetBuilder
38
     *
39
     * @return array
40
     */
41
    abstract public function handle(FacetBuilder $facetBuilder);
42
43
    /**
44
     * Create new facet value based on eZFind facet results.
45
     *
46
     * @param FacetBuilder $facetBuilder
47
     * @param array $fields
48
     * @param array $queries
49
     * @param array $dates
50
     * @param array $ranges
51
     *
52
     * @return Facet
53
     */
54
    abstract public function createFacetResult(FacetBuilder $facetBuilder, $fields = [], $queries = [], $dates = [], $ranges = []);
55
56
    /**
57
     * Get eZ Legacy kernel.
58
     *
59
     * @return ezpKernel
60
     */
61
    protected function getLegacyKernel()
62
    {
63
        $legacyKernelClosure = $this->legacyKernel;
64
        return $legacyKernelClosure();
65
    }
66
67
    /**
68
     * Build base facet based on FacetBuilder parent class.
69
     *
70
     * @param FacetBuilder $facetBuilder
71
     *
72
     * @return array
73
     */
74
    protected function buildFacet(FacetBuilder $facetBuilder)
75
    {
76
        $facet = [
77
            'mincount' => $facetBuilder->minCount,
78
            'limit' => $facetBuilder->limit,
79
            'facet_key' => true,
80
        ];
81
82
        return $facet;
83
    }
84
85
    /**
86
     * Get SOLR field name based on a name which may either be a
87
     * meta-data name, or an eZ Publish content class attribute, specified by
88
     * <class identifier>/<attribute identifier>[/<option>]
89
     *
90
     * @param string $baseName
91
     *
92
     * @return string
93
     */
94
    protected function getSolrFieldName($baseName)
95
    {
96
        return $this->getLegacyKernel()->runCallback(
97
            function () use ($baseName) {
98
                return \eZSolr::getFieldName($baseName, false, 'facet');
99
            },
100
            false
101
        );
102
    }
103
104
    /**
105
     * Get facet key returned by SOLR.
106
     *
107
     * @param FacetBuilder $facetBuilder
108
     *
109
     * @return string
110
     */
111
    protected function getFacetKey(FacetBuilder $facetBuilder)
112
    {
113
        return md5(json_encode($this->handle($facetBuilder)));
114
    }
115
}
116