Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 44 additions & 38 deletions code/Admin/ModuleManager.php
Original file line number Diff line number Diff line change
@@ -1,38 +1,44 @@
<?php

class ModuleManager extends DataObject {

public function getCMSFields() {
$fields = FieldList::create( $tabSet = TabSet::create('Root'));
return $fields;
}

public function setRequest($req){
return false;
}

public function requireDefaultRecords() {
parent::requireDefaultRecords();
$moduleManager = ModuleManager::get()->First();
if(!$moduleManager) {
self::make_module_manager();
DB::alteration_message("Added default module manager","created");
}
}

static public function make_module_manager() {
$moduleManager = ModuleManager::create();
$moduleManager->write();
return $moduleManager;
}

public static function CurrentModuleManager(){
$current = ModuleManager::get()->First();
return $current;
}

public function CMSEditLink() {
return singleton('ModuleManagerController')->Link();
}

}
<?php

class ModuleManager extends DataObject
{

public function getCMSFields()
{
$fields = FieldList::create($tabSet = TabSet::create('Root'));
return $fields;
}

public function setRequest($req)
{
return false;
}

public function requireDefaultRecords()
{
parent::requireDefaultRecords();
$moduleManager = ModuleManager::get()->First();
if (!$moduleManager) {
self::make_module_manager();
DB::alteration_message("Added default module manager", "created");
}
}

public static function make_module_manager()
{
$moduleManager = ModuleManager::create();
$moduleManager->write();
return $moduleManager;
}

public static function CurrentModuleManager()
{
$current = ModuleManager::get()->First();
return $current;
}

public function CMSEditLink()
{
return singleton('ModuleManagerController')->Link();
}
}
220 changes: 116 additions & 104 deletions code/Admin/ModuleManagerController.php
Original file line number Diff line number Diff line change
@@ -1,104 +1,116 @@
<?php
class ModuleManagerController extends LeftAndMain {

static $url_segment = 'module-manager';
static $url_rule = '/$Action/$ID/$OtherID';
static $menu_priority = -1;
static $url_priority = 40;
static $menu_title = 'Module Manager';
static $tree_class = 'ModuleManager';
static $menu_icon = 'module-manager/images/cms-icon.png';

public function init() {
parent::init();
Requirements::javascript(CMS_DIR . '/javascript/CMSMain.EditForm.js');
}

public function getResponseNegotiator() {
$neg = parent::getResponseNegotiator();
$controller = $this;
$neg->setCallback('CurrentForm', function() use(&$controller) {
return $controller->renderWith($controller->getTemplatesWithSuffix('_Content'));
});
return $neg;
}

public function getEditForm($id = null, $fields = null) {

// get the cmsfields from ModuleManager DataObject
$moduleManager = ModuleManager::CurrentModuleManager();
$fields = $moduleManager->getCMSFields();

// what pages is this module active on
$modulesGridField = GridField::create(
"Modules_Gridfield",
"Modules",
Module::get(),
$modulesGridFieldConfig = GridFieldConfig_RecordEditor::create()
);
$modulePositionsGridField = GridField::create(
"ModulePositions_Gridfield",
"Module Positions",
ModulePosition::get(),
GridFieldConfig_RecordEditor::create()
);

// add multiclass dropdown for modules
$modulesGridFieldConfig->removeComponentsByType('GridFieldAddNewButton');
$modulesGridFieldConfig->addComponent(new GridFieldAddNewMultiClass());

// add the fields
$fields->addFieldToTab('Root.Modules', $modulesGridField);
$fields->addFieldToTab('Root.ModulePositions', $modulePositionsGridField);
$fields->addFieldToTab('Root.ModulePositions', LiteralField::create('html','<em>To load a position into your template, simply write <code>$ModulePosition(Alias)</code> where <code>Alias</code> is your position alias</em>'));

// actions
$actions = $moduleManager->getCMSActions();
$form = CMSForm::create(
$this, 'EditForm', $fields, $actions
)->setHTMLID('Form_EditForm');
$form->setResponseNegotiator($this->getResponseNegotiator());
$form->addExtraClass('cms-content center cms-edit-form');
// don't add data-pjax-fragment=CurrentForm, its added in the content template instead

if($form->Fields()->hasTabset()) $form->Fields()->findOrMakeTab('Root')->setTemplate('CMSTabSet');
$form->setHTMLID('Form_EditForm');
$form->loadDataFrom($moduleManager);
$form->setTemplate($this->getTemplatesWithSuffix('_EditForm'));

// Use <button> to allow full jQuery UI styling
$actions = $actions->dataFields();
if($actions) foreach($actions as $action) $action->setUseButtonTag(true);

return $form;
}

public function getSilverStripeNavigator() {
return $this->renderWith('CMSSettingsController_SilverStripeNavigator');
}

public function Breadcrumbs($unlinked = false) {
$defaultTitle = self::menu_title_for_class(get_class($this));
return new ArrayList(array(
new ArrayData(array(
'Title' => _t("{$this->class}.MENUTITLE", $defaultTitle),
'Link' => false
))
));
}

// builds a list of all the module types (classes that extend Module)
public function ModuleTypes() {
$moduleTypes = array();
$modules = Module::get();
foreach( $modules as $module ){
$moduleTypes[$module->ClassName] = array(
'ClassName' => $module->ClassName,
'Name' => $module->ModuleName(),
'Description' => $module->ModuleDescription()
);
}
return $moduleTypes;
}

}
<?php
class ModuleManagerController extends LeftAndMain
{

public static $url_segment = 'module-manager';
public static $url_rule = '/$Action/$ID/$OtherID';
public static $menu_priority = -1;
public static $url_priority = 40;
public static $menu_title = 'Module Manager';
public static $tree_class = 'ModuleManager';
public static $menu_icon = 'module-manager/images/cms-icon.png';

public function init()
{
parent::init();
Requirements::javascript(CMS_DIR . '/javascript/CMSMain.EditForm.js');
}

public function getResponseNegotiator()
{
$neg = parent::getResponseNegotiator();
$controller = $this;
$neg->setCallback('CurrentForm', function () use (&$controller) {
return $controller->renderWith($controller->getTemplatesWithSuffix('_Content'));
});
return $neg;
}

public function getEditForm($id = null, $fields = null)
{

// get the cmsfields from ModuleManager DataObject
$moduleManager = ModuleManager::CurrentModuleManager();
$fields = $moduleManager->getCMSFields();

// what pages is this module active on
$modulesGridField = GridField::create(
"Modules_Gridfield",
"Modules",
Module::get(),
$modulesGridFieldConfig = GridFieldConfig_RecordEditor::create()
);
$modulePositionsGridField = GridField::create(
"ModulePositions_Gridfield",
"Module Positions",
ModulePosition::get(),
GridFieldConfig_RecordEditor::create()
);

// add multiclass dropdown for modules
$modulesGridFieldConfig->removeComponentsByType('GridFieldAddNewButton');
$modulesGridFieldConfig->addComponent(new GridFieldAddNewMultiClass());

// add the fields
$fields->addFieldToTab('Root.Modules', $modulesGridField);
$fields->addFieldToTab('Root.ModulePositions', $modulePositionsGridField);
$fields->addFieldToTab('Root.ModulePositions', LiteralField::create('html', '<em>To load a position into your template, simply write <code>$ModulePosition(Alias)</code> where <code>Alias</code> is your position alias</em>'));

// actions
$actions = $moduleManager->getCMSActions();
$form = CMSForm::create(
$this, 'EditForm', $fields, $actions
)->setHTMLID('Form_EditForm');
$form->setResponseNegotiator($this->getResponseNegotiator());
$form->addExtraClass('cms-content center cms-edit-form');
// don't add data-pjax-fragment=CurrentForm, its added in the content template instead

if ($form->Fields()->hasTabset()) {
$form->Fields()->findOrMakeTab('Root')->setTemplate('CMSTabSet');
}
$form->setHTMLID('Form_EditForm');
$form->loadDataFrom($moduleManager);
$form->setTemplate($this->getTemplatesWithSuffix('_EditForm'));

// Use <button> to allow full jQuery UI styling
$actions = $actions->dataFields();
if ($actions) {
foreach ($actions as $action) {
$action->setUseButtonTag(true);
}
}

return $form;
}

public function getSilverStripeNavigator()
{
return $this->renderWith('CMSSettingsController_SilverStripeNavigator');
}

public function Breadcrumbs($unlinked = false)
{
$defaultTitle = self::menu_title_for_class(get_class($this));
return new ArrayList(array(
new ArrayData(array(
'Title' => _t("{$this->class}.MENUTITLE", $defaultTitle),
'Link' => false
))
));
}

// builds a list of all the module types (classes that extend Module)
public function ModuleTypes()
{
$moduleTypes = array();
$modules = Module::get();
foreach ($modules as $module) {
$moduleTypes[$module->ClassName] = array(
'ClassName' => $module->ClassName,
'Name' => $module->ModuleName(),
'Description' => $module->ModuleDescription()
);
}
return $moduleTypes;
}
}
Loading