public function attributeEditable($attribute)
{
$this->generator->requires[] = '"kartik-v/yii2-editable": "@dev"';
$primaryKey = implode('_', $this->generator->getTableSchema()->primaryKey);
$column = $this->generator->getTableSchema()->columns[$attribute];
/*
* search opts... method
*/
$modelClass = $this->generator->modelClass;
$optsFunc = 'opts' . str_replace('_', '', $attribute);
$optsCamelFunc = 'opts' . str_replace(' ', '', ucwords(implode(' ', explode('_', $attribute))));
$useOptsFunc = false;
if (method_exists($modelClass::className(), $optsFunc)) {
$useOptsFunc = $optsFunc;
} elseif (method_exists($modelClass::className(), $optsCamelFunc)) {
$useOptsFunc = $optsCamelFunc;
}
$inputType = $this->getInputType($column);
$relation = $this->generator->getRelationByColumn($this->generator->modelClass, $column);
if ($relation) {
$relModelStatic = $relation->modelClass . 'Static';
}
if ($relation && !$relation->multiple && method_exists($relModelStatic, 'getListData')) {
$relPk = key($relation->link);
$relName = $this->generator->getModelNameAttribute($relation->modelClass);
return <<<EOS
[
'attribute' => '{$attribute}',
'format' => 'raw',
'value' => Editable::widget([
'name' => '{$attribute}',
'asPopover' => true,
'value' => \$model->{$attribute},
'header' => \$model->getAttributeLabel('{$attribute}'),
'inputType' => Editable::INPUT_LIST_BOX,
'size' => 'md',
'options' => [
'class' => 'form-control',
'placeholder' => 'Enter ...'
],
'ajaxSettings' => [
'url' => Url::to(['editable', '{$primaryKey}' => \$model->primaryKey]),
],
'data' => {$relation->modelClass}Static::getListData(),
'displayValueConfig' => {$relation->modelClass}Static::getListData(true),
]),
]
EOS;
} elseif ($relation && !$relation->multiple) {
$relPk = key($relation->link);
$relName = $this->generator->getModelNameAttribute($relation->modelClass);
return <<<EOS
[
'attribute' => '{$attribute}',
'format' => 'raw',
'value' => Editable::widget([
'name' => '{$attribute}',
'asPopover' => true,
'value' => \$model->{$attribute},
'header' => \$model->getAttributeLabel('{$attribute}'),
'inputType' => Editable::INPUT_LIST_BOX,
'size' => 'md',
'options' => [
'class' => 'form-control',
'placeholder' => 'Enter ...'
],
'ajaxSettings' => [
'url' => Url::to(['editable', '{$primaryKey}' => \$model->primaryKey]),
],
'data' => \\yii\\helpers\\ArrayHelper::map({$relation->modelClass}::find()->all(), '{$relPk}', '{$relName}'),
'displayValueConfig' => \\yii\\helpers\\ArrayHelper::map({$relation->modelClass}::find()->all(), '{$relPk}', '{$relName}'),
]),
]
EOS;
} elseif ($useOptsFunc) {
return <<<EOS
[
'attribute' => '{$attribute}',
'format' => 'raw',
'value' => Editable::widget([
'name' => '{$attribute}',
'asPopover' => true,
'value' => \$model->{$attribute},
'header' => \$model->getAttributeLabel('{$attribute}'),
'inputType' => Editable::INPUT_LIST_BOX,
'size' => 'md',
'options' => [
'class' => 'form-control',
'placeholder' => 'Select ...'
],
'ajaxSettings' => [
'url' => Url::to(['editable', '{$primaryKey}' => \$model->primaryKey]),
],
'data' => {$modelClass}::{$useOptsFunc}(),
'displayValueConfig' => {$modelClass}::{$useOptsFunc}(),
]),
]
EOS;
} else {
return <<<EOS
[
'attribute' => '{$attribute}',
'format' => 'raw',
'value' => Editable::widget([
'name' => '{$attribute}',
'asPopover' => true,
'value' => \$model->{$attribute},
'header' => \$model->getAttributeLabel('{$attribute}'),
'inputType' => {$inputType},
'size' => 'md',
'options' => [
'class' => 'form-control',
'placeholder' => 'Select ...'
],
'ajaxSettings' => [
'url' => Url::to(['editable', '{$primaryKey}' => \$model->primaryKey]),
],
]),
]
EOS;
}
}