Exemplo n.º 1
0
function renderURL($_vars = '', $_request = '', $_store = false, $furl = null, $external = false)
{
    $RenderedURL = '';
    if (!$_request) {
        $_request = $_SERVER['REQUEST_URI'];
        $GetVars = $_GET;
        if (SystemSettings::is_hosted()) {
            $_request = preg_replace('@^/webasyst/@msi', '/', $_request);
        }
    } else {
        $GetVars = renderGetVars($_request);
    }
    if (!MOD_REWRITE_SUPPORT) {
        if (strpos($_request, 'index.php') === false && !$external) {
            if (strpos($_request, '?')) {
                $_request = str_replace('?', 'index.php?', $_request);
            } else {
                $_request .= 'index.php';
            }
        }
        if (preg_match("/^\\?categoryID=(\\d+)\\&category_slug=[a-z0-9_]+\$/i", $_vars, $matches)) {
            $_vars = '?categoryID=' . $matches[1];
        }
        if (preg_match("/^\\?ukey=product\\&productID=(\\d+)\\&product_slug=[a-z0-9_\\-]+\$/i", $_vars, $matches)) {
            $_vars = '?productID=' . $matches[1];
        }
    }
    $anchor = preg_match('@(#[^#]*)$@', $_request, $sp) ? $sp[1] : '';
    $anchor = preg_match('@(#[^#]*)$@', $_vars, $sp) ? $sp[1] : $anchor;
    /**
     * Set render mode
     */
    if (strpos($_vars, '?') !== false) {
        $Mode = URLRENDMODE_RESET;
        $_vars = substr($_vars, 1, strlen($_vars) - 1) . '&lang_iso2=';
    } else {
        $Mode = URLRENDMODE_MODIFY;
    }
    /**
     * trim first ampersand
     */
    if (strpos($_vars, '&') === 0) {
        $_vars = substr($_vars, 1, strlen($_vars) - 1);
    }
    /**
     * Render new get-tokens
     */
    $ReceivedTokens = array();
    $r_TokenStrs = explode('&', $_vars);
    $widgets_token = false;
    foreach ($r_TokenStrs as $TokenStr) {
        $r_Token = explode('=', $TokenStr, 2);
        if ($r_Token[0] == 'widgets') {
            $widgets_token = true;
        }
        if ($r_Token[0] == 'store_mode') {
            $mode_token = true;
        }
        if (isset($r_Token[1]) && strlen($r_Token[1])) {
            $ReceivedTokens[$r_Token[0]] = $r_Token[1];
            if ($Mode == URLRENDMODE_MODIFY) {
                $GetVars[$r_Token[0]] = $r_Token[1];
            }
        } else {
            switch ($Mode) {
                case URLRENDMODE_MODIFY:
                    if (isset($GetVars[$r_Token[0]])) {
                        unset($GetVars[$r_Token[0]]);
                    }
                    break;
                case URLRENDMODE_RESET:
                    if (isset($GetVars[$r_Token[0]]) && $r_Token[0] != 'product_slug' && $r_Token[0] != 'category_slug') {
                        $ReceivedTokens[$r_Token[0]] = $GetVars[$r_Token[0]];
                    }
                    break;
            }
        }
    }
    /**
     * Render URL
     */
    $newGetVars = array();
    switch ($Mode) {
        case URLRENDMODE_MODIFY:
            $newGetVars =& $GetVars;
            break;
        case URLRENDMODE_RESET:
            $newGetVars =& $ReceivedTokens;
            break;
    }
    if (!$mode_token) {
        $Register =& Register::getInstance();
        if ($store_mode = $Register->get('store_mode')) {
            $newGetVars['store_mode'] = $store_mode;
        }
    }
    if (!MOD_REWRITE_SUPPORT) {
        foreach (array('product_slug', 'category_slug') as $param) {
            if (isset($newGetVars[$param])) {
                unset($newGetVars[$param]);
            }
        }
    }
    if (!$widgets_token && count($newGetVars)) {
        $Register =& Register::getInstance();
        /*@var $Register Register*/
        if ($Register->get('widgets')) {
            $newGetVars['widgets'] = 1;
        }
    }
    if ($_store) {
        $_GET = $newGetVars;
    }
    if (class_exists('fURL') && $furl !== false) {
        fURL::convertGetToPath($_request, $newGetVars);
    }
    foreach ($newGetVars as $TokenName => $TokenValue) {
        $newGetVars[$TokenName] = $TokenName . '=' . $TokenValue;
    }
    $RenderedURL = implode('&', $newGetVars);
    if (strpos($_request, '?') !== false) {
        $RenderedURL = preg_replace('/\\?.*$/', '?' . $RenderedURL, $_request);
    } else {
        $RenderedURL = $_request . '?' . $RenderedURL;
    }
    $RenderedURL = preg_replace('@[\\?\\&]{1,2}$@', '', $RenderedURL);
    $RenderedURL = preg_replace('@^/{2,}@', '/', $RenderedURL);
    if (strlen($anchor) > 1) {
        $RenderedURL = preg_replace('@#[^#]*$@', '', $RenderedURL) . $anchor;
    }
    /**
     * Strore URL
     */
    if ($_store) {
        //		$_SERVER['REQUEST_URI'] = $RenderedURL;
    }
    return $RenderedURL;
}