Source of file SiteTreeURLSegmentField.php
Size: 4,509 Bytes - Last Modified: 2021-12-23T10:28:18+00:00
/var/www/docs.ssmods.com/process/src/code/Forms/SiteTreeURLSegmentField.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 | <?php namespace SilverStripe\CMS\Forms; use SilverStripe\CMS\Model\SiteTree; use SilverStripe\Control\Controller; use SilverStripe\Control\HTTPRequest; use SilverStripe\Core\Convert; use SilverStripe\Forms\TextField; use SilverStripe\View\Requirements; /** * Used to edit the SiteTree->URLSegment property, and suggest input based on the serverside rules * defined through {@link SiteTree->generateURLSegment()} and {@link URLSegmentFilter}. * * Note: The actual conversion for saving the value takes place in the model layer. */ class SiteTreeURLSegmentField extends TextField { /** * @var string */ protected $helpText; /** * @var string */ protected $urlPrefix; /** * @var string */ protected $urlSuffix; /** * @var string */ protected $defaultUrl; private static $allowed_actions = [ 'suggest' ]; public function Value() { return rawurldecode($this->value); } public function getAttributes() { return array_merge( parent::getAttributes(), [ 'data-prefix' => $this->getURLPrefix(), 'data-suffix' => $this->getURLSuffix(), 'data-default-url' => $this->getDefaultURL() ] ); } public function Field($properties = []) { return parent::Field($properties); } /** * @param HTTPRequest $request * @return string */ public function suggest($request) { if (!$request->getVar('value')) { return $this->httpError( 405, _t('SilverStripe\\CMS\\Forms\\SiteTreeURLSegmentField.EMPTY', 'Please enter a URL segment or click cancel') ); } $page = $this->getPage(); // Same logic as SiteTree->onBeforeWrite $page->URLSegment = $page->generateURLSegment($request->getVar('value')); $count = 2; while (!$page->validURLSegment()) { $page->URLSegment = preg_replace('/-[0-9]+$/', null, $page->URLSegment) . '-' . $count; $count++; } Controller::curr()->getResponse()->addHeader('Content-Type', 'application/json'); return json_encode(['value' => $page->URLSegment]); } /** * @return SiteTree */ public function getPage() { $idField = $this->getForm()->Fields()->dataFieldByName('ID'); return ($idField && $idField->Value()) ? SiteTree::get()->byID($idField->Value()) : SiteTree::singleton(); } /** * @param string $string The secondary text to show * @return $this */ public function setHelpText($string) { $this->helpText = $string; return $this; } /** * @return string the secondary text to show in the template */ public function getHelpText() { return $this->helpText; } /** * @param string $url the url that prefixes the page url segment field * @return $this */ public function setURLPrefix($url) { $this->urlPrefix = $url; return $this; } /** * @return string the url prefixes the page url segment field to show in template */ public function getURLPrefix() { return $this->urlPrefix; } public function getURLSuffix() { return $this->urlSuffix; } /** * @return string Indicator for UI to respond to changes accurately, * and auto-update the field value if changes to the default occur. * Does not set the field default value. */ public function getDefaultURL() { return $this->defaultUrl; } public function setDefaultURL($url) { $this->defaultUrl = $url; return $this; } public function setURLSuffix($suffix) { $this->urlSuffix = $suffix; return $this; } public function Type() { return 'text urlsegment'; } public function getURL() { return Controller::join_links($this->getURLPrefix(), $this->Value(), $this->getURLSuffix()); } public function performReadonlyTransformation() { $newInst = parent::performReadonlyTransformation(); $newInst->helpText = $this->helpText; $newInst->urlPrefix = $this->urlPrefix; $newInst->urlSuffix = $this->urlSuffix; $newInst->defaultUrl = $this->defaultUrl; return $newInst; } } |