src/Controller/SecurityController.php line 31

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Service\SycoreService;
  4. use App\Utility\UserLanguageQueries;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Exception;
  8. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Psr\Log\LoggerInterface;
  12. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  13. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  14. use Symfony\Component\Ldap\Ldap;
  15. use Symfony\Component\Ldap\LdapInterface;
  16. class SecurityController extends AbstractController
  17. {
  18.   public function __construct(
  19.     private SycoreService $sycoreService,
  20.     private LdapInterface $ldap,
  21.     private string $baseDn,
  22.     private string $searchDn,
  23.     private string $searchPassword,
  24.     private LoggerInterface $logger) {
  25.   }
  26.   public function loginAction(AuthenticationUtils $authenticationUtilsLoggerInterface $logger)
  27.   {
  28.     $em=$this->getDoctrine()->getManager(); 
  29.     $sql "select value::json from config where name_config = 'login_options'";
  30.     $stmt $em->getConnection()->prepare($sql);
  31.     $stmt->execute();
  32.     $value $stmt->fetchAll()[0]["value"];
  33.     $loginOptions json_decode($valuetrue);
  34.     //---------------------------------------
  35.     // Filtro solo quelli con active = "Y"
  36.     //---------------------------------------
  37.     $loginOptions array_filter($loginOptions, function ($f) {
  38.         return $f['active'] === 'Y';
  39.     });
  40.     //---------------------------------------
  41.     // Ordina per "order"
  42.     //---------------------------------------
  43.     usort($loginOptions, function ($a$b) {
  44.         return $a['order'] <=> $b['order'];
  45.     });      
  46.     // get the login error if there is one
  47.     $error $authenticationUtils->getLastAuthenticationError();
  48.     // last username entered by the user
  49.     $lastUsername $authenticationUtils->getLastUsername();
  50.     
  51.     $licenseAudit $this->sycoreService->getLicenseAudit();    
  52.     $status $this->sycoreService->getStatus();
  53.     return $this->render(
  54.       'Security/login.html.twig',
  55.       array(
  56.         'available'      => $status $status->available true,
  57.         'maintenance_on' => $status $status->maintenance_on false,
  58.         'maintenance_scheduled' => $status $status->maintenance_start != '' false,
  59.         'maintenance_start' => $status $status->maintenance_start '',
  60.         'is_licensed'    => $licenseAudit $licenseAudit->is_licensed false,
  61.         'service_tag'    => $licenseAudit $licenseAudit->code 'L-100-D00000',
  62.         // last username entered by the user
  63.         'last_username'  => $lastUsername,
  64.         'error'          => $error,
  65.         'cdate'          => time(),
  66.         'login_options'  => $loginOptions
  67.       )
  68.     );
  69.   }
  70.   public function checkAction(Request $requestLoggerInterface $logger)
  71.   {
  72.     $user $this->getUser();
  73.     $logger->debug('CHECKACTION: check action to do');
  74.     if ( $user->getChangePassword()) {
  75.       $logger->debug('CHECKACTION: change password');
  76.       return $this->redirect($this->generateUrl('user_edit'));
  77.     }
  78.     return $this->redirect($this->generateUrl('home'));
  79.   }
  80.   
  81.   //--------------------------------------------------------------------------
  82.   //Action intermedia tra login e caricamento dashboard per salvare i login
  83.   //--------------------------------------------------------------------------
  84.   public function userLoggingAction(Request $requestLoggerInterface $logger)
  85.   {
  86.     
  87.     $em=$this->getDoctrine()->getManager();
  88.     $user $this->getUser();
  89.     $userId $user->getId();
  90.     $username $user->getUsername();
  91.     $status $this->sycoreService->getStatus();
  92.     if ($status && $status->maintenance_on) {
  93.       if ($user->getUserRole() != 'ROLE_SUPER_ADMIN'
  94.       {
  95.         return $this->redirect($this->generateUrl('logout'));
  96.       }
  97.     }
  98.     $userType "local";
  99.     if ($user instanceof \App\Security\LdapUser)
  100.     {
  101.       $userType "ldap";
  102.       $logger->debug('[userLoggingAction] $user is LDAP');
  103.       $this->ldap->bind($this->searchDn$this->searchPassword);
  104.       $username $user->getUsername();
  105.       $query $this->ldap->query(
  106.           $this->baseDn,
  107.           sprintf('(uid=%s)'$username),
  108.           ['filter' => ['*''isMemberOf']]
  109.       );
  110.       $results $query->execute()->toArray();
  111.       $attributes $results[0]->getAttributes();
  112.       if ($attributes["status"][0] != "Attivo" || $attributes["enable"][0] != "TRUE")
  113.       {
  114.         $logger->debug('[userLoggingAction] $user is disabled or inactive ');
  115.         return $this->redirect($this->generateUrl('logout'));
  116.       }
  117.       $localUser $em->createQueryBuilder('u')
  118.       ->select('u')
  119.       ->from('App:User''u')
  120.       ->where('u.username = :username')
  121.       ->orderBy('u.lastName, u.firstName')
  122.       ->setParameter('username'$username)
  123.       ->getQuery()
  124.       ->getResult();
  125.       if (empty($localUser)) {
  126.         $logger->debug('[userLoggingAction] user not found');
  127.         $sql 'insert into user_acm(username, text1, email, first_name, last_name, user_role, status, change_text1 , flag_token) values('
  128.         ':username, :password, :email, :first_name, :last_name, :user_role, :status, :change_text1, :flag_token)';
  129.         $stmt $em->getConnection()->prepare($sql);
  130.         $stmt->bindValue('username'$username);
  131.         $stmt->bindValue('password'"");
  132.         $stmt->bindValue('email'$attributes["mail"][0]);
  133.         $stmt->bindValue('first_name'$attributes["cn"][0]);
  134.         $stmt->bindValue('last_name'$attributes["sn"][0]);
  135.         $stmt->bindValue('user_role'$user->getUserRole());
  136.         $stmt->bindValue('status''false');
  137.         $stmt->bindValue('change_text1'0);
  138.         $stmt->bindValue('flag_token'0);
  139.         $stmt->execute();
  140.         
  141.         $sql 'select id from user_acm where username = :username';
  142.         $stmt $em->getConnection()->prepare($sql);
  143.         $stmt->bindValue('username'$username);
  144.         $stmt->execute();
  145.         $newIdUser $stmt->fetchAll()[0]["id"];
  146.         $user->setId($newIdUser);
  147.         $randomString substr(str_replace(['+''/''='], ''base64_encode(random_bytes(32))), 030);
  148.         $sql 'insert into user_token(id_user, token, date_start_validity, date_end_validity, check_validity)'
  149.         "values( :id, :token,  SYSDATE(), TO_DATE('31-12-2999 23:59:59', 'dd-mm-yyyy HH24:mi:ss'), 'Y')";
  150.         $stmt $em->getConnection()->prepare($sql);
  151.         $stmt->bindValue('id'$user->getId());
  152.         $stmt->bindValue('token'$randomString);
  153.         $stmt->execute();
  154.         $logger->debug('[userLoggingAction] user added');
  155.       } else {
  156.         $logger->debug('[userLoggingAction] user found');
  157.         $user->setId($localUser[0]->getId());
  158.       }
  159.         $user->setFirstName($attributes["cn"][0]);
  160.         $user->setLastName($attributes["sn"][0]);
  161.         $sql="select id_roles,description_roles from roles";
  162.         $stmt $em->getConnection()->prepare($sql);
  163.         $stmt->execute();
  164.         $resultRoles $stmt->fetchAll();
  165.         //reset user roles
  166.         $sql="delete from user_profile_roles where id_user = :id";
  167.         $stmt $em->getConnection()->prepare($sql);
  168.         $stmt->bindValue('id'$user->getId());
  169.         $stmt->execute();
  170.         foreach ($resultRoles as $role) {        
  171.             if (!empty(preg_grep("/^cn=".$role["description_roles"]."/i"$attributes["isMemberOf"]))) {
  172.             $profile "Admin"
  173.             //admin, report, oper
  174.             $sql="select id_profile, type_profile from profile where type_profile = :profile";
  175.             $stmt $em->getConnection()->prepare($sql);
  176.             $stmt->bindValue('profile'$profile);
  177.             $stmt->execute();
  178.             $idProfile $stmt->fetchAll()[0]["id_profile"];
  179.             //add nuovi
  180.             $sql="insert into user_profile_roles (id_user, id_profile, id_roles) values (:idUser, :idProfile, :idRuolo)";
  181.             $stmt $em->getConnection()->prepare($sql);
  182.             $stmt->bindValue('idUser'$user->getId());
  183.             $stmt->bindValue('idProfile'$idProfile);
  184.             $stmt->bindValue('idRuolo'$role["id_roles"]);
  185.             $stmt->execute();
  186.           } else {
  187.             //admin, report, oper
  188.             $sql="select id_profile, type_profile from profile where type_profile = :profile";
  189.             $stmt $em->getConnection()->prepare($sql);
  190.             $stmt->bindValue('profile'"None");
  191.             $stmt->execute();
  192.             $idProfile $stmt->fetchAll()[0]["id_profile"];
  193.             //add nuovi
  194.             $sql="insert into user_profile_roles (id_user, id_profile, id_roles) values (:idUser, :idProfile, :idRuolo)";
  195.             $stmt $em->getConnection()->prepare($sql);
  196.             $stmt->bindValue('idUser'$user->getId());
  197.             $stmt->bindValue('idProfile'$idProfile);
  198.             $stmt->bindValue('idRuolo'$role["id_roles"]);
  199.             $stmt->execute();
  200.           }
  201.         }
  202.         $logger->debug('[userLoggingAction] roles refreshed');
  203.       } // end ldap user
  204.       $userId $user->getId();
  205.       // recupero l'ip del client
  206.       $ip $request->getClientIp();
  207.       if($ip == 'unknown'){
  208.         $ip $_SERVER['REMOTE_ADDR'];
  209.       }
  210.       //-----------------------------------------------------------
  211.       // Inserisce un record di login nella tabella user_logging
  212.       //-----------------------------------------------------------
  213.       $sql "INSERT INTO user_logging (
  214.                   id_user, user_time_log, log_type, ip_address, username, user_type
  215.               ) VALUES (
  216.                   :id_user, SYSDATE(), :log_type, :ip_address, :username, :user_type
  217.               )";
  218.       $statement $em->getConnection()->prepare($sql);
  219.       $statement->bindValue('id_user'$userId);
  220.       $statement->bindValue('log_type''login');
  221.       $statement->bindValue('ip_address'$ip);
  222.       $statement->bindValue('username'$username);
  223.       $statement->bindValue('user_type'$userType);
  224.       $statement->execute();
  225.       $sql="select  description_roles
  226.           from user_profile_roles  upr,  profile p , roles r, user_acm u
  227.           where upr.id_profile  = p.id_profile  and 
  228.               upr.id_roles  = r.id_roles and
  229.               upr.id_user = u.id and
  230.               upr.id_user= :idUser";
  231.       $stmt $em->getConnection()->prepare($sql);
  232.       $stmt->bindValue('idUser'$userId);
  233.       $stmt->execute();
  234.       $DescriptionRole=$stmt->fetchAll();
  235.       $sql="select  distinct string_agg(type_profile, ',')  type_profile
  236.         from user_profile_roles  upr,  profile p , roles r, user_acm u
  237.         where upr.id_profile  = p.id_profile  and 
  238.             upr.id_roles  = r.id_roles and
  239.             upr.id_user = u.id and
  240.             upr.id_user= :idUser";
  241.       $stmt $em->getConnection()->prepare($sql);
  242.       $stmt->bindValue('idUser'$userId);
  243.       $stmt->execute();
  244.       $TypeProfile=$stmt->fetchAll();
  245.       
  246.       $sql="select * from custom_dashboard_anag where level=0 and hidden='0' order by id";
  247.       $stmt $em->getConnection()->prepare($sql);
  248.       $stmt->execute();
  249.       $CustomDashboardLevel0 $stmt->fetchAll();
  250.       $sql="select * from custom_dashboard_anag where level=1 and hidden='0' order by id";
  251.       $stmt $em->getConnection()->prepare($sql);
  252.       $stmt->execute();
  253.       $CustomDashboardLevel1 $stmt->fetchAll();
  254.       $sql="select * from credits order by id";
  255.       $stmt $em->getConnection()->prepare($sql);
  256.       $stmt->execute();
  257.       $Credits $stmt->fetchAll();
  258.       $session $this->get('session');
  259.       $session->set('Ruolo', array(
  260.                             'DescriptionRole' => $DescriptionRole,
  261.                             'TypeProfile' => $TypeProfile
  262.                                 )
  263.                     );
  264.       $session->set('CustomDashboard', array(
  265.                             'CustomDashboardLevel0' => $CustomDashboardLevel0,
  266.                             'CustomDashboardLevel1' => $CustomDashboardLevel1
  267.                                 )
  268.                     );
  269.       $session->set('Credits', array(
  270.                       'Credits' => $Credits,
  271.                           )
  272.               );
  273.            
  274.       return $this->redirect($this->generateUrl('home'));  
  275.   }
  276.   public function logoutUserAction(Request $request$fromLoggerInterface $logger)
  277.   {
  278.     $em=$this->getDoctrine()->getManager();
  279.     $user $this->getUser();
  280.     $userId $user->getId();
  281.     $username $user->getUsername();
  282.     // recupero l'ip del client
  283.     $ip $request->getClientIp();
  284.     if($ip == 'unknown'){
  285.       $ip $_SERVER['REMOTE_ADDR'];
  286.     }
  287.     $logger->debug('[logoutUserAction] IP CLIENT: '.$ip);
  288.     $log_type_desc '';
  289.     if($from == 1){
  290.       $log_type_desc 'timeout';
  291.     } elseif ($from == 0){
  292.       $log_type_desc 'user logout';
  293.     }
  294.     $userType "local";
  295.     if ($user instanceof \App\Security\LdapUser)
  296.     {
  297.       $userType "ldap";
  298.     }
  299.     //-----------------------------------------------------------
  300.     // Inserisce un record di logout nella tabella user_logging
  301.     //------------------------------------------------------------
  302.     $sql "INSERT INTO user_logging (
  303.                 id_user, user_time_log, log_type, log_type_desc, ip_address, username, user_type
  304.             ) VALUES (
  305.                 :id_user, SYSDATE(), :log_type, :log_type_desc, :ip_address, :username, :user_type
  306.             )";
  307.     $statement $em->getConnection()->prepare($sql);
  308.     $statement->bindValue('id_user'$userId);
  309.     $statement->bindValue('log_type''logout');
  310.     $statement->bindValue('log_type_desc'$log_type_desc);
  311.     $statement->bindValue('ip_address'$ip);
  312.     $statement->bindValue('username'$username);
  313.     $statement->bindValue('user_type'$userType);
  314.     $statement->execute();
  315.     return $this->redirect($this->generateUrl('logout'));
  316.   }
  317.   public function loginFailureAction(Request $request$usernameLoggerInterface $logger)
  318.   {
  319.     //$logger = $this->get('logger');
  320.     $em=$this->getDoctrine()->getManager();
  321.     // recupero l'ip del client
  322.     $ip $request->getClientIp();
  323.     if($ip == 'unknown'){
  324.       $ip $_SERVER['REMOTE_ADDR'];
  325.     }
  326.     $logger->debug('[loginFailureAction] IP CLIENT: '.$ip);
  327.     $sfRedirect $request->cookies->get('sf_redirect');
  328.    // $userType = "other";
  329.     if($sfRedirect){
  330.       $route json_decode($sfRedirecttrue);
  331.       $currentRoute $route["route"];
  332.       if($currentRoute=="login_check")
  333.       {
  334.         $userType "local";
  335.       } else {
  336.         $userType "ldap";
  337.       }
  338.       
  339.     }
  340.     
  341.     //--------------------------------------------------------------
  342.     // Log fallimento login (bad credentials o username mancante)
  343.     //--------------------------------------------------------------
  344.     if ($username !== 'username') {
  345.         $sql "
  346.             INSERT INTO user_logging (
  347.                 user_time_log, log_type, log_type_desc, ip_address, username, user_type
  348.             ) VALUES (
  349.                 SYSDATE(), 'login failure', 'bad credentials', :ip, :username, :userType
  350.             )
  351.         ";
  352.     } else {
  353.         $sql "
  354.             INSERT INTO user_logging (
  355.                 user_time_log, log_type, log_type_desc, ip_address, username, user_type
  356.             ) VALUES (
  357.                 SYSDATE(), 'login failure', 'username non inserito', :ip, '', :userType
  358.             )
  359.         ";
  360.     }
  361.     $statement $em->getConnection()->prepare($sql);
  362.     $statement->bindValue('ip'$ip);
  363.     if ($username !== 'username') {
  364.         $statement->bindValue('username'$username);
  365.     }
  366.     $statement->bindValue('userType'$userType);
  367.     $statement->execute();
  368.     return $this->redirect($this->generateUrl('login'));
  369.   }
  370.   //------------------------------------------------------------------
  371.   // Restituisce la lingua dell’utente loggato o la lingua di default
  372.   //------------------------------------------------------------------
  373.   public function getUserLanguage()
  374.   {
  375.       $em $this->getDoctrine()->getManager();
  376.       $connection $em->getConnection();
  377.       $user $this->getUser();
  378.       $idUser $user->getId();
  379.       $defaultLang $_ENV['DEFAULT_LANGUAGE'];
  380.       $userLang = new UserLanguageQueries($connection);
  381.       $lang $userLang->getLanguageByUser($idUser);
  382.       return $lang ?? $defaultLang;
  383.   }
  384.   //------------------------------------------------------------------
  385.   // Aggiorna la lingua dell’utente loggato
  386.   //------------------------------------------------------------------
  387.   public function updateUserLanguage(Request $requestLoggerInterface $logger)
  388.   {
  389.       try {
  390.           $data json_decode($request->getContent(), true);
  391.           $defaultLang $_ENV['DEFAULT_LANGUAGE'];
  392.           $langCode $data['lang'] ?? $defaultLang;
  393.           $csrftoken=$data['csrftoken'];
  394.           if (!$this->isCsrfTokenValid('update_user_lang'$csrftoken)) {
  395.           throw new \Exception('Csrf token not valid');
  396.         }
  397.           $em $this->getDoctrine()->getManager();
  398.           $connection $em->getConnection();
  399.           $user $this->getUser();
  400.           if (!$user) {
  401.               throw new \Exception('Utente non autenticato');
  402.           }
  403.           $idUser $user->getId();
  404.           $userLang = new UserLanguageQueries($connection);
  405.           // Aggiorna la lingua
  406.           $updated $userLang->updateLanguage($idUser$langCode);
  407.           // Insert se non esiste
  408.           if ($updated === 0) {
  409.               $userLang->setLanguage($idUser$langCode);
  410.           }
  411.           return new Response(); 
  412.       } catch (\Exception $e) {
  413.           $logger->error('Errore aggiornamento lingua utente: '.$e->getMessage());
  414.           return new Response("Errore nell'aggiornamento della lingua dell'utente!"500);
  415.       }
  416.   }
  417.   //------------------------------------------------------------------
  418.   // Restituisce la lingua dell’utente loggato in formato JSON
  419.   //------------------------------------------------------------------
  420.   public function userLanguageResponse()
  421.   {
  422.       return new JsonResponse(['lang' => $this->getUserLanguage()]);
  423.   }
  424.   public function editUserAction(LoggerInterface $logger)
  425.   {
  426.     $em $this->getDoctrine()->getManager();
  427.     $connection $em->getConnection();
  428.     $user $this->getUser();
  429.     $idUser $user->getId();
  430.     $logger->debug('[editUserAction] ID CHANGE PSW: '.$idUser);
  431.     //----------------------------------------------------------------------
  432.     // Recupera dati utente e token associato
  433.     //----------------------------------------------------------------------
  434.     $q "
  435.         SELECT u.id, u.username, u.email, u.first_name, u.last_name, ut.token
  436.         FROM user_acm u
  437.         JOIN user_token ut ON u.id = ut.id_user
  438.         WHERE u.id = :idUser
  439.     ";
  440.     $statement $connection->prepare($q);
  441.     $statement->bindValue('idUser'$idUser);
  442.     $statement->execute();
  443.     $result $statement->fetchAll();
  444.     $userLang $this->getUserLanguage();
  445.     //----------------------------------------------------------------------
  446.     // Costruzione array informazioni utente
  447.     //----------------------------------------------------------------------
  448.     $ArrayUser=array();
  449.     foreach($result as $ar)
  450.     {
  451.       $ArrayUser_tmp = array('id' => $ar['id'],
  452.                              'username' => $ar['username'],
  453.                              'email' => $ar['email'],
  454.                              'first_name' => $ar['first_name'],
  455.                              'last_name' => $ar['last_name'],
  456.                              'token' => $ar['token']);
  457.       array_push($ArrayUser$ArrayUser_tmp);
  458.     }
  459.    
  460.     //----------------------------------------------------------------------
  461.     // Recupera profili e ruoli associati all’utente
  462.     //----------------------------------------------------------------------
  463.     $sql "
  464.         SELECT upr.id_user, 
  465.                upr.id_profile, 
  466.                upr.id_roles, 
  467.                p.type_profile, 
  468.                r.description_roles 
  469.         FROM user_profile_roles upr
  470.         JOIN profile p ON upr.id_profile = p.id_profile
  471.         JOIN roles r ON upr.id_roles = r.id_roles
  472.         WHERE upr.id_user = :idUser
  473.     ";
  474.     $statement $connection->prepare($sql);
  475.     $statement->bindValue('idUser'$idUser);
  476.     $statement->execute();
  477.     $ProfileRole $statement->fetchAll();
  478.     //----------------------------------------------------------------------
  479.     // Costruzione array profilo/ruolo
  480.     //----------------------------------------------------------------------
  481.     $ArrayUserProfile=array();
  482.     foreach($ProfileRole as $pr)
  483.     {
  484.       $ArrayUserProfile_tmp = array('profilo' => $pr['type_profile'],
  485.                                     'descrizione' => $pr['description_roles']);
  486.       array_push($ArrayUserProfile$ArrayUserProfile_tmp);
  487.     }
  488.     $logger->debug('ArrayUserProfile:  'json_encode($ArrayUserProfile));
  489.     //----------------------------------------------------------------------
  490.     // Rendering pagina profilo utente
  491.     //----------------------------------------------------------------------
  492.     return $this->render(
  493.       'Security/profile.html.twig',
  494.       array( 'license_info' => $this->sycoreService->getLicenseInfo(),
  495.              'user' => $user,
  496.              'logged_user' => $user,
  497.              'InfoUser' => $ArrayUser,
  498.              'user_lang' => $userLang,
  499.              'profile_roles' => $ArrayUserProfile)
  500.     );
  501.   }
  502.   public function addUserAction()
  503.   {
  504.     $em $this->getDoctrine()->getManager();
  505.     $user $this->getUser();
  506.     $connection $em->getConnection();
  507.     $statement $connection->prepare(
  508.       'select id_profile ,type_profile, description_profile     from profile' );
  509.       $statement->execute();
  510.       $listaProfili $statement->fetchAll();
  511.       //$listaProfili = json_dencode($listaProfili);
  512.       $statement $connection->prepare(
  513.         'select id_roles, description_roles, note  FROM roles'
  514.       );
  515.       $statement->execute();
  516.       $listaRuoli $statement->fetchAll();
  517.       //$listaRuoli = json_decode($listaRuoli);
  518.       return $this->render(
  519.         'Security/addUser.html.twig',
  520.         array( 
  521.           'license_info' => $this->sycoreService->getLicenseInfo(),
  522.           'user' => $user,
  523.           'listaProfili' => $listaProfili,
  524.           'listaRuoli' => $listaRuoli,
  525.           'logged_user' => $user)
  526.       );
  527.     }
  528.   
  529.     public function manageUserAction(ParameterBagInterface $params) {
  530.       $user $this->getUser();
  531.       $em $this->getDoctrine()->getManager();
  532.       $connection $em->getConnection();
  533.       $statement $connection->prepare("
  534.           SELECT 
  535.             user_acm.id, 
  536.             username, 
  537.             first_name, 
  538.             last_name,  
  539.             email,
  540.             user_role,
  541.             case user_role when 'ROLE_USER' then 'User'
  542.                             when 'ROLE_ADMIN' then 'Admin'
  543.                             when 'ROLE_SUPER_ADMIN' then 'SuperAdmin'
  544.             end tipo_utenza,
  545.             case when flag_token=1 then 'SI' else 'NO' end flag_token_string, 
  546.             case when status=true then 'SI' else 'NO' end status_string,
  547.             string_agg('<b>'||description_roles||'</b>'||': '||type_profile, '<br>') ruoli_profili,
  548.             ut.token
  549.         FROM user_acm
  550.         LEFT JOIN user_profile_roles on user_acm.id = user_profile_roles.id_user
  551.         LEFT JOIN profile on user_profile_roles.id_profile = profile.id_profile
  552.         LEFT JOIN roles on user_profile_roles.id_roles = roles.id_roles
  553.         LEFT JOIN user_token ut on user_acm.id = ut.id_user
  554.         GROUP BY user_acm.id, username, first_name, last_name, email, user_role, 
  555.                 case when flag_token=1 then 'SI' else 'NO' end, 
  556.                 case when status=true then 'SI' else 'NO' end,
  557.                 case user_role when 'ROLE_USER' then 'User'
  558.                                 when 'ROLE_ADMIN' then 'Admin'
  559.                                 when 'ROLE_SUPER_ADMIN' then 'SuperAdmin'
  560.                 end,
  561.                 ut.token
  562.         ORDER BY id DESC");
  563.       $statement->execute();
  564.       $listaUtenti $statement->fetchAll();
  565.           $statement $connection->prepare(
  566.                                         "SELECT id, username, first_name, last_name, email, roles.id_roles,
  567.                                                 user_role, description_roles, type_profile
  568.                                         FROM user_acm , user_profile_roles, profile, roles
  569.                                         WHERE user_acm.id = user_profile_roles.id_user
  570.                                             and user_profile_roles.id_profile = profile.id_profile
  571.                                             and user_profile_roles.id_roles = roles.id_roles
  572.                                         order by id desc");
  573.       $statement->execute();
  574.       $listaRuoliUtenti $statement->fetchAll();
  575.       $connection $em->getConnection();
  576.       $statement $connection->prepare(
  577.         'select id_profile ,type_profile, description_profile from profile' );
  578.         $statement->execute();
  579.         $listaProfili $statement->fetchAll();
  580.         //$listaProfili = json_dencode($listaProfili);
  581.         $statement $connection->prepare(
  582.           'select id_roles, description_roles, note FROM roles order by 2'
  583.         );
  584.         $statement->execute();
  585.         $listaRuoli $statement->fetchAll();
  586.         
  587.           $UserRole $user->getUserRole();
  588.             
  589.           return $this->render(
  590.             'Security/manageUser.html.twig',
  591.             array(  'user' => $user,
  592.             'user_role' =>$UserRole,
  593.             'listaUtenti' => $listaUtenti,
  594.             'listaProfili' => $listaProfili,
  595.             'listaRuoli' => $listaRuoli,
  596.             'listaRuoliUtenti' => $listaRuoliUtenti,
  597.             'logged_user' => $user)
  598.           );
  599.       }
  600.       public function savePasswordAction(Request $requestParameterBagInterface $paramsUserPasswordEncoderInterface $userPasswordEncoderInterface)
  601.       {
  602.         $csrfToken $request->request->get('csrftoken');
  603.           
  604.         if (!$this->isCsrfTokenValid('editpwd'$csrfToken)) {
  605.           throw new \Exception('Csrf token not valid');
  606.         }
  607.         try{
  608.           $id $_POST["form_id_chpwd"];
  609.           $password$_POST["password"];
  610.           $em $this->getDoctrine()->getManager();
  611.           $connection $em->getConnection();
  612.           $user $em->find('App:User'$id);
  613.           $user->setPassword($userPasswordEncoderInterface->encodePassword($user$password));
  614.           $password $userPasswordEncoderInterface->encodePassword($user$password);
  615.       
  616.           $q 'update user_acm set text1 = :password where id = :id;';
  617.           $statement $connection->prepare($q);
  618.           $statement->bindValue('password'$password);
  619.           $statement->bindValue('id'$id);
  620.           $statement->execute();
  621.         
  622.           $ExitSavePwd=0;
  623.           $MsgSavePwd='Password Modificata con successo';
  624.         } catch (\Exception $ex) {
  625.           $ExitSavePwd=1;
  626.           $MsgSavePwd='Errore nel Salvataggio della password '.$ex;
  627.         }
  628.         $res_json = new JsonResponse();
  629.         $res_json->setData(array('ExitSavePwd' => $ExitSavePwd'MsgSavePwd' => $MsgSavePwd));
  630.         return $res_json;
  631.       }
  632.       public function changesaveEmailAction(Request $request)
  633.       {
  634.         $csrfToken $request->request->get('csrftoken');
  635.           
  636.         if (!$this->isCsrfTokenValid('changeuseremail'$csrfToken)) {
  637.           throw new \Exception('Csrf token not valid');
  638.         }
  639.         $email htmlEntities($request->request->get('email'), ENT_QUOTES);
  640.         $em $this->getDoctrine()->getManager();
  641.         $user $em->find('App:User'$this->getUser()->getId());
  642.         $user->setEmail($email);
  643.         $em->flush();
  644.         return $this->redirect($this->generateUrl('user_edit'));
  645.       }
  646.       public function changesavePasswordAction(Request $requestParameterBagInterface $paramsLoggerInterface $loggerUserPasswordEncoderInterface $userPasswordEncoderInterface)
  647.       {
  648.         $csrfToken $request->request->get('csrftoken');
  649.         $res_json = new JsonResponse();      
  650.           
  651.         if (!$this->isCsrfTokenValid('changeuserpwd'$csrfToken)) {
  652.           throw new \Exception('Csrf token not valid');
  653.         }
  654.         $password $request->request->get('password');
  655.         $apassword $request->request->get('apassword'); //password attuale
  656.         $em $this->getDoctrine()->getManager();
  657.         $connection $em->getConnection();
  658.         $userId $this->getUser()->getId();
  659.         $user $em->find('App:User'$userId);
  660.         //verifico se la password attuale Ã¨ corretta
  661.         if(!$userPasswordEncoderInterface->isPasswordValid($user$apassword))
  662.         {
  663.           $ExitUpdate=1;
  664.           $MsgUpdate='Password attuale errata';
  665.           $res_json->setData(array('ExitUpdate' => $ExitUpdate'MsgUpdate' => $MsgUpdate));
  666.           return $res_json;
  667.         }
  668.         
  669.         try{
  670.           $q 'UPDATE user_acm SET text1 = :pwd, change_text1 = :ct1 WHERE id = :userId';
  671.           $password $userPasswordEncoderInterface->encodePassword($user$password);
  672.           $statement $connection->prepare($q);
  673.           $statement->bindValue('pwd'$password);
  674.           $statement->bindValue('ct1'0);
  675.           $statement->bindValue('userId'$userId);
  676.           $statement->execute();
  677.           $ExitUpdate=0;
  678.           $MsgUpdate='Password Modificata!';
  679.         } catch (\Exception $ex) {
  680.           $ExitUpdate=1;
  681.           $MsgUpdate='Errore nel Salvataggio';
  682.         }
  683.       
  684.         $res_json->setData(array('ExitUpdate' => $ExitUpdate'MsgUpdate' => $MsgUpdate));
  685.         return $res_json;
  686.         
  687.       }
  688.       //----------------------------------------------------------------------
  689.       // Crea un nuovo utente, gestisce password, token, ruoli e profili.
  690.       //----------------------------------------------------------------------
  691.       public function saveUserAction(Request $requestLoggerInterface $loggerParameterBagInterface $paramsUserPasswordEncoderInterface $userPasswordEncoderInterface)
  692.       {
  693.         $res_json = new JsonResponse();
  694.         $csrfToken $request->request->get('csrftoken');
  695.         
  696.         //------------------------------------------------
  697.         // Controllo CSRF
  698.         //------------------------------------------------
  699.         if (!$this->isCsrfTokenValid('adduser'$csrfToken)) {
  700.           throw new \Exception('Csrf token not valid');
  701.         }
  702.         $em         $this->getDoctrine()->getManager();
  703.         $connection $em->getConnection();
  704.         $userLang   = new UserLanguageQueries($connection);
  705.     
  706.         try{
  707.           
  708.           //------------------------------------------------
  709.           // Dati dal form
  710.           //------------------------------------------------
  711.           $username   $_POST["username"];
  712.           $email      $_POST["email"];
  713.           $nome       $_POST["nome"];
  714.           $cognome    $_POST["cognome"];
  715.           $password   $_POST["password"];
  716.           $tipoUtenza $_POST["form_utenza"];
  717.           $lingua     $_ENV['DEFAULT_LANGUAGE'];
  718.           //------------------------------------------------
  719.           // Flag
  720.           //------------------------------------------------
  721.           $ChangeText 1;
  722.       
  723.           if ($request->request->has('chk_status')) {
  724.             $status 1;
  725.           } else {
  726.             $status 0;
  727.           }
  728.       
  729.           if ($request->request->has('chk_token')) {
  730.             $FlagToken 1;
  731.           } else {
  732.             $FlagToken 0;
  733.           }
  734.           //------------------------------------------------
  735.           // Codifica password
  736.           //------------------------------------------------
  737.           $user $em->find('App:User'$this->getUser()->getId());
  738.           $password $userPasswordEncoderInterface->encodePassword($user$password);
  739.           
  740.           //------------------------------------------------
  741.           // Insert utente
  742.           //------------------------------------------------
  743.           $q 'INSERT INTO "user"(username, text1, email, first_name, last_name, user_role, status, change_text1, flag_token) VALUES(:username, :password, :email, :first_name, :last_name, :user_role, :status, :change_text1, :flag_token);';
  744.       
  745.           $statement $connection->prepare($q);
  746.           $statement->bindValue('username'$username);
  747.           $statement->bindValue('password'$password);
  748.           $statement->bindValue('email'$email);
  749.           $statement->bindValue('first_name'$nome);
  750.           $statement->bindValue('last_name'$cognome);
  751.           $statement->bindValue('user_role'$tipoUtenza);
  752.           $statement->bindValue('status'$status);
  753.           $statement->bindValue('change_text1'$ChangeText);
  754.           $statement->bindValue('flag_token'$FlagToken);
  755.           $statement->execute();
  756.           
  757.           //------------------------------------------------
  758.           // Recupero ID utente appena inserito
  759.           //------------------------------------------------
  760.           $sql 'SELECT id FROM "user" WHERE username = :username AND email = :email';
  761.           $stmt $em->getConnection()->prepare($sql);
  762.           $stmt->bindValue('username'$username);
  763.           $stmt->bindValue('email'$email);
  764.           $stmt->execute();
  765.           $ResulQuery $stmt->fetch();
  766.           $IdUsername $ResulQuery['id'];
  767.           $logger->debug("IdUsername ".$IdUsername);
  768.           // Insert lingua utente
  769.           $userLang->setLanguage($IdUsername$lingua);
  770.           //------------------------------------------------
  771.           // Update flag token se richiesto
  772.           //------------------------------------------------
  773.           if ($request->request->has('chk_token')) {
  774.               $u 'UPDATE "user" SET flag_token = 1 WHERE id = :id';
  775.               $stmt $em->getConnection()->prepare($u);
  776.               $stmt->bindValue('id'$IdUsername);
  777.               $stmt->execute();
  778.           }
  779.           $logger->debug("[saveUserAction] --- Valori Utente --- ");
  780.           $logger->debug("[saveUserAction] $username ");
  781.           $logger->debug("[saveUserAction] $email");
  782.           $logger->debug("[saveUserAction] $nome ");
  783.           $logger->debug("[saveUserAction] $cognome");
  784.           $logger->debug("[saveUserAction] $status");
  785.           $logger->debug("[saveUserAction] $ChangeText");
  786.           //------------------------------------------------
  787.           // Insert token utente
  788.           //------------------------------------------------
  789.           $token $this->generateToken($params);
  790.           $i "INSERT INTO user_token(
  791.                     id_user, token, date_start_validity, date_end_validity, check_validity
  792.                 ) VALUES (
  793.                     :id_user, :token, SYSDATE(), TO_DATE('31-12-2999 23:59:59', 'dd-mm-yyyy HH24:mi:ss'), 'Y'
  794.                 )";
  795.           $stmt $em->getConnection()->prepare($i);
  796.           $stmt->bindValue('id_user'$IdUsername);
  797.           $stmt->bindValue('token'$token);
  798.           $stmt->execute();
  799.           //------------------------------------------------
  800.           // Ruoli e profili
  801.           //------------------------------------------------
  802.           $sql="select id_roles, description_roles from roles";
  803.           $stmt $em->getConnection()->prepare($sql);
  804.           $stmt->execute();
  805.           $ResultRoles $stmt->fetchAll();
  806.           for ($i 0$i count($ResultRoles); $i++) {
  807.               $ruolo   $ResultRoles[$i]['description_roles'];
  808.               $idRuolo $ResultRoles[$i]['id_roles'];
  809.               $logger->debug("[saveUserAction] Valore Ruolo " $ruolo);
  810.               $logger->debug("[saveUserAction] Id Ruolo " $idRuolo);
  811.               $profile $_POST["profile_" $ruolo];
  812.               $logger->debug("[saveUserAction] Valore Profilo " $profile);
  813.               if ($profile != "None") {
  814.                 $sql "SELECT id_profile FROM profile WHERE type_profile = :profile";
  815.                 $stmt $em->getConnection()->prepare($sql);
  816.                 $stmt->bindValue('profile'$profile);
  817.                 $stmt->execute();
  818.                 $ResulQuery $stmt->fetch();
  819.                 $IdProfile $ResulQuery['id_profile'];
  820.                 if ($IdProfile) {
  821.                   $sql "INSERT INTO user_profile_roles (id_user, id_profile, id_roles)
  822.                           VALUES (:id_user, :id_profile, :id_roles)";
  823.                   $stmt $em->getConnection()->prepare($sql);
  824.                   $stmt->bindValue('id_user'$IdUsername);
  825.                   $stmt->bindValue('id_profile'$IdProfile);
  826.                   $stmt->bindValue('id_roles'$idRuolo);
  827.                   $stmt->execute();
  828.                 }
  829.               }
  830.           }
  831.           $ExitInsert 0;
  832.           $MsgInsert  "Utente <b>$username</b> salvato con successo.";
  833.         }  catch (\Exception $ex) {
  834.           $logger->debug("[saveUserAction] Errore nel Salvataggio dell'utente: " $ex);
  835.           $ExitInsert 1;
  836.           $MsgInsert  "Errore nel Salvataggio dell'utente <b>$username</b>";
  837.         }
  838.       
  839.         $res_json->setData(array( 'ExitInsert' => $ExitInsert'MsgInsert' => $MsgInsert));
  840.         return $res_json;
  841.       }
  842.       public function saveMultipleUserAction(Request $requestLoggerInterface $loggerParameterBagInterface $paramsUserPasswordEncoderInterface $userPasswordEncoderInterface)
  843.       {
  844.        
  845.          $csrfToken $request->request->get('csrftoken');
  846.         $em $this->getDoctrine()->getManager();
  847.         $connection $em->getConnection();
  848.           
  849.            if (!$this->isCsrfTokenValid('addMultipleuser'$csrfToken)) {
  850.           throw new \Exception('Csrf token not valid');
  851.         }
  852.           $File=$_FILES['form_lista_utenti'];
  853.         //$username = htmlEntities($_POST["username"], ENT_QUOTES);
  854.         //$email = htmlEntities($_POST["email"], ENT_QUOTES);
  855.         //$nome = htmlEntities($_POST["nome"], ENT_QUOTES);
  856.         //$cognome = htmlEntities($_POST["cognome"], ENT_QUOTES);
  857.         //$password = $_POST["password"];
  858.         //$tipoUtenza = htmlEntities($_POST["form_utenza"], ENT_QUOTES);
  859.         
  860.         //$logger->debug("[saveMultipleUserAction] filename ".json_encode($filename));
  861.         foreach ($_FILES as $file) {
  862.         
  863.         $fileName basename($file['name']);
  864.         $logger->debug("[saveMultipleUserAction] filename ".json_encode($fileName));
  865.     }
  866.         
  867.         $myfile fopen($_FILES['form_lista_utenti']['tmp_name'], "r") or die("Unable to open file!");
  868.         //$myfile = file_get_contents($_FILES['form_lista_utenti']['tmp_name']);
  869.         $logger->debug("[saveMultipleUserAction] myfile ".json_encode($myfile));
  870.         $firstline true;
  871.     
  872.     $ContaUser=0;
  873.     $ContaNonUser=0;
  874.     $TotaliUtenti=0;
  875.     while (($data fgetcsv($myfile,  10000';')) !== FALSE) {
  876.         try{
  877.         
  878.         if (!$firstline
  879.             {
  880.                 $TotaliUtenti=$TotaliUtenti+1;
  881.                 $logger->debug("[saveMultipleUserAction] data ".json_encode($data));
  882.                 
  883.                 $username $data[0];
  884.                 $logger->debug("[saveMultipleUserAction] username ".json_encode($username));
  885.                 
  886.                 $email $data[1];
  887.                 $logger->debug("[saveMultipleUserAction] email ".json_encode($email));
  888.                 
  889.                 $nome $data[2];
  890.                 $logger->debug("[saveMultipleUserAction] nome ".json_encode($nome));
  891.                 
  892.                 $cognome $data[3];
  893.                 $logger->debug("[saveMultipleUserAction] cognome ".json_encode($cognome));
  894.                 
  895.                 $password $data[4];
  896.                 $logger->debug("[saveMultipleUserAction] password ".json_encode($password));
  897.         
  898.         $ChangeText=1;
  899.         
  900.         
  901.         if ($request->request->has('chk_status')) {
  902.           $status 1;
  903.         } else {
  904.           $status 0;
  905.         }
  906.         
  907.          if ($request->request->has('chk_token')) {
  908.           $FlagToken 1;
  909.         } else {
  910.           $FlagToken 0;
  911.         }
  912.     
  913.         $tipoUtenza'ROLE_USER';
  914.     
  915.         $user $em->find('App:User'$this->getUser()->getId());
  916.         //$encoder = $this->getParameter('security.password_encoder');
  917.         $password $userPasswordEncoderInterface->encodePassword($user$password);//$encoder->encodePassword($user, $password);
  918.     
  919.        
  920.         
  921.              $q 'insert into user_acm(username, text1, email, first_name, last_name, user_role, status, change_text1 , flag_token) values('
  922.             ':username, :password, :email, :first_name, :last_name, :user_role, :status, :change_text1, :flag_token);';
  923.         $statement $connection->prepare($q);
  924.         $statement->bindValue('username'$username);
  925.         $statement->bindValue('password'$password);
  926.         $statement->bindValue('email'$email);
  927.         $statement->bindValue('first_name'$nome);
  928.         $statement->bindValue('last_name'$cognome);
  929.         $statement->bindValue('user_role'$tipoUtenza);
  930.         $statement->bindValue('status'$status);
  931.         $statement->bindValue('change_text1'$ChangeText);
  932.         $statement->bindValue('flag_token'$FlagToken);
  933.         $statement->execute();
  934.         
  935.          $logger->debug("[saveMultipleUserAction] Prelevo id Utente appena inserito");
  936.             
  937.         $sql="select id from user_acm where username = '$username' and email='$email'";    
  938.         $stmt $em->getConnection()->prepare($sql);
  939.         $stmt->execute();
  940.         $ResulQuery $stmt->fetchAll()[0];
  941.         $IdUsername=$ResulQuery['id'];
  942.     
  943.         
  944.         
  945.            //FLAG TOKEN API
  946.         if ($request->request->has('chk_token')) {
  947.           //update user flag_token
  948.           $u "update user set flag_token = 1 where id= '$IdUsername'";
  949.           $stmt $em->getConnection()->prepare($u);
  950.           $stmt->execute();
  951.         }
  952.     
  953.     
  954.         //$encoded = $encoder->encodePassword($user, $password);
  955.         //$user->setChangePassword($encoded);
  956.     
  957.         $logger->debug("[saveMultipleUserAction] --- Valori Utente --- ");
  958.         $logger->debug("[saveMultipleUserAction] $username ");
  959.         $logger->debug("[saveMultipleUserAction] $email");
  960.         $logger->debug("[saveMultipleUserAction] $nome ");
  961.         $logger->debug("[saveMultipleUserAction] $cognome");
  962.         $logger->debug("[saveMultipleUserAction] $password");
  963.         $logger->debug("[saveMultipleUserAction] $status");
  964.         $logger->debug("[saveMultipleUserAction] $ChangeText");
  965.     
  966.      
  967.     
  968.     
  969.           $token $this->generateToken($params);
  970.     
  971.         
  972.           $i 'insert into user_token(id_user, token, date_start_validity, date_end_validity, check_validity)'
  973.             ."values( '$IdUsername', '$token',  SYSDATE(), TO_DATE('31-12-2999 23:59:59', 'dd-mm-yyyy HH24:mi:ss'), 'Y')";
  974.           $stmt $em->getConnection()->prepare($i);
  975.           $stmt->execute();
  976.     
  977.         
  978.     
  979.         $sql="select id_roles,description_roles from roles";
  980.         $stmt $em->getConnection()->prepare($sql);
  981.         $stmt->execute();
  982.         $ResultRoles $stmt->fetchAll();
  983.     
  984.     
  985.         for($i=0$i<count($ResultRoles); $i++)
  986.         {
  987.           $ruolo=$ResultRoles[$i]['description_roles'];
  988.           $idRuolo=$ResultRoles[$i]['id_roles'];
  989.     
  990.           $logger->debug("[saveMultipleUserAction] Valore Ruolo ".$ruolo);
  991.           $logger->debug("[saveMultipleUserAction] Id Ruolo ".$idRuolo);
  992.     
  993.           $profile htmlEntities($_POST["profile_".$ruolo], ENT_QUOTES);
  994.           $logger->debug("[saveMultipleUserAction] Valore Profilo ".$profile);
  995.     
  996.           if($profile != "None")
  997.           {
  998.             $sql="select id_profile from profile where type_profile = '$profile'";
  999.             $stmt $em->getConnection()->prepare($sql);
  1000.             $stmt->execute();
  1001.             $ResulQuery $stmt->fetchAll()[0];
  1002.             $IdProfile=$ResulQuery['id_profile'];
  1003.     
  1004.             $sql="insert into user_profile_roles (id_user, id_profile, id_roles) values ($IdUsername$IdProfile$idRuolo)";
  1005.             $stmt $em->getConnection()->prepare($sql);
  1006.             $stmt->execute();
  1007.           }
  1008.     
  1009.         }
  1010.         
  1011.     $ContaUser=$ContaUser+1;
  1012.     }
  1013.             } catch (\Throwable $th) {
  1014.                 $ContaNonUser=$ContaNonUser+1;
  1015.             }
  1016.     
  1017.                  $firstline false;
  1018.             }
  1019.        // return $this->redirect($this->generateUrl('user_manage'));
  1020.        $res_json = new JsonResponse;
  1021.         $res_json->setData(array('TotaliUtenti' => $TotaliUtenti,
  1022.                                  'ContaUser' => $ContaUser,
  1023.                                  'ContaNonUser' => $ContaNonUser));
  1024.                                                      
  1025.         return $res_json;
  1026.       }      
  1027.       public function generateToken($params){
  1028.           
  1029.         $em $this->getDoctrine()->getManager();
  1030.         $randomString substr(str_replace(['+''/''='], ''base64_encode(random_bytes(32))), 030); // 32 chars, without /=+
  1031.         $q "select count(*) cnt from user_token where token = '$randomString'";
  1032.         $statement $em->getConnection()->prepare($q);
  1033.         $statement->execute();
  1034.         $ResulQuery $statement->fetchAll()[0];
  1035.         $count $ResulQuery['cnt'];
  1036.         if ($count 0) {
  1037.           generateToken($params);
  1038.         } else {
  1039.           return $randomString;
  1040.         }
  1041.       }
  1042.     //--------------------------------------------------------
  1043.     // Aggiorna dati, ruoli e profili di un utente esistente
  1044.     //--------------------------------------------------------
  1045.     public function updateUserAction(Request $requestLoggerInterface $loggerParameterBagInterface $params)
  1046.     {
  1047.       //------------------------------------------
  1048.       // Controllo CSRF
  1049.       //------------------------------------------
  1050.       $csrfToken $request->request->get('csrftoken');
  1051.           
  1052.       if (!$this->isCsrfTokenValid('edituser'$csrfToken)) {
  1053.         throw new \Exception('Csrf token not valid');
  1054.       }
  1055.           try{
  1056.         //------------------------------------------
  1057.         // Dati dal form
  1058.         //------------------------------------------
  1059.         $id         $_POST["form_id"];
  1060.         $email      $_POST["form_email"];
  1061.         $nome       $_POST["form_nome"];
  1062.         $cognome    $_POST["form_cognome"];
  1063.         $tipoUtenza $_POST["form_utenza"];
  1064.         //------------------------------------------
  1065.         // Flag
  1066.         //------------------------------------------
  1067.         if ($request->request->has('chk_token')){
  1068.           $f_token 1;
  1069.         } else {
  1070.           $f_token 0;
  1071.         }
  1072.         if ($request->request->has('chk_utenza')){
  1073.           $statusUtenza 1;
  1074.         } else {
  1075.           $statusUtenza 0;
  1076.         }
  1077.         $em $this->getDoctrine()->getManager();
  1078.         //------------------------------------------------
  1079.         // Stato dell'utente
  1080.         //------------------------------------------------
  1081.         $sql "SELECT CASE WHEN status = true THEN 1 ELSE 0 END AS status
  1082.                 FROM user_acm
  1083.                 WHERE id = :id";
  1084.         $statement $em->getConnection()->prepare($sql);
  1085.         $statement->bindValue('id'$id);
  1086.         $statement->execute();
  1087.         $ResulQuery $statement->fetch();
  1088.         $status $ResulQuery['status'];
  1089.         
  1090.         if ($statusUtenza != $status) {
  1091.           $q "update user_acm set status = :statusUtenza where id = :id";
  1092.           $statement $em->getConnection()->prepare($q);
  1093.           $statement->bindValue('statusUtenza'$statusUtenza);
  1094.           $statement->bindValue('id'$id);
  1095.           $statement->execute();
  1096.         }
  1097.         //------------------------------------------------
  1098.         // Flag token dell'utente
  1099.         //------------------------------------------------
  1100.         $sql "SELECT flag_token FROM user_acm WHERE id = :id";
  1101.         $statement $em->getConnection()->prepare($sql);
  1102.         $statement->bindValue('id'$id);
  1103.         $statement->execute();
  1104.         $ResulQuery $statement->fetch();
  1105.         $flag_token $ResulQuery['flag_token'];
  1106.         if ($f_token != $flag_token) {
  1107.               $q 'update user_acm set flag_token = :flag_token where id = :id;';  
  1108.           $statement $em->getConnection()->prepare($q);
  1109.           $statement->bindValue('flag_token'$f_token);
  1110.           $statement->bindValue('id'$id);
  1111.           $statement->execute();
  1112.         }
  1113.         //------------------------------------------------
  1114.         // Controllo se esiste un token per l'utente
  1115.         //------------------------------------------------
  1116.         $q "SELECT COUNT(*) AS token FROM user_token WHERE id_user = :id";
  1117.         $statement $em->getConnection()->prepare($q);
  1118.         $statement->bindValue('id'$id);
  1119.         $statement->execute();
  1120.         $ResulQuery $statement->fetch();
  1121.         $token $ResulQuery['token'];
  1122.         //---------------------------------------------------------
  1123.         // Se token non esiste e flag attivo, creo un nuovo token
  1124.         //---------------------------------------------------------
  1125.         if ($f_token == && $token == 0) {
  1126.           $token $this->generateToken($params);
  1127.           $i "INSERT INTO user_token(
  1128.                     id_user, token, date_start_validity, date_end_validity, check_validity
  1129.                 ) VALUES (
  1130.                     :id_user, :token, SYSDATE(), TO_DATE('31-12-2999 23:59:59', 'dd-mm-yyyy hh24:mi:ss'), 'Y'
  1131.                 )";
  1132.           $stmt $em->getConnection()->prepare($i);
  1133.           $stmt->bindValue('id_user'$id);
  1134.           $stmt->bindValue('token'$token);
  1135.           $stmt->execute();
  1136.         }
  1137.         //------------------------------------------------
  1138.         // Update dei dati dell'utente
  1139.         //------------------------------------------------
  1140.         $q 'UPDATE user_acm SET
  1141.                 email = :email,
  1142.                 first_name = :first_name,
  1143.                 last_name = :last_name,
  1144.                 user_role = :user_role
  1145.               WHERE id = :id';
  1146.         $statement $em->getConnection()->prepare($q);
  1147.         $statement->bindValue('email'$email);
  1148.         $statement->bindValue('first_name'$nome);
  1149.         $statement->bindValue('last_name'$cognome);
  1150.         $statement->bindValue('user_role'$tipoUtenza);
  1151.         $statement->bindValue('id'$id);
  1152.         $statement->execute();
  1153.         $sql="select id_roles, description_roles from roles order by 2";
  1154.         $stmt $em->getConnection()->prepare($sql);
  1155.         $stmt->execute();
  1156.         $ResultRoles $stmt->fetchAll();
  1157.         $sql "DELETE FROM user_profile_roles WHERE id_user = :id_user";
  1158.         $stmt $em->getConnection()->prepare($sql);
  1159.         $stmt->bindValue('id_user'$id);
  1160.         $stmt->execute();
  1161.         for ($i 0$i count($ResultRoles); $i++) {
  1162.             $ruolo   $ResultRoles[$i]['description_roles'];
  1163.             $idRuolo $ResultRoles[$i]['id_roles'];
  1164.             $logger->debug("[updateUserAction] Valore Ruolo " $ruolo);
  1165.             $logger->debug("[updateUserAction] Id Ruolo " $idRuolo);
  1166.             $profile $_POST["profile_" $ruolo];
  1167.             $logger->debug("[updateUserAction] Valore Profilo " $profile);
  1168.             if ($profile != "None") {
  1169.               $logger->debug("[updateUserAction] Profilo diverso da None");
  1170.               //------------------------------------------------
  1171.               // Recupero l'ID del profilo selezionato
  1172.               //------------------------------------------------
  1173.               $sql "SELECT id_profile FROM profile WHERE type_profile = :profile";
  1174.               $stmt $em->getConnection()->prepare($sql);
  1175.               $stmt->bindValue('profile'$profile);
  1176.               $stmt->execute();
  1177.               $ResulQuery $stmt->fetch();
  1178.               $IdProfile $ResulQuery['id_profile'];
  1179.               //------------------------------------------------
  1180.               // Insert nuova associazione utente-profilo-ruolo
  1181.               //------------------------------------------------
  1182.               $sql "INSERT INTO user_profile_roles (id_user, id_profile, id_roles)
  1183.                       VALUES (:id_user, :id_profile, :id_roles)";
  1184.               $stmt $em->getConnection()->prepare($sql);
  1185.               $stmt->bindValue('id_user'$id);
  1186.               $stmt->bindValue('id_profile'$IdProfile);
  1187.               $stmt->bindValue('id_roles'$idRuolo);
  1188.               $stmt->execute();
  1189.             }
  1190.       }
  1191.         $ExitUpdateUser 0;
  1192.         $MsgUpdateUser  'Utente Modificato con Successo';
  1193.       } catch (\Exception $ex) {
  1194.         $logger->debug("[updateUserAction] Errore nella modifica dell'utente: " $ex);
  1195.         $ExitUpdateUser 1;
  1196.         $MsgUpdateUser  "Errore nella modifica dell'utente.";
  1197.       }
  1198.         $res_json = new JsonResponse;
  1199.         $res_json->setData(array(
  1200.                                  'ExitUpdateUser' => $ExitUpdateUser,
  1201.                                  'MsgUpdateUser' => $MsgUpdateUser
  1202.                                 ));
  1203.                                
  1204.         return $res_json;
  1205.     }
  1206.     public function deleteUserAction(Request $requestParameterBagInterface $paramsLoggerInterface $logger)
  1207.     {
  1208.       $csrfToken $request->request->get('csrftoken');
  1209.           
  1210.       if (!$this->isCsrfTokenValid('deluser'$csrfToken)) {
  1211.         throw new \Exception('Csrf token not valid');
  1212.       }
  1213.       try{
  1214.         $id $_POST["form_id_del"];
  1215.         
  1216.         $em $this->getDoctrine()->getManager();
  1217.         $connection $em->getConnection();
  1218.         $userLang = new UserLanguageQueries($connection);
  1219.         $q0 'select username from user_acm where id = :id;';    
  1220.         $stmt $connection->prepare($q0);
  1221.         $stmt->bindValue('id'$id);
  1222.         $stmt->execute();
  1223.         $username $stmt->fetchAll()[0]["username"];
  1224.         $q 'delete from user_acm where id = :id;';    
  1225.         
  1226.         $statement $connection->prepare($q);
  1227.         $statement->bindValue('id'$id);
  1228.         $statement->execute();
  1229.         $userLang->deleteByUser($id);
  1230.         $ExitDeleteUser=0;
  1231.         $MsgDeleteUser="Utente <b>$username</b> Cancellato con Successo ";
  1232.       } catch (\Exception $ex) {
  1233.         $logger->debug("[deleteUserAction] Errore nella Cancellazione dell'utente: " $ex);
  1234.         $ExitDeleteUser=1;
  1235.         $MsgDeleteUser="Errore nella Cancellazione dell'utente </b>$username</b>";
  1236.       }
  1237.       $res_json = new JsonResponse;
  1238.       $res_json->setData(array(
  1239.                                  'ExitDeleteUser' => $ExitDeleteUser,
  1240.                                  'MsgDeleteUser' => $MsgDeleteUser
  1241.                                 ));
  1242.                                
  1243.       return $res_json;
  1244.     }
  1245.     //-----------------------------------------------------------
  1246.     // Reindirizza l'utente all'URL della documentazione
  1247.     // configurato nel file .env
  1248.     //-----------------------------------------------------------
  1249.     public function redirectDocumentation(){
  1250.       $url $_ENV['PRODUCT_DOC_URL'];
  1251.       return $this->redirect($url);
  1252.     }
  1253. }