sftpbrowser/src/Controller/HomeController.php

141 lines
4.6 KiB
PHP

<?php
namespace App\Controller;
use App\Form\FolderType;
use App\Form\FileType;
use App\Form\AfnorType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use App\Service\SftpService;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\Filesystem\Filesystem;
class HomeController extends AbstractController
{
private $sftp;
public function __construct(SftpService $sftp)
{
$this->sftp = $sftp;
$this->sftp->connect();
}
public function home(Request $request)
{
$folder=$request->query->get('folder');
// Crétion de répertoire
$formFolder = $this->createForm(FolderType::class);
$formFolder->handleRequest($request);
if ($formFolder->get('submit')->isClicked() && $formFolder->isValid()) {
$name = $formFolder->get("name")->getData();
$this->sftp->mkdir($folder."/".$name);
}
// Modification de fichier
$formFile = $this->createForm(FileType::class);
$formFile->handleRequest($request);
if ($formFile->get('submit')->isClicked() && $formFile->isValid()) {
$oldname = $formFile->get("oldname")->getData();
$name = $formFile->get("name")->getData();
$this->sftp->rename($folder."/".$oldname,$folder."/".$name);
}
// Fake AFNOR
$formAfnor = $this->createForm(AfnorType::class);
$formAfnor->handleRequest($request);
if ($formAfnor->get('submit')->isClicked()) {
$id = $formAfnor->get("id")->getData();
$codeproduct = $formAfnor->get("codeproduct")->getData();
$codequalifications = $formAfnor->get("codequalifications")->getData();
$filesystem = new Filesystem();
$dir = $this->getParameter('kernel.project_dir').'/var/tmp';
$file ="ga\n";
$file.="gc,".$id."\n";
$file.="ph\n";
$file.="pj,".$codeproduct."\n";
foreach($codequalifications as $codequalification) {
$file.="qa\n";
$file.="qh,".$codequalification."\n";
}
$filesystem->dumpFile($dir.'/DEL-'.$id.'.AFN', $file);
$return=$this->sftp->uploadFile($dir.'/DEL-'.$id.'.AFN', $folder);
}
// Lister les fichiers
$ls=$this->sftp->ls($folder);
// Construire l'arbre des répertoires
$tree=[];
$tmpparent=explode("/",$folder);
foreach($tmpparent as $key => $parent) {
$tmp=[
"name"=>($parent==""?"Home":$parent),
"folder"=>($key==0?"":$tree[$key-1]["folder"]."/".$parent)
];
array_push($tree,$tmp);
}
// Browse
return $this->render('Home/home.html.twig', [
'useheader' => true,
'usemenu' => false,
'usesidebar' => false,
'tree' => $tree,
'infolder' => $folder,
'folders' => $ls["folders"],
'files' => $ls["files"],
'fakeAfnor'=>in_array("AFNOR",$this->getParameter("fakeFiles")),
'formfolder'=>$formFolder->createView(),
'formfile'=>$formFile->createView(),
'formafnor'=>$formAfnor->createView(),
]);
}
public function download(Request $request)
{
$file=$request->query->get('file');
$tmpfile=$this->sftp->downloadFile($file,"var/tmp/");
if(!$tmpfile) {
throw new \Exception('Erreur de téléchargement');
}
if (str_starts_with(mime_content_type($tmpfile), 'image/') || 'application/pdf' == mime_content_type($tmpfile) || 'text/plain' == mime_content_type($tmpfile)) {
$response = new BinaryFileResponse($tmpfile);
$response->headers->set('Content-Type', mime_content_type($tmpfile));
} else {
$response = new BinaryFileResponse($tmpfile);
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, basename($tmpfile));
}
return $response;
}
public function upload(Request $request)
{
$folder=$request->query->get('folder');
return $this->render('Home/upload.html.twig', [
'folder' => $folder,
]);
}
public function delete(Request $request)
{
$folder=$request->query->get('folder');
$file=$request->query->get('file');
$this->sftp->deleteFile($file);
return $this->redirectToRoute("app_home",["folder"=>$folder]);
}
}