Passed
Push — master ( 4f197a...c780ff )
by Aleksandr
02:36
created

Breadcrumbs::buttonArticleView()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 18
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 11
nc 1
nop 1
dl 0
loc 18
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace carono\exchange1c\components;
4
5
use carono\exchange1c\models\Article;
6
use yii\base\Action;
7
use yii\helpers\ArrayHelper;
8
use yii\helpers\Html;
9
use yii\helpers\Inflector;
10
use yii\helpers\Url;
11
12
class Breadcrumbs
13
{
14
    /**
15
     * @param $action
16
     * @param $params
17
     */
18
    protected static function callCrumb($action, $params)
19
    {
20
        $name = 'crumb' . Inflector::camelize($action->controller->id . '-' . $action->id);
21
        $class = get_called_class();
22
        if (method_exists($class, $name)) {
23
            $reflectionMethod = new \ReflectionMethod($class, $name);
24
            $data = [];
25
            foreach ($reflectionMethod->getParameters() as $p) {
26
                $data[] = isset($params[$p->getName()]) ? $params[$p->getName()] : null;
27
            }
28
            $action->controller->getView()->params['breadcrumbs'] = call_user_func_array([$class, "$name"], $data);
29
        }
30
    }
31
32
    /**
33
     * @param $action
34
     * @param $params
35
     */
36
    protected static function callButton($action, $params)
37
    {
38
        $name = 'button' . Inflector::camelize($action->controller->id . '-' . $action->id);
39
        $class = get_called_class();
40
        if (method_exists($class, $name)) {
41
            $reflectionMethod = new \ReflectionMethod($class, $name);
42
            $data = [];
43
            foreach ($reflectionMethod->getParameters() as $p) {
44
                $data[] = isset($params[$p->getName()]) ? $params[$p->getName()] : null;
45
            }
46
            $buttons = call_user_func_array([$class, "$name"], $data);
47
            foreach ($buttons as &$button) {
48
                Html::addCssClass($button['options'], 'btn-xs');
49
                $button['options']['href'] = Url::to(ArrayHelper::remove($button, 'url'));
50
                $button['options']['tag'] = 'a';
51
            }
52
            $action->controller->getView()->params['buttons'] = $buttons;
53
        }
54
    }
55
56
    /**
57
     * @param Action $action
58
     * @param $params
59
     */
60
    public static function formCrumbs($action, $params)
61
    {
62
        self::callCrumb($action, $params);
63
        self::callButton($action, $params);
64
    }
65
66
    public static function buttonArticleIndex()
67
    {
68
        return [
69
            [
70
                'label' => 'Добавить статью',
71
                'url' => ['article/create'],
72
                'linkOptions' => ['class' => 'btn btn-primary']
73
            ]
74
        ];
75
    }
76
77
    /**
78
     * @param Article $article
79
     * @return array
80
     */
81
    public static function buttonArticleView($article)
82
    {
83
        return [
84
            [
85
                'label' => 'Редактировать',
86
                'url' => ['article/update', 'id' => $article->id],
87
                'linkOptions' => ['class' => 'btn btn-primary']
88
            ],
89
            [
90
                'label' => 'Добавить подстатью',
91
                'url' => ['article/create', 'parent' => $article->id],
92
                'linkOptions' => ['class' => 'btn btn-primary']
93
            ],
94
            [
95
                'label' => 'Удалить',
96
                'url' => ['article/delete', 'id' => $article->id],
97
                'options' => ['data-confirm' => 'Удалить статью?'],
98
                'linkOptions' => ['class' => 'btn btn-danger']
99
            ]
100
        ];
101
    }
102
103
    #############################################################################
104
105
    public static function crumbTestingIndex()
106
    {
107
        return [
108
            'Тестирование модуля',
109
        ];
110
    }
111
112
    /**
113
     * @param Article $article
114
     * @return array
115
     */
116
    public static function crumbArticleView($article)
117
    {
118
        $items = [
119
            ['label' => 'Старт', 'url' => ['article/index']]
120
        ];
121
        $parent = $article;
122
        while ($parent = $parent->parent) {
123
            $items[] = ['label' => $parent->name, 'url' => ['article/view', 'id' => $parent->id]];
124
        }
125
        $items[] = $article->name;
126
        return $items;
127
    }
128
129
    public static function crumbArticleUpdate($article)
130
    {
131
        $items = [
132
            ['label' => 'Старт', 'url' => ['article/index']]
133
        ];
134
        $parent = $article;
135
        while ($parent = $parent->parent) {
136
            $items[] = ['label' => $parent->name, 'url' => ['article/view', 'id' => $parent->id]];
137
        }
138
        $items[] = ['label' => $article->name, 'url' => ['article/view', 'id' => $article->id]];
139
        $items [] = 'Редактирование';
140
        return $items;
141
    }
142
143
144
    public static function crumbInterfaceCheck($variable, $class, $interfaceTest)
145
    {
146
        return [
147
            ['label' => 'Интерфейсы', 'url' => ['default/interfaces']],
148
            $class,
149
        ];
150
    }
151
152
    public static function crumbDefaultInterfaces()
153
    {
154
        return [
155
            'Интерфейсы',
156
        ];
157
    }
158
159
    public static function crumbDefaultFiles()
160
    {
161
        return [
162
            'Временные файлы',
163
        ];
164
    }
165
166
    public static function crumbDefaultSettings()
167
    {
168
        return [
169
            'Настройки модуля',
170
        ];
171
    }
172
173
    public static function crumbDefaultDocumentation()
174
    {
175
        return [
176
            'Документация по CommerceML',
177
        ];
178
    }
179
180
    public static function crumbDefaultExport()
181
    {
182
        return [
183
            'Экспорт',
184
        ];
185
    }
186
187
188
    public static function crumbDefaultImport()
189
    {
190
        return [
191
            'Импорт',
192
        ];
193
    }
194
195
    public static function crumbArticleIndex()
196
    {
197
        return [
198
            'Старт',
199
        ];
200
    }
201
}