getVar('q'); if ($search) { return $this->doSearch($search); } return $this->render(); } public function setAction($action) { $this->action = $action; } public function ElementalArea() { if(!$this->getAction() || $this->getAction() === 'index') { return ElementalArea::get()->byID($this->getField('ElementalAreaID')); } return false; } public function CurrentElement() { $controller_curr = Controller::curr(); if (is_a($controller_curr, ElementFormController::class)) { return $controller_curr; } return false; } public function SearchForm() { $config = $this->SiteConfig(); return Form::create( $this, __FUNCTION__, FieldList::create( TextField::create('q', 'Search ...') ->setAttribute('placeholder', 'Search '.$config->getField('Title').' Website') ), FieldList::create( FormAction::create( 'doSearch', 'Find it!' ) ->setUseButtonTag(true) ->addExtraClass('btn-secondary') ->setButtonContent( '' .'Search' ) ), RequiredFields::create(['q']) )->setFormMethod('POST'); } public function doSearch($data) { $this->search_term = is_array($data) ? $data['q'] : $data; return $this->renderWith([__CLASS__.'_search', 'Page']); } private static function getSearchObjects($classNames, $term) { $elements = ArrayList::create(); foreach ($classNames as $class) { $fields = Config::inst()->get($class, 'frontend_searchable_fields'); $find = array_combine($fields, $fields); $find = array_map(static function () use ($term) { return $term; }, $find); $elements->merge($class::get()->filterAny($find)->sort('Created DESC')); } return $elements; } public function SearchResults() { $term = $this->search_term; if (!$term) { return false; } $results = ArrayList::create(); // get pages by title and content $pages = SiteTree::get()->filterAny([ 'Title:PartialMatch' => $term, 'Content:PartialMatch' => $term, ])->sort('Created DESC'); $results->merge($pages); // get pages by elements $elements = self::getSearchObjects( self::config()->get('searchable_elements'), $term ); foreach ($elements as $element) { $page = Page::get()->filter('ElementalAreaID', $element->getField('ParentID'))->first(); if (!$page) { continue; } $results->push($page); } // get pages by onjects $elements = self::getSearchObjects( self::config()->get('searchable_objects'), $term ); foreach ($elements as $element) { $page = $element->Page(); if (!$page) { continue; } $results->push($page); } $results->removeDuplicates(); return ArrayData::create([ 'Title' => 'You searched for: "'.$term.'"', 'Results' => PaginatedList::create($results), ]); } public function getParentRecursively() { return $this->Level(1); } public static function setSiteWideMessage($message, $type, $request = null) { $request = $request ? $request : Controller::curr()->getRequest(); $request->getSession()->set( 'SiteWideMessage', ArrayData::create([ 'Message' => $message, 'Type' => $type, ]) ); return true; } public function getSiteWideMessage() { $request = $this->getRequest(); if ($request->isGET() && !$this->site_message) { $session = $request->getSession(); $this->site_message = $session->get('SiteWideMessage'); $session->clear('SiteWideMessage'); } return $this->site_message; } public function CurrentTime() { return DBDatetime::now(); } public function isDev() { return Director::isDev(); } }