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; }