Blame view

thread/widgets/grid/ActionStatusColumn.php 2.87 KB
d1f8bd40   Alexey Boroda   first commit
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
98
99
100
101
102
103
104
105
106
  <?php
  namespace thread\widgets\grid;
  
  use yii\base\InvalidConfigException;
  use yii\grid\DataColumn;
  use yii\helpers\{
      Html, Url
  };
  //
  use thread\app\base\models\ActiveRecord;
  
  /**
   * Class ActionStatusColumn
   *
   * @package thread\widgets\grid
   * @author FilamentV <vortex.filament@gmail.com>
   * @copyright (c), Thread
   */
  class ActionStatusColumn extends DataColumn
  {
      public $contentOptions = [
          'class' => 'text-center',
      ];
  
      public $headerOptions = [
          'class' => 'text-center'
      ];
  
      /**
       * Url to send AJAX request
       * @var string
       */
      public $action;
      /**
       * @var array
       */
      public $statusLabel = [
          ActiveRecord::STATUS_KEY_OFF => 'Off',
          ActiveRecord::STATUS_KEY_ON => 'Published',
      ];
      /**
       * @var array
       */
      protected $statusCssClass = [
          ActiveRecord::STATUS_KEY_OFF => 'label-danger',
          ActiveRecord::STATUS_KEY_ON => 'label-primary',
      ];
  
      /**
       * @inheritdoc
       */
      public function init()
      {
          parent::init();
          if (!$this->action) {
              throw new InvalidConfigException(\Yii::t('app',
                      'You should set "action" attribute to "') . $this->attribute . '"');
          }
      }
  
      /**
       * @inheritdoc
       */
      protected function renderFilterCellContent()
      {
          if (empty($this->filter)) {
  
              $model = $this->grid->filterModel;
  
              $this->filter = Html::activeDropDownList($model, $this->attribute, ActiveRecord::statusKeyRange(),
                  ['class' => 'form-control', 'prompt' => '  ---  ']);
          }
          return parent::renderFilterCellContent();
      }
  
      /**
       * @inheritdoc
       */
      protected function renderDataCellContent($model, $key, $index)
      {
          $show = $model[$this->attribute] == ActiveRecord::STATUS_KEY_ON ? 'inline' : 'none';
  
          $dataAttributesCheck = [
              'class' => 'ajax-status-switcher i-checks label ' . $this->statusCssClass[ActiveRecord::STATUS_KEY_ON],
              'style' => 'padding:5px 10px 5px 10px; cursor:pointer; display:' . $show,
              'data' => [
                  'id' => $model->id,
                  'url' => Url::toRoute([$this->action]),
              ],
          ];
  
          $show = $show == 'inline' ? 'none' : 'inline';
  
          $dataAttributesUnCheck = [
              'class' => 'ajax-status-switcher i-unchecks label ' . $this->statusCssClass[ActiveRecord::STATUS_KEY_OFF],
              'style' => 'padding:5px 10px 5px 10px; cursor:pointer; display:' . $show,
              'data' => [
                  'id' => $model->id,
                  'url' => Url::toRoute([$this->action]),
              ],
          ];
  
          /** @var \yii\db\ActiveRecord $model */
          return Html::tag('span', $this->statusLabel[ActiveRecord::STATUS_KEY_ON], $dataAttributesCheck) . Html::tag('span', $this->statusLabel[ActiveRecord::STATUS_KEY_OFF], $dataAttributesUnCheck);
      }
  }