backports murph-skeleton
This commit is contained in:
parent
eabb80c876
commit
e1f42fd5ba
|
@ -7,6 +7,7 @@ use App\Core\FileManager\FsFileManager;
|
||||||
use App\Core\Form\FileManager\DirectoryCreateType;
|
use App\Core\Form\FileManager\DirectoryCreateType;
|
||||||
use App\Core\Form\FileManager\DirectoryRenameType;
|
use App\Core\Form\FileManager\DirectoryRenameType;
|
||||||
use App\Core\Form\FileManager\FileInformationType;
|
use App\Core\Form\FileManager\FileInformationType;
|
||||||
|
use App\Core\Form\FileManager\FileRenameType;
|
||||||
use App\Core\Form\FileManager\FileUploadType;
|
use App\Core\Form\FileManager\FileUploadType;
|
||||||
use App\Core\Manager\EntityManager;
|
use App\Core\Manager\EntityManager;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
@ -204,7 +205,9 @@ class FileManagerAdminController extends AdminController
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$form = $this->createForm(DirectoryRenameType::class);
|
$form = $this->createForm(DirectoryRenameType::class, [
|
||||||
|
'name' => $splInfo->getFilename(),
|
||||||
|
]);
|
||||||
|
|
||||||
if ($request->isMethod('POST')) {
|
if ($request->isMethod('POST')) {
|
||||||
$form->handleRequest($request);
|
$form->handleRequest($request);
|
||||||
|
@ -252,6 +255,78 @@ class FileManagerAdminController extends AdminController
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Route("/file/rename/{ajax}", name="admin_file_manager_file_rename", methods={"GET", "POST"})
|
||||||
|
*/
|
||||||
|
public function fileRename(FsFileManager $manager, Request $request, TranslatorInterface $translator, bool $ajax = false): Response
|
||||||
|
{
|
||||||
|
$splInfo = $manager->getSplInfo($request->query->get('file'));
|
||||||
|
|
||||||
|
if (!$splInfo) {
|
||||||
|
throw $this->createNotFoundException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($splInfo->isDir()) {
|
||||||
|
throw $this->createNotFoundException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($manager->isLocked($request->query->get('file'))) {
|
||||||
|
return $this->render('@Core/file_manager/file_rename.html.twig', [
|
||||||
|
'locked' => true,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$form = $this->createForm(FileRenameType::class, [
|
||||||
|
'name' => preg_replace(sprintf('/\.%s/', $splInfo->getExtension()), '', $splInfo->getFilename()),
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($request->isMethod('POST')) {
|
||||||
|
$form->handleRequest($request);
|
||||||
|
|
||||||
|
if ($form->isValid()) {
|
||||||
|
$status = $manager->renameFile($form->get('name')->getData(), $request->query->get('file'));
|
||||||
|
|
||||||
|
if (true === $status) {
|
||||||
|
if (!$request->isXmlHttpRequest()) {
|
||||||
|
$this->addFlash('success', 'File renamed.');
|
||||||
|
} else {
|
||||||
|
return $this->json([
|
||||||
|
'_error' => 0,
|
||||||
|
'_message' => $translator->trans('File renamed.'),
|
||||||
|
'_level' => 'success',
|
||||||
|
'_dispatch' => 'file_manager.file.rename.success',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!$request->isXmlHttpRequest()) {
|
||||||
|
$this->addFlash('warning', 'File not renamed.');
|
||||||
|
} else {
|
||||||
|
return $this->json([
|
||||||
|
'_error' => 1,
|
||||||
|
'_message' => $translator->trans('File not renamed.'),
|
||||||
|
'_level' => 'warning',
|
||||||
|
'_dispatch' => 'file_manager.file.rename.error',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$this->addFlash('warning', 'Unauthorized char(s).');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->redirectToRoute('admin_file_manager_index', [
|
||||||
|
'path' => $splInfo->getRelativePath(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->render('@Core/file_manager/file_rename.html.twig', [
|
||||||
|
'form' => $form->createView(),
|
||||||
|
'file' => $request->query->get('file'),
|
||||||
|
'exention' => $splInfo->getExtension(),
|
||||||
|
'locked' => false,
|
||||||
|
'ajax' => $ajax,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Route("/upload/{ajax}", name="admin_file_manager_upload", options={"expose"=true}, methods={"GET", "POST"})
|
* @Route("/upload/{ajax}", name="admin_file_manager_upload", options={"expose"=true}, methods={"GET", "POST"})
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -199,6 +199,30 @@ class FsFileManager
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function renameFile(string $name, string $path, bool $keepExtension = true): bool
|
||||||
|
{
|
||||||
|
$file = $this->getSplInfo($path);
|
||||||
|
|
||||||
|
if (!$file || $this->isLocked($path)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$filesystem = new Filesystem();
|
||||||
|
$newPath = $file->getPath().'/'.$this->normalizePath($name);
|
||||||
|
|
||||||
|
if ($keepExtension && $file->getExtension()) {
|
||||||
|
$newPath .= sprintf('.%s', $file->getExtension());
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($filesystem->exists($newPath)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$filesystem->rename($file->getPathName(), $newPath);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public function upload($files, string $path, array $fullPaths = [])
|
public function upload($files, string $path, array $fullPaths = [])
|
||||||
{
|
{
|
||||||
if ($files instanceof UploadedFile) {
|
if ($files instanceof UploadedFile) {
|
||||||
|
|
40
core/Form/FileManager/FileRenameType.php
Normal file
40
core/Form/FileManager/FileRenameType.php
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Core\Form\FileManager;
|
||||||
|
|
||||||
|
use Symfony\Component\Form\AbstractType;
|
||||||
|
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||||
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
use Symfony\Component\Validator\Constraints\NotBlank;
|
||||||
|
use Symfony\Component\Validator\Constraints\Regex;
|
||||||
|
|
||||||
|
class FileRenameType extends AbstractType
|
||||||
|
{
|
||||||
|
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||||
|
{
|
||||||
|
$builder->add(
|
||||||
|
'name',
|
||||||
|
TextType::class,
|
||||||
|
[
|
||||||
|
'label' => 'Name',
|
||||||
|
'required' => true,
|
||||||
|
'attr' => [
|
||||||
|
],
|
||||||
|
'constraints' => [
|
||||||
|
new Regex([
|
||||||
|
'pattern' => '#['.preg_quote('\\/?%*:|"<>').'\t\n\r]+#',
|
||||||
|
'match' => false,
|
||||||
|
]),
|
||||||
|
new NotBlank(),
|
||||||
|
],
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
|
{
|
||||||
|
$resolver->setDefaults([
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -192,8 +192,11 @@
|
||||||
"Directory not created.": "Répertoire non créé."
|
"Directory not created.": "Répertoire non créé."
|
||||||
"Directory renamed.": "Répertoire renommé."
|
"Directory renamed.": "Répertoire renommé."
|
||||||
"Directory not renamed.": "Répertoire non renommé."
|
"Directory not renamed.": "Répertoire non renommé."
|
||||||
|
"File renamed.": "Fichier renommé."
|
||||||
|
"File not renamed.": "Fichier non renommé."
|
||||||
"Rename": "Renommer"
|
"Rename": "Renommer"
|
||||||
"Rename directory": "Renommer le répertoire"
|
"Rename directory": "Renommer le répertoire"
|
||||||
|
"Rename file": "Renommer le fichier"
|
||||||
"New directory": "Nouveau répertoire"
|
"New directory": "Nouveau répertoire"
|
||||||
"Preview": "Aperçu"
|
"Preview": "Aperçu"
|
||||||
"Insert": "Insérer"
|
"Insert": "Insérer"
|
||||||
|
|
33
core/Resources/views/file_manager/file_rename.html.twig
Normal file
33
core/Resources/views/file_manager/file_rename.html.twig
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title">
|
||||||
|
{{ 'Rename file'|trans }}
|
||||||
|
</h5>
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
|
<span aria-hidden="true">×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
{% if locked %}
|
||||||
|
<p class="text-danger text-center">
|
||||||
|
<span class="d-block display-4 mb-3">
|
||||||
|
<span class="fa fa-lock"></span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
{{ 'File locked.'|trans }}
|
||||||
|
</p>
|
||||||
|
{% else %}
|
||||||
|
<form action="{{ path('admin_file_manager_file_rename', {file: file}) }}" {% if ajax %}data-form-ajax{% endif %} id="form-file-manager-directory" method="POST" enctype="multipart/form-data">
|
||||||
|
{{ include('@Core/file_manager/_form.html.twig') }}
|
||||||
|
</form>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">{{ 'Cancel'|trans }}</button>
|
||||||
|
{% if not locked %}
|
||||||
|
<button type="submit" form="form-file-manager-directory" class="btn btn-primary">{{ 'Save'|trans }}</button>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -134,11 +134,13 @@
|
||||||
{% if context == 'tinymce' %}
|
{% if context == 'tinymce' %}
|
||||||
{% if not isLocked %}
|
{% if not isLocked %}
|
||||||
{% if splInfo.isDir %}
|
{% if splInfo.isDir %}
|
||||||
<button form="form-file-delete" class="btn btn-primary" data-modal="{{ path('admin_file_manager_directory_rename', {file: splInfo.relativePathname, ajax: ajax}) }}">
|
<button form="form-file-delete" class="btn btn-sm btn-primary" data-modal="{{ path('admin_file_manager_directory_rename', {file: splInfo.relativePathname, ajax: ajax}) }}">
|
||||||
{{ 'Rename'|trans }}
|
{{ 'Rename'|trans }}
|
||||||
</button>
|
</button>
|
||||||
{% else %}
|
{% else %}
|
||||||
<span></span>
|
<button form="form-file-delete" class="btn btn-sm btn-primary" data-modal="{{ path('admin_file_manager_file_rename', {file: splInfo.relativePathname, ajax: ajax}) }}">
|
||||||
|
{{ 'Rename'|trans }}
|
||||||
|
</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<div>
|
<div>
|
||||||
|
@ -149,23 +151,27 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">{{ 'Close'|trans }}</button>
|
<button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">{{ 'Close'|trans }}</button>
|
||||||
|
|
||||||
{% if splInfo.isFile %}
|
{% if splInfo.isFile %}
|
||||||
<button type="submit" class="btn btn-primary" form="form-fm-attributes">{{ 'Save'|trans }}</button>
|
<button type="submit" class="btn btn-sm btn-primary" form="form-fm-attributes">{{ 'Save'|trans }}</button>
|
||||||
<button type="button" class="btn btn-success ml-3" id="file-manager-insert" data-value="{{ asset(path) }}">{{ 'Insert'|trans }}</button>
|
<button type="button" class="btn btn-sm btn-success ml-3" id="file-manager-insert" data-value="{{ asset(path) }}">{{ 'Insert'|trans }}</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div>
|
<div>
|
||||||
{% if not isLocked %}
|
{% if not isLocked %}
|
||||||
<button type="submit" form="form-fm-delete" class="btn btn-danger">
|
<button type="submit" form="form-fm-delete" class="btn btn-sm btn-danger">
|
||||||
{{ 'Delete'|trans }}
|
{{ 'Delete'|trans }}
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
{% if splInfo.isDir %}
|
{% if splInfo.isDir %}
|
||||||
<button form="form-file-delete" class="btn btn-primary" data-modal="{{ path('admin_file_manager_directory_rename', {file: splInfo.relativePathname}) }}">
|
<button form="form-file-delete" class="btn btn-sm btn-primary" data-modal="{{ path('admin_file_manager_directory_rename', {file: splInfo.relativePathname}) }}">
|
||||||
|
{{ 'Rename'|trans }}
|
||||||
|
</button>
|
||||||
|
{% else %}
|
||||||
|
<button form="form-file-delete" class="btn btn-sm btn-primary" data-modal="{{ path('admin_file_manager_file_rename', {file: splInfo.relativePathname}) }}">
|
||||||
{{ 'Rename'|trans }}
|
{{ 'Rename'|trans }}
|
||||||
</button>
|
</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -176,7 +182,7 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if splInfo.type == 'file' %}
|
{% if splInfo.type == 'file' %}
|
||||||
<a class="btn btn-success" href="{{ asset(path) }}" target="_blank">
|
<a class="btn btn-sm btn-success" href="{{ asset(path) }}" target="_blank">
|
||||||
{{ 'Download'|trans }}
|
{{ 'Download'|trans }}
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
Loading…
Reference in a new issue