Issues (62)

Controller/UploaderController.php (2 issues)

Severity
1
<?php
2
3
namespace PiouPiou\RibsAdminBundle\Controller;
4
5
use Exception;
6
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
7
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
8
use Symfony\Component\Filesystem\Filesystem;
9
use Symfony\Component\Finder\Finder;
10
use Symfony\Component\HttpFoundation\File\UploadedFile;
11
use Symfony\Component\HttpFoundation\Request;
12
use Symfony\Component\HttpFoundation\JsonResponse;
13
use Symfony\Component\Routing\Annotation\Route;
14
15
class UploaderController extends AbstractController
16
{
17
    /**
18
     * @Route("/upload", name="ribsadmin_upload")
19
     * @param Request $request
20
     * @param ParameterBagInterface $parameter
21
     * @return JsonResponse
22
     * @throws Exception
23
     */
24
    public function upload(Request $request, ParameterBagInterface $parameter): JsonResponse
25
    {
26
        $success = false;
27
        $new_filename = null;
28
        $file = null;
29
        $upload_dir = null;
30
31
        if ($request->files && $request->files->has("file")) {
32
            $upload_dir = $parameter->get("ribs_admin.upload_dir");
33
            /** @var UploadedFile $file */
34
            $file = $request->files->get("file");
35
            $date = new \DateTime();
36
            $extension = explode(".", $file->getFilename());
37
            $new_filename = uniqid() . "-" . $date->getTimestamp() . "." . end($extension);
38
39
            if (!is_dir($upload_dir)) {
40
                $this->createRecursiveDirFromRoot($upload_dir);
41
            }
42
43
            if ($file->move($upload_dir, $new_filename)) {
44
                $success = true;
45
            }
46
        }
47
48
        return new JsonResponse([
49
            "original_filename" => $file ? $file->getClientOriginalName() : null,
50
            "new_filename" => $new_filename,
51
            "file_path" => $upload_dir . "/" . $new_filename,
52
            "success" => $success
53
        ]);
54
    }
55
56
    /**
57
     * @Route("/delete-uploaded-file", name="ribsadmin_delete_uploaded_file")
58
     * @param Request $request
59
     * @param ParameterBagInterface $parameter
60
     * @return JsonResponse
61
     */
62
    public function deleteUploadedFile(Request $request, ParameterBagInterface $parameter): JsonResponse
63
    {
64
        $success = false;
65
        if ($request->get("file_path") && $request->get("file_name")) {
66
            $fs = new Filesystem();
67
            $upload_dir = $parameter->get("ribs_admin.upload_dir");
68
69
            if (is_file($request->get("file_path"))) {
70
                $fs->remove($request->get("file_path"));
71
            } elseif (is_file($upload_dir . "/" . $request->get("file_name"))) {
72
                $fs->remove($upload_dir . "/" . $request->get("file_name"));
73
            }
74
            $success = true;
75
        }
76
77
        return new JsonResponse([
78
            "success" => $success
79
        ]);
80
    }
81
82
    /**
83
     * @Route("/retrieve-uploaded-files", name="ribsadmin_retrieve_uploaded_file")
84
     * @param Request $request
85
     * @param ParameterBagInterface $parameter
86
     * @return JsonResponse
87
     */
88
    public function retrieveUploadedFile(Request $request, ParameterBagInterface $parameter): JsonResponse
0 ignored issues
show
The parameter $request is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

88
    public function retrieveUploadedFile(/** @scrutinizer ignore-unused */ Request $request, ParameterBagInterface $parameter): JsonResponse

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
89
    {
90
        $success = true;
91
        $fs = new Filesystem();
0 ignored issues
show
The assignment to $fs is dead and can be removed.
Loading history...
92
        $finder = new Finder();
93
        $finder->files()->in($parameter->get("ribs_admin.upload_dir"));
94
        $files = [];
95
        $index = 0;
96
97
        foreach ($finder as $file) {
98
            $files[] = [
99
                "file_path" => $parameter->get("ribs_admin.base_upload_url") . $file->getFilename(),
100
                "filename" => $file->getFilename(),
101
                "index" => $index
102
            ];
103
104
            $index++;
105
        }
106
107
        return new JsonResponse([
108
            "success" => $success,
109
            "files" => $files
110
        ]);
111
    }
112
113
    /**
114
     * method that create a tree of folders on each slash
115
     * @param $path
116
     * @return string
117
     */
118
    private function createRecursiveDirFromRoot($path)
119
    {
120
        $fs = new Filesystem();
121
        $new_path = $path;
122
        $folders = explode("/", $path);
123
124
        foreach ($folders as $index => $folder) {
125
            $new_path .= $folder;
126
127
            if (!$fs->exists($new_path)) {
128
                $fs->mkdir($new_path);
129
            }
130
131
            if ($index + 1 < count($folders)) {
132
                $new_path .= "/";
133
            }
134
        }
135
136
        return $new_path;
137
    }
138
}
139