Create.php
3.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
    
    namespace backend\actions;
    
    use artbox\core\admin\actions\Save;
    use artbox\core\models\Language;
    use function call_user_func;
    use yii\base\Model;
    
    /**
     * Create action for Artbox CRUD
     *
     * @package artbox\core\admin\actions
     */
    class Create extends Save
    {
        /**
         * @var string
         */
        public $viewPath = '@backend/actions/views/create';
        
        /**
         * If this parameter is setted - when creating aliases for model, write this parameter to aliase's entity
         * Created to keep back reference with FilterHelper
         *
         * @var null
         */
        public $overwriteEntity = null;
        
        /**
         * Creates new model, loading aliases, languages and gallery
         *
         * @return string|\yii\web\Response
         */
        public function run()
        {
            $model = call_user_func(
                [
                    $this->controller,
                    'newModel',
                ]
            );
            $languages = Language::getActive();
            if ($this->hasAlias) {
                /**
                 * @var \artbox\core\models\Alias[] $aliases
                 */
                $aliases = $model->loadAliases();
            }
            
            $post = \Yii::$app->request->post();
            
            if (!empty($this->languageFields)) {
                Model::loadMultiple($model->getVariationModels(), $post);
            }
            
            if ($model->load($post) && $model->save()) {
                if ($this->hasAlias) {
                    /**
                     * @var \artbox\core\models\Alias[] $aliases
                     */
                    Model::loadMultiple($aliases, $post);
                    foreach ($aliases as $alias) {
                        $alias->route = $model->getRoute();
                        if ($this->overwriteEntity === null) {
                            $alias->entity = $model::className();
                        } else {
                            $alias->entity = $this->overwriteEntity;
                        }
                        $alias->save();
                        
                        /**
                         * @var \yii\db\ActiveRecord $modelLang
                         */
                        $modelLang = $model->getVariationModel($alias->language_id);
                        $modelLang->alias_id = $alias->id;
                        $modelLang->save();
                    }
                }
                
                if ($this->hasGallery) {
                    $model->saveImages($post);
                }
                
                return $this->controller->redirect([ 'index' ]);
            }
            
            return $this->controller->render(
                $this->viewPath,
                [
                    'action'    => $this,
                    'model'     => $model,
                    'languages' => $languages,
                ]
            );
        }
    } 
