/** * Вывод формы авторизации. * @route GET//login */ public static function on_get_login_form(Context $ctx) { if ($ctx->user->id and !$ctx->get('stay')) { return $ctx->getRedirect(); } if (class_exists('APIStream')) { APIStream::init($ctx); } $handler = array('theme' => $ctx->config->get('modules/auth/login_theme')); $content = ''; foreach ((array) $ctx->registry->poll('ru.molinos.cms.page.head', array($ctx, $handler, null), true) as $block) { if (!empty($block['result'])) { $content .= $block['result']; } } $content .= self::getXML($ctx); $xml = html::em('page', array('status' => 401, 'base' => $ctx->url()->getBase($ctx), 'host' => MCMS_HOST_NAME, 'prefix' => os::webpath(MCMS_SITE_FOLDER, 'themes'), 'back' => urlencode(MCMS_REQUEST_URI), 'next' => $ctx->get('destination'), 'api' => APIStream::getPrefix(), 'query' => $ctx->query()), $content); if (file_exists($xsl = os::path(MCMS_SITE_FOLDER, 'themes', $handler['theme'], 'templates', 'login.xsl'))) { try { return xslt::transform($xml, $xsl); } catch (Exception $e) { } } return xslt::transform($xml, 'lib/modules/auth/xsl/login.xsl'); }
public static function init(Context $ctx) { if (in_array('cms', stream_get_wrappers())) { } elseif (!stream_wrapper_register('cms', __CLASS__)) { throw new RuntimeException(t('Не удалось инициализировать обработчик cms://')); } else { self::$router = new Router(); self::$router->poll($ctx); Logger::log("IN 0.000000 " . substr(MCMS_REQUEST_URI, 1), 'api'); } }
/** * Вывод административной страницы. Вызывает обработчик, указанный в next, * предварительно проверив права пользователя. */ public static function serve(Context $ctx, $path, array $pathinfo) { if (class_exists('APIStream')) { APIStream::init($ctx); } try { self::checkperm($ctx, $pathinfo); if (!$ctx->user->id and empty($pathinfo['anonymous'])) { throw new UnauthorizedException(); } if (empty($pathinfo['next'])) { if (!empty($pathinfo['xsl'])) { $pathinfo['next'] = 'AdminPage::xsltonly'; } else { throw new RuntimeException(t('Не указан обработчик для страницы %path (параметр <tt>next</tt>).', array('%path' => $path))); } } if (!is_callable($pathinfo['next'])) { throw new RuntimeException(t('Неверный обработчик для страницы %path (<tt>%next()</tt>).', array('%path' => $path, '%next' => $pathinfo['next']))); } $args = func_get_args(); $output = call_user_func_array($pathinfo['next'], $args); if (!$output instanceof Response) { $xsl = empty($pathinfo['xsl']) ? null : implode(DIRECTORY_SEPARATOR, explode('/', $pathinfo['xsl'])); $tmp = new AdminPage($output, $xsl); $output = $tmp->getResponse($ctx); } return $output; } catch (NotConnectedException $e) { Logger::trace($e); if (is_dir(os::path('lib', 'modules', 'install'))) { $ctx->redirect('install?destination=' . urlencode(MCMS_REQUEST_URI)); } else { throw new RuntimeException('Система не проинсталлирована и модуля install нет.'); } } catch (Exception $e) { Logger::trace($e); $data = array('status' => 500, 'error' => get_class($e), 'message' => $e->getMessage(), 'version' => MCMS_VERSION, 'release' => MCMS_RELEASE, 'base' => $ctx->url()->getBase($ctx), 'prefix' => MCMS_SITE_FOLDER . '/themes', 'back' => urlencode(MCMS_REQUEST_URI), 'next' => urlencode($ctx->get('destination')), 'clean' => !empty($_GET['__cleanurls'])); if ($e instanceof UserErrorException) { $data['status'] = $e->getCode(); } $xsl = os::path('lib', 'modules', 'admin', 'template.xsl'); xslt::transform(html::em('page', $data), $xsl)->send(); } }