Source of file GreenExtension.php
Size: 3,861 Bytes - Last Modified: 2021-12-23T10:56:30+00:00
/var/www/docs.ssmods.com/process/src/code/GreenExtension.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 | <?php use UncleCheese\Green\Green; /** * Class GreenExtension * Add this extension to any DataObject to allow it to map to a design module * * @package UncleCheese\Green; * @author UncleCheese <unclecheese@leftandmain.com> */ class GreenExtension extends DataExtension { /** * GreenExtension constructor. */ public function __construct() { $dir = Green::inst()->getDesignFolder(); if (!$dir) { throw new Exception("You must set a design_folder path in the config (Green.design_folder)"); } if (!is_dir(Director::baseFolder() . '/' . $dir)) { throw new Exception("Green.design_folder $dir does not exist"); } parent::__construct(); } /** * @param $class * @param $extension * @param $args * @return array */ public static function get_extra_config($class, $extension, $args) { $dataType = isset($args[0]) ? $args[0] : null; if (!$dataType) { $dataType = Green::default_data_type(); } return [ 'db' => [ 'DesignModule' => 'Varchar', 'TemplateData' => "{$dataType}Field" ], 'casting' => [ 'Design' => 'HTMLText' ] ]; } /** * @param FieldList $fields */ public function updateCMSFields(FieldList $fields) { $dataField = $this->owner->db('TemplateData'); $dataType = preg_replace('/Field$/', '', $dataField); $tab = $fields->findOrMakeTab("Root.Content & Design"); $module = $this->getModule(); $allModules = array_map(function ($module) { return $module->getName(); }, Green::inst()->getDesignModules()); $tab->push( DropdownField::create( 'DesignModule', 'Design module', ArrayLib::valuekey($allModules) ) ->setEmptyString('--- Please select ---') ); if (!$module) { return; } if ($source = $module->getDataSource()) { $tab->push( HeaderField::create( "This module has its own data source file. ({$source->getName()})", 4 ) ); } else { $tab->push( Injector::inst()->create("{$dataType}Editor") ->setName('TemplateData') ->setTitle("This module does not have its own data source file. You can create <strong>$dataType</strong> data for the design below.") ->setRows(30) ); } $c = $fields->dataFieldByName('TemplateData'); } /** * Renders the design module * * @return HTMLText */ public function DesignModule() { $module = $this->getModule(); if (!$module) { return; } $module->loadRequirements(); $viewer = SSViewer::fromString($module->getTemplateContents()); return $viewer->process($this->toViewableData()); } /** * Converts the module into {@link ViewableData} using its data source * @return ViewableData */ public function toViewableData() { $module = $this->getModule(); if ($source = $module->getDataSource()) { return $source->toDBObject(); } return $this->owner->dbObject('TemplateData'); } /** * Gets the design module that the DataObject is mapped to * * @return DesignModule|null */ public function getModule() { if ($this->owner->DesignModule) { return Green::inst()->getDesignModule($this->owner->DesignModule); } return null; } } |