Completed
Push — master ( 9a182e...587256 )
by Alexandr
01:49
created

FBElement::setFBTemplate()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

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