RowAttributesTrait::setRowAttributes()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 1
c 1
b 0
f 1
nc 1
nop 1
dl 0
loc 3
ccs 0
cts 2
cp 0
crap 2
rs 10
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
            if (!is_callable($callback)) {
70
                return [];
71
            }
72
            $attributes = $callback($model);
73
            if (!is_array($attributes)) {
74
                $attributes = [
75
                    'class' => $attributes,
76
                ];
77
            }
78
            $this->rowAttributesCallbackData = $attributes;
79
        }
80
81
        return $this->rowAttributesCallbackData;
82
    }
83
84
    /**
85
     * Flush row attributes data.
86
     */
87
    public function flushRowAttributesData()
88
    {
89
        $this->rowAttributesCallbackData = null;
90
    }
91
}
92