Инициализация плагина
551719
protected function initPlugin()
    {
        $onSuccess = new JsExpression('function(result, item) {
                var nameWasChanged = false;
                if(result.status){
                    nameWasChanged = item.name != result.name;
                    item.name = result.name;
                    item.data.id = result.mediaId;
                }
                // make HTML changes
                if(nameWasChanged)
                    item.html.find(".column-title div").animate({opacity: 0}, 400);
                item.html.find(".column-actions").append("<a class=\"fileuploader-action fileuploader-action-remove fileuploader-action-success\" title=\"Remove\"><i></i></a>");
                setTimeout(function() {
                    item.html.find(".column-title div").attr("title", item.name).text(item.name).animate({opacity: 1}, 400);
                    item.html.find(".progress-bar2").fadeOut(400);
                }, 400);
                item.html.append("<input type=\"hidden\" name=\"media[]\" value=\"" + result.mediaId + "\" />");
            }');
        $onError = new JsExpression('function(item) {
                var progressBar = item.html.find(".progress-bar2");
                
                // make HTML changes
                if(progressBar.length > 0) {
                    progressBar.find("span").html(0 + "%");
                    progressBar.find(".fileuploader-progressbar .bar").width(0 + "%");
                    item.html.find(".progress-bar2").fadeOut(400);
                }
                
                item.upload.status != "cancelled" && item.html.find(".fileuploader-action-retry").length == 0 ? item.html.find(".column-actions").prepend(
                    "<a class=\"fileuploader-action fileuploader-action-retry\" title=\"Retry\"><i></i></a>"
                ) : null;
            }');
        $onProgress = new JsExpression('function(data, item) {
                var progressBar = item.html.find(".progress-bar2");
				
				// make HTML changes
                if(progressBar.length > 0) {
                    progressBar.show();
                    progressBar.find("span").html(data.percentage + "%");
                    progressBar.find(".fileuploader-progressbar .bar").width(data.percentage + "%");
                }
            }');
        $onRemove = new JsExpression('function(item) {
			$.post("' . $this->urlDelete . '", {
				id: item.data.id,
			});
		}');
        $config = [
            'inputNameBrackets' => false,
            'upload' => [
                'url' => $this->urlUpload,
                'data' => null,
                'type' => 'POST',
                'enctype' => 'multipart/form-data',
                'start' => true,
                'synchron' => true,
                'onSuccess' => $onSuccess,
                'onError' => $onError,
                'onProgress' => $onProgress,
            ],
            'onRemove' => $onRemove,
            'files' => $this->initFiles(),
        ];
        if ($this->urlSort) {
            $sortUrl = Url::to($this->urlSort);
            $onItemShow = new JsExpression('function(item){
                item.html.find(\'.fileuploader-action-remove\').before(\'<a class="fileuploader-action fileuploader-action-sort" title="Sort"><i></i></a>\');
            }');
            $onSort = new JsExpression("function(list) {
                var data = [];
                list.map(function(item){
                    data.push({
                        id: item.data.id
                    });
                });
                $.post('{$sortUrl}', {stack: data});
            }");
            $config['sorter'] = [
                'onSort' => $onSort,
            ];
            $config['thumbnails'] = [
                'onItemShow' => $onItemShow,
            ];
        }
        $config = ArrayHelper::merge($config, $this->pluginOptions);
        $this->view->registerJs('$("#' . $this->getId() . '").fileuploader(' . Json::encode($config) . ')');
    }
1059457
private function parseSql()
    {
        // Разбор многострочных комментариев
        if (preg_match_all('#/\*([\w|]+)(.+?)\*/#s', $this->sql, $matches)) {
            $count = count($matches[0]);
            for ($i = 0; $i < $count; $i++) {
                $this->replaceComment($matches[0][$i], $matches[2][$i], $matches[1][$i]);
            }
        }

        // Многоитерационный разбор однострочных комментариев
        while (true) {
            if (preg_match_all('#--\*([\w|]+)(.+)#', $this->sql, $matches)) {
                $count = count($matches[0]);
                for ($i = 0; $i < $count; $i++) {
                    $this->replaceComment($matches[0][$i], $matches[2][$i], $matches[1][$i]);
                }
            } else {
                break;
            }
        }

        // разбор переменных - массивов, которые находились изначально вне комментариев
        if (preg_match_all('#:@(\w+)#', $this->sql, $matches)) {
            $count = count($matches[0]);
            for ($i = 0; $i < $count; $i++) {
                $this->replaceComment($matches[0][$i], $matches[0][$i], $matches[1][$i], false);
            }
        }

        $this->sql = preg_replace("/\n+/", "\n", trim($this->sql));
    }
658304
public function init()
    {
        // Если гость ...
        if (Yii::$app->getUser()->isGuest) {
            // ... то корзину храним в сессии
            $this->basket = new SessionBasket();
        } else {
            // ... иначе в БД
            $this->basket = new DbBasket();
            $this->basket->idUser = Yii::$app->user->identity->getId();
        }

        $this->basket->owner  = $this;

        // Если в сессии осталась корзина, а пользователь уже не гость => сливаем в БД
        if(!is_null(Yii::$app->session->get($this->storageName, null)) && !Yii::$app->getUser()->isGuest) {
            $this->basket->merge();
        }

        // Кешируем товары
        // Это нужно, чтобы для проверки в корзине товар или нет, не делать запросы в БД для каждого товара
        $this->cache = $this->basket->getBasketProducts();
    }
1034666
function reset_login()
	{
		$this->user['auth'] = isset($this->user['auth']) ? $this->user['auth'] : false;
		if ($this->user['auth'])
		{
			$item = $this->db->selectItem('users', "`id`='".$this->user['id']."'");
			if (!is_null($item))
			{
				# Если такой пользователь есть...
				if ($item['active'])
				{
					# Если учетная запись активна...
					$this->user['name'] = $item['name'];
					$this->user['mail'] = $item['mail'];
					$this->user['access'] = $item['access'];
					$this->user['profile'] = decodeOptions($item['profile']);
				}
				else
				{
                    Eresus_Kernel::app()->getPage()->addErrorMessage(
                        sprintf(ERR_ACCOUNT_NOT_ACTIVE, $item['login']));
					$this->logout();
				}
			}
			else
			{
				$this->logout();
			}
		}
		else
		{
			$this->user['access'] = GUEST;
		}
	}
1351910
function onFormInitialized() {
		parent::onFormInitialized();
		$this->addClass('df-font'); // 2016-07-30 This CSS class will be applied to the <fieldset> DOM node.
		$this->checkbox(O::enabled, 'Setup?');
		$row1 = $this->fieldsetInline('df-checkboxes')->hide(); /** @var FInline $row1 */
		$row1->checkbox(O::bold, 'B', ['title' => 'Bold']);
		$row1->checkbox(O::italic, 'I', ['title' => 'Italic']);
		$row1->checkbox(O::underline, 'U', ['title' => 'Underline']);
		$row1->color(O::color, null, ['title' => 'Font Color']);
		$row2 = $this->fieldsetInline('df-family')->hide(); /** @var FInline $row2 */
		$row2->field(O::family, GoogleFont::class, null, ['title' => 'Font Family']);
		/** @var array(array(string => string)) $sizeValues */
		$sizeValues = [Q::P__VALUES => SizeUnit::s()->toOptionArray()];
		$row2->quantity(O::size, null, $sizeValues + ['title' => 'Font Size']);
		$row3 = $this->fieldsetInline('row3')->hide(); /** @var FInline $row3 */
		// 2015-12-13
		// Намеренно указываем в качестве подписи пустую строку, а не null,
		// чтобы получить пустые теги <label><span></span></label>
		// и потом стилизовать их своей иконкой.
		$row3->quantity(O::letter_spacing, '', $sizeValues + ['title' => 'Letter Spacing']);
		/**
		 * 2015-12-13
		 * Передаём в качестве подписи название класса Font Awesome.
		 * Такое стало возможным благодаря моему плагину
		 * @used-by \Df\Framework\Plugin\Data\Form\Element\AbstractElement::aroundGetLabelHtml()
		 * https://github.com/mage2pro/core/tree/73bed4fbb751ab47ad1bb70a8d90f455da26b500/Framework/Data/Form/Element/AbstractElementPlugin.php#L53
		 */
		/**
		 * 2015-12-13
		 *	.test {
		 *		transform : scale(1,1.5);
		 *		-webkit-transform:scale(1,1.5); // Safari and Chrome
		 *		-moz-transform:scale(1,1.5); // Firefox
		 *		-ms-transform:scale(1,1.5); // IE 9+
		 *		-o-transform:scale(1,1.5); // Opera
		 *		letter-spacing: 10px;
		 *	}
		 * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#scale()
		 * http://stackoverflow.com/a/16447826
		 */
		$row3->percent(O::scale_horizontal, 'fa-text-width', 100, ['title' => 'Horizontal Scale']);
		$row3->percent(O::scale_vertical, 'fa-text-height', 100, ['title' => 'Vertical Scale']);
		/**
		 * 2015-12-13
		 * Намеренно указываем в качестве подписи пустую строку, а не null,
		 * чтобы получить пустые теги <label><span></span></label>
		 * и потом стилизовать их своей иконкой.
		 */
		df_hide($this->select(O::letter_case, '', LetterCase::s(), ['title' => 'Letter Case']));
		df_fe_init($this, __CLASS__, df_fa());
	}
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');
    }
776271
public function validate()
    {
        $commonActions = $this->getCommonActions();
        $actions = $this->getActions();
        $hasActions = $this->hasActions;

        if ($hasActions && 0 === count($commonActions) && 0 === $actions->count()) {
            $stepName = (string)$this->getName();
            $errMsg = sprintf('Шаг %s должен содержать одни действие или одно общее действие', $stepName);
            throw new InvalidWorkflowDescriptorException($errMsg);
        }

        if (-1 === $this->getId()) {
            $errMsg = 'В качестве id шага нельзя использовать -1, так как это зарезериврованное значение';
            throw new InvalidWorkflowDescriptorException($errMsg);
        }

        $preFunctions = $this->getPreFunctions();
        $postFunctions = $this->getPostFunctions();
        $actions = $this->getActions();
        $permissions = $this->getPermissions();

        ValidationHelper::validate($preFunctions);
        ValidationHelper::validate($postFunctions);
        ValidationHelper::validate($actions);
        ValidationHelper::validate($permissions);

        $workflowDescriptor = $this->getParent();
        if (!$workflowDescriptor instanceof WorkflowDescriptor) {
            $errMsg = sprintf('Родительский элемент для шага должен реализовывать %s', WorkflowDescriptor::class);
            throw new InvalidWorkflowDescriptorException($errMsg);
        }
        foreach ($commonActions as $actionId) {
            try {
                $commonActionReference = $workflowDescriptor->getCommonAction($actionId);

                if (null === $commonActionReference) {
                    $stepName = (string)$this->getName();
                    $errMsg = sprintf('Common-action %s указанное для шага %s не существует', $actionId, $stepName);
                    throw new InvalidWorkflowDescriptorException($errMsg);
                }
            } catch (\Exception $e) {
                $actionIdStr = (string)$actionId;
                $errMsg = sprintf('Некорректный id для common-action: id %s', $actionIdStr);
                throw  new InvalidWorkflowDescriptorException($errMsg, $e->getCode(), $e);
            }
        }
    }
1279198
function add($error, $message = '', $is_temp = false)
    {
        // Если был временным
        if (!$is_temp || ($error instanceof Error && !$error->is_temp)) $this->untemp();
        // Добавление подчиненного
        if (is_array($error)){
            foreach ($error as $e){
                $this->add($e, $message, $is_temp);
            }
        }else{
            if (!$error instanceof Error) $error = new Error($message, $error);
            if ($is_temp || $error->is_temp){
                $this->temps[$error->code] = $error;
                $this->temps[$error->code]->is_temp = true;
                $this->temps[$error->code]->parent = $this;
            }else{
                $this->children[$error->code] = $error;
                $this->children[$error->code]->parent = $this;
            }
            if ($message) $error->message = $message;
        }
        return $this;
    }
49911
public function save()
    {
        $this->_slug = trim(trim($this->_slug), '/');
        if (is_null($this->_slugModel) || $this->_slugModel->slug !== $this->_slug) {
            //Если уже есть запись с таким slug то обновим её присвоев её максимальный id + 1
            $model = SeoSlug::find()
                ->where([
                    'AND',
                    ['=', 'model', $this->owner->className()],
                    ['=', 'model_id', $this->owner->getPrimaryKey()],
                    ['=', 'slug', $this->_slug],
                ])
                ->one();
            if ($model) {
                $maxId = SeoSlug::find()
                    ->max('id');
                $oldId = $model->id;
                $model->id = ++$maxId;
                $model->save();
                SeoSlug::updateAllCounters(['id' => -1], [
                    'AND',
                    ['>', SeoSlug::tableName() . '.id', $oldId],
                ]);
            } else {
                $model = new SeoSlug();
                $model->model = $this->owner->className();
                $model->model_id = $this->owner->getPrimaryKey();
            }
            $model->slug = $this->_slug;
            $model->save();
            if (is_callable($this->afterSave)) {
                call_user_func($this->afterSave, $this);
            }
        }
    }
1118366
final function onFormInitialized() {
		parent::onFormInitialized();
		$this->addClass('df-array');
		// 2015-12-29 It is an invisible template row.
		df_hide($this->field('template', $this->itemFormElement()));
		$itemId = 0; /** @var int $itemId */
		foreach ($this->v() as $key => $data) {
			/** @var string|int $key */ /** @var string|array(string => mixed) $data */
			/**
			 * 2016-07-30
			 * Раньше тут стоял код:
			 *	// 2015-12-30
			 *	// https://github.com/mage2pro/core/tree/b1f6809b7723d8426636bb892b852f408bdc5650/Framework/view/adminhtml/web/formElement/array/main.js#L131
			 *	if (\Df\Config\A::FAKE !== $key) {
			 *		$this->field($itemId++, $this->itemType(), null, $data);
			 *	}
			 * Теперь у нас ключ @see \Df\Config\A::FAKE удаляется в методе
			 * @see \Df\Config\Backend\ArrayT::processA()
			 * поэтому здесь его уже быть не должно.
			 */
			df_assert_ne(\Df\Config\A::FAKE, $key);
			$this->field($itemId++, $this->itemFormElement(), null, $data);
		}
		df_fe_init($this, __CLASS__, df_fa(), [], 'array');
	}
933654
public function work()
    {
        $workerNeed = self::WORKER_MIN * $this->workerMultiplier;
        $workerCount = count($this->workerPool);

        if (
            ($workerCount < $workerNeed && $workerCount < $this->workerMaxCount)
            && !$this->running
        ) {
            // run new worker
            $this->workerRun = $this->workerStarter->start();
            $this->running = time();
        } elseif ($this->running && $this->running < time() - 10) {
            // timeout 10 sec - не удалось запустить воркер
            $this->running = 0;
            if ($this->workerRun->isRunning()) {
                // убиваем запущенный процесс, если он ещё работает
                $this->workerRun->kill();
            }
        }
    }
342612
public function register()
    {
        // Регистрируем конкретный сторэйдж из списка доступных.
        $this->app->singleton(StorageInterface::class, function (Container $app) {
            // Defined driver
            $selectedDriver = config('api-tester.storage_driver');
            $driverClassName = config('api-tester.storage_drivers')[$selectedDriver];
            $requestCollection = $app->make(RequestCollection::class);

            if ($selectedDriver === 'firebase'){
                $tokenGenerator = $app->make(TokenGenerator::class);
                $base = config('api-tester.storage_drivers.firebase.options.base');

                return new FireBaseStorage($requestCollection, $tokenGenerator, $base);
            }

            if ($selectedDriver === 'file'){
                $fileSystem = $app->make(Filesystem::class);
                $path = config('api-tester.storage_drivers.file.options.path');

                return new JsonStorage($fileSystem, $requestCollection, $path);
            }

            throw new Exception("Driver $selectedDriver doesn't exist. Use either 'firebase' or 'file'.");
        });

        // Регистрация токен-генератора. Привязывается к ключу а не классу,
        // чтобы не конфликтовать с пользовательским генератором токенов.
        $this->app->singleton('api-tester.token_generator', function (Container $app) {
            $config = $app['config']['api-tester.storage_drivers.firebase.token'];
            return (new TokenGenerator($config['secret']))
                ->setOptions($config['options'])
                ->setData($config['data']);
        });

        // Подсовываем генератор в сторэйдж
        $this->app
            ->when(FireBaseStorage::class)
            ->needs(TokenGenerator::class)
            ->give('api-tester.token_generator');
    }
630770
public function log()
	{
		$this->ip 	= $this->getIP();
		$this->ips 	= $this->getIPs();
		$this->url 	= $this->getURL();
		$file 			= file($this->dataWrite);
		$txt 				= $this->url.";";
		$dtime 			= date("d.m.y_G:i");
		$txt 				.= $dtime.";";
		$txt 				.= $this->name.";";
		$txt 				.= $this->tel.";";
		foreach ($this->ips as $key => $value) {
			$txt 			.= $value.";";
		}
		$txt 				.= "\n";
		if (isset($file[0]) && !empty($file[0])) {
			$firstLine 	=	explode(";", $file[0]); // Вытягиваем первую строку файла log.ini
			$date = explode(".", str_replace('_', '.', $firstLine[1])); // Вытягиваем дату. Преобразуем к удобному формату. Разбиваем на отдельные части (год, месяц ...)
			$time = explode(":", $date[3]); // Разбиваем врем на отдельные части
			$unixTime = mktime($time[0], $time[1], 0, $date[1], $date[0], $date[2]); // Переводим в UNIXTIME
			$period = $this->timeCleanLog * 24  * 60 * 60; // Период за через который будем очищать log файл
			$timeNow = time(); // Текущее время
			if($timeNow > ($unixTime + $period)){ // Очищаем log файл если прошло больше чем $timeCleanLog суток
				// Отправляем письмо с содержанием log файла перед его очисткой.
				$subject = $dtime." - Log файл  - ".$_SERVER['HTTP_HOST'];
				$message = "Log файл очистился за период: ".$this->timeCleanLog." суток \n\n";
				$message .= "Содержимое файла:\n\n";
				foreach ($file as $key => $value) {
					$message .= "\t$value \n";
				}
				$mail = new MailHelper;
				$mail->config->fromMail = 'log@gslots.net';
				$mail->config->fromName = 'log';
				//$mail->addMail('1@gslots.net');
				$mail->addMail('dellirom@gmail.com');
				$mail->sendMail($subject, $message, false);
				file_put_contents($this->dataWrite, ""); // Очищаем файл dataWrite (log.ini) после отправки информации на email.
			}
		}
		file_put_contents($this->dataWrite, $txt, FILE_APPEND); // Записываем информацию в файл dataWrite (log.ini)
		return true;
	}
114500
public function postCreateOrder()
	{
		$data = Input::all();
		//Проверяем данные на валидность
		$validator = Validator::make(
			$data,
			Validators::rulesForNewOrder(),
			Validators::messagesForErrors()
		);
		$userMessages = $validator->messages();

		//Если есть ошибки, возвращаем
		if ($validator->fails()) {
			$result['errors'] = array(
				'item'    => $userMessages->first('item'),
				'sum'     => $userMessages->first('sum'),
				'tel'     => $userMessages->first('tel'),
				'comment' => $userMessages->first('comment'),
			);

			return $result;
		}
		//Предполагаем ошибку
		$result['errors'] = array(
			'common' => 'Ошибка. Повторите ещё раз.',
		);

		//Создаём заказ
		$data['user_id'] = Config::get('ff-qiwi-shop::user_id');
		$validity = Setting::find($data['user_id'])->lifetime;
		$data['lifetime'] = date('Y-m-d H:i:s', time() + 3600 * 24 * $validity);

		$order = new Order();
		$order->saveData($data);

		//Если заказ создан, то вместо ошибки отдаём ОК
		if ($order) {
			$result = array(
				'result'   => 'ok',
				'order_id' => $order->id,
				'message'  => 'Заказ №' . $order->id . ' успешно создан.',
			);
		}

		return $result;
	}
724853
public function validate()
    {
        $preFunctions = $this->getPreFunctions();
        $postFunctions = $this->getPostFunctions();
        $validators = $this->getValidators();
        $conditionalResults = $this->getConditionalResults();

        ValidationHelper::validate($preFunctions);
        ValidationHelper::validate($postFunctions);
        ValidationHelper::validate($validators);
        ValidationHelper::validate($conditionalResults);

        $unconditionalResult = $this->getUnconditionalResult();
        if (null === $unconditionalResult && $conditionalResults->count() > 0) {
            $name = (string)$this->getName();
            $errMsg = sprintf('Действие %s имеет условные условия, но не имеет запасного безусловного', $name);
            throw new InvalidWorkflowDescriptorException($errMsg);
        }

        $restrictions = $this->getRestriction();
        if ($restrictions !== null) {
            $restrictions->validate();
        }

        if ($unconditionalResult !== null) {
            $unconditionalResult->validate();
        }
    }
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),
        ];
    }
38061
protected function RenderImpl()
    {

        //   $this->beforeRender();
        //$keys =   array_keys($this->components);
        foreach ($this->components as $component) {


            if ($component->isVisible()) {
                $component->Render();
            } else {
                $component->getTag()->remove();
                $label = $component->getLabelTag();
                if ($label->size() == 1) {  //прячем  связаный  тег label
                    $label->remove();
                }
                if ($label->size() > 1) {  //прячем  связаный  тег label
                    foreach ($label as $l) {
                        pq($l)->remove();
                    }
                }
            }
        }
        //   $this->afterRender();
    }