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.           $em $this->getDoctrine()->getManager();
  394.           $connection $em->getConnection();
  395.           $user $this->getUser();
  396.           if (!$user) {
  397.               throw new \Exception('Utente non autenticato');
  398.           }
  399.           $idUser $user->getId();
  400.           $userLang = new UserLanguageQueries($connection);
  401.           // Aggiorna la lingua
  402.           $updated $userLang->updateLanguage($idUser$langCode);
  403.           // Insert se non esiste
  404.           if ($updated === 0) {
  405.               $userLang->setLanguage($idUser$langCode);
  406.           }
  407.           return new Response(); 
  408.       } catch (\Exception $e) {
  409.           $logger->error('Errore aggiornamento lingua utente: '.$e->getMessage());
  410.           return new Response("Errore nell'aggiornamento della lingua dell'utente!"500);
  411.       }
  412.   }
  413.   //------------------------------------------------------------------
  414.   // Restituisce la lingua dell’utente loggato in formato JSON
  415.   //------------------------------------------------------------------
  416.   public function userLanguageResponse()
  417.   {
  418.       return new JsonResponse(['lang' => $this->getUserLanguage()]);
  419.   }
  420.   public function editUserAction(LoggerInterface $logger)
  421.   {
  422.     $em $this->getDoctrine()->getManager();
  423.     $connection $em->getConnection();
  424.     $user $this->getUser();
  425.     $idUser $user->getId();
  426.     $logger->debug('[editUserAction] ID CHANGE PSW: '.$idUser);
  427.     //----------------------------------------------------------------------
  428.     // Recupera dati utente e token associato
  429.     //----------------------------------------------------------------------
  430.     $q "
  431.         SELECT u.id, u.username, u.email, u.first_name, u.last_name, ut.token
  432.         FROM user_acm u
  433.         JOIN user_token ut ON u.id = ut.id_user
  434.         WHERE u.id = :idUser
  435.     ";
  436.     $statement $connection->prepare($q);
  437.     $statement->bindValue('idUser'$idUser);
  438.     $statement->execute();
  439.     $result $statement->fetchAll();
  440.     $userLang $this->getUserLanguage();
  441.     //----------------------------------------------------------------------
  442.     // Costruzione array informazioni utente
  443.     //----------------------------------------------------------------------
  444.     $ArrayUser=array();
  445.     foreach($result as $ar)
  446.     {
  447.       $ArrayUser_tmp = array('id' => $ar['id'],
  448.                              'username' => $ar['username'],
  449.                              'email' => $ar['email'],
  450.                              'first_name' => $ar['first_name'],
  451.                              'last_name' => $ar['last_name'],
  452.                              'token' => $ar['token']);
  453.       array_push($ArrayUser$ArrayUser_tmp);
  454.     }
  455.    
  456.     //----------------------------------------------------------------------
  457.     // Recupera profili e ruoli associati all’utente
  458.     //----------------------------------------------------------------------
  459.     $sql "
  460.         SELECT upr.id_user, 
  461.                upr.id_profile, 
  462.                upr.id_roles, 
  463.                p.type_profile, 
  464.                r.description_roles 
  465.         FROM user_profile_roles upr
  466.         JOIN profile p ON upr.id_profile = p.id_profile
  467.         JOIN roles r ON upr.id_roles = r.id_roles
  468.         WHERE upr.id_user = :idUser
  469.     ";
  470.     $statement $connection->prepare($sql);
  471.     $statement->bindValue('idUser'$idUser);
  472.     $statement->execute();
  473.     $ProfileRole $statement->fetchAll();
  474.     //----------------------------------------------------------------------
  475.     // Costruzione array profilo/ruolo
  476.     //----------------------------------------------------------------------
  477.     $ArrayUserProfile=array();
  478.     foreach($ProfileRole as $pr)
  479.     {
  480.       $ArrayUserProfile_tmp = array('profilo' => $pr['type_profile'],
  481.                                     'descrizione' => $pr['description_roles']);
  482.       array_push($ArrayUserProfile$ArrayUserProfile_tmp);
  483.     }
  484.     $logger->debug('ArrayUserProfile:  'json_encode($ArrayUserProfile));
  485.     //----------------------------------------------------------------------
  486.     // Rendering pagina profilo utente
  487.     //----------------------------------------------------------------------
  488.     return $this->render(
  489.       'Security/profile.html.twig',
  490.       array( 'license_info' => $this->sycoreService->getLicenseInfo(),
  491.              'user' => $user,
  492.              'logged_user' => $user,
  493.              'InfoUser' => $ArrayUser,
  494.              'user_lang' => $userLang,
  495.              'profile_roles' => $ArrayUserProfile)
  496.     );
  497.   }
  498.   public function addUserAction()
  499.   {
  500.     $em $this->getDoctrine()->getManager();
  501.     $user $this->getUser();
  502.     $connection $em->getConnection();
  503.     $statement $connection->prepare(
  504.       'select id_profile ,type_profile, description_profile     from profile' );
  505.       $statement->execute();
  506.       $listaProfili $statement->fetchAll();
  507.       //$listaProfili = json_dencode($listaProfili);
  508.       $statement $connection->prepare(
  509.         'select id_roles, description_roles, note  FROM roles'
  510.       );
  511.       $statement->execute();
  512.       $listaRuoli $statement->fetchAll();
  513.       //$listaRuoli = json_decode($listaRuoli);
  514.       return $this->render(
  515.         'Security/addUser.html.twig',
  516.         array( 
  517.           'license_info' => $this->sycoreService->getLicenseInfo(),
  518.           'user' => $user,
  519.           'listaProfili' => $listaProfili,
  520.           'listaRuoli' => $listaRuoli,
  521.           'logged_user' => $user)
  522.       );
  523.     }
  524.   
  525.     public function manageUserAction(ParameterBagInterface $params) {
  526.       $user $this->getUser();
  527.       $em $this->getDoctrine()->getManager();
  528.       $connection $em->getConnection();
  529.       $statement $connection->prepare("
  530.           SELECT 
  531.             user_acm.id, 
  532.             username, 
  533.             first_name, 
  534.             last_name,  
  535.             email,
  536.             user_role,
  537.             case user_role when 'ROLE_USER' then 'User'
  538.                             when 'ROLE_ADMIN' then 'Admin'
  539.                             when 'ROLE_SUPER_ADMIN' then 'SuperAdmin'
  540.             end tipo_utenza,
  541.             case when flag_token=1 then 'SI' else 'NO' end flag_token_string, 
  542.             case when status=true then 'SI' else 'NO' end status_string,
  543.             string_agg('<b>'||description_roles||'</b>'||': '||type_profile, '<br>') ruoli_profili,
  544.             ut.token
  545.         FROM user_acm
  546.         LEFT JOIN user_profile_roles on user_acm.id = user_profile_roles.id_user
  547.         LEFT JOIN profile on user_profile_roles.id_profile = profile.id_profile
  548.         LEFT JOIN roles on user_profile_roles.id_roles = roles.id_roles
  549.         LEFT JOIN user_token ut on user_acm.id = ut.id_user
  550.         GROUP BY user_acm.id, username, first_name, last_name, email, user_role, 
  551.                 case when flag_token=1 then 'SI' else 'NO' end, 
  552.                 case when status=true then 'SI' else 'NO' end,
  553.                 case user_role when 'ROLE_USER' then 'User'
  554.                                 when 'ROLE_ADMIN' then 'Admin'
  555.                                 when 'ROLE_SUPER_ADMIN' then 'SuperAdmin'
  556.                 end,
  557.                 ut.token
  558.         ORDER BY id DESC");
  559.       $statement->execute();
  560.       $listaUtenti $statement->fetchAll();
  561.           $statement $connection->prepare(
  562.                                         "SELECT id, username, first_name, last_name, email, roles.id_roles,
  563.                                                 user_role, description_roles, type_profile
  564.                                         FROM user_acm , user_profile_roles, profile, roles
  565.                                         WHERE user_acm.id = user_profile_roles.id_user
  566.                                             and user_profile_roles.id_profile = profile.id_profile
  567.                                             and user_profile_roles.id_roles = roles.id_roles
  568.                                         order by id desc");
  569.       $statement->execute();
  570.       $listaRuoliUtenti $statement->fetchAll();
  571.       $connection $em->getConnection();
  572.       $statement $connection->prepare(
  573.         'select id_profile ,type_profile, description_profile from profile' );
  574.         $statement->execute();
  575.         $listaProfili $statement->fetchAll();
  576.         //$listaProfili = json_dencode($listaProfili);
  577.         $statement $connection->prepare(
  578.           'select id_roles, description_roles, note FROM roles order by 2'
  579.         );
  580.         $statement->execute();
  581.         $listaRuoli $statement->fetchAll();
  582.         
  583.           $UserRole $user->getUserRole();
  584.             
  585.           return $this->render(
  586.             'Security/manageUser.html.twig',
  587.             array(  'user' => $user,
  588.             'user_role' =>$UserRole,
  589.             'listaUtenti' => $listaUtenti,
  590.             'listaProfili' => $listaProfili,
  591.             'listaRuoli' => $listaRuoli,
  592.             'listaRuoliUtenti' => $listaRuoliUtenti,
  593.             'logged_user' => $user)
  594.           );
  595.       }
  596.       public function savePasswordAction(Request $requestParameterBagInterface $paramsUserPasswordEncoderInterface $userPasswordEncoderInterface)
  597.       {
  598.         $csrfToken $request->request->get('csrftoken');
  599.           
  600.         if (!$this->isCsrfTokenValid('editpwd'$csrfToken)) {
  601.           throw new \Exception('Csrf token not valid');
  602.         }
  603.         try{
  604.           $id $_POST["form_id_chpwd"];
  605.           $password$_POST["password"];
  606.           $em $this->getDoctrine()->getManager();
  607.           $connection $em->getConnection();
  608.           $user $em->find('App:User'$id);
  609.           $user->setPassword($userPasswordEncoderInterface->encodePassword($user$password));
  610.           $password $userPasswordEncoderInterface->encodePassword($user$password);
  611.       
  612.           $q 'update user_acm set text1 = :password where id = :id;';
  613.           $statement $connection->prepare($q);
  614.           $statement->bindValue('password'$password);
  615.           $statement->bindValue('id'$id);
  616.           $statement->execute();
  617.         
  618.           $ExitSavePwd=0;
  619.           $MsgSavePwd='Password Modificata con successo';
  620.         } catch (\Exception $ex) {
  621.           $ExitSavePwd=1;
  622.           $MsgSavePwd='Errore nel Salvataggio della password '.$ex;
  623.         }
  624.         $res_json = new JsonResponse();
  625.         $res_json->setData(array('ExitSavePwd' => $ExitSavePwd'MsgSavePwd' => $MsgSavePwd));
  626.         return $res_json;
  627.       }
  628.       public function changesaveEmailAction(Request $request)
  629.       {
  630.         $csrfToken $request->request->get('csrftoken');
  631.           
  632.         if (!$this->isCsrfTokenValid('changeuseremail'$csrfToken)) {
  633.           throw new \Exception('Csrf token not valid');
  634.         }
  635.         $email htmlEntities($request->request->get('email'), ENT_QUOTES);
  636.         $em $this->getDoctrine()->getManager();
  637.         $user $em->find('App:User'$this->getUser()->getId());
  638.         $user->setEmail($email);
  639.         $em->flush();
  640.         return $this->redirect($this->generateUrl('user_edit'));
  641.       }
  642.       public function changesavePasswordAction(Request $requestParameterBagInterface $paramsLoggerInterface $loggerUserPasswordEncoderInterface $userPasswordEncoderInterface)
  643.       {
  644.         $csrfToken $request->request->get('csrftoken');
  645.         $res_json = new JsonResponse();      
  646.           
  647.         if (!$this->isCsrfTokenValid('changeuserpwd'$csrfToken)) {
  648.           throw new \Exception('Csrf token not valid');
  649.         }
  650.         $password $request->request->get('password');
  651.         $apassword $request->request->get('apassword'); //password attuale
  652.         $em $this->getDoctrine()->getManager();
  653.         $connection $em->getConnection();
  654.         $userId $this->getUser()->getId();
  655.         $user $em->find('App:User'$userId);
  656.         //verifico se la password attuale Ã¨ corretta
  657.         if(!$userPasswordEncoderInterface->isPasswordValid($user$apassword))
  658.         {
  659.           $ExitUpdate=1;
  660.           $MsgUpdate='Password attuale errata';
  661.           $res_json->setData(array('ExitUpdate' => $ExitUpdate'MsgUpdate' => $MsgUpdate));
  662.           return $res_json;
  663.         }
  664.         
  665.         try{
  666.           $q 'UPDATE user_acm SET text1 = :pwd, change_text1 = :ct1 WHERE id = :userId';
  667.           $password $userPasswordEncoderInterface->encodePassword($user$password);
  668.           $statement $connection->prepare($q);
  669.           $statement->bindValue('pwd'$password);
  670.           $statement->bindValue('ct1'0);
  671.           $statement->bindValue('userId'$userId);
  672.           $statement->execute();
  673.           $ExitUpdate=0;
  674.           $MsgUpdate='Password Modificata!';
  675.         } catch (\Exception $ex) {
  676.           $ExitUpdate=1;
  677.           $MsgUpdate='Errore nel Salvataggio';
  678.         }
  679.       
  680.         $res_json->setData(array('ExitUpdate' => $ExitUpdate'MsgUpdate' => $MsgUpdate));
  681.         return $res_json;
  682.         
  683.       }
  684.       //----------------------------------------------------------------------
  685.       // Crea un nuovo utente, gestisce password, token, ruoli e profili.
  686.       //----------------------------------------------------------------------
  687.       public function saveUserAction(Request $requestLoggerInterface $loggerParameterBagInterface $paramsUserPasswordEncoderInterface $userPasswordEncoderInterface)
  688.       {
  689.         $res_json = new JsonResponse();
  690.         $csrfToken $request->request->get('csrftoken');
  691.         
  692.         //------------------------------------------------
  693.         // Controllo CSRF
  694.         //------------------------------------------------
  695.         if (!$this->isCsrfTokenValid('adduser'$csrfToken)) {
  696.           throw new \Exception('Csrf token not valid');
  697.         }
  698.         $em         $this->getDoctrine()->getManager();
  699.         $connection $em->getConnection();
  700.         $userLang   = new UserLanguageQueries($connection);
  701.     
  702.         try{
  703.           
  704.           //------------------------------------------------
  705.           // Dati dal form
  706.           //------------------------------------------------
  707.           $username   $_POST["username"];
  708.           $email      $_POST["email"];
  709.           $nome       $_POST["nome"];
  710.           $cognome    $_POST["cognome"];
  711.           $password   $_POST["password"];
  712.           $tipoUtenza $_POST["form_utenza"];
  713.           $lingua     $_ENV['DEFAULT_LANGUAGE'];
  714.           //------------------------------------------------
  715.           // Flag
  716.           //------------------------------------------------
  717.           $ChangeText 1;
  718.       
  719.           if ($request->request->has('chk_status')) {
  720.             $status 1;
  721.           } else {
  722.             $status 0;
  723.           }
  724.       
  725.           if ($request->request->has('chk_token')) {
  726.             $FlagToken 1;
  727.           } else {
  728.             $FlagToken 0;
  729.           }
  730.           //------------------------------------------------
  731.           // Codifica password
  732.           //------------------------------------------------
  733.           $user $em->find('App:User'$this->getUser()->getId());
  734.           $password $userPasswordEncoderInterface->encodePassword($user$password);
  735.           
  736.           //------------------------------------------------
  737.           // Insert utente
  738.           //------------------------------------------------
  739.           $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);';
  740.       
  741.           $statement $connection->prepare($q);
  742.           $statement->bindValue('username'$username);
  743.           $statement->bindValue('password'$password);
  744.           $statement->bindValue('email'$email);
  745.           $statement->bindValue('first_name'$nome);
  746.           $statement->bindValue('last_name'$cognome);
  747.           $statement->bindValue('user_role'$tipoUtenza);
  748.           $statement->bindValue('status'$status);
  749.           $statement->bindValue('change_text1'$ChangeText);
  750.           $statement->bindValue('flag_token'$FlagToken);
  751.           $statement->execute();
  752.           
  753.           //------------------------------------------------
  754.           // Recupero ID utente appena inserito
  755.           //------------------------------------------------
  756.           $sql 'SELECT id FROM "user" WHERE username = :username AND email = :email';
  757.           $stmt $em->getConnection()->prepare($sql);
  758.           $stmt->bindValue('username'$username);
  759.           $stmt->bindValue('email'$email);
  760.           $stmt->execute();
  761.           $ResulQuery $stmt->fetch();
  762.           $IdUsername $ResulQuery['id'];
  763.           $logger->debug("IdUsername ".$IdUsername);
  764.           // Insert lingua utente
  765.           $userLang->setLanguage($IdUsername$lingua);
  766.           //------------------------------------------------
  767.           // Update flag token se richiesto
  768.           //------------------------------------------------
  769.           if ($request->request->has('chk_token')) {
  770.               $u 'UPDATE "user" SET flag_token = 1 WHERE id = :id';
  771.               $stmt $em->getConnection()->prepare($u);
  772.               $stmt->bindValue('id'$IdUsername);
  773.               $stmt->execute();
  774.           }
  775.           $logger->debug("[saveUserAction] --- Valori Utente --- ");
  776.           $logger->debug("[saveUserAction] $username ");
  777.           $logger->debug("[saveUserAction] $email");
  778.           $logger->debug("[saveUserAction] $nome ");
  779.           $logger->debug("[saveUserAction] $cognome");
  780.           $logger->debug("[saveUserAction] $status");
  781.           $logger->debug("[saveUserAction] $ChangeText");
  782.           //------------------------------------------------
  783.           // Insert token utente
  784.           //------------------------------------------------
  785.           $token $this->generateToken($params);
  786.           $i "INSERT INTO user_token(
  787.                     id_user, token, date_start_validity, date_end_validity, check_validity
  788.                 ) VALUES (
  789.                     :id_user, :token, SYSDATE(), TO_DATE('31-12-2999 23:59:59', 'dd-mm-yyyy HH24:mi:ss'), 'Y'
  790.                 )";
  791.           $stmt $em->getConnection()->prepare($i);
  792.           $stmt->bindValue('id_user'$IdUsername);
  793.           $stmt->bindValue('token'$token);
  794.           $stmt->execute();
  795.           //------------------------------------------------
  796.           // Ruoli e profili
  797.           //------------------------------------------------
  798.           $sql="select id_roles, description_roles from roles";
  799.           $stmt $em->getConnection()->prepare($sql);
  800.           $stmt->execute();
  801.           $ResultRoles $stmt->fetchAll();
  802.           for ($i 0$i count($ResultRoles); $i++) {
  803.               $ruolo   $ResultRoles[$i]['description_roles'];
  804.               $idRuolo $ResultRoles[$i]['id_roles'];
  805.               $logger->debug("[saveUserAction] Valore Ruolo " $ruolo);
  806.               $logger->debug("[saveUserAction] Id Ruolo " $idRuolo);
  807.               $profile $_POST["profile_" $ruolo];
  808.               $logger->debug("[saveUserAction] Valore Profilo " $profile);
  809.               if ($profile != "None") {
  810.                 $sql "SELECT id_profile FROM profile WHERE type_profile = :profile";
  811.                 $stmt $em->getConnection()->prepare($sql);
  812.                 $stmt->bindValue('profile'$profile);
  813.                 $stmt->execute();
  814.                 $ResulQuery $stmt->fetch();
  815.                 $IdProfile $ResulQuery['id_profile'];
  816.                 if ($IdProfile) {
  817.                   $sql "INSERT INTO user_profile_roles (id_user, id_profile, id_roles)
  818.                           VALUES (:id_user, :id_profile, :id_roles)";
  819.                   $stmt $em->getConnection()->prepare($sql);
  820.                   $stmt->bindValue('id_user'$IdUsername);
  821.                   $stmt->bindValue('id_profile'$IdProfile);
  822.                   $stmt->bindValue('id_roles'$idRuolo);
  823.                   $stmt->execute();
  824.                 }
  825.               }
  826.           }
  827.           $ExitInsert 0;
  828.           $MsgInsert  "Utente <b>$username</b> salvato con successo.";
  829.         }  catch (\Exception $ex) {
  830.           $logger->debug("[saveUserAction] Errore nel Salvataggio dell'utente: " $ex);
  831.           $ExitInsert 1;
  832.           $MsgInsert  "Errore nel Salvataggio dell'utente <b>$username</b>";
  833.         }
  834.       
  835.         $res_json->setData(array( 'ExitInsert' => $ExitInsert'MsgInsert' => $MsgInsert));
  836.         return $res_json;
  837.       }
  838.       public function saveMultipleUserAction(Request $requestLoggerInterface $loggerParameterBagInterface $paramsUserPasswordEncoderInterface $userPasswordEncoderInterface)
  839.       {
  840.        
  841.          $csrfToken $request->request->get('csrftoken');
  842.         $em $this->getDoctrine()->getManager();
  843.         $connection $em->getConnection();
  844.           
  845.            if (!$this->isCsrfTokenValid('addMultipleuser'$csrfToken)) {
  846.           throw new \Exception('Csrf token not valid');
  847.         }
  848.           $File=$_FILES['form_lista_utenti'];
  849.         //$username = htmlEntities($_POST["username"], ENT_QUOTES);
  850.         //$email = htmlEntities($_POST["email"], ENT_QUOTES);
  851.         //$nome = htmlEntities($_POST["nome"], ENT_QUOTES);
  852.         //$cognome = htmlEntities($_POST["cognome"], ENT_QUOTES);
  853.         //$password = $_POST["password"];
  854.         //$tipoUtenza = htmlEntities($_POST["form_utenza"], ENT_QUOTES);
  855.         
  856.         //$logger->debug("[saveMultipleUserAction] filename ".json_encode($filename));
  857.         foreach ($_FILES as $file) {
  858.         
  859.         $fileName basename($file['name']);
  860.         $logger->debug("[saveMultipleUserAction] filename ".json_encode($fileName));
  861.     }
  862.         
  863.         $myfile fopen($_FILES['form_lista_utenti']['tmp_name'], "r") or die("Unable to open file!");
  864.         //$myfile = file_get_contents($_FILES['form_lista_utenti']['tmp_name']);
  865.         $logger->debug("[saveMultipleUserAction] myfile ".json_encode($myfile));
  866.         $firstline true;
  867.     
  868.     $ContaUser=0;
  869.     $ContaNonUser=0;
  870.     $TotaliUtenti=0;
  871.     while (($data fgetcsv($myfile,  10000';')) !== FALSE) {
  872.         try{
  873.         
  874.         if (!$firstline
  875.             {
  876.                 $TotaliUtenti=$TotaliUtenti+1;
  877.                 $logger->debug("[saveMultipleUserAction] data ".json_encode($data));
  878.                 
  879.                 $username $data[0];
  880.                 $logger->debug("[saveMultipleUserAction] username ".json_encode($username));
  881.                 
  882.                 $email $data[1];
  883.                 $logger->debug("[saveMultipleUserAction] email ".json_encode($email));
  884.                 
  885.                 $nome $data[2];
  886.                 $logger->debug("[saveMultipleUserAction] nome ".json_encode($nome));
  887.                 
  888.                 $cognome $data[3];
  889.                 $logger->debug("[saveMultipleUserAction] cognome ".json_encode($cognome));
  890.                 
  891.                 $password $data[4];
  892.                 $logger->debug("[saveMultipleUserAction] password ".json_encode($password));
  893.         
  894.         $ChangeText=1;
  895.         
  896.         
  897.         if ($request->request->has('chk_status')) {
  898.           $status 1;
  899.         } else {
  900.           $status 0;
  901.         }
  902.         
  903.          if ($request->request->has('chk_token')) {
  904.           $FlagToken 1;
  905.         } else {
  906.           $FlagToken 0;
  907.         }
  908.     
  909.         $tipoUtenza'ROLE_USER';
  910.     
  911.         $user $em->find('App:User'$this->getUser()->getId());
  912.         //$encoder = $this->getParameter('security.password_encoder');
  913.         $password $userPasswordEncoderInterface->encodePassword($user$password);//$encoder->encodePassword($user, $password);
  914.     
  915.        
  916.         
  917.              $q 'insert into user_acm(username, text1, email, first_name, last_name, user_role, status, change_text1 , flag_token) values('
  918.             ':username, :password, :email, :first_name, :last_name, :user_role, :status, :change_text1, :flag_token);';
  919.         $statement $connection->prepare($q);
  920.         $statement->bindValue('username'$username);
  921.         $statement->bindValue('password'$password);
  922.         $statement->bindValue('email'$email);
  923.         $statement->bindValue('first_name'$nome);
  924.         $statement->bindValue('last_name'$cognome);
  925.         $statement->bindValue('user_role'$tipoUtenza);
  926.         $statement->bindValue('status'$status);
  927.         $statement->bindValue('change_text1'$ChangeText);
  928.         $statement->bindValue('flag_token'$FlagToken);
  929.         $statement->execute();
  930.         
  931.          $logger->debug("[saveMultipleUserAction] Prelevo id Utente appena inserito");
  932.             
  933.         $sql="select id from user_acm where username = '$username' and email='$email'";    
  934.         $stmt $em->getConnection()->prepare($sql);
  935.         $stmt->execute();
  936.         $ResulQuery $stmt->fetchAll()[0];
  937.         $IdUsername=$ResulQuery['id'];
  938.     
  939.         
  940.         
  941.            //FLAG TOKEN API
  942.         if ($request->request->has('chk_token')) {
  943.           //update user flag_token
  944.           $u "update user set flag_token = 1 where id= '$IdUsername'";
  945.           $stmt $em->getConnection()->prepare($u);
  946.           $stmt->execute();
  947.         }
  948.     
  949.     
  950.         //$encoded = $encoder->encodePassword($user, $password);
  951.         //$user->setChangePassword($encoded);
  952.     
  953.         $logger->debug("[saveMultipleUserAction] --- Valori Utente --- ");
  954.         $logger->debug("[saveMultipleUserAction] $username ");
  955.         $logger->debug("[saveMultipleUserAction] $email");
  956.         $logger->debug("[saveMultipleUserAction] $nome ");
  957.         $logger->debug("[saveMultipleUserAction] $cognome");
  958.         $logger->debug("[saveMultipleUserAction] $password");
  959.         $logger->debug("[saveMultipleUserAction] $status");
  960.         $logger->debug("[saveMultipleUserAction] $ChangeText");
  961.     
  962.      
  963.     
  964.     
  965.           $token $this->generateToken($params);
  966.     
  967.         
  968.           $i 'insert into user_token(id_user, token, date_start_validity, date_end_validity, check_validity)'
  969.             ."values( '$IdUsername', '$token',  SYSDATE(), TO_DATE('31-12-2999 23:59:59', 'dd-mm-yyyy HH24:mi:ss'), 'Y')";
  970.           $stmt $em->getConnection()->prepare($i);
  971.           $stmt->execute();
  972.     
  973.         
  974.     
  975.         $sql="select id_roles,description_roles from roles";
  976.         $stmt $em->getConnection()->prepare($sql);
  977.         $stmt->execute();
  978.         $ResultRoles $stmt->fetchAll();
  979.     
  980.     
  981.         for($i=0$i<count($ResultRoles); $i++)
  982.         {
  983.           $ruolo=$ResultRoles[$i]['description_roles'];
  984.           $idRuolo=$ResultRoles[$i]['id_roles'];
  985.     
  986.           $logger->debug("[saveMultipleUserAction] Valore Ruolo ".$ruolo);
  987.           $logger->debug("[saveMultipleUserAction] Id Ruolo ".$idRuolo);
  988.     
  989.           $profile htmlEntities($_POST["profile_".$ruolo], ENT_QUOTES);
  990.           $logger->debug("[saveMultipleUserAction] Valore Profilo ".$profile);
  991.     
  992.           if($profile != "None")
  993.           {
  994.             $sql="select id_profile from profile where type_profile = '$profile'";
  995.             $stmt $em->getConnection()->prepare($sql);
  996.             $stmt->execute();
  997.             $ResulQuery $stmt->fetchAll()[0];
  998.             $IdProfile=$ResulQuery['id_profile'];
  999.     
  1000.             $sql="insert into user_profile_roles (id_user, id_profile, id_roles) values ($IdUsername$IdProfile$idRuolo)";
  1001.             $stmt $em->getConnection()->prepare($sql);
  1002.             $stmt->execute();
  1003.           }
  1004.     
  1005.         }
  1006.         
  1007.     $ContaUser=$ContaUser+1;
  1008.     }
  1009.             } catch (\Throwable $th) {
  1010.                 $ContaNonUser=$ContaNonUser+1;
  1011.             }
  1012.     
  1013.                  $firstline false;
  1014.             }
  1015.        // return $this->redirect($this->generateUrl('user_manage'));
  1016.        $res_json = new JsonResponse;
  1017.         $res_json->setData(array('TotaliUtenti' => $TotaliUtenti,
  1018.                                  'ContaUser' => $ContaUser,
  1019.                                  'ContaNonUser' => $ContaNonUser));
  1020.                                                      
  1021.         return $res_json;
  1022.       }      
  1023.       public function generateToken($params){
  1024.           
  1025.         $em $this->getDoctrine()->getManager();
  1026.         $randomString substr(str_replace(['+''/''='], ''base64_encode(random_bytes(32))), 030); // 32 chars, without /=+
  1027.         $q "select count(*) cnt from user_token where token = '$randomString'";
  1028.         $statement $em->getConnection()->prepare($q);
  1029.         $statement->execute();
  1030.         $ResulQuery $statement->fetchAll()[0];
  1031.         $count $ResulQuery['cnt'];
  1032.         if ($count 0) {
  1033.           generateToken($params);
  1034.         } else {
  1035.           return $randomString;
  1036.         }
  1037.       }
  1038.     //--------------------------------------------------------
  1039.     // Aggiorna dati, ruoli e profili di un utente esistente
  1040.     //--------------------------------------------------------
  1041.     public function updateUserAction(Request $requestLoggerInterface $loggerParameterBagInterface $params)
  1042.     {
  1043.       //------------------------------------------
  1044.       // Controllo CSRF
  1045.       //------------------------------------------
  1046.       $csrfToken $request->request->get('csrftoken');
  1047.           
  1048.       if (!$this->isCsrfTokenValid('edituser'$csrfToken)) {
  1049.         throw new \Exception('Csrf token not valid');
  1050.       }
  1051.           try{
  1052.         //------------------------------------------
  1053.         // Dati dal form
  1054.         //------------------------------------------
  1055.         $id         $_POST["form_id"];
  1056.         $email      $_POST["form_email"];
  1057.         $nome       $_POST["form_nome"];
  1058.         $cognome    $_POST["form_cognome"];
  1059.         $tipoUtenza $_POST["form_utenza"];
  1060.         //------------------------------------------
  1061.         // Flag
  1062.         //------------------------------------------
  1063.         if ($request->request->has('chk_token')){
  1064.           $f_token 1;
  1065.         } else {
  1066.           $f_token 0;
  1067.         }
  1068.         if ($request->request->has('chk_utenza')){
  1069.           $statusUtenza 1;
  1070.         } else {
  1071.           $statusUtenza 0;
  1072.         }
  1073.         $em $this->getDoctrine()->getManager();
  1074.         //------------------------------------------------
  1075.         // Stato dell'utente
  1076.         //------------------------------------------------
  1077.         $sql "SELECT CASE WHEN status = true THEN 1 ELSE 0 END AS status
  1078.                 FROM user_acm
  1079.                 WHERE id = :id";
  1080.         $statement $em->getConnection()->prepare($sql);
  1081.         $statement->bindValue('id'$id);
  1082.         $statement->execute();
  1083.         $ResulQuery $statement->fetch();
  1084.         $status $ResulQuery['status'];
  1085.         
  1086.         if ($statusUtenza != $status) {
  1087.           $q "update user_acm set status = :statusUtenza where id = :id";
  1088.           $statement $em->getConnection()->prepare($q);
  1089.           $statement->bindValue('statusUtenza'$statusUtenza);
  1090.           $statement->bindValue('id'$id);
  1091.           $statement->execute();
  1092.         }
  1093.         //------------------------------------------------
  1094.         // Flag token dell'utente
  1095.         //------------------------------------------------
  1096.         $sql "SELECT flag_token FROM user_acm WHERE id = :id";
  1097.         $statement $em->getConnection()->prepare($sql);
  1098.         $statement->bindValue('id'$id);
  1099.         $statement->execute();
  1100.         $ResulQuery $statement->fetch();
  1101.         $flag_token $ResulQuery['flag_token'];
  1102.         if ($f_token != $flag_token) {
  1103.               $q 'update user_acm set flag_token = :flag_token where id = :id;';  
  1104.           $statement $em->getConnection()->prepare($q);
  1105.           $statement->bindValue('flag_token'$f_token);
  1106.           $statement->bindValue('id'$id);
  1107.           $statement->execute();
  1108.         }
  1109.         //------------------------------------------------
  1110.         // Controllo se esiste un token per l'utente
  1111.         //------------------------------------------------
  1112.         $q "SELECT COUNT(*) AS token FROM user_token WHERE id_user = :id";
  1113.         $statement $em->getConnection()->prepare($q);
  1114.         $statement->bindValue('id'$id);
  1115.         $statement->execute();
  1116.         $ResulQuery $statement->fetch();
  1117.         $token $ResulQuery['token'];
  1118.         //---------------------------------------------------------
  1119.         // Se token non esiste e flag attivo, creo un nuovo token
  1120.         //---------------------------------------------------------
  1121.         if ($f_token == && $token == 0) {
  1122.           $token $this->generateToken($params);
  1123.           $i "INSERT INTO user_token(
  1124.                     id_user, token, date_start_validity, date_end_validity, check_validity
  1125.                 ) VALUES (
  1126.                     :id_user, :token, SYSDATE(), TO_DATE('31-12-2999 23:59:59', 'dd-mm-yyyy hh24:mi:ss'), 'Y'
  1127.                 )";
  1128.           $stmt $em->getConnection()->prepare($i);
  1129.           $stmt->bindValue('id_user'$id);
  1130.           $stmt->bindValue('token'$token);
  1131.           $stmt->execute();
  1132.         }
  1133.         //------------------------------------------------
  1134.         // Update dei dati dell'utente
  1135.         //------------------------------------------------
  1136.         $q 'UPDATE user_acm SET
  1137.                 email = :email,
  1138.                 first_name = :first_name,
  1139.                 last_name = :last_name,
  1140.                 user_role = :user_role
  1141.               WHERE id = :id';
  1142.         $statement $em->getConnection()->prepare($q);
  1143.         $statement->bindValue('email'$email);
  1144.         $statement->bindValue('first_name'$nome);
  1145.         $statement->bindValue('last_name'$cognome);
  1146.         $statement->bindValue('user_role'$tipoUtenza);
  1147.         $statement->bindValue('id'$id);
  1148.         $statement->execute();
  1149.         $sql="select id_roles, description_roles from roles order by 2";
  1150.         $stmt $em->getConnection()->prepare($sql);
  1151.         $stmt->execute();
  1152.         $ResultRoles $stmt->fetchAll();
  1153.         $sql "DELETE FROM user_profile_roles WHERE id_user = :id_user";
  1154.         $stmt $em->getConnection()->prepare($sql);
  1155.         $stmt->bindValue('id_user'$id);
  1156.         $stmt->execute();
  1157.         for ($i 0$i count($ResultRoles); $i++) {
  1158.             $ruolo   $ResultRoles[$i]['description_roles'];
  1159.             $idRuolo $ResultRoles[$i]['id_roles'];
  1160.             $logger->debug("[updateUserAction] Valore Ruolo " $ruolo);
  1161.             $logger->debug("[updateUserAction] Id Ruolo " $idRuolo);
  1162.             $profile $_POST["profile_" $ruolo];
  1163.             $logger->debug("[updateUserAction] Valore Profilo " $profile);
  1164.             if ($profile != "None") {
  1165.               $logger->debug("[updateUserAction] Profilo diverso da None");
  1166.               //------------------------------------------------
  1167.               // Recupero l'ID del profilo selezionato
  1168.               //------------------------------------------------
  1169.               $sql "SELECT id_profile FROM profile WHERE type_profile = :profile";
  1170.               $stmt $em->getConnection()->prepare($sql);
  1171.               $stmt->bindValue('profile'$profile);
  1172.               $stmt->execute();
  1173.               $ResulQuery $stmt->fetch();
  1174.               $IdProfile $ResulQuery['id_profile'];
  1175.               //------------------------------------------------
  1176.               // Insert nuova associazione utente-profilo-ruolo
  1177.               //------------------------------------------------
  1178.               $sql "INSERT INTO user_profile_roles (id_user, id_profile, id_roles)
  1179.                       VALUES (:id_user, :id_profile, :id_roles)";
  1180.               $stmt $em->getConnection()->prepare($sql);
  1181.               $stmt->bindValue('id_user'$id);
  1182.               $stmt->bindValue('id_profile'$IdProfile);
  1183.               $stmt->bindValue('id_roles'$idRuolo);
  1184.               $stmt->execute();
  1185.             }
  1186.       }
  1187.         $ExitUpdateUser 0;
  1188.         $MsgUpdateUser  'Utente Modificato con Successo';
  1189.       } catch (\Exception $ex) {
  1190.         $logger->debug("[updateUserAction] Errore nella modifica dell'utente: " $ex);
  1191.         $ExitUpdateUser 1;
  1192.         $MsgUpdateUser  "Errore nella modifica dell'utente.";
  1193.       }
  1194.         $res_json = new JsonResponse;
  1195.         $res_json->setData(array(
  1196.                                  'ExitUpdateUser' => $ExitUpdateUser,
  1197.                                  'MsgUpdateUser' => $MsgUpdateUser
  1198.                                 ));
  1199.                                
  1200.         return $res_json;
  1201.     }
  1202.     public function deleteUserAction(Request $requestParameterBagInterface $paramsLoggerInterface $logger)
  1203.     {
  1204.       $csrfToken $request->request->get('csrftoken');
  1205.           
  1206.       if (!$this->isCsrfTokenValid('deluser'$csrfToken)) {
  1207.         throw new \Exception('Csrf token not valid');
  1208.       }
  1209.       try{
  1210.         $id $_POST["form_id_del"];
  1211.         
  1212.         $em $this->getDoctrine()->getManager();
  1213.         $connection $em->getConnection();
  1214.         $userLang = new UserLanguageQueries($connection);
  1215.         $q0 'select username from user_acm where id = :id;';    
  1216.         $stmt $connection->prepare($q0);
  1217.         $stmt->bindValue('id'$id);
  1218.         $stmt->execute();
  1219.         $username $stmt->fetchAll()[0]["username"];
  1220.         $q 'delete from user_acm where id = :id;';    
  1221.         
  1222.         $statement $connection->prepare($q);
  1223.         $statement->bindValue('id'$id);
  1224.         $statement->execute();
  1225.         $userLang->deleteByUser($id);
  1226.         $ExitDeleteUser=0;
  1227.         $MsgDeleteUser="Utente <b>$username</b> Cancellato con Successo ";
  1228.       } catch (\Exception $ex) {
  1229.         $logger->debug("[deleteUserAction] Errore nella Cancellazione dell'utente: " $ex);
  1230.         $ExitDeleteUser=1;
  1231.         $MsgDeleteUser="Errore nella Cancellazione dell'utente </b>$username</b>";
  1232.       }
  1233.       $res_json = new JsonResponse;
  1234.       $res_json->setData(array(
  1235.                                  'ExitDeleteUser' => $ExitDeleteUser,
  1236.                                  'MsgDeleteUser' => $MsgDeleteUser
  1237.                                 ));
  1238.                                
  1239.       return $res_json;
  1240.     }
  1241.     //-----------------------------------------------------------
  1242.     // Reindirizza l'utente all'URL della documentazione
  1243.     // configurato nel file .env
  1244.     //-----------------------------------------------------------
  1245.     public function redirectDocumentation(){
  1246.       $url $_ENV['PRODUCT_DOC_URL'];
  1247.       return $this->redirect($url);
  1248.     }
  1249. }