Completed
Push — EZP-31084-part2-poc ( f20bda )
by André
19:16
created

LanguageCode::handle()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 3
dl 0
loc 14
rs 9.7998
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
5
 * @license For full copyright and license information view LICENSE file distributed with this source code.
6
 */
7
declare(strict_types=1);
8
9
namespace eZ\Publish\Core\Persistence\Legacy\Content\Query\CriterionHandler;
10
11
use eZ\Publish\API\Repository\Values\Content\Query\Criterion;
12
use Doctrine\DBAL\Query\QueryBuilder;
13
use eZ\Publish\Core\Persistence\Legacy\Content\Language\MaskGenerator;
14
use eZ\Publish\Core\Persistence\Legacy\Content\Query\CriteriaConverter;
15
use eZ\Publish\Core\Persistence\Legacy\Content\Query\CriterionHandler;
16
17
class LanguageCode implements CriterionHandler
18
{
19
    /** @var \eZ\Publish\Core\Persistence\Legacy\Content\Language\MaskGenerator */
20
    private $maskGenerator;
21
22
    /**
23
     * Construct from language mask generator.
24
     *
25
     * @param \eZ\Publish\Core\Persistence\Legacy\Content\Language\MaskGenerator $maskGenerator
26
     */
27
    public function __construct( MaskGenerator $maskGenerator)
28
    {
29
        $this->maskGenerator = $maskGenerator;
30
    }
31
32
33
    /**
34
     * {@inheritdoc}
35
     */
36
    public function accept(Criterion $criterion): bool
37
    {
38
        return $criterion instanceof Criterion\LanguageCode;
39
    }
40
41
    /**
42
     * {@inheritdoc}
43
     */
44
    public function handle(CriteriaConverter $converter, QueryBuilder $query, Criterion $criterion): string
45
    {
46
        $dbPlatform = $query->getConnection()->getDatabasePlatform();
47
        /* @var \eZ\Publish\API\Repository\Values\Content\Query\Criterion\LanguageCode $criterion */
48
        $mask = $this->maskGenerator->generateLanguageMaskFromLanguageCodes(
49
            $criterion->value,
50
            $criterion->matchAlwaysAvailable
51
        );
52
53
        return $query->expr()->gt(
54
            $dbPlatform->getBitAndComparisonExpression('content.language_mask', $mask),
55
            0
56
        );
57
    }
58
}
59