-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathModuleManagerController.php
More file actions
116 lines (101 loc) · 4.22 KB
/
ModuleManagerController.php
File metadata and controls
116 lines (101 loc) · 4.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?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;
}
}