mirror of
https://github.com/silverstripe/silverstripe-subsites
synced 2024-10-22 09:05:55 +00:00
FIX Update XHR controller hook selector and refactor getCMSFields to use scaffolding and separate tabs
This commit is contained in:
parent
d9fb455d3d
commit
95e437d828
@ -17,7 +17,7 @@
|
|||||||
*/
|
*/
|
||||||
$('.cms-container .cms-menu-list li a').entwine({
|
$('.cms-container .cms-menu-list li a').entwine({
|
||||||
onclick: function(e) {
|
onclick: function(e) {
|
||||||
$('.cms-container').loadFragment('SubsiteXHRController', 'SubsiteList');
|
$('.cms-container').loadFragment('admin/subsite_xhr', 'SubsiteList');
|
||||||
this._super(e);
|
this._super(e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -27,20 +27,17 @@
|
|||||||
*/
|
*/
|
||||||
$('.cms-container .SubsiteAdmin .cms-edit-form fieldset.ss-gridfield').entwine({
|
$('.cms-container .SubsiteAdmin .cms-edit-form fieldset.ss-gridfield').entwine({
|
||||||
onreload: function(e) {
|
onreload: function(e) {
|
||||||
$('.cms-container').loadFragment('SubsiteXHRController', 'SubsiteList');
|
$('.cms-container').loadFragment('admin/subsite_xhr', 'SubsiteList');
|
||||||
this._super(e);
|
this._super(e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Reload subsites dropdown when subsites are added or names are modified
|
* Reload subsites dropdown when subsites are added or names are modified
|
||||||
*/
|
*/
|
||||||
$('.cms-container .cms-content-fields .subsite-model').entwine({
|
$('.cms-container .tab.subsite-model').entwine({
|
||||||
onadd: function(e) {
|
onadd: function(e) {
|
||||||
$('.cms-container').loadFragment('SubsiteXHRController', 'SubsiteList');
|
$('.cms-container').loadFragment('admin/subsite_xhr', 'SubsiteList');
|
||||||
this._super(e);
|
this._super(e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -35,7 +35,6 @@ use SilverStripe\Security\Permission;
|
|||||||
use SilverStripe\Security\Security;
|
use SilverStripe\Security\Security;
|
||||||
use SilverStripe\Subsites\State\SubsiteState;
|
use SilverStripe\Subsites\State\SubsiteState;
|
||||||
use SilverStripe\Versioned\Versioned;
|
use SilverStripe\Versioned\Versioned;
|
||||||
|
|
||||||
use UnexpectedValueException;
|
use UnexpectedValueException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -108,6 +107,59 @@ class Subsite extends DataObject
|
|||||||
'IsPublic'
|
'IsPublic'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private static $db = [
|
||||||
|
'Title' => 'Varchar(255)',
|
||||||
|
'RedirectURL' => 'Varchar(255)',
|
||||||
|
'DefaultSite' => 'Boolean',
|
||||||
|
'Theme' => 'Varchar',
|
||||||
|
'Language' => 'Varchar(6)',
|
||||||
|
|
||||||
|
// Used to hide unfinished/private subsites from public view.
|
||||||
|
// If unset, will default to true
|
||||||
|
'IsPublic' => 'Boolean',
|
||||||
|
|
||||||
|
// Comma-separated list of disallowed page types
|
||||||
|
'PageTypeBlacklist' => 'Text',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private static $has_many = [
|
||||||
|
'Domains' => SubsiteDomain::class,
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private static $belongs_many_many = [
|
||||||
|
'Groups' => Group::class,
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private static $defaults = [
|
||||||
|
'IsPublic' => 1
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private static $searchable_fields = [
|
||||||
|
'Title',
|
||||||
|
'Domains.Domain',
|
||||||
|
'IsPublic',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private static $default_sort = '"Title" ASC';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set allowed themes
|
* Set allowed themes
|
||||||
*
|
*
|
||||||
@ -582,59 +634,6 @@ class Subsite extends DataObject
|
|||||||
return ($groupCount + $roleCount > 0);
|
return ($groupCount + $roleCount > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
private static $db = [
|
|
||||||
'Title' => 'Varchar(255)',
|
|
||||||
'RedirectURL' => 'Varchar(255)',
|
|
||||||
'DefaultSite' => 'Boolean',
|
|
||||||
'Theme' => 'Varchar',
|
|
||||||
'Language' => 'Varchar(6)',
|
|
||||||
|
|
||||||
// Used to hide unfinished/private subsites from public view.
|
|
||||||
// If unset, will default to true
|
|
||||||
'IsPublic' => 'Boolean',
|
|
||||||
|
|
||||||
// Comma-separated list of disallowed page types
|
|
||||||
'PageTypeBlacklist' => 'Text',
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
private static $has_many = [
|
|
||||||
'Domains' => SubsiteDomain::class,
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
private static $belongs_many_many = [
|
|
||||||
'Groups' => Group::class,
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
private static $defaults = [
|
|
||||||
'IsPublic' => 1
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
private static $searchable_fields = [
|
|
||||||
'Title',
|
|
||||||
'Domains.Domain',
|
|
||||||
'IsPublic',
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private static $default_sort = '"Title" ASC';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @todo Possible security issue, don't grant edit permissions to everybody.
|
* @todo Possible security issue, don't grant edit permissions to everybody.
|
||||||
* @param bool $member
|
* @param bool $member
|
||||||
@ -652,78 +651,83 @@ class Subsite extends DataObject
|
|||||||
*/
|
*/
|
||||||
public function getCMSFields()
|
public function getCMSFields()
|
||||||
{
|
{
|
||||||
if ($this->ID != 0) {
|
$this->beforeUpdateCMSFields(function (FieldList $fields) {
|
||||||
$domainTable = new GridField(
|
if ($this->exists()) {
|
||||||
'Domains',
|
// Add a GridField for domains to a new tab if the subsite has already been created
|
||||||
_t(__CLASS__ . '.DomainsListTitle', 'Domains'),
|
$fields->addFieldsToTab('Root.Domains', [
|
||||||
$this->Domains(),
|
GridField::create(
|
||||||
GridFieldConfig_RecordEditor::create(10)
|
'Domains',
|
||||||
);
|
_t(__CLASS__ . '.DomainsListTitle', 'Domains'),
|
||||||
} else {
|
$this->Domains(),
|
||||||
$domainTable = new LiteralField(
|
GridFieldConfig_RecordEditor::create(10)
|
||||||
'Domains',
|
)
|
||||||
'<p>' . _t(
|
]);
|
||||||
__CLASS__ . '.DOMAINSAVEFIRST',
|
}
|
||||||
'You can only add domains after saving for the first time'
|
|
||||||
) . '</p>'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$languageSelector = new DropdownField(
|
// Remove the default scaffolded blacklist field, we replace it with a checkbox set field
|
||||||
'Language',
|
// in a wrapper further down. The RedirectURL field is currently not in use.
|
||||||
$this->fieldLabel('Language'),
|
$fields->removeByName(['PageTypeBlacklist', 'RedirectURL']);
|
||||||
Injector::inst()->get(IntlLocales::class)->getLocales()
|
|
||||||
);
|
|
||||||
|
|
||||||
|
// Add the heading to the top of the fields list
|
||||||
|
$fields->fieldByName('Root.Main')
|
||||||
|
->unshift(HeaderField::create('ConfigForSubsiteHeaderField', 'Subsite Configuration'));
|
||||||
|
|
||||||
|
$fields->addFieldToTab('Root.Main', DropdownField::create(
|
||||||
|
'Language',
|
||||||
|
$this->fieldLabel('Language'),
|
||||||
|
Injector::inst()->get(IntlLocales::class)->getLocales()
|
||||||
|
), 'DefaultSite');
|
||||||
|
|
||||||
|
$fields->addFieldsToTab('Root.Main', [
|
||||||
|
ToggleCompositeField::create(
|
||||||
|
'PageTypeBlacklistToggle',
|
||||||
|
_t(__CLASS__ . '.PageTypeBlacklistField', 'Disallow page types?'),
|
||||||
|
[
|
||||||
|
CheckboxSetField::create('PageTypeBlacklist', '', $this->getPageTypeMap())
|
||||||
|
]
|
||||||
|
)->setHeadingLevel(4),
|
||||||
|
HiddenField::create('ID', '', $this->ID),
|
||||||
|
HiddenField::create('IsSubsite', '', 1)
|
||||||
|
]);
|
||||||
|
|
||||||
|
// If there are any themes available, add the dropdown
|
||||||
|
$themes = $this->allowedThemes();
|
||||||
|
if (!empty($themes)) {
|
||||||
|
$fields->addFieldToTab(
|
||||||
|
'Root.Main',
|
||||||
|
DropdownField::create('Theme', $this->fieldLabel('Theme'), $this->allowedThemes(), $this->Theme)
|
||||||
|
->setEmptyString(_t(__CLASS__ . '.ThemeFieldEmptyString', '-')),
|
||||||
|
'PageTypeBlacklistToggle'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Targetted by the XHR PJAX JavaScript to reload the subsite list in the CMS
|
||||||
|
$fields->fieldByName('Root.Main')->addExtraClass('subsite-model');
|
||||||
|
|
||||||
|
// We don't need the Groups many many tab
|
||||||
|
$fields->removeByName('Groups');
|
||||||
|
});
|
||||||
|
|
||||||
|
return parent::getCMSFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a list of the different page types available to the CMS
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getPageTypeMap()
|
||||||
|
{
|
||||||
$pageTypeMap = [];
|
$pageTypeMap = [];
|
||||||
|
|
||||||
$pageTypes = SiteTree::page_type_classes();
|
$pageTypes = SiteTree::page_type_classes();
|
||||||
foreach ($pageTypes as $pageType) {
|
foreach ($pageTypes as $pageType) {
|
||||||
$pageTypeMap[$pageType] = singleton($pageType)->i18n_singular_name();
|
$pageTypeMap[$pageType] = singleton($pageType)->i18n_singular_name();
|
||||||
}
|
}
|
||||||
|
|
||||||
asort($pageTypeMap);
|
asort($pageTypeMap);
|
||||||
|
|
||||||
$fields = new FieldList(
|
return $pageTypeMap;
|
||||||
$subsiteTabs = new TabSet(
|
|
||||||
'Root',
|
|
||||||
new Tab(
|
|
||||||
'Configuration',
|
|
||||||
_t(__CLASS__ . '.TabTitleConfig', 'Configuration'),
|
|
||||||
HeaderField::create('ConfigForSubsiteHeaderField', 'Subsite Configuration'),
|
|
||||||
TextField::create('Title', $this->fieldLabel('Title'), $this->Title),
|
|
||||||
HeaderField::create(
|
|
||||||
'DomainsForSubsiteHeaderField',
|
|
||||||
_t(__CLASS__ . '.DomainsHeadline', 'Domains for this subsite')
|
|
||||||
),
|
|
||||||
$domainTable,
|
|
||||||
$languageSelector,
|
|
||||||
// new TextField('RedirectURL', 'Redirect to URL', $this->RedirectURL),
|
|
||||||
CheckboxField::create('DefaultSite', $this->fieldLabel('DefaultSite'), $this->DefaultSite),
|
|
||||||
CheckboxField::create('IsPublic', $this->fieldLabel('IsPublic'), $this->IsPublic),
|
|
||||||
ToggleCompositeField::create(
|
|
||||||
'PageTypeBlacklistToggle',
|
|
||||||
_t(__CLASS__ . '.PageTypeBlacklistField', 'Disallow page types?'),
|
|
||||||
[CheckboxSetField::create('PageTypeBlacklist', '', $pageTypeMap)]
|
|
||||||
)->setHeadingLevel(4)
|
|
||||||
)
|
|
||||||
),
|
|
||||||
HiddenField::create('ID', '', $this->ID),
|
|
||||||
HiddenField::create('IsSubsite', '', 1)
|
|
||||||
);
|
|
||||||
|
|
||||||
// If there are any themes available, add the dropdown
|
|
||||||
$themes = $this->allowedThemes();
|
|
||||||
if (!empty($themes)) {
|
|
||||||
$fields->addFieldToTab(
|
|
||||||
'Root.Configuration',
|
|
||||||
DropdownField::create('Theme', $this->fieldLabel('Theme'), $this->allowedThemes(), $this->Theme)
|
|
||||||
->setEmptyString(_t(__CLASS__ . '.ThemeFieldEmptyString', '-'))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$subsiteTabs->addExtraClass('subsite-model');
|
|
||||||
|
|
||||||
$this->extend('updateCMSFields', $fields);
|
|
||||||
return $fields;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user