Выполнение обрезки изображения
542932
protected function doCrop($width, $height, $x, $y)
  {
    if ($width > $this->getWidth()) {
      $width = $this->getWidth();
    }
    if ($height > $this->getHeight()) {
      $height = $this->getHeight();
    }

    list ($new_x, $new_y) = static::CalculateOffset($x, $y, $this->getWidth(), $this->getHeight(), $width, $height);

    // Прозрачность
    $new_image = imagecreatetruecolor($width, $height);
    imagealphablending($new_image, true);
    imagefill($new_image, 0, 0, imagecolorallocatealpha($new_image, 0, 0, 0, 127));
    imagesavealpha($new_image, true);

    if (!imagecopy($new_image, $this->image, 0, 0, $new_x, $new_y, $width, $height)) {
      Ex::ThrowError(Ex::CROP);
    }

    $this->image = $new_image;

    return $this->updateDimensions();
  }
1061396
private function outerCssClasses() {
		if (!isset($this->{__METHOD__})) {
			/** @var string[] $resultA */
			$resultA = [
				'admin__field field'
				/**
				 * 2015-12-11
				 * Тонкий момент.
				 * Я пришёл к выводу, что не могу опираться на селектор .field,
				 * потому что этот селектор отсутствует у полей внутри inline fieldset,
				 * а у полей внутри inline fieldset я этот селектор убрал намеренно,
				 * потому что это селектор слишком уж заточек ядром под блочные поля,
				 * и для нормальной работы в инлайновом режиме
				 * слишком много правил CSS пришлось бы переопределять.
				 * @see \Df\Framework\Form\Element\Renderer\Inline::render()
				 * https://github.com/mage2pro/core/tree/489029cab0b8be03e4a79f0d33ce9afcdec6a76c/Framework/Data/Form/Element/Renderer/Inline.php#L50
				 */
				,'df-field'
				// 2015-11-23
				// Намеренно удалил класс "field-{$this->e()->getId()}",
				// ибо он только мусорит и мной не используется.
				, $this->e()->getCssClass()
				// 2015-11-23
				// Моё добавление
				,E::getClassDfOnly($this->e())
				// 2015-11-23
				// Моё добавление.
				, $this->e()->getContainerClass()
				// 2015-11-26
				// Моё добавление.
				// Все контейнеры выпадающих списков будут иметь, например, класс «df-type-select»:
				// https://github.com/magento/magento2/blob/2.0.0/lib/internal/Magento/Framework/Data/Form/Element/Select.php#L30
				, 'df-type-' . $this->e()->getType()
				, $this->shouldLabelBeAtRight() ? 'choice' : ''
				, $this->note() ? 'with-note' : ''
				, !$this->e()->getLabelHtml() ? 'no-label' : ''
			];
			if ($this->e()->getRequired()) {
				$resultA[]= 'required';
				$resultA[]= '_required';
			}
			$this->{__METHOD__} = df_cc_s($resultA);
		}
		return $this->{__METHOD__};
	}
1001965
protected function _initAutoColumns()
    {

        //Если автоопределение колонок не включено
        if (!$this->isEnabledAutoColumns) {
            return $this;
        }

        $dataProvider = clone $this->dataProvider;
        $models = $dataProvider->getModels();

        /**
         * @var $model ActiveQuery
         */
        $model = reset($models);

        if (!$model) {
            if ($dataProvider && isset($dataProvider->query) && $dataProvider->query->modelClass) {
                $modelClass = $dataProvider->query->modelClass;
                $model = new $modelClass();
            }
        }


        if (is_array($model) || is_object($model)) {
            foreach ($model as $name => $value) {
                if ($value === null || is_scalar($value) || is_callable([$value, '__toString'])) {

                    $key = $name;
                    if (!empty($key) && strcasecmp($key, 'id')) {
                        if (substr_compare($key, 'id', -2, 2, true) === 0) {
                            $key = rtrim(substr($key, 0, -2), '_');
                        } elseif (substr_compare($key, 'id', 0, 2, true) === 0) {
                            $key = ltrim(substr($key, 2, strlen($key)), '_');
                        }
                    }

                    $keyMany = Inflector::pluralize($key);

                    $keyName = lcfirst(Inflector::id2camel($key, '_'));
                    $keyManyName = lcfirst(Inflector::id2camel($keyMany, '_'));

                    if ($model instanceof Component && $model->hasProperty($keyName)) {
                        $this->_autoColumns[(string)$name] = [
                            'attribute' => $name,
                            'format'    => 'raw',
                            'value'     => function ($model, $key, $index) use ($name, $keyName) {
                                return $model->{$keyName};
                            },
                        ];
                    } else if ($model instanceof Component && $model->hasProperty(lcfirst($keyManyName))) {
                        $this->_autoColumns[(string)$name] = [
                            'attribute' => $name,
                            'format'    => 'raw',
                            'value'     => function ($model, $key, $index) use ($name, $keyManyName) {
                                return count($model->{$keyManyName});
                            },
                        ];
                    } else {
                        $this->_autoColumns[(string)$name] = [
                            'attribute' => $name,
                            'format'    => 'raw',
                            'value'     => function ($model, $key, $index) use ($name) {
                                if (is_array($model)) {
                                    $v = $model[$name];
                                } else {
                                    $v = $model->{$name};
                                }

                                if (is_array($v)) {
                                    return implode(",", $v);
                                } else {
                                    return $v;
                                }
                            },
                        ];
                    }

                }
            }
        }

        return $this;
    }
62599
public function editAction()
    {
        /** @var Menus_Entity_Table_Menu $table */
        $table = ORM::getTable($this->plugin, 'Menu');
        /** @var Menus_Entity_Menu $menu */
        $menu = $table->find(arg('id', 'int'));

        if (is_null($menu))
        {
            return 'Такое меню не найдено.';
        }

        $req = Eresus_CMS::getLegacyKernel()->request;

        if ('POST' == $req['method'])
        {
            $menu->name = arg('name', 'word');
            $menu->caption = arg('caption', 'dbsafe');
            $menu->active = true;
            $menu->root = arg('root', 'int');
            $menu->rootLevel = arg('rootLevel', 'int');
            $menu->invisible = arg('invisible', 'int');
            $menu->expandLevelAuto = arg('expandLevelAuto', 'int');
            $menu->expandLevelMax = arg('expandLevelMax', 'int');
            $menu->dropDown = arg('dropDown', 'int');
            $menu->template = arg('template', 'dbsafe');

            $test = $table->findByName($menu->name);
            if (is_null($test) || $test->id == $menu->id)
            {
                $table->update($menu);
                HTTP::redirect('admin.php?mod=ext-menus&id=' . $menu->id);
            }
            else
            {
                ErrorMessage('Меню с таким именем уже есть');
            }
        }

        $form = new EresusForm($this->plugin->templates()->adminPath('form.html', false));
        $form->setValue('sections', $this->adminSectionBranch());
        $form->setValue('action', 'edit');
        $form->setValue('menu', $menu);
        $html = $form->compile();

        return $html;
    }
497836
private function adminRenderImagesList()
    {
        // Определяем текущую страницу списка
        $pg = arg('pg') ? arg('pg', 'int') : 1;

        $section = arg('section', 'int');

        $maxCount = $this->settings['useGroups'] ?
            $this->settings['groupsPerPage'] :
            $this->settings['itemsPerPage'];

        $startFrom = ($pg - 1) * $maxCount;

        /* @var Gallery_Entity_Table_AbstractContent $table */
        if ($this->settings['useGroups'])
        {
            $table = ORM::getTable($this, 'Group');
        }
        else
        {
            $table = ORM::getTable($this, 'Image');
        }

        $items = $table->findInSection($section, $maxCount, $startFrom, false);

        // Данные для подстановки в шаблон
        $vars = array();
        $vars['this'] = $this;
        $vars['page'] = Eresus_Kernel::app()->getPage();
        $vars['Eresus'] = Eresus_CMS::getLegacyKernel();
        $vars['sectionId'] = arg('section', 'int');
        $vars['items'] = $items;

        /* Шаблоны адресов действий */
        $vars['urlEdit'] = str_replace('&', '&amp;',
            Eresus_Kernel::app()->getPage()->url(array('id' => '%s')));
        $vars['urlToggle'] = str_replace('&', '&amp;',
            Eresus_Kernel::app()->getPage()->url(array('toggle' => '%s')));
        $vars['urlCover'] = str_replace('&', '&amp;',
            Eresus_Kernel::app()->getPage()->url(array('cover' => '%s')));
        $vars['urlUp'] = str_replace('&', '&amp;',
            Eresus_Kernel::app()->getPage()->url(array('up' => '%s')));
        $vars['urlDown'] = str_replace('&', '&amp;',
            Eresus_Kernel::app()->getPage()->url(array('down' => '%s')));
        $vars['urlDelete'] = str_replace('&', '&amp;',
            Eresus_Kernel::app()->getPage()->url(array('delete' => '%s')));

        $totalPages = ceil($table->countInSection($section) / $maxCount);

        if ($totalPages > 1)
        {
            $pager = new PaginationHelper($totalPages, $pg,
                Eresus_Kernel::app()->getPage()->url(array('pg' => '%s')));
            $vars['pager'] = $pager->render();
        }
        else
        {
            $vars['pager'] = '';
        }

        /* Создаём экземпляр шаблона */
        if ($this->settings['useGroups'])
        {
            $tmpl = $this->templates()->admin('image-grouped-list.html');
            // Изображения вне групп
            $table = ORM::getTable($this, 'Album');
            /* @var Gallery_Entity_Album $album */
            $album = $table->find($section);
            $vars['orphans'] = $album->getOrphans();
        }
        else
        {
            $tmpl = $this->templates()->admin('image-list.html');
        }

        // Компилируем шаблон и данные
        $html = $tmpl->compile($vars);

        return $html;
    }
247344
public function fire() {
        $elements = [];
        //добавим геттеры в контейнеры
        //добавим сеттеры в контейнеры
        foreach (Register::$containers as $container) {
            $this->info($container);
            foreach ($this->form_element_methods_get as $method) {
                $params = $this->getMethodParams($container, $method);
                $this->putPhpDoc($container, 'string', $method, $params);
            }
            foreach ($this->form_element_methods_set as $method) {
                $params = $this->getMethodParams($container, $method);
                $this->putPhpDoc($container, $container, $method, $params);
            }
        }
        //добавим элементы в контейнеры
        foreach (Register::$elements as $name => $data) {
            $class = Arr::get($data, 'class');
            foreach (Register::$containers as $container) {
                $params = $this->getMethodParams($class, 'laraform');
                $method = \Illuminate\Support\Str::camel('put_' . $name);
                $this->putPhpDoc($container, $class, $method, $params);
            }
            foreach ($this->form_element_methods_get as $method) {
                $params = $this->getMethodParams($class, $method);
                $this->putPhpDoc($class, 'string', $method, $params);
            }
            foreach ($this->form_element_methods_set as $method) {
                $params = $this->getMethodParams($class, $method);
                $this->putPhpDoc($class, $class, $method, $params);
            }
        }
        $data    = $this->ret;
        $content = \View::make(
            'larakit::!.quickform.ide-helper', [
                'data' => $data,
                'tab'  => "\t",
            ]
        );
        file_put_contents(base_path() . '/_ide_helper_laraform.php', $content);
        $this->info('IDE helper сгенерирован для ' . HelperText::plural_with_number(count($this->classes), 'элемента', 'элементов', 'элементов'));
    }
1317282
protected function adaptGeoPie()
    {
        //Выбираем уникальные id стран/областей
        $key_array = [];

        //Результирующий массив с id и названием страны/области
        $idArray = [];

        foreach ($this->data['data'] as $value) {
            //Проверяем есть ли такое значение в массиве
            if (!in_array($value['dimensions'][0]['id'], $key_array)) {
                //Если нет то заносим в массив для поиска и в результирующий массив
                $key_array[] = $value['dimensions'][0]['id'];
                $idArray[] = $value['dimensions'][0];
            }
        }

        //Колличество уникальных стран/областей
        $cnt = count($idArray);

        //Массивы для построения графика
        $dataArray = [];            // страны/области
        $drilldownArray = [];      // области/города

        for ($i = 0; $i < $cnt; $i++) {
            $dataArray[$i] = [
                'name'      => $idArray[$i]['name'],
                'y'         => 0,
                'drilldown' => $idArray[$i]['name'],
            ];

            $drilldownArray[$i] = [
                'name' => $idArray[$i]['name'],
                'id'   => $idArray[$i]['name'],
                'data' => [],
            ];

            //Перебираем исходный массив и выбираем нужные данные
            foreach ($this->data['data'] as $item) {

                //Если id страны/области совпадает
                if ($item['dimensions'][0]['id'] == $idArray[$i]['id']) {
                    //Добавляем кол-во визитов в общий список страны/области
                    $dataArray[$i]['y'] += $item['metrics'][0];

                    //Если нет названия у области/города
                    if ($item['dimensions'][1]['name']) {
                        $region = $item['dimensions'][1]['name'];
                    } else {
                        $region = 'Не определено';
                    }

                    //Добавляем данные по области/городу
                    $drilldownArray[$i]['data'][] = [
                        $region,
                        $item['metrics'][0],
                    ];
                }
            }
        }

        $this->adaptData = [
            'dataArray'      => json_encode($dataArray, JSON_UNESCAPED_UNICODE),
            'drilldownArray' => json_encode($drilldownArray,
                JSON_UNESCAPED_UNICODE),
        ];
    }
492525
final protected function _process() {
		/**
		 * 2016-08-22
		 * Помимо добавления поля в таблицу «customer_entity» надо ещё добавить атрибут,
		 * иначе данные не будут сохраняться:
		 *		$attribute = $this->getAttribute($k);
		 *		if (empty($attribute)) {
		 *			continue;
		 *		}
		 * https://github.com/magento/magento2/blob/2.1.0/app/code/Magento/Eav/Model/Entity/AbstractEntity.php#L1262-L1265
		 */
		if ($this->v('1.7.4')) {
			df_eav_setup()->addAttribute('customer', UpgradeSchema::F__DF, [
				'input' => 'text'
				,'label' => 'Mage2.PRO'
				,'position' => 1000
				,'required' => false
				,'sort_order' => 1000
				,'system' => false
				,'type' => 'static'
				,'visible' => false
			]);
		}
	}
42313
public function startImport(array &$form, FormStateInterface $form_state) {
        // Выполняет стандартную валидацию полей формы и добавляет примечания об ошибках.
        ConfigFormBase::validateForm($form, $form_state);

        if (!$form_state->getValue('validate_error')) {
            $config = $this->config('site_geo.import');

            $fid = $config->get('fid');
            $skip_first_line = $config->get('skip_first_line');
            $delimiter = $config->get('delimiter');
            $enclosure = $config->get('enclosure');
            $chunk_size = $config->get('chunk_size');
            $plugin_id = $form_state->getValue('import_plugin');

            if ($plugin_id != "") {
                $import = new SiteGeoCSVBatchImport($plugin_id, $fid, $skip_first_line, $delimiter, $enclosure, $chunk_size);
                $import->setBatch();
            }
        }
    }
1251289
static function add($action, $user = NULL, $object = NULL, $target = NULL, $attrs = array())
	{
//		print_dd(compact('object', 'user', 'target'));
		if(!$target)
			$target		= object_property($object, 'target');

		$actor		= bors_load_ex($action, NULL, compact('object', 'user', 'attrs'));

		$category	= object_property($target, 'category');
		$folder		= object_property($target, 'folder');

		$data = array(
			'handler_class_name'=> $action,
			'color' => $actor->color(),

			'object_class_name'	=> object_property($object, 'class_name'),
			'object_id'			=> object_property($object, 'id'),
			'target_class_name'	=> object_property($target, 'class_name'),
			'target_id'			=> object_property($target, 'id'),

			'category_class_name' => object_property($category, 'class_name'),
			'category_id'		=> object_property($category, 'id'),
			'folder_class_name'	=> object_property($folder, 'class_name'),
			'folder_id'			=> object_property($folder, 'id'),
		);

		if(empty($attrs['personal_only']) && ($title = $actor->public_title()))
		{
			$data['title']	= $title;
			$data['text']	= $actor->public_text();
			// Кому идёт сообщение. 0, если публичное.
			$data['user_class_id']	= 0;
			$data['user_id'] = 0;
			bors_new(config('default_events_class', __CLASS__), $data);
		}

		if($user && ($title = $actor->personal_title()))
		{
			$data['title']	= $title;
			$data['text']	= $actor->personal_text();
			// Кому идёт сообщение. 0, если публичное.
			$data['user_class_id']	= $user->class_id();
			$data['user_id']		= $user->id();
			bors_new(config('default_events_class', __CLASS__), $data);
		}
	}
917885
public function delete()
    {
        // удаление ссылок с удаляемого материала
        $r = $this->getDbConnection()->query("select B.name, B.len, B.type, B.pseudo_type from types A, types_fields B where A.alias='".$this->table."' and B.id=A.id and (B.type=".FIELD_LINKSET." or B.type=".FIELD_MATSET.")");
        while ($f = $r->fetch(\PDO::FETCH_NUM)) {
            $tbl = ObjectDefinition::get_table($f[2], $f[1], $this->objectDefinition->id, $f[3]);
            if ($f[2] != FIELD_LINKSET && $f[3] != PSEUDO_FIELD_TAGS) {
            	$r1 = $this->getDbConnection()->query("select dest from ".$this->table."_".$tbl."_".$f[0]." where id=".$this->id);
            	while ($f1 = $r1->fetch(\PDO::FETCH_NUM)) {
            	   $m = Material::getById($f1[0], $f[1], $tbl);
            	   $m->delete();
            	}
            }
            $this->getDbConnection()->executeQuery("delete from ".$this->table."_".$tbl."_"."$f[0] where id=".$this->id);
        }
        
        // удаление ссылок на этот материал
        if (property_exists($this, 'idcat') && $this->idcat >= 0) {
        	$r = $this->getDbConnection()->query("select A.alias, B.name, B.type from types A, types_fields B where B.id=A.id and B.len=".$this->idcat." and (B.type=".FIELD_LINK." or B.type=".FIELD_LINKSET.")");
        	while ($f = $r->fetch(\PDO::FETCH_NUM)) {
              if ($f[2] == FIELD_LINK) {
        	    $this->getDbConnection()->executeQuery("update $f[0] set $f[1]=0 where $f[1]=".$this->id);
        	  } else {
        	    $this->getDbConnection()->executeQuery("delete from $f[0]"."_".$this->table."_"."$f[1] where dest=".$this->id);
        	  }
        	}
        } else {
        	$r = $this->getDbConnection()->query("select A.alias, B.name from types A, types_fields B where B.id=A.id and B.len = ".$this->objectDefinition->id." and B.type=".FIELD_MATSET);
            while ($f = $r->fetch(\PDO::FETCH_NUM)) {
        	  $this->getDbConnection()->executeQuery("delete from $f[0]"."_".$this->table."_"."$f[1] where dest=".$this->id);
        	}
        }
                
        // удаление самого материала
        $this->getDbConnection()->executeQuery("delete from ".$this->table." where id=".$this->id);
        
    }
96412
public function boot() {
        foreach(Boot::$boots as $dir_boot) {
            $dir_boot = str_replace('\\', '/', $dir_boot);
            $files    = rglob('*.php', 0, $dir_boot);
            foreach($files as $path) {
                include_once $path;
            }
        }
        //регистрация политик моделей
        //        foreach(Boot::policies_model() as $model_class => $policy_class) {
        //            $gate->policy($model_class, $policy_class);
        //        }
        //регистрация путей шаблонов для пространств имен
        foreach(Boot::$langs as $alias => $pathes) {
            foreach($pathes as $path) {
                $this->loadTranslationsFrom($path, $alias);
                $this->publishes([
                    $path => resource_path('lang/vendor/' . $alias),
                ]);
            }
        }
        foreach(Boot::view_paths() as $v) {
            $namespace = Arr::get($v, 'namespace');
            $view_path = Arr::get($v, 'view_path');
            $this->loadViewsFrom($view_path, $namespace);
        }
        //регистрация команд
        $this->commands(Boot::commands());
        foreach(Boot::$observers as $model_class => $observers) {
            if('_USER_' == $model_class) {
                $model_class = config('auth.providers.users.model');
            }
            $instance = new $model_class;
            
            foreach($observers as $observer) {
                foreach($instance->getObservableEvents() as $event) {
                    if(method_exists($observer, $event)) {
                        $model_class::registerModelEvent($event, $observer . '@' . $event);
                    }
                }
            }
        }
    }
1055287
function get_external() {
        if (!count($this->js_external))
            return '';
        //если не надо собирать все в один билд-файл
        if (!$this->get_need_build_external()) {
            $js_code = '';
            foreach ($this->js_external as $js => $_js) {
                $condition = \Arr::get($_js, 'condition');
                //если надо подключать все по отдельности
                $js_code .= $this->get_link($js, $condition) . "\n";
            }
            return $js_code;
        } else {
            $build = array();
            $no_build = array();
            $js_code = '';
            foreach ($this->js_external as $js => $_js) {
                $condition = \Arr::get($_js, 'condition');
                if (\Arr::get($_js, 'no_build')) {
                    $no_build[$condition][] = $js;
                } else {
                    $build[$condition][] = $js;
                }
            }
            foreach ($no_build as $condition => $js) {
                $condition = \Arr::get($_js, 'condition');
                foreach ($js as $url) {
                    $js_code .= $this->get_link($url, $condition) . "<!-- no build -->" . PHP_EOL;
                }
            }
            foreach ($build as $condition => $js) {
                $build_name = $this->make_file_name($this->js_external, 'js/external' . ($condition ? '/' . $condition : ''), 'js');
                $build_file = Helper::build_file($build_name);
                if (!file_exists($build_file)) {
                    //соберем билд в первый раз
                    $build = array();
                    foreach ($js as $url) {
                        $_js = $this->get_source($url);
                        $_js = $this->prepare($_js, $this->get_need_min_external());
                        $build[] = $_js;
                    }
                    //если требуется собирать инлайн скрипты в один внешний файл
                    $this->require_build($build_name, implode("\n", $build));
                }
                $js_code .= $this->get_link(Helper::build_url($build_name), $condition) . PHP_EOL;
            }
            //$build_name = $this->make_file_name($this->js_inline, 'js/onload', 'js');
            return $js_code;
        }
    }
878191
public function add($item)
    {
        if (!$this->index)
        {
            $this->index();
        }

        $result = false;
        /* При добавлении свойство id должно устанавливаться БД */
        if (isset($item['id']))
        {
            unset($item['id']);
        }
        /* Если не указан родитель - добавляем в корень */
        if (!isset($item['owner']))
        {
            $item['owner'] = 0;
        }
        $item['created'] = gettime('Y-m-d H:i:s');
        $item['updated'] = $item['created'];
        $item['options'] = isset($item['options']) ? trim($item['options']) : '';
        $item['options'] = empty($item['options']) ?
            '' : encodeOptions(text2array($item['options'], true));

        if (!isset($item['position']) || !$item['position'])
        {
            $item['position'] = isset($this->index[$item['owner']]) ?
                count($this->index[$item['owner']]) : 0;
        }
        if (Eresus_CMS::getLegacyKernel()->db->insert($this->table, $item))
        {
            $result = $this->get(Eresus_CMS::getLegacyKernel()->db->getInsertedId());
        }
        return $result;
    }
338344
public function updateSettings()
    {
        /*
         * Загрузка логотипа
         */
        if (isset($_FILES['logoImage']['tmp_name']) &&
            is_uploaded_file($_FILES['logoImage']['tmp_name']))
        {
            if (substr($_FILES['logoImage']['name'], -3) == 'png')
            {
                upload('logoImage', $this->getDataDir() .'/logo.png');
            }
            else
            {
                Eresus_Kernel::app()->getPage()
                    ->addErrorMessage('Логотип должен быть в формате PNG');
            }
        }

        try
        {
            $this->templates()->clientWrite('image-list.html', arg('tmplImageList'));
            $this->templates()->clientWrite('image-list.html', arg('tmplImageList'));
            $this->templates()->clientWrite('image-grouped-list.html', arg('tmplImageGroupedList'));
            $this->templates()->clientWrite('image.html', arg('tmplImage'));
            $this->templates()->clientWrite('popup.html', arg('tmplPopup'));
        }
        catch (Exception $e)
        {
            throw new RuntimeException(
                'Не удалось изменить один или несколько шаблонов. Подробная информация доступна в журнале.',
                0,
                $e);
        }

        parent::updateSettings();
    }
106120
function __content() // пока не используется, т.к. более древнее в base_object
	{
		if(($render_class = $this->render_class()))
		{
			if($render_class == 'self')
				$render = $this;
			elseif(!($render = bors_load($render_class)))
				debug_exit("Can't load global render engine {$render_class} for object '{$this}'");

			return $render->rendering($this);
		}
	}
957892
protected function renderDataView()
    {
        $data = [];
        if ( !empty( $this->options['data'] ) ) {
            $data = $this->options['data'];
        }
        $basic_columns = [];
        if ( !empty( $this->options['basic_columns'] ) ) {
            $basic_columns = $this->options['basic_columns'];
        }

        if ( empty( $this->options['model'] ) ) {
            throw new HttpException(200, 'Ошибка виджета. Не передана модель для валидации записываемых данных.');
        }
        $model = $this->options['model'];

        if ( empty( $this->options['action_write'] ) ) {
            throw new HttpException(200, 'Ошибка виджета. Не передано имя метода записи данных (action).');
        }
        $action_write = $this->options['action_write'];

        $provider = new ArrayDataProvider([
            'allModels' => $data,
        ]);

        if ( empty( $data[0] ) ) {
            // если нет первого ряда - это xml custom-файл с вложенными узлами, дерево,
            // такой массив нет возможности вывести с помощью GridView
            // просто выведем его как есть
            echo "<pre>";
            return print_r($data);
        }

        // создадим динамическую модель на столько реквизитов сколько колонок в отпарсенном файле
        // в ней пользователь произведет свой выбор
        $header_model = $this->createDynamicModel( $data[0] );

        return $this->render('data',
            ['model' => $data,
                'header_model' => $header_model,
                // список колонок для выбора
                'basic_column' => $basic_columns,
                'write_model' => $model,
                'action_write' => $action_write,
                'dataProvider' => $provider]);
    }