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