src/Controller/SecurityController.php line 24

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