Author: Alexey Bobkov, Samuel Georges
Inheritance: use trait October\Rain\Support\Traits\Singleton
Exemplo n.º 1
0
 public function boot()
 {
     Event::listen('cms.router.beforeRoute', function ($url) {
         return Controller::instance()->initCmsPage($url);
     });
     Event::listen('cms.page.beforeRenderPage', function ($controller, $page) {
         /*
          * Before twig renders
          */
         $twig = $controller->getTwig();
         $loader = $controller->getLoader();
         Controller::instance()->injectPageTwig($page, $loader, $twig);
         /*
          * Get rendered content
          */
         $contents = Controller::instance()->getPageContents($page);
         if (strlen($contents)) {
             return $contents;
         }
     });
     Event::listen('cms.page.initComponents', function ($controller, $page) {
         Controller::instance()->initPageComponents($controller, $page);
     });
     Event::listen('cms.block.render', function ($blockName, $blockContents) {
         $page = CmsController::getController()->getPage();
         if (!isset($page->apiBag['staticPage'])) {
             return;
         }
         $contents = Controller::instance()->getPlaceholderContents($page, $blockName, $blockContents);
         if (strlen($contents)) {
             return $contents;
         }
     });
     Event::listen('pages.menuitem.listTypes', function () {
         return ['static-page' => 'rainlab.pages::lang.menuitem.static_page', 'all-static-pages' => 'rainlab.pages::lang.menuitem.all_static_pages'];
     });
     Event::listen('pages.menuitem.getTypeInfo', function ($type) {
         if ($type == 'url') {
             return [];
         }
         if ($type == 'static-page' || $type == 'all-static-pages') {
             return StaticPage::getMenuTypeInfo($type);
         }
     });
     Event::listen('pages.menuitem.resolveItem', function ($type, $item, $url, $theme) {
         if ($type == 'static-page' || $type == 'all-static-pages') {
             return StaticPage::resolveMenuItem($item, $url, $theme);
         }
     });
     Event::listen('backend.form.extendFieldsBefore', function ($formWidget) {
         if ($formWidget->model instanceof \Cms\Classes\Partial) {
             Snippet::extendPartialForm($formWidget);
         }
     });
     Event::listen('cms.template.save', function ($controller, $template, $type) {
         Plugin::clearCache();
     });
     Event::listen('cms.template.processSettingsBeforeSave', function ($controller, $dataHolder) {
         $dataHolder->settings = Snippet::processTemplateSettingsArray($dataHolder->settings);
     });
     Event::listen('cms.template.processSettingsAfterLoad', function ($controller, $template) {
         Snippet::processTemplateSettings($template);
     });
     Event::listen('cms.template.processTwigContent', function ($template, $dataHolder) {
         if ($template instanceof \Cms\Classes\Layout) {
             $dataHolder->content = Controller::instance()->parseSyntaxFields($dataHolder->content);
         }
     });
     Event::listen('backend.richeditor.listTypes', function () {
         return ['static-page' => 'rainlab.pages::lang.menuitem.static_page'];
     });
     Event::listen('backend.richeditor.getTypeInfo', function ($type) {
         if ($type === 'static-page') {
             return StaticPage::getRichEditorTypeInfo($type);
         }
     });
 }
Exemplo n.º 2
0
 public function boot()
 {
     $backendUri = Config::get('cms.backendUri');
     $requestUrl = Request::url();
     $currentHostUrl = Request::getHost();
     /*
      * Get domain to theme bindings from cache, if it's not there, load them from database,
      * save to cache and use for theme selection.
      */
     $binds = Cache::rememberForever('julius_multidomain_settings', function () {
         try {
             $cacheableRecords = Setting::generateCacheableRecords();
         } catch (\Illuminate\Database\QueryException $e) {
             if (BackendAuth::check()) {
                 Flash::error(trans('julius.multidomain:lang.flash.db-error'));
             }
             return null;
         }
         return $cacheableRecords;
     });
     /*
      * Oooops something went wrong, abort.
      */
     if ($binds === null) {
         return;
     }
     /*
      * If current request is in backend scope, do not continue
      */
     if (preg_match('/\\' . $backendUri . '/', $requestUrl)) {
         return;
     }
     /*
      * Check if this request is in backend scope and is using domain,
      * that is protected from using backend
      */
     foreach ($binds as $domain => $bind) {
         if (preg_match('/\\' . $backendUri . '/', $requestUrl) && preg_match('/' . $currentHostUrl . '/i', $domain) && $bind['is_protected']) {
             return App::abort(401, 'Unauthorized.');
         }
     }
     /*
      * Overide the rainlab pages with custom domain ones
      *
      */
     $menuItemsToOveride = [];
     foreach ($binds as $domain => $value) {
         if (isset($value['page_url'])) {
             $menuItemsToOveride[] = ['domain' => $domain, 'url' => $value['page_url'], 'type' => $value['type']];
         }
     }
     Event::listen('cms.router.beforeRoute', function () use($menuItemsToOveride, $currentHostUrl, $requestUrl) {
         $url = null;
         $type = null;
         $domain = null;
         foreach ($menuItemsToOveride as $key => $value) {
             $configuredDomain = $value['domain'];
             $currentHostUrl = Request::url();
             if ($currentHostUrl === $configuredDomain) {
                 $url = $value['url'];
                 $domain = $value['domain'];
                 $type = $value['type'];
             }
         }
         if (!is_null($url)) {
             if ($type === 'pages_plugin') {
                 return Controller::instance()->initCmsPage($url);
             } elseif ($type === 'cms_pages') {
                 $theme = Theme::getEditTheme();
                 $router = new Router(Theme::getEditTheme());
                 for ($pass = 1; $pass <= 2; $pass++) {
                     $fileName = null;
                     $urlList = [];
                     /*
                      * Find the page by URL
                      */
                     if (!$fileName) {
                         if ($router->match($url)) {
                             $fileName = $router->matchedRoute();
                         }
                     }
                     /*
                      * Return the page
                      */
                     if ($fileName) {
                         if (($page = Page::loadCached($theme, $fileName)) === null) {
                             /*
                              * If the page was not found on the disk, clear the URL cache
                              * and repeat the routing process.
                              */
                             if ($pass == 1) {
                                 continue;
                             }
                             return null;
                         }
                         return $page;
                     }
                     return null;
                 }
             }
         }
     }, 1000);
 }