Firesphere/silverstripe-csp-headers

View on GitHub
src/Extensions/PageExtension.php

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
<?php


namespace Firesphere\CSPHeaders\Extensions;

use Firesphere\CSPHeaders\Models\CSPDomain;
use Page;
use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\Forms\CheckboxField;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\GridField\GridField;
use SilverStripe\Forms\GridField\GridFieldConfig_RelationEditor;
use SilverStripe\Forms\Tab;
use SilverStripe\ORM\DataExtension;
use SilverStripe\ORM\FieldType\DBBoolean;
use SilverStripe\ORM\ManyManyList;

/**
 * Class \Firesphere\CSPHeaders\Extensions\SiteTreeExtension
 *
 * @property Page|PageExtension $owner
 * @method ManyManyList|CSPDomain[] CSPDomains()
 */
class PageExtension extends DataExtension
{

    private static $db = [
        'AllowCSSInline' => DBBoolean::class,
        'AllowJSInline'  => DBBoolean::class,
    ];

    private static $many_many = [
        'CSPDomains' => CSPDomain::class
    ];

    private static $defaults = [
        'AllowCSSInline' => false,
        'AllowJSInline'  => false,
    ];

    public function updateSettingsFields(FieldList $fields)
    {
        $fields->addFieldToTab('Root', Tab::create(
            'CSP',
            _t(__CLASS__ . '.CSP', 'Content Security Policies')
        ));

        $config = GridFieldConfig_RelationEditor::create();
        $gridfield = GridField::create(
            'CSPDomains',
            _t(__CLASS__ . '.CSP_DOMAINS', 'Content Security Policy Domains'),
            $this->owner->CSPDomains(),
            $config
        );
        $fields->addFieldsToTab('Root.CSP', [
            CheckboxField::create('AllowCSSInline', _t(__CLASS__ . '.ALLOWCSSINLINE', 'Allow CSS inline')),
            CheckboxField::create('AllowJSInline', _t(__CLASS__ . '.ALLOWJSINLINE', 'Allow JS inline')),
            $gridfield
        ]);
    }
}