1
0
mirror of https://github.com/e107inc/e107.git synced 2025-08-02 12:48:26 +02:00

De-indented e107::url() with guard clause

Less cognitive complexity now that the e_url.php check is a guard clause
This commit is contained in:
Nick Liu
2020-01-12 23:15:25 +01:00
parent 75d1ae2649
commit d13fcd44c7

View File

@@ -3403,18 +3403,16 @@ class e107
* @param bool $options['legacy'] When true legacy urls will be generated regardless of mod-rewrite status. * @param bool $options['legacy'] When true legacy urls will be generated regardless of mod-rewrite status.
* @return string * @return string
*/ */
public static function url($plugin='', $key=null, $row=array(), $options = array()) public static function url($plugin = '', $key = null, $row = array(), $options = array())
{ {
/* backward compat - core keys. ie. news/xxx/xxx user/xxx/xxx etc, */ /* backward compat - core keys. ie. news/xxx/xxx user/xxx/xxx etc, */
$legacy = array('news','page','search','user','download','gallery'); $legacy = array('news', 'page', 'search', 'user', 'download', 'gallery');
if(strpos($plugin,'/')!==false) if (strpos($plugin, '/') !== false) {
{ $tmp = explode("/", $plugin, 2);
$tmp = explode("/",$plugin,2);
if(in_array($tmp[0], $legacy)) if (in_array($tmp[0], $legacy)) {
{
return self::getUrl()->create($plugin, $key, $row); return self::getUrl()->create($plugin, $key, $row);
} }
@@ -3424,10 +3422,9 @@ class e107
$key = $tmp[1]; $key = $tmp[1];
} }
if(!$tmp = self::getRegistry('core/e107/addons/e_url')) if (!$tmp = self::getRegistry('core/e107/addons/e_url')) {
{
$tmp = self::getUrlConfig(); $tmp = self::getUrlConfig();
self::setRegistry('core/e107/addons/e_url',$tmp); self::setRegistry('core/e107/addons/e_url', $tmp);
} }
$tp = self::getParser(); $tp = self::getParser();
@@ -3437,7 +3434,7 @@ class e107
$rootNamespace = self::getPref('url_main_module'); $rootNamespace = self::getPref('url_main_module');
if(is_string($options)) // backwards compat. if (is_string($options)) // backwards compat.
{ {
$options = array( $options = array(
'mode' => $options, 'mode' => $options,
@@ -3451,67 +3448,58 @@ class e107
'query' => array(), 'query' => array(),
); );
if(isset($options['fragment']) && $options['fragment'] !== '') if (isset($options['fragment']) && $options['fragment'] !== '') {
{
$options['fragment'] = '#' . $options['fragment']; $options['fragment'] = '#' . $options['fragment'];
} }
if(!empty($tmp[$plugin][$key]['sef'])) if (!empty($plugin) && empty($tmp[$plugin][$key]['sef'])) {
{ self::getMessage()->addDebug("e_url.php in <b>" . e_PLUGIN . $plugin . "</b> is missing the key: <b>" . $key . "</b>. Or, you may need to <a href='" . e_ADMIN . "db.php?mode=plugin_scan'>scan your plugin directories</a> to register e_url.php");
if(!empty($tmp[$plugin][$key]['alias'])) return false;
{ }
if (!empty($tmp[$plugin][$key]['alias'])) {
$alias = (!empty($pref[e_LAN][$plugin][$key])) ? $pref[e_LAN][$plugin][$key] : $tmp[$plugin][$key]['alias']; $alias = (!empty($pref[e_LAN][$plugin][$key])) ? $pref[e_LAN][$plugin][$key] : $tmp[$plugin][$key]['alias'];
if(!empty($rootNamespace) && $rootNamespace === $plugin) if (!empty($rootNamespace) && $rootNamespace === $plugin) {
{ $replaceAlias = array('{alias}\/', '{alias}/');
$replaceAlias = array('{alias}\/','{alias}/');
$tmp[$plugin][$key]['sef'] = str_replace($replaceAlias, '', $tmp[$plugin][$key]['sef']); $tmp[$plugin][$key]['sef'] = str_replace($replaceAlias, '', $tmp[$plugin][$key]['sef']);
} } else {
else
{
$tmp[$plugin][$key]['sef'] = str_replace('{alias}', $alias, $tmp[$plugin][$key]['sef']); $tmp[$plugin][$key]['sef'] = str_replace('{alias}', $alias, $tmp[$plugin][$key]['sef']);
} }
} }
preg_match_all('#{([a-z_]*)}#', $tmp[$plugin][$key]['sef'],$matches); preg_match_all('#{([a-z_]*)}#', $tmp[$plugin][$key]['sef'], $matches);
$active = true; $active = true;
foreach($matches[1] as $k=>$v) // check if a field value is missing, if so, revent to legacy url. foreach ($matches[1] as $k => $v) // check if a field value is missing, if so, revent to legacy url.
{ {
if(!isset($row[$v])) if (!isset($row[$v])) {
{ self::getMessage()->addDebug("Missing value for " . $v . " in " . $plugin . "/e_url.php - '" . $key . "'");
self::getMessage()->addDebug("Missing value for ".$v." in ".$plugin."/e_url.php - '".$key."'");
$active = false; $active = false;
break; break;
} }
} }
if(empty($sefActive[$plugin])) // SEF disabled. if (empty($sefActive[$plugin])) // SEF disabled.
{ {
self::getDebug()->log('SEF URL for <b>'.$plugin.'</b> disabled.'); self::getDebug()->log('SEF URL for <b>' . $plugin . '</b> disabled.');
$active = false; $active = false;
} }
if (deftrue('e_MOD_REWRITE') && ($active == true) && empty($options['legacy'])) // Search-Engine-Friendly URLs active.
if(deftrue('e_MOD_REWRITE') && ($active == true) && empty($options['legacy'])) // Search-Engine-Friendly URLs active.
{ {
$rawUrl = $tp->simpleParse($tmp[$plugin][$key]['sef'], $row); $rawUrl = $tp->simpleParse($tmp[$plugin][$key]['sef'], $row);
if($options['mode'] === 'full') if ($options['mode'] === 'full') {
{ $sefUrl = SITEURL . $rawUrl;
$sefUrl = SITEURL.$rawUrl; } elseif ($options['mode'] === 'raw') {
}
elseif($options['mode'] === 'raw')
{
$sefUrl = $rawUrl; $sefUrl = $rawUrl;
} } else {
else $sefUrl = e_HTTP . $rawUrl;
{
$sefUrl = e_HTTP.$rawUrl;
} }
// Append the query. // Append the query.
@@ -3520,22 +3508,20 @@ class e107
} }
return $sefUrl . $options['fragment']; return $sefUrl . $options['fragment'];
} } else // Legacy URL.
else // Legacy URL.
{ {
$srch = array(); $srch = array();
$repl = array(); $repl = array();
foreach($matches[0] as $k=>$val) foreach ($matches[0] as $k => $val) {
{ $srch[] = '$' . ($k + 1);
$srch[] = '$'.($k+1);
$repl[] = $val; $repl[] = $val;
} }
$template = isset($tmp[$plugin][$key]['legacy']) ? $tmp[$plugin][$key]['legacy'] : $tmp[$plugin][$key]['redirect']; $template = isset($tmp[$plugin][$key]['legacy']) ? $tmp[$plugin][$key]['legacy'] : $tmp[$plugin][$key]['redirect'];
$urlTemplate = str_replace($srch,$repl, $template); $urlTemplate = str_replace($srch, $repl, $template);
$urlTemplate = $tp->replaceConstants($urlTemplate, $options['mode']); $urlTemplate = $tp->replaceConstants($urlTemplate, $options['mode']);
$legacyUrl = $tp->simpleParse($urlTemplate, $row); $legacyUrl = $tp->simpleParse($urlTemplate, $row);
@@ -3544,25 +3530,20 @@ class e107
// Avoid duplicate query keys. eg. URL has ?id=x and $options['query']['id'] exists. // Avoid duplicate query keys. eg. URL has ?id=x and $options['query']['id'] exists.
// @see forum/e_url.php - topic/redirect and forum/view_shortcodes.php sc_post_url() // @see forum/e_url.php - topic/redirect and forum/view_shortcodes.php sc_post_url()
list($legacyUrl,$tmp) = explode("?",$legacyUrl); list($legacyUrl, $tmp) = explode("?", $legacyUrl);
if(!empty($tmp)) if (!empty($tmp)) {
{ if (strpos($tmp, '=') === false) {
if (strpos($tmp, '=') === false)
{
// required for legacy urls of type "request.php?download.43" // required for legacy urls of type "request.php?download.43"
// @see: issue #3275 // @see: issue #3275
$legacyUrl .= '?' . $tmp; $legacyUrl .= '?' . $tmp;
$options['query'] = null; $options['query'] = null;
} } else {
else
{
parse_str($tmp,$qry); parse_str($tmp, $qry);
foreach($qry as $k=>$v) foreach ($qry as $k => $v) {
{ if (!isset($options['query'][$k])) // $options['query'] overrides any in the original URL.
if(!isset($options['query'][$k])) // $options['query'] overrides any in the original URL.
{ {
$options['query'][$k] = $v; $options['query'][$k] = $v;
} }
@@ -3572,33 +3553,13 @@ class e107
} }
// Append the query. // Append the query.
if (is_array($options['query']) && !empty($options['query'])) if (is_array($options['query']) && !empty($options['query'])) {
{
$legacyUrl .= (strpos($legacyUrl, '?') !== FALSE ? '&' : '?') . self::httpBuildQuery($options['query']); $legacyUrl .= (strpos($legacyUrl, '?') !== FALSE ? '&' : '?') . self::httpBuildQuery($options['query']);
} }
return $legacyUrl . $options['fragment']; return $legacyUrl . $options['fragment'];
} }
}
if(!empty($plugin))
{
self::getMessage()->addDebug("e_url.php in <b>".e_PLUGIN.$plugin."</b> is missing the key: <b>".$key."</b>. Or, you may need to <a href='".e_ADMIN."db.php?mode=plugin_scan'>scan your plugin directories</a> to register e_url.php");
}
return false;
/*
elseif(varset($tmp[$plugin][$key]['redirect']))
{
return self::getParser()->replaceConstants($tmp[$plugin][$key]['redirect'],'full');
}
return;
*/
} }
@@ -3643,7 +3604,7 @@ class e107
* rawurlencode() (instead of urlencode()) all query parameters. * rawurlencode() (instead of urlencode()) all query parameters.
* @param array $query The query parameter array to be processed, e.g. $_GET. * @param array $query The query parameter array to be processed, e.g. $_GET.
* @param string $parent Internal use only. Used to build the $query array key for nested items. * @param string $parent Internal use only. Used to build the $query array key for nested items.
* @return array A rawurlencoded string which can be used as or appended to the URL query string. * @return string A rawurlencoded string which can be used as or appended to the URL query string.
*/ */
public static function httpBuildQuery(array $query, $parent = '') public static function httpBuildQuery(array $query, $parent = '')
{ {