Completed
Push — master ( 368645...05fd75 )
by Jan
03:49
created

AttachmentFileController   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 57
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 19
c 1
b 0
f 0
dl 0
loc 57
rs 10
wmc 6

2 Methods

Rating   Name   Duplication   Size   Complexity  
A view() 0 20 3
A download() 0 20 3
1
<?php
2
/**
3
 *
4
 * part-db version 0.1
5
 * Copyright (C) 2005 Christoph Lechner
6
 * http://www.cl-projects.de/
7
 *
8
 * part-db version 0.2+
9
 * Copyright (C) 2009 K. Jacobs and others (see authors.php)
10
 * http://code.google.com/p/part-db/
11
 *
12
 * Part-DB Version 0.4+
13
 * Copyright (C) 2016 - 2019 Jan Böhmer
14
 * https://github.com/jbtronics
15
 *
16
 * This program is free software; you can redistribute it and/or
17
 * modify it under the terms of the GNU General Public License
18
 * as published by the Free Software Foundation; either version 2
19
 * of the License, or (at your option) any later version.
20
 *
21
 * This program is distributed in the hope that it will be useful,
22
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24
 * GNU General Public License for more details.
25
 *
26
 * You should have received a copy of the GNU General Public License
27
 * along with this program; if not, write to the Free Software
28
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
29
 *
30
 */
31
32
namespace App\Controller;
33
34
35
use App\Entity\Attachment;
36
use App\Services\AttachmentHelper;
37
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
38
use Symfony\Component\HttpFoundation\BinaryFileResponse;
39
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
40
use Symfony\Component\Routing\Annotation\Route;
41
42
class AttachmentFileController extends AbstractController
43
{
44
45
    /**
46
     * Download the selected attachment
47
     *
48
     * @Route("/attachment/{id}/download", name="attachment_download")
49
     * @param Attachment $attachment
50
     */
51
    public function download(Attachment $attachment, AttachmentHelper $helper)
52
    {
53
        $this->denyAccessUnlessGranted("read", $attachment);
54
55
        if ($attachment->isExternal()) {
56
            throw new \Exception("You can not download external attachments!");
57
        }
58
59
        if (!$helper->isFileExisting($attachment)) {
60
            throw new \Exception("The file associated with the attachment is not existing!");
61
        }
62
63
64
        $file_path = $helper->toAbsoluteFilePath($attachment);
65
        $response = new BinaryFileResponse($file_path);
66
67
        //Set header content disposition, so that the file will be downloaded
68
        $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT);
69
70
        return $response;
71
    }
72
73
    /**
74
     * View the attachment
75
     *
76
     * @Route("/attachment/{id}/view", name="attachment_view")
77
     * @param Attachment $attachment
78
     */
79
    public function view(Attachment $attachment, AttachmentHelper $helper)
80
    {
81
        $this->denyAccessUnlessGranted("read", $attachment);
82
83
        if ($attachment->isExternal()) {
84
            throw new \Exception("You can not download external attachments!");
85
        }
86
87
        if (!$helper->isFileExisting($attachment)) {
88
            throw new \Exception("The file associated with the attachment is not existing!");
89
        }
90
91
92
        $file_path = $helper->toAbsoluteFilePath($attachment);
93
        $response = new BinaryFileResponse($file_path);
94
95
        //Set header content disposition, so that the file will be downloaded
96
        $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_INLINE);
97
98
        return $response;
99
    }
100
101
}