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