110 lines
3.4 KiB
PHP
110 lines
3.4 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace App\Controller;
|
||
|
|
||
|
use App\Form\FolderType;
|
||
|
use App\Form\FileType;
|
||
|
|
||
|
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;
|
||
|
|
||
|
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);
|
||
|
}
|
||
|
|
||
|
// 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"],
|
||
|
'formfolder'=>$formFolder->createView(),
|
||
|
'formfile'=>$formFile->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)) {
|
||
|
$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]);
|
||
|
}
|
||
|
}
|