<?php
namespace App\Controller\User;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Security;
// use Symfony\Component\Security\Core\SecurityContextInterface;
use App\Entity\User\User;
use App\Entity\User\Customer;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class UserController extends AbstractController {
/**
* This is an index page of the site
*
* @return Response
*/
public function indexAction() {
return $this->render('User/index.html.twig');
}
/**
* This is a login page
*
* @param Request $request
* @return Response
*/
public function loginAction(AuthenticationUtils $authenticationUtils): Response {
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
// $session = $request->getSession();
// // get the login error if there is one
// if ($request->attributes->has(Security::AUTHENTICATION_ERROR)) {
// $error = $request->attributes->get(
// Security::AUTHENTICATION_ERROR
// );
// } elseif (null !== $session &&
// $session->has(Security::AUTHENTICATION_ERROR)) {
// $error = "Email and password do not match";
// $session->remove(Security::AUTHENTICATION_ERROR);
// } else {
// $error = '';
// }
// last username entered by the user
// $lastUsername = (null === $session) ? '' :
// $session->get(Security::LAST_USERNAME);
return $this->render('User/login.html.twig', array(
// last username entered by the user
'last_username' => $lastUsername,
'error' => $error,
));
}
/**
* This is the page where invited users will land by the
* link sent to their emails and will register themselves
*
* @param type $emailVerifyId
* @return type
*/
public function inviteUserAction(ManagerRegistry $doctrine, $emailVerifyId){
$email = $status = $role = '';
/**
* @TODO create this page
*/
// $em = $this->getDoctrine()->getManager();
$user = $doctrine->getRepository(User::class)->findOneBy(array("verificationId" => $emailVerifyId));
if($user){
$status = $user->getStatus();
if($user->getStatus() == User::UNVERIFIED){
$user->setStatus(User::UNREGISTERED);
// $em->flush();
}
$email = $user->getEmail();
$role = $user->getRole()->getName();
}else{
$status = false;
}
return $this->render('User/userregistration.html.twig', $param = array(
'emailVerifyId' => $emailVerifyId,
'status' => $status,
"email" => $email,
"role" => $role
));
}
/**
* Reset password
*
* @param type $resetPasswordId
* @return Response
*/
public function resetPasswordAction(ManagerRegistry $doctrine, $resetPasswordId){
// $em = $this->getDoctrine()->getManager();
$user = $doctrine->getRepository(User::class)->findOneBy(array("passwordResetId" => $resetPasswordId));
if($user){
$status = 1;
}else{
$status = 0;
}
return $this->render('User/reset.html.twig', array(
'resetPasswordId' => $resetPasswordId,
'status' => $status
));
}
/**
* Change password
*
* @param Request $request
* @return Response
*/
public function changePasswordAction(Request $request){
return $this->render('User/changepassword.html.twig', array());
}
/**
* Show list of users
*
* @param Request $request
* @return Response
*/
public function usersAction(ManagerRegistry $doctrine, Request $request){
$data = array('customers' => $this->_getAllCustomers($doctrine));
return $this->render('User/users.html.twig', $data);
}
/**
* Show list of roles
*
* @param Request $request
* @return type
*/
public function rolesAction(Request $request){
return $this->render('User/roles.html.twig', array());
}
/**
* Show MyPreference page
*
* @param Request $request
* @return type
*/
public function mypreferencesAction(Request $request){
return $this->render('User/mypreferences.html.twig', array());
}
/**
* Show RolePermissions page
*
* @param type $roleId
* @return Response
*/
public function rolePermissionsAction($roleId){
return $this->render('User/rolepermissions.html.twig', array('roleId' => $roleId));
}
/**
* This is an action to show AccessDenied page
*
* @param Request $request
* @return Response
*/
public function noaccessAction(Request $request){
return $this->render('User/noaccess.html.twig', array());
}
/**
* This is an action to choose Customer page
*
* @param Request $request
* @return Response
*/
public function choosecustomerAction(Request $request){
$data = array('customers' => $this->_getAllCustomersForUser($this->getUser()));
return $this->render('User/choosecustomer.html.twig', $data);
}
/**
* This function will return the array of customers
* for a role
*
* @param User $user
* @return array of customers
*/
private function _getAllCustomersForUser(User $user) {
$customer_pointers = $user->getAllowedCustomers(true);
$result = array();
foreach ($customer_pointers as $customer_pointer) {
$customer = $customer_pointer->getCustomer();
$result[] = array(
'id' => $customer->getId(),
'name' => $customer->getName()
);
}
return $result;
}
/**
* This method will return all the customers
*
* @return array
*/
private function _getAllCustomers($doctrine) {
$repo = $doctrine->getRepository(Customer::class);
$customers = $repo->findAll();
$result = array();
foreach ($customers as $customer) {
$result[] = array(
'id' => $customer->getId(),
'name' => $customer->getName()
);
}
return $result;
}
}