Your IP : 216.73.216.79


Current Path : /var/www/html/brspace/common/components/
Upload File :
Current File : /var/www/html/brspace/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();
    }
}