Просмотр созданных бекапов баз данных
356831
public function actionClearLogs()
    {
        $deleted = LogDbTargetModel::deleteAll([
            '<=', 'log_time', \Yii::$app->formatter->asTimestamp(time()) - (int) \Yii::$app->logDbTargetSettings->storeLogsTime
        ]);

        $this->stdout('storeLogsTime: ' . \Yii::$app->logDbTargetSettings->storeLogsTime . "\n");
        $this->stdout('Clear logs: ' . $deleted . "\n");

        \Yii::info(\Yii::t('skeeks/logdb/app', 'The number of remote logging') . ": " . $deleted);
    }
117529
public function start()
    {
        $file_info = (new FileToken($this->dic))->getFileInfo($this->request->get('token'));

        if (isset($file_info['errors'])) {
            $this->response->setData($file_info);
            $this->response->send();
        }

        $filepath = SettingsFile::FILE_FOLDER . $file_info['data']['path'];

        if (is_readable($filepath) && is_file($filepath)) {
            $response = new BinaryFileResponse($filepath);
            $response->headers->set('Content-type', mime_content_type($filepath));
            $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $file_info['data']['name']);
            $response->send();
        } else {
            $this->response->setData(Response::error404('Файл не найден'));
            $this->response->send();
        }
    }
552593
public function run() {
		$this->resetParser();
		if(function_exists('pcntl_signal')) {
			if(! $this->signal_handlers_installed) {
				pcntl_signal(SIGTERM, array($this, 'handleSignal'), false);
				pcntl_signal(SIGINT, array($this, 'handleSignal'), false);
				pcntl_signal(SIGHUP, array($this, 'handleSignal'), false);
				pcntl_signal(SIGUSR1, array($this, 'handleSignal'), false);
			}
			pcntl_signal_dispatch();
			// Следующее нужно, если обработчик сигнала надумал нас отключить
			if($this->disconnect) {
				return $this->result = 0; // Если мы сами отключились, то это можно считать успехом по определению
			}
		}
		
		if(!$this->socket = @ socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) {
			$this->result = socket_last_error($this->socket);
			$errstr = socket_strerror($this->result);
			@ socket_clear_error($this->socket);
			$this->log("error {$this->result}: $errstr", PHP_COMPONENT_MESSAGE_ERROR, true);
			return $this->result;
		}
		
		if(! @ socket_connect($this->socket, $this->hostname, $this->port)) {
			$this->result = socket_last_error($this->socket);
			$errstr = socket_strerror($this->result);
			@ socket_clear_error($this->socket);
			$this->log("error {$this->result}: $errstr", PHP_COMPONENT_MESSAGE_ERROR, true);
			@ socket_close($this->socket);
			return $this->result;
		}
		
		$this->send('<stream:stream xmlns="jabber:component:accept" xmlns:stream="http://etherx.jabber.org/streams" to="' . $this->component_name . '">');
		
		socket_set_nonblock($this->socket);
		
		while(true) {
			$read = array($this->socket);
			$write = $except = NULL;
			
			if(($socket = @ socket_select($read, $write, $except, 1)) === false) {
				if(function_exists('pcntl_signal_dispatch')) {
					pcntl_signal_dispatch();
				}
				@ socket_close($this->socket);
				return $this->result;
			}
			
			if($socket === 0) {
				if(function_exists('pcntl_signal_dispatch')) {
					pcntl_signal_dispatch();
				}
				$this->checkTimers();
				continue;
			}
			
			if(($buf = @ socket_read($this->socket, 1024, PHP_BINARY_READ)) === false) {
				if(function_exists('pcntl_signal_dispatch')) {
					pcntl_signal_dispatch();
				}
				if(($this->result = socket_last_error($this->socket)) === 4) {
					@ socket_clear_error($this->socket);
					$this->result = 0;
					break; // корректное отключение
				}
				if(($this->result = socket_last_error($this->socket)) === 11) {
					continue; // системный вызов прерван по сигналу
				}
				$errstr = socket_strerror($this->result);
				$this->log("error {$this->result}: $errstr", PHP_COMPONENT_MESSAGE_ERROR, true);
				@ socket_clear_error($this->socket);
				@ socket_close($this->socket);
				return $this->result;
			}
			if($buf == '') {
				// Не совсем понятно, почему при закрытии соединения сервером не генерируется никакая ошибка
				// Возможно, это некорректный способ определить, отключили ли нас, надо ещё уточнить
				$this->log('the remote server has dropped the connection', PHP_COMPONENT_MESSAGE_ERROR, true);
				return 104; // код ошибки connection reset by peer
			}
			$this->feed($buf);
			// Следующее сработает, если мы отключились в обработчике некоторой станзы
			if($this->disconnect) {
				$this->result = 0;
				break;
			}
		}
		
		@ socket_close($this->socket);
		return $this->result;
	}
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);
        
    }
273973
private function edit()
    {
        $Eresus = Eresus_CMS::getLegacyKernel();
        $item = $Eresus->db->selectItem($this->table['name'], "`id`='" . arg('id') . "'");
        $item['section'] = explode('|', $item['section']);
        $sections = $this->menuBranch();
        array_unshift($sections[0], 'ВСЕ РАЗДЕЛЫ');
        array_unshift($sections[1], 'all');
        $form = array(
            'name' => 'formEdit',
            'caption' => 'Изменить баннер',
            'width' => '95%',
            'fields' => array(
                array('type' => 'hidden', 'name' => 'update', 'value' => $item['id']),
                array('type' => 'edit', 'name' => 'caption', 'label' => '<b>Заголовок</b>',
                    'width' => '100%', 'maxlength' => '255', 'pattern' => '/.+/',
                    'errormsg' => 'Заголовок не может быть пустым!'),
                array('type' => 'listbox', 'name' => 'section', 'label' => '<b>Разделы</b>', 'height' => 5,
                    'items' => $sections[0], 'values' => $sections[1]),
                array('type' => 'edit', 'name' => 'block', 'label' => '<b>Блок баннера</b>',
                    'width' => '100px', 'maxlength' => 15,
                    'comment' => 'Для вставки баннера используйте макрос <b>$(Banners:имя_блока)</b>',
                    'pattern' => '/.+/', 'errormsg' => 'Не указан блок баннера!'),
                array('type' => 'edit', 'name' => 'priority', 'label' => 'Приоритет', 'width' => '20px',
                    'comment' => 'Если для одного раздела и одного блока задано несколько баннеров, будет ' .
                        'показан с большим приоритетом', 'default' => 0, 'pattern' => '/\d+/',
                    'errormsg' => 'Приоритет задается только цифрами!'),
                array('type' => 'edit', 'name' => 'showFrom', 'label' => 'Начало показов',
                    'width' => '100px', 'comment' => 'ГГГГ-ММ-ДД', 'default' => gettime('Y-m-d'),
                    'pattern' => '/[12]\d{3,3}-[01]\d-[0-3]\d/', 'errormsg' => 'Неправильный формат даты!'),
                array('type' => 'edit', 'name' => 'showTill', 'label' => 'Конец показов',
                    'width' => '100px', 'comment' => 'ГГГГ-ММ-ДД; Пустое - без ограничений',
                    'pattern' => '/(\d{4,4}-[01]\d-[0-3]\d)|(^$)/', 'errormsg' => 'Неправильный формат даты!'),
                array('type' => 'edit', 'name' => 'showCount', 'label' => 'Макс. кол-во показов',
                    'width' => '100px', 'comment' => '0 - без ограничений', 'default' => 0,
                    'pattern' => '/(\d+)|(^$)/', 'errormsg' => 'Кол-во показов задается только цифрами!'),
                //array ('type' => 'edit', 'name' => 'mail', 'label' => 'e-mail владельца',
                //'width' => '200px', 'maxlength' => '63'),
                array('type' => 'checkbox', 'name' => 'active', 'label' => 'Активировать'),
                array('type' => 'header', 'value' => 'Свойства баннера'),
                array('type' => 'file', 'name' => 'image', 'label' => 'Картинка или Flash', 'width' => '50',
                    'comment' => '<a></a>'),
                array('type' => 'edit', 'name' => 'width', 'label' => 'Ширина', 'width' => '100px',
                    'comment' => 'только для Flash'),
                array('type' => 'edit', 'name' => 'height', 'label' => 'Высота', 'width' => '100px',
                    'comment' => 'только для Flash'),
                array('type' => 'edit', 'name' => 'url', 'label' => 'URL для ссылки', 'width' => '100%',
                    'maxlength' => '255'),
                array('type' => 'select', 'name' => 'target', 'label' => 'Открывать',
                    'items' => array('в новом окне', 'в том же окне')),
                array('type' => 'header', 'value' => 'HTML-код баннера'),
                array('type' => 'memo', 'name' => 'html',
                    'label' => 'HTML-код (Если задан HTML-код, то предыдущие свойства игнорируются и могут' .
                        'не заполняться)',
                    'height' => '4'),
                array('type' => 'divider'),
                array('type' => 'checkbox', 'name' => 'flushShowCount',
                    'label' => 'Обнулить кол-во показов'),
            ),
            'buttons' => array('ok', 'apply', 'cancel'),
        );

        /** @var TAdminUI $page */
        $page = Eresus_Kernel::app()->getPage();
        $result = $page->renderForm($form, $item);
        return $result;
    }
676866
public function main()
    {
        Eresus_Kernel::log(__METHOD__, LOG_DEBUG, 'starting...');

        try
        {
            /* Общая инициализация */
            $this->checkEnvironment();
            $this->createFileStructure();



            /* Подключение старого ядра */
            Eresus_Kernel::log(__METHOD__, LOG_DEBUG, 'Init legacy kernel');
            include_once 'kernel-legacy.php';

            /**
             * @global Eresus Eresus
             * @todo Обратная совместимость — удалить
             * @deprecated с 3.01 используйте Eresus_Kernel::app()->getLegacyKernel()
             */
            $GLOBALS['Eresus'] = new Eresus;

            TemplateSettings::setGlobalValue('cms', $this);

            $this->initConf();
            $i18n = I18n::getInstance();
            TemplateSettings::setGlobalValue('i18n', $i18n);
            Eresus_CMS::getLegacyKernel()->init();
            TemplateSettings::setGlobalValue('Eresus', Eresus_CMS::getLegacyKernel());
            $this->runWeb();
        }
        catch (Exception $e)
        {
            Eresus_Kernel::logException($e);
            ob_end_clean();
            $this->fatalError($e, false);
        }
        return 0;
    }
1180329
public function boot()
    {
        Route::pattern('id', '^[0-9]*$');
        Route::pattern('article', '^[\w\-0-9]+$');
        Route::pattern('tag', '^[\w\-0-9\+\%\s]+$');
        Route::pattern('category', '^[\w\-0-9\/]+$');
        Route::pattern('commentable_id', '^[0-9]*$');
        Route::pattern('commentable_type', '^[a-zA-Z_]+$');

        /*Для новостей , статей не надо этого. Для пользователей не знаю
        Route::model('article', \BBCMS\Models\Article::class);
        Route::model('category', \BBCMS\Models\Category::class);
        Route::model('users', BBCMS\Models\User::class);*/

        // Backend
        Route::pattern('module', '^[a-z_]+$');
        Route::pattern('module_id', '^[0-9]*$');
        Route::pattern('setting_id', '^[0-9]*$');

        // Common
        Route::pattern('model', '^[a-zA-Z_]+$');
        Route::pattern('attribute', '^[a-zA-Z_]+$');

        // $router->bind('articles', function($id) {
        //     return \BBCMS\Models\Article::active()->findOrFail($id);
        // });

        parent::boot();
    }
1156959
function () {
            // все аргументы, кроме последнего считаются необходимыми зависимостями
            var depsList = franky.toArray(arguments).slice(0, arguments.length - 1),
            // последний аргумент - функция в которую уйдут удовлетворенные зависимости
                callback = arguments[arguments.length - 1];
            // обработка зависимостей
            depsList = franky.map(depsList, function (depsItem) {
                if (!libs[depsItem]) {
                    throw new Error('Unmet dependency:' + depsItem);
                }
                // если модуль представляет из себя синглтон - кешируем его
                if (cached[depsItem]) {
                    libs[depsItem] = franky.isFunction(libs[depsItem]) ? libs[depsItem]() : libs[depsItem];
                    return libs[depsItem];
                } else {
                    return libs[depsItem]();
                }
            });

            // пробрасываем удовлетворенные зависимости
            callback.apply(this, depsList);

            return this;
        }
1274032
public function endpointAuth()
	{
		/**
		 * @var Processor $processor
		 */

		$type = Type::PAYMENT;
		$input = Input::all();
		$input = Type::clearInput($type, $input);

		$term = Terminal::find($input['term']);
		Secure::sign($input, $type, $term->secret);

		$processor = $this->makeProcessor($type, $input);
		$errorMessage = null;

		try {
			$response = $processor->response();

			if ($response->rc !== '00') {
				$errorMessage = ProcessorException::getCodeMessage($response->rc);
			}

			// need auth
			if ($response->auth()) {
				return Redirect::to($response->auth());
			}

		} catch (ProcessorException $e) {
			$errorMessage = $e->getMessage();
		}


		if (!$errorMessage) {
			return Views::reload(
				Views::url(
					$input['back'],
					array('resultBankEmulatorPayment' => 'success')
				),
				array(
					'Платеж принят!',
					'Ждите перехода в интернет-магазин',
				),
				'success'
			);
		}

		return Views::reload(
			Views::url(
				$input['back'],
				array('resultBankEmulatorPayment' => 'error')
			),
			array(
				$errorMessage,
				'Ждите перехода в интернет-магазин',
			),
			'danger'
		);

	}
236505
protected function adaptSourcesSummary()
    {
        $dataArray = [];

        //Формируем массив
        foreach ($this->data['data'] as $item) {
            $dataArray['data'][] = [
                'trafficSource'           => $item['dimensions'][0]['name'],
                'sourceEngine'            => $item['dimensions'][1]['name'],
                'visits'                  => $item['metrics'][0],
                //Визиты
                'bounceRate'              => $item['metrics'][1],
                //Отказы %
                'pageDepth'               => $item['metrics'][2],
                //Глубина просмотра
                'avgVisitDurationSeconds' => date("i:s", $item['metrics'][3])
                //Время проведенное на сайте мин:сек.
            ];
        }

        //Итого и средние значения
        $dataArray['totals'] = [
            'visits'                  => $this->data['totals'][0],
            'bounceRate'              => $this->data['totals'][1],
            'pageDepth'               => $this->data['totals'][2],
            'avgVisitDurationSeconds' => date("i:s", $this->data['totals'][3]),
        ];

        $this->adaptData = $dataArray;
    }
940200
final static function p(Method $m) {
		$i = df_new(df_con_heir($m, __CLASS__), $m); /** @var self $i */
		/**
		 * 2017-01-05
		 * @uses \Df\Payment\Operation::id()
		 * @uses \Dfe\AllPay\Charge::id()
		 * Локальный внутренний идентификатор транзакции.
		 * Мы намеренно передаваём этот идентификатор локальным (без приставки с именем модуля)
		 * для удобства работы с этими идентификаторами в интерфейсе платёжной системы:
		 * ведь там все идентификаторы имели бы одинаковую приставку.
		 */
		$id = df_assert_sne($i->id()); /** @var string $id */
		$s = $i->s(); /** @var Settings $s */
		$p = df_clean_keys([
			$i->k_Amount() => $s->test() ? $i->testAmountF() : $i->amountF()
			,$i->k_Currency() => $i->currencyC()
			,$i->k_Email() => $i->customerEmail()
			,$i->k_MerchantId() => $s->merchantID()
			,$i->k_RequestId() => $id
	 	]) + $i->pCharge();  /** @var array(string => mixed) $p */
		/**
		 * 2017-09-25
		 * The Yandex.Kassa charge requests do not use a signature:
		 * @see \Dfe\YandexKassa\Charge::k_Signature()
		 * https://tech.yandex.com/money/doc/payment-solution/payment-form/payment-form-http-docpage
		 */
		return [$id, $p + ((!$kS = $i->k_Signature()) ? [] : [$kS => Signer::signRequest($i, $p)])];
	}
473614
async function processBlock(bn) {
    //получаем все транзакции из блока
    let transactions = await golos.golos.api.getOpsInBlockAsync(bn, false);
    for(let tr of transactions) {
        let op = tr.op[0];
        let opBody = tr.op[1];
        let time = Date.parse(tr.timestamp);
        switch(op) {
            //нас интересует только комментарий к посту
            case "vote":
                await processVote(opBody, time);
                break;
        }
    }

}
2664
public function actionSubmit()
    {
        if (\Yii::$app->request->isAjax && !\Yii::$app->request->isPjax) {
            \Yii::$app->response->format = Response::FORMAT_JSON;

            $response = [
                'success' => false,
                'message' => 'Произошла ошибка',
            ];

            if (\Yii::$app->request->post('sx-model') && \Yii::$app->request->post('sx-model-value')) {
                $modelClass = \Yii::$app->request->post('sx-model');
                $modelValue = \Yii::$app->request->post('sx-model-value');
                /**
                 * @var RelatedElementModel $modelForm
                 */
                $modelForm = $modelClass::find()->where(['id' => $modelValue])->one();

                if (method_exists($modelForm, "createPropertiesValidateModel")) {
                    $validateModel = $modelForm->createPropertiesValidateModel();
                } else {
                    $validateModel = $modelForm->getRelatedPropertiesModel();
                }

                if ($validateModel->load(\Yii::$app->request->post()) && $validateModel->validate()) {
                    $validateModel->save();
                    $response['success'] = true;
                    $response['message'] = 'Успешно отправлена';

                } else {
                    $response['message'] = 'Форма заполнена неправильно';
                }

                return $response;
            }
        }
    }
1089302
function() {
        var builder = this.builder;

        builder.register( 'View', new ViewBuilder() );
        builder.register( 'InlineView', new InlineViewBuilder() );
        builder.register( 'AutoView', new MetadataViewBuilder() );

        builder.register( 'StackPanel', new StackPanelBuilder() );
        builder.register( 'GridPanel', new GridPanelBuilder() );
        builder.register( 'ScrollPanel', new ScrollPanelBuilder() );
        builder.register( 'Panel', new PanelBuilder() );
        builder.register( 'ScrollPanel', new ScrollPanelBuilder() );
        builder.register( 'ViewPanel', new ViewPanelBuilder() );
        builder.register( 'TabPanel', new TabPanelBuilder() );
        builder.register( 'TabPage', new TabPageBuilder() );

        builder.register( 'TablePanel', new TablePanelBuilder() );
        builder.register( 'Cell', new CellBuilder() );
        builder.register( 'Row', new RowBuilder() );

        builder.register( 'MenuBar', new MenuBarBuilder() );

        builder.register( 'DataGrid', new DataGridBuilder() );
        // служебный элемент, в документировании не нуждается
        builder.register( 'DataGridRow', new DataGridRowBuilder() );

        builder.register( 'DataGridColumn', new DataGridColumnBuilder() );
        builder.register( 'ListBox', new ListBoxBuilder() );

        builder.register( 'TextBox', new TextBoxBuilder() );
        builder.register( 'PasswordBox', new PasswordBoxBuilder() );
        builder.register( 'CheckBox', new CheckBoxBuilder() );
        builder.register( 'IndeterminateCheckBox', new IndeterminateCheckBoxBuilder() );
        builder.register( 'ImageBox', new ImageBoxBuilder() );
        builder.register( 'FileBox', new FileBoxBuilder() );
        builder.register( 'Label', new LabelBuilder() );
        builder.register( 'Link', new LinkBuilder() );
        builder.register( 'Form', new FormBuilder() );
        builder.register( 'Icon', new IconBuilder() );
        builder.register( 'DateTimePicker', new DateTimePickerBuilder() );
        builder.register( 'DatePicker', new DatePickerBuilder() );
        builder.register( 'TimePicker', new TimePickerBuilder() );
        builder.register( 'ToggleButton', new ToggleButtonBuilder() );
        builder.register( 'NumericBox', new NumericBoxBuilder() );
        builder.register( 'Button', new ButtonBuilder() );
        builder.register( 'ToolBar', new ToolBarBuilder() );
        builder.register( 'ToolBarButton', new ButtonBuilder() );
        builder.register( 'ComboBox', new ComboBoxBuilder() );
        builder.register( 'RadioGroup', new RadioGroupBuilder() );
        builder.register( 'ExtensionPanel', new ExtensionPanelBuilder() );
        builder.register( 'PopupButton', new PopupButtonBuilder() );
        builder.register( 'DataNavigation', new DataNavigationBuilder() );
        builder.register( 'TreeView', new TreeViewBuilder() );
        builder.register( 'Frame', new FrameBuilder() );
        builder.register( 'ButtonEdit', new ButtonEditBuilder() );

        builder.register( 'RestDataSource', new RestDataSourceBuilder() );
        builder.register( 'DocumentDataSource', new DocumentDataSourceBuilder() );
        builder.register( 'PropertyBinding', new DataBindingBuilder() );
        builder.register( 'ObjectDataSource', new ObjectDataSourceBuilder() );
        builder.register( 'Parameter', new ParameterBuilder() );

        builder.register( 'AcceptAction', new AcceptActionBuilder() );
        builder.register( 'AddAction', new AddActionBuilder() );
        builder.register( 'CreateItemAction', new CreateItemActionBuilder() );
        builder.register( 'CancelAction', new CancelActionBuilder() );
        builder.register( 'DeleteAction', new DeleteActionBuilder() );
        builder.register( 'EditAction', new EditActionBuilder() );
        builder.register( 'OpenAction', new OpenActionBuilder() );
        builder.register( 'SaveAction', new SaveActionBuilder() );
        builder.register( 'SelectAction', new SelectActionBuilder() );
        builder.register( 'UpdateAction', new UpdateActionBuilder() );
        builder.register( 'ServerAction', new ServerActionBuilder() );

        builder.register( 'RouteToAction', new RouteToActionBuilder() );

        builder.register( 'BooleanFormat', new BooleanFormatBuilder() );
        builder.register( 'DateTimeFormat', new DateTimeFormatBuilder() );
        builder.register( 'NumberFormat', new NumberFormatBuilder() );
        builder.register( 'ObjectFormat', new ObjectFormatBuilder() );

        builder.register( 'Script', new ScriptBuilder() );

        builder.register( 'Divider', new DividerBuilder() );
        builder.register( 'ContextMenu', new ContextMenuBuilder() );

        // служебный элемент, в документировании не нуждается
        builder.register( 'ToolTip', new InfinniUI.TooltipBuilder() );

        var registerQueue = ApplicationBuilder.registerQueue;

        for( var i = 0, ii = registerQueue.length; i < ii; i++ ) {
            builder.register( registerQueue[ i ].name, registerQueue[ i ].builder );
        }
    }
681023
private function adminInsertGroup()
    {
        $group = new Gallery_Entity_Group();
        $group->section = arg('section');
        $group->title = arg('title');
        $group->description = arg('description');

        // Код определения позиции желательно перенести в Gallery_Group
        $maxPosition = $this->dbSelect('groups', "`section` = '{$group->section}'", null,
            'MAX(`position`) AS `value`');
        $group->position = intval($maxPosition[0]['value']) + 1;

        $table = ORM::getTable($this, 'Group');
        $table->persist($group);

        HTTP::redirect(arg('submitURL') . '&action=group');
    }
324996
protected function _initAutoFilters()
    {
        //Если автоопределение колонок не включено
        if (!$this->isEnabledAutoFilters) {
            return $this;
        }

        if (!$this->dataProvider) {
            return $this;
        }

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


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

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

        $result = [];

        $result['attributeDefines'] = [];
        if (method_exists($model, 'attributes')) {
            $result['attributeDefines'] = $model->attributes();
        }

        $result['attributeLabels'] = [];
        if (method_exists($model, 'attributeLabels')) {
            $result['attributeLabels'] = $model->attributeLabels();
        }


        $rules = [];
        $fields = [];

        if ($model instanceof ActiveRecord) {
            foreach ($model::getTableSchema()->columns as $key => $column) {
                if (in_array($column->type, ['string', 'text'])) {
                    $fields[(string)$key] = [
                        'class' => StringFilterField::class,
                    ];

                    $rules[] = [(string)$key, 'safe'];
                } else if (in_array($column->type, ['integer', 'decimal'])) {

                    $realKey = $key;
                    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 ($relation = $model->getRelation($keyName, false)) {
                        if ($relation->modelClass && $relation->link) {

                            $arr = array_keys($relation->link);
                            $idName = $arr[0];
                            $modelClassName = $relation->modelClass;

                            $query = $modelClassName::find();

                            if ($query->count() > 1000) {
                                $fields[(string)$realKey] = [
                                    'class' => NumberFilterField::class,
                                ];
                            } else {
                                $fields[(string)$realKey] = [
                                    'class'             => NumberFilterField::class,
                                    'isAllowChangeMode' => false,
                                    'field'             => [
                                        'class'    => SelectField::class,
                                        'items'    => function () use ($idName, $query) {

                                            return ArrayHelper::map(
                                                $query->all(),
                                                $idName,
                                                'asText'
                                            );
                                        },
                                        'multiple' => true,
                                    ],
                                ];
                            }

                        }

                    }

                    if (!isset($fields[(string)$realKey])) {
                        $fields[(string)$realKey] = [
                            'class' => NumberFilterField::class,
                        ];
                    }

                    $rules[] = [(string)$realKey, 'safe'];

                } else {
                    $fields[(string)$key] = [
                        'class' => StringFilterField::class,
                    ];

                    $rules[] = [(string)$key, 'safe'];
                }

            }
        } elseif (is_array($model) || is_object($model)) {
            foreach ($model as $name => $value) {
                if ($value === null || is_scalar($value) || is_callable([$value, '__toString'])) {
                    $fields[(string)$name] = [
                        'class' => StringFilterField::class,
                    ];

                    $rules[] = [(string)$name, 'safe'];
                }
            }
        }

        $result['rules'] = $rules;
        $result['fields'] = $fields;
        $this->_autoDynamicModelData = $result;

        return $this;
    }
876645
private function actionAddDialog()
    {
        $form = array(
            'name' => 'add',
            'caption' => 'Добавление формы',
            'width' => '100%',
            'fields' => array(
                array('type' => 'hidden', 'name' => 'action', 'value' => 'create'),
                array('type' => 'edit', 'name' => 'title', 'label' => 'Описание',
                    'width' => '99%', 'value' => arg('title')),
                array('type' => 'edit', 'name' => 'name', 'label' => 'Имя',
                    'width' => '16em', 'value' => arg('name'), 'comment' =>
                'только латинские буквы, цифры, символы минус и подчёркивание',
                    'pattern' => '/^[\w\-]+$/i',
                    'errormsg' =>
                    'Имя формы может содержать только латинские буквы, цифры, символы минус и подчёркивание'),
                array('type' => 'text',
                    'value' =>
                    '&raquo; <b><a href="https://github.com/Eresus/EForms/wiki/%D0%AF%D0%B7%D1%8B%D0%BA-%D1%84%D0%BE%D1%80%D0%BC">' .
                    'Синтаксис форм</a></b>'),
                array('type' => 'memo', 'name' => 'code', 'height' => '30', 'syntax' => 'html',
                    'value' => arg('code') ? arg('code') :
                        '<form xmlns:ef="http://procreat.ru/eresus2/ext/eforms" method="post">' . "\n</form>"),
            ),
            'buttons' => array('ok', 'cancel'),
        );
        /** @var TAdminUI $page */
        $page = Eresus_Kernel::app()->getPage();
        return $page->renderForm($form);
    }