FileController::actionGet()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
dl 0
loc 11
ccs 0
cts 8
cp 0
rs 9.9
c 0
b 0
f 0
cc 2
nc 2
nop 3
crap 6
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