/** * Runs the action * * @return string result content */ public function run() { if (($exception = Yii::$app->getErrorHandler()->exception) === null) { return ''; } if ($exception instanceof \HttpException) { $code = $exception->statusCode; } else { $code = $exception->getCode(); } if ($exception instanceof Exception) { $name = $exception->getName(); } else { $name = $this->defaultName ?: Yii::t('yii', 'Error'); } if ($code) { $name .= " (#{$code})"; } if ($exception instanceof UserException) { $message = $exception->getMessage(); } else { $message = $this->defaultMessage ?: Yii::t('yii', 'An internal server error occurred.'); } if (Yii::$app->getRequest()->getIsAjax()) { $rr = new RequestResponse(); $rr->success = false; $rr->message = "{$name}: {$message}"; return (array) $rr; } else { if (\Yii::$app->admin->requestIsAdmin) { if (\Yii::$app->user->can(CmsManager::PERMISSION_ADMIN_ACCESS)) { $this->controller->layout = \Yii::$app->cms->moduleAdmin->layout; return $this->controller->render('@skeeks/cms/modules/admin/views/error/error', ['message' => nl2br(Html::encode($message))]); } else { $this->controller->layout = '@skeeks/cms/modules/admin/views/layouts/unauthorized'; return $this->controller->render('@skeeks/cms/modules/admin/views/error/unauthorized-403', ['message' => nl2br(Html::encode($message))]); } } else { //All requests are to our backend //TODO::Add image processing $info = pathinfo(\Yii::$app->request->pathInfo); if ($extension = ArrayHelper::getValue($info, 'extension')) { $extension = \skeeks\cms\helpers\StringHelper::strtolower($extension); if (in_array($extension, ['js', 'css'])) { \Yii::$app->response->format = Response::FORMAT_RAW; if ($extension == 'js') { \Yii::$app->response->headers->set('Content-Type', 'application/javascript'); } if ($extension == 'css') { \Yii::$app->response->headers->set('Content-Type', 'text/css'); } $url = \Yii::$app->request->absoluteUrl; return "/* File: '{$url}' not found */"; } } return $this->controller->render($this->view ?: $this->id, ['name' => $name, 'message' => $message, 'exception' => $exception]); } } }
/** * @param \yii\web\UrlManager $manager * @param \yii\web\Request $request * @return array|bool */ public function parseRequest($manager, $request) { $pathInfo = $request->getPathInfo(); $params = $request->getQueryParams(); $sourceOriginalFile = File::object($pathInfo); $extension = $sourceOriginalFile->getExtension(); if (!$extension) { return false; } if (!in_array(StringHelper::strtolower($extension), (array) \Yii::$app->imaging->extensions)) { return false; } return ['cms/imaging/process', $params]; }
/** * Проверка валидности значения * * @param mixed $value * @return Ix_Validate_Result */ public function validate($extension) { return !in_array(StringHelper::strtolower($extension), self::getPossibleExtensions()) ? $this->_bad("Расширение '{$extension}' Не поддерживается данной библиотекой") : $this->_ok(); }
/** * * Генерация ключевых слов * * @param string $content * @return string */ public function keywords($content = "") { $result = ""; $content = $this->_processPriority($content); if ($content) { //Избавляем от тегов и разбиваем в массив $content = preg_replace("!<script(.*?)</script>!si", "", $content); $content = preg_replace('/(&\\w+;)|\'/', ' ', strtolower(strip_tags($content))); $words = preg_split('/(\\s+)|([\\.\\,\\:\\(\\)\\"\'\\!\\;])/m', $content); foreach ($words as $n => $word) { if (strlen($word) < $this->minKeywordLenth || (int) $word || strpos($word, '/') !== false || strpos($word, '@') !== false || strpos($word, '_') !== false || strpos($word, '=') !== false || in_array(StringHelper::strtolower($word), $this->keywordsStopWords)) { unset($words[$n]); } } // получаем массив с числом каждого слова $words = array_count_values($words); arsort($words); // сортируем - наиболее частые - вперед $words = array_keys($words); $count = 0; foreach ($words as $word) { if (strlen($result) > $this->maxKeywordsLength) { break; } $count++; if ($count > 1) { $result .= ', ' . StringHelper::strtolower($word); } else { $result .= StringHelper::strtolower($word); } } } return $result; }