Source of file OldURLRedirect.php
Size: 4,433 Bytes - Last Modified: 2021-12-23T10:59:24+00:00
/var/www/docs.ssmods.com/process/src/code/OldURLRedirect.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 | <?php /** * Class for storing redirects to old urls */ class OldURLRedirect extends DataObject { private static $singular_name = 'URL Redirect'; private static $plural_name = 'URL Redirects'; private static $db = array( 'RedirectType' => 'Enum("Internal,Custom", "Internal")', 'OldURL' => 'Varchar(255)', 'Anchor' => 'Varchar(50)', 'Action' => 'Varchar(100)', 'RedirectTo' => 'Varchar(255)', 'RedirectCode' => 'Int' ); private static $summary_fields = array( 'OldURL' => 'Old URL', 'RedirectionLink' => 'New URL', 'DontRedirect' => 'Dont Redirect' ); private static $defaults = array( 'RedirectCode' => 301 ); private static $has_one = array( 'Page' => 'SiteTree' ); public function getCMSFields() { $fields = FieldList::create( TabSet::create( "Root", Tab::create( "Main", TextField::create('OldURL', 'URL to redirect')->setDescription( 'Don\'t include domain, e.g. /old/link/' ), NumericField::create('RedirectCode', 'Redirect Code'), DropdownField::create( 'RedirectType', 'Redirect Type', $this->dbObject('RedirectType')->enumValues() ), CompositeField::create( array( HeaderField::create('InternalHeader', 'Internal Redirect', 3), TreeDropdownField::create('PageID', 'Page', 'SiteTree'), TextField::create('Action')->setDescription( 'Action part of the url your are redirecting to e.g. /checkout/options (options is the Action)' ), ) )->addExtraClass('internal-fields'), CompositeField::create( array( HeaderField::create('CustomHeader', 'Custom Redirect', 3), TextField::create('RedirectTo', 'Redirect To') ) )->addExtraClass('custom-fields'), TextField::create('Anchor')->setDescription( 'Anchor on the page to redirect to e.g. for anchor #bottom enter bottom (don\'t enter the hash)' ) ) ) ); Requirements::javascript(OLD_URLS_DIR . '/javascript/OldURLs.js'); return $fields; } public function canView($member = null) { return true; } public function canEdit($member = null) { return true; } public function canCreate($member = null) { return true; } public function canDelete($member = null) { return true; } /** * Get the link to redirect to * * @param Controller $controller */ public function getRedirectionLink() { $link = $this->RedirectType === 'Custom' ? $this->RedirectTo : $this->getInternalLink(); if ($this->Anchor) { $link .= '#' . $this->Anchor; } return $link; } public function getRedirectCode() { return ($code = $this->getField('RedirectCode')) ? $code : 301; } public function getInternalLink() { return Controller::join_links($this->Page()->Link(), $this->Action); } /** * Lookup an OldURLRedirect page which matches the url * * @param $url * @return DataObject|null */ public static function get_from_url($url) { $url = $url ? $url : (!empty($_GET['url']) ? $_GET['url'] : ''); if ($url) { if (strpos($url, '/') !== 0) { $url = '/' . $url; } $SQL_url = Convert::raw2sql($url); $filter = <<<SQL ("OldURL" = '{$SQL_url}' AND "RedirectType" = 'Custom') OR ("OldURL" = '{$SQL_url}' AND "RedirectType" = 'Internal' AND "PageID" <> 0) SQL; $oldPage = OldURLRedirect::get()->where($filter)->first(); if ($oldPage && $url == strtolower($oldPage->OldURL)) { return $oldPage; } } return null; } } |