diff --git a/e107_handlers/e107_class.php b/e107_handlers/e107_class.php
index f2fffd146..320867707 100755
--- a/e107_handlers/e107_class.php
+++ b/e107_handlers/e107_class.php
@@ -3403,17 +3403,17 @@ class e107
* @param bool $options['legacy'] When true legacy urls will be generated regardless of mod-rewrite status.
* @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, */
- $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);
}
@@ -3424,10 +3424,10 @@ class e107
$key = $tmp[1];
}
- if(!$tmp = self::getRegistry('core/e107/addons/e_url'))
+ if (!$tmp = self::getRegistry('core/e107/addons/e_url'))
{
$tmp = self::getUrlConfig();
- self::setRegistry('core/e107/addons/e_url',$tmp);
+ self::setRegistry('core/e107/addons/e_url', $tmp);
}
$tp = self::getParser();
@@ -3437,7 +3437,7 @@ class e107
$rootNamespace = self::getPref('url_main_module');
- if(is_string($options)) // backwards compat.
+ if (is_string($options)) // backwards compat.
{
$options = array(
'mode' => $options,
@@ -3446,159 +3446,135 @@ class e107
// Merge in defaults.
$options += array(
- 'mode' => 'abs',
+ 'mode' => 'abs',
'fragment' => '',
- 'query' => array(),
+ 'query' => array(),
);
- if(isset($options['fragment']) && $options['fragment'] !== '')
+ if (isset($options['fragment']) && $options['fragment'] !== '')
{
$options['fragment'] = '#' . $options['fragment'];
}
- if(!empty($tmp[$plugin][$key]['sef']))
+ if (!empty($plugin) && empty($tmp[$plugin][$key]['sef']))
{
- if(!empty($tmp[$plugin][$key]['alias']))
- {
- $alias = (!empty($pref[e_LAN][$plugin][$key])) ? $pref[e_LAN][$plugin][$key] : $tmp[$plugin][$key]['alias'];
+ self::getMessage()->addDebug("e_url.php in " . e_PLUGIN . $plugin . " is missing the key: " . $key . ". Or, you may need to scan your plugin directories to register e_url.php");
+ return false;
+ }
- if(!empty($rootNamespace) && $rootNamespace === $plugin)
- {
- $replaceAlias = array('{alias}\/','{alias}/');
- $tmp[$plugin][$key]['sef'] = str_replace($replaceAlias, '', $tmp[$plugin][$key]['sef']);
- }
- else
- {
- $tmp[$plugin][$key]['sef'] = str_replace('{alias}', $alias, $tmp[$plugin][$key]['sef']);
- }
+ if (!empty($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)
+ {
+ $replaceAlias = array('{alias}\/', '{alias}/');
+ $tmp[$plugin][$key]['sef'] = str_replace($replaceAlias, '', $tmp[$plugin][$key]['sef']);
+ }
+ else
+ {
+ $tmp[$plugin][$key]['sef'] = str_replace('{alias}', $alias, $tmp[$plugin][$key]['sef']);
}
+ }
- preg_match_all('#{([a-z_]*)}#', $tmp[$plugin][$key]['sef'],$matches);
- $active = true;
+ preg_match_all('#{([a-z_]*)}#', $tmp[$plugin][$key]['sef'], $matches);
- foreach($matches[1] as $k=>$v) // check if a field value is missing, if so, revent to legacy url.
- {
- if(!isset($row[$v]))
- {
- self::getMessage()->addDebug("Missing value for ".$v." in ".$plugin."/e_url.php - '".$key."'");
- $active = false;
- break;
- }
- }
+ $active = true;
- if(empty($sefActive[$plugin])) // SEF disabled.
+ foreach ($matches[1] as $k => $v) // check if a field value is missing, if so, revert to legacy url.
+ {
+ if (!isset($row[$v]))
{
- self::getDebug()->log('SEF URL for '.$plugin.' disabled.');
+ self::getMessage()->addDebug("Missing value for " . $v . " in " . $plugin . "/e_url.php - '" . $key . "'");
$active = false;
+ break;
}
+ }
+ if (empty($sefActive[$plugin])) // SEF disabled.
+ {
+ self::getDebug()->log('SEF URL for ' . $plugin . ' disabled.');
+ $active = false;
+ }
+ if (deftrue('e_MOD_REWRITE') && ($active == true) && empty($options['legacy'])) // Search-Engine-Friendly URLs active.
+ {
+ $rawUrl = $tp->simpleParse($tmp[$plugin][$key]['sef'], $row);
- if(deftrue('e_MOD_REWRITE') && ($active == true) && empty($options['legacy'])) // Search-Engine-Friendly URLs active.
+ if ($options['mode'] === 'full')
{
- $rawUrl = $tp->simpleParse($tmp[$plugin][$key]['sef'], $row);
-
- if($options['mode'] === 'full')
- {
- $sefUrl = SITEURL.$rawUrl;
- }
- elseif($options['mode'] === 'raw')
- {
- $sefUrl = $rawUrl;
- }
- else
- {
- $sefUrl = e_HTTP.$rawUrl;
- }
-
- // Append the query.
- if (is_array($options['query']) && !empty($options['query'])) {
- $sefUrl .= (strpos($sefUrl, '?') !== FALSE ? '&' : '?') . self::httpBuildQuery($options['query']);
- }
-
- return $sefUrl . $options['fragment'];
+ $sefUrl = SITEURL . $rawUrl;
}
- else // Legacy URL.
+ elseif ($options['mode'] === 'raw')
{
+ $sefUrl = $rawUrl;
+ }
+ else
+ {
+ $sefUrl = e_HTTP . $rawUrl;
+ }
+ }
+ else // Legacy URL.
+ {
- $srch = array();
- $repl = array();
+ $srch = array();
+ $repl = array();
- foreach($matches[0] as $k=>$val)
- {
- $srch[] = '$'.($k+1);
- $repl[] = $val;
- }
+ foreach ($matches[0] as $k => $val)
+ {
+ $srch[] = '$' . ($k + 1);
+ $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 = $tp->replaceConstants($urlTemplate, $options['mode']);
- $legacyUrl = $tp->simpleParse($urlTemplate, $row);
+ $urlTemplate = str_replace($srch, $repl, $template);
+ $urlTemplate = $tp->replaceConstants($urlTemplate, $options['mode']);
+ $legacyUrl = $tp->simpleParse($urlTemplate, $row);
- $legacyUrl = preg_replace('/&?\$[\d]/i', "", $legacyUrl); // remove any left-over $x (including prefix of '&')
+ $legacyUrl = preg_replace('/&?\$[\d]/i', "", $legacyUrl); // remove any left-over $x (including prefix of '&')
- // 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()
- list($legacyUrl,$tmp) = explode("?",$legacyUrl);
+ // 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()
+ list($legacyUrl, $tmp) = explode("?", $legacyUrl);
- if(!empty($tmp))
+ if (!empty($tmp))
+ {
+ if (strpos($tmp, '=') === false)
+ {
+ // required for legacy urls of type "request.php?download.43"
+ // @see: issue #3275
+ $legacyUrl .= '?' . $tmp;
+ $options['query'] = null;
+ }
+ else
{
- if (strpos($tmp, '=') === false)
- {
- // required for legacy urls of type "request.php?download.43"
- // @see: issue #3275
- $legacyUrl .= '?' . $tmp;
- $options['query'] = null;
- }
- 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;
}
-
}
- }
-
- // Append the query.
- if (is_array($options['query']) && !empty($options['query']))
- {
- $legacyUrl .= (strpos($legacyUrl, '?') !== FALSE ? '&' : '?') . self::httpBuildQuery($options['query']);
}
-
- return $legacyUrl . $options['fragment'];
}
-
-
- }
-
- if(!empty($plugin))
- {
- self::getMessage()->addDebug("e_url.php in ".e_PLUGIN.$plugin." is missing the key: ".$key.". Or, you may need to scan your plugin directories to register e_url.php");
+ $sefUrl = $legacyUrl;
}
- return false;
- /*
- elseif(varset($tmp[$plugin][$key]['redirect']))
+ // Append the query.
+ if (is_array($options['query']) && !empty($options['query']))
{
- return self::getParser()->replaceConstants($tmp[$plugin][$key]['redirect'],'full');
+ $sefUrl .= (strpos($sefUrl, '?') !== FALSE ? '&' : '?') . self::httpBuildQuery($options['query']);
}
- return;
- */
-
+ return $sefUrl . $options['fragment'];
}
@@ -3643,7 +3619,7 @@ class e107
* rawurlencode() (instead of urlencode()) all query parameters.
* @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.
- * @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 = '')
{
@@ -3670,7 +3646,7 @@ class e107
}
}
- return implode('&', $params);
+ return implode('&', $params);
}