Пример #1
0
function checkUrlSingleParam($name)
{
    //Funkcjapobiera pojedyñczy parametr z adresu www
    $url_params = getUrlParams();
    if (isset($url_params[$name])) {
        return (int) $url_params[$name];
    } else {
        return false;
    }
}
function pmxsef_query($query)
{
    global $boardurl, $modSettings, $PortaMxSEF;
    if (!empty($modSettings['pmxportal_disabled']) || !empty($modSettings['pmxsef_disabled'])) {
        return;
    }
    $querystring = $querystart = $querysingle = array();
    if (!empty($query) && $query != '/') {
        // security .. check illegal url's
        $urlParts = parse_url($boardurl);
        if (preg_match_all('~(http|https|ftp|sftp)(\\:\\/\\/)|' . preg_quote($urlParts['host']) . '~i', $query, $match) > 0) {
            pmxsef_redir_perm($boardurl);
        }
        // cleanup the url
        $url_array = explode('/', trim(str_replace(array(';', '..'), '', $query), '/'));
        $act = array_intersect($url_array, $PortaMxSEF['allactions']);
        // check ignore requests
        $tmp = array_intersect(array_values($url_array), array_keys($PortaMxSEF['ignorerequests']));
        if (count($tmp) == 1 && $url_array[key($tmp) + 1] == $PortaMxSEF['ignorerequests'][current($tmp)]) {
            pmxsef_redir_perm($_SERVER['REQUEST_URL']);
        }
        // ignore action ?
        if (count($act) > 0 && in_array(current($act), $PortaMxSEF['ignoreactions'])) {
            pmxsef_redir_perm($_SERVER['REQUEST_URL']);
        }
        // check start token
        if (getUrlParams('start', true, $url_array, $querystart) == true) {
            preg_match('~^(category|article|pages|[0-9]+)$~', current($url_array), $match);
            if (!empty($match[1]) && count($url_array) >= 2) {
                // topic
                if (is_numeric($match[1])) {
                    $page = !empty($url_array[2]) && (is_numeric($url_array[2]) || substr($url_array[2], 0, 3) == 'msg' || substr($url_array[2], 0, 3) == 'new') ? $url_array[2] : '';
                    $querystring['topic'] = $match[1] . '.' . (empty($page) ? '0' : $page);
                    array_splice($url_array, 0, 2 + intval(!empty($page)));
                } elseif ($match[1] == 'pages') {
                    getPagesNameList();
                    if (!empty($PortaMxSEF['PagesNameList']['name'][$url_array[1]])) {
                        $querystring['spage'] = $PortaMxSEF['PagesNameList']['name'][$url_array[1]];
                    } else {
                        $querystring['pmxerror'] = 'page';
                    }
                    array_splice($url_array, 0, 2);
                } elseif ($match[1] == 'category') {
                    getCategoryNameList();
                    if (!empty($PortaMxSEF['CatNameList']['name'][$url_array[1]])) {
                        $querystring['cat'] = $PortaMxSEF['CatNameList']['name'][$url_array[1]];
                        array_splice($url_array, 0, 2);
                        // child category and not page request?
                        if (count($url_array) > 0 && current($url_array) != 'pgkey' && current($url_array) != 'article') {
                            if (!empty($PortaMxSEF['CatNameList']['name'][$url_array[0]])) {
                                $querystring['child'] = $PortaMxSEF['CatNameList']['name'][$url_array[0]];
                                array_splice($url_array, 0, 1);
                            } else {
                                $url_array = array();
                                $querystring['pmxerror'] = 'category';
                            }
                        }
                    } else {
                        $url_array = array();
                        $querystring['pmxerror'] = 'category';
                    }
                }
                // check article
                if (current($url_array) == 'article' && count($url_array) >= 2) {
                    getArticleNameList();
                    if (!empty($PortaMxSEF['ArtNameList']['name'][$url_array[1]])) {
                        $querystring['art'] = $PortaMxSEF['ArtNameList']['name'][$url_array[1]];
                    } else {
                        $querystring['pmxerror'] = 'article';
                    }
                    array_splice($url_array, 0, 2);
                }
            } elseif (!empty($url_array)) {
                getBoardNameList();
                if (in_array(current($url_array), $PortaMxSEF['BoardNameList'])) {
                    $page = isset($url_array[1]) && is_numeric($url_array[1]) ? $url_array[1] : '0';
                    $querystring['board'] = current(array_keys($PortaMxSEF['BoardNameList'], current($url_array))) . '.' . $page;
                    array_splice($url_array, 0, 1 + intval(!empty($page)));
                }
            }
            // check the actions
            if (in_array(current($url_array), $PortaMxSEF['allactions'])) {
                $querystring['action'] = $url_array[0];
                $tmp = array_shift($url_array);
                // alias action?
                if (in_array($querystring['action'], array_keys($PortaMxSEF['aliasactions']))) {
                    $querystring['action'] = $PortaMxSEF['aliasactions'][$querystring['action']];
                }
                // check for subaction
                $fnd = array_search('sa', $url_array);
                if ($fnd !== false && isset($url_array[$fnd + 1])) {
                    $querystring['sa'] = $url_array[$fnd + 1];
                    array_splice($url_array, $fnd, 2);
                } elseif ($querystring['action'] == 'theme') {
                    unset($querystring['action']);
                    array_unshift($url_array, $tmp);
                }
                // check for username
                @(list($name, $id) = explode('.', current($url_array)));
                if (is_numeric($id)) {
                    $querystring['u'] = $id == '0' ? $name : $id;
                    array_shift($url_array);
                }
            }
            // check single key token
            if (getSingleKeyParams($url_array, $querystring) == true) {
                // do the rest of url
                while (!empty($url_array)) {
                    $querystring[array_shift($url_array)] = array_shift($url_array);
                }
            }
        }
    }
    if (!empty($querystart)) {
        $querystring += $querystart;
    }
    return $querystring;
}