/* Статистика видео.
976639
public function getStatistics($video_link = null, $video_id = null) {
        $result = $this->checkVideo($video_link, $video_id, $part = 'statistics');
        return $result;
    }
799561
public function clear()
    {
        $this->_filters = array(
            'format' => 'json'
        );
        // указываем явно значения по-умолчанию
        $this
            ->setLang(self::LANG_RU)
            ->setOffset(0)
            ->setLimit(10);
//            ->useAreaLimit(false);
        $this->_response = null;
        return $this;
    }
432993
function get_onload($as_html = true) {
        if (!$as_html) {
            return $this->js_onload;
        }
        if (!count($this->js_onload))
            return '';
        $js = '';
        foreach ($this->js_onload as $k => $_js) {
            $js .= trim($_js) . PHP_EOL;
        }
        $js = 'jQuery(document).ready(function(){' . PHP_EOL . $js . '});';
        $js = $this->prepare($js, $this->get_need_min_onload());
        if (!$this->get_need_build_onload()) {
            $ret = '<script>' . PHP_EOL . $js . PHP_EOL . '</script>';
            return $ret;
        }
        //если требуется собирать инлайн скрипты в один внешний файл
        $build_name = $this->make_file_name($this->js_onload, 'js/onload', 'js');
        $this->require_build($build_name, $js);
        return $this->get_link(Helper::build_url($build_name)) . PHP_EOL;
    }
891233
function action_index() {
        Kohana::$profiling = false;
        $file = Request::current()->param('file');
        $this->auto_render = FALSE;
        $info = pathinfo($file);
        if (($orig = Helper::static_original($file))) {
            $content = file_get_contents($orig);
            switch ($info['extension']) {
                case 'php':
                    if (Kohana::$config->load('meerkat/staticfiles.show_php')) {
                        $content = highlight_string($content, true);
                    } else {
                        $content = 'Disable show php scripts in production environment';
                    }
                    break;
                case 'css':
                    $content = Css::instance()->prepare($content, Css::instance()->get_need_min_external());
                    break;
                case 'js':
                    $content = Js::instance()->prepare($content, (strpos('.min.', $file) !== false));
                    break;
                default:
                    break;
            }
            //производим deploy статического файла, в следующий раз его будет
            //отдавать сразу веб-сервер без запуска PHP, но ТОЛЬКО для режима разработки
            if (Kohana::$config->load('meerkat/staticfiles.deploy')) {
                $deploy = Helper::static_file($file);
                if (!file_exists(dirname($deploy))) {
                    mkdir(dirname($deploy), 0777, true);
                }
                file_put_contents($deploy, $content);
            }
            //}
            //а пока отдадим файл руками
            //$this->response->check_cache(sha1($this->request->uri()) . filemtime($orig));
            $this->response->body(trim($content));
            if ('php' != $info['extension']) {
                $this->response->headers('Content-Type', File::mime_by_ext($info['extension']));
            } else {
                $this->response->headers('Content-Type', File::mime_by_ext('html'));
            }
            $this->response->headers('Content-Length', filesize($orig));
            $this->response->headers('Last-Modified', date('r', filemtime($orig)));
        } else {
            // Return a 404 status
            $this->response->body('404 File not found');
            $this->response->status(404);
        }
    }
1296774
public static function giveMeLinksDom($page, $withSlash = false, $withWww = false) {
		// символ 00 мешает DOM-парсеру
		$page = preg_replace('/\x00/', ' ', $page);

		// лишние углы
		$page = preg_replace('/<{2,}/', '<', $page);
		$page = str_replace(["&nbsp;", "\xc2\xa0"], ' ', $page);

		// приходит уже перекодированный в ютф8 текс, нужно заменить объявляения кодировки в тексте
		$page = preg_replace(['/windows-1251/i', '/cp1251/i'], 'utf-8', $page);
		// некоторые символы в ссылках кодируются, исправим это
		$page = preg_replace(['/&#0?61;/', '/&#0?38;/', '/&amp;/', '/&#0?37;/', '/&ndash;/'], ['=', '&', '&', '%', '–'], $page);
		// заменим закоменченый тег <!--noindex--> на обычный
		$c = 1;
		while ($c && $c > 0) {
			$page = preg_replace('/(\<\!--noindex--\>)(.*)(\<\!--\/noindex--\>)/ismU', '<noindex>$2</noindex>', $page, -1, $c);
		}
		$xml = new \DOMDocument();
		@$xml->loadHTML('<?xml encoding="UTF-8">' . $page);
		$links = array();
		foreach($xml->getElementsByTagName('a') as $link) {
			$href = $link->getAttribute('href');
			// ссылка без урла
			if(!$href || in_array($href, ["#", '/', 'javascript:void(0);'])) {
				continue;
			}
			// проверим элемент в <noindex>
			$noindex = self::inNoIndexDom($link);
			// проверим чтобы только элемент находился в noindex
			$noindexOnly = $noindex ? self::inNoIndexDom($link, true) : false;
			if(mb_strlen(utf8_decode($href)) <  mb_strlen($href)) {
				$href = utf8_decode($href);
			}
			$href = urldecode($href);

			$href = self::httpLess(trim($href));
			if (!$withWww) {
				$href = self::wwwLess($href);
			}

			if (!$withSlash) {
				$href = preg_replace(['/(\/\s*)$/i', '/(\/?#\s*)$/i'], '', $href);
			} else {
				$href = preg_replace(['/(\s*)$/i', '/(?#\s*)$/i'], '', $href);
			}

			$links[] = array(
				'acceptor' => mb_strtolower($href),
				'anchor' => $link->nodeValue,
				'rel' => $link->getAttribute('rel'),
				'noindex' => $noindex,
				'noindexOnly' => $noindexOnly
			);
		}

		return $links;
	}
1049502
public function handle($request)
    {
        // смотрим метод, к которому пытаются обратиться
        $namespace = $request->server->namespace;
        $method = $request->call->method;

        if (!empty($request->call->endpoint) && !empty($request->call->action)) {
            $namespace = $request->server->namespace . studly_case($request->call->endpoint) . '\\';
            $controllerName = $request->call->action;
        } elseif (!empty($request->call->endpoint)) {
            $controllerName = $request->call->endpoint;
        } else {
            $methodCall = $request->call->method;

            // парсим имя метода
            $methodArray = explode('_', $methodCall);

            // если имя вызываемого метода без разделителя - значит ищем его в базовом классе
            if (\count($methodArray) === 1) {
                $controllerName = $request->server->controller;
                $method = $methodCall;
            } else {
                $controllerName = $methodArray[0];
                unset($methodArray[0]);
                $method = camel_case(implode('_', $methodArray));
            }

        }

        $controllerName = $namespace . studly_case($controllerName . $request->server->postfix);

        // если нет такого контроллера или метода
        if (!class_exists($controllerName)) {
            throw new JsonRpcException(JsonRpcException::CODE_METHOD_NOT_FOUND);
        }

        $controller = app($controllerName);

        if (!\is_callable([$controller, $method])) {
            throw new JsonRpcException(JsonRpcException::CODE_METHOD_NOT_FOUND);
        }

        $request->controller = $controller;
        $request->method = $method;
        $request->params = !empty($request->call->params) ? array_values((array)$request->call->params) : [];

        return true;
    }
1216685
public function __async_showtree($structure_id = null)
    {
        $db_structure = null;
        // Проверим есть ли элемент структуры с таким ИД
        if (dbQuery('\samson\cms\web\navigation\CMSNav')->StructureID($structure_id)->first($db_structure)) {
            $db_structure->currentNavID = $structure_id;
        }

        $tree = new \samson\treeview\SamsonTree('tree/tree-template', 0, 'structure/addchildren');

        $html = m()->view('index')
            ->title(t('Элементы структуры содержания сайта', true))
            ->parent($db_structure)
            ->tree($tree->htmlTree($db_structure))
            ->output();

        return array(
            'status'=>1,
            'tree'=>$html
        );
    }
1016199
function complete($only_mandatory = true, $only_property = true)
    {
        // Выбор подчиненных объектов
        $proto = $this->proto(null, true);
        $cond = [
            'from' => $proto,
            'select' => 'properties',
            'key' => 'name'
        ];
        if ($only_mandatory){
            $cond['where'] = [['is_mandatory','=',true]];
        }
        $props_children = Data::find($cond);
        if (!$only_property){
            // Выбор подчиненных объектов
            $cond['select'] = 'children';
            $props_children = array_merge($props_children, Data::find($cond));
        }
        // Прототипирование отсутствующих подчиненных
        foreach ($props_children as $name => $child){
            $this->{$name}->complete($only_mandatory, $only_property);
            if ($this->{$name}->order() == Entity::MAX_ORDER){
                $this->{$name}->order($props_children[$name]->order());
            }
        }
    }
814176
public function getHTML()
    {
        $this->parse();
        $xml = clone $this->xml;

        /* Удаляем расширенные теги */
        $tags = $xml->getElementsByTagNameNS(self::NS, '*');
        while ($tags->length > 0)
        {
            $node = $tags->item(0);
            $node->parentNode->removeChild($node);
        }

        // Есть ли поля для выбора файлов?
        $hasFileInputs = false;

        /*
         * Удаляем расширенные атрибуты
         * Ищем input[type=file]
         */
        $tags = $xml->getElementsByTagName('*');
        for ($i = 0; $i < $tags->length; $i++)
        {
            $node = $tags->item($i);

            $isElement = $node->nodeType == XML_ELEMENT_NODE;
            /** @var DOMElement $node */
            $hasAttributes = $isElement && $node->hasAttributes();

            if ($isElement && $hasAttributes)
            {
                /** @var DOMNamedNodeMap $attrs */
                $attrs = $node->attributes;
                for ($j = 0; $j < $attrs->length; $j++)
                {
                    /** @var DOMAttr $attr */
                    $attr = $attrs->item($j);
                    if ($attr->namespaceURI == self::NS)
                    {
                        $attr->ownerElement->removeAttributeNode($attr);
                        $j--;
                    }
                }

                if ($node->tagName == 'input' && $node->getAttribute('type') == 'file')
                {
                    $hasFileInputs = true;
                }
            }
        }

        if ($hasFileInputs)
        {
            /** @var DOMElement $element */
            $element = $xml->firstChild->nextSibling;
            $element->setAttribute('enctype', 'multipart/form-data');
        }

        // Предотвращаем схлопывание пустых textarea
        $tags = $xml->getElementsByTagName('textarea');
        for ($i = 0; $i < $tags->length; $i++)
        {
            $node = $tags->item($i);
            $cdata = $xml->createCDATASection('');
            $node->appendChild($cdata);
        }

        $xml->formatOutput = true;
        $html = $xml->saveXML($xml->firstChild->nextSibling);
        // Удаляем атрибуты пространств имён
        $html = preg_replace('/\s*xmlns:\w+=("|\').*?("|\')/', '', $html);
        // Удаляем пустые <![CDATA[]]>
        $html = str_replace('<![CDATA[]]>', '', $html);

        return $html;
    }
1293004
public function actionTask($id)
    {
        /**
         * @var ImportTask $exportTask
         */
        $exportTask = ImportTask::findOne(['id' => $id]);
        if (!$exportTask)
        {
            $this->stdout("Задача №{$id} не найдена.\n", Console::FG_RED);
            return false;
        }

        $this->stdout("Задача №{$id} — {$exportTask->name}.\n", Console::BOLD);
        $handler = $exportTask->handler;
        if (!$handler)
        {
            $this->stdout("Не найден обработчик $exportTask->component\n", Console::FG_RED);
            print_r(array_keys(\Yii::$app->cmsExport->handlers));
            return false;
        }

        $handler->setResult(new ImportResultConsole([
            'controller' => $this
        ]));

        $handler->execute();
    }
650573
static function upload($from, $to)
    {
        $result = false;
        if(is_uploaded_file($from)){
            $to = self::makeVirtualDir($to);
            // Если папки нет, то создаем её
            $dir = dirname($to);
            if(!is_dir($dir)){
                mkdir($dir, 0775, true);
            }
            if (is_file($to)){
                unlink($to);
            }
            //Перемещаем файл если он загружен через POST
            $result = move_uploaded_file($from, $to);
            self::deleteVirtualDir($to);
        }
        return $result;
    }
178604
public function actionForget()
    {
        $rr = new RequestResponse();
        $model = new PasswordResetRequestFormEmailOrLogin();
        //Не админка
        $model->isAdmin = false;

        //Запрос на валидацию ajax формы
        if ($rr->isRequestOnValidateAjaxForm()) {
            return $rr->ajaxValidateForm($model);
        }
        //Запрос ajax post
        if ($rr->isRequestAjaxPost()) {
            if ($model->load(\Yii::$app->request->post()) && $model->sendEmail()) {
                $rr->success = true;
                $rr->message = 'Проверьте ваш email, дальнейшие инструкции мы отправили туда';
            } else {
                $rr->message = 'Не удалось выполнить запрос на восстановление пароля';
            }

            return (array)$rr;

        } else {
            if (\Yii::$app->request->isPost) {
                if ($model->load(\Yii::$app->request->post()) && $model->sendEmail()) {
                    if ($ref = UrlHelper::getCurrent()->getRef()) {
                        return $this->redirect($ref);
                    } else {
                        return $this->goBack();
                    }
                }
            }
        }

        return $this->render('forget', [
            'model' => $model,
        ]);
    }
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;
    }
245553
function errors()
    {
        if (!$this->_errors){
            $this->_errors = new Error('Ошибки', $this->name(), null, true);
            // Связывание с ошибками родительского объекта. Образуется целостная иерархия ошибок
            if ($this->_parent){
                $this->_parent->errors()->_children->add($this->_errors, '', true);
            }
        }
        return $this->_errors;
    }
1197907
public function shutdown()
    {
        // Если установлен обработчик завершения выполнения скрипта - вызовем его
        if (isset(self::$shutdown_handler) && (call_user_func(self::$shutdown_handler) === false)) return null;

        //echo 'Конец';

        // Выведем все накопленные ошибки
        $this->output();
    }
948131
function getInline($as_html = true) {
        if(!$as_html) {
            return $this->js_inline;
        }
        if(!count($this->js_inline)) {
            return '';
        }
        $js_code = '';
        foreach($this->js_inline as $js) {
            $js_code .= $this->prepare($js, config('larakit.lk-staticfiles.js.inline.min')) . PHP_EOL;
        }
        $js_code = trim($js_code);
        if(!$js_code) {
            return '';
        }
        if(!config('larakit.lk-staticfiles.js.inline.build')) {
            return '<script type="text/javascript">' . PHP_EOL . $js_code . PHP_EOL . '</script>';
        }
        //если требуется собирать инлайн скрипты в один внешний файл
        $build_name = $this->makeFileName($this->js_inline, 'js/inline', 'js');
        $this->requireBuild($build_name, $js_code);
        
        return $this->getLink($this->buildUrl($build_name)) . PHP_EOL;
    }
291631
private function linkAdminResources()
    {
        $page = Eresus_Kernel::app()->getPage();
        /** @var Eresus_Plugin $plugin */
        $plugin = $this->getModule();

        $resource = 'admin/default.css'; // В будущем «default» можно заменить именем темы
        if (file_exists($plugin->getCodeDir() . '/' . $resource))
        {
            $page->linkStyles($plugin->getCodeUrl() . $resource);
        }

        $resource = 'admin/scripts.js';
        if (file_exists($plugin->getCodeDir() . '/' . $resource))
        {
            $page->linkScripts($plugin->getCodeUrl() . $resource);
        }
    }