<?php /** @noinspection ALL */
namespace App\Controller\Kernel;
use App\Entity\Kernel\User;
use App\Entity\Kernel\Organization;
use App\Entity\Kernel\UserFunction;
use App\Entity\Kernel\ListItem;
use App\Entity\Kernel\Setting;
use App\Entity\Kernel\ScreenConfigurationPage;
use App\Entity\HR\Employee;
use App\Form\Kernel\UserSimpleType;
use App\Form\Kernel\UserProfileType;
use App\Form\Kernel\UserProfileLimitedType;
use App\Form\Kernel\UserAdminType;
use App\Form\Kernel\UserPasswordType;
use App\Repository\Kernel\UserRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Service\Kernel\UserService;
use App\Service\Kernel\DMSService;
/**
* @Route("/{_locale}/user")
*/
class UserController extends AbstractController
{
/**
* @Route("/", name="user_index", methods={"GET"})
*/
public function index(UserService $userService): Response
{
$classname = explode("\\", get_class($this));
$arraysize = count($classname);
$attribute = str_replace("Controller", "", $classname[$arraysize - 1]).":".str_replace(
"Action",
"",
__FUNCTION__
);
$this->denyAccessUnlessGranted($attribute);
$rights = $userService->GetAuthorizationtype();
$em = $this->getDoctrine()->getManager();
if ($this->getUser()->getOrganization() == null) {
$query = $em->createQuery(
"SELECT s FROM App\Entity\Kernel\User s LEFT JOIN s.userfunction t WHERE ((s.state = 0) AND ((s.userfunction is NULL) or (t.authorizationtype <= ?1)))"
);
$query = $query->setParameter(1, $rights);
$users = $query->getResult();
} else {
$query = $em->createQuery(
"SELECT s FROM App\Entity\Kernel\User s LEFT JOIN s.userfunction t WHERE ((s.state = 0) AND ((s.organization = ?2) AND ((s.userfunction is NULL) or (t.authorizationtype <= ?1))))"
);
$query = $query->setParameter(1, $rights);
$query = $query->setParameter(2, $this->getUser()->getOrganization()->getId());
$users = $query->getResult();
}
return $this->render('kernel/user/index.html.twig', [
'users' => $users,
]);
}
/**
* @Route("/showarchived", name="user_showarchived", methods={"GET"})
*/
public function showarchived(UserService $userService): Response
{
$classname = explode("\\", get_class($this));
$arraysize = count($classname);
$attribute = str_replace("Controller", "", $classname[$arraysize-1]) . ":" . str_replace("Action", "", __FUNCTION__);
$this->denyAccessUnlessGranted($attribute);
$rights = $userService->GetAuthorizationtype();
$em = $this->getDoctrine()->getManager();
if ($this->getUser()->getOrganization() == null)
{
$query = $em->createQuery("SELECT s FROM App\Entity\Kernel\User s LEFT JOIN s.userfunction t WHERE ((s.state = 1) AND ((s.userfunction is NULL) or (t.authorizationtype <= ?1)))");
$query = $query->setParameter(1, $rights);
$users = $query->getResult();
}
else
{
$query = $em->createQuery("SELECT s FROM App\Entity\Kernel\User s LEFT JOIN s.userfunction t WHERE ((s.state = 1) AND ((s.organization = ?2) AND ((s.userfunction is NULL) or (t.authorizationtype <= ?1))))");
$query = $query->setParameter(1, $rights);
$query = $query->setParameter(2, $this->getUser()->getOrganization()->getId());
$users = $query->getResult();
}
return $this->render('kernel/user/archived.html.twig', [
'users' => $users,
]);
}
/**
* @Route("/showdeleted", name="user_showdeleted", methods={"GET"})
*/
public function showdeleted(UserService $userService): Response
{
$classname = explode("\\", get_class($this));
$arraysize = count($classname);
$attribute = str_replace("Controller", "", $classname[$arraysize-1]) . ":" . str_replace("Action", "", __FUNCTION__);
$this->denyAccessUnlessGranted($attribute);
$rights = $userService->GetAuthorizationtype();
$em = $this->getDoctrine()->getManager();
if ($this->getUser()->getOrganization() == null)
{
$query = $em->createQuery("SELECT s FROM App\Entity\Kernel\User s LEFT JOIN s.userfunction t WHERE ((s.state = 2) AND ((s.userfunction is NULL) or (t.authorizationtype <= ?1)))");
$query = $query->setParameter(1, $rights);
$users = $query->getResult();
}
else
{
$query = $em->createQuery("SELECT s FROM App\Entity\Kernel\User s LEFT JOIN s.userfunction t WHERE ((s.state = 2) AND ((s.organization = ?2) AND ((s.userfunction is NULL) or (t.authorizationtype <= ?1))))");
$query = $query->setParameter(1, $rights);
$query = $query->setParameter(2, $this->getUser()->getOrganization()->getId());
$users = $query->getResult();
}
return $this->render('kernel/user/deleted.html.twig', [
'users' => $users,
]);
}
/**
* @Route("/home/{id}/{position?0}", name="user_home", methods={"GET"})
*/
public function home(User $user, int $position, UserService $userService): Response
{
$classname = explode("\\", get_class($this));
$arraysize = count($classname);
$attribute = str_replace("Controller", "", $classname[$arraysize-1]) . ":" . str_replace("Action", "", __FUNCTION__);
$this->denyAccessUnlessGranted($attribute, $user);
$pages = null;
$currentuser = $this->getUser();
$continue = true;
if ($currentuser->getId() != $user->getId())
{
$template = $user->getUserFunction()->getUiTemplate();
if ($template != null)
{
if ($template->getName() == "UITemplate.Default")
{
$continue = true;
}
}
}
if ($continue == true)
{
$screenconfig = $user->getUserFunction()->getSpecificScreenConfiguration();
$pages = null;
if ($screenconfig != null)
{
$entityManager = $this->getDoctrine()->getManager();
$pages = $entityManager->getRepository(ScreenConfigurationPage::class)->findBy(array('screenconfiguration' => $screenconfig, 'state' => 0), array('position' => 'ASC'));
}
}
return $this->render('kernel/user/home.html.twig', [
'user' => $user,
'position' => $position,
'pages' => $pages,
]);
}
/**
* @Route("/new", name="user_new", methods={"GET","POST"})
*/
public function new(Request $request, UserService $userService): Response
{
$classname = explode("\\", get_class($this));
$arraysize = count($classname);
$attribute = str_replace("Controller", "", $classname[$arraysize-1]) . ":" . str_replace("Action", "", __FUNCTION__);
$this->denyAccessUnlessGranted($attribute);
$rights = $userService->GetAuthorizationtype();
$organization = $this->getUser()->getOrganization();
if ($organization != null)
{
$organization = $organization->getId();
}
else
{
$organization = -1;
}
$user = new User();
if ($this->getUser()->getOrganization() == null)
{
$formFactory = $this->get('form.factory');
$form = $formFactory->createNamed('user',UserAdminType::class, $user,
['rights' => $rights, 'organization' => $organization, 'action' => $this->generateUrl('user_new'), 'attr' => ['id' => $this->generateUrl('user_new')]]);
}
else
{
$formFactory = $this->get('form.factory');
$form = $formFactory->createNamed('user',UserSimpleType::class, $user,
['rights' => $rights, 'organization' => $organization, 'action' => $this->generateUrl('user_new'), 'attr' => ['id' => $this->generateUrl('user_new')]]);
}
$form->handleRequest($request);
$valid = true;
$entityManager = $this->getDoctrine()->getManager();
if ($form->isSubmitted() == true)
{
$params = $request->get('user'); //dubbel
if (isset($params['userfunction']) == false)
{
$this->get('session')->getFlashBag()->add('error', 'User.UserFunctionIsMandatory');
$valid = false;
}
else
{
$userfunction = $entityManager->getRepository(UserFunction::class)->findOneById($params['userfunction']);
if ($this->getUser()->getOrganization() == null)
{
if (isset($params['organization']) == true)
{
if ($organization != -1)
{
$organization = $entityManager->getRepository(Organization::class)->findOneById($params["organization"]);
if ($organization != $userfunction->getOrganization())
{
$this->get('session')->getFlashBag()->add('error', 'User.UserFunctionNotValidForOrganization');
$valid = false;
}
}
}
}
}
}
if (($form->isSubmitted()) && ($valid == true)) {
/*$entityManager = $this->getDoctrine()->getManager();
$user->setUuid($user->getEmail());
$user->setState(0);
$entityManager->persist($user);
$entityManager->flush();*/
$email = $params['email'];
$firstName = $params['firstName'];
$lastName = $params['lastName'];
$timezone = $params['timezone'];
$phone = $params['phone'];
if (isset($params["enabled"]))
{
$enabled = true;
}
else
{
$enabled = false;
}
if (isset($params["locked"]))
{
$locked = true;
}
else
{
$locked = false;
}
if ($this->getUser()->getOrganization() == null)
{
$organization = $entityManager->getRepository(Organization::class)->findOneById($params["organization"]);
}
else
{
$organization = $this->getUser()->getOrganization();
}
$timezone = $entityManager->getRepository(ListItem::class)->findOneById($params['timezone']);
$locale = $entityManager->getRepository(ListItem::class)->findOneById($params['locale']);
$userfunction = $entityManager->getRepository(UserFunction::class)->findOneById($params['userfunction']);
$user = $userService->CreateUser($email, $email, $firstName, $lastName, null, $phone, $locale, $timezone, $userfunction, $organization, 0);
if (isset($params['employeeselect2']) == true) {
$employeeselect2 = $params['employeeselect2'];
$employee = null;
$employeetype = substr($employeeselect2, 0, 2);
$employeeid = substr($employeeselect2, 2);
if ($employeetype == "SU") {
$user->setEmployee(
$entityManager->getRepository(Employee::class)
->findOneById($employeeid));
}
}
$entityManager->persist($user);
$entityManager->flush();
$this->denyAccessUnlessGranted($attribute, $user);
return $this->redirectToRoute('user_index');
}
return $this->render('kernel/user/new.html.twig', [
'user' => $user,
'form' => $form->createView(),
]);
}
/**
* @Route("/profile", name="user_profile", methods={"GET"})
*/
public function profile(): Response
{
$user = $this->getUser();
$classname = explode("\\", get_class($this));
$arraysize = count($classname);
$attribute = str_replace("Controller", "", $classname[$arraysize-1]) . ":" . str_replace("Action", "", __FUNCTION__);
$this->denyAccessUnlessGranted($attribute, $user);
return $this->render('kernel/user/profile.html.twig', [
'user' => $user,
]);
}
/**
* @Route("/{id}", name="user_show", methods={"GET"})
*/
public function show(User $user): Response
{
$classname = explode("\\", get_class($this));
$arraysize = count($classname);
$attribute = str_replace("Controller", "", $classname[$arraysize-1]) . ":" . str_replace("Action", "", __FUNCTION__);
$this->denyAccessUnlessGranted($attribute, $user);
return $this->render('kernel/user/show.html.twig', [
'user' => $user,
]);
}
/**
* @Route("/{id}/audit", name="user_showaudit", methods={"GET"})
*/
public function showaudit(User $user): Response
{
$classname = explode("\\", get_class($this));
$arraysize = count($classname);
$attribute = str_replace("Controller", "", $classname[$arraysize-1]) . ":" . str_replace("Action", "", __FUNCTION__);
$this->denyAccessUnlessGranted($attribute, $user);
return $this->render('kernel/user/showaudit.html.twig', [
'user' => $user,
]);
}
/**
* @Route("/{id}/archive", name="user_archive", methods={"GET"})
*/
public function archive(User $user): Response
{
$classname = explode("\\", get_class($this));
$arraysize = count($classname);
$attribute = str_replace("Controller", "", $classname[$arraysize-1]) . ":" . str_replace("Action", "", __FUNCTION__);
$this->denyAccessUnlessGranted($attribute, $user);
$entityManager = $this->getDoctrine()->getManager();
$user->setState(1);
$entityManager->persist($user);
$entityManager->flush();
return $this->redirectToRoute('user_show', array('id' => $user->getId()));
}
/**
* @Route("/{id}/restore", name="user_restore", methods={"GET"})
*/
public function restore(User $user): Response
{
$classname = explode("\\", get_class($this));
$arraysize = count($classname);
$attribute = str_replace("Controller", "", $classname[$arraysize-1]) . ":" . str_replace("Action", "", __FUNCTION__);
$this->denyAccessUnlessGranted($attribute, $user);
$entityManager = $this->getDoctrine()->getManager();
$user->setState(0);
$entityManager->persist($user);
$entityManager->flush();
return $this->redirectToRoute('user_show', array('id' => $user->getId()));
}
/**
* @Route("/{id}/delete", name="user_logicaldelete", methods={"GET"})
*/
public function logicaldelete(User $user): Response
{
$classname = explode("\\", get_class($this));
$arraysize = count($classname);
$attribute = str_replace("Controller", "", $classname[$arraysize-1]) . ":" . str_replace("Action", "", __FUNCTION__);
$this->denyAccessUnlessGranted($attribute, $user);
$entityManager = $this->getDoctrine()->getManager();
$user->setUuid($user->getUuid() . "_" . date("Y-m-d H:i:s"));
$user->setState(2);
$entityManager->persist($user);
$entityManager->flush();
//return $this->redirectToRoute('user_show', array('id' => $user->getId()));
return $this->redirectToRoute('user_index');
}
/**
* @Route("/profile/edit", name="user_edit_profile", methods={"GET","POST"})
*/
public function profileedit(Request $request, UserService $userService, DMSService $dMSService): Response
{
$user = $this->getUser();
$classname = explode("\\", get_class($this));
$arraysize = count($classname);
$attribute = str_replace("Controller", "", $classname[$arraysize-1]) . ":" . str_replace("Action", "", __FUNCTION__);
$this->denyAccessUnlessGranted($attribute, $user);
$template = $user->getUserFunction()->getUiTemplate();
$useruitemplate = false;
if ($template != null)
{
if ($template->getName() == "UITemplate.User")
{
$useruitemplate = true;
}
}
$rights = $userService->GetAuthorizationtype();
$organization = $this->getUser()->getOrganization();
if ($organization != null)
{
$organization = $organization->getId();
}
else
{
$organization = -1;
}
$template = $this->getUser()->getUserFunction()->getUiTemplate();
$uiTemplate = false;
if (($template != null) && ($template->getName() == 'UITemplate.User')) {
$form = $this->createForm(UserProfileLimitedType::class, $user,
['action' => $this->generateUrl('user_edit_profile'), 'attr' => ['id' => $this->generateUrl('user_edit_profile')]]);
} else
{
$form = $this->createForm(UserProfileType::class, $user,
['action' => $this->generateUrl('user_edit_profile'), 'attr' => ['id' => $this->generateUrl('user_edit_profile')]]);
}
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->getDoctrine()->getManager()->flush();
$input = $request->files->get('user_profile');
if($input != null)
{
$uploadfile = $input['picture'];
if ($uploadfile != null)
{
$dMSService->addVersion($user->getPicture(), $uploadfile);
}
}
if ($useruitemplate == true)
{
return $this->redirectToRoute('user_home', array('id' => $user->getId()));
}
return $this->redirectToRoute('user_profile');
}
if ($useruitemplate == true)
{
return $this->render('kernel/user/editprofilesimple.html.twig', [
'user' => $user,
'form' => $form->createView(),
'useruitemplate' => $useruitemplate
]);
}
return $this->render('kernel/user/editprofile.html.twig', [
'user' => $user,
'form' => $form->createView(),
'useruitemplate' => $useruitemplate
]);
}
/**
* @Route("/{id}/edit", name="user_edit", methods={"GET","POST"})
*/
public function edit(Request $request, User $user, UserService $userService, DMSService $dMSService): Response
{
$classname = explode("\\", get_class($this));
$arraysize = count($classname);
$attribute = str_replace("Controller", "", $classname[$arraysize-1]) . ":" . str_replace("Action", "", __FUNCTION__);
$this->denyAccessUnlessGranted($attribute, $user);
$rights = $userService->GetAuthorizationtype();
$organization = $this->getUser()->getOrganization();
if ($organization != null)
{
$organization = $organization->getId();
}
else
{
$organization = -1;
}
$employees = array();
$employee = "";
if ($user->getEmployee() != null)
{
$employees["".$user->getEmployee()]
= "SU".$user->getEmployee()->getId();
$employee = "SU".$user->getEmployee()->getId();
}
$form = $this->createForm(UserSimpleType::class, $user,
['employees' => $employees,
'employee' => $employee, 'rights' => $rights, 'organization' => $organization, 'action' => $this->generateUrl('user_edit', array('id' => $user->getId())), 'attr' => ['id' => $this->generateUrl('user_edit', array('id' => $user->getId()))]]);
$form->handleRequest($request);
if ($form->isSubmitted()) {
$requestdata = $request->get('user_simple'); //dubbel
if (isset($requestdata['employeeselect2']) == true) {
$employeeselect2 = $requestdata['employeeselect2'];
$employee = null;
$employeetype = substr($employeeselect2, 0, 2);
$employeeid = substr($employeeselect2, 2);
if ($employeetype == "SU") {
$user->setEmployee(
$this->getDoctrine()->getManager()->getRepository(Employee::class)
->findOneById($employeeid));
}
if ($employeetype == "NO") {
$user->setEmployee(null);
}
}
$this->getDoctrine()->getManager()->flush();
$input = $request->files->get('user');
if($input != null)
{
$uploadfile = $input['picture'];
if ($uploadfile != null)
{
$dMSService->addVersion($user->getPicture(), $uploadfile);
}
}
return $this->redirectToRoute('user_show', array('id' => $user->getId()));
}
return $this->render('kernel/user/edit.html.twig', [
'user' => $user,
'form' => $form->createView(),
]);
}
/**
* @Route("/profile/changepassword", name="user_changepassword_profile", methods={"GET","POST"})
*/
public function profilechangepassword(Request $request,UserService $userService): Response
{
$user = $this->getUser();
$classname = explode("\\", get_class($this));
$arraysize = count($classname);
$attribute = str_replace("Controller", "", $classname[$arraysize-1]) . ":" . str_replace("Action", "", __FUNCTION__);
$this->denyAccessUnlessGranted($attribute, $user);
$template = $user->getUserFunction()->getUiTemplate();
$useruitemplate = false;
if ($template != null)
{
if ($template->getName() == "UITemplate.User")
{
$useruitemplate = true;
}
}
$form = $this->createForm(UserPasswordType::class, $user,
['action' => $this->generateUrl('user_changepassword_profile'), 'attr' => ['id' => $this->generateUrl('user_changepassword_profile')]]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$userService->UpdatePassword($user, $user->getPassword());
//$this->getDoctrine()->getManager()->flush();
if ($useruitemplate == true)
{
return $this->redirectToRoute('user_home', array('id' => $user->getId()));
}
return $this->redirectToRoute('user_profile');
}
if ($useruitemplate == true)
{
return $this->render('kernel/user/changepasswordprofilesimple.html.twig', [
'user' => $user,
'form' => $form->createView(),
'useruitemplate' => $useruitemplate
]);
}
return $this->render('kernel/user/changepasswordprofile.html.twig', [
'user' => $user,
'form' => $form->createView(),
'useruitemplate' => $useruitemplate
]);
}
/**
* @Route("/{id}/changepassword", name="user_changepassword", methods={"GET","POST"})
*/
public function changepassword(Request $request, User $user, UserService $userService): Response
{
$classname = explode("\\", get_class($this));
$arraysize = count($classname);
$attribute = str_replace("Controller", "", $classname[$arraysize-1]) . ":" . str_replace("Action", "", __FUNCTION__);
$this->denyAccessUnlessGranted($attribute, $user);
$form = $this->createForm(UserPasswordType::class, $user,
['action' => $this->generateUrl('user_changepassword', array('id' => $user->getId())), 'attr' => ['id' => $this->generateUrl('user_changepassword', array('id' => $user->getId()))]]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$userService->UpdatePassword($user, $user->getPassword());
//$this->getDoctrine()->getManager()->flush();
return $this->redirectToRoute('user_show', array('id' => $user->getId()));
}
return $this->render('kernel/user/changepassword.html.twig', [
'user' => $user,
'form' => $form->createView(),
]);
}
/**
* @Route("/{id}", name="user_delete", methods={"DELETE"})
*/
public function delete(Request $request, User $user): Response
{
$classname = explode("\\", get_class($this));
$arraysize = count($classname);
$attribute = str_replace("Controller", "", $classname[$arraysize-1]) . ":" . str_replace("Action", "", __FUNCTION__);
$this->denyAccessUnlessGranted($attribute, $user);
if ($this->isCsrfTokenValid('delete'.$user->getId(), $request->request->get('_token'))) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($user);
$entityManager->flush();
}
return $this->redirectToRoute('user_index');
}
}