Example #1
0
 /**
  * @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;
 }