FileController   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 6
lcom 0
cbo 4
dl 0
loc 52
ccs 0
cts 39
cp 0
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A behaviors() 0 20 2
A actionView() 0 9 1
A actionGet() 0 11 2
A actionTempView() 0 6 1
1
<?php
2
/**
3
 * HiPanel core package
4
 *
5
 * @link      https://hipanel.com/
6
 * @package   hipanel-core
7
 * @license   BSD-3-Clause
8
 * @copyright Copyright (c) 2014-2019, HiQDev (http://hiqdev.com/)
9
 */
10
11
namespace hipanel\controllers;
12
13
use hipanel\helpers\FileHelper;
14
use Yii;
15
use yii\filters\HttpCache;
16
use yii\helpers\ArrayHelper;
17
use yii\web\Controller;
18
use yii\web\Response;
19
20
class FileController extends Controller
21
{
22
    public function behaviors()
23
    {
24
        return ArrayHelper::merge(parent::behaviors(), [
25
            'file-cache' => [
26
                'class' => HttpCache::class,
27
                'only' => ['view', 'get'],
28
                'lastModified' => function () {
29
                    $id = Yii::$app->request->get('id');
30
                    $nocache = Yii::$app->request->get('nocache', false);
31
                    if ($nocache) {
32
                        return time();
33
                    }
34
35
                    $filename = Yii::$app->fileStorage->get($id);
36
37
                    return filemtime($filename);
38
                },
39
            ],
40
        ]);
41
    }
42
43
    public function actionView($id, $nocache = false)
44
    {
45
        $filename = Yii::$app->fileStorage->get($id, $nocache);
46
47
        Yii::$app->response->format = Response::FORMAT_RAW;
48
        Yii::$app->response->headers->add('Content-type', FileHelper::getMimeType($filename));
49
50
        return file_get_contents($filename);
51
    }
52
53
    public function actionGet($id, $downloadName = null, $nocache = false)
54
    {
55
        $filename = Yii::$app->fileStorage->get($id, $nocache);
56
57
        if ($downloadName === null) {
58
            $file = Yii::$app->fileStorage->getFileModel($id);
59
            $downloadName = $file->filename;
60
        }
61
62
        Yii::$app->response->sendFile($filename, $downloadName)->send();
63
    }
64
65
    public function actionTempView($filename, $key)
66
    {
67
        $content = Yii::$app->fileStorage->getTemporary($filename, $key);
68
69
        Yii::$app->response->sendContentAsFile(file_get_contents($content), $filename)->send();
70
    }
71
}
72