WhatsApp Whoops! There was an error.
Whoops \ Exception \ ErrorException (E_WARNING)
Cannot modify header information - headers already sent by (output started at /home/office-mebel/www/views/layouts/_head.htm:5) Whoops\Exception\ErrorException thrown with message "Cannot modify header information - headers already sent by (output started at /home/office-mebel/www/views/layouts/_head.htm:5)" Stacktrace: #18 Whoops\Exception\ErrorException in /home/office-mebel/www/phproad/modules/phpr/classes/phpr_response.php:225 #17 setcookie in /home/office-mebel/www/phproad/modules/phpr/classes/phpr_response.php:225 #16 Phpr_Response:setCookie in /home/office-mebel/www/modules/shop/models/shop_cart.php:104 #15 Shop_Cart:getCart in /home/office-mebel/www/modules/shop/helpers/shop_helper.php:34 #14 Shop_Helper:renderMiniCart in /home/office-mebel/www/views/layouts/_dynamic_menu.htm:37 #13 include in /home/office-mebel/www/phproad/modules/phpr/classes/phpr_controller.php:615 #12 Phpr_Controller:renderLayout in /home/office-mebel/www/views/layouts/_header.htm:44 #11 include in /home/office-mebel/www/phproad/modules/phpr/classes/phpr_controller.php:615 #10 Phpr_Controller:renderLayout in /home/office-mebel/www/views/layouts/default.htm:9 #9 include in /home/office-mebel/www/phproad/modules/phpr/classes/phpr_controller.php:615 #8 Phpr_Controller:renderLayout in /home/office-mebel/www/phproad/modules/phpr/classes/phpr_controller.php:409 #7 Phpr_Controller:loadView in /home/office-mebel/www/phproad/modules/core/classes/core_frontendcontroller.php:139 #6 Core_FrontendController:on404 in /home/office-mebel/www/phproad/modules/phpr/classes/phpr_controller.php:459 #5 Phpr_Controller:executeAction in /home/office-mebel/www/phproad/modules/core/classes/core_frontendcontroller.php:280 #4 Core_FrontendController:executeAction in /home/office-mebel/www/phproad/modules/phpr/classes/phpr_controller.php:381 #3 Phpr_Controller:_run in /home/office-mebel/www/phproad/modules/phpr/classes/phpr_response.php:149 #2 Phpr_Response:open404 in /home/office-mebel/www/phproad/modules/phpr/classes/phpr_response.php:118 #1 Phpr_Response:open in /home/office-mebel/www/phproad/system/phproad.php:190 #0 include in /home/office-mebel/www/index.php:45
Stack frames (19)
18
Whoops\Exception\ErrorException
/phproad/modules/phpr/classes/phpr_response.php:225
17
setcookie
/phproad/modules/phpr/classes/phpr_response.php:225
16
Phpr_Response setCookie
/modules/shop/models/shop_cart.php:104
15
Shop_Cart getCart
/modules/shop/helpers/shop_helper.php:34
14
Shop_Helper renderMiniCart
/views/layouts/_dynamic_menu.htm:37
13
include
/phproad/modules/phpr/classes/phpr_controller.php:615
12
Phpr_Controller renderLayout
/views/layouts/_header.htm:44
11
include
/phproad/modules/phpr/classes/phpr_controller.php:615
10
Phpr_Controller renderLayout
/views/layouts/default.htm:9
9
include
/phproad/modules/phpr/classes/phpr_controller.php:615
8
Phpr_Controller renderLayout
/phproad/modules/phpr/classes/phpr_controller.php:409
7
Phpr_Controller loadView
/phproad/modules/core/classes/core_frontendcontroller.php:139
6
Core_FrontendController on404
/phproad/modules/phpr/classes/phpr_controller.php:459
5
Phpr_Controller executeAction
/phproad/modules/core/classes/core_frontendcontroller.php:280
4
Core_FrontendController executeAction
/phproad/modules/phpr/classes/phpr_controller.php:381
3
Phpr_Controller _run
/phproad/modules/phpr/classes/phpr_response.php:149
2
Phpr_Response open404
/phproad/modules/phpr/classes/phpr_response.php:118
1
Phpr_Response open
/phproad/system/phproad.php:190
0
include
/index.php:45
     *
     * @param string $name The name of the cookie.
     * @param string $value The value of the cookie.
     * @param int|string $expire The days of the cookie expires.
     * @param string $path The path on the server in which the cookie will be available on.
     * @param string $domain The domain that the cookie is available.
     * @param bool|string $secure Indicates that the cookie should only be transmitted over a secure HTTPS connection.
     */
    public function setCookie($name, $value, $expire = 0, $path = '/', $domain = '', $secure = false)
    {
        if (PHP_SAPI == "cli") {
            printf(__METHOD__ . " invokation not available in cli mode\n");
            return;
        }
        if ($value === null) $value = "";
        $_COOKIE[$name] = $value;
        if ($expire > 0) {
            $expire = time() + $expire * 24 * 3600;
        }
        setcookie($name, $value, $expire, $path, $domain, $secure);
    }
 
    /**
     * Sends AJAX response with information about exception.
     *
     * @parma mixed $Exception Specifies the exception object or message.
     * @param $exception
     * @param boolean $html Determines whether the response should be in HTML format.
     * @param boolean $focus Determines whether the focusing Java Script code must be added to a response.
     * This parameter will work only if Exception is a Phpr_ValidationException class.
     */
    public function ajaxReportException($exception, $html = false, $focus = false)
    {
        if (PHP_SAPI == "cli") {
            printf(__METHOD__ . " invokation not available in cli mode\n");
            return;
        }
        // Prepare the message
        $message = is_object($exception) ? $exception->getMessage() : $exception;
        if (Phpr::$request->isDebugRequest()) {
     *
     * @param string $name The name of the cookie.
     * @param string $value The value of the cookie.
     * @param int|string $expire The days of the cookie expires.
     * @param string $path The path on the server in which the cookie will be available on.
     * @param string $domain The domain that the cookie is available.
     * @param bool|string $secure Indicates that the cookie should only be transmitted over a secure HTTPS connection.
     */
    public function setCookie($name, $value, $expire = 0, $path = '/', $domain = '', $secure = false)
    {
        if (PHP_SAPI == "cli") {
            printf(__METHOD__ . " invokation not available in cli mode\n");
            return;
        }
        if ($value === null) $value = "";
        $_COOKIE[$name] = $value;
        if ($expire > 0) {
            $expire = time() + $expire * 24 * 3600;
        }
        setcookie($name, $value, $expire, $path, $domain, $secure);
    }
 
    /**
     * Sends AJAX response with information about exception.
     *
     * @parma mixed $Exception Specifies the exception object or message.
     * @param $exception
     * @param boolean $html Determines whether the response should be in HTML format.
     * @param boolean $focus Determines whether the focusing Java Script code must be added to a response.
     * This parameter will work only if Exception is a Phpr_ValidationException class.
     */
    public function ajaxReportException($exception, $html = false, $focus = false)
    {
        if (PHP_SAPI == "cli") {
            printf(__METHOD__ . " invokation not available in cli mode\n");
            return;
        }
        // Prepare the message
        $message = is_object($exception) ? $exception->getMessage() : $exception;
        if (Phpr::$request->isDebugRequest()) {
                    $cart = self::create();
                    $cart->cart_id = $cartId;
                }
            }
 
            // если включена опция автопересчёта корзины
            if (Phpr::$config->get('SHOP_AUTORECALCULATE_CART', false)) {
                $cart->recalculateCart();
            }
            return $cart;
        }
 
        // если корзина не найдена, то создаём новую
        do {
            $cartId = self::generateCartId();
        } while (!self::checkIdAccessibility($cartId));
 
        $cart = self::create();
        $cart->cart_id = $cartId;
        Phpr::$response->setCookie(self::cookieName, $cartId, 90);
        
        return $cart;
    }
 
    /**
     * @internal
     * @param $id
     * @return bool
     */
    private static function checkIdAccessibility($id) 
    {
        return Db_DbHelper::scalar("select count(*) from shop_carts where cart_id = ?", $id) == 0;
    }
 
    /**
     * {@inheritdoc}
     *
     * @param string $context
     */
    public function define_columns($context = null) 
        $viewData = [
            'withQuantity' => !!$withQuantity,
            'initialQuantity' => $initialQuantity,
            'item' => $item,
            'type' => $type,
            'idPrefix' => self::getIdFor($item)
        ];
        $controller->renderPartial($controller->getViewsDir() . "shop/_add_to_cart.htm", $viewData);
    }
 
    public static function getIdFor(Db_ActiveRecord $item)
    {
        $type = $item instanceof Catalog_Sku ? 'sku' : 'product';
        return "atc-{$type}-{$item->id}";
    }
 
    public static function renderMiniCart(Core_FrontendController $controller, ?Shop_Cart $cart = null)
    {
        if (!$cart) {
            $cart = Shop_Cart::getCart();
        }
        $controller->renderPartial($controller->getViewsDir() . "shop/_mini_cart.htm", [
            "cart" => $cart
        ]);
    }
 
    /*
     * Если магазин открыт, то возвращается пустая строка
     * Если магазин закрыт, то возвращается текст, который необходимо отобразить на сайте
     */
    public static function isTheShopOpen()
    {
        if (Phpr::$config->get('SHOP_ENABLE_WORK_TIME', false)) {
            $nonWorkingDays = explode(',', Admin_ModuleSettings::get_module_parameter("shop", "non_working_days"));
            if (in_array(date('d-m-Y'), array_map(function ($date) {
                return str_replace(" ", "", $date);
            }, $nonWorkingDays))) {
                return Admin_ModuleSettings::get_module_parameter("shop", "non_working_days_text");
            }
            $workTime = str_replace(" ", "", Admin_ModuleSettings::get_module_parameter("shop", "work_time_" . date('N')));
?>
<?php if ($items !== null): ?>
<ul>
    <?php foreach ($items as $idx => $item): ?>
        <?php /** @var Admin_MenuItem $item */ ?>
        <?php if ($item->is_hidden_in_menu) continue; ?>
        <?php if ( $item->is_current() ): ?>
            <li class="active"><a class="active" href="<?= $item->get_url() ?>"><?= $item->title ?></a></li>
        <?php else: ?>
            <li><a href="<?= $item->get_url() ?>"><?= $item->title ?></a></li>
        <?php endif; ?>
 
        <?php if ( $list_children ) : ?>
            <?php $sub_items = $item->list_children('sort_order'); ?>
            <?php if ( $sub_items->count ) $this->renderLayout('_dynamic_menu', array('items' => $sub_items)); ?>
        <?php endif; ?>
    <?php endforeach; ?>
 
</ul>
<div class="cart left"><?php Shop_Helper::renderMiniCart($this); ?></div>
 
<?php endif; ?>
        }
 
        $dirPath = $this->layoutsPath;
 
        if ($this->enableThemes && ($theme = Phpr::$config->get('FRONTEND_THEME'))) {
            $dirPath .= '/' . $theme;
        }
 
        if (strpos($layout, '/') === false) {
            $layoutPath = $dirPath . '/' . $layout . ".htm";
        } else {
            $layoutPath = $layout;
        }
 
        if (!file_exists($layoutPath)) {
            throw new Phpr_SystemException("The layout file \"{$layoutPath}\" does not exist");
        }
 
        /** @noinspection PhpIncludeInspection */
        include $layoutPath;
    }
 
    public function renderWidget($name, array $params = [])
    {
        $widget = Phpr_WidgetFactory::getWidget($name);
        if ($widget) {
            $widget->setParams($params);
            $widget->render();
        } else {
            echo "Widget {$name} doesn't exists or is not valid widget";
        }
    }
 
    /**
     * Returns a name of event handler with added action name.
     * Use it when you have multiple event handers on different pages (actions).
     * You may use this method in Java Script "sendForm" method call as a handler name.
     *
     * @param string $eventName Specifies an event name
     * @return string
                <?= $wa->get_filtered_text() ?>
            </div>
        <?php } ?>
 
        <div class="address left desk">
            <img src="/resources/images/icons/address.svg" alt="Адрес">
            <!-- <a href="/contact/"></a> -->
            <?= $header_address->get_filtered_text() ?>
        </div>
 
        <div class="telephone left desk">
            <img src="/resources/images/icons/phone.svg" alt="Телефон">
            <?= $header_tel->get_filtered_text() ?>
        </div>
    </div>
</header>
 
<nav class="top-bar menu-bar">
    <section class="top-bar-section header-bar">
        <?php $this->renderLayout('_dynamic_menu') ?>
    </section>
</nav>
 
        }
 
        $dirPath = $this->layoutsPath;
 
        if ($this->enableThemes && ($theme = Phpr::$config->get('FRONTEND_THEME'))) {
            $dirPath .= '/' . $theme;
        }
 
        if (strpos($layout, '/') === false) {
            $layoutPath = $dirPath . '/' . $layout . ".htm";
        } else {
            $layoutPath = $layout;
        }
 
        if (!file_exists($layoutPath)) {
            throw new Phpr_SystemException("The layout file \"{$layoutPath}\" does not exist");
        }
 
        /** @noinspection PhpIncludeInspection */
        include $layoutPath;
    }
 
    public function renderWidget($name, array $params = [])
    {
        $widget = Phpr_WidgetFactory::getWidget($name);
        if ($widget) {
            $widget->setParams($params);
            $widget->render();
        } else {
            echo "Widget {$name} doesn't exists or is not valid widget";
        }
    }
 
    /**
     * Returns a name of event handler with added action name.
     * Use it when you have multiple event handers on different pages (actions).
     * You may use this method in Java Script "sendForm" method call as a handler name.
     *
     * @param string $eventName Specifies an event name
     * @return string
<!DOCTYPE html>
<html>
    <head>
        <?php $this->renderLayout('_head') ?>
    </head>
    <body>
        <?php $this->renderLayout('_for_old_browsers') ?>
        <div id="layout" class="clearfix">
            <?php $this->renderLayout('_header') ?>
            <div class="content-wrapper">
                <div class="sidebar">
                    <span class="burger-head"><img width="28" height="23" src="/resources/images/icons/burger-icon.png" alt=""/></span>
 
                    <div class="head-index-phone clearfix">
                        <span class="index-phone"><?=Admin_TextBlock::get('header_tel_mobile', 'Header-mobile: Телефон', 'text', '+7 (4242) 77-35-00')->get_filtered_text()?></span>
                        <div class="index-basket">
                            <?php Shop_Helper::renderMiniCart($this); ?>
                        </div>
 
                    </div>
 
                    <?php $this->renderLayout("_sidebar"); ?>
                </div>
 
                <div class="main">
                    <div class="">
                        <?= Phpr_View::block('view') ?>
                    </div>
                </div>
            </div>
 
            <div class="collapse-block index-mobile">
                <div class="contacts">
                    <?php $footer_address = Admin_TextBlock::get('footer_address', 'Footer: Адрес') ?>
                    <?= $footer_address->get_filtered_text() ?>
                </div>
            </div>
 
            <div class="copyrights">
                <?php $this->renderLayout('_copyrights') ?>
        }
 
        $dirPath = $this->layoutsPath;
 
        if ($this->enableThemes && ($theme = Phpr::$config->get('FRONTEND_THEME'))) {
            $dirPath .= '/' . $theme;
        }
 
        if (strpos($layout, '/') === false) {
            $layoutPath = $dirPath . '/' . $layout . ".htm";
        } else {
            $layoutPath = $layout;
        }
 
        if (!file_exists($layoutPath)) {
            throw new Phpr_SystemException("The layout file \"{$layoutPath}\" does not exist");
        }
 
        /** @noinspection PhpIncludeInspection */
        include $layoutPath;
    }
 
    public function renderWidget($name, array $params = [])
    {
        $widget = Phpr_WidgetFactory::getWidget($name);
        if ($widget) {
            $widget->setParams($params);
            $widget->render();
        } else {
            echo "Widget {$name} doesn't exists or is not valid widget";
        }
    }
 
    /**
     * Returns a name of event handler with added action name.
     * Use it when you have multiple event handers on different pages (actions).
     * You may use this method in Java Script "sendForm" method call as a handler name.
     *
     * @param string $eventName Specifies an event name
     * @return string
     * @param boolean $suppressLayout Determines whether the view must be loaded without layout.
     * @param boolean $suppressDefault Indicates whether the default action view must be suppressed.
     */
    public function loadView($view, $suppressLayout = false, $suppressDefault = false)
    {
        // If there is no layout provided, just render the view
        if ($this->layout == '' || $suppressLayout) {
            $this->renderPartial($view, null, false);
            return;
        }
 
        // Catch the layout blocks
        Phpr_View::beginBlock("OutsideBlock");
        $this->renderPartial($view, null, false);
        Phpr_View::endBlock();
 
        Phpr_View::appendBlock('view', Phpr_View::getBlock('OutsideBlock'));
 
        // Render the layout
        $this->renderLayout();
 
        if ($suppressDefault) {
            $this->suppressView();
        }
    }
 
    /**
     * Finds and executed a handler for an event triggered by client.
     *
     * @param string $actionName Specifies the action name.
     * @param array $parameters A list of the action parameters.
     * @return boolean Determines whether the event was handled.
     */
    protected function dispatchEvents($actionName, $parameters)
    {
        $handlerName = null;
        if (isset($_SERVER['HTTP_UFO_AJAX_HANDLER'])) {
            $handlerName = $_SERVER['HTTP_UFO_AJAX_HANDLER'];
        }
 
            }
        } catch (Exception $ex) {
        }

        if ($block && !$block->is_page())
            $block = null;

        if ($block) {
            $this->beforeRenderStaticBlock($block);

            Admin_SeoPlugin::apply($block);

            $this->viewData['title'] = Phpr::$config->get('ENABLE_TYPOGRAPHIC') ? $block->title_no_typo : $block->title;
            $this->viewData['block'] = $block;
            $this->viewData['body_class'] = Phpr::$config->get('STATICPAGE_CLASS', 'inner');
            $this->layout = Phpr::$config->get('STATICPAGE_LAYOUT', 'default');
            if ($block->template && is_file($this->getViewsDir() . "/application/" . $block->template . ".htm")) {
                $this->staticView = $block->template;
            }
            $this->loadView($this->staticView, false, true);
        } else {
            if (PHP_SAPI != "cli") {
                Phpr::$response->setHttpStatus(Phpr_Response::httpNotFound);
            }
            $this->layout = Phpr::$config->get('404_LAYOUT', 'default');
            $this->viewData['title'] = 'Страница не найдена';

            $this->loadView('on404', false, true);
        }
    }

    protected function beforeRenderStaticBlock($block)
    {
    }

    /**
     * Get uploaded file
     *
     * @param int $id file id
     * @return void
        }
 
        if (preg_match("/^" . $this->_eventPostPrefix . "\{(?P<handler>" . $actionName . "_on[a-zA-Z_0-9]*)\}$/i", $handlerName, $matches)) {
            $this->_execEventHandler($matches["handler"], $parameters, $actionName);
            return true;
        }
        return false;
    }
 
    /**
     * This method is used by the PHP Road internally.
     * Invokes the controller action or event handler and loads corresponding view.
     *
     * @param string $methodName Specifies a method name to execute.
     * @param array $parameters A list of the action parameters.
     */
    public function executeAction($methodName, $parameters)
    {
        // Execute the action
        call_user_func_array([&$this, $methodName], $parameters);
 
        // Load the view
        if (!$this->_suppressView) {
            $this->loadView($methodName);
        }
    }
 
    /**
     * This method is used by the PHP Road internally by the RequestAction method.
     * Invokes the controller action or event handler and loads corresponding view.
     *
     * @param string $methodName Specifies a method name to execute.
     * @param array $parameters A list of the action parameters.
     * @return mixed
     */
    public function executeEnternalAction($methodName, $parameters)
    {
        $result = $this->$methodName($parameters);
 
        if (!$this->_suppressView) {
        Phpr::$response->redirect(Phpr::$config->get("404_REDIRECT_TARGET", "/not-found/") . "?u=" . Phpr::$request->getCurrentUri());
    }

    /**
     * Execute action
     *
     * @param string $methodName
     * @param mixed $parameters
     * @return void
     * @todo remove obsolete Phpr::$cache
     */
    public function executeAction($methodName, $parameters)
    {
        $this->action_parameters = $parameters;

        $post = Phpr::$request->getRequestType() == Phpr_Request::POST; // (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'POST');
        $cacheable = isset($this->cacheableActions[$methodName]) || in_array($methodName, $this->cacheableActions);

        if (!Phpr::$cache || !$cacheable) {
            parent::executeAction($methodName, $parameters);
            return;
        }

        if ($cacheable) {
            $cacheKey = $this->get_page_cache_key($methodName, $parameters);

            if (!$post) {
                $data = Phpr::$cache->get($cacheKey);
                if ($data) {
                    echo $data;
                    return;
                }
            }

            ob_start();
            parent::executeAction($methodName, $parameters);
            $data = ob_get_clean();

            $dependency = null;
            if (isset($this->cacheableActions[$methodName]['dependency'])) {
        }
        return PATH_APP . "/views/" . $themePath;
    }
 
    /**
     * This method is used by the PHP Road internally.
     * Dispatches events, invokes the controller action or event handler and loads a corresponding view.
     *
     * @param string $actionName Specifies the action name.
     * @param array $parameters A list of the action parameters.
     */
    public function _run($actionName, $parameters)
    {
        if (Phpr::$request->isAjaxRequest()) {
            $this->suppressView();
        }
 
        // If no event was handled, execute the action requested in URI
        if (!$this->dispatchEvents($actionName, $parameters)) {
            $this->executeAction($actionName, $parameters);
        }
    }
 
    /**
     * Loads a view with the name specified. Applies layout if its name is provided by the controller.
     * The view file must be situated in the views directory, and has the extension "htm".
     *
     * @param string $view Specifies the view name, without extension: "archive".
     * @param boolean $suppressLayout Determines whether the view must be loaded without layout.
     * @param boolean $suppressDefault Indicates whether the default action view must be suppressed.
     */
    public function loadView($view, $suppressLayout = false, $suppressDefault = false)
    {
        // If there is no layout provided, just render the view
        if ($this->layout == '' || $suppressLayout) {
            $this->renderPartial($view, null, false);
            return;
        }
 
        // Catch the layout blocks
            } elseif (Phpr::$sqlLogger != null) {
                $viewData = [
                    "logger" => Phpr::$sqlLogger
                ];
                $obj->renderPartial(PATH_SYSTEM . '/modules/db/views/logger_partial.htm', $viewData, true, true);
            }
        }
    }
 
    /**
     * Opens the "Page not found" page.
     * By default this method opens a page provided by the PHP Road.
     * You may supply the application 404 page by creating the On404() action in the Application Controller.
     */
    public function open404()
    {
        // Try to execute the application controller On404 action.
        $controller = Phpr::$classLoader->loadController(self::controllerApplication);
        if ($controller != null && $controller->_actionExists(self::actionOn404Action)) {
            $controller->_run(self::actionOn404Action, array());
            //exit;
        } else {
            // Output the default 404 message.
            include PATH_SYSTEM . "/errorpages/404.htm";
            Phpr::destroyApp();
        }
    }
 
    /**
     * Opens the Error Page.
     * By default this method opens a page provided by the PHP Road.
     * You may supply the application error page by creating the OnException($Exception) action in the Application Controller.
     *
     * @deprecated
     * @param Exception $exception
     */
    public function openErrorPage($exception)
    {
        // do nothing
    }
            return;
        }
 
        if (!($controller && strlen($controller))) {
            $this->open404();
            return;
        }
 
        $obj = Phpr::$classLoader->loadController($controller, $folder);
        if (!$obj) {
            $this->open404();
            return;
        }
 
        if ($action == $controller)
            $action = 'index';
 
        if ($obj) {
            if ($obj->canCheckAnAction() && !$obj->_actionExists($action)) {
                $this->open404();
                return;
            }
 
            ob_start();
            $obj->_run($action, $parameters);
            if (Phpr::$request->isAjaxRequest()) {
                $content = "";
                while (ob_get_level()) $content .= ob_get_clean();
                $this->sendJson(array(
                    'response' => $content
                ));
            } elseif (Phpr::$sqlLogger != null) {
                $viewData = [
                    "logger" => Phpr::$sqlLogger
                ];
                $obj->renderPartial(PATH_SYSTEM . '/modules/db/views/logger_partial.htm', $viewData, true, true);
            }
        }
    }
 
    if (Phpr::$config->get('DEV_MODE', 'test') == 'test') {
        Phpr::$config->set('DEV_MODE', false);
    }
}
 
$pluginList = Phpr::$config->get('PLUGINS', array());
foreach ($pluginList as $className => $config) {
    if (!class_exists($className)) {
        throw new Phpr_SystemException('Класс ' . $className . ' не найден.');
    }
    $interfaces = class_implements($className);
    if (!in_array('Admin_ICmsPlugin', $interfaces)) {
        throw new Phpr_SystemException('Класс плагина ' . $className . ' должен реализовывать интерфейс Admin_ICmsPlugin.');
    }
 
    new $className($config);
}
 
if (!isset($Phpr_InitOnly) || !$Phpr_InitOnly) {
    Phpr::$response->open(Phpr::$request->getCurrentUri(true));
}
 
$bootstrapPath = __FILE__;

/**
 * Specify the application directory root
 *
 * Leave this variable blank if application root directory matches the site root directory.
 * Otherwise specify an absolute path to the application root, for example:
 * $applicationRoot = realpath( dirname($bootstrapPath)."/../app" );
 *
 */
$applicationRoot = "";

/*
 * Include the PHP Road library
 *
 * You may need to specify a full path to the phproad.php script,
 * in case if the PHP Road root directory is not specified in the PHP includes path.
 *
 */
include(dirname(__FILE__) . "/phproad/system/phproad.php");

if (Phpr::$request->isDebugRequest()) {
    echo sprintf("<!-- %.06fsec, %.02fMb -->", microtime(true) - $start, memory_get_peak_usage() / 1024 / 1024);
}

Environment & details:

empty
empty
empty
Key Value
PHPSESSID c1l98jiq7p2ss339qc33piobl6
cart-id 3ae01accdbbdc1bdcd231b66e83228f03343cdb0132ec33af2c17e099b466a22593f87f06330d9400af2ae60c7367aaf81f7c0e8e37b409f05a25c9a101ba0cd
empty
Key Value
USER office-mebel
HOME /home/office-mebel
HTTP_COOKIE PHPSESSID=c1l98jiq7p2ss339qc33piobl6
HTTP_REFERER https://vigtrade.ru/contact
HTTP_ACCEPT_ENCODING gzip, br, zstd, deflate
HTTP_USER_AGENT Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
HTTP_ACCEPT */*
HTTP_HOST vigtrade.ru
SCRIPT_FILENAME /home/office-mebel/www/index.php
REDIRECT_STATUS 200
SERVER_NAME vigtrade.ru
SERVER_PORT 443
SERVER_ADDR 85.192.35.92
REMOTE_PORT 19196
REMOTE_ADDR 216.73.216.169
SERVER_SOFTWARE nginx/1.20.0
GATEWAY_INTERFACE CGI/1.1
HTTPS on
REQUEST_SCHEME https
SERVER_PROTOCOL HTTP/2.0
DOCUMENT_ROOT /etc/nginx/html
DOCUMENT_URI /contact/
REQUEST_URI /contact/
SCRIPT_NAME /contact/index.php
CONTENT_LENGTH
CONTENT_TYPE
REQUEST_METHOD GET
QUERY_STRING
FCGI_ROLE RESPONDER
PHP_SELF /contact/index.php
REQUEST_TIME_FLOAT 1757726335.1792
REQUEST_TIME 1757726335
empty
0. Whoops\Handler\PrettyPageHandler
1. Whoops\Handler\CallbackHandler
2. Whoops\Handler\CallbackHandler