/** * @param $serverVariables array * @param $expectedResult string * @dataProvider serverVariablesProvider */ public function testGetDistroBaseUrl($serverVariables, $expectedResult) { $originalServerValue = $_SERVER; $_SERVER = $serverVariables; $this->assertEquals($expectedResult, $this->_model->getDistroBaseUrl()); $_SERVER = $originalServerValue; }
/** * Generate installation data and record them into local.xml using local.xml.template * * @return void */ public function install() { $data = $this->getConfigData(); $defaults = array('root_dir' => $this->_filesystem->getPath(\Magento\Framework\App\Filesystem::ROOT_DIR), 'app_dir' => $this->_filesystem->getPath(\Magento\Framework\App\Filesystem::APP_DIR), 'var_dir' => $this->_filesystem->getPath(\Magento\Framework\App\Filesystem::VAR_DIR), 'base_url' => $this->_request->getDistroBaseUrl()); foreach ($defaults as $index => $value) { if (!isset($data[$index])) { $data[$index] = $value; } } if (isset($data['unsecure_base_url'])) { $data['unsecure_base_url'] .= substr($data['unsecure_base_url'], -1) != '/' ? '/' : ''; if (strpos($data['unsecure_base_url'], 'http') !== 0) { $data['unsecure_base_url'] = 'http://' . $data['unsecure_base_url']; } if (!$this->_getInstaller()->getDataModel()->getSkipBaseUrlValidation()) { $this->_checkUrl($data['unsecure_base_url']); } } if (isset($data['secure_base_url'])) { $data['secure_base_url'] .= substr($data['secure_base_url'], -1) != '/' ? '/' : ''; if (strpos($data['secure_base_url'], 'http') !== 0) { $data['secure_base_url'] = 'https://' . $data['secure_base_url']; } if (!empty($data['use_secure']) && !$this->_getInstaller()->getDataModel()->getSkipUrlValidation()) { $this->_checkUrl($data['secure_base_url']); } } $data['date'] = self::TMP_INSTALL_DATE_VALUE; $data['key'] = self::TMP_ENCRYPT_KEY_VALUE; $data['var_dir'] = $data['root_dir'] . '/var'; $data['use_script_name'] = isset($data['use_script_name']) ? 'true' : 'false'; $this->_getInstaller()->getDataModel()->setConfigData($data); $contents = $this->_configDirectory->readFile('local.xml.template'); foreach ($data as $index => $value) { $contents = str_replace('{{' . $index . '}}', '<![CDATA[' . $value . ']]>', $contents); } $this->_configDirectory->writeFile($this->_localConfigFile, $contents); $this->_configDirectory->changePermissions($this->_localConfigFile, 0777); }
/** * Replace placeholders with config values * * @param string $value * @param array $data * @return string */ protected function _processPlaceholders($value, $data) { $placeholder = $this->_getPlaceholder($value); if ($placeholder) { $url = false; if ($placeholder == 'unsecure_base_url') { $url = $this->_getValue($this->urlPaths['unsecureBaseUrl'], $data); } elseif ($placeholder == 'secure_base_url') { $url = $this->_getValue($this->urlPaths['secureBaseUrl'], $data); } if ($url) { $value = str_replace('{{' . $placeholder . '}}', $url, $value); } elseif (strpos($value, $this->urlPlaceholder) !== false) { $distroBaseUrl = $this->request->getDistroBaseUrl(); $value = str_replace($this->urlPlaceholder, $distroBaseUrl, $value); } if (null !== $this->_getPlaceholder($value)) { $value = $this->_processPlaceholders($value, $data); } } return $value; }
/** * Retrieve base URL * * @param string $type * @param boolean|null $secure * @return string * @throws \InvalidArgumentException * * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ public function getBaseUrl($type = UrlInterface::URL_TYPE_LINK, $secure = null) { $cacheKey = $type . '/' . ($secure === null ? 'null' : ($secure ? 'true' : 'false')); if (!isset($this->_baseUrlCache[$cacheKey])) { $secure = $secure === null ? $this->isCurrentlySecure() : (bool) $secure; switch ($type) { case UrlInterface::URL_TYPE_WEB: $path = $secure ? self::XML_PATH_SECURE_BASE_URL : self::XML_PATH_UNSECURE_BASE_URL; $url = $this->getConfig($path); break; case UrlInterface::URL_TYPE_LINK: $path = $secure ? self::XML_PATH_SECURE_BASE_LINK_URL : self::XML_PATH_UNSECURE_BASE_LINK_URL; $url = $this->getConfig($path); $url = $this->_updatePathUseRewrites($url); $url = $this->_updatePathUseStoreView($url); break; case UrlInterface::URL_TYPE_DIRECT_LINK: $path = $secure ? self::XML_PATH_SECURE_BASE_LINK_URL : self::XML_PATH_UNSECURE_BASE_LINK_URL; $url = $this->getConfig($path); $url = $this->_updatePathUseRewrites($url); break; case UrlInterface::URL_TYPE_STATIC: $path = $secure ? self::XML_PATH_SECURE_BASE_STATIC_URL : self::XML_PATH_UNSECURE_BASE_STATIC_URL; $url = $this->getConfig($path); if (!$url) { $url = $this->getBaseUrl(UrlInterface::URL_TYPE_WEB, $secure) . $this->filesystem->getUri(DirectoryList::STATIC_VIEW); } break; case UrlInterface::URL_TYPE_MEDIA: $url = $this->_getMediaScriptUrl($this->filesystem, $secure); if (!$url) { $path = $secure ? self::XML_PATH_SECURE_BASE_MEDIA_URL : self::XML_PATH_UNSECURE_BASE_MEDIA_URL; $url = $this->getConfig($path); if (!$url) { $url = $this->getBaseUrl(UrlInterface::URL_TYPE_WEB, $secure) . $this->filesystem->getUri(DirectoryList::MEDIA); } } break; default: throw new \InvalidArgumentException('Invalid base url type'); } if (false !== strpos($url, self::BASE_URL_PLACEHOLDER)) { $url = str_replace(self::BASE_URL_PLACEHOLDER, $this->_request->getDistroBaseUrl(), $url); } $this->_baseUrlCache[$cacheKey] = rtrim($url, '/') . '/'; } return $this->_baseUrlCache[$cacheKey]; }