379 | | |
| 391 | ''Листа на рути за управување со корисници''\\ |
| 392 | Рутата за приказ на корисници е посебно дефинирана со цел да се овозможи пристап за корисници од различни ролји т.е. референтот да има можност да ја види листата со корисници но да нема можност да управува со нив.\\ |
| 393 | |
| 394 | {{{ |
| 395 | public function index() |
| 396 | { |
| 397 | return view("dashboard.users.index")->with([ |
| 398 | "users" => User::all(), |
| 399 | "roles" => Role::all() |
| 400 | ]); |
| 401 | } |
| 402 | |
| 403 | public function store(NewUserRequest $request) |
| 404 | { |
| 405 | $user = new User(); |
| 406 | |
| 407 | $user->name = $request->name; |
| 408 | $user->surname = $request->surname; |
| 409 | $user->email = $request->email; |
| 410 | $user->phone_number = $request->phone_number; |
| 411 | $user->username = $request->username; |
| 412 | $user->password = $user->generateTemporaryPassword(); |
| 413 | $user->security_code = $user->generateSecurityCode(); |
| 414 | $user->verify_token = $user->generateVerifyToken(); |
| 415 | |
| 416 | $user->role_id = $request->userRole; |
| 417 | |
| 418 | if ($request->hasFile("avatar")) { |
| 419 | $image = $request->file("avatar"); |
| 420 | $avatarName = $user->id . '_avatar' . time() . '.' . request()->avatar->getClientOriginalExtension(); |
| 421 | |
| 422 | if (!empty($user->avatar)) { |
| 423 | Storage::disk('uploads')->delete("/users/" . $user->avatar); |
| 424 | } |
| 425 | |
| 426 | Storage::disk('uploads')->put("/users/" . $avatarName, File::get($image)); |
| 427 | |
| 428 | $user->avatar = $avatarName; |
| 429 | } |
| 430 | |
| 431 | $user->created_by = auth()->user()->id; |
| 432 | $user->save(); |
| 433 | |
| 434 | $user->notify(new WelcomeUser($user)); |
| 435 | |
| 436 | Alert::flash("New user added successfully"); |
| 437 | |
| 438 | return redirect()->route("dashboard.users.index"); |
| 439 | } |
| 440 | }}} |
| 441 | ''Методи на контролерот UsersController за приказ и креирање на корисници'' |
| 442 | Додавање на нов корисник оди преку методот store кој како параметар го прима барањето кое ќе го валидира според правилата дефинирани во NewUserRequest класата. Некои од податоците за кои не им се доделува вредност при креирање креирав методи во User моделот за генерирање на random вредности со цел за да помине валидацијата на тие задолжителни полиња како на пример што е generateTemporaryPassword() методот. За корисникот исто така може да се додаде слика која ја зачувуваме во сервер. На крај се зачувува корисникот и се праќа нотификација од класата WelcomeUser() преку која праќаме маил до новиот корисник за креирање на нова лозинка со што корисникот ќе има активен профил и ќе може да се најави. На сличен начин работи и контролерот за уредување на кориснички податоци. За разлика од креирање во тој дел доколку се промени е-адресата на корисникот се генеира нов токен за верификација како и безбедносен код и се праќаат до корисникот со цел да го верифицира истиот и да може да се најави пак во системот.\\ |
| 443 | |
| 444 | {{{ |
| 445 | if($user->isDirty('email')) { |
| 446 | $user->is_active = false; |
| 447 | $user->security_code = $user->generateSecurityCode(); |
| 448 | $user->verify_token = $user->generateVerifyToken(); |
| 449 | $user->notify(new VerifyNewEmail($user)); |
| 450 | } |
| 451 | }}} |
| 452 | ''Дел од методот за уредување на корисник (промена на е-адреса)''\\ |
| 453 | |
| 454 | |
| 455 | {{{ |
| 456 | public function block(Request $request, $id) |
| 457 | { |
| 458 | $user = User::find($id); |
| 459 | $user->is_active = false; |
| 460 | $user->save(); |
| 461 | Alert::flash($user->name . " User blocked successfully"); |
| 462 | return redirect()->route("dashboard.users.index"); |
| 463 | } |
| 464 | }}} |
| 465 | ''Методот за блокирање на корисник'' |
| 466 | Доколку еден корисник не работи веќе во фирмата тоа значи дека истиот не смее да се најави веќе во системот. Со таа намена методот block го менува статусот на корисникот од активен во не активен и не му дозволува да се најави во системот. На ист начин може и да се деблокира еден корисник.\\ |
| 467 | |
| 468 | |
| 469 | {{{ |
| 470 | public function editUserData(UpdateUserData $request, $id) |
| 471 | { |
| 472 | $user = User::findOrFail($id); |
| 473 | $user->name = $request->name; |
| 474 | $user->surname = $request->surname; |
| 475 | $user->phone_number = $request->phone_number; |
| 476 | |
| 477 | if ($request->hasFile("avatar")) { |
| 478 | $image = $request->file("avatar"); |
| 479 | $avatarName = $user->id . '_avatar' . time() . '.' . request()->avatar->getClientOriginalExtension(); |
| 480 | |
| 481 | if (!empty($user->avatar)) { |
| 482 | Storage::disk('uploads')->delete("/users/" . $user->avatar); |
| 483 | } |
| 484 | |
| 485 | Storage::disk('uploads')->put("/users/" . $avatarName, File::get($image)); |
| 486 | |
| 487 | $user->avatar = $avatarName; |
| 488 | } |
| 489 | |
| 490 | $user->save(); |
| 491 | |
| 492 | Alert::flash("User data updated successfully"); |
| 493 | |
| 494 | return redirect()->route("dashboard.settings.index"); |
| 495 | } |
| 496 | }}} |
| 497 | ''Метод за промена на личните кориснички податоци'' |
| 498 | Преку методот editUserData секој најавен корисник има можност да си ги менува своите лични кориснички податоци како име, презиме, мобилен број или слика.\\ |
| 499 | |
| 500 | |
| 501 | |
| 502 | {{{ |
| 503 | public function destroy(Request $request, $id) |
| 504 | { |
| 505 | $user = User::find($id); |
| 506 | |
| 507 | if(Folder::where('user_id', $user->id)->count() == 0) { |
| 508 | if (Storage::disk("uploads")->exists("users" . DIRECTORY_SEPARATOR . $user->avatar)) { |
| 509 | Storage::disk("uploads")->delete("users" . DIRECTORY_SEPARATOR . $user->avatar); |
| 510 | } |
| 511 | |
| 512 | $user->delete(); |
| 513 | |
| 514 | Alert::flash($user->name . " deleted successfully"); |
| 515 | |
| 516 | return redirect()->route("dashboard.users.index"); |
| 517 | } |
| 518 | else { |
| 519 | Alert::flash($user->name . "has associated folders"); |
| 520 | |
| 521 | return redirect()->back(); |
| 522 | } |
| 523 | } |
| 524 | }}} |
| 525 | ''Метод за бришење на корисник''\\ |
| 526 | Администраторот на апликацијата има можност да избрише корисник со користење на методот destroy. При бришење во истиот момент је отстранува и сликата од профилот на корисникот од сервер како и сите податоци за него во база. Притоа, еден корисник може да се избрише само доколку нема асоцирани фолдери во него т.е. доколку тој корисник никогаш не додал фолдери и датотеки во одреден оддел.\\ |
| 527 | |
| 528 | |
| 529 | {{{ |
| 530 | public function updateUsername(UsernameSettingsRequest $request) |
| 531 | { |
| 532 | $user = auth()->user(); |
| 533 | $user->username = $request->username; |
| 534 | $user->updated_at = Carbon::now(); |
| 535 | $user->save(); |
| 536 | |
| 537 | Alert::flash("Username updated successfully"); |
| 538 | |
| 539 | auth()->logout(); |
| 540 | session()->flush(); |
| 541 | |
| 542 | return redirect()->route("auth.showLogin"); |
| 543 | } |
| 544 | }}} |
| 545 | ''Метод за промена на корисничко име во SettingsController контролерот'' |
| 546 | Преку методот updateUsername корисникот има можност да го промени своето корисничко име. Методот како параметар го добива барањето кое ќе биде валидирано според правилата поставени во UsernameSettingsRequest. По завршена акција корисникот се одјавува. Доколку се промени е-адресата тој исто така добива и маил за потврда на новата со цел да може да се најави пак. На ист начин работи и методот за промена на лозинка.\\ |
| 547 | |
| 548 | {{{ |
| 549 | public function fileTypes(FileTypeRequest $request) |
| 550 | { |
| 551 | $fileType = FileType::find("1"); |
| 552 | |
| 553 | $fileType->mimes = $request->mimes; |
| 554 | $fileType->max_size = $request->max_size; |
| 555 | $fileType->user_id = auth()->id(); |
| 556 | $fileType->updated_at = Carbon::now(); |
| 557 | |
| 558 | if(auth()->user()->hasPermission("manage_file_types")) { |
| 559 | $fileType->save(); |
| 560 | |
| 561 | Alert::flash("File validations updated successfully"); |
| 562 | |
| 563 | return redirect()->back(); |
| 564 | } |
| 565 | else { |
| 566 | Alert::flash("You don't have permission to change file validations", "error"); |
| 567 | |
| 568 | return redirect()->back(); |
| 569 | } |
| 570 | } |
| 571 | }}} |
| 572 | ''Метод за промена на валидациски правила во SettingsController контролерот''\\ |
| 573 | Валидациските правила се зачувуваат во база во еден ред од посебна табела и истите потоа се превземаат при валидација за прикачување на датотеки. Администраторот има можност да ги дефинира сите дозволени типови на датотеки кои можат да се прикачат како и максималната големина по датотека.\\ |
| 574 | |
| 575 | |
| 576 | {{{ |
| 577 | $mimes = FileType::find("1")->mimes; |
| 578 | $maxSize = FileType::find("1")->max_size; |
| 579 | |
| 580 | if ($this->isMethod("patch")) { |
| 581 | $fileRules = [ |
| 582 | "file_item.*" => "mimes:{$mimes}|max:{$maxSize}" |
| 583 | ]; |
| 584 | } |
| 585 | |
| 586 | else { |
| 587 | $fileRules = [ |
| 588 | "file_item.*" => "mimes:{$mimes}|max:{$maxSize}" |
| 589 | ]; |
| 590 | } |
| 591 | }}} |
| 592 | ''Дел од кодот за валидација на датотеки'' |
| 593 | Во овој дел од FolderRequest класата за валидација на нов фолдер може да се забележи дека во mimes се запишуваат типови на датотеки кои што администраторот претходно ги дефинирал преку методот fileTypes(). Прво го наоѓаме првиот ред од база од класата FileType и неговите податоци ги поставуваме како валидациски правила. |
| 594 | |
| 595 | ===Управување со фолдери и датотеки |
| 596 | |
| 597 | |
| 598 | |
| 599 | |
| 600 | |
| 601 | |
| 602 | |
| 603 | |
| 604 | |
| 605 | |
| 606 | |
| 607 | |
| 608 | |
| 609 | |
| 610 | |
| 611 | |
| 612 | |
| 613 | |
| 614 | |
| 615 | |