<?php
namespace App\Controller;
use App\Entity\Member;
use App\Form\ChangePasswordType;
use App\Form\RegistrationFormType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\DomCrawler\Crawler;
use Symfony\Component\CssSelector\CssSelectorConverter;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use App\Service\UserManagement;
use App\Service\FileUploader;
use App\Service\FileManagement;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class SecurityController extends AbstractController
{
private function createRegistrationForm(Request $request): FormInterface
{
$user = new Member();
$form = $this->createForm(RegistrationFormType::class, $user);
$form->handleRequest($request);
return $form;
}
/**
* @Route("/logout", name="app_logout")
*/
public function logout(): void
{
throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
}
/**
* @Route("/base/{lang}", name="research-base")
*/
public function research_base(Request $request, FileManagement $fileManagement, $lang='fr')
{
$html = file_get_contents('language/'.$lang.'/base.xml');
$basic_lv = new Crawler($html);
$html = file_get_contents('language/'.$lang.'/security/research-base.xml');
$p_lv = new Crawler($html);
$form = $this->createRegistrationForm($request);
// If a request for download a PDF is made
if ( empty($request->get('file_name')) == false ){
$file_name = $request->get('file_name');
return $fileManagement->downloadFile($file_name);
}
$wp_array = array('wp1','wp2','wp3','wp4','wp5','wp6');
return $this->render('security/research-base.html.twig',[
'registrationForm' => $form->createView(),
'blv'=>$basic_lv,
'plv'=>$p_lv,
'lang'=>$lang,
'file_list'=>$fileManagement->listFiles($wp_array)
]);
}
/**
* @Route("/deposit/{lang}", name="research-deposit")
*/
public function research_deposit(Request $request, FileManagement $fileManagement, $lang='fr')
{
$html = file_get_contents('language/'.$lang.'/base.xml');
$basic_lv = new Crawler($html);
$html = file_get_contents('language/'.$lang.'/security/research-deposit.xml');
$p_lv = new Crawler($html);
$form = $this->createRegistrationForm($request);
// If a request for upload a PDF is made
if ( empty($request->files->get('fileToUpload')) == false ){
$file = $request->files->get('fileToUpload');
$wp_id = $request->get('WP');
$username = $request->get('username');
return $fileManagement->upload($file, $wp_id, $username);
}
// If a request for delete a PDF is made
if ( empty($request->get('fileToDelete')) == false ){
$file_name = $request->get('fileToDelete');
$wp = $request->get('wp');
return $fileManagement->deleteFile($file_name, $wp);
}
$wp_array = array('wp1','wp2','wp3','wp4','wp5','wp6');
return $this->render('security/research-deposit.html.twig',[
'blv'=>$basic_lv,
'plv'=>$p_lv,
'lang'=>$lang,
'registrationForm' => $form->createView(),
'file_list'=>$fileManagement->listOwnedFiles($wp_array, $this->getUser()->getUsername())
]);
}
/**
* @Route("/user-management/{lang}", name="user-management")
*/
public function user_management(Request $request, UserManagement $um, $lang='fr')
{
$html = file_get_contents('language/'.$lang.'/base.xml');
$basic_lv = new Crawler($html);
$html = file_get_contents('language/'.$lang.'/security/user-management.xml');
$partners_lv = new Crawler($html);
$form = $this->createRegistrationForm($request);
$current_user = $this->getUser();
// If a request for add an user is made
if ( empty($request->get('email')) == false ){
$firstname = $request->get('firstname');
$lastname = $request->get('lastname');
$username = $request->get('email');
$org = $request->get('org');
$password = $request->get('password');
$um->addUser($firstname, $lastname, $username, $org, $password)->send();
}
// If a request for delete an user is made
if ( empty($request->get('email-delete')) == false ){
$emaildelete = $request->get('email-delete');
$um->deleteUser($emaildelete)->send();
}
// If a request for change role is made
if (empty($request->get('new-role')) == false){
$newRole = $request->get('new-role');
$userId = $request->get('user-id');
$um->changeRole($userId, $newRole)->send();
}
return $this->render('security/user-management.html.twig',[
'blv'=>$basic_lv,
'registrationForm' => $form->createView(),
'plv'=>$partners_lv,
'lang'=>$lang
]);
}
/**
* @Route("/user-management/change-role/{userId}/{newRole}", name="change-role")
*/
public function changeRole(UserManagement $um, $userId, $newRole)
{
$um->changeRole($userId, $newRole);
return $this->redirectToRoute('user-management');
}
/**
* @Route("/my-account/{lang}", name="my-account")
*/
public function my_account(Request $request, UserManagement $um, $lang='fr')
{
$html = file_get_contents('language/'.$lang.'/base.xml');
$basic_lv = new Crawler($html);
$html = file_get_contents('language/'.$lang.'/security/my-account.xml');
$partners_lv = new Crawler($html);
$form = $this->createRegistrationForm($request);
$user = $this->getUser();
$form2 = $this->createForm(ChangePasswordType::class, $user);
// If a request for change password is made
if ( empty($request->get('new-password')) == false ){
$username = $request->get('username');
$oldpassword = $request->get('old-password');
$newpassword = $request->get('new-password');
$um->changePassword($username,$oldpassword,$newpassword)->send();
}
return $this->render('security/my-account.html.twig',[
'blv'=>$basic_lv,
'plv'=>$partners_lv,
'lang'=>$lang,
'form' => $form2->createView(),
'registrationForm' => $form->createView()
]);
}
/**
* @Route("/login/{lang}", name="app_login")
*/
public function login(AuthenticationUtils $authenticationUtils, $lang='fr', Request $request): Response
{
$html = file_get_contents('language/'.$lang.'/base.xml');
$basic_lv = new Crawler($html);
$html = file_get_contents('language/'.$lang.'/security/my-account.xml');
$partners_lv = new Crawler($html);
$form = $this->createRegistrationForm($request);
// if ($this->getUser()) {
// return $this->redirectToRoute('target_path');
// }
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error,
'blv'=>$basic_lv,
'plv'=>$partners_lv,
'lang'=>$lang,
'form' => $form->createView(),
'registrationForm' => $form->createView()]);
}
}