Source of file BlockLinks.php
Size: 4,674 Bytes - Last Modified: 2021-12-23T10:52:14+00:00
/var/www/docs.ssmods.com/process/src/code/model/blocks/BlockLinks.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 | <?php /** * @Todo: */ class BlockLinks extends BlockBase { /** * Different views available for user selection. * * @var array * @config */ private static $views = array( 'BBLinksListView', 'BBLinksMediaView', 'BBLinksGridView', 'BBLinksButtonGridView' ); /** * Default view * @var string * @config */ private static $default_view = 'BBLinksListView'; private static $db = array( 'SavedLinks' => 'Text' ); private static $has_many = array( 'Links' => 'BBLink' ); /* * ------------------------------------------------------------------------- * Admin methods * ------------------------------------------------------------------------- */ public function singular_name() { return _t('BlockLinks.SINGULARNAME', 'File Links Block'); } public function plural_name() { return _t('BlockLinks.PLURALNAME', 'File Links Blocks'); } public function getCMSFields() { Requirements::css(TKIBUILDINGBLOCKS_DIR . '/css/tkibuildingblocks-admin.css'); $fields = parent::getCMSFields(); $fields->removeByName('SavedLinks'); /* * File links tab */ $fields->findOrMakeTab('Root.Links')->setTitle(_t('BlockLinks.LinksTab', 'Links')); if(!$this->exists()) { $fields->addFieldToTab('Root.Links', LiteralField::create('ItemsAvailableAfterSaving', '<p class="message warning">'. _t('BlockLinks.LinksAvailableAfterSaving', 'Block must be saved first before adding items') .'</p>')); } else { $linksGrid = $fields->dataFieldByName('Links'); // Remove relation link autocompleter $autoCompleter = $linksGrid->getConfig()->getComponentByType('GridFieldAddExistingAutocompleter'); //$linksGrid->getConfig()->removeComponent($autoCompleter); // Sorting if (class_exists('GridFieldOrderableRows')) { $linksGrid->getConfig()->addComponent(new GridFieldOrderableRows('Sort')); } elseif (class_exists('GridFieldSortableRows')) { $linksGrid->getConfig()->addComponent(new GridFieldSortableRows('Sort')); } // Grid columns $summaryFields = [ 'ID' => array('title' => _t('Block.ID', 'ID'), 'field' => 'LiteralField'), 'Title' => array('title' => _t('Block.Title', 'Title'), 'field' => 'LiteralField'), 'FormattedSource' => array('title' => _t('BBLink.Source', 'Source'), 'field' => 'LiteralField'), 'Type' => array('title' => _t('BBLink.Type', 'Type'), 'field' => 'LiteralField'), 'DisabledStatus' => array('title' => _t('BBLink.DisabledStatus', 'Status'), 'field' => 'HTMLText') ]; $dataColumns = $linksGrid->getConfig()->getComponentByType('GridFieldDataColumns'); if($dataColumns) { $dataColumns->setDisplayFields($summaryFields); } } return $fields; } public function getCMSValidator() { return RequiredFields::create('ManyMany[BlockArea]','ViewClass'); } public function onBeforeWrite() { parent::onBeforeWrite(); // Simple versioning of media items relation $links = $this->Links(); $linkIDs = ($links instanceof DataList) ? $links->sort('Sort')->map('ID')->keys() : array(); $this->SavedLinks = implode(',',$linkIDs); } /** * @todo Garbage cleanup routine for unlinked media items */ public function onAfterWrite() { parent::onAfterWrite(); } public function onAfterDelete() { parent::onAfterDelete(); // Clean up associated media items if (Versioned::current_stage() == 'Stage') { foreach($this->Links() as $item) { $item->delete(); } } } /* * ------------------------------------------------------------------------- * Getters / setters * ------------------------------------------------------------------------- */ public function getSavedLinks() { // Get data using IDs saved in SavedLinks field $ids = explode(',',trim($this->getField('SavedLinks'))); $data = ArrayList::create(BBLink::get()->byIDs($ids)->toArray()); $sorted = ArrayList::create(); // Sort according to order in SavedLinks field (versioned) foreach($ids as $id) { $obj = $data->byID($id); if($obj) { $sorted->push($obj); } } // Exclude disabled items return $sorted->exclude(array('Disabled' => 1)); } /* * ------------------------------------------------------------------------- * View methods * ------------------------------------------------------------------------- */ public function setViewData($view) { $view->items = $this->getSavedLinks(); } } |