FIXME: Несовместимый со StorageMethods формат параметров. Найти использование и заменить.
423614
static function load($class_name, $object_id, $version)
	{
		static $cache = array();
		$hash = '__load:'.$class_name.'-'.$object_id.'-'.$version;
		if(!empty($cache[$hash]))
			return $cache[$hash];

		$object = bors_load($class_name, $object_id);
//		echo $object;
		foreach(bors_find_all(__CLASS__, array(
			'target_class_name' => $class_name,
			'target_id' => $object_id,
			'target_version' => $version,
		)) as $x)
		{
//			echo "{$x->property_name()} = {$x->value()}<br/>\n";
			$object->set_attr('versioning_properties',
				array_merge(
					$object->attr('versioning_properties', array()),
					array($x->property_name() => $object->get($x->property_name()))
				)
			);

			$object->set($x->property_name(), $x->value(), false);
//			$object->set_attr('versioning_property', $x->property_name());
		}

		return $cache[$hash] = $object;
	}
409468
protected function adaptVisitsViewsUsers()
    {

        //Формируем массив данных для графика
        $itemArray = [];

        foreach ($this->data['data'] as $item) {
            $itemArray['date'][] = Carbon::createFromFormat('Y-m-d',
                $item['dimensions'][0]['name'])->formatLocalized('%e.%m');
            $itemArray['visits'][] = $item['metrics'][0];
            $itemArray['pageviews'][] = $item['metrics'][1];
            $itemArray['users'][] = $item['metrics'][2];
        }

        $dataArray = [
            ['name' => 'Визиты', 'data' => $itemArray['visits']],
            ['name' => 'Просмотры', 'data' => $itemArray['pageviews']],
            ['name' => 'Посетители', 'data' => $itemArray['users']],
        ];

        $this->adaptData = [
            'dataArray' => json_encode($dataArray, JSON_UNESCAPED_UNICODE),
            'dateArray' => json_encode($itemArray['date'],
                JSON_UNESCAPED_UNICODE),
        ];
    }
567017
public function setTableDefinition()
    {
        $this->setTableName('gallery_images');
        $this->hasColumns(array(
            'id' => array(
                'type' => 'integer',
                'unsigned' => true,
                'autoincrement' => true,
            ),
            'section' => array(
                'type' => 'integer',
                'unsigned' => true,
                'default' => null,
            ),
            'title' => array(
                'type' => 'string',
                'length' => 255,
                'default' => null,
            ),
            'image' => array(
                'type' => 'string',
                'length' => 128,
                'default' => null,
            ),
            'thumb' => array(
                'type' => 'string',
                'length' => 128,
                'default' => null,
            ),
            'posted' => array(
                'type' => 'datetime'
            ),
            'groupId' => array(
                'type' => 'integer',
                'unsigned' => true,
                'default' => 0,
            ),
            'cover' => array(
                'type' => 'boolean',
                'default' => 0,
            ),
            'active' => array(
                'type' => 'boolean',
                'default' => 0,
            ),
            'position' => array(
                'type' => 'integer',
                'unsigned' => true,
                'default' => 0,
            ),
        ));
        // TODO Проверить индексы
        $this->index('section', array('fields' => array('section')));
        $this->index('position', array('fields' => array('position')));
        $this->index('active', array('fields' => array('active')));
        $this->index('posted', array('fields' => array('posted')));
        $this->index('find_covers', array('fields' => array('section', 'active', 'cover')));
        $this->index('images_by_time', array('fields' => array('section', 'active', 'posted')));
        $this->index('images_by_position', array('fields' => array('section', 'active', 'position')));
        /* Проверенные индексы */
        $this->index('images_by_group_idx', array('fields' => array('groupId', 'active', 'position')));
    }
477345
function compile(layout, params) {
        var t = {};
        if (typeof layout === 'string') {
            //  Строка 'folders' является шоткатом для:
            //
            //  {
            //      'folders': true
            //  }
            //
            t[layout] = true;
            layout = t;

        } else if ( Array.isArray(layout) ) {
            //  Массив вида [ 'folders', 'labels' ] является шоткатом для:
            //
            //      {
            //          'folders': true,
            //          'labels': true
            //      }
            //
            //  Преобразуем массив в объект.
            for (var i = 0, l = layout.length; i < l; i++) {
                t[ layout[i] ] = true;
            }
            layout = t;

        }

        //  Рекурсивно компилируем значение каждого ключа и создаем новый объект result.
        var result = {};

        for (var raw_key in layout) {
            var key = raw_key;

            // быстро проверяем возможность интерполяции, чтобы зря не вызывать компиляцию
            if (raw_key.indexOf('{') > -1) {
                //  Ключ может быть с интерполяцией, так что вычисляем его.
                key = no.jpath.string(raw_key)(params);
            }

            var raw_value = layout[raw_key];
            var value;

            //  Интерпретируем значение, соответствующее ключу.
            switch (typeof raw_value) {
                //  Это функция, ее нужно вызвать и скомпилировать результат.
                case 'function':
                    value = compile( raw_value(params), params );
                    break;

                //  Это объект.
                case 'object':
                case 'string':
                    value = compile(raw_value, params);
                    break;

                default:
                    value = {};
            }

            result[cleanKey(key)] = {
                'type': getViewType(key),
                'views': value
            };
        }

        return result;
    }
1344179
function(model, requestId) {
        // модель надо запросить
        this._keys[model.key] = {
            status: this.STATUS.LOADING,
            model: model
        };
        model.prepareRequest(requestId);
    }
470180
function generate_log_message(parameters)
{
	// преобразовать все аргументы функции в текстовый вид
	return parameters.map(argument =>
	{
		// преобразование объектов в строку
		if (typeof argument === 'object')
		{
			// для ошибок - распечатывать стек вызовов
			if (argument instanceof Error)
			{
				return argument.stack
			}
			// для остальных объектов вызывать JSON.stringify()
			return JSON.stringify(argument, null, 2)
		}
		// если undefined
		if (typeof argument === 'undefined')
		{
			return '[undefined]'
		}
		// прочие переменные - просто .toString()
		return argument.toString()
	})
	// собрать всё это в одну строку через пробел
	.reduce((message, argument) =>
	{
		if (message.length > 0)
		{
			message += ' '
		}
		return message + argument
	},
	'')
}
960121
protected function adaptSourcesSearchPhrases()
    {
        $dataArray = [];

        //Формируем массив
        foreach ($this->data['data'] as $item) {
            $dataArray['data'][] = [
                'searchPhrase'            => $item['dimensions'][0]['name'],
                'searchEngineRoot'        => $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;
    }
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;
	}
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);
    }
1013148
protected function initConf()
    {
        Eresus_Kernel::log(__METHOD__, LOG_DEBUG, '()');

        /*
         * Переменную $Eresus приходится делать глобальной, чтобы файл конфигурации
         * мог записывать в неё свои значения.
         * TODO Избавиться от глобальной переменной
         */
        /** @noinspection PhpUnusedLocalVariableInspection */
        global $Eresus;

        $filename = $this->getFsRoot() . '/cfg/main.php';
        if (file_exists($filename))
        {
            /** @noinspection PhpIncludeInspection */
            include $filename;
            // TODO: Сделать проверку успешного подключения файла
        }
        else
        {
            $this->fatalError("Main config file '$filename' not found!");
        }
    }
1284679
private function add()
    {
        $data = array();

        /* Составляем список доступных плагинов */
        $files = glob(Eresus_CMS::getLegacyKernel()->froot . 'ext/*.php');
        if (false === $files)
        {
            $files = array();
        }

        /* Составляем список установленных плагинов */
        $items = Eresus_CMS::getLegacyKernel()->db->select('plugins', '', 'name, version');
        $installed = array();
        foreach ($items as $item)
        {
            $installed []= Eresus_CMS::getLegacyKernel()->froot . 'ext/' . $item['name'] . '.php';
        }
        // Оставляем только неустановленные
        $files = array_diff($files, $installed);

        /*
         * Собираем информацию о неустановленных плагинах
         */
        $data['plugins'] = array();
        if (count($files))
        {
            // Удаляем из версии CMS все буквы, чтобы сравнивать только цифры
            $kernelVersion = preg_replace('/[^\d\.]/', '', Eresus_Kernel::app()->version);

            foreach ($files as $file)
            {
                $errors = array();
                try
                {
                    $info = Eresus_PluginInfo::loadFromFile($file);
                    $required = $info->getRequiredKernel();
                    if (
                        version_compare($kernelVersion, $required[0], '<')/* ||
						version_compare($kernelVersion, $required[1], '>')*/
                    )
                    {
                        $msg =  I18n::getInstance()->getText('admPluginsInvalidVersion', $this);
                        $errors []= sprintf($msg, /*implode(' - ', */$required[0]/*)*/);
                    }
                }
                catch (RuntimeException $e)
                {
                    $errors []= $e->getMessage();
                    $info = new Plugin(); // TODO: Придумать решение без Plugin
                    $info->title = $info->name = basename($file, '.php');
                    $info->version = '';
                }
                $available[$info->name] = $info->version;
                $data['plugins'][$info->title] = array('info' => $info, 'errors' => $errors);
            }
        }

        $plugins = Eresus_Plugin_Registry::getInstance();

        foreach ($data['plugins'] as &$item)
        {
            if ($item['info'] instanceof Eresus_PluginInfo)
            {
                $required = $item['info']->getRequiredPlugins();
                foreach ($required as $plugin)
                {
                    list ($name, $minVer, $maxVer) = $plugin;
                    if (
                        !isset($plugins->items[$name]) ||
                        ($minVer && version_compare($plugins->items[$name]->version, $minVer, '<')) ||
                        ($maxVer && version_compare($plugins->items[$name]->version, $maxVer, '>'))
                    )
                    {
                        {
                            $msg = I18n::getInstance()->getText('Requires plugin: %s', $this);
                            $item['errors'] []= sprintf($msg, $name . ' ' . $minVer . '-' . $maxVer);
                        }
                    }
                }
            }
        }

        ksort($data['plugins']);

        /* @var TAdminUI $page */
        $page = Eresus_Kernel::app()->getPage();
        $tmpl = $page->getUITheme()->getTemplate('PluginManager/add-dialog.html');
        $html = $tmpl->compile($data);

        return $html;
    }
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;
    }
1346779
function validateData(data){
  /* Создаем промис */
  return new Promise(function(resolve, reject){
    if(
      (data.password == "iddqd")
      &&(data.login == "Carmak")
    ){
      /* Все верно, пользователь авторизирован */
      resolve(data);
    }else{
      /* Ошибка при вводе данных */
      reject(new Error('Ошибка при вводе логина или пароля'));
    }
  });
}
970474
static function register_file($file, $new_instance = true, $exists_check = true, $class_name = NULL)
	{
		$ch = new bors_cache_fast(NULL);
		if($l = $ch->get('bors_image_register', $file))
			return $l;

		if(!$class_name)
		{
			if(function_exists('get_called_class'))
				$class_name = get_called_class();
			else
				$class_name = 'bors_image';
		}

		$img = bors_new($class_name, NULL);

		$data = url_parse($file);

		if($exists_check && $img2 = bors_find_first($class_name, [
//				'CONVERT(`full_file_name` USING utf8mb4)=' => $data['local_path']
//				'CONVERT(`full_file_name` USING utf8mb4)=' => $data['local_path']
				'full_file_name' => iconv('utf-8', 'utf-8//ignore', $data['local_path']),
			]))
			return $ch->set($img2, rand(3600, 86400));

		$img->set_original_filename(basename($file), $new_instance);
//		$img->set_relative_path(str_replace($_SERVER['DOCUMENT_ROOT'], '', dirname($file)), $new_instance);
		// Потом после рефакторинга этот хардкод уйдёт.
		$img->set_relative_path(preg_replace('!/var/www/[^/]+/htdocs/!', '', dirname($file)), $new_instance);
		$img->set_full_file_name($data['local_path'], $new_instance);
		$img->set_extension(preg_replace('!^.+\.([^\.]+)$!', '$1', $img->original_filename()), $new_instance);
		$img->set_file_name($img->original_filename(), $new_instance);

		$img->hash_recalculate();

		@chmod($img->image_dir(), 0777);
		@chmod($img->file_name_with_path(), 0666);

		$img->recalculate($new_instance);

		if($new_instance)
			$img->new_instance();

		return $ch->set($img, rand(3600, 86400));
	}
960627
def download(self, force=False):
        
        exists, dest_path = self._downloader.cache.exists_packed(package=self, pkg_path=self.packed_path,
                                                                 check_stat=not self._in_cache)
        unp_exists, unp_path = self._downloader.cache.exists_unpacked(package=self, pkg_path=self.unpacked_path)

        # Если архива нет, то и кешу доверять не стоит
        if not exists:
            unp_exists = False

        if exists and not self.packed_path:
            self.packed_path = dest_path

        if force or not exists:
            # _packed_path = self._packed_path
            dest_path_tmp = dest_path + ".tmp"
            if os.path.exists(dest_path_tmp):
                os.remove(dest_path_tmp)
            self._adapter.download_package(self._pkg, dest_path_tmp)
            os.rename(dest_path_tmp, dest_path)
            self.packed_path = dest_path
            # if not _packed_path:
            self._not_cached = True
        else:
            if unp_exists and not self.unpacked_path:
                self.unpacked_path = unp_path
                self._not_cached = False

        if self._not_cached and unp_exists:
            shutil.rmtree(unp_path, ignore_errors=True)

        return self.packed_path
542447
function insert()
    {
        # Получение данных
        $item = array(
            'name' => arg('name', 'dbsafe'),
            'login' => arg('login', '/[^a-z0-9_]/'),
            'access' => arg('access', 'int'),
            'hash' => Eresus_CMS::getLegacyKernel()->password_hash(arg('pswd1')),
            'mail' => arg('mail', 'dbsafe'),
        );
        # Проверка входных данных
        $error = false;
        if (empty($item['name']))
        {
            Eresus_Kernel::app()->getPage()->addErrorMessage(admUsersNameInvalid);
            $error = true;
        }
        if (empty($item['login']))
        {
            Eresus_Kernel::app()->getPage()->addErrorMessage(admUsersLoginInvalid);
            $error = true;
        }
        if ($item['access'] <= ROOT)
        {
            Eresus_Kernel::app()->getPage()->addErrorMessage('Invalid access level!');
            $error = true;
        }
        if ($item['hash'] != Eresus_CMS::getLegacyKernel()->password_hash(arg('pswd2')))
        {
            Eresus_Kernel::app()->getPage()->addErrorMessage(admUsersConfirmInvalid);
            $error = true;
        }
        # Проверка данных на уникальность
        $check = $this->accounts->get("`login` = '{$item['login']}'");
        if ($check)
        {
            Eresus_Kernel::app()->getPage()->addErrorMessage(admUsersLoginExists);
            $error = true;
        }
        if ($error)
        {
            saveRequest();
            HTTP::redirect(Eresus_CMS::getLegacyKernel()->request['referer']);
        }
        if (!$this->accounts->add($item))
        {
            Eresus_Kernel::app()->getPage()->addErrorMessage('Error creating user account');
        }
        HTTP::redirect(arg('submitURL'));
    }
532043
function get_lock($time = -1) {
            $tmp_time = microtime(true);
            if ($this->_lock_acquired) {
                return true;
            }

            self::create_folders_in_path(dirname($this->filename));
            if (!is_dir(dirname($this->filename))) {
                throw new MutexException('Folder "'.dirname($this->filename).'" is not a folder', 4);
            } elseif (!is_writable(dirname($this->filename))) {
                throw new MutexException('Folder "'.dirname($this->filename).'" is not writable', 2);
            } elseif (file_exists($this->filename) and !is_writable($this->filename)) {
                throw new MutexException('File "'.$this->filename.'" is not writable', 3);
            }

            // Открываем файл
            $this->_file_handler = fopen($this->filename, file_exists($this->filename) ? 'ab' : 'wb');
            while (($this->_file_handler === false) and (
                    ($tmp_time + $time >= microtime(true)) or ($time == -1)
                )) {
                usleep(10000);
                $this->_file_handler = fopen($this->filename, 'ab');
            }
            if ($this->_file_handler === false) {
                return false;
            }

            // Блочим файл
            if ($time >= 0) {
                $result = flock($this->_file_handler, LOCK_EX | LOCK_NB);
                while (!$result and ($tmp_time + $time >= microtime(true))) {
                    // U MAD?
                    usleep(10000);
                    $result = flock($this->_file_handler, LOCK_EX | LOCK_NB);
                }
            } else {
                $result = flock($this->_file_handler, LOCK_EX);
            }

            if ($result) {
                $this->_lock_acquired_time = microtime(true);
                // @todo Не работает под Windows
                fwrite($this->_file_handler, posix_getpid()."\n".microtime(true)."\n".posix_getuid()."\n\n");
                fflush($this->_file_handler);
                $this->_lock_acquired = true;
            } else {
                fclose($this->_file_handler);
                $this->_file_handler = false;
            }

            return $result;
        }