Source of file MenuItem.php
Size: 5,522 Bytes - Last Modified: 2021-12-23T10:51:28+00:00
/var/www/docs.ssmods.com/process/src/src/Model/MenuItem.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 | <?php namespace TheWebmen\Menustructure\Model; use SilverStripe\Assets\File; use SilverStripe\Assets\Image; use SilverStripe\CMS\Model\SiteTree; use SilverStripe\Control\Controller; use SilverStripe\Forms\DropdownField; use SilverStripe\Forms\GridField\GridField; use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor; use SilverStripe\Forms\TreeDropdownField; use SilverStripe\ORM\DataObject; use SilverStripe\Security\Permission; use Symbiote\GridFieldExtensions\GridFieldOrderableRows; use UncleCheese\DisplayLogic\Forms\Wrapper; class MenuItem extends DataObject { private static $link_types = [ 'page' => 'Page', 'url' => 'URL', 'file' => 'File', 'no-link' => 'Not linked' ]; private static $table_name = 'Menustructure_MenuItem'; private static $db = [ 'Title' => 'Varchar', 'LinkType' => 'Varchar', 'Url' => 'Varchar(255)', 'OpenInNewWindow' => 'Boolean', 'Sort' => 'Int' ]; private static $has_one = [ 'Image' => Image::class, 'File' => File::class, 'Menu' => Menu::class, 'ParentItem' => MenuItem::class, 'LinkedPage' => SiteTree::class ]; private static $has_many = [ 'Items' => MenuItem::class ]; private static $owns = [ 'Image', 'File' ]; private static $summary_fields = [ 'Title', 'LinkType', 'OpenInNewWindow' ]; private static $default_sort = 'Sort'; /** * @return \SilverStripe\Forms\FieldList */ public function getCMSFields() { $this->beforeUpdateCMSFields(function($fields) { $fields->removeByName('Sort'); $fields->removeByName('ParentItemID'); $fields->removeByName('MenuID'); $fields->replaceField('LinkType', DropdownField::create('LinkType', $this->fieldLabel('LinkType'), $this->getLinkTypes())); $fields->replaceField('LinkedPageID', $linkedPageWrapper = Wrapper::create(TreeDropdownField::create('LinkedPageID', $this->fieldLabel('LinkedPage'), SiteTree::class))); $linkedPageWrapper->displayIf('LinkType')->isEqualTo('page'); $fields->dataFieldByName('File')->displayIf('LinkType')->isEqualTo('file'); $fields->dataFieldByName('Url')->displayIf('LinkType')->isEqualTo('url'); $fields->dataFieldByName('OpenInNewWindow')->displayIf('LinkType')->isEqualTo('page')->orIf('LinkType')->isEqualTo('url')->orIf('LinkType')->isEqualTo('file'); $fields->addFieldToTab('Root.Main', $fields->dataFieldByName('OpenInNewWindow')); $fields->addFieldToTab('Root.Main', $fields->dataFieldByName('Image')->setFolderName('Menus')->setDescription('Optional image, can be used in some templates.')); $fields->removeByName('Items'); if($this->exists()){ $gridConfig = new GridFieldConfig_RecordEditor(); $gridConfig->addComponent(GridFieldOrderableRows::create()); $fields->addFieldToTab('Root.Main', GridField::create('Items', 'Items', $this->Items(), $gridConfig)); } }); return parent::getCMSFields(); } private function getLinkTypes() { $linkTypes = self::$link_types; $this->extend('updateLinkTypes', $linkTypes); return $linkTypes; } /** * @return bool|mixed */ public function getLink(){ switch ($this->LinkType) { case 'url': return $this->Url; break; case 'page': return $this->LinkedPage()->Link(); break; case 'file': return $this->File()->Link(); break; } return false; } /** * @return string */ public function LinkingMode(){ if($this->LinkType == 'page'){ return Controller::curr()->ID == $this->LinkedPageID ? 'current' : 'link'; } return 'link'; } /** * @param null $member * @param array $context * @return bool */ public function canCreate($member = null, $context = array()) { if (Permission::checkMember($member, 'CMS_ACCESS_TheWebmen\Menustructure\Admin\MenusAdmin')) { return true; } return parent::canCreate($member, $context); } /** * @param null $member * @return bool */ public function canView($member = null) { if (Permission::checkMember($member, 'CMS_ACCESS_TheWebmen\Menustructure\Admin\MenusAdmin')) { return true; } return parent::canView($member); } /** * @param null $member * @return bool */ public function canEdit($member = null) { if (Permission::checkMember($member, 'CMS_ACCESS_TheWebmen\Menustructure\Admin\MenusAdmin')) { return true; } return parent::canEdit($member); } /** * @param null $member * @return bool */ public function canDelete($member = null) { if (Permission::checkMember($member, 'CMS_ACCESS_TheWebmen\Menustructure\Admin\MenusAdmin')) { return true; } return parent::canDelete($member); } /** * Recursive delete */ public function onBeforeDelete() { parent::onBeforeDelete(); foreach($this->Items() as $item){ $item->delete(); } } } |