Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 38
0.00% covered (danger)
0.00%
0 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
TaskAttributeValue
0.00% covered (danger)
0.00%
0 / 38
0.00% covered (danger)
0.00%
0 / 6
420
0.00% covered (danger)
0.00%
0 / 1
 setL11n
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
20
 getL11n
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
6
 setValue
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
56
 getValue
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
30
 toArray
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
2
 jsonSerialize
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2/**
3 * Jingga
4 *
5 * PHP Version 8.1
6 *
7 * @package   Modules\Tasks\Models
8 * @copyright Dennis Eichhorn
9 * @license   OMS License 2.0
10 * @version   1.0.0
11 * @link      https://jingga.app
12 */
13declare(strict_types=1);
14
15namespace Modules\Tasks\Models;
16
17use phpOMS\Localization\BaseStringL11n;
18use phpOMS\Localization\ISO639x1Enum;
19
20/**
21 * Task attribute value class.
22 *
23 * The relation with the type/task is defined in the TaskAttribute class.
24 *
25 * @package Modules\Tasks\Models
26 * @license OMS License 2.0
27 * @link    https://jingga.app
28 * @since   1.0.0
29 */
30class TaskAttributeValue implements \JsonSerializable
31{
32    /**
33     * Id
34     *
35     * @var int
36     * @since 1.0.0
37     */
38    public int $id = 0;
39
40    /**
41     * Depending attribute type
42     *
43     * @var null|int
44     * @since 1.0.0
45     */
46    public ?int $dependingAttributeType = null;
47
48    /**
49     * Depending attribute value
50     *
51     * @var null|int
52     * @since 1.0.0
53     */
54    public ?int $dependingAttributeValue = null;
55
56    /**
57     * Int value
58     *
59     * @var null|int
60     * @since 1.0.0
61     */
62    public ?int $valueInt = null;
63
64    /**
65     * String value
66     *
67     * @var null|string
68     * @since 1.0.0
69     */
70    public ?string $valueStr = null;
71
72    /**
73     * Decimal value
74     *
75     * @var null|float
76     * @since 1.0.0
77     */
78    public ?float $valueDec = null;
79
80    /**
81     * DateTime value
82     *
83     * @var null|\DateTimeInterface
84     * @since 1.0.0
85     */
86    public ?\DateTimeInterface $valueDat = null;
87
88    /**
89     * Is a default value which can be selected
90     *
91     * @var bool
92     * @since 1.0.0
93     */
94    public bool $isDefault = false;
95
96    /**
97     * Unit of the value
98     *
99     * @var string
100     * @since 1.0.0
101     */
102    public string $unit = '';
103
104    /**
105     * Localization
106     *
107     * @var null|BaseStringL11n
108     */
109    public ?BaseStringL11n $l11n = null;
110
111    /**
112     * Set l11n
113     *
114     * @param string|BaseStringL11n $l11n Tag article l11n
115     * @param string                $lang Language
116     *
117     * @return void
118     *
119     * @since 1.0.0
120     */
121    public function setL11n(string | BaseStringL11n $l11n, string $lang = ISO639x1Enum::_EN) : void
122    {
123        if ($l11n instanceof BaseStringL11n) {
124            $this->l11n = $l11n;
125        } elseif (isset($this->l11n) && $this->l11n instanceof BaseStringL11n) {
126            $this->l11n->content = $l11n;
127            $this->l11n->setLanguage($lang);
128        } else {
129            $this->l11n          = new BaseStringL11n();
130            $this->l11n->content = $l11n;
131            $this->l11n->ref     = $this->id;
132            $this->l11n->setLanguage($lang);
133        }
134    }
135
136    /**
137     * Get localization
138     *
139     * @return null|string
140     *
141     * @since 1.0.0
142     */
143    public function getL11n() : ?string
144    {
145        return $this->l11n instanceof BaseStringL11n ? $this->l11n->content : $this->l11n;
146    }
147
148    /**
149     * Set value
150     *
151     * @param null|int|string|float $value Value
152     *
153     * @return void
154     *
155     * @since 1.0.0
156     */
157    public function setValue(mixed $value, int $datatype) : void
158    {
159        if ($datatype === AttributeValueType::_STRING) {
160            $this->valueStr = (string) $value;
161        } elseif ($datatype === AttributeValueType::_INT
162            || $datatype === AttributeValueType::_FLOAT_INT
163            || $datatype === AttributeValueType::_BOOL
164        ) {
165            $this->valueInt = (int) $value;
166        } elseif ($datatype === AttributeValueType::_FLOAT) {
167            $this->valueDec = (float) $value;
168        } elseif ($datatype === AttributeValueType::_DATETIME) {
169            $this->valueDat = new \DateTime((string) $value);
170        }
171    }
172
173    /**
174     * Get value
175     *
176     * @return null|int|string|float|\DateTimeInterface
177     *
178     * @since 1.0.0
179     */
180    public function getValue() : mixed
181    {
182        if (!empty($this->valueStr)) {
183            return $this->valueStr;
184        } elseif (!empty($this->valueInt)) {
185            return $this->valueInt;
186        } elseif (!empty($this->valueDec)) {
187            return $this->valueDec;
188        } elseif ($this->valueDat instanceof \DateTimeInterface) {
189            return $this->valueDat;
190        }
191
192        return null;
193    }
194
195    /**
196     * {@inheritdoc}
197     */
198    public function toArray() : array
199    {
200        return [
201            'id'        => $this->id,
202            'valueInt'  => $this->valueInt,
203            'valueStr'  => $this->valueStr,
204            'valueDec'  => $this->valueDec,
205            'valueDat'  => $this->valueDat,
206            'isDefault' => $this->isDefault,
207        ];
208    }
209
210    /**
211     * {@inheritdoc}
212     */
213    public function jsonSerialize() : mixed
214    {
215        return $this->toArray();
216    }
217}