FilesRouting   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 109
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 47
dl 0
loc 109
rs 10
c 0
b 0
f 0
wmc 10

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A newRoute() 0 8 2
A deleteRoute() 0 5 1
A newAjaxRoute() 0 9 2
A downloadRoute() 0 27 3
A overviewRoute() 0 5 1
1
<?php
2
/**
3
 * User: jensk
4
 * Date: 30-1-2017
5
 * Time: 12:46
6
 */
7
8
namespace CloudControl\Cms\components\cms;
9
10
use CloudControl\Cms\cc\Request;
11
use CloudControl\Cms\cc\ResponseHeaders;
12
use CloudControl\Cms\components\CmsComponent;
13
14
class FilesRouting extends CmsRouting
15
{
16
    protected static $routes = array(
17
        '/files' => 'overviewRoute',
18
        '/files/new' => 'newRoute',
19
        '/files/new-ajax' => 'newAjaxRoute',
20
        '/files/get' => 'downloadRoute',
21
        '/files/delete' => 'deleteRoute',
22
    );
23
24
    /**
25
     * CmsRouting constructor.
26
     *
27
     * @param Request $request
28
     * @param string $relativeCmsUri
29
     * @param CmsComponent $cmsComponent
30
     * @throws \Exception
31
     */
32
    public function __construct(Request $request, $relativeCmsUri, CmsComponent $cmsComponent)
33
    {
34
        $this->doRouting($request, $relativeCmsUri, $cmsComponent);
35
    }
36
37
    /**
38
     * @param $request
39
     * @param CmsComponent $cmsComponent
40
     */
41
    protected function downloadRoute($request, $cmsComponent)
42
    {
43
        if (null === $request::$get[CmsConstants::FILES_PARAMETER_FILE]) {
44
            return;
45
        }
46
        $slug = $request::$get[CmsConstants::FILES_PARAMETER_FILE];
47
        $file = $cmsComponent->storage->getFiles()->getFileByName($slug);
48
        if ($file === null) {
49
            return;
50
        }
51
        $path = realpath($cmsComponent->storage->getFiles()->getFilesDir());
52
        $quoted = sprintf('"%s"', addcslashes(basename($path . '/' . $file->file), '"\\'));
53
        $size = filesize($path . '/' . $file->file);
54
55
        ResponseHeaders::add(ResponseHeaders::HEADER_CONTENT_DESCRIPTION, ResponseHeaders::HEADER_CONTENT_DESCRIPTION_CONTENT);
56
        ResponseHeaders::add(ResponseHeaders::HEADER_CONTENT_TYPE, $file->type);
57
        ResponseHeaders::add(ResponseHeaders::HEADER_CONTENT_DISPOSITION, 'attachment; filename=' . $quoted);
58
        ResponseHeaders::add(ResponseHeaders::HEADER_CONTENT_TRANSFER_ENCODING, ResponseHeaders::HEADER_CONTENT_TRANSFER_ENCODING_CONTENT_BINARY);
59
        ResponseHeaders::add(ResponseHeaders::HEADER_CONNECTION, ResponseHeaders::HEADER_CONNECTION_CONTENT_KEEP_ALIVE);
60
        ResponseHeaders::add(ResponseHeaders::HEADER_EXPIRES, 0);
61
        ResponseHeaders::add(ResponseHeaders::HEADER_CACHE_CONTROL, 'must-revalidate, post-check=0, pre-check=0');
62
        ResponseHeaders::add(ResponseHeaders::HEADER_PRAGMA, ResponseHeaders::HEADER_PRAGMA_CONTENT_PUBLIC);
63
        ResponseHeaders::add(ResponseHeaders::HEADER_CONTENT_LENGTH, $size);
64
        ResponseHeaders::sendAllHeaders();
65
66
        readfile($path . '/' . $file->file);
67
        exit;
68
    }
69
70
    /**
71
     * @param Request $request
72
     * @param CmsComponent $cmsComponent
73
     */
74
    protected function overviewRoute(/** @scrutinizer ignore-unused */ $request, $cmsComponent)
75
    {
76
        $cmsComponent->subTemplate = 'files';
77
        $cmsComponent->setParameter(CmsConstants::PARAMETER_MAIN_NAV_CLASS, CmsConstants::PARAMETER_FILES);
78
        $cmsComponent->setParameter(CmsConstants::PARAMETER_FILES, $cmsComponent->storage->getFiles()->getFiles());
79
    }
80
81
    /**
82
     * @param Request $request
83
     * @param CmsComponent $cmsComponent
84
     * @throws \Exception
85
     */
86
    protected function newRoute($request, $cmsComponent)
87
    {
88
        $cmsComponent->subTemplate = 'files/form';
89
        $cmsComponent->setParameter(CmsConstants::PARAMETER_MAIN_NAV_CLASS, CmsConstants::PARAMETER_FILES);
90
        if (isset($_FILES[CmsConstants::FILES_PARAMETER_FILE])) {
91
            $cmsComponent->storage->getFiles()->addFile($_FILES[CmsConstants::FILES_PARAMETER_FILE]);
92
            header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsConstants::PARAMETER_CMS_PREFIX) . '/files');
93
            exit;
94
        }
95
    }
96
97
    /**
98
     * @param $request
99
     * @param CmsComponent $cmsComponent
100
     * @throws \Exception
101
     */
102
    protected function newAjaxRoute(/** @scrutinizer ignore-unused */ $request, $cmsComponent)
103
    {
104
        if (isset($_FILES[CmsConstants::FILES_PARAMETER_FILE])) {
105
            $file = $cmsComponent->storage->getFiles()->addFile($_FILES[CmsConstants::FILES_PARAMETER_FILE]);
106
            ResponseHeaders::add(ResponseHeaders::HEADER_CONTENT_TYPE, ResponseHeaders::HEADER_CONTENT_TYPE_CONTENT_APPLICATION_JSON);
107
            ResponseHeaders::sendAllHeaders();
108
            die(json_encode($file));
109
        }
110
        die('error occured');
111
    }
112
113
    /**
114
     * @param Request $request
115
     * @param CmsComponent $cmsComponent
116
     * @throws \Exception
117
     */
118
    protected function deleteRoute($request, $cmsComponent)
119
    {
120
        $cmsComponent->storage->getFiles()->deleteFileByName($request::$get[CmsConstants::FILES_PARAMETER_FILE]);
121
        header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsConstants::PARAMETER_CMS_PREFIX) . '/files');
122
        exit;
123
    }
124
125
}