diff --git a/mirzaev/skillparts/system/config/web.php.example b/mirzaev/skillparts/system/config/web.php.example index 8336323..cdc1c00 100644 --- a/mirzaev/skillparts/system/config/web.php.example +++ b/mirzaev/skillparts/system/config/web.php.example @@ -101,7 +101,9 @@ $config = [ 'orders/supply/<_key:[^/]+>/' => 'order/supply-', 'orders/supply/<_key:[^/]+>//' => 'order/supply--', 'invoices/' => 'invoice/index', - 'invoices//' => 'invoice/' + 'invoices//' => 'invoice/', + 'verify/send' => 'verify/send', + 'verify/' => 'verify/index' ], ], @@ -131,17 +133,44 @@ $config = [ ], 'params' => require __DIR__ . '/params.php', 'on beforeAction' => function ($event) { - if ( - !yii::$app->user->isGuest - && (yii::$app->request->getPathInfo() !== 'offer' - && yii::$app->request->getPathInfo() !== 'offer/suppliers' - && yii::$app->request->getPathInfo() !== 'offer/accept' - && yii::$app->request->getPathInfo() !== 'offer/accept-suppliers' - && yii::$app->request->getPathInfo() !== 'notification' - && yii::$app->request->getPathInfo() !== 'identification') - ) { - // Нет соглашения с офертой + if (yii::$app->user->isGuest) { + // Гость + } else { + // Пользователь + // Подтверждение почты + if (yii::$app->user->identity->vrfy !== true) { + // Почта не подтверждена + + if (!(str_starts_with(yii::$app->request->getPathInfo(), 'verify') + || match (yii::$app->request->getPathInfo()) { + 'policy', 'notification', 'identification' => true, + default => false + })) { + // Фильтрация страниц + + if (yii::$app->request->isPost) { + // POST-запрос + + yii::$app->response->format = Response::FORMAT_JSON; + + yii::$app->response->statusCode = 401; + + return [ + 'main' => yii::$app->controller->renderPartial('/account/verify'), + 'redirect' => '/registration', + '_csrf' => yii::$app->request->getCsrfToken() + ]; + } else { + // Подразумевается как GET-запрос + + // Переадресация на страницу указывающую на необходимость подтвердить почту + yii::$app->response->redirect('/verify')->send(); + } + } + } + + // Согласие с офертой if ( !(isset(yii::$app->session['offer_buyer_accepted']) && yii::$app->session['offer_buyer_accepted'] === true) @@ -150,8 +179,33 @@ $config = [ ) { // Нет подтверждения офферты пользователя - // Переадресация на оферту - yii::$app->response->redirect('/offer')->send(); + if (!(str_starts_with(yii::$app->request->getPathInfo(), 'verify') + || str_starts_with(yii::$app->request->getPathInfo(), 'offer') + || match (yii::$app->request->getPathInfo()) { + 'notification', 'identification' => true, + default => false + })) { + // Фильтрация страниц + + if (yii::$app->request->isPost) { + // POST-запрос + + yii::$app->response->format = Response::FORMAT_JSON; + + yii::$app->response->statusCode = 401; + + return [ + 'main' => yii::$app->controller->renderPartial('/offer/index'), + 'redirect' => '/registration', + '_csrf' => yii::$app->request->getCsrfToken() + ]; + } else { + // Подразумевается как GET-запрос + + // Переадресация на оферту + yii::$app->response->redirect('/offer')->send(); + } + } } else if ( (isset(yii::$app->user->identity->agnt) && yii::$app->user->identity->agnt === true) @@ -162,8 +216,33 @@ $config = [ ) { // Нет подтверждения офферты поставщика - // Переадресация на оферту - yii::$app->response->redirect('/offer/suppliers')->send(); + if (!(str_starts_with(yii::$app->request->getPathInfo(), 'verify') + || str_starts_with(yii::$app->request->getPathInfo(), 'offer') + || match (yii::$app->request->getPathInfo()) { + 'notification', 'identification' => true, + default => false + })) { + // Фильтрация страниц + + if (yii::$app->request->isPost) { + // POST-запрос + + yii::$app->response->format = Response::FORMAT_JSON; + + yii::$app->response->statusCode = 401; + + return [ + 'main' => $this->renderPartial('/offer/supplier'), + 'redirect' => '/registration', + '_csrf' => yii::$app->request->getCsrfToken() + ]; + } else { + // Подразумевается как GET-запрос + + // Переадресация на оферту + yii::$app->response->redirect('/offer/suppliers')->send(); + } + } } } }