Passed
Push — master ( de9f16...6836c0 )
by Aleksandr
02:35
created

ArticleController::actionDeleteUnusedImages()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 13
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 9
nc 2
nop 0
dl 0
loc 13
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
4
namespace carono\exchange1c\controllers;
5
6
7
use carono\exchange1c\models\Article;
8
use yii\helpers\FileHelper;
9
use yii\helpers\Html;
10
use Yii;
11
12
/**
13
 * Class ArticleController
14
 *
15
 * @package carono\exchange1c\controllers
16
 */
17
class ArticleController extends Controller
18
{
19
    public function actionCreate($parent = null)
20
    {
21
        $article = new Article();
22
        $article->pos = 10;
23
        $article->parent_id = $parent;
24
        if ($article->load(\Yii::$app->request->post())) {
25
            if ($article->save()) {
26
                return $this->redirect(['article/index']);
27
            } else {
28
                \Yii::$app->session->setFlash('error', Html::errorSummary($article));
29
            }
30
        }
31
        return $this->render('update', ['article' => $article]);
32
    }
33
34
    public function actionUpdate($id)
35
    {
36
        $article = Article::findOne($id, true);
37
        if ($article->load(\Yii::$app->request->post())) {
38
            if ($article->save()) {
39
                return $this->redirect(['article/view', 'id' => $article->id]);
40
            } else {
41
                \Yii::$app->session->setFlash('error', Html::errorSummary($article));
42
            }
43
        }
44
        return $this->render('update', ['article' => $article]);
45
    }
46
47
    public function actionView($id)
48
    {
49
        $article = Article::findOne($id, true);
50
        return $this->render('view', ['article' => $article]);
51
    }
52
53
    public function actionDelete($id)
54
    {
55
        Article::findOne($id, true)->delete();
56
        return $this->redirect(['article/index']);
57
    }
58
59
    public function actionIndex()
60
    {
61
        $dataProvider = Article::find()->orderBy(['{{%article}}.[[pos]]' => SORT_ASC])->search();
62
        return $this->render('index', ['dataProvider' => $dataProvider]);
63
    }
64
65
    /**
66
     * Удаляем все реальные файлы, которые не используются в статьях
67
     */
68
    public function actionDeleteUnusedImages()
69
    {
70
        $content = Article::find()->select(['content' => 'group_concat([[content]])'])->scalar();
71
        $dir = Yii::getAlias(Yii::$app->getModule('redactor')->uploadDir);
72
        $files = Article::extractFilesFromString($content);
73
        $realFiles = FileHelper::findFiles($dir);
74
        array_walk($realFiles, function (&$item) use ($dir) {
75
            $item = str_replace('\\', '/', substr($item, strlen($dir)));
76
        });
77
        foreach (array_diff($realFiles, $files) as $file) {
78
            @unlink($dir . '/' . $file);
79
        };
80
        return $this->redirect(['article/index']);
81
    }
82
}