<?php
namespace App\ProPneu\Service\UserBundle\Controller;
use App\ProPneu\Service\MetierManagerBundle\Utils\RoleName;
use App\ProPneu\Service\MetierManagerBundle\Utils\ServiceName;
use App\ProPneu\Service\UserBundle\Entity\User;
use App\ProPneu\Service\UserBundle\Form\ProfileType;
use App\ProPneu\Service\UserBundle\Form\UserType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
/**
* Class UserController
*/
class UserController extends AbstractController
{
/**
* Json data recovery
* @param Request $_request
* @param int $_nb_total
* @param int $_nb_displayed
* @param mixed $_values
* @param string $_template
* @return string
*/
public function getDataJson($_request, $_nb_total, $_nb_displayed, $_values, $_template)
{
$_data['sEcho'] = $_request->query->get('sEcho');
$_data['iTotalRecords'] = (int)$_nb_total;
$_data['iTotalDisplayRecords'] = (int)$_nb_displayed;
return $this->renderView($_template, array(
'data' => $_data,
'values' => $_values
));
}
/**
* Ajax list user
* @param \Symfony\Component\HttpFoundation\Request $_request
* @return \Symfony\Component\HttpFoundation\Response
*/
public function listAjaxAction(Request $_request)
{
// Get service
$_user_manager = $this->get(ServiceName::SRV_METIER_USER);
// Filter and sorting
$_filters = $_user_manager->getFilters($_request);
$_sortings = $_user_manager->getSortings($_request, array(
'',
'',
'usr.usrFirstname',
'usr.email',
'usr.usrAddress',
'usr_rl.usrRlName',
'usr.usrDateCreate',
));
// Search filter
$_options = array(
'search' => $_request->query->get('sSearch'),
'usr_role' => $_request->query->get('usr_role'),
);
// Retrieve records
$_nb_paris = $_user_manager->getNbPpUserBy($_options);
$_city_result = $_user_manager->getAllPpUserBy($_options, $_filters, $_sortings);
// Json treatment
$_template = 'UserBundle:User:list.json.twig';
$_content = $this->getDataJson(
$_request,
$_nb_paris['nb'],
$_nb_paris['nb'],
$_city_result,
$_template
);
$_response = new Response($_content);
$_response->headers->set('Content-Type', 'application/json');
return $_response;
}
/**
* Display all user
* @return Render page
*/
public function indexAction()
{
$_roles = RoleName::$ROLE_LIST;
return $this->render('UserBundle:User:index.html.twig', [
'roles' => $_roles
]);
}
/**
* Display a page update user
* @param User $_user
* @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
*/
public function editAction(User $_user)
{
$_utils_manager = $this->get(ServiceName::SRV_METIER_UTILS);
$_branche = $_user->getPpBranche() ? $_user->getPpBranche() : '';
$_check_branch = $_utils_manager->checkBrancheValid($_branche);
$_user_roles = $_user->getRoles();
$_role_super_admin = RoleName::ROLE_SUPER_ADMINISTRATEUR;
if (count($_user_roles) && in_array($_role_super_admin, $_user_roles)) {
$_utils_manager->setFlash('error', 'Accès non autorisé');
return $this->redirectToRoute('user_index');
}
if ($_check_branch == false) {
return $this->redirect($this->generateUrl('user_index'));
}
$_edit_form = $this->createEditForm($_user);
$_has_role_checker = in_array(RoleName::ROLE_CHECKER, $_user->getRoles()) ? true : false;
return $this->render('UserBundle:User:edit.html.twig', array(
'user' => $_user,
'edit_form' => $_edit_form->createView(),
'role_super_admin' => RoleName::ID_ROLE_SUPERADMIN,
'has_role_checker' => $_has_role_checker
));
}
/**
* Display a page update user
* @param User $_user
* @return Render page
*/
public function showAction(User $_user)
{
// Get manager
$_utils_manager = $this->get(ServiceName::SRV_METIER_UTILS);
$_branche = $_user->getPpBranche() ? $_user->getPpBranche() : '';
$_check_branch = $_utils_manager->checkBrancheValid($_branche);
if ($_check_branch == false) {
return $this->redirect($this->generateUrl('user_index'));
}
if (!$_user) {
$_exception_message = $this->get('translator')->trans('exception.entity');
throw $this->createNotFoundException($_exception_message);
}
return $this->render('UserBundle:User:show.html.twig', array(
'user' => $_user,
));
}
/**
* Creation user
* @param Request $_request
* @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
* @throws \Exception
*/
public function newAction(Request $_request)
{
// Get manager
$_utils_manager = $this->get(ServiceName::SRV_METIER_UTILS);
$_user_manager = $this->get(ServiceName::SRV_METIER_USER);
$_user_upload_manager = $this->get(ServiceName::SRV_METIER_USER_UPLOAD);
$_user = new User();
/**
* si connecte autre que superadmin centre par defaut centre user connected
*/
$_user_connected = $this->get('security.token_storage')->getToken()->getUser();
$_has_role_superadmin = in_array('ROLE_SUPERADMIN', $_user_connected->getRoles());
if (!$_has_role_superadmin) {
$_user->setPpCentres($_user_connected->getPpCentres());
}
$_form = $this->createCreateForm($_user);
$_form->handleRequest($_request);
if ($_form->isSubmitted() && $_form->isValid()) {
// time slot
if ($_user->getUsrOpeningTime() && $_user->getUsrClosingTime()) {
$opening_time = new \DateTime(($_user->getUsrOpeningTime())->format('H:i:s'));
$closing_time = new \DateTime(($_user->getUsrClosingTime())->format('H:i:s'));
$_user->setUsrOpeningTime($opening_time);
$_user->setUsrClosingTime($closing_time);
}
$_is_enabled = $_request->request->get('enabled');
if ($_is_enabled) $_user->setEnabled(1);
$_file = $_request->files->all();
if (isset($_file['pp_userbundle_user']) && isset($_file['pp_userbundle_user']['usrImgUrl'])) {
$_user_upload_manager->upload($_user, $_file['pp_userbundle_user']['usrImgUrl']);
}
$_is_checker = $_request->request->get('checker');
$_user_manager->addUser($_user, $_form, $_is_checker);
$_flash_message = $this->get('translator')->trans('bo.confirmation.add');
$_utils_manager->setFlash('success', $_flash_message);
return $this->redirect($this->generateUrl('user_index'));
}
return $this->render('UserBundle:User:add.html.twig', array(
'user' => $_user,
'role_super_admin' => RoleName::ID_ROLE_SUPERADMIN,
'form' => $_form->createView()
));
}
/**
* Update user
* @param Request $_request
* @param User $_user
* @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
* @throws \Exception
*/
public function updateAction(Request $_request, User $_user)
{
// Get manager
$_utils_manager = $this->get(ServiceName::SRV_METIER_UTILS);
$_user_manager = $this->get(ServiceName::SRV_METIER_USER);
$_user_upload_manager = $this->get(ServiceName::SRV_METIER_USER_UPLOAD);
$_user_roles = $_user->getRoles();
$_role_super_admin = RoleName::ROLE_SUPER_ADMINISTRATEUR;
$_timezone = $this->get('security.token_storage')->getToken()->getAttributes()['_timezone'];
if (count($_user_roles) && in_array($_role_super_admin, $_user_roles)) {
$_utils_manager->setFlash('error', 'Accès non autorisé');
return $this->redirectToRoute('user_index');
}
$_edit_form = $this->createEditForm($_user);
$_edit_form->handleRequest($_request);
$_has_role_checker = in_array('ROLE_CHECKER', $_user->getRoles()) ? true : false;
if ($_edit_form->isValid()) {
// time slot
if ($_user->getUsrOpeningTime() && $_user->getUsrClosingTime()) {
$opening_time = new \DateTime(($_user->getUsrOpeningTime())->format('H:i:s'));
$closing_time = new \DateTime(($_user->getUsrClosingTime())->format('H:i:s'));
$_user->setUsrOpeningTime($opening_time);
$_user->setUsrClosingTime($closing_time);
}
$_is_enabled = $_request->request->get('enabled');
if ($_is_enabled) $_user->setEnabled(1);
//upload fichier image
$_file = $_request->files->all();
if (isset($_file['pp_userbundle_user']) && isset($_file['pp_userbundle_user']['usrImgUrl'])) {
$_user_upload_manager->upload($_user, $_file['pp_userbundle_user']['usrImgUrl']);
}
if (isset($_file['pp_userbundle_user']) && isset($_file['pp_userbundle_user']['usrPj'])) {
$_user_upload_manager->uploadPj($_user, $_file['pp_userbundle_user']['usrPj']);
}
$_is_checker = $_request->request->get('checker');
/**
* si connecte autre que superadmin centre par defaut centre user connected
*/
$_user_connected = $this->get('security.token_storage')->getToken()->getUser();
$_has_role_superadmin = in_array('ROLE_SUPERADMIN', $_user_connected->getRoles()) ? true : false;
if (!$_has_role_superadmin) {
$_user->setPpCentres($_user_connected->getPpCentres());
}
$_user_manager->updateUser($_user, $_edit_form, $_is_checker);
$_flash_message = $this->get('translator')->trans('bo.confirmation.update');
$_utils_manager->setFlash('success', $_flash_message);
$_user_manager->destroyAllConnexion($_user, $_timezone);
$_refers = $_request->headers->get('referer');
if ($_user->getId() == $_user_connected->getId() && strpos($_refers, "my-profile") !== false) {
return $this->redirect($this->generateUrl('user_profile'));
}
return $this->redirect($this->generateUrl('user_index'));
}
return $this->render('UserBundle:User:edit.html.twig', array(
'user' => $_user,
'edit_form' => $_edit_form->createView(),
'role_super_admin' => RoleName::ID_ROLE_SUPERADMIN,
'has_role_checker' => $_has_role_checker
));
}
/**
* Creation editing form user
* @param User $_user The entity
* @return \Symfony\Component\Form\Form The form
*/
private function createCreateForm(User $_user)
{
// Get user connected
$_utils_manager = $this->get(ServiceName::SRV_METIER_UTILS);
$_user_connected = $this->container->get('security.token_storage')->getToken()->getUser();
$_branche_id = $_utils_manager->findCurrentBranche() ? $_utils_manager->findCurrentBranche()->getId() : 0;
$_user_role = $_user_connected->getPpUserRole()->getId();
$_form = $this->createForm(UserType::class, $_user, array(
'action' => $this->generateUrl('user_new'),
'method' => 'POST',
'user_role' => $_user_role,
'branche_id' => $_branche_id,
'centres' => $this->getUser()->getIdPpCentres()
));
return $_form;
}
/**
* Creation additing form user
* @param User $_user The entity
* @return \Symfony\Component\Form\Form The form
*/
private function createEditForm(User $_user, $_is_profile = false)
{
// Get user connected
$_utils_manager = $this->get(ServiceName::SRV_METIER_UTILS);
$_user_connected = $this->container->get('security.token_storage')->getToken()->getUser();
$_user_role = $_user_connected->getPpUserRole()->getId();
$_branche_id = $_utils_manager->findCurrentBranche() ? $_utils_manager->findCurrentBranche()->getId() : 0;
$_form = $this->createForm(UserType::class, $_user, array(
'action' => $this->generateUrl('user_update', array('id' => $_user->getId())),
'method' => 'PUT',
'user_role' => $_user_role,
'branche_id' => $_branche_id,
'is_profile' => $_is_profile,
'centres' => $this->getUser()->getIdPpCentres()
));
return $_form;
}
/**
* Creation profile form user
* @param User $_user The entity
* @return \Symfony\Component\Form\Form The form
*/
private function createProfileForm(User $_user)
{
$_form = $this->createForm(ProfileType::class, $_user, array(
'action' => $this->generateUrl('user_profile'),
'method' => 'POST'
));
return $_form;
}
/**
* Deleting user
* @param Request $_request requête
* @param User $_user
* @return Redirect redirection
*/
public function deleteAction(Request $_request, User $_user)
{
// Get manager
$_utils_manager = $this->get(ServiceName::SRV_METIER_UTILS);
$_user_manager = $this->get(ServiceName::SRV_METIER_USER);
$_branche = $_user->getPpBranche() ? $_user->getPpBranche() : '';
$_check_branch = $_utils_manager->checkBrancheValid($_branche);
$_user_roles = $_user->getRoles();
$_role_super_admin = RoleName::ROLE_SUPER_ADMINISTRATEUR;
if (count($_user_roles) && in_array($_role_super_admin, $_user_roles)) {
$_utils_manager->setFlash('error', 'Accès non autorisé');
return $this->redirectToRoute('user_index');
}
$_user_connected = $this->get('security.token_storage')->getToken()->getUser();
if ($_user_connected->getId() == $_user->getId()) {
$_utils_manager->setFlash('error', 'Accès non autorisé');
return $this->redirectToRoute('user_index');
}
if ($_check_branch == false) {
return $this->redirect($this->generateUrl('user_index'));
}
$_form = $this->createDeleteForm($_user);
$_form->handleRequest($_request);
if ($_request->isMethod('GET') || ($_form->isSubmitted() && $_form->isValid())) {
$_user_manager->deleteUser($_user);
$_flash_message = $this->get('translator')->trans('bo.confirmation.delete');
$_utils_manager->setFlash('success', $_flash_message);
}
return $this->redirectToRoute('user_index');
}
/**
* Creation deleting form user
* @param User $_user The user entity
* @return \Symfony\Component\Form\Form The form
*/
private function createDeleteForm(User $_user)
{
return $this->createFormBuilder()
->setAction($this->generateUrl('user_delete', array('id' => $_user->getId())))
->setMethod('DELETE')
->getForm();
}
/**
* Ajax user image file deletion
* @param Request $_request
* @return JsonResponse
*/
public function deleteImageAjaxAction(Request $_request)
{
// Get manager
$_user_upload_manager = $this->get(ServiceName::SRV_METIER_USER_UPLOAD);
// Get all data form
$_data = $_request->request->all();
$_id = $_data['id'];
$_response = $_user_upload_manager->deleteImageById($_id);
return new JsonResponse($_response);
}
/**
* Ajax user file pj
* @param Request $_request
* @return JsonResponse
*/
public function deletePjAjaxAction(Request $_request)
{
// Get manager
$_user_upload_manager = $this->get(ServiceName::SRV_METIER_USER_UPLOAD);
// Get all data form
$_data = $_request->request->all();
$_id = $_data['id'];
$_response = $_user_upload_manager->deletePjById($_id);
return new JsonResponse($_response);
}
/**
* Deleting by group selected
* @param Request $_request
* @return Redirect liste utilisateur
*/
public function deleteGroupAction(Request $_request)
{
// Get manager
$_utils_manager = $this->get(ServiceName::SRV_METIER_UTILS);
$_user_manager = $this->get(ServiceName::SRV_METIER_USER);
if ($_request->request->get('_group_delete') !== null) {
$_ids = $_request->request->get('delete');
if ($_ids == null) {
$_flash_message = $this->get('translator')->trans('bo.confirmation.selection.delete');
$_utils_manager->setFlash('success', $_flash_message);
return $this->redirect($this->generateUrl('user_index'));
}
$_user_manager->deleteGroupUser($_ids);
}
$_flash_message = $this->get('translator')->trans('bo.confirmation.delete');
$_utils_manager->setFlash('success', $_flash_message);
return $this->redirect($this->generateUrl('user_index'));
}
/**
* @param Request $_request
* @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
* @throws \Exception
*/
public function resettingPasswordAction(Request $_request)
{
// Récupérer manager
$_utils_manager = $this->get(ServiceName::SRV_METIER_UTILS);
$_user_manager = $this->get(ServiceName::SRV_METIER_USER);
// Récupérer l'utilisateur connecté
$_user_connected = $this->get('security.token_storage')->getToken()->getUser();
if ($_request->isMethod('POST')) {
// Récuperer les données formulaire
$_post = $_request->request->all();
$_resetting_password = $_user_manager->resettingPassword($_post, $_request);
if (!$_resetting_password) {
$_flash_message = $this->get('translator')->trans('resetting.pasword.user.not.identified');
$_utils_manager->setFlash('error', $_flash_message);
return $this->redirect($this->generateUrl('eternaly_resetting_password'));
}
$_flash_message = $this->get('translator')->trans('resetting.pasword.email.sent', array(
"%adresse%" => $_post['_email']
));
$_utils_manager->setFlash('success', $_flash_message);
return $this->redirect($this->generateUrl('eternaly_resetting_password'));
}
return $this->render('UserBundle:Security:resetting_password.html.twig');
}
/**
* Change password
* @param null $_code
* @param Request $_request
* @return JsonResponse|\Symfony\Component\HttpFoundation\RedirectResponse|Response
* @throws \Exception
*/
public function changePasswordAction($_code = null, Request $_request)
{
// Get manager
$_user_manager = $this->get(ServiceName::SRV_METIER_USER);
$_user = $_user_manager->getUserByToken($_code);
if ($_request->isMethod('POST') && $_user) {
$_password = $_request->request->get('user_password');
$_result = $_user_manager->changePassword($_user, $_password);
$_data = array();
$_data['status'] = false;
if ($_result) {
$_data['status'] = true;
$_data['message'] = $this->get('translator')->trans('resetting.pasword.success');
$_data['url'] = $this->generateUrl('fos_user_security_logout');
}
return new JsonResponse($_data);
}
if ($_user && !$this->getUser())
return $this->render('UserBundle:Security:change_password.html.twig');
return $this->redirectToRoute('dashboard_index');
}
/**
* mon profil
* @return Response
*/
public function myProfileAction(Request $_request)
{
$_utils_manager = $this->get(ServiceName::SRV_METIER_UTILS);
$_user_manager = $this->get(ServiceName::SRV_METIER_USER);
$_user_upload_manager = $this->get(ServiceName::SRV_METIER_USER_UPLOAD);
// Recuperer l utilisateur connecte
$_user = $this->getUser();
$_profile_form = $this->createProfileForm($_user);
$_profile_form->handleRequest($_request);
if ($_profile_form->isSubmitted() && $_profile_form->isValid()) {
//upload fichier image
$_file = $_request->files->all();
if (isset($_file['pp_userbundle_user']) && isset($_file['pp_userbundle_user']['usrImgUrl'])) {
$_user_upload_manager->upload($_user, $_file['pp_userbundle_user']['usrImgUrl']);
}
if (isset($_file['pp_userbundle_user']) && isset($_file['pp_userbundle_user']['usrPj'])) {
$_user_upload_manager->uploadPj($_user, $_file['pp_userbundle_user']['usrPj']);
}
$_user_manager->updateUser($_user, $_profile_form);
$_flash_message = $this->get('translator')->trans('bo.confirmation.update');
$_utils_manager->setFlash('success', $_flash_message);
return $this->redirect($this->generateUrl('user_profile'));
}
return $this->render('UserBundle:User:my_profile.html.twig', array(
'user' => $_user,
'edit_form' => $_profile_form->createView()
));
}
}