Passed
Push — master ( 8bed3e...27eda7 )
by Jos
11:17
created

NullifiesEmptyDates::fromDateTime()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 3
nc 2
nop 1
dl 0
loc 7
ccs 4
cts 4
cp 1
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace JosKolenberg\EloquentEmptyDateNullifier;
4
5
trait NullifiesEmptyDates
6
{
7
    /**
8
     * Add the date attributes to the attributes array.
9
     *
10
     * @param array $attributes
11
     * @return array
12
     */
13 16
    protected function addDateAttributesToArray(array $attributes)
14
    {
15 16
        foreach ($this->getDates() as $key) {
0 ignored issues
show
Bug introduced by
It seems like getDates() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

15
        foreach ($this->/** @scrutinizer ignore-call */ getDates() as $key) {
Loading history...
16 16
            if (! isset($attributes[$key])) {
17 16
                continue;
18
            }
19
20
            /**
21
             * Additional check for valid date.
22
             */
23 16
            if (! $this->isValidDate($attributes[$key])) {
24 16
                $attributes[$key] = null;
25
26 16
                continue;
27
            }
28
29 16
            $attributes[$key] = $this->serializeDate($this->asDateTime($attributes[$key]));
0 ignored issues
show
Bug introduced by
It seems like asDateTime() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

29
            $attributes[$key] = $this->serializeDate($this->/** @scrutinizer ignore-call */ asDateTime($attributes[$key]));
Loading history...
Bug introduced by
It seems like serializeDate() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

29
            /** @scrutinizer ignore-call */ 
30
            $attributes[$key] = $this->serializeDate($this->asDateTime($attributes[$key]));
Loading history...
30
        }
31
32 16
        return $attributes;
33
    }
34
35
    /**
36
     * Cast an attribute to a native PHP type.
37
     *
38
     * @param string $key
39
     * @param mixed $value
40
     * @return mixed
41
     */
42 20
    protected function castAttribute($key, $value)
43
    {
44
        /**
45
         * Additional check for valid date if it needs casting
46
         * to a date. Proceed to normal behaviour otherwise.
47
         */
48 20
        if (in_array($this->getCastType($key), [
0 ignored issues
show
Bug introduced by
It seems like getCastType() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

48
        if (in_array($this->/** @scrutinizer ignore-call */ getCastType($key), [
Loading history...
49 20
                'date',
50
                'datetime',
51
                'custom_datetime',
52
                'timestamp',
53 20
            ]) && ! $this->isValidDate($value)) {
54 20
            return null;
55
        }
56
57 16
        return parent::castAttribute($key, $value);
58
    }
59
60
    /**
61
     * Check if the given value is not on the empty dates blacklist.
62
     *
63
     * @param $value
64
     * @return bool
65
     */
66 20
    protected function isValidDate($value)
67
    {
68 20
        return ! in_array($value, [
69 20
            '0000-00-00 00:00:00',
70
            '0000-00-00',
71
        ]);
72
    }
73
74
    /**
75
     * Get a plain attribute (not a relationship).
76
     *
77
     * Additional check for valid date. Proceed to
78
     * normal behaviour when date is valid.
79
     *
80
     * @param string $key
81
     * @return mixed
82
     */
83 12
    public function getAttributeValue($key)
84
    {
85 12
        $value = $this->getAttributeFromArray($key);
0 ignored issues
show
Bug introduced by
The method getAttributeFromArray() does not exist on JosKolenberg\EloquentEmp...ier\NullifiesEmptyDates. Did you maybe mean getAttributeValue()? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

85
        /** @scrutinizer ignore-call */ 
86
        $value = $this->getAttributeFromArray($key);

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
86
87 12
        if (in_array($key, $this->getDates()) && ! $this->isValidDate($value)) {
88 4
            return null;
89
        }
90
91 12
        return parent::getAttributeValue($key);
92
    }
93
94
    /**
95
     * Convert a DateTime to a storable string.
96
     *
97
     * Additional check for valid date. Proceed to
98
     * normal behaviour when date is valid.
99
     *
100
     * @param  mixed  $value
101
     * @return string|null
102
     */
103 8
    public function fromDateTime($value)
104
    {
105 8
        if (! $this->isValidDate($value)) {
106 8
            return null;
107
        }
108
109 8
        return parent::fromDateTime($value);
110
    }
111
}