src/Controller/AccountController.php line 206

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Role;
  4. use App\Entity\User;
  5. use App\Entity\Share;
  6. use App\Entity\Visio;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use App\Utils\EmailSignature;
  9. use App\Utils\XmlRender;
  10. use App\Utils\UserInsert;
  11. use App\Service\UserSession;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\Filesystem\Filesystem;
  14. use Symfony\Component\Ldap\Adapter\ExtLdap\Adapter;
  15. use Symfony\Component\Ldap\Entry;
  16. use Symfony\Component\Ldap\Ldap;
  17. use Symfony\Component\Process\Process;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use Sabre\CardDAV\Backend\PDO;
  22. use Sabre\CalDAV\Backend\PDO as CalPDO;
  23. use Sabre\VObject\Reader;
  24. use Sabre\VObject\Node;
  25. use Sabre\VObject\Document;
  26. use Sabre\VObject\Component\VCalendar;
  27. use Sabre\VObject\Component\VCard;
  28. class AccountController extends AbstractController
  29. {
  30.     private $pdo;
  31.     
  32.     #[Route('/account'name'account')]
  33.     public function account(EntityManagerInterface $entityManagerUserSession $userSession): Response
  34.     {
  35.         if (!$user $this->getUser()) return $this->redirectToRoute('login');
  36.         else $userData $userSession->getEntryFromSession();
  37.         $level $entityManager->getRepository(Role::class)->findBy(array("type" => "level"), array('description' => 'ASC'));
  38.         $levels = [];
  39.         for($i=0;$i<count($level);$i++){
  40.             $tmp = [];
  41.             $lvl preg_split('/_/',$level[$i]->getRole());
  42.             $tmp['value'] = strtolower($lvl[1]);
  43.             $tmp['label'] = $level[$i]->getDescription();
  44.             $levels[] = $tmp;
  45.         }
  46.         $site $entityManager->getRepository(Role::class)->findBy(array("type" => "site"), array('role' => 'ASC'));
  47.         $sites = [];
  48.         for($i=0;$i<count($site);$i++){
  49.             $tmp = [];
  50.             $ste preg_split('/_/',$site[$i]->getRole());
  51.             $tmp['value'] = $ste[1];
  52.             $tmp['label'] = $site[$i]->getDescription();
  53.             $sites[] = $tmp;
  54.         }
  55.         return $this->render('account/index.html.twig', [
  56.             'title_meta' => 'Comptes internes',
  57.             'page' => 'account',
  58.             'user' => $userData,
  59.             'level' => $levels,
  60.             'site' => $sites,
  61.         ]);
  62.     }
  63.     #[Route('/account/data'name'account_data')]
  64.     public function account_data(Request $requestAdapter $ldapAdapterEntityManagerInterface $entityManager): Response
  65.     {
  66.         if (!$user $this->getUser()) {
  67.             return $this->redirectToRoute('login');
  68.         }
  69.         $submittedToken $request->request->get('token');
  70.         if ($this->isCsrfTokenValid('account-token'$submittedToken))
  71.         {
  72.             $ldap = new Ldap($ldapAdapter);
  73.             $ldap->bind($this->getParameter('app.ldap_service_user').','.$this->getParameter('app.ldap_service_dn'), $this->getParameter('app.ldap_service_password'));
  74.             $query $ldap->query($this->getParameter('app.ldap_service_dn'), '(|(uid=*))');
  75.             $users $query->execute()->toArray();
  76.             $usersData = [];
  77.             for($i=0;$i<count($users);$i++){
  78.                 $entry $users[$i];
  79.                 if($entry->hasAttribute('uid')){
  80.                     $nickhandle preg_split('/@/',$entry->getAttribute('mail')[0]);
  81.                     $qrcode $request->getScheme() . '://' $request->getHttpHost() . '/qr-code/eps/' $entry->getAttribute('labeledURI')[0] . '/vcard/' preg_replace('/\./''-'$nickhandle[0]) . '.html';
  82.                     if($nickhandle[1] == 'batiformes.com' || $nickhandle[1] == 'scorev.fr'){
  83.                         $usersRole 'ROLE_'.mb_strtoupper($entry->getAttribute('ou')[0]);
  84.                         $roleUsers $entityManager->getRepository(Role::class)->findOneBy(array("role" => $usersRole));
  85.                         $phone = ($entry->hasAttribute('telephoneNumber') ) ? $entry->getAttribute('telephoneNumber')[0] : '';
  86.                         $mobile = ($entry->hasAttribute('mobile') ) ? $entry->getAttribute('mobile')[0] : '';
  87.                         $fax = ($entry->hasAttribute('facsimileTelephoneNumber') ) ? $entry->getAttribute('facsimileTelephoneNumber')[0] : '';
  88.                         $carddav = new UserInsert();
  89.                         $vcardData $carddav->vcard_create($entry->getAttribute('givenName')[0],$entry->getAttribute('sn')[0],addslashes($entry->getAttribute('street')[0]),addslashes($entry->getAttribute('l')[0]),$entry->getAttribute('postalCode')[0],strtolower($entry->getAttribute('mail')[0]),$mobile,$phone,$fax,addslashes($entry->getAttribute('title')[0]),$roleUsers->getDescription(),$entry->getAttribute('o')[0]);
  90.                         $vcard base64_encode($vcardData);
  91.                     }
  92.                     else{
  93.                         $vcard '';
  94.                     }
  95.             
  96.                     $signature = new EmailSignature();
  97.                     $signatureTxt base64_encode($signature->signature_ldap($entry,$vcard));
  98.                     $tmp['lastname'] = preg_replace(array('/\bVon\b/u','/\bDe\b/u'), array('von','de'), mb_convert_case($entry->getAttribute('sn')[0], MB_CASE_TITLE"UTF-8"));
  99.                     $tmp['firstname'] = mb_convert_case($entry->getAttribute('givenName')[0], MB_CASE_TITLE"UTF-8");
  100.                     if($entry->hasAttribute('telephoneNumber')) $tmp['phone'] = chunk_split($entry->getAttribute('telephoneNumber')[0], 2' ');
  101.                     else $tmp['phone'] = '';
  102.                     if($entry->hasAttribute('facsimileTelephoneNumber'))$tmp['fax'] = chunk_split($entry->getAttribute('facsimileTelephoneNumber')[0], 2' ');
  103.                     else $tmp['fax'] = '';
  104.                     if($entry->hasAttribute('mobile'))$tmp['mobile'] = chunk_split($entry->getAttribute('mobile')[0], 2' ');
  105.                     else $tmp['mobile'] = '';
  106.                     $tmp['mail'] = $entry->getAttribute('mail')[0];
  107.                     $tmp['type'] = $entry->getAttribute('employeeType')[0];
  108.                     $tmp['site'] = $entry->getAttribute('o')[0];
  109.                     $tmp['category'] = mb_strtouppermb_substr$entry->getAttribute('departmentNumber')[0], 0)) . mb_substr$entry->getAttribute('departmentNumber')[0], );
  110.                     $tmp['btn'] = '<div class="dropdown pull-right">' 
  111.                         '<a class="dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false"><i class="fas fa-ellipsis-v"></i></a>' .
  112.                         '<div class="dropdown-menu dropdown-menu-end">' .
  113.                             '<a class="dropdown-item edit" href="#" data-id="'.$entry->getAttribute('mail')[0].'"><i class="fas fa-pencil-alt"></i> Modifier</a>' .
  114.                             '<a class="dropdown-item qrcode" href="'.$qrcode.'" download="qrcode.eps" download><i class="fas fa-qrcode"></i> QrCode</a>' .
  115.                             '<a class="dropdown-item signature" href="data:application/octet-stream;base64,'.$signatureTxt.'" download="signature.txt" download><i class="fas fa-file-signature"></i> Signature</a>' .
  116.                             '<div class="dropdown-divider"></div>' .
  117.                             '<a class="dropdown-item trash" href="#" data-id="'.$entry->getAttribute('mail')[0].'"><i class="fas fa-trash-alt"></i> Supprimer</a>' .
  118.                         '</div>' .
  119.                     '</div>';
  120.                     $usersData[] = $tmp;
  121.                 }
  122.             }
  123.             usort($usersData, fn($a$b) => $a['lastname'] <=> $b['lastname'] ?: $a['lastname'] <=> $b['lastname'] );
  124.             $data $usersData;
  125.             return $this->json(
  126.                 $data,
  127.                 headers: ['Content-Type' => 'application/json;charset=UTF-8']
  128.             );
  129.         } else {
  130.             $data = [
  131.                 'alert' => 'error',
  132.                 'message' => 'Problème de CRSF.'
  133.             ];
  134.             return $this->json(
  135.                 $data,
  136.                 headers: ['Content-Type' => 'application/json;charset=UTF-8']
  137.             );
  138.         }
  139.             
  140.     }
  141.     #[Route('/account/edit'name'account_edit')]
  142.     public function account_edit(Request $requestAdapter $ldapAdapter): Response
  143.     {
  144.         if (!$user $this->getUser()) {
  145.             return $this->redirectToRoute('login');
  146.         }
  147.         $submittedToken $request->request->get('token');
  148.         if ($this->isCsrfTokenValid('account-token'$submittedToken))
  149.         {
  150.             if($request->request->get('id') != ''){
  151.                 $ldap = new Ldap($ldapAdapter);
  152.                 $ldap->bind($this->getParameter('app.ldap_service_user').','.$this->getParameter('app.ldap_service_dn'), $this->getParameter('app.ldap_service_password'));
  153.                 $query $ldap->query($this->getParameter('app.ldap_service_dn'), '(|(uid='.$request->request->get('id').'*))');
  154.                 $users $query->execute()->toArray();
  155.                 $usersData = [];
  156.                 for($i=0;$i<count($users);$i++){
  157.                     $entry $users[$i];
  158.                     if($entry->hasAttribute('uid')){
  159.                         $tmp['lastname'] = $entry->getAttribute('sn')[0];
  160.                         $tmp['firstname'] = $entry->getAttribute('givenName')[0];
  161.                         $tmp['phone'] = ($entry->hasAttribute('telephoneNumber') ? $entry->getAttribute('telephoneNumber')[0] : '');
  162.                         $tmp['fax'] = ($entry->hasAttribute('facsimileTelephoneNumber') ? $entry->getAttribute('facsimileTelephoneNumber')[0] : '');
  163.                         $tmp['mobile'] = ($entry->hasAttribute('mobile') ? $entry->getAttribute('mobile')[0] : '');
  164.                         $tmp['mail'] = $entry->getAttribute('mail')[0];
  165.                         $tmp['site'] = preg_replace('/\s+/'''$entry->getAttribute('o')[0]);
  166.                         $tmp['level'] = $entry->getAttribute('ou')[0];
  167.                         $tmp['function'] = $entry->getAttribute('title')[0];
  168.                         $tmp['contract'] = $entry->getAttribute('employeeType')[0];
  169.                         $tmp['category'] = mb_strtouppermb_substr$entry->getAttribute('departmentNumber')[0], 0)) . mb_substr$entry->getAttribute('departmentNumber')[0], );
  170.                         $usersData[] = $tmp;
  171.                     }
  172.                 }
  173.                 $data $usersData;
  174.                 return $this->json(
  175.                     $data,
  176.                     headers: ['Content-Type' => 'application/json;charset=UTF-8']
  177.                 );
  178.             }
  179.         } else {
  180.             $data = [
  181.                 'alert' => 'error',
  182.                 'message' => 'Problème de CRSF.'
  183.             ];
  184.             return $this->json(
  185.                 $data,
  186.                 headers: ['Content-Type' => 'application/json;charset=UTF-8']
  187.             );
  188.         }
  189.     }
  190.     #[Route('/account/add'name'account_add')]
  191.     public function account_add(Request $requestAdapter $ldapAdapterEntityManagerInterface $entityManager): Response
  192.     {
  193.         if (!$user $this->getUser()) {
  194.             return $this->redirectToRoute('login');
  195.         }
  196.         $submittedToken $request->request->get('add-token');
  197.         if ($this->isCsrfTokenValid('add-token'$submittedToken))
  198.         {
  199.             $direction $entityManager->getRepository(Role::class)->findOneBy(array("role" => 'ROLE_'.$request->request->get('site-input')));
  200.             $role $entityManager->getRepository(Role::class)->findOneBy(array("role" => 'ROLE_'.strtoupper($request->request->get('level-input'))));
  201.             $bdd $this->getDatabaseConnection();
  202.             $sabreBackend = new PDO($bdd);
  203.             $userInsert = new UserInsert();
  204.             $nickhandle preg_split('/@/',$request->request->get('mail-input'));
  205.             $vcard '';
  206.             if($nickhandle[1] == 'batiformes.com' || $nickhandle[1] == 'scorev.fr'){
  207.                 $phone = ($request->request->get('phone-input')) ? preg_replace('/-/','',$request->request->get('phone-input')) : '';
  208.                 $mobile = ($request->request->get('mobile-input')) ? preg_replace('/-/','',$request->request->get('mobile-input')) : '';
  209.                 $fax = ($request->request->get('fax-input')) ? preg_replace('/-/','',$request->request->get('fax-input')) : '';
  210.                 $vcard $userInsert->vcard_create($request->request->get('firstname-input'),$request->request->get('lastname-input'),$direction->getData()['direction'],$direction->getData()['city'],$direction->getData()['zipcode'],$request->request->get('mail-input'),$mobile,$phone,$fax,$request->request->get('function-input'),$role->getDescription(),$request->request->get('site-input'));
  211.             }
  212.             else{
  213.                 $vcard $userInsert->vcard_ext_create($request->request->get('firstname-input'),$request->request->get('lastname-input'),$request->request->get('mail-input'),$mobile,$phone,$fax,$request->request->get('function-input'),$role->getDescription(),'EXT');
  214.             }
  215.             $ldap = new Ldap($ldapAdapter);
  216.             $ldap->bind($this->getParameter('app.ldap_service_user').','.$this->getParameter('app.ldap_service_dn'), $this->getParameter('app.ldap_service_password'));
  217.             $entryManager $ldap->getEntryManager();
  218.             if($request->request->get('account-id') != ''){
  219.                 $query $ldap->query($this->getParameter('app.ldap_service_dn'), '(&(uid='.$request->request->get('account-id').'))');
  220.                 $result $query->execute()->toArray();
  221.                 $entry $result[0];
  222.                 $gid $entry->getAttributes()['ou'][0];
  223.                 if($gid == $request->request->get('level-input')){
  224.                     $gidNumber $entry->getAttributes()['gidNumber'][0];
  225.                 }
  226.                 else{
  227.                     $queryGroup $ldap->query($this->getParameter('app.ldap_service_dn'), '(&(cn='.$request->request->get('level-input').'))');
  228.                     $resultGroup $queryGroup->execute()->toArray();
  229.                     $group $resultGroup[0];
  230.                     $gidNumber $group->getAttributes()['gidNumber'][0];
  231.                     $gid $request->request->get('level-input');
  232.                 }
  233.                 $entry->setAttribute('givenName', [strtolower($request->request->get('firstname-input'))]);
  234.                 $entry->setAttribute('sn', [strtolower($request->request->get('lastname-input'))]);
  235.                 $entry->setAttribute('cn', [strtolower($request->request->get('lastname-input')).' '.strtolower($request->request->get('firstname-input'))]);
  236.                 if($request->request->get('phone-input') == '' && $entry->hasAttribute('telephoneNumber') ) $entry->setAttribute('telephoneNumber', [preg_replace('/-/','',$request->request->get('phone-input'))]);
  237.                 if($request->request->get('phone-input') != ''$entry->setAttribute('telephoneNumber', [preg_replace('/-/','',$request->request->get('phone-input'))]);
  238.                 if($request->request->get('mobile-input') == '' && $entry->hasAttribute('mobile') ) $entry->setAttribute('mobile', [preg_replace('/-/','',$request->request->get('mobile-input'))]);
  239.                 if($request->request->get('mobile-input') != ''$entry->setAttribute('mobile', [preg_replace('/-/','',$request->request->get('mobile-input'))]);
  240.                 if($request->request->get('fax-input') == '' && $entry->hasAttribute('facsimileTelephoneNumber') ) $entry->setAttribute('facsimileTelephoneNumber', [preg_replace('/-/','',$request->request->get('fax-input'))]);
  241.                 if($request->request->get('fax-input') != ''$entry->setAttribute('facsimileTelephoneNumber', [preg_replace('/-/','',$request->request->get('fax-input'))]);
  242.                 $entry->setAttribute('street', [$direction->getData()['direction']]);
  243.                 $entry->setAttribute('postalCode', [$direction->getData()['zipcode']]);
  244.                 $entry->setAttribute('l', [$direction->getData()['city']]);
  245.                 $entry->setAttribute('employeeType', [$request->request->get('contract-input')]);
  246.                 $entry->setAttribute('departmentNumber', [$role->getDescription()]);
  247.                 $entry->setAttribute('o', [$direction->getDescription()]);
  248.                 $entry->setAttribute('title', [strtolower($request->request->get('function-input'))]);
  249.                 $entry->setAttribute('gidNumber', [$gidNumber]);
  250.                 $entry->setAttribute('ou', [$gid]);
  251.                 $entry->setAttribute('st', [$direction->getData()['state']]);
  252.                 $entry->setAttribute('postalAddress', [$direction->getData()['gmap']]);
  253.                 $entry->setAttribute('registeredAddress', [$direction->getData()['lat'].':'.$direction->getData()['lng']]);
  254.                 $entryManager->update($entry);
  255.                 if($vcard != '') {
  256.                     $query $ldap->query($this->getParameter('app.ldap_service_dn'), '(|(uid=*))');
  257.                     $users $query->execute()->toArray();
  258.                     for($i=0;$i<count($users);$i++){
  259.                         $addressbooks $bdd->prepare("SELECT id FROM addressbooks WHERE principaluri = 'principals/".$users[$i]->getAttribute('mail')[0]."' AND uri = 'annuaire'");
  260.                         $addressbooks->execute();
  261.                         $addressbooksResult $addressbooks->fetchAll(\PDO::FETCH_ASSOC);
  262.                         $addressbooksId $addressbooksResult[0]['id'];
  263.                         $sabreBackend->updateCard($addressbooksId$users[$i]->getAttribute('mail')[0].'-'.$request->request->get('account-id').'.vcf'$vcard);
  264.                     }
  265.                 }
  266.                 $message 'Compte updaté.';
  267.             }
  268.             else{
  269.                 $queryGroup $ldap->query($this->getParameter('app.ldap_service_dn'), '(&(cn='.$request->request->get('level-input').'))');
  270.                 $result $queryGroup->execute()->toArray();
  271.                 $group $result[0];
  272.                 $gidNumber $group->getAttributes()['gidNumber'][0];
  273.                 $uidnumber mt_rand('10000''30000');
  274.                 $uuid strtoupper(substr(bin2hex(random_bytes(32)), 032));
  275.                 $userpassword '{SHA}' base64_encode(sha1'B@tiF0rme5-'.strtolower($request->request->get('firstname-input')), TRUE ));
  276.                 $entry = new Entry('uid='.strtolower($request->request->get('mail-input')).',ou=users,dc=batiformes,dc=com', [
  277.                     'objectClass' => [
  278.                         '0' => 'posixAccount',
  279.                         '1' => 'inetOrgPerson'
  280.                     ],
  281.                     'uid' => [strtolower($request->request->get('mail-input'))],
  282.                     'cn' => [strtolower($request->request->get('lastname-input')).' '.strtolower($request->request->get('firstname-input'))],
  283.                     'uidnumber' => [$uidnumber],
  284.                     'gidNumber' => [$gidNumber],
  285.                     'userPassword' => [$userpassword],
  286.                     'loginShell' => ['/bin/false'],
  287.                     'homeDirectory' => ['/mnt/data/private/'.strtolower($request->request->get('mail-input'))],
  288.                     'ou' => [$request->request->get('level-input')],
  289.                     'employeeNumber' => [$uuid],
  290.                     'departmentNumber' => [$role->getDescription()],
  291.                     'labeledURI' => [$direction->getData()['url']],
  292.                     'sn' => [strtolower($request->request->get('lastname-input'))],
  293.                     'givenName' => [strtolower($request->request->get('firstname-input'))],
  294.                     'employeeType' => [$request->request->get('contract-input')],
  295.                     'o' => [$direction->getDescription()],
  296.                     'title' => [strtolower($request->request->get('function-input'))],
  297.                     'street' => [$direction->getData()['direction']],
  298.                     'st' => [$direction->getData()['state']],
  299.                     'postalAddress' => [$direction->getData()['gmap']],
  300.                     'registeredAddress' => [$direction->getData()['lat'].':'.$direction->getData()['lng']],
  301.                     'postalCode' => [$direction->getData()['zipcode']],
  302.                     'l' => [$direction->getData()['city']],
  303.                     'mail' => [strtolower($request->request->get('mail-input'))],
  304.                 ]);
  305.                 
  306.                 if($request->request->get('phone-input') != ''$entry->setAttribute('telephoneNumber', [preg_replace('/-/','',$request->request->get('phone-input'))]);
  307.                 if($request->request->get('mobile-input') != ''$entry->setAttribute('mobile', [preg_replace('/-/','',$request->request->get('mobile-input'))]);
  308.                 if($request->request->get('fax-input') != ''$entry->setAttribute('facsimileTelephoneNumber', [preg_replace('/-/','',$request->request->get('fax-input'))]);
  309.                 $entryManager->add($entry);
  310.     
  311.                 $filesystem = new Filesystem();
  312.                 $filesystem->mkdir('/mnt/data/private/'.strtolower($request->request->get('mail-input')));
  313.                 $filesystem->mkdir('/opt/picapport/.picapport/users/user/'.strtolower($request->request->get('mail-input')));
  314.                 $fileUser '/opt/picapport/.picapport/users/user/'.strtolower($request->request->get('mail-input')).'/'.strtolower($request->request->get('mail-input')).'.xml';
  315.                 $xmlUser = new XmlRender();
  316.                 $xmlUser->user_add($fileUser,strtolower($request->request->get('mail-input')),mb_convert_case($request->request->get('firstname-input'), MB_CASE_TITLE"UTF-8").' '.preg_replace(array('/\bVon\b/u','/\bDe\b/u'), array('von','de'), mb_convert_case($request->request->get('lastname-input'), MB_CASE_TITLE"UTF-8")),'B@tiF0rme5-'.strtolower($request->request->get('firstname-input')),$uuid);
  317.                 $role 'user';
  318.                 $userRole 'ROLE_'.mb_strtoupper($request->request->get('level-input'));
  319.                 if('ROLE_IT' == $userRole || 'ROLE_COMMUNICATION' == $userRole){
  320.                     $role 'publisher';
  321.                 }
  322.                 $fileGrpe '/opt/picapport/.picapport/users/roles/'.$role.'/'.$role.'.xml';
  323.                 $xmlUser->group_edit($fileGrpe,$role,strtolower($request->request->get('mail-input')));
  324.                 $pathToPicApportScript "/home/websites/scripts/picapport.sh";
  325.                 $process = new Process(['sh'$pathToPicApportScript]);
  326.                 $process->run();
  327.                 $userInsert->create_user($bdd,strtolower($request->request->get('mail-input')),strtolower($request->request->get('firstname-input')),preg_replace(array('/\bVon\b/u','/\bDe\b/u'), array('von','de'), mb_convert_case($request->request->get('lastname-input'), MB_CASE_TITLE"UTF-8")));
  328.                 if($vcard != '') {
  329.                     $addressbooks $bdd->prepare("SELECT id FROM addressbooks WHERE principaluri = 'principals/".strtolower($request->request->get('mail-input'))."' AND uri = 'annuaire'");
  330.                     $addressbooks->execute();
  331.                     $addressbooksResult $addressbooks->fetchAll(\PDO::FETCH_ASSOC);
  332.                     $addressbooksId $addressbooksResult[0]['id'];
  333.                     $sabreBackend->createCard($addressbooksIdstrtolower($request->request->get('mail-input'))."-".strtolower($request->request->get('mail-input')).'.vcf'$vcard);
  334.                 }
  335.                 $query $ldap->query($this->getParameter('app.ldap_service_dn'), '(|(uid=*))');
  336.                 $users $query->execute()->toArray();
  337.                 for($i=0;$i<count($users);$i++){
  338.                     if($users[$i]->getAttribute('mail')[0] != strtolower($request->request->get('mail-input'))){
  339.                         $usersRole 'ROLE_'.mb_strtoupper($users[$i]->getAttribute('ou')[0]);
  340.                         $roleUsers $entityManager->getRepository(Role::class)->findOneBy(array("role" => $usersRole));
  341.                         $phone '';
  342.                         $mobile '';
  343.                         $fax '';
  344.                         if($users[$i]->hasAttribute('telephoneNumber') ) $phone $users[$i]->getAttribute('telephoneNumber')[0];
  345.                         if($users[$i]->hasAttribute('mobile') ) $mobile $users[$i]->getAttribute('mobile')[0];
  346.                         if($users[$i]->hasAttribute('facsimileTelephoneNumber') ) $fax $users[$i]->getAttribute('facsimileTelephoneNumber')[0];
  347.                         /*if($vcard != ''){
  348.                             $sabreBackend->createCard($addressbooksId, strtolower($request->request->get('mail-input'))."-".$users[$i]->getAttribute('mail')[0].'.vcf', $vcard);
  349.                             //$sabreBackend->createCard($addressbooksId, $users[$i]->getAttribute('mail')[0]."-".strtolower($request->request->get('mail-input')).'.vcf', $vcard);
  350.                         } */
  351.                         $nickhandle preg_split('/@/',strtolower($users[$i]->getAttribute('mail')[0]));
  352.                         if($nickhandle[1] == 'batiformes.com' || $nickhandle[1] == 'scorev.fr'){
  353.                             $vcardCollaborator $userInsert->vcard_create(addslashes($users[$i]->getAttribute('givenName')[0]),addslashes($users[$i]->getAttribute('sn')[0]),addslashes($users[$i]->getAttribute('street')[0]),addslashes($users[$i]->getAttribute('l')[0]),$users[$i]->getAttribute('postalCode')[0],strtolower($users[$i]->getAttribute('mail')[0]),$mobile,$phone,$fax,addslashes($users[$i]->getAttribute('title')[0]),$roleUsers->getDescription(),$users[$i]->getAttribute('o')[0]);
  354.                         }
  355.                         else{
  356.                             $vcardCollaborator $userInsert->vcard_ext_create(addslashes($users[$i]->getAttribute('givenName')[0]),addslashes($users[$i]->getAttribute('sn')[0]),$request->request->get('mail-input'),strtolower($users[$i]->getAttribute('mail')[0]),$mobile,$phone,$fax,addslashes($users[$i]->getAttribute('title')[0]),$roleUsers->getDescription(),$users[$i]->getAttribute('o')[0]);
  357.                         }
  358.                         if($vcardCollaborator != '') {
  359.                             //$sabreBackend->createCard($addressbooksId, strtolower($request->request->get('mail-input'))."-".strtolower($request->request->get('mail-input')).'.vcf', $vcard);
  360.                             $addressbooksCollaborator $bdd->prepare("SELECT id FROM addressbooks WHERE principaluri = 'principals/".$users[$i]->getAttribute('mail')[0]."' AND uri = 'annuaire'");
  361.                             $addressbooksCollaborator->execute();
  362.                             $addressbooksCollaboratorResult $addressbooksCollaborator->fetchAll(\PDO::FETCH_ASSOC);
  363.                             $addressbooksIdCollaborator $addressbooksCollaboratorResult[0]['id'];
  364.                             $sabreBackend->createCard($addressbooksIdCollaborator$users[$i]->getAttribute('mail')[0]."-".strtolower($request->request->get('mail-input')).'.vcf'$vcard);
  365.                             $sabreBackend->createCard($addressbooksIdstrtolower($request->request->get('mail-input'))."-".$users[$i]->getAttribute('mail')[0].'.vcf'$vcardCollaborator);
  366.                             //$sabreBackend->createCard($addressbooksIdCollaborator, strtolower($request->request->get('mail-input'))."-".$users[$i]->getAttribute('mail')[0].'.vcf', $vcardCollaborator);
  367.                         }
  368.                     }
  369.                 }
  370.                 $message 'Compte créé.';
  371.             }
  372.             $bdd null;
  373.             $data = [
  374.                 'alert' => 'success',
  375.                 'message' => $message
  376.             ];
  377.             return $this->json(
  378.                 $data,
  379.                 headers: ['Content-Type' => 'application/json;charset=UTF-8']
  380.             );
  381.         } else {
  382.             $data = [
  383.                 'alert' => 'danger',
  384.                 'message' => 'Problème de CRSF.'
  385.             ];
  386.             return $this->json(
  387.                 $data,
  388.                 headers: ['Content-Type' => 'application/json;charset=UTF-8']
  389.             );
  390.         }
  391.     }
  392.     #[Route('/account/delete'name'account_delete')]
  393.     public function account_delete(Request $requestAdapter $ldapAdapterEntityManagerInterface $entityManager): Response
  394.     {
  395.         if (!$user $this->getUser()) {
  396.             return $this->redirectToRoute('login');
  397.         }
  398.         $submittedToken $request->request->get('token');
  399.         if ($this->isCsrfTokenValid('account-token'$submittedToken))
  400.         {
  401.             $share_entity $entityManager->getRepository(Share::class)->findBy(['owner' => $request->request->get('id')]);
  402.             for($i=0;$i<count($share_entity);$i++){
  403.                 $entityManager->getRepository(Share::class)->remove($share_entity[$i], true);
  404.             }
  405.             
  406.             /*$visio_entity = $entityManager->getRepository(Visio::class)->findBy(['user' => $request->request->get('id')]);
  407.             for($i=0;$i<count($visio_entity);$i++){
  408.                 $visio_entity->getRepository(Visio::class)->remove($visio_entity[$i], true);
  409.             }*/
  410.             
  411.             $filesystem = new Filesystem();
  412.             $filesystem->remove('/mnt/data/private/'.$request->request->get('id'));
  413.             $filesystem->remove('/opt/picapport/.picapport/users/user/'.$request->request->get('id'));
  414.             $ldap = new Ldap($ldapAdapter);
  415.             $ldap->bind($this->getParameter('app.ldap_service_user').','.$this->getParameter('app.ldap_service_dn'), $this->getParameter('app.ldap_service_password'));
  416.             $entryManager $ldap->getEntryManager();
  417.             $query $ldap->query($this->getParameter('app.ldap_service_dn'), '(&(uid='.$request->request->get('id').'))');
  418.             $result $query->execute()->toArray();
  419.             $entry $result[0];
  420.             $role 'user';
  421.             $userRole 'ROLE_'.mb_strtoupper($entry->getAttributes()['ou'][0]);
  422.             if('ROLE_IT' == $userRole || 'ROLE_COMMUNICATION' == $userRole){
  423.                 $role 'publisher';
  424.             }
  425.             $url '/opt/picapport/.picapport/users/roles/'.$role.'/'.$role.'.xml';
  426.             $xmlUser = new XmlRender();
  427.             $xmlUser->group_trash($url,$role,$request->request->get('id'));
  428.             $pathToPicApportScript "/home/websites/scripts/picapport.sh";
  429.             $process = new Process(['sh'$pathToPicApportScript]);
  430.             $process->run();
  431.             
  432.             $entryManager->remove($entry);
  433.             $query $ldap->query($this->getParameter('app.ldap_service_dn'), '(|(uid=*))');
  434.             $users $query->execute()->toArray();
  435.             $bdd $this->getDatabaseConnection();
  436.             $cardBackend = new PDO($bdd);
  437.             $userDel = new UserInsert();
  438.             for($i=0;$i<count($users);$i++){
  439.                 $addressbooks $bdd->prepare("SELECT id,synctoken FROM addressbooks WHERE principaluri = 'principals/".$users[$i]->getAttribute('mail')[0]."' AND uri = 'annuaire'");
  440.                 $addressbooks->execute();
  441.                 $addressbooksResult $addressbooks->fetchAll(\PDO::FETCH_ASSOC);
  442.                 if(isset($addressbooksResult[0]['id'])){
  443.                     $cardBackend->deleteCard($addressbooksResult[0]['id'], $users[$i]->getAttribute('mail')[0]."-".$request->request->get('id').".vcf");
  444.                 }
  445.             }
  446.             
  447.             $addressbooks $bdd->prepare("SELECT id FROM addressbooks WHERE principaluri = 'principals/".$request->request->get('id')."'");
  448.             $addressbooks->execute();
  449.             $addressbooksResult $addressbooks->fetchAll(\PDO::FETCH_ASSOC);
  450.             if(isset($addressbooksResult[0]['id'])){
  451.                 $cardBackend->deleteAddressBook($addressbooksResult[0]['id']);
  452.             }
  453.     
  454.             $userDel $bdd->prepare("DELETE FROM users WHERE username = '".$request->request->get('id')."'");
  455.             $userDel->execute();
  456.                 
  457.             $user_entity $entityManager->getRepository(User::class)->findBy(['username' => $request->request->get('id')]);
  458.             if(!empty($user_entity)){
  459.                 $entityManager->remove($user_entity[0], true);
  460.                 $entityManager->flush();
  461.             }
  462.             $bdd null;
  463.             $data = [
  464.                 'alert' => 'success',
  465.                 'message' => 'Le compte a été supprimé.'
  466.             ];
  467.             return $this->json(
  468.                 $data,
  469.                 headers: ['Content-Type' => 'application/json;charset=UTF-8']
  470.             );
  471.         }
  472.         else{
  473.             $data = [
  474.                 'alert' => 'error',
  475.                 'message' => 'Problème de CRSF.'
  476.             ];
  477.             return $this->json(
  478.                 $data,
  479.                 headers: ['Content-Type' => 'application/json;charset=UTF-8']
  480.             );
  481.         }
  482.     }
  483.     private function getDatabaseConnection(){ 
  484.         if ($this->pdo === null) {
  485.             $this->pdo = new \PDO('mysql:host=ma77924-001.dbaas.ovh.net:35815;dbname='.$this->getParameter('app.sabre_bdd'),'sabre','d4cvRR2bNvqsbmC68yPFJJa1ACw87DD');
  486.             $this->pdo->setAttribute(\PDO::ATTR_ERRMODE\PDO::ERRMODE_EXCEPTION);
  487.             $this->pdo->query("SET NAMES 'UTF8'"); 
  488.         }
  489.         return $this->pdo;
  490.     }    
  491. }