Example #1
0
        } 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;
}
Example #3
0
    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);
    }