Completed
Push — master ( 8bf128...f3c232 )
by Yaro
03:51
created

RowAttributesTrait::getRowAttributesExcept()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
dl 0
loc 9
ccs 0
cts 5
cp 0
rs 9.9666
c 0
b 0
f 0
cc 2
nc 2
nop 2
crap 6
1
<?php
2
3
namespace Yaro\Jarboe\Table\CrudTraits;
4
5
use Closure;
6
7
trait RowAttributesTrait
8
{
9
    /**
10
     * @var Closure|null
11
     */
12
    private $rowAttributesCallback;
13
    private $rowAttributesCallbackData = null;
14
15
    /**
16
     * Set closure for setting custom attributes to `<tr>`.
17
     *
18
     * @param Closure $closure
19
     */
20
    public function setRowAttributes(Closure $closure)
21
    {
22
        $this->rowAttributesCallback = $closure;
23
    }
24
25
    /**
26
     * Get given row attribute.
27
     *
28
     * @param $model
29
     * @param string $attribute
30
     * @return string
31
     */
32
    public function getRowAttribute($model, string $attribute): string
33
    {
34
        $attributes = $this->getRowAttributesData($model);
35
36
        if (!isset($attributes[$attribute])) {
37
            return '';
38
        }
39
        return (string) $attributes[$attribute];
40
    }
41
42
    /**
43
     * Get all row attributes except given.
44
     *
45
     * @param $model
46
     * @param array $attributes
47
     * @return array
48
     */
49
    public function getRowAttributesExcept($model, array $attributes = []): array
50
    {
51
        $rowAttributes = $this->getRowAttributesData($model);
52
        foreach ($attributes as $attribute) {
53
            unset($rowAttributes[$attribute]);
54
        }
55
56
        return $rowAttributes;
57
    }
58
59
    /**
60
     * Get row attributes data from callback.
61
     *
62
     * @param $model
63
     * @return array
64
     */
65
    public function getRowAttributesData($model): array
66
    {
67
        if (is_null($this->rowAttributesCallbackData)) {
68
            $callback = $this->rowAttributesCallback;
69
            $attributes = $callback($model);
70
            if (!is_array($attributes)) {
71
                $attributes = [
72
                    'class' => $attributes,
73
                ];
74
            }
75
            $this->rowAttributesCallbackData = $attributes;
76
        }
77
78
        return $this->rowAttributesCallbackData;
79
    }
80
81
    /**
82
     * Flush row attributes data.
83
     */
84
    public function flushRowAttributesData()
85
    {
86
        $this->rowAttributesCallbackData = null;
87
    }
88
}