Beispiel #1
0
function wppa_convert_to_pretty($xuri)
{
    // Make local copy
    $uri = $xuri;
    // Only when permalink structure is not default
    if (!get_option('permalink_structure')) {
        return $uri;
    }
    // Not on front page, the redirection will fail...
    //	if ( is_front_page() ) {
    //		return $uri;
    //	}
    // Any querystring?
    if (strpos($uri, '?') === false) {
        return $uri;
    }
    // Not during search. Otherwise wppa_test_for_search('at_session_start') returns '';
    // and this will destroy use and display searchstrings in wppa_session_start()
    // Fix in 6.3.9
    if (strpos($uri, 'searchstring')) {
        return $uri;
    }
    // Re-order
    if (strpos($uri, '&') !== false) {
        $amps = true;
        $uri = str_replace('&', '&', $uri);
    } else {
        $amps = false;
    }
    $parts = explode('?', $uri);
    // If is_front_page(), redirection will fail
    // During ajax, is_front_page() returns always false
    // So we test on the existence of a page id ( a single / ) instead
    // If no slash found, its http://mysite.com/wppaspec/.... this will fail: return xuri
    $temp = $parts[0];
    // Befor the ?
    $temp = rtrim($temp, '/');
    // remove potential trailing slash
    $temp = str_replace('//', '', $temp);
    // Remove //
    if (strpos($temp, '/') === false) {
        return $xuri;
        // return original
    }
    $args = explode('&', $parts[1]);
    $order = array('occur', 'woccur', 'searchstring', 'supersearch', 'topten', 'lasten', 'comten', 'featen', 'lang', 'single', 'tag', 'photos-only', 'albums-only', 'rel', 'relcount', 'upldr', 'owner', 'rootsearch', 'slide', 'cover', 'page', 'album', 'photo', 'hilite', 'calendar', 'caldate', 'debug', 'inv');
    $uri = $parts[0] . '?';
    $first = true;
    foreach ($order as $item) {
        foreach (array_keys($args) as $argidx) {
            if (strpos($args[$argidx], $item) === 0 || strpos($args[$argidx], 'wppa-' . $item) === 0) {
                if (!$first) {
                    $uri .= '&';
                }
                $uri .= $args[$argidx];
                unset($args[$argidx]);
                $first = false;
            }
        }
    }
    foreach ($args as $arg) {
        // append unprocessed items
        $uri .= '&' . $arg;
    }
    if ($amps) {
        $uri = str_replace('&', '&', $uri);
    }
    // First filter for short query args
    $uri = wppa_trim_wppa_($uri);
    /*	if ( wppa_switch( 'use_short_qargs' ) ) {
    		$uri = str_replace( '?wppa-', '?', $uri );
    		$uri = str_replace( '&wppa-', '&', $uri );
    		$uri = str_replace( '&wppa-', '&', $uri );
    	}
    */
    // Now filter for album names in urls
    if (wppa_switch('use_album_names_in_urls')) {
        $apos = strpos($uri, 'album=');
        if ($apos !== false) {
            $start = $apos + '6';
            $end = strpos($uri, '&', $start);
        }
        $before = substr($uri, 0, $start);
        if ($end) {
            $albnum = substr($uri, $start, $end - $start);
            if (wppa_is_int($albnum) && $albnum > '0') {
                // Can convert single positive integer album ids only
                $after = substr($uri, $end);
                $albnam = stripslashes(wppa_get_album_item($albnum, 'name'));
                $albnam = wppa_encode_uri_component($albnam);
                $uri = $before . $albnam . $after;
            }
        } else {
            $albnum = substr($uri, $start);
            if (wppa_is_int($albnum) && $albnum > '0') {
                // Can convert single positive integer album ids only
                $albnam = stripslashes(wppa_get_album_item($albnum, 'name'));
                $albnam = wppa_encode_uri_component($albnam);
                $uri = $before . $albnam;
            }
        }
    }
    // Now filter for photo names in urls
    if (wppa_switch('use_photo_names_in_urls')) {
        $start = 0;
        $end = 0;
        $ppos = strpos($uri, 'photo=');
        if ($ppos !== false) {
            $start = $ppos + '6';
            $end = strpos($uri, '&', $start);
        }
        $before = substr($uri, 0, $start);
        if ($end) {
            $id = substr($uri, $start, $end - $start);
            if (wppa_is_int($id)) {
                // Can convert single integer photo ids only
                $after = substr($uri, $end);
                $pname = stripslashes(wppa_get_photo_item($id, 'name'));
                $pname = wppa_encode_uri_component($pname);
                $uri = $before . $pname . $after;
            }
        } else {
            $id = substr($uri, $start);
            if (wppa_is_int($id)) {
                // Can convert single integer photo ids only
                $pname = stripslashes(wppa_get_photo_item($id, 'name'));
                $pname = wppa_encode_uri_component($pname);
                $uri = $before . $pname;
            }
        }
    }
    // Now urlencode for funny chars
    $uri = str_replace(array(' ', '[', ']'), array('%20', '%5B', '%5D'), $uri);
    // Now the actual conversion to pretty links
    if (!wppa_switch('wppa_use_pretty_links')) {
        return $uri;
    }
    if (!get_option('permalink_structure')) {
        return $uri;
    }
    // Leaving the next line out gives 404 on pretty links under certain circumstances.
    // Can not reproduce and also do not understand why, and do not remember why i have put it in.
    //
    // nov 5 2014: changed add_action to test on redirection form init to pplugins_loaded.
    // also skipped if ( ! isset($_ENV["SCRIPT_URI"]) ) return; in redirect test. See wpp-non-admin.php. Seems to work now
    //	if ( ! isset($_ENV["SCRIPT_URI"]) ) return $uri;
    // Do some preprocessing
    $uri = str_replace('&', '&', $uri);
    $uri = str_replace('?wppa-', '?', $uri);
    $uri = str_replace('&wppa-', '&', $uri);
    // Test if querystring exists
    $qpos = stripos($uri, '?');
    if (!$qpos) {
        return $uri;
    }
    // Make sure we end without '/'
    $newuri = trim(substr($uri, 0, $qpos), '/');
    $newuri .= '/wppaspec';
    // explode querystring
    $args = explode('&', substr($uri, $qpos + 1));
    $support = array('album', 'photo', 'slide', 'cover', 'occur', 'woccur', 'page', 'searchstring', 'supersearch', 'topten', 'lasten', 'comten', 'featen', 'lang', 'single', 'tag', 'photos-only', 'albums-only', 'debug', 'rel', 'relcount', 'upldr', 'owner', 'rootsearch', 'hilite', 'calendar', 'caldate', 'inv');
    if (count($args) > 0) {
        foreach ($args as $arg) {
            $t = explode('=', $arg);
            $code = $t['0'];
            if (isset($t['1'])) {
                $val = $t['1'];
            } else {
                $val = false;
            }
            if (in_array($code, $support)) {
                $newuri .= '/';
                switch ($code) {
                    case 'album':
                        $newuri .= 'ab';
                        break;
                    case 'photo':
                        $newuri .= 'pt';
                        break;
                    case 'slide':
                        $newuri .= 'sd';
                        break;
                    case 'cover':
                        $newuri .= 'cv';
                        break;
                    case 'occur':
                        $newuri .= 'oc';
                        break;
                    case 'woccur':
                        $newuri .= 'wo';
                        break;
                    case 'page':
                        $newuri .= 'pg';
                        break;
                    case 'searchstring':
                        $newuri .= 'ss';
                        break;
                    case 'supersearch':
                        $newuri .= 'su';
                        break;
                    case 'topten':
                        $newuri .= 'tt';
                        break;
                    case 'lasten':
                        $newuri .= 'lt';
                        break;
                    case 'comten':
                        $newuri .= 'ct';
                        break;
                    case 'featen':
                        $newuri .= 'ft';
                        break;
                    case 'lang':
                        $newuri .= 'ln';
                        break;
                    case 'single':
                        $newuri .= 'si';
                        break;
                    case 'tag':
                        $newuri .= 'tg';
                        break;
                    case 'photos-only':
                        $newuri .= 'po';
                        break;
                    case 'albums-only':
                        $newuri .= 'ao';
                        break;
                    case 'debug':
                        $newuri .= 'db';
                        break;
                    case 'rel':
                        $newuri .= 'rl';
                        break;
                    case 'relcount':
                        $newuri .= 'rc';
                        break;
                    case 'upldr':
                        $newuri .= 'ul';
                        break;
                    case 'owner':
                        $newuri .= 'ow';
                        break;
                    case 'rootsearch':
                        $newuri .= 'rt';
                        break;
                    case 'hilite':
                        $newuri .= 'hl';
                        break;
                    case 'calendar':
                        $newuri .= 'ca';
                        break;
                    case 'caldate':
                        $newuri .= 'cd';
                        break;
                    case 'inv':
                        $newuri .= 'in';
                        break;
                }
                if ($val !== false) {
                    if ($code == 'searchstring') {
                        $newuri .= str_replace(' ', '_', $val);
                    } else {
                        $newuri .= $val;
                    }
                }
            }
        }
    }
    return $newuri;
}
function wppa_album_number_to_name_in_uri($uri)
{
    if (wppa_switch('use_album_names_in_urls')) {
        $apos = strpos($uri, 'album=');
        if ($apos === false) {
            return $uri;
        } else {
            $start = $apos + '6';
            $end = strpos($uri, '&', $start);
        }
        $before = substr($uri, 0, $start);
        if ($end) {
            $albnum = substr($uri, $start, $end - $start);
            if (wppa_is_int($albnum) && $albnum > '0') {
                // Can convert single positive integer album ids only
                $after = substr($uri, $end);
                $albnam = stripslashes(wppa_get_album_item($albnum, 'name'));
                $albnam = wppa_encode_uri_component($albnam);
                $uri = $before . $albnam . $after;
            }
        } else {
            $albnum = substr($uri, $start);
            if (wppa_is_int($albnum) && $albnum > '0') {
                // Can convert single positive integer album ids only
                $albnam = stripslashes(wppa_get_album_item($albnum, 'name'));
                $albnam = wppa_encode_uri_component($albnam);
                $uri = $before . $albnam;
            }
        }
    }
    return $uri;
}