Completed
Push — master ( cfc3e7...af9166 )
by Terzi
05:32
created

BelongsToMany::onEdit()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 17
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 12
nc 2
nop 0
dl 0
loc 17
rs 9.8666
c 0
b 0
f 0
1
<?php
2
3
namespace Terranet\Administrator\Field;
4
5
use Terranet\Administrator\Modules\Faked;
6
7
class BelongsToMany extends HasMany
8
{
9
    const MODE_TAGS = 'tags';
10
    const MODE_CHECKBOXES = 'checkboxes';
11
12
    /** @var string */
13
    protected $icon = 'random';
14
15
    /** @var string */
16
    protected $titleField = 'name';
17
18
    /** @var string */
19
    protected $editMode = self::MODE_CHECKBOXES;
20
21
    /** @var bool */
22
    protected $completeList = true;
23
24
    /**
25
     * Show editable controls as checkboxes.
26
     *
27
     * @return self
28
     */
29
    public function tagList(): self
30
    {
31
        $this->editMode = static::MODE_TAGS;
32
        $this->completeList = false;
33
34
        return $this;
35
    }
36
37
    /**
38
     * @param string $column
39
     * @return BelongsToMany
40
     */
41
    public function useAsTitle(string $column): BelongsToMany
42
    {
43
        $this->titleField = $column;
44
45
        return $this;
46
    }
47
48
    /**
49
     * @return array
50
     */
51
    public function onEdit(): array
52
    {
53
        $relation = $this->relation();
54
55
        if (static::MODE_CHECKBOXES === $this->editMode && $this->completeList) {
56
            $values = $relation->getRelated()->all();
57
        } else {
58
            $values = $this->value();
59
        }
60
61
        return [
62
            'relation' => $relation,
63
            'searchable' => get_class($relation->getRelated()),
64
            'values' => $values,
65
            'completeList' => $this->completeList,
66
            'titleField' => $this->titleField,
67
            'editMode' => $this->editMode,
68
        ];
69
    }
70
}
71