<?php
namespace App\Controller;
use App\Entity\Role;
use App\Entity\User;
use App\Entity\Share;
use App\Entity\Visio;
use Doctrine\ORM\EntityManagerInterface;
use App\Utils\EmailSignature;
use App\Utils\XmlRender;
use App\Utils\UserInsert;
use App\Service\UserSession;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Ldap\Adapter\ExtLdap\Adapter;
use Symfony\Component\Ldap\Entry;
use Symfony\Component\Ldap\Ldap;
use Symfony\Component\Process\Process;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Sabre\CardDAV\Backend\PDO;
use Sabre\CalDAV\Backend\PDO as CalPDO;
use Sabre\VObject\Reader;
use Sabre\VObject\Node;
use Sabre\VObject\Document;
use Sabre\VObject\Component\VCalendar;
use Sabre\VObject\Component\VCard;
class AccountController extends AbstractController
{
private $pdo;
#[Route('/account', name: 'account')]
public function account(EntityManagerInterface $entityManager, UserSession $userSession): Response
{
if (!$user = $this->getUser()) return $this->redirectToRoute('login');
else $userData = $userSession->getEntryFromSession();
$level = $entityManager->getRepository(Role::class)->findBy(array("type" => "level"), array('description' => 'ASC'));
$levels = [];
for($i=0;$i<count($level);$i++){
$tmp = [];
$lvl = preg_split('/_/',$level[$i]->getRole());
$tmp['value'] = strtolower($lvl[1]);
$tmp['label'] = $level[$i]->getDescription();
$levels[] = $tmp;
}
$site = $entityManager->getRepository(Role::class)->findBy(array("type" => "site"), array('role' => 'ASC'));
$sites = [];
for($i=0;$i<count($site);$i++){
$tmp = [];
$ste = preg_split('/_/',$site[$i]->getRole());
$tmp['value'] = $ste[1];
$tmp['label'] = $site[$i]->getDescription();
$sites[] = $tmp;
}
return $this->render('account/index.html.twig', [
'title_meta' => 'Comptes internes',
'page' => 'account',
'user' => $userData,
'level' => $levels,
'site' => $sites,
]);
}
#[Route('/account/data', name: 'account_data')]
public function account_data(Request $request, Adapter $ldapAdapter, EntityManagerInterface $entityManager): Response
{
if (!$user = $this->getUser()) {
return $this->redirectToRoute('login');
}
$submittedToken = $request->request->get('token');
if ($this->isCsrfTokenValid('account-token', $submittedToken))
{
$ldap = new Ldap($ldapAdapter);
$ldap->bind($this->getParameter('app.ldap_service_user').','.$this->getParameter('app.ldap_service_dn'), $this->getParameter('app.ldap_service_password'));
$query = $ldap->query($this->getParameter('app.ldap_service_dn'), '(|(uid=*))');
$users = $query->execute()->toArray();
$usersData = [];
for($i=0;$i<count($users);$i++){
$entry = $users[$i];
if($entry->hasAttribute('uid')){
$nickhandle = preg_split('/@/',$entry->getAttribute('mail')[0]);
$qrcode = $request->getScheme() . '://' . $request->getHttpHost() . '/qr-code/eps/' . $entry->getAttribute('labeledURI')[0] . '/vcard/' . preg_replace('/\./', '-', $nickhandle[0]) . '.html';
if($nickhandle[1] == 'batiformes.com' || $nickhandle[1] == 'scorev.fr'){
$usersRole = 'ROLE_'.mb_strtoupper($entry->getAttribute('ou')[0]);
$roleUsers = $entityManager->getRepository(Role::class)->findOneBy(array("role" => $usersRole));
$phone = ($entry->hasAttribute('telephoneNumber') ) ? $entry->getAttribute('telephoneNumber')[0] : '';
$mobile = ($entry->hasAttribute('mobile') ) ? $entry->getAttribute('mobile')[0] : '';
$fax = ($entry->hasAttribute('facsimileTelephoneNumber') ) ? $entry->getAttribute('facsimileTelephoneNumber')[0] : '';
$carddav = new UserInsert();
$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]);
$vcard = base64_encode($vcardData);
}
else{
$vcard = '';
}
$signature = new EmailSignature();
$signatureTxt = base64_encode($signature->signature_ldap($entry,$vcard));
$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"));
$tmp['firstname'] = mb_convert_case($entry->getAttribute('givenName')[0], MB_CASE_TITLE, "UTF-8");
if($entry->hasAttribute('telephoneNumber')) $tmp['phone'] = chunk_split($entry->getAttribute('telephoneNumber')[0], 2, ' ');
else $tmp['phone'] = '';
if($entry->hasAttribute('facsimileTelephoneNumber'))$tmp['fax'] = chunk_split($entry->getAttribute('facsimileTelephoneNumber')[0], 2, ' ');
else $tmp['fax'] = '';
if($entry->hasAttribute('mobile'))$tmp['mobile'] = chunk_split($entry->getAttribute('mobile')[0], 2, ' ');
else $tmp['mobile'] = '';
$tmp['mail'] = $entry->getAttribute('mail')[0];
$tmp['type'] = $entry->getAttribute('employeeType')[0];
$tmp['site'] = $entry->getAttribute('o')[0];
$tmp['category'] = mb_strtoupper( mb_substr( $entry->getAttribute('departmentNumber')[0], 0, 1 )) . mb_substr( $entry->getAttribute('departmentNumber')[0], 1 );
$tmp['btn'] = '<div class="dropdown pull-right">' .
'<a class="dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false"><i class="fas fa-ellipsis-v"></i></a>' .
'<div class="dropdown-menu dropdown-menu-end">' .
'<a class="dropdown-item edit" href="#" data-id="'.$entry->getAttribute('mail')[0].'"><i class="fas fa-pencil-alt"></i> Modifier</a>' .
'<a class="dropdown-item qrcode" href="'.$qrcode.'" download="qrcode.eps" download><i class="fas fa-qrcode"></i> QrCode</a>' .
'<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>' .
'<div class="dropdown-divider"></div>' .
'<a class="dropdown-item trash" href="#" data-id="'.$entry->getAttribute('mail')[0].'"><i class="fas fa-trash-alt"></i> Supprimer</a>' .
'</div>' .
'</div>';
$usersData[] = $tmp;
}
}
usort($usersData, fn($a, $b) => $a['lastname'] <=> $b['lastname'] ?: $a['lastname'] <=> $b['lastname'] );
$data = $usersData;
return $this->json(
$data,
headers: ['Content-Type' => 'application/json;charset=UTF-8']
);
} else {
$data = [
'alert' => 'error',
'message' => 'Problème de CRSF.'
];
return $this->json(
$data,
headers: ['Content-Type' => 'application/json;charset=UTF-8']
);
}
}
#[Route('/account/edit', name: 'account_edit')]
public function account_edit(Request $request, Adapter $ldapAdapter): Response
{
if (!$user = $this->getUser()) {
return $this->redirectToRoute('login');
}
$submittedToken = $request->request->get('token');
if ($this->isCsrfTokenValid('account-token', $submittedToken))
{
if($request->request->get('id') != ''){
$ldap = new Ldap($ldapAdapter);
$ldap->bind($this->getParameter('app.ldap_service_user').','.$this->getParameter('app.ldap_service_dn'), $this->getParameter('app.ldap_service_password'));
$query = $ldap->query($this->getParameter('app.ldap_service_dn'), '(|(uid='.$request->request->get('id').'*))');
$users = $query->execute()->toArray();
$usersData = [];
for($i=0;$i<count($users);$i++){
$entry = $users[$i];
if($entry->hasAttribute('uid')){
$tmp['lastname'] = $entry->getAttribute('sn')[0];
$tmp['firstname'] = $entry->getAttribute('givenName')[0];
$tmp['phone'] = ($entry->hasAttribute('telephoneNumber') ? $entry->getAttribute('telephoneNumber')[0] : '');
$tmp['fax'] = ($entry->hasAttribute('facsimileTelephoneNumber') ? $entry->getAttribute('facsimileTelephoneNumber')[0] : '');
$tmp['mobile'] = ($entry->hasAttribute('mobile') ? $entry->getAttribute('mobile')[0] : '');
$tmp['mail'] = $entry->getAttribute('mail')[0];
$tmp['site'] = preg_replace('/\s+/', '', $entry->getAttribute('o')[0]);
$tmp['level'] = $entry->getAttribute('ou')[0];
$tmp['function'] = $entry->getAttribute('title')[0];
$tmp['contract'] = $entry->getAttribute('employeeType')[0];
$tmp['category'] = mb_strtoupper( mb_substr( $entry->getAttribute('departmentNumber')[0], 0, 1 )) . mb_substr( $entry->getAttribute('departmentNumber')[0], 1 );
$usersData[] = $tmp;
}
}
$data = $usersData;
return $this->json(
$data,
headers: ['Content-Type' => 'application/json;charset=UTF-8']
);
}
} else {
$data = [
'alert' => 'error',
'message' => 'Problème de CRSF.'
];
return $this->json(
$data,
headers: ['Content-Type' => 'application/json;charset=UTF-8']
);
}
}
#[Route('/account/add', name: 'account_add')]
public function account_add(Request $request, Adapter $ldapAdapter, EntityManagerInterface $entityManager): Response
{
if (!$user = $this->getUser()) {
return $this->redirectToRoute('login');
}
$submittedToken = $request->request->get('add-token');
if ($this->isCsrfTokenValid('add-token', $submittedToken))
{
$direction = $entityManager->getRepository(Role::class)->findOneBy(array("role" => 'ROLE_'.$request->request->get('site-input')));
$role = $entityManager->getRepository(Role::class)->findOneBy(array("role" => 'ROLE_'.strtoupper($request->request->get('level-input'))));
$bdd = $this->getDatabaseConnection();
$sabreBackend = new PDO($bdd);
$userInsert = new UserInsert();
$nickhandle = preg_split('/@/',$request->request->get('mail-input'));
$vcard = '';
if($nickhandle[1] == 'batiformes.com' || $nickhandle[1] == 'scorev.fr'){
$phone = ($request->request->get('phone-input')) ? preg_replace('/-/','',$request->request->get('phone-input')) : '';
$mobile = ($request->request->get('mobile-input')) ? preg_replace('/-/','',$request->request->get('mobile-input')) : '';
$fax = ($request->request->get('fax-input')) ? preg_replace('/-/','',$request->request->get('fax-input')) : '';
$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'));
}
else{
$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');
}
$ldap = new Ldap($ldapAdapter);
$ldap->bind($this->getParameter('app.ldap_service_user').','.$this->getParameter('app.ldap_service_dn'), $this->getParameter('app.ldap_service_password'));
$entryManager = $ldap->getEntryManager();
if($request->request->get('account-id') != ''){
$query = $ldap->query($this->getParameter('app.ldap_service_dn'), '(&(uid='.$request->request->get('account-id').'))');
$result = $query->execute()->toArray();
$entry = $result[0];
$gid = $entry->getAttributes()['ou'][0];
if($gid == $request->request->get('level-input')){
$gidNumber = $entry->getAttributes()['gidNumber'][0];
}
else{
$queryGroup = $ldap->query($this->getParameter('app.ldap_service_dn'), '(&(cn='.$request->request->get('level-input').'))');
$resultGroup = $queryGroup->execute()->toArray();
$group = $resultGroup[0];
$gidNumber = $group->getAttributes()['gidNumber'][0];
$gid = $request->request->get('level-input');
}
$entry->setAttribute('givenName', [strtolower($request->request->get('firstname-input'))]);
$entry->setAttribute('sn', [strtolower($request->request->get('lastname-input'))]);
$entry->setAttribute('cn', [strtolower($request->request->get('lastname-input')).' '.strtolower($request->request->get('firstname-input'))]);
if($request->request->get('phone-input') == '' && $entry->hasAttribute('telephoneNumber') ) $entry->setAttribute('telephoneNumber', [preg_replace('/-/','',$request->request->get('phone-input'))]);
if($request->request->get('phone-input') != '') $entry->setAttribute('telephoneNumber', [preg_replace('/-/','',$request->request->get('phone-input'))]);
if($request->request->get('mobile-input') == '' && $entry->hasAttribute('mobile') ) $entry->setAttribute('mobile', [preg_replace('/-/','',$request->request->get('mobile-input'))]);
if($request->request->get('mobile-input') != '') $entry->setAttribute('mobile', [preg_replace('/-/','',$request->request->get('mobile-input'))]);
if($request->request->get('fax-input') == '' && $entry->hasAttribute('facsimileTelephoneNumber') ) $entry->setAttribute('facsimileTelephoneNumber', [preg_replace('/-/','',$request->request->get('fax-input'))]);
if($request->request->get('fax-input') != '') $entry->setAttribute('facsimileTelephoneNumber', [preg_replace('/-/','',$request->request->get('fax-input'))]);
$entry->setAttribute('street', [$direction->getData()['direction']]);
$entry->setAttribute('postalCode', [$direction->getData()['zipcode']]);
$entry->setAttribute('l', [$direction->getData()['city']]);
$entry->setAttribute('employeeType', [$request->request->get('contract-input')]);
$entry->setAttribute('departmentNumber', [$role->getDescription()]);
$entry->setAttribute('o', [$direction->getDescription()]);
$entry->setAttribute('title', [strtolower($request->request->get('function-input'))]);
$entry->setAttribute('gidNumber', [$gidNumber]);
$entry->setAttribute('ou', [$gid]);
$entry->setAttribute('st', [$direction->getData()['state']]);
$entry->setAttribute('postalAddress', [$direction->getData()['gmap']]);
$entry->setAttribute('registeredAddress', [$direction->getData()['lat'].':'.$direction->getData()['lng']]);
$entryManager->update($entry);
if($vcard != '') {
$query = $ldap->query($this->getParameter('app.ldap_service_dn'), '(|(uid=*))');
$users = $query->execute()->toArray();
for($i=0;$i<count($users);$i++){
$addressbooks = $bdd->prepare("SELECT id FROM addressbooks WHERE principaluri = 'principals/".$users[$i]->getAttribute('mail')[0]."' AND uri = 'annuaire'");
$addressbooks->execute();
$addressbooksResult = $addressbooks->fetchAll(\PDO::FETCH_ASSOC);
$addressbooksId = $addressbooksResult[0]['id'];
$sabreBackend->updateCard($addressbooksId, $users[$i]->getAttribute('mail')[0].'-'.$request->request->get('account-id').'.vcf', $vcard);
}
}
$message = 'Compte updaté.';
}
else{
$queryGroup = $ldap->query($this->getParameter('app.ldap_service_dn'), '(&(cn='.$request->request->get('level-input').'))');
$result = $queryGroup->execute()->toArray();
$group = $result[0];
$gidNumber = $group->getAttributes()['gidNumber'][0];
$uidnumber = mt_rand('10000', '30000');
$uuid = strtoupper(substr(bin2hex(random_bytes(32)), 0, 32));
$userpassword = '{SHA}' . base64_encode(sha1( 'B@tiF0rme5-'.strtolower($request->request->get('firstname-input')), TRUE ));
$entry = new Entry('uid='.strtolower($request->request->get('mail-input')).',ou=users,dc=batiformes,dc=com', [
'objectClass' => [
'0' => 'posixAccount',
'1' => 'inetOrgPerson'
],
'uid' => [strtolower($request->request->get('mail-input'))],
'cn' => [strtolower($request->request->get('lastname-input')).' '.strtolower($request->request->get('firstname-input'))],
'uidnumber' => [$uidnumber],
'gidNumber' => [$gidNumber],
'userPassword' => [$userpassword],
'loginShell' => ['/bin/false'],
'homeDirectory' => ['/mnt/data/private/'.strtolower($request->request->get('mail-input'))],
'ou' => [$request->request->get('level-input')],
'employeeNumber' => [$uuid],
'departmentNumber' => [$role->getDescription()],
'labeledURI' => [$direction->getData()['url']],
'sn' => [strtolower($request->request->get('lastname-input'))],
'givenName' => [strtolower($request->request->get('firstname-input'))],
'employeeType' => [$request->request->get('contract-input')],
'o' => [$direction->getDescription()],
'title' => [strtolower($request->request->get('function-input'))],
'street' => [$direction->getData()['direction']],
'st' => [$direction->getData()['state']],
'postalAddress' => [$direction->getData()['gmap']],
'registeredAddress' => [$direction->getData()['lat'].':'.$direction->getData()['lng']],
'postalCode' => [$direction->getData()['zipcode']],
'l' => [$direction->getData()['city']],
'mail' => [strtolower($request->request->get('mail-input'))],
]);
if($request->request->get('phone-input') != '') $entry->setAttribute('telephoneNumber', [preg_replace('/-/','',$request->request->get('phone-input'))]);
if($request->request->get('mobile-input') != '') $entry->setAttribute('mobile', [preg_replace('/-/','',$request->request->get('mobile-input'))]);
if($request->request->get('fax-input') != '') $entry->setAttribute('facsimileTelephoneNumber', [preg_replace('/-/','',$request->request->get('fax-input'))]);
$entryManager->add($entry);
$filesystem = new Filesystem();
$filesystem->mkdir('/mnt/data/private/'.strtolower($request->request->get('mail-input')));
$filesystem->mkdir('/opt/picapport/.picapport/users/user/'.strtolower($request->request->get('mail-input')));
$fileUser = '/opt/picapport/.picapport/users/user/'.strtolower($request->request->get('mail-input')).'/'.strtolower($request->request->get('mail-input')).'.xml';
$xmlUser = new XmlRender();
$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);
$role = 'user';
$userRole = 'ROLE_'.mb_strtoupper($request->request->get('level-input'));
if('ROLE_IT' == $userRole || 'ROLE_COMMUNICATION' == $userRole){
$role = 'publisher';
}
$fileGrpe = '/opt/picapport/.picapport/users/roles/'.$role.'/'.$role.'.xml';
$xmlUser->group_edit($fileGrpe,$role,strtolower($request->request->get('mail-input')));
$pathToPicApportScript = "/home/websites/scripts/picapport.sh";
$process = new Process(['sh', $pathToPicApportScript]);
$process->run();
$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")));
if($vcard != '') {
$addressbooks = $bdd->prepare("SELECT id FROM addressbooks WHERE principaluri = 'principals/".strtolower($request->request->get('mail-input'))."' AND uri = 'annuaire'");
$addressbooks->execute();
$addressbooksResult = $addressbooks->fetchAll(\PDO::FETCH_ASSOC);
$addressbooksId = $addressbooksResult[0]['id'];
$sabreBackend->createCard($addressbooksId, strtolower($request->request->get('mail-input'))."-".strtolower($request->request->get('mail-input')).'.vcf', $vcard);
}
$query = $ldap->query($this->getParameter('app.ldap_service_dn'), '(|(uid=*))');
$users = $query->execute()->toArray();
for($i=0;$i<count($users);$i++){
if($users[$i]->getAttribute('mail')[0] != strtolower($request->request->get('mail-input'))){
$usersRole = 'ROLE_'.mb_strtoupper($users[$i]->getAttribute('ou')[0]);
$roleUsers = $entityManager->getRepository(Role::class)->findOneBy(array("role" => $usersRole));
$phone = '';
$mobile = '';
$fax = '';
if($users[$i]->hasAttribute('telephoneNumber') ) $phone = $users[$i]->getAttribute('telephoneNumber')[0];
if($users[$i]->hasAttribute('mobile') ) $mobile = $users[$i]->getAttribute('mobile')[0];
if($users[$i]->hasAttribute('facsimileTelephoneNumber') ) $fax = $users[$i]->getAttribute('facsimileTelephoneNumber')[0];
/*if($vcard != ''){
$sabreBackend->createCard($addressbooksId, strtolower($request->request->get('mail-input'))."-".$users[$i]->getAttribute('mail')[0].'.vcf', $vcard);
//$sabreBackend->createCard($addressbooksId, $users[$i]->getAttribute('mail')[0]."-".strtolower($request->request->get('mail-input')).'.vcf', $vcard);
} */
$nickhandle = preg_split('/@/',strtolower($users[$i]->getAttribute('mail')[0]));
if($nickhandle[1] == 'batiformes.com' || $nickhandle[1] == 'scorev.fr'){
$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]);
}
else{
$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]);
}
if($vcardCollaborator != '') {
//$sabreBackend->createCard($addressbooksId, strtolower($request->request->get('mail-input'))."-".strtolower($request->request->get('mail-input')).'.vcf', $vcard);
$addressbooksCollaborator = $bdd->prepare("SELECT id FROM addressbooks WHERE principaluri = 'principals/".$users[$i]->getAttribute('mail')[0]."' AND uri = 'annuaire'");
$addressbooksCollaborator->execute();
$addressbooksCollaboratorResult = $addressbooksCollaborator->fetchAll(\PDO::FETCH_ASSOC);
$addressbooksIdCollaborator = $addressbooksCollaboratorResult[0]['id'];
$sabreBackend->createCard($addressbooksIdCollaborator, $users[$i]->getAttribute('mail')[0]."-".strtolower($request->request->get('mail-input')).'.vcf', $vcard);
$sabreBackend->createCard($addressbooksId, strtolower($request->request->get('mail-input'))."-".$users[$i]->getAttribute('mail')[0].'.vcf', $vcardCollaborator);
//$sabreBackend->createCard($addressbooksIdCollaborator, strtolower($request->request->get('mail-input'))."-".$users[$i]->getAttribute('mail')[0].'.vcf', $vcardCollaborator);
}
}
}
$message = 'Compte créé.';
}
$bdd = null;
$data = [
'alert' => 'success',
'message' => $message
];
return $this->json(
$data,
headers: ['Content-Type' => 'application/json;charset=UTF-8']
);
} else {
$data = [
'alert' => 'danger',
'message' => 'Problème de CRSF.'
];
return $this->json(
$data,
headers: ['Content-Type' => 'application/json;charset=UTF-8']
);
}
}
#[Route('/account/delete', name: 'account_delete')]
public function account_delete(Request $request, Adapter $ldapAdapter, EntityManagerInterface $entityManager): Response
{
if (!$user = $this->getUser()) {
return $this->redirectToRoute('login');
}
$submittedToken = $request->request->get('token');
if ($this->isCsrfTokenValid('account-token', $submittedToken))
{
$share_entity = $entityManager->getRepository(Share::class)->findBy(['owner' => $request->request->get('id')]);
for($i=0;$i<count($share_entity);$i++){
$entityManager->getRepository(Share::class)->remove($share_entity[$i], true);
}
/*$visio_entity = $entityManager->getRepository(Visio::class)->findBy(['user' => $request->request->get('id')]);
for($i=0;$i<count($visio_entity);$i++){
$visio_entity->getRepository(Visio::class)->remove($visio_entity[$i], true);
}*/
$filesystem = new Filesystem();
$filesystem->remove('/mnt/data/private/'.$request->request->get('id'));
$filesystem->remove('/opt/picapport/.picapport/users/user/'.$request->request->get('id'));
$ldap = new Ldap($ldapAdapter);
$ldap->bind($this->getParameter('app.ldap_service_user').','.$this->getParameter('app.ldap_service_dn'), $this->getParameter('app.ldap_service_password'));
$entryManager = $ldap->getEntryManager();
$query = $ldap->query($this->getParameter('app.ldap_service_dn'), '(&(uid='.$request->request->get('id').'))');
$result = $query->execute()->toArray();
$entry = $result[0];
$role = 'user';
$userRole = 'ROLE_'.mb_strtoupper($entry->getAttributes()['ou'][0]);
if('ROLE_IT' == $userRole || 'ROLE_COMMUNICATION' == $userRole){
$role = 'publisher';
}
$url = '/opt/picapport/.picapport/users/roles/'.$role.'/'.$role.'.xml';
$xmlUser = new XmlRender();
$xmlUser->group_trash($url,$role,$request->request->get('id'));
$pathToPicApportScript = "/home/websites/scripts/picapport.sh";
$process = new Process(['sh', $pathToPicApportScript]);
$process->run();
$entryManager->remove($entry);
$query = $ldap->query($this->getParameter('app.ldap_service_dn'), '(|(uid=*))');
$users = $query->execute()->toArray();
$bdd = $this->getDatabaseConnection();
$cardBackend = new PDO($bdd);
$userDel = new UserInsert();
for($i=0;$i<count($users);$i++){
$addressbooks = $bdd->prepare("SELECT id,synctoken FROM addressbooks WHERE principaluri = 'principals/".$users[$i]->getAttribute('mail')[0]."' AND uri = 'annuaire'");
$addressbooks->execute();
$addressbooksResult = $addressbooks->fetchAll(\PDO::FETCH_ASSOC);
if(isset($addressbooksResult[0]['id'])){
$cardBackend->deleteCard($addressbooksResult[0]['id'], $users[$i]->getAttribute('mail')[0]."-".$request->request->get('id').".vcf");
}
}
$addressbooks = $bdd->prepare("SELECT id FROM addressbooks WHERE principaluri = 'principals/".$request->request->get('id')."'");
$addressbooks->execute();
$addressbooksResult = $addressbooks->fetchAll(\PDO::FETCH_ASSOC);
if(isset($addressbooksResult[0]['id'])){
$cardBackend->deleteAddressBook($addressbooksResult[0]['id']);
}
$userDel = $bdd->prepare("DELETE FROM users WHERE username = '".$request->request->get('id')."'");
$userDel->execute();
$user_entity = $entityManager->getRepository(User::class)->findBy(['username' => $request->request->get('id')]);
if(!empty($user_entity)){
$entityManager->remove($user_entity[0], true);
$entityManager->flush();
}
$bdd = null;
$data = [
'alert' => 'success',
'message' => 'Le compte a été supprimé.'
];
return $this->json(
$data,
headers: ['Content-Type' => 'application/json;charset=UTF-8']
);
}
else{
$data = [
'alert' => 'error',
'message' => 'Problème de CRSF.'
];
return $this->json(
$data,
headers: ['Content-Type' => 'application/json;charset=UTF-8']
);
}
}
private function getDatabaseConnection(){
if ($this->pdo === null) {
$this->pdo = new \PDO('mysql:host=ma77924-001.dbaas.ovh.net:35815;dbname='.$this->getParameter('app.sabre_bdd'),'sabre','d4cvRR2bNvqsbmC68yPFJJa1ACw87DD');
$this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
$this->pdo->query("SET NAMES 'UTF8'");
}
return $this->pdo;
}
}