Source of file HasLink.php
Size: 2,854 Bytes - Last Modified: 2021-12-24T06:33:51+00:00
/var/www/docs.ssmods.com/process/src/app/src/Extensions/HasLink.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 | <?php namespace XD\Basic\Extensions; use SilverStripe\CMS\Model\SiteTree; use SilverStripe\Forms\CompositeField; use SilverStripe\Forms\DropdownField; use SilverStripe\Forms\FieldList; use SilverStripe\Forms\TextField; use SilverStripe\Forms\TreeDropdownField; use SilverStripe\ORM\DataExtension; use SilverStripe\ORM\DataObject; /** * Class HasLink * @package PlanetBio\Traits * @property HasLink|DataObject $owner * * @property string ExternalLink * @property string LinkAnchor * * @method SiteTree InternalLink() */ class HasLink extends DataExtension { const TYPE_EXTERNAL = 'external'; const TYPE_INTERNAL = 'internal'; const TYPE_ANCHOR = 'anchor'; private static $db = [ 'LinkLabel' => 'Varchar', 'ExternalLink' => 'Varchar', 'LinkAnchor' => 'Varchar' ]; private static $defaults = [ 'LinkLabel' => 'Learn more' ]; private static $has_one = [ 'InternalLink' => SiteTree::class ]; public function updateCMSFields(FieldList $fields) { $fields->removeByName(['ExternalLink', 'InternalLinkID', 'LinkLabel', 'LinkAnchor']); $fields->addFieldsToTab('Root.Main', [ $compositeField = CompositeField::create([ TextField::create('LinkLabel', _t(__CLASS__ . '.LinkLabel', 'Link label')), TreeDropdownField::create('InternalLinkID', _t(__CLASS__ . '.InternalLink', 'Internal link'), SiteTree::class), TextField::create('ExternalLink', _t(__CLASS__ . '.ExternalLink', 'External link')) ]) ]); // If we have an internal link with multiple blocks, add an anchor option if (($internalLink = $this->owner->InternalLink()) && $internalLink->exists() && $internalLink->hasMethod('ElementalArea')) { $blocks = $internalLink->ElementalArea()->Elements()->map('Link', 'Title')->toArray(); if (count($blocks) > 1) { $compositeField->push( DropdownField::create('LinkAnchor', _t(__CLASS__ . '.LinkAnchor', 'Anchor'), $blocks) ->setEmptyString(_t(__CLASS__ . '.LinkAnchorEmptyString', 'No anchor')) ); } } } /** * Get the Link * * @return string */ public function getLink() { if (($link = $this->owner->InternalLink()) && $link->exists()) { return $this->owner->LinkAnchor ?: $link->owner->Link(); } else { return $this->owner->ExternalLink; } } public function getLinkType() { if (($link = $this->owner->InternalLink()) && $link->exists()) { return $this->owner->LinkAnchor ? self::TYPE_ANCHOR : self::TYPE_INTERNAL; } else { return self::TYPE_EXTERNAL; } } } |