| Current Path : /var/www/html/quest5/common/components/ |
| Current File : /var/www/html/quest5/common/components/PortalRouting.php |
<?php
namespace common\components;
use backend\models\frontend\FrontendSite;
use backend\models\frontendpage\FrontendPage;
class PortalRouting
{
private static $site_id;
private static $page_id;
private static $params;
private static $r;
private static $slug_enable;
private static $route;
const DEFAULT_SITE_ROUTE = 'site/index';
// landing page, portal
const DEFAULT_ERROR_ROUTE = 'site/error';
// default cms 404 slug
const DEFAULT_ERROR_PAGE = 'four-zero-four';
// error
public function __construct()
{
self::$params = \Yii::$app->request->getQueryParams();
self::$route = \Yii::$app->controller->route;
self::$r = self::$params['r'] ?? '';
self::$site_id = isset($_GET['site_id']) ? preg_replace('/[^\da-z\-]+/', '', $_GET['site_id']) : null;
self::$page_id = isset($_GET['page_id']) ? preg_replace('/[^\da-z\-]+/', '', $_GET['page_id']) : null;
}
public static function isFrontendControllerMethod()
{
return (self::$route != self::DEFAULT_SITE_ROUTE && self::$route !== self::DEFAULT_ERROR_ROUTE);
}
public static function isRouteError()
{
return (self::$route == self::DEFAULT_ERROR_ROUTE);
}
public static function isPrettyUrl()
{
return \Yii::$app->urlManager->enablePrettyUrl && (empty(self::$page_id) && empty(self::$site_id));
}
public static function isLanding()
{
$route = trim(\Yii::$app->request->url, '/');
return (empty(self::$page_id) && empty(self::$site_id) && empty($route));
}
public static function isBasedOnId()
{
return (!empty(self::$page_id) || !empty(self::$site_id));
}
public static function getlandingSite()
{
return FrontendSite::findOne([
'site_default' => 1,
'site_enable' => 1
]);
}
public static function getlandingPage()
{
$site = self::getlandingSite();
if (empty($site)) {
die('No site enable. Make sure site is enable and set as main');
}
return FrontendPage::find()->where([
'site_id' => $site->site_id,
'page_default' => 1,
])->one();
}
public static function getPageBasedOnSlug($default_page = null, $default_params = null)
{
$site_slug = null;
$slug = $default_page;
$routes = trim(\Yii::$app->request->url, '/');
if (!empty($routes)) {
$routes = explode("/", $routes);
$routes = preg_replace('/[^\da-z\-\?]+/', '', $routes);
// if routes less than 2 parameter // every route will start with site name such as main
if (count($routes) < 2) {
if (empty($default_page)) {
die(\Yii::$app->view->render('404'));
}
list($site_slug) = $routes;
} else {
list($site_slug, $slug) = $routes;
}
// separate get from url
$slug = preg_replace('/\?\S*$/', '', $slug);
$site = FrontendSite::find()->where([
'site_slug' => $site_slug,
'slug_enable' => 1,
'site_enable' => 1
])->one();
if (!empty($site)) {
$page = FrontendPage::find()->where([
'site_id' => $site->site_id,
'page_slug' => $slug,
'slug_enable' => 1,
'page_enable' => 1
])->one();
if (!empty($page)) {
return $page;
}
}
if(!empty($site)) {
$page404 = FrontendPage::find()->where([
'site_id' => $site->site_id,
'page_slug' => 'four-zero-four',
'slug_enable' => 1
])->one();
//redirect
if(!empty($page404)) {
self::RouteRedirect($site->site_slug);
}
}
die(\Yii::$app->view->render('404'));
}
}
public static function getSiteObjectBaseOnId()
{
if (filter_var(self::$site_id, FILTER_VALIDATE_INT)) {
return FrontendSite::find()->where([
'site_id' => self::$site_id,
'site_enable' => 1
])->one();
}
die(\Yii::$app->view->render('404'));
}
public static function getPageObjectBaseOnId()
{
$site = self::getSiteObjectBaseOnId();
if(empty($site)) {
die('This site is not enable. Make sure site is enable.');
}
if (empty(self::$page_id)) {
$page = FrontendPage::find()->where([
'site_id' => $site->site_id,
'page_default' => 1
])->one();
if (!empty($page)) {
return $page;
}
return FrontendPage::find()->where([
'site_id' => $site->site_id
])->one();
} else {
// by id
if (filter_var(self::$page_id, FILTER_VALIDATE_INT)) {
$page = FrontendPage::find()->where([
'site_id' => $site->site_id,
'page_id' => self::$page_id
])->one();
if (!empty($page)) {
return $page;
}
}
}
die(\Yii::$app->view->render('404'));
}
private static function RouteRedirect($site_id) {
header("Location: /{$site_id}/" . self::DEFAULT_ERROR_PAGE);
die();
}
}