diff --git a/src/Model/SearchDocument.php b/src/Model/SearchDocument.php index 835e846..0250397 100644 --- a/src/Model/SearchDocument.php +++ b/src/Model/SearchDocument.php @@ -15,7 +15,7 @@ use SilverStripe\Control\Director; use SilverStripe\ORM\DataList; use SilverStripe\ORM\DataObject; -use SilverStripe\Versioned\Versioned; +use SilverStripe\Security\Member; use SilverStripe\View\SSViewer; class SearchDocument extends DataObject @@ -95,7 +95,22 @@ public function makeSearchContent() } } } else { - $output[] = Director::test($searchLink); + try { + // Restore front-end themes from config + $themes = SSViewer::config()->get('themes') ?: $oldThemes; + SSViewer::set_themes($themes); + + // Render page as non-member in live mode + $response = Member::actAs(null, function () use (&$searchLink) { + $response = Director::test(Director::makeRelative($searchLink)); + return $response; + }); + + $output[] = $response->getBody(); + } finally { + // Restore themes + SSViewer::set_themes($oldThemes); + } } // any fields mark to search if ($origin->config()->get('full_text_fields')) { diff --git a/src/Tasks/GenerateSearchDocument.php b/src/Tasks/GenerateSearchDocument.php index d1ff5ea..8b02663 100644 --- a/src/Tasks/GenerateSearchDocument.php +++ b/src/Tasks/GenerateSearchDocument.php @@ -10,6 +10,7 @@ namespace SilverStripers\ElementalSearch\Tasks; +use SilverStripe\Control\Director; use SilverStripe\Control\HTTPRequest; use SilverStripe\Core\ClassInfo; use SilverStripe\Core\Config\Config; @@ -27,7 +28,7 @@ class GenerateSearchDocument extends BuildTask protected $description = 'Generate search documents for items.'; - private static $segment = 'make-search-docs'; + private static $segment = 'make-search-docs'; /** * Implement this method in the task subclass to @@ -38,15 +39,20 @@ class GenerateSearchDocument extends BuildTask */ public function run($request) { + $eol = Director::is_cli() ? PHP_EOL . PHP_EOL : '
'; set_time_limit(50000); $classes = $this->getAllSearchDocClasses(); foreach ($classes as $class) { foreach ($list = DataList::create($class) as $record) { - echo sprintf( + $output = sprintf( 'Making record for %s type %s, link %s', $record->getTitle(), $record->ClassName, - $record->getGenerateSearchLink()) . '
'; + $record->getGenerateSearchLink()); + + $output .= $eol; + + echo $output; try { SearchDocumentGenerator::make_document_for($record); } catch (Exception $e) {