From cb90ad37907d1483451940cd4cf43d86468cb189 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Stan=C4=9Bk?= Date: Sat, 21 Jan 2023 13:38:50 +0100 Subject: [PATCH] =?UTF-8?q?Na=C4=8Dten=C3=AD=20=C4=8Dlenstv=C3=AD=20ze=20s?= =?UTF-8?q?kautIS=20(#949)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update membership * fix * fix cs --- .../Components/UsersGridControl.php | 33 +++++++++++++++++++ app/Services/Authenticator.php | 6 +--- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/app/AdminModule/UsersModule/Components/UsersGridControl.php b/app/AdminModule/UsersModule/Components/UsersGridControl.php index 2671e3702..8da4d501f 100644 --- a/app/AdminModule/UsersModule/Components/UsersGridControl.php +++ b/app/AdminModule/UsersModule/Components/UsersGridControl.php @@ -30,6 +30,7 @@ use App\Services\QueryBus; use App\Services\SkautIsEventEducationService; use App\Services\SkautIsEventGeneralService; +use App\Services\SkautIsService; use App\Services\SubeventService; use App\Services\UserService; use App\Utils\Helpers; @@ -46,6 +47,7 @@ use Nette\Localization\Translator; use Nette\Utils\ArrayHash; use Nette\Utils\Html; +use Skaut\Skautis\Wsdl\WsdlException; use Throwable; use Ublaboo\DataGrid\DataGrid; use Ublaboo\DataGrid\Exception\DataGridColumnStatusException; @@ -72,6 +74,7 @@ public function __construct( private AclService $aclService, private ApplicationService $applicationService, private UserService $userService, + private SkautIsService $skautIsService, private SkautIsEventEducationService $skautIsEventEducationService, private SkautIsEventGeneralService $skautIsEventGeneralService, private SubeventService $subeventService @@ -150,6 +153,9 @@ public function createComponentUsersGrid(string $name): DataGrid $grid->addGroupAction('admin.users.users_group_action_export_schedules') ->onSelect[] = [$this, 'groupExportSchedules']; + $grid->addGroupAction('Načíst členství ze skautIS (admin)') + ->onSelect[] = [$this, 'groupUpdateMembership']; + $grid->addColumnText('displayName', 'admin.users.users_name') ->setSortable() ->setFilterText(); @@ -720,6 +726,33 @@ public function groupExportUsers(array $ids): void $this->redirect('exportusers'); } + /** + * @param int[] $ids + */ + public function groupUpdateMembership(array $ids): void + { + $users = $this->userRepository->findUsersByIds($ids); + $errors = 0; + + foreach ($users as $user) { + try { + $membership = $this->skautIsService->getValidMembership($user->getSkautISPersonId()); + $user->setUnit($membership?->RegistrationNumber); + $this->userRepository->save($user); + } catch (WsdlException $e) { + $errors++; + } + } + + if ($errors > 0) { + $this->getPresenter()->flashMessage('Členství některých účastníků se nepodařilo načíst (oprávnění).', 'warning'); + } else { + $this->getPresenter()->flashMessage('Členství byla úspěšně načtena.', 'success'); + } + + $this->reload(); + } + /** * Zpracuje export seznamu uživatelů. * diff --git a/app/Services/Authenticator.php b/app/Services/Authenticator.php index 4a1e957b8..5560dcfed 100644 --- a/app/Services/Authenticator.php +++ b/app/Services/Authenticator.php @@ -110,11 +110,7 @@ private function updateUserFromSkautIS(User $user, stdClass $skautISUser): void $user->setMember($skautISUser->HasMembership); $validMembership = $this->skautIsService->getValidMembership($user->getSkautISPersonId()); - if ($validMembership === null) { - $user->setUnit(null); - } else { - $user->setUnit($validMembership->RegistrationNumber); - } + $user->setUnit($validMembership?->RegistrationNumber); $photoUpdate = new DateTimeImmutable($skautISPerson->PhotoUpdate); if ($user->getPhotoUpdate() === null || $photoUpdate->diff($user->getPhotoUpdate())->s > 0) {