/** * @param null|callable $map * The unique param it receives id an array with page informations * * @throws \ApplicationException * @throws \SystemException */ public function map($map = null) { $theme = \Cms\Classes\Theme::getActiveTheme(); $pages = \Cms\Classes\Page::listInTheme($theme, true); if (class_exists('\\RainLab\\Pages\\Classes\\Controller')) { // hack RainlabPage's Controller to avoid class name collision $classPath = \App::pluginsPath() . '/rainlab/pages/classes/Controller.php'; file_put_contents($classPath, str_replace('use Cms\\Classes\\Page;', 'use Cms\\Classes\\Page as BasePage;', file_get_contents($classPath))); file_put_contents($classPath, str_replace('new Page(', 'new BasePage(', file_get_contents($classPath))); // end of hack $pages = array_merge($pages, \RainLab\Pages\Classes\Page::listInTheme($theme, true)); } foreach ($pages as $i => $page) { if (!isset($this->pageInfos[$page->url])) { $this->pageInfos[$page->url] = ['url' => $page->url, 'content' => function () use($page) { return $this->getPageContents($page->url); }, 'pageType' => $this->getPageTypeByUrl($page->url), 'urlParameters' => $this->getDynamicParameters($page->url)]; } if (is_callable($map)) { $map($this->pageInfos[$page->url]); } } }
/** * Execute the console command. * * @return mixed */ public function fire() { $runAll = array_reduce($this->option(), function ($runAll, $option) { if ($runAll) { return (bool) $option === true ? false : true; } return $runAll; }, true); if ($this->option('regular') || $runAll) { // Regular Pages $pagesCrawler = new PagesCrawler(); $pagesCrawler->map(function ($pageInfo) { if ($pageInfo['pageType'] == 'regular') { $this->cacheFileHandler->saveCacheFile($pageInfo['url'], $pageInfo['content']()); } }); } if ($this->option('dynamic') || $runAll) { // Dynamic Pages $mapUrlDynamic = function ($urlDynamic) { $length = count($urlDynamic->parameters_lists); if ($length > 0) { $this->dynamicRecursiveProcess($urlDynamic->parameters_lists, 0, ['url' => $urlDynamic->url, 'use_internal_url' => $urlDynamic->use_internal_url, 'internal_url' => $urlDynamic->internal_url, 'length' => $length]); } else { $this->generateCacheFile(['url' => $urlDynamic->url, 'use_internal_url' => $urlDynamic->use_internal_url, 'internal_url' => $urlDynamic->internal_url, 'length' => $length]); } }; if (count($this->option('dynamic-item')) === 0) { UrlDynamic::all()->map($mapUrlDynamic); } else { foreach ($this->option('dynamic-item') as $dynamicId) { $mapUrlDynamic(UrlDynamic::find($dynamicId)); } } } if ($this->option('blacklist') || $runAll) { @mkdir($this->cacheFileHandler->getCachePath(), 0777, true); // Index Blacklist $indexBlacklist = join('', array_map(function ($url) { $url = str_replace('/', '\\/', trim($url, '/')); return "(?!\\/{$url})"; }, UrlBlacklist::all()->lists('url'))); file_put_contents($this->cacheFileHandler->getCachePath() . '/index-blacklist.config', $indexBlacklist); // Route Blacklist $routeBlacklist = join('', array_map(function ($url) { $url = str_replace('/', '\\/', trim($url, '/')); return "(?!{$url})"; }, UrlBlacklist::all()->lists('url'))); file_put_contents($this->cacheFileHandler->getCachePath() . '/route-blacklist.config', $routeBlacklist); // Param Blacklist $paramBlacklist = GetParamBlacklist::all(); $paramBlacklist->push(['name' => 'nocache', 'values' => json_encode([['value' => '1']])]); file_put_contents($this->cacheFileHandler->getCachePath() . '/param-blacklist.config', $paramBlacklist->toJson()); // Param Blacklist function copy(\App::pluginsPath() . '/ebussola/statefull/assets/param-blacklist-function.php', $this->cacheFileHandler->getCachePath() . '/param-blacklist-function.php'); } }