} else { //cat $v = preg_replace('#/$#', '', mysql_escape_string($v)); $sql = "SELECT DISTINCT\r\n\t\t\t\t\t\tC.idcat, C.parent \r\n\t\t\t\t\tFROM\r\n\t\t\t\t\t\t" . $cms_db['cat'] . " C\r\n\t\t\t\t\t\tLEFT JOIN " . $cms_db['cat_lang'] . " CL USING(idcat)\r\n\t\t\t\t\tWHERE \r\n\t\t\t\t\t\tCL.idlang = '{$sf_rw_lang_id}'\r\n\t\t\t\t\t\tAND rewrite_alias = '" . $sf_rw_pieces['0'] . "'"; $db->query($sql); //if ($db->num_rows() == 1) { // $db->next_record(); // $idcat = $db->f('idcat'); //} else if ($db->num_rows() > 0) { $sf_rw_possibleidcats = array(); while ($db->next_record()) { array_push($sf_rw_possibleidcats, $db->f('idcat')); } foreach ($sf_rw_possibleidcats as $v) { if (rewriteIdcatIsUniqueToPath($v, $lang, $sf_rw_pieces)) { $idcat = $v; break; } } //echo $idcat; //print_r($sf_rw_possibleidcats);exit; } } } } else { //var for manipulate session later $_sf_rewrite_session = false; } // no page found if (!$idcat && !$idcatside && $_REQUEST['sf_rewrite'] && $cfg_client['url_rewrite'] == '2') {
function rewriteIdcatIsUniqueToPath($idcat, $idlang, $rewrite_stack) { global $db, $cms_db; // print_r($rewrite_stack);echo'<hr>'; if (count($rewrite_stack) < 1) { return false; } // echo' pass <hr>'; $sql = "SELECT \n\t\t\t\tC.idcat, C.parent \n\t\t\tFROM\n\t\t\t\t" . $cms_db['cat'] . " C\n\t\t\t\tLEFT JOIN " . $cms_db['cat_lang'] . " CL USING(idcat)\n\t\t\tWHERE \n\t\t\t\tCL.idlang = '" . $idlang . "'\n\t\t\t\tAND C.idcat = '{$idcat}'\n\t\t\t\tAND rewrite_alias = '" . array_shift($rewrite_stack) . "'"; $db->query($sql); if ($db->next_record()) { $parent = $db->f('parent'); //rewrite count stack ist to only accept the exact url if (($parent == 0 || $parent == '') && count($rewrite_stack) === 0) { return true; } return rewriteIdcatIsUniqueToPath($parent, $idlang, $rewrite_stack); } return false; }
protected function _getIdcatsideIdcatLangByRewriteUrl($db, $cfg_cms, $cfg_client, $cms_db, $client, $sf_lang_stack, $startlang) { $idcat = 0; $idcatside = 0; $lang = 0; $sf_rewrite_raw = mysql_escape_string($_REQUEST['sf_rewrite']); $sf_rw_pieces = explode('/', $sf_rewrite_raw); if (preg_match('/^[0-9abcdef]{32}$/', $sf_rw_pieces['0'])) { $_GET['sid'] = $_POST['sid'] = $_REQUEST['sid'] = $sf_rw_pieces['0']; } //echo " AA ".$lang; //test of unique side $sql = "SELECT\n\t\t\t\t\tCS.idcatside, CS.idcat, SL.idlang\n\t\t\t\tFROM\n\t\t\t\t\t" . $cms_db['cat_side'] . " CS\n\t\t\t\t\tLEFT JOIN " . $cms_db['side_lang'] . " SL USING(idside)\n\t\t\t\t\tLEFT JOIN " . $cms_db['clients_lang'] . " CL USING(idlang)\n\t\t\t\tWHERE\n\t\t\t\t\tCL.idclient = '{$client}'\n\t\t\t\t\tAND SL.rewrite_url = '" . preg_replace('#^[0-9abcdef]{32}/#', '', $sf_rewrite_raw) . "'\n\t\t\t\t\tAND SL.rewrite_use_automatic= '0'"; $db->query($sql); if ($db->next_record()) { //remember exception langswitch if (!is_numeric($_REQUEST['lang'])) { $lang = $db->f('idlang'); } else { $lang = (int) $_REQUEST['lang']; } $idcatside = $db->f('idcatside'); } else { //sessionlookup and lang $with_short_startlang = $cfg_client['url_langid_in_defaultlang'] != '1' ? true : false; if (preg_match('/^[0-9abcdef]{32}$/', $sf_rw_pieces['0'])) { $sf_rw_session = $sf_rw_pieces['0']; $sf_rw_lang = mysql_escape_string($sf_rw_pieces['1']); $sf_rw_pieces = array_slice($sf_rw_pieces, 2); } else { $sf_rw_session = ''; $sf_rw_lang = mysql_escape_string($sf_rw_pieces['0']); $sf_rw_pieces = array_slice($sf_rw_pieces, 1); } //check lang $lang_exists_in_url = false; foreach ($sf_lang_stack as $v) { //echo "{$v['rewrite_key']} == $sf_rw_lang <br>"; if ($v['rewrite_key'] == $sf_rw_lang) { $lang_exists_in_url = true; break; } } if (!$lang_exists_in_url) { //echo "IN"; array_unshift($sf_rw_pieces, $sf_rw_lang); $sf_rw_lang = $sf_lang_stack[$startlang]['rewrite_key']; } // print_r($sf_rw_pieces); //page or cat $sf_rw_count = count($sf_rw_pieces); $sf_rw_is_page = $sf_rw_pieces[$sf_rw_count - 1] != '' ? true : false; if (!$sf_rw_is_page) { array_pop($sf_rw_pieces); } $sf_rw_pieces = array_reverse($sf_rw_pieces); //figure out lang - not jump in, if user change language $sql = 'SELECT L.idlang FROM ' . $cms_db['lang'] . ' L LEFT JOIN ' . $cms_db['clients_lang'] . ' CL USING(idlang) WHERE CL.idclient = ' . $client . ' AND L.rewrite_key="' . $sf_rw_lang . '"'; $db->query($sql); $db->next_record(); $sf_rw_lang_id = $db->f('idlang'); if (!is_numeric($_REQUEST['lang'])) { $lang = $sf_rw_lang_id; } else { $lang = (int) $_REQUEST['lang']; } //echo " AA ".$lang; //get idcatside or idcat if ($sf_rw_is_page) { //echo "IN". $lang; //page $sf_rw_suffix = str_replace('.', '\\.', $cfg_client['url_rewrite_suffix']); $v = preg_replace('#' . $sf_rw_suffix . '$#', '', $sf_rw_pieces['0']); $sql = "SELECT DISTINCT\n\t\t\t\t\t\t\tCS.idcatside, CS.idcat\n\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t" . $cms_db['cat_side'] . " CS\n\t\t\t\t\t\t\tLEFT JOIN " . $cms_db['side_lang'] . " CL USING(idside)\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\tCL.idlang= '{$sf_rw_lang_id}'\n\t\t\t\t\t\t\tAND CL.rewrite_url = '" . $v . "'"; $db->query($sql); $db->num_rows(); //simple rewrite - allows shadow urls //if ($db->num_rows() == 1) { // $db->next_record(); // $idcatside = $db->f('idcatside'); //} else if ($db->num_rows() > 0) { while ($db->next_record()) { $sf_rw_possibleidcats[$db->f('idcatside')] = $db->f('idcat'); } array_shift($sf_rw_pieces); //print_r($sf_rw_pieces);echo '<br>'; foreach ($sf_rw_possibleidcats as $k => $v) { if (rewriteIdcatIsUniqueToPath($v, $sf_rw_lang_id, $sf_rw_pieces)) { //echo "IN"; $idcatside = $k; //$idcat = $v; break; } } } } else { //cat $v = preg_replace('#/$#', '', $v); $sql = "SELECT DISTINCT\n\t\t\t\t\t\t\tC.idcat, C.parent\n\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t" . $cms_db['cat'] . " C\n\t\t\t\t\t\t\tLEFT JOIN " . $cms_db['cat_lang'] . " CL USING(idcat)\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\tCL.idlang = '{$sf_rw_lang_id}'\n\t\t\t\t\t\t\tAND rewrite_alias = '" . $sf_rw_pieces['0'] . "'"; $db->query($sql); //if ($db->num_rows() == 1) { // $db->next_record(); // $idcat = $db->f('idcat'); //} else if ($db->num_rows() > 0) { $sf_rw_possibleidcats = array(); while ($db->next_record()) { array_push($sf_rw_possibleidcats, $db->f('idcat')); } foreach ($sf_rw_possibleidcats as $v) { if (rewriteIdcatIsUniqueToPath($v, $lang, $sf_rw_pieces)) { $idcat = $v; break; } } //echo $idcat; //print_r($sf_rw_possibleidcats);exit; } } } return array($idcatside, $idcat, $lang); }