silverstripe-webpack/app/src/Pages/PageController.php

117 lines
2.9 KiB
PHP
Raw Normal View History

2018-04-21 06:29:32 +02:00
<?php
// vendor/silverstripe/errorpage/src/ErrorPageController.php
// extends global PageController class
//namespace Site\Pages;
2018-12-20 19:52:07 +01:00
use SilverStripe\Control\Controller;
2018-04-21 06:29:32 +02:00
use SilverStripe\CMS\Controllers\ContentController;
use SilverStripe\ORM\FieldType\DBDatetime;
2018-12-20 19:52:07 +01:00
use SilverStripe\View\ArrayData;
use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\ORM\PaginatedList;
use SilverStripe\Forms\Form;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\TextField;
use SilverStripe\Forms\FormAction;
use SilverStripe\Forms\RequiredFields;
use SilverStripe\Control\HTTPRequest;
2018-04-21 06:29:32 +02:00
class PageController extends ContentController
{
2018-12-20 19:52:07 +01:00
private static $allowed_actions = [
'SearchForm',
];
private $site_message;
private $search_term;
public function index(HTTPRequest $request)
{
$search = $request->getVar('q');
if ($search) {
return $this->doSearch($search);
}
return $this->render();
}
public function SearchForm()
{
return Form::create(
$this,
__FUNCTION__,
FieldList::create(
TextField::create('q', 'Search ...')
),
FieldList::create(
FormAction::create(
'doSearch',
'Find it!'
)
),
RequiredFields::create(['q'])
)->setFormMethod('POST');
}
public function doSearch($data)
{
$this->search_term = is_array($data) ? $data['q'] : $data;
return $this->renderWith([__CLASS__.'_search', 'Page']);
}
public function SearchResults()
{
$term = $this->search_term;
if(!$term) {
return false;
}
$results = SiteTree::get()->filterAny([
'Title:PartialMatch' => $term,
'Content:PartialMatch' => $term,
])->sort('Created DESC');
return ArrayData::create([
'Title' => 'Search query "'.$term.'"',
'Results' => PaginatedList::create($results),
]);
}
public function getParentRecursively()
{
return $this->Level(1);
}
public static function setSiteWideMessage($message, $type, $request = null)
2018-08-06 13:46:54 +02:00
{
$request = $request ? $request : Controller::curr()->getRequest();
$request->getSession()->set(
2018-09-15 00:55:42 +02:00
'SiteWideMessage',
ArrayData::create([
2018-09-15 00:55:42 +02:00
'Message' => $message,
'Type' => $type,
])
2018-09-15 00:55:42 +02:00
);
2018-12-20 19:52:07 +01:00
return true;
2018-08-06 13:46:54 +02:00
}
2018-09-15 00:55:42 +02:00
public function getSiteWideMessage()
2018-08-06 13:46:54 +02:00
{
if (!$this->site_message) {
$session = $this->getRequest()->getSession();
$this->site_message = $session->get('SiteWideMessage');
$session->clear('SiteWideMessage');
}
2018-09-15 00:55:42 +02:00
return $this->site_message;
2018-08-06 13:46:54 +02:00
}
public function CurrentTime()
{
return DBDatetime::now();
}
2018-04-21 06:29:32 +02:00
}