Blame view

thread/widgets/grid/ActionCheckboxColumn.php 2.19 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
  <?php
  namespace thread\widgets\grid;
  
  use Closure;
  use yii\base\InvalidConfigException;
  use yii\grid\DataColumn;
  use yii\helpers\{
      Html, Url
  };
  //
  use thread\app\base\models\ActiveRecord;
  
  /**
   * Class ActionCheckboxColumn
   *
   * @package thread\widgets\grid
   * @author FilamentV <vortex.filament@gmail.com>
   * @copyright (c), Thread
   */
  class ActionCheckboxColumn extends DataColumn
  {
      public $contentOptions = [
          'class' => 'text-center',
      ];
  
      public $headerOptions = [
          'class' => 'text-center'
      ];
  
      /**
       * Url to send AJAX request
       * @var string|Closure
       */
      public $action;
  
      /**
       * @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)
      {
          $action = '';
          if ($this->action instanceof Closure) {
              $action = $this->action;
              $action = $action($model);
          } else {
              $action = $this->action;
          }
  
          if ($action === false) {
              $dataAttributes = [
                  'class' => 'ajax-switcher i-checks',
                  'disabled' => true,
              ];
          } else {
              $dataAttributes = [
                  'class' => 'ajax-switcher i-checks',
                  'data' => [
                      'id' => $model->id,
                      'url' => Url::toRoute([$action]),
                  ],
              ];
          }
  
          /** @var \yii\db\ActiveRecord $model */
          return Html::checkbox(null, (int)$model->{$this->attribute}, $dataAttributes);
      }
  }