JoinField::setAlias()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 1
c 1
b 0
f 0
dl 0
loc 3
ccs 2
cts 2
cp 1
rs 10
cc 1
nc 1
nop 1
crap 1
1
<?php
2
3
namespace Povs\ListerBundle\Mapper;
4
5
use Doctrine\ORM\Query\Expr\Join;
6
use Symfony\Component\OptionsResolver\OptionsResolver;
7
8
/**
9
 * @author Povilas Margaiatis <[email protected]>
10
 */
11
class JoinField extends AbstractField
12
{
13
    public const JOIN_INNER = 'INNER';
14
    public const JOIN_LEFT = 'LEFT';
15
16
    public const OPTION_JOIN_TYPE = 'join_type';
17
    public const OPTION_LAZY = 'lazy';
18
    public const OPTION_CONDITION_TYPE = 'condition_type';
19
    public const OPTION_CONDITION = 'condition';
20
    public const OPTION_CONDITION_PARAMETERS = 'condition_parameters';
21
22
    /**
23
     * @var string
24
     */
25
    private $property;
26
27
    /**
28
     * @var JoinField|null
29
     */
30
    private $parent;
31
32
    /**
33
     * @var string
34
     */
35
    private $alias;
36
37
    /**
38
     * @var string
39
     */
40
    private $path;
41
42
    /**
43
     * JoinField constructor.
44
     *
45
     * @param string         $path
46
     * @param string         $property
47
     * @param string         $alias
48
     * @param array          $options
49
     * @param JoinField|null $parent
50
     */
51 18
    public function __construct(string $path, string $property, string $alias, array $options, ?JoinField $parent)
52
    {
53 18
        $id = ($options[self::OPTION_LAZY] ?? false) ? sprintf('%s_lazy', $path) : $path;
54 18
        parent::__construct($id, $options);
55 17
        $this->path = $path;
56 17
        $this->alias = $alias;
57 17
        $this->property = $property;
58 17
        $this->parent = $parent;
59
    }
60
61
    /**
62
     * @param string|null $alias
63
     *
64
     * @return string
65
     */
66 9
    public function getJoinPath(?string $alias): string
67
    {
68 9
        $parentAlias = $this->parent ? $this->parent->getAlias() : $alias;
69
70 9
        if ($parentAlias) {
71 7
            return sprintf('%s.%s', $parentAlias, $this->property);
72
        }
73
74 8
        return $this->property;
75
    }
76
77
    /**
78
     * @return string
79
     */
80 9
    public function getPath(): string
81
    {
82 9
        return $this->path;
83
    }
84
85
    /**
86
     * @return string
87
     */
88 1
    public function getProperty(): string
89
    {
90 1
        return $this->property;
91
    }
92
93
    /**
94
     * @return string
95
     */
96 11
    public function getAlias(): string
97
    {
98 11
        return $this->alias;
99
    }
100
101
    /**
102
     * @param string $alias
103
     */
104 2
    public function setAlias(string $alias): void
105
    {
106 2
        $this->alias = $alias;
107
    }
108
109
    /**
110
     * @inheritDoc
111
     */
112 18
    protected function configureOptions(OptionsResolver $resolver): void
113
    {
114 18
        $resolver->setDefined([
115 18
            self::OPTION_JOIN_TYPE,
116 18
            self::OPTION_LAZY,
117 18
            self::OPTION_CONDITION,
118 18
            self::OPTION_CONDITION_TYPE,
119 18
            self::OPTION_CONDITION_PARAMETERS
120 18
        ]);
121
122 18
        $resolver->setDefaults([
123 18
            self::OPTION_JOIN_TYPE => self::JOIN_INNER,
124 18
            self::OPTION_LAZY => false,
125 18
            self::OPTION_CONDITION_TYPE => Join::WITH
126 18
        ]);
127
128 18
        $resolver->setAllowedValues(self::OPTION_JOIN_TYPE, [self::JOIN_INNER, self::JOIN_LEFT]);
129 18
        $resolver->setAllowedTypes(self::OPTION_LAZY, 'bool');
130 18
        $resolver->setAllowedValues(self::OPTION_CONDITION_TYPE, [Join::WITH, Join::ON]);
131 18
        $resolver->setAllowedTypes(self::OPTION_CONDITION_PARAMETERS, 'array');
132
    }
133
}
134