public function renderDataCellContent($model, $key, $index)
{
$readonly = $this->readonly;
if ($readonly instanceof Closure) {
$readonly = call_user_func($readonly, $model, $key, $index, $this);
}
if ($readonly === true) {
return parent::renderDataCellContent($model, $key, $index);
}
$this->_editableOptions = $this->editableOptions;
if (!empty($this->editableOptions) && $this->editableOptions instanceof Closure) {
$this->_editableOptions = call_user_func($this->editableOptions, $model, $key, $index, $this);
}
if (!is_array($this->_editableOptions)) {
$this->_editableOptions = [];
}
$options = ArrayHelper::getValue($this->_editableOptions, 'containerOptions', []);
Html::addCssClass($options, $this->_css);
$this->_editableOptions['containerOptions'] = $options;
if ($this->grid->pjax && empty($this->_editableOptions['pjaxContainerId'])) {
$this->_editableOptions['pjaxContainerId'] = $this->grid->pjaxSettings['options']['id'];
}
if (!isset($key)) {
throw new InvalidConfigException("Invalid or no primary key found for the grid data.");
}
$strKey = !is_string($key) && !is_numeric($key) ? is_array($key) ? Json::encode($key) : (string) $key : $key;
if ($this->attribute !== null) {
$this->_editableOptions['model'] = $model;
$this->_editableOptions['attribute'] = "[{$index}]{$this->attribute}";
} elseif (empty($this->_editableOptions['name']) && empty($this->_editableOptions['model']) || !empty($this->_editableOptions['model']) && empty($this->_editableOptions['attribute'])) {
throw new InvalidConfigException("You must setup the 'attribute' for your EditableColumn OR set one of 'name' OR 'model' & 'attribute'" . " in 'editableOptions' (Exception at index: '{$index}', key: '{$strKey}').");
}
$val = $this->getDataCellValue($model, $key, $index);
if (!isset($this->_editableOptions['displayValue']) && $val !== null && $val !== '') {
$this->_editableOptions['displayValue'] = parent::renderDataCellContent($model, $key, $index);
}
$params = Html::hiddenInput('editableIndex', $index) . Html::hiddenInput('editableKey', $strKey) . Html::hiddenInput('editableAttribute', $this->attribute);
if (empty($this->_editableOptions['beforeInput'])) {
$this->_editableOptions['beforeInput'] = $params;
} else {
$output = $this->_editableOptions['beforeInput'];
$this->_editableOptions['beforeInput'] = function ($form, $widget) use($output, $params) {
return $params . ($output instanceof Closure ? call_user_func($output, $form, $widget) : $output);
};
}
if ($this->refreshGrid) {
$id = $this->grid->options['id'];
$this->_view->registerJs("kvRefreshEC('{$id}','{$this->_css}');");
}
return Editable::widget($this->_editableOptions);
}