public static function editable(ActiveRecord $model, $attribute, $editable_type = Editable::INPUT_TEXT, $options = []) { /* @var Module $module */ $module = \Yii::$app->getModule('ycm-utils'); // Init config $config = ['attribute' => $attribute, 'class' => EditableColumn::className(), 'editableOptions' => ['inputType' => $editable_type, 'ajaxSettings' => ['url' => Url::to(['/ycm/model/editable', 'name' => $module->ycm->getModelName($model)])]]]; // Add inner widget config if available if (isset(self::$widgetEditableTypeMap[$editable_type])) { $typeMethod = self::$widgetEditableTypeMap[$editable_type]; $config['editableOptions']['options'] = self::$typeMethod($model, $attribute); } // Add relation config if available if ($model->getRelation($attribute, false)) { $config = ArrayHelper::merge($config, self::relation($model, $attribute), self::editableRelationConfig($model, $attribute)); } // Check from db selectable type if ($choices = ModelHelper::getBooleanChoices($model, $attribute)) { $config = ArrayHelper::merge($config, ['editableOptions' => ['options' => ['data' => $choices], 'displayValueConfig' => $choices]], self::selectWidgetFilterConfig($choices)); } elseif ($choices = ModelHelper::getEnumChoices($model, $attribute)) { $config = ArrayHelper::merge($config, ['editableOptions' => ['inputType' => Editable::INPUT_SELECT2, 'options' => ['data' => $choices], 'displayValueConfig' => $choices]], self::selectWidgetFilterConfig($choices)); } return ArrayHelper::merge($config, $options); }