Completed
Push — master ( 201039...89f4f7 )
by Alexandr
01:44
created

FBElement::setMobileAdminVisible()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 6
rs 9.4285
cc 1
eloc 3
nc 1
nop 0
1
<?php
2
3
namespace Larrock\Core\Helpers\FormBuilder;
4
5
use View;
6
use Illuminate\Database\Eloquent\Model;
7
8
class FBElement
9
{
10
    /** @var string */
11
    public $name;
12
13
    /** @var string */
14
    public $title;
15
16
    /** @var string */
17
    public $cssClassGroup = 'uk-width-1-1';
18
19
    /** @var string */
20
    public $cssClass = 'uk-width-1-1';
21
22
    /** @var string */
23
    public $default;
24
25
    /** @var array */
26
    public $tab = ['main' => 'Заголовок, описание'];
27
28
    /** @var string */
29
    public $valid;
30
31
    /** @var null|bool */
32
    public $inTableAdmin;
33
34
    /** @var null|bool */
35
    public $inTableAdminEditable;
36
37
    /** @var string */
38
    public $help;
39
40
    /** @var null|bool */
41
    public $fillable;
42
43
    /** @var null|bool */
44
    public $filtered;
45
46
    /** @var null|bool */
47
    public $sorted;
48
49
    /** @var string Место где используется (в каталоге место вывода) */
50
    public $template;
51
52
    /** @var string */
53
    public $templateAdmin;
54
55
    /** @var Model|null */
56
    public $data;
57
58
    /** @var string Имя шаблона FormBuilder для отрисовки поля */
59
    public $FBTemplate = 'larrock::admin.formbuilder.input.hidden';
60
61
    /** @var bool|null Показывать поле в мобильном виде в списке материалов админки */
62
    public $mobileAdminVisible;
63
64
    /**
65
     * FBElement constructor.
66
     * @param string $name  Название поля для компонента (например: в БД)
67
     * @param string $title Имя поля для вывода
68
     */
69
    public function __construct(string $name, string $title)
70
    {
71
        $this->name = $name;
72
        $this->title = $title;
73
    }
74
75
    /**
76
     * Установка данных модели (при редактировании материалов).
77
     * @param $data
78
     * @return $this
79
     */
80
    public function setData($data)
81
    {
82
        $this->data = $data;
83
84
        return $this;
85
    }
86
87
    /**
88
     * Установка имени шаблона FormBuilder для отрисовки поля.
89
     * @param $template
90
     * @return $this
91
     */
92
    public function setFBTemplate($template)
93
    {
94
        $this->FBTemplate = $template;
95
96
        return $this;
97
    }
98
99
    /**
100
     * Можно передать в качестве параметра имя поля, тогда оно будет браться из БД.
101
     * @param $default
102
     * @return $this
103
     */
104
    public function setDefaultValue($default)
105
    {
106
        $this->default = $default;
107
108
        return $this;
109
    }
110
111
    /**
112
     * Выводить поле в таблице контента в админке.
113
     * @return $this
114
     */
115
    public function setInTableAdmin()
116
    {
117
        $this->inTableAdmin = true;
118
119
        return $this;
120
    }
121
122
    /**
123
     * Выводить поле на редактирование в таблице контента в админке.
124
     * @return $this
125
     */
126
    public function setInTableAdminEditable()
127
    {
128
        $this->inTableAdminEditable = true;
129
130
        return $this;
131
    }
132
133
    /**
134
     * Добавление правил валидации.
135
     * @param string    $valid
136
     * @return $this
137
     */
138
    public function setValid(string $valid)
139
    {
140
        if ($this->valid) {
141
            $this->valid .= '|'.$valid;
142
        } else {
143
            $this->valid = $valid;
144
        }
145
146
        return $this;
147
    }
148
149
    /**
150
     * Алиас к setValid. Устанавливает обязательность для заполнения.
151
     * @return FBElement
152
     */
153
    public function isRequired()
154
    {
155
        return $this->setValid('required');
156
    }
157
158
    /**
159
     * Установка класса для группы поля в редактировании материала.
160
     * @param string    $class
161
     * @return $this
162
     */
163
    public function setCssClassGroup(string $class)
164
    {
165
        $this->cssClassGroup = $this->cssClass.' '.$class;
166
167
        return $this;
168
    }
169
170
    /**
171
     * Установка класса для группы поля в редактировании материала.
172
     * @param string    $class
173
     * @return $this
174
     */
175
    public function setCssClass(string $class)
176
    {
177
        $this->cssClass = $this->cssClass.' '.$class;
178
179
        return $this;
180
    }
181
182
    /**
183
     * Указание имени и заголовка для таба, где показывать поле на странице редактирования материала.
184
     * @param string    $tab_name
185
     * @param string    $tab_title
186
     * @return $this
187
     */
188
    public function setTab(string $tab_name, string $tab_title)
189
    {
190
        $this->tab = [$tab_name => $tab_title];
191
192
        return $this;
193
    }
194
195
    /**
196
     * Вывод текста описания для поля в интерфейсе.
197
     * @param string $text
198
     * @return $this
199
     */
200
    public function setHelp(string $text)
201
    {
202
        $this->help = $text;
203
204
        return $this;
205
    }
206
207
    /**
208
     * Поле может использоваться в фильтрах.
209
     * @return $this
210
     */
211
    public function setFiltered()
212
    {
213
        $this->filtered = true;
214
215
        return $this;
216
    }
217
218
    /**
219
     * Поле может использоваться в сортировках.
220
     * @return $this
221
     */
222
    public function setSorted()
223
    {
224
        $this->sorted = true;
225
226
        return $this;
227
    }
228
229
    /**
230
     * Указание шаблона для вывода поля (в каталоге место для вывода).
231
     * @param $template
232
     * @return $this
233
     */
234
    public function setTemplate($template)
235
    {
236
        $this->template = $template;
237
238
        return $this;
239
    }
240
241
    public function setTemplateAdmin($template)
242
    {
243
        $this->templateAdmin = $template;
244
245
        return $this;
246
    }
247
248
    /**
249
     * Добавить поле в fillable модели компонента (добавлять значения поля в БД компонента).
250
     * @return $this
251
     */
252
    public function setFillable()
253
    {
254
        $this->fillable = true;
255
256
        return $this;
257
    }
258
259
    /**
260
     * Сделать поле видимым при выводе списков материалов админки при мобильных
261
     * @return $this
262
     */
263
    public function setMobileAdminVisible()
264
    {
265
        $this->mobileAdminVisible = true;
266
267
        return $this;
268
    }
269
270
    /**
271
     * Отрисовка элемента формы.
272
     * @return string
273
     */
274
    public function __toString()
275
    {
276
        if (! isset($this->data->{$this->name}) && $this->default) {
277
            $this->data->{$this->name} = $this->default;
278
        }
279
280
        return View::make($this->FBTemplate, ['row_key' => $this->name,
281
            'row_settings' => $this, 'data' => $this->data, ])->render();
282
    }
283
}
284