Source of file CoreElement.php
Size: 5,301 Bytes - Last Modified: 2020-11-13T10:29:06+00:00
/var/www/docs.ssmods.com/process/src/src/Models/Elements/CoreElement.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 | <?php namespace Nobrainer\Elemental\Elements; use Bummzack\SortableFile\Forms\SortableUploadField; use DNADesign\Elemental\Models\BaseElement; use gorriecoe\LinkField\LinkField; use gorriecoe\Link\Models\Link; use SilverStripe\AssetAdmin\Forms\UploadField; use SilverStripe\Assets\Image; use SilverStripe\Core\ClassInfo; use SilverStripe\Forms\DropdownField; use SilverStripe\Forms\FieldList; use SilverStripe\Forms\GridField\GridFieldAddExistingAutocompleter; use SilverStripe\Forms\GridField\GridFieldConfig; use SilverStripe\Forms\HTMLEditor\HTMLEditorField; use SilverStripe\Forms\Tab; use SilverStripe\Forms\TabSet; use SilverStripe\Forms\TextField; use SilverStripe\ORM\FieldType\DBField; use SilverStripe\View\Requirements; /** * Created by PhpStorm. * User: tn * Date: 13/05/2020 * Time: 10.39 */ class CoreElement extends BaseElement { private static $table_name = 'NobrainerCoreElement'; private static $icon = 'font-icon-block-content'; private static $inline_editable = false; private static $db = [ 'Tagline' => 'Varchar(255)', 'Content' => 'HTMLText' ]; /** * @var array */ private static $has_one = [ 'MainLink' => Link::class, 'MediaLink' => Link::class ]; /** * @var array */ private static $many_many = [ 'Images' => Image::class, ]; private static $many_many_extraFields = [ 'Images' => ['Sort' => 'Int'] ]; /** * @var array */ private static $owns = [ 'Images' ]; /** * Re-title the HTML field to Content * * {@inheritDoc} */ public function getCMSFields() { $this->beforeUpdateCMSFields(function (FieldList $fields) { /** @var HTMLEditorField $editorField */ $editorField = $fields->fieldByName('Root.Main.Content'); $editorField->setTitle(_t(__CLASS__ . '.ContentLabel', 'Content')); $fields->addFieldToTab('Root.Main', TextField::create('Tagline', _t(__CLASS__ . '.TaglineLabel', 'Tagline')), 'Content'); $fields->removeByName(['Settings', 'MainLinkID', 'MediaLinkID']); $fields->addFieldToTab('Root.Main', LinkField::create('MainLink', 'Link', $this)); $fields->addFieldToTab('Root.Images', SortableUploadField::create('Images')->setSortColumn('Sort')); $fields->addFieldToTab('Root.Images', LinkField::create('MediaLink', 'Media Link', $this)); // If no template selected, only allow template selection if ($this->hasTemplates()) { $fields->removeByName(['Main', 'Images', 'Settings', 'History', 'Styling']); $this->addTemplateFields($fields); } else { $this->addTemplateSpecificFields($fields); $this->addTemplateFields($fields); } }); Requirements::css('nobrainer/silverstripe-elemental-base:client/dist/css/cms.css'); return parent::getCMSFields(); } protected function hasTemplates() { $styles = $this->getTemplateStyles(); return count($styles) > 0 && !$this->Style; } private function addTemplateFields(FieldList $fields): void { $styles = $this->getTemplateStyles(); if ($styles && count($styles) > 0) { $styleDropdown = DropdownField::create('Style', 'Template', $styles); $styleDropdown->setEmptyString(_t(__CLASS__ . '.CUSTOM_STYLES', 'Select a template')); $fields->addFieldsToTab('Root.Template', [ $styleDropdown ]); } else { $fields->removeByName('Style'); } } protected function addTemplateSpecificFields(FieldList $fields): void { $style_settings = $this->getSelectedTemplateSettings(); $settingsFields = $style_settings['fields'] ?? []; foreach ($settingsFields as $column => $elm_fields) { $data_fields = []; foreach ($elm_fields as $fieldname) { $data_fields[] = $fields->dataFieldByName($fieldname); } $fields->addFieldsToTab("Root.$column", $data_fields); } } public function getSelectedTemplateSettings() { $settings = $this->config()->get('styles'); return $settings[$this->Style] ?? []; } public function getTemplateStyles() { $styles = $this->config()->uninherited('styles') ?? []; $styles_flat = array(); foreach ($styles as $key => $obj) { $styles_flat[$key] = $obj['label']; } return $styles_flat; } public function getSummary() { return DBField::create_field('HTMLText', $this->Content)->Summary(20); } protected function provideBlockSchema() { $blockSchema = parent::provideBlockSchema(); $blockSchema['content'] = $this->getSummary(); return $blockSchema; } public function getType() { return _t(__CLASS__ . '.BlockType', 'Content'); } public function getUnsetTemplateMessage(): string { $class = ClassInfo::shortName($this->ClassName); return "Fallback template for *$class*. No specific style has been selected!"; } } |