* @license PHP License * @package WB * @subpackage content */ /** * Load base class */ WBClass::load('WBContent' , 'WBString'); /** * Content component: Redirect * * @version 1.3.1 * @package WB * @subpackage content */ class WBContent_Redirect extends WBContent { /** * My Parameter List * * - map: * - langmap like de => 'https://www.example.com/de/' * - session: use variable from session as redirect URL * * @var array */ protected $config = array( 'url' => '[[SELF]]', 'status' => 301, 'withpath' => 1, 'withget' => 1, 'langmap' => array(), 'map' => array(), 'session' => '' ); /** * Redirect * * Redirect to other page * * @return array parameter list * @cation this method does not return */ public function run() { $path = ''; if (!empty($this->config['__path'])) { $path = implode('/', $this->config['__path']); } $rUrl = $this->findTarget4Session(); if (empty($rUrl)) { $rUrl = $this->findTarget4Path($path); } if (empty($rUrl)) { $rUrl = $this->findLangUrl(); if (0 < intval($this->config['withpath']) && !empty($this->config['__path'])) { $rUrl .= $path; } } // detect cycle if ('[[SELF]]' . $path == $rUrl) { $rUrl = '[[SELF]]'; } $get = $this->req->export(); if (0 < intval($this->config['withget']) && !empty($get)) { $get = http_build_query($get); $rUrl .= '?' . $get; } $this->redirect2URL($rUrl, $this->config['status']); } private function findLangUrl() { $url = $this->config['url']; if (!class_exists('patI18n', false)) { return $url; } $lang = patI18n::getLocale(patI18n::LOCALE_TYPE_SHORT); if (empty($this->config['langmap'][$lang])) { return $url; } return $this->config['langmap'][$lang]; } private function findTarget4Path($path) { if (empty($this->config['map'])) { return ''; } foreach ($this->config['map'] as $l) { // exact match if ($l['path'] == $path) { return $l['url']; } } return ''; } private function findTarget4Session() { if (empty($this->config['session'])) { return ''; } if (!$this->sess->has($this->config['session'])) { return ''; } $url = $this->sess->get($this->config['session']); $this->sess->clear($this->config['session']); return trim($url); } }