/** * @return FieldList */ public function getCMSFields() { if (!$this->exists()) { // The new module state Requirements::css(MODULATOR_PATH . '/css/PageModule.css'); Requirements::javascript(MODULATOR_PATH . '/javascript/PageModule.js'); $allowedModules = array(); // Determine the type of the parent page $currentPageID = Session::get('CMSMain.currentPage'); if ($currentPageID) { $currentPage = SiteTree::get_by_id('SiteTree', $currentPageID); if ($currentPage) { $currentPageClass = $currentPage->ClassName; // Get the list of allowed modules for this page type if (class_exists($currentPageClass) && method_exists($currentPageClass, 'getAllowedModules')) { $allowedModules = $currentPageClass::getAllowedModules(); } } } $classList = array(); foreach ($allowedModules as $class) { $instance = new $class(); $classList[$class] = '<img src="' . $instance::$icon . '"><strong>' . $class::$label . '</strong><p>' . $class::$description . '</p>'; } $fields = new FieldList(); if (!count($allowedModules)) { $typeField = new LiteralField('Type', '<span class="message required">There are no module types defined, please create some.</span>'); $fields->push($typeField); } else { $labelField = new TextField('Title', 'Label'); $labelField->setDescription('A reference name for this block, not displayed on the website'); $fields->push($labelField); $typeField = new OptionSetField('NewClassName', 'Type', $classList); $typeField->setDescription('The type of module determines what content and functionality it will provide'); $fields->push($typeField); } $this->extend('updateCMSFields', $fields); } else { // Existing module state $fields = parent::getCMSFields(); // Don't expose Order to the CMS $fields->removeFieldFromTab('Root.Main', 'Order'); $fields->removeFieldFromTab('Root.Main', 'PageID'); // Helps us keep track of preview focus $fields->addFieldToTab('Root.Main', new HiddenField('ModulatorID', 'ModulatorID', $this->ID)); } return $fields; }