Completed
Push — master ( 63ab7f...7e002b )
by Dmitry
03:41
created

TemplatesWidget::getLanguages()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 18
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 18
ccs 0
cts 15
cp 0
rs 9.4285
cc 3
eloc 10
nc 3
nop 0
crap 12
1
<?php
2
3
namespace hipanel\modules\ticket\widgets;
4
5
use hipanel\modules\client\models\Article;
6
use Yii;
7
use yii\base\Widget;
8
use yii\helpers\ArrayHelper;
9
use yii\helpers\Json;
10
use yii\helpers\Url;
11
use yii\web\JsExpression;
12
13
class TemplatesWidget extends Widget
14
{
15
    public $textareaSelector = '#thread-message';
16
17
    public function run()
18
    {
19
        if (!Yii::$app->user->can('support')) {
20
            return null;
21
        }
22
23
        $this->registerClientScript();
24
25
        return $this->render('templatesWidget', [
26
            'languages' => $this->getLanguages(),
27
            'defaultLanguage' => $this->getDefaultLanguage(),
28
        ]);
29
    }
30
31
    protected function getDefaultLanguage()
32
    {
33
        $languages = $this->getLanguages();
34
        $applicationLanguage = Yii::$app->language;
35
36
        if (isset($languages[$applicationLanguage])) {
37
            return $languages[$applicationLanguage];
38
        }
39
40
        $fallbackLanguage = substr($applicationLanguage, 0, 2);
41
        if (isset($languages[$fallbackLanguage])) {
42
            return $languages[$fallbackLanguage];
43
        }
44
45
        return reset($languages);
46
    }
47
48
    protected function getLanguages()
49
    {
50
        $result = [];
51
52
        $templates = Article::find()->ticketTemplates()->all();
53
        $data = ArrayHelper::getColumn($templates, 'data');
54
55
        foreach ($data as $languages) {
56
            foreach (array_keys($languages) as $code) {
57
                $result[$code] = [
58
                    'name' => Yii::t('hipanel', $code),
59
                    'code' => $code,
60
                ];
61
            }
62
        }
63
64
        return $result;
65
    }
66
67
    protected function registerClientScript()
68
    {
69
        $options = Json::encode([
70
            'url' => Url::to('@ticket/template-text'),
71
            'data' => [
72
                'id' => new JsExpression('id'),
73
                'lang' => new JsExpression('language'),
74
            ],
75
            'success' => new JsExpression("function (data) {
76
                if (data.text) {
77
                    var messageText = $('#thread-message').val();
78
                    if (messageText.length > 0) {
79
                        messageText = messageText + ' ';
80
                    }
81
                    $('$this->textareaSelector').val(messageText + data.text).trigger('blur').focus();
82
                }
83
            }")
84
        ]);
85
86
        $this->view->registerJs("
87
            $('#template-combo').on('select2-selecting', function (e) {
88
                var id = e.val;
89
                var language = $('.selected-language').attr('data-language');
90
                $.ajax($options);
91
            });
92
            $('.template-selector ul li>a').on('click', function (event) {
93
                var language = {
94
                    code: $(this).attr('data-language'),
95
                    name: $(this).text()
96
                };
97
98
                $('.template-selector .selected-language').text(language.name).attr('data-language', language.code);
99
                event.preventDefault();
100
            });
101
        ");
102
    }
103
}
104