public function actionIndex()
 {
     Yii::$app->controller->enableCsrfValidation = false;
     $success = false;
     $path = false;
     if (Yii::$app->request->isPost) {
         $model_id = (int) Yii::$app->request->post('model_id');
         $model_name = Yii::$app->request->post('model_name');
         $option_id = (int) Yii::$app->request->post('option_id');
         //  Находим Options
         /**
          * @var $option Options
          */
         $option = Options::find()->where(['model_id' => $model_id, 'model' => $model_name, 'option_id' => $option_id])->one();
         // Удаляем файл и запись в Options
         if ($option) {
             if (unlink($_SERVER['DOCUMENT_ROOT'] . $option->value)) {
                 if ($option->delete()) {
                     $success = true;
                     $path = $option->value;
                 }
             }
         }
         //  Находим ChildOptions если есть
         /**
          * @var $option ChildOptions
          */
         $child_option = ChildOptions::find()->where(['model_id' => $model_id, 'model' => $model_name, 'option_id' => $option_id])->one();
         // Если находим - удаляем файл и запись в ChildOptions
         if ($child_option) {
             if (unlink($_SERVER['DOCUMENT_ROOT'] . $child_option->value)) {
                 if ($child_option->delete()) {
                     $success = true;
                     $path = $child_option->value;
                 }
             }
         }
         return Json::encode(['success' => $success, 'path' => $path]);
     }
 }
 /**
  * Получаем значение параметра конкретной модели по алиасу
  *
  * @param $alias                string string
  * @param $relations_model_name string
  *
  * @return mixed
  */
 public function getChildOptionValueByAlias($alias, $relations_model_name = 'Cats-Items')
 {
     /**
      * @var $optionList OptionsList
      * @var $option     Options
      */
     $optionList = OptionsList::find()->where(['alias' => $alias])->one();
     $option = ChildOptions::find()->where(['model_id' => $this->owner->id, 'model' => $relations_model_name, 'option_id' => $optionList->id])->one();
     if (in_array($optionList->type->alias, MyHelper::TYPES_WITH_PRESET_ARRAY)) {
         $return = $optionList->preset->value($option->value);
     } elseif (in_array($optionList->type->alias, MyHelper::TYPES_WITH_MULTIPLE_PRESET_ARRAY)) {
         $optionM = ChildOptionMultiple::find()->where(['value' => $option->value])->one();
         $return = $optionList->preset->value($optionM->value);
     } else {
         $return = $option->value;
     }
     return $return;
 }
 /** Render widget */
 public function run()
 {
     $model = $this->behavior->owner;
     $model_name = MyHelper::modelFromNamespace($this->behavior->model_name);
     $parent_model_name = MyHelper::modelFromNamespace($this->behavior->parent_model_name);
     $parent_relation = $this->behavior->parent_relation;
     if ($model->{$parent_relation}) {
         $cat_id = $model->{$parent_relation}->id;
         /**
          * Формируем поля для параметров
          *
          * @var $optionList \porcelanosa\yii2options\models\OptionsList
          */
         if ($this->behavior->getChildOptionsList($cat_id) and is_array($this->behavior->getChildOptionsList($cat_id))) {
             foreach ($this->behavior->getChildOptionsList($cat_id) as $optionList) {
                 $option = ChildOptions::findOne(['model' => $parent_model_name . '-' . $model_name, 'model_id' => $model->id, 'option_id' => $optionList->id]);
                 $option_name = trim(str_replace(' ', '_', $optionList->alias));
                 $value = $this->behavior->getChildOptionValueById($optionList->id);
                 $option_type_alias = $optionList->type->alias;
                 if ($option_type_alias == 'boolean') {
                     $this->options_string .= $this->render('@vendor/porcelanosa/yii2-options/views/_partials/_boolean', ['option_name' => $option_name, 'optionList' => $optionList, 'value' => $value]);
                 }
                 if ($option_type_alias == 'textinput') {
                     $this->options_string .= $this->render('@vendor/porcelanosa/yii2-options/views/_partials/_textinput', ['option_name' => $option_name, 'optionList' => $optionList, 'value' => $value]);
                 }
                 if ($option_type_alias == 'textarea') {
                     $textarea = $option ? ChildRichTexts::find()->where(['option_id' => $option->id])->one() : null;
                     $this->options_string .= $this->render('@vendor/porcelanosa/yii2-options/views/_partials/_textarea', ['option_name' => $option_name, 'optionList' => $optionList, 'richTextValue' => $textarea != null ? $textarea->text : '']);
                 }
                 if ($option_type_alias == 'richtext') {
                     $richText = $option ? ChildRichTexts::find()->where(['option_id' => $option->id])->one() : null;
                     $this->options_string .= $this->render('@vendor/porcelanosa/yii2-options/views/_partials/_rich_text', ['option_name' => $option_name, 'optionList' => $optionList, 'richTextValue' => $richText != null ? $richText->text : '']);
                 }
                 if ($option_type_alias == 'dropdown') {
                     // получаем фабрики
                     $status_preset_values = OptionPresetValues::find()->where(['preset_id' => $optionList->preset->id])->orderBy('sort')->all();
                     // формируем массив, с ключем равным полю 'id' и значением равным полю 'name'
                     $status_preset_items = ArrayHelper::map($status_preset_values, 'id', 'value');
                     $status_preset_items = ArrayHelper::merge(['null' => 'Выберите ' . mb_strtolower($optionList->name)], $status_preset_items);
                     $this->options_string .= $this->render('@vendor/porcelanosa/yii2-options/views/_partials/_dropdown', ['option_name' => $option_name, 'optionList' => $optionList, 'value' => $value, 'status_preset_items' => $status_preset_items]);
                 }
                 if ($option_type_alias == 'radiobuton_list') {
                     // получаем фабрики
                     $status_preset_values = OptionPresetValues::find()->where(['preset_id' => $optionList->preset->id])->orderBy('sort')->all();
                     // формируем массив, с ключем равным полю 'id' и значением равным полю 'name'
                     $status_preset_items = ArrayHelper::map($status_preset_values, 'id', 'value');
                     $this->options_string .= '<label>&nbsp;' . $optionList->name . '</label>' . Html::radioList($option_name, $value ? $value : null, $status_preset_items, ['id' => $option_name, 'class' => 'form-control']);
                 }
                 if ($option_type_alias == 'dropdown-multiple') {
                     //  получаем список значений для мульти селектед
                     $multipleValuesArray = $this->behavior->getChildOptionMultipleValueByOptionId($option->id);
                     // получаем фабрики
                     $status_preset_values = OptionPresetValues::find()->where(['preset_id' => $optionList->preset->id])->orderBy('sort')->all();
                     // формируем массив, с ключем равным полю 'id' и значением равным полю 'name'
                     $status_preset_items = ArrayHelper::map($status_preset_values, 'id', 'value');
                     $this->options_string .= $this->render('@vendor/porcelanosa/yii2-options/views/_partials/_dropdown_multiple', ['option_name' => $option_name, 'optionList' => $optionList, 'multipleValuesArray' => $multipleValuesArray, 'status_preset_items' => $status_preset_items]);
                 }
                 /*  Список checkboxes  */
                 if ($option_type_alias == 'checkboxlist-multiple') {
                     //  получаем список значений для мульти селектед
                     $multipleValuesArray = $option ? $this->behavior->getChildOptionMultipleValueByOptionId($option->id) : [];
                     // получаем фабрики
                     $status_preset_values = OptionPresetValues::find()->where(['preset_id' => $optionList->preset->id])->orderBy('sort')->all();
                     // формируем массив, с ключем равным полю 'id' и значением равным полю 'name'
                     $status_preset_items = ArrayHelper::map($status_preset_values, 'id', 'value');
                     $this->options_string .= $this->render('@vendor/porcelanosa/yii2-options/views/_partials/_checkboxlist_multiple', ['option_name' => $option_name, 'optionList' => $optionList, 'multipleValuesArray' => $multipleValuesArray, 'status_preset_items' => $status_preset_items]);
                 }
                 /*  IMAGE Изображение */
                 if ($option_type_alias == 'image') {
                     $this->options_string .= $this->render('@vendor/porcelanosa/yii2-options/views/_partials/_image', ['option_name' => $option_name, 'optionList' => $optionList, 'value' => $value, 'this_widget' => $this, 'behavior' => $this->behavior]);
                 }
             }
         }
         $view = $this->getView();
         OptionsAsset::register($view);
         $this->options['id'] = 'child-opt-widget-' . $this->model->id;
         $this->options['class'] = 'child-options';
     }
     return $this->render('optionsWidget', ['options_string' => $this->options_string]);
 }