loader = $twig->getLoader(); $this->entityManager = $entityManager; $this->fileService = $fileService; $this->userService = $userService; } #[Route('/cds/user', name: 'user')] public function index(): Response { return $this->redirectToRoute('user-list'); } #[Route('/cds/user/list', name: 'user-list')] public function list(Request $request): Response { $user = $this->getUser(); $validation = []; //$v = $request->query->get('validation'); //symfony shits itself if array is in get param... if (isset($_GET['validation']) && is_array($_GET['validation'])) { $validation = $_GET['validation']; } $repository = $this->entityManager->getRepository(User::class); $criteria = []; if ($request->query->get('account_disabled') != "true") { $criteria['account_disabled'] = false; } $orderBy = [ 'second_name' => 'ASC', 'first_name' => 'ASC' ]; switch ($request->query->get('sort')) { case 'name_desc': $orderBy = [ 'second_name' => 'DESC', 'first_name' => 'ASC' ]; break; case 'start_asc': $orderBy = [ 'start_date' => 'ASC', 'second_name' => 'ASC', 'first_name' => 'ASC' ]; break; case 'start_desc': $orderBy = [ 'start_date' => 'DESC', 'second_name' => 'ASC', 'first_name' => 'ASC' ]; break; } $userlist = $repository->findBy( $criteria, $orderBy ); return $this->render( 'user-list.html.twig', [ 'user' => $user, 'page' => [ 'title' => 'Users', 'section' => 'CDS', 'section_link' => '/cds' ], 'userlist' => $userlist, 'validation' => $validation ] ); } #[Route('/cds/user/add', name: 'user-add')] public function add(Request $request): Response { $data = []; $validation = []; $post = $request->getPayload()->all(); if (count($post) > 0) { $data = $this->userService->sanitiseUserData($post); $validation = $this->userService->validateUserData($data); if ($validation['success']) { if ($this->userService->isEmailUsed($data['email'])) { $validation['success'] = false; $validation['errors'][] = 'Email address is already in use.'; } } if ($validation['success']) { $___user = $this->userService->createUserFromData($data); //FILES $avatarFile = $request->files->get('avatar'); if ($avatarFile) { $avatarFileName = $this->fileService->upload('avatar', $avatarFile); if ($avatarFileName != null) { $___user->setAvatar($avatarFileName); } } $emailAvatarFile = $request->files->get('email_avatar'); if ($emailAvatarFile) { $emailAvatarFileName = $this->fileService->upload('email_avatar', $emailAvatarFile); if ($emailAvatarFileName != null) { $___user->setEmail_Avatar($emailAvatarFileName); } } $contractEmploymentFile = $request->files->get('contract_employment'); if ($contractEmploymentFile) { $contractEmploymentFileName = $this->fileService->upload('contract_employment', $contractEmploymentFile); if ($contractEmploymentFileName != null) { $___user->setContract_Employment($contractEmploymentFileName); } } ////// $this->entityManager->persist($___user); $this->entityManager->flush(); return $this->redirectToRoute( 'user-list', [ 'validation' => [ 'success' => 'User added successfully.' ] ] ); } else { //reset file values so they dont display as bad links on frontend... $data['avatar'] = ''; $data['contract_employment'] = ''; } } else { $data = new User(); } $user = $this->getUser(); return $this->render( 'user-add.html.twig', [ 'user' => $user, 'page' => [ 'title' => 'Add User', 'section' => 'Users', 'section_link' => '/cds/user' ], 'data' => $data, 'validation' => $validation ] ); } #[Route('/cds/user/edit', name: 'user-edit')] public function edit(Request $request): Response { $user = $this->getUser(); $data = []; $validation = []; $repository = $this->entityManager->getRepository(User::class); $post = $request->getPayload()->all(); if (count($post) > 0 && isset($post['id'])) { $___user = $repository->find($post['id']); if ($___user != null) { $data = $this->userService->sanitiseUserData($post); $validation = $this->userService->validateUserData($data); if ($validation['success']) { if ( $data['email'] != $___user->getEmail() && $this->userService->isEmailUsed($data['email']) ) { $validation['success'] = false; $validation['errors'][] = 'Email address is already in use.'; } } if ($validation['success']) { $this->userService->updateUserFromData($___user, $data); //FILES $avatarFile = $request->files->get('avatar'); if ($avatarFile) { $avatarFileName = $this->fileService->upload('avatar', $avatarFile); if ($avatarFileName != null) { $this->fileService->delete('avatar', $___user->getAvatar()); $___user->setAvatar($avatarFileName); } } $emailAvatarFile = $request->files->get('email_avatar'); if ($emailAvatarFile) { $emailAvatarFileName = $this->fileService->upload('email_avatar', $emailAvatarFile); if ($emailAvatarFileName != null) { $this->fileService->delete('email_avatar', $___user->getEmail_Avatar()); $___user->setEmail_Avatar($emailAvatarFileName); } } $contractEmploymentFile = $request->files->get('contract_employment'); if ($contractEmploymentFile) { $contractEmploymentFileName = $this->fileService->upload('contract_employment', $contractEmploymentFile); if ($contractEmploymentFileName != null) { $this->fileService->delete('contract_employment', $___user->getContract_Employment()); $___user->setContract_Employment($contractEmploymentFileName); } } ////// $this->entityManager->persist($___user); $this->entityManager->flush(); return $this->redirectToRoute( 'user-list', [ 'validation' => [ 'success' => 'User edited successfully.' ] ] ); } else { //reset file values so they dont display as bad links on frontend... $data['avatar'] = ''; $data['contract_employment'] = ''; //reformat roles array $roles = []; foreach ($data['roles'] as $value) { $roles[$value] = $value; } $data['roles'] = $roles; } } else { //user not found return $this->redirectToRoute('user-list'); } } else { $id = (int)$request->query->get('id'); $___user = $repository->find($id); if ($___user != null) { $data = $___user; } else { return $this->redirectToRoute('user-list'); } } return $this->render( 'user-edit.html.twig', [ 'user' => $user, 'page' => [ 'title' => 'Edit User', 'section' => 'Users', 'section_link' => '/cds/user' ], 'data' => $data, 'validation' => $validation ] ); } #[Route('/cds/user/view', name: 'user-view')] public function view(Request $request): Response { $user = $this->getUser(); $repository = $this->entityManager->getRepository(User::class); $id = (int)$request->query->get('id'); $___user = $repository->find($id); if ($___user != null) { $data = $___user; } else { return $this->redirectToRoute('user-list'); } return $this->render( 'user-view.html.twig', [ 'user' => $user, 'page' => [ 'title' => 'View User', 'section' => 'Users', 'section_link' => '/cds/user' ], 'data' => $data ] ); } #[Route('/cds/user/email-signature', name: 'user-email-signature')] public function generateEmailSignature(Request $request): Response { $user = $this->getUser(); $repository = $this->entityManager->getRepository(User::class); $id = (int)$request->query->get('id'); $___user = $repository->find($id); if ($___user != null) { $data = $___user; } else { return $this->redirectToRoute('user-list'); } return $this->render( 'user-email-signature.html.twig', [ 'user' => $user, 'page' => [ 'title' => 'Email Signature', 'section' => 'Users', 'section_link' => '/cds/user' ], 'data' => $data ] ); } }