<?php
namespace App\Controller\FilesUsersManage;
use App\Entity\User;
use App\Entity\FilesUser;
use App\Form\FilesUserType;
use App\Repository\FilesUserRepository;
use App\Repository\UserRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use DateTime;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use App\ExternalService\UtilsManageFiles\FileUtils;
class AdminFilesUsersController extends AbstractController
{
/**
* @Route("flies-users-manage/home-admin", name="files_users_manage_home_admin")
*/
public function index(UserRepository $userRepository)
{
// check if user is connected
if(!$this->getUser()) {return $this->redirectToRoute("logout");}
$filesUser=$this->getUser()->getFilesUsers();
$users = $userRepository->findAll();
//dd($users);
$usersFiles=array();
foreach($users as $user) {
$tab=$user->getFilesUsers();
array_push($usersFiles,array('user'=>$user,'files'=>$tab));
}
$roles=$this->getUser()->getRoles();
if (in_array("ROLE_DIRECTOR", $roles) OR in_array("ROLE_ADMIN", $roles)){
//dd($roles);
return $this->render('flies_users_manage/admin_files_users/admin_display_files_all_users.html.twig', [
'users'=>$users,
'usersFiles'=>$usersFiles,
]);
}
if (in_array("ROLE_EMPLOYEE", $roles)){
return $this->render('flies_users_manage/files_user/display_files_user.html.twig', [
'user'=>$this->getUser(),
'filesUser'=>$filesUser,
]);
}
// empty template
return $this->render('flies_users_manage/index.html.twig', [
//'users'=>$users,
//'usersFiles'=>$usersFiles,
]);
}
/******************ajax**************************************/
/**
* @Route("/ajax-admin-files-users/add-documents-list-users-choice", name="ajax_add_documents_list_user_choice")
*/
public function addDocForUserInListAjax(Request $request, EntityManagerInterface $entityManager)
{
$document = new FilesUser();
$document->setUploadAt(new DateTime());
$form = $this->createForm(FilesUserType::class, $document);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$data = $form->getData();
$uploadedFile = $form['FileName']->getData();
$file_name_original=$uploadedFile->getClientOriginalName();
$user=$form["User"]->getData();
$id=$user->getId();
$concat=$id."-".date("YmdHms"); //concatenation id .datetimenow to rename
$newFilename = $concat."-".$file_name_original;
//dd($newFilename);
$document->setFileName($newFilename);
$folder=$form["Folder"]->getData();
// destination and upload
$destination = $this->getParameter('kernel.project_dir')."/public/documents/filesUsers/".$folder;;
$uploadedFile->move($destination,$newFilename);
$entityManager->persist($document);
$entityManager->flush();
$userName=$user->getLastName().' '.$user->getFirstName();
$this->addFlash('success','The document /<b> '. $file_name_original.'</b>/ has been successfully added to /<b>'.$folder.'</b>/ for /<b>'.$userName.'</b>');
//return $this->redirect($request->headers->get('referer')); To seeeeee
return $this->redirectToRoute('files_users_manage_home_admin',['myuser'=>$id]);
}
return $this->render('flies_users_manage/admin_files_users/ajax_add_documents_list_user_choice.html.twig', [
'form'=>$form->createView(),
//'user'=>$user,
]);
}
/******************************** AJAX widh parameter****************/
/**
* @Route("/admin-files-users/ajax-add-multi-documents-for-user-{id}", name="ajax_add_multi_documents_for_user_parameter")
*/
public function addMultiDocsForUserAsParameterAjax(User $user, Request $request, EntityManagerInterface $entityManager,UserRepository $userRepository)
{
$form = $this->createForm(FilesUserType::class);
$form->remove('User');
$form->remove('FileName');
$form->remove('info');
$form->remove('isPrivate');
$form->remove('Folder');
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$total_count = count($_FILES['upload']['name']);
$files=$_FILES['upload'];
$folders=$_POST['folder'];
$infos=$_POST['info'];
for( $i=0 ; $i < $total_count ; $i++ ) {
$tmpFilePath = $files['tmp_name'][$i];
$file_name_original=$files['name'][$i];
$folder=$folders[$i];
//$folder='test';
$info=$infos[$i];
$id= $user->getId(); //concatenation id .datetimenow to rename
$concat=$id."-".date("YmdHms");
$newFilename = $concat."-".$file_name_original;
$destination = $this->getParameter('kernel.project_dir')."/public/documents/filesUsers/".$folder.'/'.$newFilename;
$document = new FilesUser();
$document->setUser($user);
$document->setFileName($newFilename);
$document->setFolder($folder);
$document->setInfo($info);
$document->setIsPrivate(true);
$document->setUploadAt(new DateTime());
if(move_uploaded_file($tmpFilePath, $destination)) {
$entityManager->persist($document);
}
}
$entityManager->flush();
$userName=$user->getLastName().' '.$user->getFirstName();
$this->addFlash('success','All documents have been successfully added for /<b>'.$userName.'</b>');
//return $this->redirect($request->headers->get('referer')); To seeeeee
return $this->redirectToRoute('files_users_manage_home_admin',['myuser'=>$id]);
}
return $this->render('flies_users_manage/admin_files_users/ajax_add_multi_documents_for_user_parameter.html.twig', [
'form'=>$form->createView(),
'user'=>$user,
]);
}
/**
* @Route("/admin-files-users/ajax-add-documents-for-user-{id}", name="ajax_add_documents_for_user_parameter")
*/
public function addDocForUserAsParameterAjax(User $user, Request $request, EntityManagerInterface $entityManager,UserRepository $userRepository)
{
//if($id == '') { $user=$this->getUser();}
$document = new FilesUser();
$document->setUser($user);
$document->setUploadAt(new DateTime());
$form = $this->createForm(FilesUserType::class, $document);
$form->remove('User');
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$data = $form->getData();
$uploadedFile = $form['FileName']->getData();
$file_name_original=$uploadedFile->getClientOriginalName();
$id=$user->getId();
$concat=$id."-".date("YmdHms"); //concatenation id .datetimenow to rename
$newFilename = $concat."-".$file_name_original;
//dd($newFilename);
$document->setFileName($newFilename);
$folder=$form["Folder"]->getData();
// destination and upload
$destination = $this->getParameter('kernel.project_dir')."/public/documents/filesUsers/".$folder;;
$uploadedFile->move($destination,$newFilename);
$entityManager->persist($document);
$entityManager->flush();
$userName=$user->getLastName().' '.$user->getFirstName();
$this->addFlash('success','The document /<b> '. $file_name_original.'</b>/ has been successfully added to /<b>'.$folder.'</b>/ for /<b>'.$userName.'</b>');
//return $this->redirect($request->headers->get('referer')); To seeeeee
return $this->redirectToRoute('files_users_manage_home_admin',['myuser'=>$id]);
}
return $this->render('flies_users_manage/admin_files_users/ajax_add_documents_for_user_parameter.html.twig', [
'form'=>$form->createView(),
'user'=>$user,
]);
}
/**
* @Route("/admin-files-users/ajax-rename-document-parameter-{id}", name="ajax_rename_document_parameter")
*/
public function renameDocAsParameterAjax(FilesUser $filesUser, Request $request, EntityManagerInterface $entityManager)
{
$folder=$filesUser->getFolder();
$fileName=$filesUser->getFileName();
$user=$filesUser->getUser();
$form = $this->createForm(FilesUserType::class,$filesUser);
$form->remove('User');
$form->remove('Folder');
$form->remove('info');
$form->remove('isPrivate');
$form->remove('FileName');
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$newName = $request->request->get('newName');
$folder=$filesUser->getFolder();
$fileName=$filesUser->getFileName();
$fileNameParts = explode('.', $fileName);
$extension= end($fileNameParts);
$id=$user->getId();
$concat=$id."-".date("YmdHms"); //concatenation id .datetimenow to rename
$newFileName = $concat."-".$newName.'.'.$extension;
$filesUser->setFileName($newFileName);
$source = $this->getParameter('kernel.project_dir')."/public/documents/filesUsers/".$folder."/".$fileName;
$destination = $this->getParameter('kernel.project_dir')."/public/documents/filesUsers/".$folder."/".$newFileName;
rename($source, $destination);
$filesUser->setUploadAt(new DateTime());
$filesUser->setFileName($newFileName);
$entityManager->flush();
$userName=$user->getLastName().' '.$user->getFirstName();
$this->addFlash('success','The document has been successfully modified to /<b>'.$folder.'</b>/ for /<b>'.$newName.'.'.$extension.'</b>');
return $this->redirectToRoute('files_users_manage_home_admin',['myuser'=>$id]);
}
return $this->render('flies_users_manage/admin_files_users/ajax_rename_document_parameter.html.twig', [
'form'=>$form->createView(),
'filesUser'=>$filesUser,
]);
}
/**
* @Route("/admin-files/ajax-delete-document-user{id}",name="ajax_delete_document_user")
*/
public function deleteDocumentForUserAjax(FilesUser $fileUser, EntityManagerInterface $entityManager, Request $request)
{
$folder=$fileUser->getFolder();
$fileName=$fileUser->getFileName();
$user=$fileUser->getUser();
$id=$user->getId();
$entityManager->remove($fileUser);
$entityManager->flush();
$source = $this->getParameter('kernel.project_dir')."/public/documents/filesUsers/".$folder."/".$fileName;
$destination = $this->getParameter('kernel.project_dir')."/public/documents/filesUsers/Corbeille/".$fileName;
rename($source, $destination);
return $this->render('flies_users_manage/admin_files_users/ajax_delete_document_user.html.twig', [
]);
}
/**
* @Route("/admin-files/delete-document-user{id}",name="delete_document_user")
*/
public function deleteDocumentUser(FilesUser $fileUser, EntityManagerInterface $entityManager)
{
$entityManager->remove($fileUser);
$entityManager->flush();
$this->addFlash('success','Document deleted with success');
return $this->redirectToRoute('files_users_manage_home_admin',[]);
}
/**
* @Route("/admin-files-users/ajax-edit-info-document-parameter-{id}", name="ajax_edit_info_document_parameter")
*/
public function editInfoDocAsParameterAjax(FilesUser $filesUser, Request $request, EntityManagerInterface $entityManager,UserRepository $userRepository)
{
$form = $this->createForm(FilesUserType::class,$filesUser);
$form->remove('User');
$form->remove('FileName');
$form->remove('Folder');
$form->remove('isPrivate');
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$info=$form["info"]->getData();
$filesUser->setInfo($info);
$filesUser->setUploadAt(new DateTime());
$entityManager->flush();
$user=$filesUser->getUser();
$id=$user->getId();
$userName=$user->getLastName().' '.$user->getFirstName();
$this->addFlash('success','Info document /<b> '. $info.'</b>/ has been successfully saved for /<b>'.$userName.'</b>');
return $this->redirectToRoute('files_users_manage_home_admin',['myuser'=>$id]);
}
return $this->render('flies_users_manage/admin_files_users/ajax_edit_info_document_parameter.html.twig', [
'form'=>$form->createView(),
'filesUser'=>$filesUser,
]);
}
/**
* @Route("/admin-files-users/ajax-move-document-parameter-{id}", name="ajax_move_document_parameter")
*/
public function moveDocAsParameterAjax(FilesUser $filesUser, Request $request, EntityManagerInterface $entityManager)
{
$folder=$filesUser->getFolder();
$fileName=$filesUser->getFileName();
$form = $this->createForm(FilesUserType::class,$filesUser);
$form->remove('User');
$form->remove('FileName');
$form->remove('info');
$form->remove('isPrivate');
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$newFolder=$form["Folder"]->getData();
$source = $this->getParameter('kernel.project_dir')."/public/documents/filesUsers/".$folder."/".$fileName;
$destination = $this->getParameter('kernel.project_dir')."/public/documents/filesUsers/".$newFolder."/".$fileName;
rename($source, $destination);
$filesUser->setUploadAt(new DateTime());
$filesUser->setFolder($newFolder);
$entityManager->flush();
$user=$filesUser->getUser();
$id=$user->getId();
$userName=$user->getLastName().' '.$user->getFirstName();
$this->addFlash('success','Info document / has been successfully saved for /<b>'.$userName.'</b>');
//return $this->redirect($request->headers->get('referer')); To seeeeee
return $this->redirectToRoute('files_users_manage_home_admin',['myuser'=>$id]);
}
return $this->render('flies_users_manage/admin_files_users/ajax_move_document_parameter.html.twig', [
'form'=>$form->createView(),
'filesUser'=>$filesUser,
]);
}
/**
* @Route("flies-users-manage/show-users-files", name="show_users_files")
*/
public function showUserFolder(UserRepository $userRepository,FilesUserRepository $filesUserRepository)
{
// check if user is connected
// if(!$this->getUser()) {return $this->redirectToRoute("logout");}
$users=$userRepository->findAll();
$allFiles=$filesUserRepository->findAll();
$folders=FileUtils::getFoldersInListFiles($allFiles);
$usersFiles=array();
foreach ($users as $user) {
$userFiles=$user->getFilesUsers();
$arr_files=FileUtils::getFilesForListFoldersInListFiles($folders,$userFiles);
array_push($usersFiles,array('user'=>$user,'datas'=>$arr_files));
}
return $this->render('flies_users_manage/admin_files_users/show_users_files.html.twig', [
'usersFiles'=>$usersFiles,
]);
}
/**
* @Route("/admin-files-users/add-documents-for-user-{id}", name="add_documents_for_user_parameter")
*/
public function addDocForUserAsParameter(User $user, Request $request, EntityManagerInterface $entityManager,UserRepository $userRepository)
{
//if($id == '') { $user=$this->getUser();}
$document = new FilesUser();
$document->setUser($user);
$document->setUploadAt(new DateTime());
$form = $this->createForm(FilesUserType::class, $document);
$form->remove('User');
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$data = $form->getData();
$uploadedFile = $form['FileName']->getData();
$file_name_original=$uploadedFile->getClientOriginalName();
$id=$user->getId();
$concat=$id."-".date("YmdHms"); //concatenation id .datetimenow to rename
$newFilename = $concat."-".$file_name_original;
//dd($newFilename);
$document->setFileName($newFilename);
$folder=$form["Folder"]->getData();
// destination and upload
$destination = $this->getParameter('kernel.project_dir')."/public/documents/filesUsers/".$folder;;
$uploadedFile->move($destination,$newFilename);
$entityManager->persist($document);
$entityManager->flush();
$userName=$user->getLastName().' '.$user->getFirstName();
$this->addFlash('success','The document /<b> '. $file_name_original.'</b>/ has been successfully added to /<b>'.$folder.'</b>/ for /<b>'.$userName.'</b>');
//return $this->redirect($request->headers->get('referer')); To seeeeee
return $this->redirectToRoute('files_users_manage_home_admin',['myuser'=>$id]);
}
return $this->render('flies_users_manage/admin_files_users/add_documents_for_user_parameter.html.twig', [
'form'=>$form->createView(),
'user'=>$user,
]);
}
/********************************************************/
/**
* @Route("/admin-files-users/add-documents-list-users-choice", name="add_documents_list_user_choice")
*/
public function addDocForUserInList(Request $request, EntityManagerInterface $entityManager)
{
$document = new FilesUser();
$document->setUploadAt(new DateTime());
$form = $this->createForm(FilesUserType::class, $document);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid())
{
$data = $form->getData();
$uploadedFile = $form['FileName']->getData();
$file_name_original=$uploadedFile->getClientOriginalName();
$id= $form["User"]->getData()->getId(); //concatenation id .datetimenow to rename
$concat=$id."-".date("YmdHms");
$newFilename = $concat."-".$file_name_original;
$folder=$form["Folder"]->getData();
$destination = $this->getParameter('kernel.project_dir').'/public/mylog';
$uploadedFile->move($destination,$newFilename);
//dd($newFilename);
$entityManager->persist($document);
$entityManager->flush();
$this->addFlash('success','The document has been successfully added ! ');
return $this->redirectToRoute('files_users_manage_home_admin',['document'=>$document]);
}
return $this->render('flies_users_manage/admin_files_users/add_documents_list_user_choice.html.twig', [
'form'=>$form->createView(),
//'user'=>$user,
]);
}
/**
* @Route("abdeldisplay", name="abdeldisplay")
*/
public function indexa(UserRepository $userRepository)
{
// check if user is connected
if(!$this->getUser()) {return $this->redirectToRoute("logout");}
$filesUser=$this->getUser()->getFilesUsers();
$users = $userRepository->findAll();
//dd($users);
$usersFiles=array();
foreach($users as $user) {
$tab=$user->getFilesUsers();
array_push($usersFiles,array('user'=>$user,'files'=>$tab));
}
$roles=$this->getUser()->getRoles();
if (in_array("ROLE_DIRECTOR", $roles) OR in_array("ROLE_ADMIN", $roles)){
//dd($roles);
return $this->render('flies_users_manage/admin_files_users/abdeldisplay.html.twig', [
'users'=>$users,
'usersFiles'=>$usersFiles,
]);
}
if (in_array("ROLE_EMPLOYEE", $roles)){
return $this->render('flies_users_manage/files_user/display_files_user.html.twig', [
'user'=>$this->getUser(),
'filesUser'=>$filesUser,
]);
}
// empty template
return $this->render('flies_users_manage/index.html.twig', [
//'users'=>$users,
//'usersFiles'=>$usersFiles,
]);
}
}