schmunk42\giiant\generators\crud\providers\extensions\EditableProvider::attributeEditable PHP Method

attributeEditable() public method

public attributeEditable ( $attribute ) : null | string
return null | string
    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;
        }
    }