bd 11.0
This commit is contained in:
parent
143fa9f324
commit
8e13f4a425
@ -31,7 +31,7 @@ $router->get("/form-item/{id}", [\itguild\forms\app\controllers\FormController::
|
||||
$router->get("/form-delete/{id}", [\itguild\forms\app\controllers\FormController::class, "deleteAction"]);
|
||||
$router->get("/form-edit/{id}", [\itguild\forms\app\controllers\FormController::class, "editAction"]);
|
||||
$router->get("/admin/create-form", [\itguild\forms\app\controllers\AdminController::class, "createAction"]);
|
||||
$router->post("/admin/save-form", [\itguild\forms\app\controllers\AdminController::class, "saveFormAction"]);
|
||||
$router->post("/admin/save-form/", [\itguild\forms\app\controllers\AdminController::class, "saveFormAction"]);
|
||||
$router->get("/admin/form-add-fields", [\itguild\forms\app\controllers\AdminController::class, "getFormAddFieldsAction"]);
|
||||
$router->get("/admin/set-value-select", [\itguild\forms\app\controllers\AdminController::class, "getSelectValue"]);
|
||||
$router->get("/admin/edit-form/{id}", [\itguild\forms\app\controllers\AdminController::class, "editFormAction"]);
|
||||
|
@ -6,13 +6,20 @@ function ajaxRequest() {
|
||||
const targetElement = document.getElementById("buttonAdd");
|
||||
const divElement = document.createElement("div");
|
||||
divElement.classList.add("form-control");
|
||||
divElement.style.backgroundColor = "#bbbbbb"; // Задайте здесь свой нужный стиль
|
||||
divElement.style.backgroundColor = "#bbbbbb";
|
||||
divElement.innerHTML = responseText;
|
||||
targetElement.insertAdjacentElement("beforebegin", divElement);
|
||||
|
||||
const deleteButton = document.createElement("button");
|
||||
deleteButton.textContent = "Delete";
|
||||
deleteButton.addEventListener("click", () => {
|
||||
divElement.remove();
|
||||
});
|
||||
divElement.appendChild(deleteButton);
|
||||
});
|
||||
request.send();
|
||||
}
|
||||
|
||||
function getValueSelect(){
|
||||
var selectValue = document.getElementById("selectID").value
|
||||
var request = new XMLHttpRequest();
|
||||
@ -25,11 +32,20 @@ function getValueSelect(){
|
||||
var responseText = request.responseText;
|
||||
var targetElement = document.getElementById("buttonAdd");
|
||||
var divElement = document.createElement("div");
|
||||
divElement.classList.add("form-control");
|
||||
divElement.style.backgroundColor = "#bbbbbb"; // Задайте здесь свой нужный стиль
|
||||
divElement.classList.add("form-control form-new-block");
|
||||
divElement.innerHTML = responseText;
|
||||
targetElement.insertAdjacentElement("beforebegin", divElement);
|
||||
|
||||
const deleteButton = document.createElement("button");
|
||||
deleteButton.textContent = "X";
|
||||
deleteButton.classList = 'btn-danger delete-button';
|
||||
deleteButton.addEventListener("click", () => {
|
||||
divElement.remove();
|
||||
});
|
||||
divElement.appendChild(deleteButton);
|
||||
});
|
||||
request.send()
|
||||
}
|
||||
function getIdBlock(){
|
||||
|
||||
}
|
||||
|
10
public/style/main.css
Normal file
10
public/style/main.css
Normal file
@ -0,0 +1,10 @@
|
||||
.delete-button {
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
right: 5px;
|
||||
}
|
||||
.form-new-block {
|
||||
background-color: #bbbbbb;
|
||||
position: relative;
|
||||
|
||||
}
|
@ -9,12 +9,14 @@ class FormDTO extends CGDTO
|
||||
{
|
||||
public string $title;
|
||||
public $perPage;
|
||||
|
||||
public $id;
|
||||
public string $view;
|
||||
public string $edit;
|
||||
public string $delete;
|
||||
|
||||
protected array $fillable = [
|
||||
'title', 'perPage', 'view', 'edit', 'delete'
|
||||
'title', 'id', 'perPage', 'view', 'edit', 'delete'
|
||||
];
|
||||
|
||||
|
||||
|
@ -52,14 +52,13 @@ class AdminController extends BaseController
|
||||
{
|
||||
$request = new CreateFormRequest();
|
||||
if (!$request->validate()) {
|
||||
|
||||
throw new CreateFormException("Validation error");
|
||||
|
||||
}
|
||||
|
||||
$title = $request->post('title');
|
||||
$perPage = $request->post('perPage', 10);
|
||||
$inputs = $request->post('InputForm', []);
|
||||
$formId = $request->post('formId');
|
||||
|
||||
$actionView = $request->post("actionView");
|
||||
$actionEdit = $request->post("actionEdit");
|
||||
@ -68,14 +67,23 @@ class AdminController extends BaseController
|
||||
|
||||
|
||||
$resultArray = ['meta' => ['perpage' => $perPage, 'status' => "1", 'actions' => $actions], 'params' => ['class' => "form-control", 'id' => 'form']];
|
||||
|
||||
if ($formId) {
|
||||
//FormModel::where('id', $formId)->update(['title' => $title, 'status' => FormModel::STATUS_ACTIVE, 'params' => json_encode($resultArray, true)]);
|
||||
$form = FormModel::find($formId);
|
||||
$form->title = $title;
|
||||
$form->params = json_encode($resultArray, true);
|
||||
$form->save();
|
||||
FormInputModel::where('form_id', $form->id)->delete();
|
||||
} else {
|
||||
$form = FormModel::Create(['title' => $title, 'status' => FormModel::STATUS_ACTIVE, 'params' => json_encode($resultArray, true)]);
|
||||
}
|
||||
|
||||
foreach ($inputs as $input) {
|
||||
$name = TranslitorHelper::translit($input['name']);
|
||||
$params = [
|
||||
"name" => $name,
|
||||
"class" => "form-control",
|
||||
'placeholder' => $input['placeholder']
|
||||
];
|
||||
|
||||
if ($input['type'] == InputTypeModel::RADIO_TYPE) {
|
||||
@ -98,27 +106,25 @@ class AdminController extends BaseController
|
||||
}
|
||||
|
||||
|
||||
} elseif ($input['type'] == InputTypeModel::SELECT_TYPE) {
|
||||
$options = explode("\n", $input['options']);
|
||||
foreach ($options as $option) {
|
||||
InputValueModel::Create(['form_input_id' => $formInput->id, 'value' => $option]);
|
||||
}
|
||||
} else {
|
||||
|
||||
$formInput = FormInputModel::Create([
|
||||
'form_id' => $form->id,
|
||||
'input_type_id' => $input['type'],
|
||||
'label' => $name,
|
||||
'label' => $input['name'],
|
||||
'name' => $name,
|
||||
'params' => json_encode($params)
|
||||
]);
|
||||
}
|
||||
|
||||
if ($input['type'] == InputTypeModel::SELECT_TYPE) {
|
||||
$options = explode("\n", $input['options']);
|
||||
foreach ($options as $option) {
|
||||
InputValueModel::Create(['form_input_id' => $formInput->id, 'value' => $option]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$this->redirect("/form-result/$form->id");
|
||||
$this->redirect("/form-result/" . $form->id);
|
||||
}
|
||||
|
||||
|
||||
@ -159,12 +165,12 @@ class AdminController extends BaseController
|
||||
$formArr = json_decode($form['params'], true);
|
||||
$fillableRes = [];
|
||||
$fillableRes['title'] = $form['title'];
|
||||
foreach ($formArr['meta'] as $key => $value){
|
||||
if($key == 'perpage'){
|
||||
$fillableRes['id'] = $form['id'];
|
||||
foreach ($formArr['meta'] as $key => $value) {
|
||||
if ($key == 'perpage') {
|
||||
$fillableRes['perPage'] = (string)$value;
|
||||
}
|
||||
else if($key == "actions"){
|
||||
foreach ($value as $item){
|
||||
} else if ($key == "actions") {
|
||||
foreach ($value as $item) {
|
||||
$fillableRes[$item] = $item;
|
||||
}
|
||||
}
|
||||
@ -184,5 +190,4 @@ class AdminController extends BaseController
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -7,6 +7,7 @@ use itguild\forms\app\models\FormModel;
|
||||
use itguild\forms\app\models\FormResModel;
|
||||
use itguild\forms\app\models\InputTypeModel;
|
||||
use itguild\forms\app\models\InputValueModel;
|
||||
use itguild\forms\builders\LabelBuilder;
|
||||
use itguild\forms\debug\Debug;
|
||||
use itguild\forms\exceptions\FormNotFoundException;
|
||||
use itguild\forms\exceptions\FormResultNotFoundException;
|
||||
@ -297,8 +298,7 @@ class FormController extends BaseController
|
||||
|
||||
// Обработка полей формы
|
||||
if ($form->fields) {
|
||||
$fields = $form->fields;
|
||||
foreach ($fields as $field) {
|
||||
foreach ($form->fields as $field) {
|
||||
$options = [];
|
||||
$fieldArr = [];
|
||||
$params = [];
|
||||
@ -329,6 +329,7 @@ class FormController extends BaseController
|
||||
}
|
||||
$fieldArr['type'] = $field->inputType['type'] ? $field->inputType['type'] : "textInput";
|
||||
$fieldArr['options'] = $options;
|
||||
$fieldArr['label'] = ['title' => $field->label, 'for' => $fieldArr['name'], 'class' => 'form-label'];
|
||||
$formArr['data'][] = $fieldArr;
|
||||
}
|
||||
}
|
||||
@ -336,5 +337,4 @@ class FormController extends BaseController
|
||||
return $formArr;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -22,12 +22,16 @@ class CGDTO
|
||||
|
||||
public function get(string $name)
|
||||
{
|
||||
if (!empty($this->$name))
|
||||
{
|
||||
if (!empty($this->$name)) {
|
||||
return $this->$name;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function set(string $name, string $value): void
|
||||
{
|
||||
$this->$name = $value;
|
||||
}
|
||||
|
||||
}
|
@ -10,6 +10,7 @@ class CreateFormRequest extends CgRequest
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'formId' => 'numeric',
|
||||
'title' => 'required|min:5',
|
||||
'perPage' => 'numeric',
|
||||
'InputForm' => 'required|array',
|
||||
|
@ -10,13 +10,13 @@ class TranslitorHelper
|
||||
'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я',
|
||||
'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к',
|
||||
'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц',
|
||||
'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я');
|
||||
'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я', ' ');
|
||||
$translit = array('A', 'B', 'V', 'G', 'D', 'E', 'E', 'Gh', 'Z',
|
||||
'I', 'Y', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F',
|
||||
'H', 'C', 'Ch', 'Sh', 'Sch', 'Y', 'Y', 'Y', 'E', 'Yu', 'Ya', 'a',
|
||||
'b', 'v', 'g', 'd', 'e', 'e', 'gh', 'z', 'i', 'y', 'k', 'l', 'm',
|
||||
'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sch',
|
||||
'y', 'y', 'y', 'e', 'yu', 'ya');
|
||||
'y', 'y', 'y', 'e', 'yu', 'ya', '_');
|
||||
return str_replace($russian, $translit, $str);
|
||||
}
|
||||
}
|
@ -4,6 +4,7 @@ namespace itguild\forms\inputs;
|
||||
|
||||
use itguild\forms\traits\CreateParams;
|
||||
use itguild\forms\inputs\BaseInput;
|
||||
|
||||
class Label extends BaseInput
|
||||
{
|
||||
use CreateParams;
|
||||
@ -36,6 +37,14 @@ class Label extends BaseInput
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getHtml(): string
|
||||
{
|
||||
return $this->html;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $title
|
||||
* @param array $paramsArray
|
||||
@ -45,9 +54,6 @@ class Label extends BaseInput
|
||||
{
|
||||
$label = new self($title, $paramsArray);
|
||||
$label->create()->render();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -6,11 +6,12 @@
|
||||
|
||||
use itguild\forms\inputs\TextInput;
|
||||
use itguild\forms\inputs\TextArea;
|
||||
use itguild\forms\app\controllers\AdminController;
|
||||
|
||||
|
||||
?>
|
||||
|
||||
<?php echo $form->beginForm("/admin/save-form"); ?>
|
||||
<link rel="stylesheet" href="../../public/style/main.css">
|
||||
<?php echo $form->beginForm("/admin/save-form/"); ?>
|
||||
<?php $form->field(TextInput::class, name: "title", params: [
|
||||
'class' => "form-control",
|
||||
'placeholder' => 'Название формы',
|
||||
@ -58,13 +59,20 @@ $form->field(\itguild\forms\inputs\Select::class, name: "inputType", params: [
|
||||
])
|
||||
->setLabel("Добавить поле")
|
||||
->render();
|
||||
?>
|
||||
<button style="margin-top:15px" type="button" id="buttonAdd" class="btn btn-success " onclick="getValueSelect()"
|
||||
data-count=0>Добавить поле
|
||||
</button>
|
||||
|
||||
$form->field(\itguild\forms\inputs\Hidden::class, name: "formId", params: [
|
||||
"value" => $dto->get('id')
|
||||
])->render();
|
||||
|
||||
$form->field(\itguild\forms\inputs\Button::class, name: "", params: [
|
||||
"id" => 'buttonAdd',
|
||||
"value" => 'Добавить поле',
|
||||
'style' => "margin-top: 10px",
|
||||
"class" => "btn btn-success",
|
||||
"onclick" => "getValueSelect()",
|
||||
"data-count" => "0"
|
||||
])->render();
|
||||
|
||||
<?php
|
||||
$form->field(\itguild\forms\inputs\Button::class, name: "btn-submit", params: [
|
||||
'class' => "btn btn-primary ",
|
||||
'value' => 'Отправить',
|
||||
|
Loading…
Reference in New Issue
Block a user