silverstripe-frameworktest/code/TestPage.php

157 lines
4.6 KiB
PHP
Raw Normal View History

2008-10-03 00:05:45 +02:00
<?php
namespace SilverStripe\FrameworkTest\Model;
use Page;
2017-01-15 09:19:56 +01:00
use PageController;
use SilverStripe\Core\Manifest\ModuleResource;
use SilverStripe\Core\Manifest\ModuleResourceLoader;
use SilverStripe\ORM\DataObject;
2016-08-16 06:38:31 +02:00
use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\Forms\FormAction;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\Form;
use SilverStripe\Forms\TextField;
use SilverStripe\Control\Email\Email;
use SilverStripe\Control\HTTPResponse;
2019-01-18 01:56:58 +01:00
use SilverStripe\Security\DefaultAdminService;
use SilverStripe\Security\Member;
use SilverStripe\Security\Security;
2008-10-03 00:05:45 +02:00
/**
* Parent class of all test pages
*/
2020-11-03 05:48:30 +01:00
class TestPage extends Page implements \TestPageInterface
2015-12-17 21:20:49 +01:00
{
private static $table_name = 'FrameworkTestPage';
2016-04-18 23:27:29 +02:00
2015-12-17 21:20:49 +01:00
/**
* We can only create subclasses of TestPage
*/
2016-04-18 23:27:29 +02:00
public function canCreate($member = null, $context = array())
2015-12-17 21:20:49 +01:00
{
// Don't allow creation other than through requireDefaultRecords
return false;
}
2008-10-03 00:05:45 +02:00
2015-12-17 21:20:49 +01:00
public function requireDefaultRecords()
{
2017-05-18 07:11:01 +02:00
if (static::class === self::class) {
2015-12-17 21:20:49 +01:00
return;
}
2008-10-03 00:05:45 +02:00
2017-05-18 07:11:01 +02:00
if (!DataObject::get_one(static::class)) {
2015-12-17 21:20:49 +01:00
// Try to create common parent
2019-01-18 01:56:58 +01:00
$defaultAdminService = DefaultAdminService::singleton();
Member::actAs($defaultAdminService->findOrCreateDefaultAdmin(), function () {
// Create actual page
2017-05-18 07:11:01 +02:00
$page = new static();
$page->Title = str_replace(self::class, "", static::class);
$page->ShowInMenus = 0;
2019-01-18 01:56:58 +01:00
$parent = static::getOrCreateParentPage();
$page->ParentID = $parent->ID;
$page->write();
$page->copyVersionToStage('Stage', 'Live');
});
2015-12-17 21:20:49 +01:00
}
}
2019-01-18 01:56:58 +01:00
public static function getOrCreateParentPage()
{
$defaultAdminService = DefaultAdminService::singleton();
Member::actAs($defaultAdminService->findOrCreateDefaultAdmin(), function () {
$parent = SiteTree::get()
->filter('URLSegment', 'feature-test-pages')
->First();
if (!$parent) {
$parent = new Page(
array(
'Title' => 'Feature Test Pages',
'Content' => 'A collection of pages for testing various features in the SilverStripe CMS',
'ShowInMenus' => 0
)
);
$parent->write();
$parent->publishRecursive();
2019-01-18 01:56:58 +01:00
}
});
return SiteTree::get()
->filter('URLSegment', 'feature-test-pages')
->First();
}
2008-10-03 00:05:45 +02:00
}
/**
* Parent class of all test page controllers
*/
2017-01-15 09:19:56 +01:00
class TestPage_Controller extends PageController
2015-12-17 21:20:49 +01:00
{
private static $allowed_actions = array(
'Form',
'save',
);
2016-04-18 23:27:29 +02:00
2015-12-17 21:20:49 +01:00
/**
* This form is exactly like the CMS form. It gives us an opportunity to test the fields outside of the CMS context
*/
public function Form()
{
$fields = $this->getCMSFields();
$actions = new FieldList(
new FormAction("save", "Save"),
$gohome = new FormAction("gohome", "Go home")
);
$gohome->setAttribute(
'src',
ModuleResourceLoader::resourceURL('silverstripe/frameworktest: images/test-button.png')
);
2015-12-17 21:20:49 +01:00
$form = new Form($this, "Form", $fields, $actions);
$form->loadDataFrom($this->dataRecord);
return $form;
}
2016-04-18 23:27:29 +02:00
public function save(array $data, Form $form): HTTPResponse
2015-12-17 21:20:49 +01:00
{
$form->saveInto($this->dataRecord);
$this->dataRecord->write();
return $this->redirectBack();
2015-12-17 21:20:49 +01:00
}
2016-04-18 23:27:29 +02:00
2015-12-17 21:20:49 +01:00
public function gohome()
{
$this->redirect("./");
}
2015-12-17 21:20:49 +01:00
public function EmailForm()
{
return new Form($this, "EmailForm", new FieldList(
new TextField("Email", "Email address")
), new FieldList(
new FormAction("sendEmail", "Send test email to this address")
));
}
2016-04-18 23:27:29 +02:00
2015-12-17 21:20:49 +01:00
public function email()
{
return array(
'Content' => '<p>Use this form to send a test email</p>',
'Form' => $this->EmailForm()
);
}
2016-04-18 23:27:29 +02:00
public function sendEmail(array $data, Form $form): HTTPResponse
2015-12-17 21:20:49 +01:00
{
$email = new Email();
$email->setTo($data['Email']);
$email->setFrom($data['Email']);
$email->setSubject('A subject with some umlauts: öäüß');
$email->setBody('A body with some umlauts: öäüß');
$email->send();
2016-04-18 23:27:29 +02:00
return HTTPResponse::create()->setBody("<p>email sent to " . $data['Email'] . "</p>");
2015-12-17 21:20:49 +01:00
}
2008-10-03 00:05:45 +02:00
}