105 lines
3.3 KiB
PHP
105 lines
3.3 KiB
PHP
<?php
|
|
|
|
namespace kernel\app_modules\user_custom_fields\services;
|
|
|
|
use itguild\forms\builders\SelectBuilder;
|
|
use itguild\forms\builders\TextInputBuilder;
|
|
use kernel\app_modules\user_custom_fields\models\CustomField;
|
|
use kernel\app_modules\user_custom_fields\models\forms\CreateCustomFieldForm;
|
|
use kernel\FormModel;
|
|
|
|
class CustomFieldService
|
|
{
|
|
public function create(FormModel $form_model): false|CustomField
|
|
{
|
|
$model = new CustomField();
|
|
// Пример заполнения:
|
|
$model->slug = $form_model->getItem('slug');
|
|
$model->label = $form_model->getItem('label');
|
|
$model->type = $form_model->getItem('type');
|
|
$model->entity = $form_model->getItem('entity');
|
|
$model->field_options = $form_model->getItem('field_options');
|
|
$model->status = $form_model->getItem('status');
|
|
|
|
if ($model->save()) {
|
|
return $model;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function update(FormModel $form_model, CustomField $custom_field): false|CustomField
|
|
{
|
|
// Пример обновления:
|
|
$custom_field->slug = $form_model->getItem('slug');
|
|
$custom_field->label = $form_model->getItem('label');
|
|
$custom_field->type = $form_model->getItem('type');
|
|
$custom_field->entity = $form_model->getItem('entity');
|
|
$custom_field->field_options = $form_model->getItem('field_options');
|
|
$custom_field->status = $form_model->getItem('status');
|
|
|
|
if ($custom_field->save()) {
|
|
return $custom_field;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public static function getCustomFields()
|
|
{
|
|
$model = CustomField::where(['entity' => 'user'])->where(['status' => CustomField::ACTIVE_STATUS])->get();
|
|
|
|
return $model;
|
|
}
|
|
|
|
public static function getList(): array
|
|
{
|
|
return CustomField::select('id', 'label')->get()
|
|
->pluck('label', 'id')
|
|
->toArray();
|
|
|
|
}
|
|
|
|
public static function getCustomFieldHtml(CustomField $field, int $userId)
|
|
{
|
|
$value = UserCustomValuesService::getValueByFieldAndUser($field->id, $userId);
|
|
|
|
if ($field->type === "string"){
|
|
$input = TextInputBuilder::build($field->slug, [
|
|
'class' => 'form-control',
|
|
'placeholder' => $field->label,
|
|
'value' => $value->value ?? '',
|
|
]);
|
|
}
|
|
else {
|
|
$options = explode(", ", $field->field_options);
|
|
$options = array_combine($options, $options);
|
|
$input = SelectBuilder::build($field->slug, [
|
|
'class' => 'form-control',
|
|
'placeholder' => $field->label,
|
|
'value' => $value->value ?? '',
|
|
])->setOptions($options);
|
|
}
|
|
$input->setLabel($field->label);
|
|
|
|
return $input->create()->fetch();
|
|
}
|
|
|
|
public static function getOrCreateBySlug(string $slug): CustomField
|
|
{
|
|
$model = CustomField::where('slug', $slug)->first();
|
|
if (!$model) {
|
|
$form = new CreateCustomFieldForm();
|
|
$service = new self();
|
|
$form->load([
|
|
'slug' => $slug,
|
|
'label' => $slug,
|
|
'entity' => 'user',
|
|
'type' => 'string',
|
|
]);
|
|
$model = $service->create($form);
|
|
}
|
|
|
|
return $model;
|
|
}
|
|
} |