You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
2.8 KiB
143 lines
2.8 KiB
6 years ago
|
<?php
|
||
|
/**
|
||
|
* Created by Error202
|
||
|
* Date: 04.06.2018
|
||
|
*/
|
||
|
|
||
|
namespace backend\components;
|
||
|
|
||
|
use yii\grid\DataColumn;
|
||
|
use yii\helpers\Html;
|
||
|
use yii\web\View;
|
||
|
use Yii;
|
||
|
|
||
|
class ToggleColumn extends DataColumn
|
||
|
{
|
||
|
/**
|
||
|
* Toggle action that will be used as the toggle action in your controller
|
||
|
* @var string
|
||
|
*/
|
||
|
public $action = 'toggle';
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @var string pk field name
|
||
|
*/
|
||
|
public $primaryKey = 'primaryKey';
|
||
|
|
||
|
/**
|
||
|
* Whether to use ajax or not
|
||
|
* @var bool
|
||
|
*/
|
||
|
public $enableAjax = true;
|
||
|
|
||
|
/**
|
||
|
* @var string glyphicon for 'on' value
|
||
|
*/
|
||
|
public $iconOn = 'ok';
|
||
|
|
||
|
/**
|
||
|
* @var string glyphicon for 'off' value
|
||
|
*/
|
||
|
public $iconOff = 'remove';
|
||
|
|
||
|
/**
|
||
|
* @var string text to display on the 'on' link
|
||
|
*/
|
||
|
public $onText;
|
||
|
|
||
|
/**
|
||
|
* @var string text to display on the 'off' link
|
||
|
*/
|
||
|
public $offText;
|
||
|
|
||
|
/**
|
||
|
* @var string text to display next to the 'on' link
|
||
|
*/
|
||
|
public $displayValueText = false;
|
||
|
|
||
|
/**
|
||
|
* @var string text to display next to the 'on' link
|
||
|
*/
|
||
|
public $onValueText;
|
||
|
|
||
|
/**
|
||
|
* @var string text to display next to the 'off' link
|
||
|
*/
|
||
|
public $offValueText;
|
||
|
|
||
|
|
||
|
public function init()
|
||
|
{
|
||
|
if ($this->onText === null) {
|
||
|
$this->onText = Yii::t('main', 'On');
|
||
|
}
|
||
|
if ($this->offText === null) {
|
||
|
$this->offText = Yii::t('main', 'Off');
|
||
|
}
|
||
|
if ($this->onValueText === null) {
|
||
|
$this->onValueText = Yii::t('main', 'Active');
|
||
|
}
|
||
|
if ($this->offValueText === null) {
|
||
|
$this->offValueText = Yii::t('main', 'Inactive');
|
||
|
}
|
||
|
if ($this->enableAjax) {
|
||
|
$this->registerJs();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @inheritdoc
|
||
|
*/
|
||
|
protected function renderDataCellContent($model, $key, $index)
|
||
|
{
|
||
|
$url = [$this->action, 'id' => $model->{$this->primaryKey}];
|
||
|
|
||
|
$attribute = $this->attribute;
|
||
|
$value = $model->$attribute;
|
||
|
|
||
|
if ($value === null || $value == true) {
|
||
|
$icon = $this->iconOn;
|
||
|
$title = $this->offText;
|
||
|
$valueText = $this->onValueText;
|
||
|
$color = 'green';
|
||
|
} else {
|
||
|
$icon = $this->iconOff;
|
||
|
$title = $this->onText;
|
||
|
$valueText = $this->offValueText;
|
||
|
$color = 'red';
|
||
|
}
|
||
|
return Html::a(
|
||
|
'<span class="glyphicon glyphicon-' . $icon . '"></span>',
|
||
|
$url,
|
||
|
[
|
||
|
'title' => $title,
|
||
|
'class' => 'toggle-column',
|
||
|
'style' => 'color:' . $color,
|
||
|
'data-method' => 'post',
|
||
|
'data-pjax' => '0',
|
||
|
]
|
||
|
) . ( $this->displayValueText ? " {$valueText}" : "" );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Registers the ajax JS
|
||
|
*/
|
||
|
public function registerJs()
|
||
|
{
|
||
|
if(Yii::$app->request->isAjax) {
|
||
|
return;
|
||
|
}
|
||
|
$js = <<<'JS'
|
||
|
$(document.body).on("click", "a.toggle-column", function(e) {
|
||
|
e.preventDefault();
|
||
|
$.post($(this).attr("href"), function(data) {
|
||
|
var pjaxId = $(e.target).closest("[data-pjax-container]").attr("id");
|
||
|
$.pjax.reload({container:"#" + pjaxId});
|
||
|
});
|
||
|
return false;
|
||
|
});
|
||
|
JS;
|
||
|
$this->grid->view->registerJs($js, View::POS_READY, 'zx-toggle-column');
|
||
|
}
|
||
|
}
|