user crud
This commit is contained in:
		| @@ -50,6 +50,8 @@ class UserController extends Controller{ | ||||
|         $this->redirect("/admin/user/create"); | ||||
|     } | ||||
|  | ||||
|  | ||||
|  | ||||
|     public function actionQuestionCount($user_id) | ||||
|     { | ||||
|         return Question::where('user_id', $user_id)->count(); | ||||
| @@ -99,41 +101,36 @@ class UserController extends Controller{ | ||||
|      */ | ||||
|     public function actionUpdate($id): void | ||||
|     { | ||||
|         $this->cgView->render("user/form.php"); | ||||
|         $model = User::find($id); | ||||
|         if (!$model){ | ||||
|             throw new Exception(message: "The user not found"); | ||||
|         } | ||||
|  | ||||
|         $this->cgView->render("user/form.php", ['model' => $model]); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     public function actionEdit($id): void | ||||
|     { | ||||
| //        $_REQUEST["password_hash"] = password_hash($_REQUEST["password_hash"], PASSWORD_DEFAULT); | ||||
| // | ||||
| //        $user = User::find($_REQUEST['id']); | ||||
| //        $user->username = $_REQUEST['username']; | ||||
| //        $user->email = $_REQUEST['email']; | ||||
| //        $user->password_hash = $_REQUEST['password_hash']; | ||||
| //        $user->save(); | ||||
|  | ||||
| //        $user = User::find($id); | ||||
| //        if (!$user){ | ||||
| //            throw new Exception(message: "The user not found"); | ||||
| //        } | ||||
| //        $userForm = new CreateUserForm(); | ||||
| //        $userService = new UserService(); | ||||
| //        $userForm->load($_REQUEST); | ||||
| ////        Debug::prn($userForm->validate()); | ||||
| ////        Debug::dd($userForm->getErrors()); | ||||
| //        if ($userForm->validate()){ | ||||
| ////            Debug::prn($userService); | ||||
| // | ||||
| //            $userService->create($userForm); | ||||
| //            $this->redirect("/admin/user/" . User::find($id)['id']); | ||||
| //        } | ||||
| //        else | ||||
| //        { | ||||
| //            $this->redirect("/admin/user/update/" . $id); | ||||
| //        } | ||||
|         $user = User::find($id); | ||||
|         if (!$user){ | ||||
|             throw new Exception(message: "The user not found"); | ||||
|         } | ||||
|         $userForm = new CreateUserForm(); | ||||
|         $userService = new UserService(); | ||||
|         $userForm->load($_REQUEST); | ||||
|         if ($userForm->validate()){ | ||||
|             $user = $userService->update($userForm, $user); | ||||
|             if ($user){ | ||||
|                 $this->redirect("/admin/user/" . $user->id); | ||||
|             } | ||||
|         } | ||||
|         $this->redirect("/admin/user/update/" . $id); | ||||
|     } | ||||
|  | ||||
|     public function actionDelete($id): void | ||||
|     #[NoReturn] public function actionDelete($id): void | ||||
|     { | ||||
|         User::find($id)->delete(); | ||||
|         $this->redirect("/admin/user/"); | ||||
|   | ||||
| @@ -3,6 +3,7 @@ namespace app\models; | ||||
| use Illuminate\Database\Eloquent\Model; | ||||
|  | ||||
| /** | ||||
|  * @property int $id | ||||
|  * @property string $username | ||||
|  * @property string $email | ||||
|  * @property string $password_hash | ||||
|   | ||||
| @@ -21,4 +21,16 @@ class UserService | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     public function update(FormModel $form_model, User $user): false|User | ||||
|     { | ||||
|         $user->username = $form_model->getItem('username'); | ||||
|         $user->email = $form_model->getItem('email'); | ||||
|         $user->password_hash = password_hash($form_model->getItem('password'), PASSWORD_DEFAULT); | ||||
|         if ($user->save()){ | ||||
|             return $user; | ||||
|         } | ||||
|  | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -9,7 +9,8 @@ | ||||
|     "twig/twig": "^3.0", | ||||
|     "twbs/bootstrap": "5.0.2", | ||||
|     "itguild/tables": "^0.1.3", | ||||
|     "madesimple/php-form-validator": "^2.9" | ||||
|     "madesimple/php-form-validator": "^2.9", | ||||
|     "itguild/forms": "^0.1.1" | ||||
|   }, | ||||
|   "autoload": { | ||||
|     "psr-4": { | ||||
|   | ||||
							
								
								
									
										107
									
								
								composer.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										107
									
								
								composer.lock
									
									
									
										generated
									
									
									
								
							| @@ -4,7 +4,7 @@ | ||||
|         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", | ||||
|         "This file is @generated automatically" | ||||
|     ], | ||||
|     "content-hash": "f638e86e2b30657f939e5afa8d66beb9", | ||||
|     "content-hash": "6f3aaa23fb01733bc2ac85dfaaf0dec3", | ||||
|     "packages": [ | ||||
|         { | ||||
|             "name": "brick/math", | ||||
| @@ -723,6 +723,65 @@ | ||||
|             }, | ||||
|             "time": "2024-07-16T13:48:58+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "itguild/forms", | ||||
|             "version": "0.1.1", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://git.itguild.info/ItGuild/forms_bundle.git", | ||||
|                 "reference": "0f00069165f8eae4271aed6cffdb4b4ecb89c1b8" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "itguild/php-cg-select-v2": "^0.1.0", | ||||
|                 "rakit/validation": "^1.4", | ||||
|                 "twbs/bootstrap": "5.0.2", | ||||
|                 "vlucas/phpdotenv": "^5.6" | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "autoload": { | ||||
|                 "psr-4": { | ||||
|                     "itguild\\forms\\": "src/" | ||||
|                 } | ||||
|             }, | ||||
|             "notification-url": "https://packagist.org/downloads/", | ||||
|             "license": [ | ||||
|                 "MIT" | ||||
|             ], | ||||
|             "authors": [ | ||||
|                 { | ||||
|                     "name": "Kavalar", | ||||
|                     "email": "apuc06@mail.ru" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2024-07-25T09:37:21+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "itguild/php-cg-select-v2", | ||||
|             "version": "v0.1", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://git.itguild.info/apuc/php-cg-select-v2", | ||||
|                 "reference": "30c7844d96efaaab35b125db533a064f2254e169" | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "autoload": { | ||||
|                 "psr-4": { | ||||
|                     "Itguild\\PhpCgSelectV2\\": "src/" | ||||
|                 } | ||||
|             }, | ||||
|             "notification-url": "https://packagist.org/downloads/", | ||||
|             "license": [ | ||||
|                 "ISC" | ||||
|             ], | ||||
|             "authors": [ | ||||
|                 { | ||||
|                     "name": "Kavalar", | ||||
|                     "email": "apuc06@mail.ru" | ||||
|                 } | ||||
|             ], | ||||
|             "description": "Wrapper for CG-Select", | ||||
|             "time": "2023-06-07T22:35:51+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "itguild/tables", | ||||
|             "version": "0.1.6", | ||||
| @@ -1169,6 +1228,52 @@ | ||||
|             }, | ||||
|             "time": "2021-10-29T13:26:27+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "rakit/validation", | ||||
|             "version": "v1.4.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/rakit/validation.git", | ||||
|                 "reference": "ff003a35cdf5030a5f2482299f4c93f344a35b29" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/rakit/validation/zipball/ff003a35cdf5030a5f2482299f4c93f344a35b29", | ||||
|                 "reference": "ff003a35cdf5030a5f2482299f4c93f344a35b29", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "ext-mbstring": "*", | ||||
|                 "php": ">=7.0" | ||||
|             }, | ||||
|             "require-dev": { | ||||
|                 "php-coveralls/php-coveralls": "^2.2", | ||||
|                 "phpunit/phpunit": "^6.5", | ||||
|                 "squizlabs/php_codesniffer": "^3" | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "autoload": { | ||||
|                 "psr-4": { | ||||
|                     "Rakit\\Validation\\": "src" | ||||
|                 } | ||||
|             }, | ||||
|             "notification-url": "https://packagist.org/downloads/", | ||||
|             "license": [ | ||||
|                 "MIT" | ||||
|             ], | ||||
|             "authors": [ | ||||
|                 { | ||||
|                     "name": "Muhammad Syifa", | ||||
|                     "email": "emsifa@gmail.com" | ||||
|                 } | ||||
|             ], | ||||
|             "description": "PHP Laravel like standalone validation library", | ||||
|             "support": { | ||||
|                 "issues": "https://github.com/rakit/validation/issues", | ||||
|                 "source": "https://github.com/rakit/validation/tree/v1.4.0" | ||||
|             }, | ||||
|             "time": "2020-08-27T05:07:01+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/clock", | ||||
|             "version": "v7.1.1", | ||||
|   | ||||
							
								
								
									
										24
									
								
								kernel/IGTabel/btn/DangerBtn.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								kernel/IGTabel/btn/DangerBtn.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| <?php | ||||
|  | ||||
| namespace kernel\IGTabel\btn; | ||||
|  | ||||
| class DangerBtn | ||||
| { | ||||
|     protected string $btn = ''; | ||||
|  | ||||
|     public function __construct(string $title, string $url) | ||||
|     { | ||||
|         $this->btn = "<a class='btn btn-danger' href='$url' style='margin: 3px; width: 150px;' >$title</a>"; | ||||
|     } | ||||
|  | ||||
|     public function fetch(): string | ||||
|     { | ||||
|         return $this->btn; | ||||
|     } | ||||
|  | ||||
|     public static function create(string $title, string $url): DangerBtn | ||||
|     { | ||||
|         return new self($title, $url); | ||||
|     } | ||||
|  | ||||
| } | ||||
							
								
								
									
										24
									
								
								kernel/IGTabel/btn/SuccessBtn.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								kernel/IGTabel/btn/SuccessBtn.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| <?php | ||||
|  | ||||
| namespace kernel\IGTabel\btn; | ||||
|  | ||||
| class SuccessBtn | ||||
| { | ||||
|     protected string $btn = ''; | ||||
|  | ||||
|     public function __construct(string $title, string $url) | ||||
|     { | ||||
|         $this->btn = "<a class='btn btn-success' href='$url' style='margin: 3px; width: 150px;' >$title</a>"; | ||||
|     } | ||||
|  | ||||
|     public function fetch(): string | ||||
|     { | ||||
|         return $this->btn; | ||||
|     } | ||||
|  | ||||
|     public static function create(string $title, string $url): SuccessBtn | ||||
|     { | ||||
|         return new self($title, $url); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -1,19 +1,59 @@ | ||||
| <form action="/admin/user/" method="post"> | ||||
|     Логин:<br> | ||||
|     <label> | ||||
|         <input type = "text" name = "username" required size="50" autofocus placeholder="Логин"> | ||||
|     </label> <br> <br> | ||||
| <?php | ||||
| /** | ||||
|  * @var User $model | ||||
|  */ | ||||
|  | ||||
|     Пароль:<br> | ||||
|     <label> | ||||
|         <input type = "text" name = "password" placeholder="Пароль"> | ||||
|     </label> <br> <br> | ||||
| use app\models\User; | ||||
|  | ||||
|     Email адрес: <br> | ||||
|     <label> | ||||
|         <input type="Email" name="email" required placeholder="Email"> | ||||
|     </label> <br><br> | ||||
| $form = new \itguild\forms\ActiveForm(); | ||||
| $form->beginForm(isset($model) ? "/admin/user/edit/" . $model->id : "/admin/user"); | ||||
|  | ||||
|     <input type = "submit" value="Подтвердить"> | ||||
|     <input type="reset"> | ||||
| </form> | ||||
| $form->field(class: \itguild\forms\inputs\TextInput::class, name: "username", params: [ | ||||
|     'class' => "form-control", | ||||
|     'placeholder' => 'Логин', | ||||
|     'model' => $model->username ?? '' | ||||
| ]) | ||||
|     ->setLabel("Логин") | ||||
|     ->render(); | ||||
|  | ||||
| $form->field(class: \itguild\forms\inputs\TextInput::class, name: "password", params: [ | ||||
|     'class' => "form-control", | ||||
|     'type' => "password", | ||||
| ]) | ||||
|     ->setLabel("Пароль") | ||||
|     ->render(); | ||||
|  | ||||
| $form->field(class: \itguild\forms\inputs\TextInput::class, name: "email", params: [ | ||||
|     'class' => "form-control", | ||||
|     'type' => "email", | ||||
|     'placeholder' => 'test@mail.ru', | ||||
|     'value' => $model->email ?? '' | ||||
| ]) | ||||
|     ->setLabel("Email") | ||||
|     ->render(); | ||||
|  | ||||
| ?> | ||||
|     <div class="row"> | ||||
|         <div class="col-sm-2"> | ||||
|         <?php | ||||
|         $form->field(\itguild\forms\inputs\Button::class, name: "btn-submit", params: [ | ||||
|             'class' => "btn btn-primary ", | ||||
|             'value' => 'Отправить', | ||||
|             'typeInput' => 'submit' | ||||
|         ]) | ||||
|             ->render(); | ||||
|         ?> | ||||
|         </div> | ||||
|         <div class="col-sm-2"> | ||||
|         <?php | ||||
|         $form->field(\itguild\forms\inputs\Button::class, name: "btn-reset", params: [ | ||||
|             'class' => "btn btn-warning", | ||||
|             'value' => 'Сбросить', | ||||
|             'typeInput' => 'reset' | ||||
|         ]) | ||||
|             ->render(); | ||||
|         ?> | ||||
|         </div> | ||||
|     </div> | ||||
| <?php | ||||
| $form->endForm(); | ||||
|   | ||||
| @@ -4,7 +4,9 @@ | ||||
|  * @var \Illuminate\Database\Eloquent\Collection $user | ||||
|  */ | ||||
| use Itguild\Tables\ViewJsonTable; | ||||
| use kernel\IGTabel\btn\DangerBtn; | ||||
| use kernel\IGTabel\btn\PrimaryBtn; | ||||
| use kernel\IGTabel\btn\SuccessBtn; | ||||
| use kernel\IGTabel\ViewJsonTableEloquentModel; | ||||
|  | ||||
| $dataProvider = new ViewJsonTableEloquentModel($user, [ | ||||
| @@ -14,8 +16,8 @@ $dataProvider = new ViewJsonTableEloquentModel($user, [ | ||||
| $table = new ViewJsonTable($dataProvider->getJson()); | ||||
| $table->beforeTable(function () use ($user) { | ||||
|     $btn = PrimaryBtn::create("Список", "/admin/user")->fetch(); | ||||
|     $btn .= PrimaryBtn::create("Редактировать", "/admin/user/update/" . $user->id)->fetch(); | ||||
|     $btn .= PrimaryBtn::create("Удалить", "/admin/user/delete/" . $user->id)->fetch(); | ||||
|     $btn .= SuccessBtn::create("Редактировать", "/admin/user/update/" . $user->id)->fetch(); | ||||
|     $btn .= DangerBtn::create("Удалить", "/admin/user/delete/" . $user->id)->fetch(); | ||||
|     return $btn; | ||||
| }); | ||||
| $table->create(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user