menuService = new MenuService(); $this->migrationService = new MigrationService(); } public function init(): void { $this->migrationService->runAtPath("{KERNEL_APP_MODULES}/user_custom_fields/migrations"); $this->menuService->createItem([ "label" => "Доп. поля пользователей", "url" => "/admin/custom_field", "slug" => "custom_field", ]); $this->menuService->createItem([ "label" => "Список", "url" => "/admin/custom_field", "slug" => "custom_field_list", "parent_slug" => "custom_field" ]); $this->menuService->createItem([ "label" => "Значения", "url" => "/admin/custom_field/user_values", "slug" => "custom_field_user_values", "parent_slug" => "custom_field" ]); EntityRelation::addEntityRelation('user', 'user_custom_fields'); } /** * @throws \Exception */ public function deactivate(): void { $this->migrationService->rollbackAtPath("{KERNEL_APP_MODULES}/user_custom_fields/migrations"); $this->menuService->removeItemBySlug("custom_field_user_values"); $this->menuService->removeItemBySlug("custom_field_list"); $this->menuService->removeItemBySlug("custom_field"); EntityRelation::removePropertyFromEntityRelations('user', 'user_custom_fields'); } public function formInputs(string $entity, Model $model = null): void { $fields = CustomFieldService::getCustomFields(); foreach ($fields as $field) { /* @var CustomField $field */ if (isset($model->id)) { $value = UserCustomValuesService::getValueByFieldAndUser($field->id, $model->id); } 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); $input->create()->render(); } } public function saveInputs(string $entity, Model $model, Request $request): void { $service = new UserCustomValuesService(); $form = new CreateUserCustomValueForm(); $fields = CustomFieldService::getCustomFields(); foreach ($fields as $field){ /* @var CustomField $field */ if (isset($request->data[$field->slug])){ UserCustomValuesService::deleteByUserAndField($model->id, $field->id); $form->load([ 'user_id' => $model->id, 'custom_field_id' => $field->id, 'value' => $request->data[$field->slug] ]); $service->create($form); } } } public function getItem(string $entity, string $entity_id): string { $fields = UserCustomValuesService::getValuesByUserId($entity_id); $fieldsArr = []; foreach ($fields as $field){ /* @var UserCustomValues $field */ $fieldsArr[$field->customField->label] = $field->value; } $string = implode(', ', array_map( function ($key, $value) { return "$key: $value"; }, array_keys($fieldsArr), $fieldsArr )); return $string; } public function getItems(string $entity, Model $model): string { $fields = UserCustomValuesService::getValuesByUserId($model->id); $fieldsArr = []; foreach ($fields as $field){ /* @var UserCustomValues $field */ $fieldsArr[$field->customField->label] = $field->value; } $string = implode(', ', array_map( function ($key, $value) { return "$key: $value"; }, array_keys($fieldsArr), $fieldsArr )); return $string; } }