Index: /trunk/wp-admin/admin.php
===================================================================
--- /trunk/wp-admin/admin.php (revision 3861)
+++ /trunk/wp-admin/admin.php (revision 3862)
@@ -10,5 +10,5 @@
require_once(ABSPATH . 'wp-admin/admin-functions.php');
require_once(ABSPATH . 'wp-admin/admin-db.php');
-require_once(ABSPATH . WPINC . '/registration-functions.php');
+require_once(ABSPATH . WPINC . '/registration.php');
auth_redirect();
Index: /trunk/wp-admin/index.php
===================================================================
--- /trunk/wp-admin/index.php (revision 3861)
+++ /trunk/wp-admin/index.php (revision 3862)
@@ -3,5 +3,5 @@
$title = __('Dashboard');
require_once('admin-header.php');
-require_once (ABSPATH . WPINC . '/rss-functions.php');
+require_once (ABSPATH . WPINC . '/rss.php');
$today = current_time('mysql', 1);
Index: /trunk/wp-admin/users.php
===================================================================
--- /trunk/wp-admin/users.php (revision 3861)
+++ /trunk/wp-admin/users.php (revision 3862)
@@ -1,5 +1,5 @@
+ if (get_class($object) == strtolower($class)) {
+ return true;
+ } else {
+ return is_subclass_of($object, $class);
+ }
+ }
+}
+
+if (!function_exists('ob_clean')) {
+ function ob_clean() {
+ // by Aidan Lister
+ if (@ob_end_clean()) {
+ return ob_start();
+ }
+ return false;
+ }
+}
+
+
+/* Added in PHP 4.3.0 */
+
+function printr($var, $do_not_echo = false) {
+ // from php.net/print_r user contributed notes
+ ob_start();
+ print_r($var);
+ $code = htmlentities(ob_get_contents());
+ ob_clean();
+ if (!$do_not_echo) {
+ echo "$code
";
+ }
+ ob_end_clean();
+ return $code;
+}
+
+/* compatibility with PHP versions older than 4.3 */
+if ( !function_exists('file_get_contents') ) {
+ function file_get_contents( $file ) {
+ $file = file($file);
+ return !$file ? false : implode('', $file);
+ }
+}
+
+if (!defined('CASE_LOWER')) {
+ define('CASE_LOWER', 0);
+}
+
+if (!defined('CASE_UPPER')) {
+ define('CASE_UPPER', 1);
+}
+
+
+/**
+ * Replace array_change_key_case()
+ *
+ * @category PHP
+ * @package PHP_Compat
+ * @link http://php.net/function.array_change_key_case
+ * @author Stephan Schmidt
+ * @author Aidan Lister
+ * @version $Revision$
+ * @since PHP 4.2.0
+ * @require PHP 4.0.0 (user_error)
+ */
+if (!function_exists('array_change_key_case')) {
+ function array_change_key_case($input, $case = CASE_LOWER)
+ {
+ if (!is_array($input)) {
+ user_error('array_change_key_case(): The argument should be an array',
+ E_USER_WARNING);
+ return false;
+ }
+
+ $output = array ();
+ $keys = array_keys($input);
+ $casefunc = ($case == CASE_LOWER) ? 'strtolower' : 'strtoupper';
+
+ foreach ($keys as $key) {
+ $output[$casefunc($key)] = $input[$key];
+ }
+
+ return $output;
+ }
+}
+
+// From php.net
+if(!function_exists('http_build_query')) {
+ function http_build_query( $formdata, $numeric_prefix = null, $key = null ) {
+ $res = array();
+ foreach ((array)$formdata as $k=>$v) {
+ $tmp_key = urlencode(is_int($k) ? $numeric_prefix.$k : $k);
+ if ($key) $tmp_key = $key.'['.$tmp_key.']';
+ $res[] = ( ( is_array($v) || is_object($v) ) ? http_build_query($v, null, $tmp_key) : $tmp_key."=".urlencode($v) );
+ }
+ $separator = ini_get('arg_separator.output');
+ return implode($separator, $res);
+ }
+}
+?>
Index: unk/wp-includes/feed-functions.php
===================================================================
--- /trunk/wp-includes/feed-functions.php (revision 3861)
+++ (revision )
@@ -1,164 +1,0 @@
- $cut) {
- $k = $cut;
- $use_dotdotdot = 1;
- } else {
- $k = count($blah);
- $use_dotdotdot = 0;
- }
- for ($i=0; $i<$k; $i++) {
- $excerpt .= $blah[$i].' ';
- }
- $excerpt .= ($use_dotdotdot) ? '...' : '';
- $content = $excerpt;
- }
- $content = str_replace(']]>', ']]>', $content);
- echo $content;
-}
-
-function the_excerpt_rss() {
- $output = get_the_excerpt(true);
- echo apply_filters('the_excerpt_rss', $output);
-}
-
-function permalink_single_rss($file = '') {
- echo get_permalink();
-}
-
-function comment_link() {
- echo get_comment_link();
-}
-
-function get_comment_author_rss() {
- return apply_filters('comment_author_rss', get_comment_author() );
-}
-function comment_author_rss() {
- echo get_comment_author_rss();
-}
-
-function comment_text_rss() {
- $comment_text = get_comment_text();
- $comment_text = apply_filters('comment_text_rss', $comment_text);
- echo $comment_text;
-}
-
-function comments_rss_link($link_text = 'Comments RSS', $commentsrssfilename = '') {
- $url = comments_rss($commentsrssfilename);
- echo "$link_text";
-}
-
-function comments_rss($commentsrssfilename = '') {
- global $id;
-
- if ('' != get_settings('permalink_structure'))
- $url = trailingslashit( get_permalink() ) . 'feed/';
- else
- $url = get_settings('home') . "/$commentsrssfilename?feed=rss2&p=$id";
-
- return apply_filters('post_comments_feed_link', $url);
-}
-
-function get_author_rss_link($echo = false, $author_id, $author_nicename) {
- $auth_ID = $author_id;
- $permalink_structure = get_settings('permalink_structure');
-
- if ('' == $permalink_structure) {
- $link = get_settings('home') . '?feed=rss2&author=' . $author_id;
- } else {
- $link = get_author_link(0, $author_id, $author_nicename);
- $link = $link . "feed/";
- }
-
- $link = apply_filters('author_feed_link', $link);
-
- if ($echo) echo $link;
- return $link;
-}
-
-function get_category_rss_link($echo = false, $cat_ID, $category_nicename) {
- $permalink_structure = get_settings('permalink_structure');
-
- if ('' == $permalink_structure) {
- $link = get_settings('home') . '?feed=rss2&cat=' . $cat_ID;
- } else {
- $link = get_category_link($cat_ID);
- $link = $link . "feed/";
- }
-
- $link = apply_filters('category_feed_link', $link);
-
- if ($echo) echo $link;
- return $link;
-}
-
-function the_category_rss($type = 'rss') {
- $categories = get_the_category();
- $the_list = '';
- foreach ($categories as $category) {
- $category->cat_name = convert_chars($category->cat_name);
- if ('rdf' == $type) {
- $the_list .= "\n\t$category->cat_name";
- } else {
- $the_list .= "\n\t$category->cat_name";
- }
- }
- echo apply_filters('the_category_rss', $the_list, $type);
-}
-
-function rss_enclosure() {
- global $id, $post;
- if (!empty($post->post_password) && ($_COOKIE['wp-postpass_'.COOKIEHASH] != $post->post_password)) return;
-
- $custom_fields = get_post_custom();
- if( is_array( $custom_fields ) ) {
- while( list( $key, $val ) = each( $custom_fields ) ) {
- if( $key == 'enclosure' ) {
- if (is_array($val)) {
- foreach($val as $enc) {
- $enclosure = split( "\n", $enc );
- print "\n";
- }
- }
- }
- }
- }
-}
-
-?>
Index: /trunk/wp-includes/feed.php
===================================================================
--- /trunk/wp-includes/feed.php (revision 3862)
+++ /trunk/wp-includes/feed.php (revision 3862)
@@ -0,0 +1,164 @@
+ $cut) {
+ $k = $cut;
+ $use_dotdotdot = 1;
+ } else {
+ $k = count($blah);
+ $use_dotdotdot = 0;
+ }
+ for ($i=0; $i<$k; $i++) {
+ $excerpt .= $blah[$i].' ';
+ }
+ $excerpt .= ($use_dotdotdot) ? '...' : '';
+ $content = $excerpt;
+ }
+ $content = str_replace(']]>', ']]>', $content);
+ echo $content;
+}
+
+function the_excerpt_rss() {
+ $output = get_the_excerpt(true);
+ echo apply_filters('the_excerpt_rss', $output);
+}
+
+function permalink_single_rss($file = '') {
+ echo get_permalink();
+}
+
+function comment_link() {
+ echo get_comment_link();
+}
+
+function get_comment_author_rss() {
+ return apply_filters('comment_author_rss', get_comment_author() );
+}
+function comment_author_rss() {
+ echo get_comment_author_rss();
+}
+
+function comment_text_rss() {
+ $comment_text = get_comment_text();
+ $comment_text = apply_filters('comment_text_rss', $comment_text);
+ echo $comment_text;
+}
+
+function comments_rss_link($link_text = 'Comments RSS', $commentsrssfilename = '') {
+ $url = comments_rss($commentsrssfilename);
+ echo "$link_text";
+}
+
+function comments_rss($commentsrssfilename = '') {
+ global $id;
+
+ if ('' != get_settings('permalink_structure'))
+ $url = trailingslashit( get_permalink() ) . 'feed/';
+ else
+ $url = get_settings('home') . "/$commentsrssfilename?feed=rss2&p=$id";
+
+ return apply_filters('post_comments_feed_link', $url);
+}
+
+function get_author_rss_link($echo = false, $author_id, $author_nicename) {
+ $auth_ID = $author_id;
+ $permalink_structure = get_settings('permalink_structure');
+
+ if ('' == $permalink_structure) {
+ $link = get_settings('home') . '?feed=rss2&author=' . $author_id;
+ } else {
+ $link = get_author_link(0, $author_id, $author_nicename);
+ $link = $link . "feed/";
+ }
+
+ $link = apply_filters('author_feed_link', $link);
+
+ if ($echo) echo $link;
+ return $link;
+}
+
+function get_category_rss_link($echo = false, $cat_ID, $category_nicename) {
+ $permalink_structure = get_settings('permalink_structure');
+
+ if ('' == $permalink_structure) {
+ $link = get_settings('home') . '?feed=rss2&cat=' . $cat_ID;
+ } else {
+ $link = get_category_link($cat_ID);
+ $link = $link . "feed/";
+ }
+
+ $link = apply_filters('category_feed_link', $link);
+
+ if ($echo) echo $link;
+ return $link;
+}
+
+function the_category_rss($type = 'rss') {
+ $categories = get_the_category();
+ $the_list = '';
+ foreach ($categories as $category) {
+ $category->cat_name = convert_chars($category->cat_name);
+ if ('rdf' == $type) {
+ $the_list .= "\n\t$category->cat_name";
+ } else {
+ $the_list .= "\n\t$category->cat_name";
+ }
+ }
+ echo apply_filters('the_category_rss', $the_list, $type);
+}
+
+function rss_enclosure() {
+ global $id, $post;
+ if (!empty($post->post_password) && ($_COOKIE['wp-postpass_'.COOKIEHASH] != $post->post_password)) return;
+
+ $custom_fields = get_post_custom();
+ if( is_array( $custom_fields ) ) {
+ while( list( $key, $val ) = each( $custom_fields ) ) {
+ if( $key == 'enclosure' ) {
+ if (is_array($val)) {
+ foreach($val as $enc) {
+ $enclosure = split( "\n", $enc );
+ print "\n";
+ }
+ }
+ }
+ }
+ }
+}
+
+?>
Index: /trunk/wp-includes/formatting.php
===================================================================
--- /trunk/wp-includes/formatting.php (revision 3862)
+++ /trunk/wp-includes/formatting.php (revision 3862)
@@ -0,0 +1,1049 @@
+)/Us", $text, -1, PREG_SPLIT_DELIM_CAPTURE);
+ $stop = count($textarr); $next = true; // loop stuff
+ for ($i = 0; $i < $stop; $i++) {
+ $curl = $textarr[$i];
+
+ if (isset($curl{0}) && '<' != $curl{0} && $next) { // If it's not a tag
+ $curl = str_replace('---', '—', $curl);
+ $curl = str_replace(' -- ', ' — ', $curl);
+ $curl = str_replace('--', '–', $curl);
+ $curl = str_replace('xn–', 'xn--', $curl);
+ $curl = str_replace('...', '…', $curl);
+ $curl = str_replace('``', '“', $curl);
+
+ // This is a hack, look at this more later. It works pretty well though.
+ $cockney = array("'tain't","'twere","'twas","'tis","'twill","'til","'bout","'nuff","'round","'cause");
+ $cockneyreplace = array("’tain’t","’twere","’twas","’tis","’twill","’til","’bout","’nuff","’round","’cause");
+ $curl = str_replace($cockney, $cockneyreplace, $curl);
+
+ $curl = preg_replace("/'s/", '’s', $curl);
+ $curl = preg_replace("/'(\d\d(?:’|')?s)/", "’$1", $curl);
+ $curl = preg_replace('/(\s|\A|")\'/', '$1‘', $curl);
+ $curl = preg_replace('/(\d+)"/', '$1″', $curl);
+ $curl = preg_replace("/(\d+)'/", '$1′', $curl);
+ $curl = preg_replace("/(\S)'([^'\s])/", "$1’$2", $curl);
+ $curl = preg_replace('/(\s|\A)"(?!\s)/', '$1“$2', $curl);
+ $curl = preg_replace('/"(\s|\S|\Z)/', '”$1', $curl);
+ $curl = preg_replace("/'([\s.]|\Z)/", '’$1', $curl);
+ $curl = preg_replace("/ \(tm\)/i", ' ™', $curl);
+ $curl = str_replace("''", '”', $curl);
+
+ $curl = preg_replace('/(\d+)x(\d+)/', "$1×$2", $curl);
+
+ } elseif (strstr($curl, '
', '', $text);
+ $text = str_replace('', "\n", $text);
+ $text = str_replace('
', '', $text);
+ return $text;
+}
+
+function wpautop($pee, $br = 1) {
+ $pee = $pee . "\n"; // just to make things a little easier, pad the end
+ $pee = preg_replace('|
\s*
|', "\n\n", $pee);
+ // Space things out a little
+ $pee = preg_replace('!(<(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6])[^>]*>)!', "\n$1", $pee);
+ $pee = preg_replace('!((?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6])>)!', "$1\n\n", $pee);
+ $pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines
+ $pee = preg_replace("/\n\n+/", "\n\n", $pee); // take care of duplicates
+ $pee = preg_replace('/\n?(.+?)(?:\n\s*\n|\z)/s', "$1
\n", $pee); // make paragraphs, including one at the end
+ $pee = preg_replace('|\s*?
|', '', $pee); // under certain strange conditions it could create a P of entirely whitespace
+ $pee = preg_replace('!\s*(?(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|hr|pre|select|form|blockquote|address|math|p|h[1-6])[^>]*>)\s*
!', "$1", $pee); // don't pee all over a tag
+ $pee = preg_replace("|(
|", "$1", $pee); // problem with nested lists
+ $pee = preg_replace('|]*)>|i', "", $pee);
+ $pee = str_replace('
', '', $pee);
+ $pee = preg_replace('!\s*(?(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|hr|pre|select|form|blockquote|address|math|p|h[1-6])[^>]*>)!', "$1", $pee);
+ $pee = preg_replace('!(?(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6])[^>]*>)\s*
!', "$1", $pee);
+ if ($br) $pee = preg_replace('|(?)\s*\n|', "
\n", $pee); // optionally make line breaks
+ $pee = preg_replace('!(?(?:table|thead|tfoot|caption|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6])[^>]*>)\s*
!', "$1", $pee);
+ $pee = preg_replace('!
(\s*?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)>)!', '$1', $pee);
+ $pee = preg_replace('!()(.*?)!ise', " stripslashes('$1') . stripslashes(clean_pre('$2')) . '' ", $pee);
+
+ return $pee;
+}
+
+
+function seems_utf8($Str) { # by bmorel at ssi dot fr
+ for ($i=0; $i', '>', $text);
+ if ( 'double' === $quotes ) {
+ $text = str_replace('"', '"', $text);
+ } elseif ( 'single' === $quotes ) {
+ $text = str_replace("'", ''', $text);
+ } elseif ( $quotes ) {
+ $text = str_replace('"', '"', $text);
+ $text = str_replace("'", ''', $text);
+ }
+ return $text;
+}
+
+function utf8_uri_encode( $utf8_string ) {
+ $unicode = '';
+ $values = array();
+ $num_octets = 1;
+
+ for ($i = 0; $i < strlen( $utf8_string ); $i++ ) {
+
+ $value = ord( $utf8_string[ $i ] );
+
+ if ( $value < 128 ) {
+ $unicode .= chr($value);
+ } else {
+ if ( count( $values ) == 0 ) $num_octets = ( $value < 224 ) ? 2 : 3;
+
+ $values[] = $value;
+
+ if ( count( $values ) == $num_octets ) {
+ if ($num_octets == 3) {
+ $unicode .= '%' . dechex($values[0]) . '%' . dechex($values[1]) . '%' . dechex($values[2]);
+ } else {
+ $unicode .= '%' . dechex($values[0]) . '%' . dechex($values[1]);
+ }
+
+ $values = array();
+ $num_octets = 1;
+ }
+ }
+ }
+
+ return $unicode;
+}
+
+function remove_accents($string) {
+ if (seems_utf8($string)) {
+ $chars = array(
+ // Decompositions for Latin-1 Supplement
+ chr(195).chr(128) => 'A', chr(195).chr(129) => 'A',
+ chr(195).chr(130) => 'A', chr(195).chr(131) => 'A',
+ chr(195).chr(132) => 'A', chr(195).chr(133) => 'A',
+ chr(195).chr(135) => 'C', chr(195).chr(136) => 'E',
+ chr(195).chr(137) => 'E', chr(195).chr(138) => 'E',
+ chr(195).chr(139) => 'E', chr(195).chr(140) => 'I',
+ chr(195).chr(141) => 'I', chr(195).chr(142) => 'I',
+ chr(195).chr(143) => 'I', chr(195).chr(145) => 'N',
+ chr(195).chr(146) => 'O', chr(195).chr(147) => 'O',
+ chr(195).chr(148) => 'O', chr(195).chr(149) => 'O',
+ chr(195).chr(150) => 'O', chr(195).chr(153) => 'U',
+ chr(195).chr(154) => 'U', chr(195).chr(155) => 'U',
+ chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y',
+ chr(195).chr(159) => 's', chr(195).chr(160) => 'a',
+ chr(195).chr(161) => 'a', chr(195).chr(162) => 'a',
+ chr(195).chr(163) => 'a', chr(195).chr(164) => 'a',
+ chr(195).chr(165) => 'a', chr(195).chr(167) => 'c',
+ chr(195).chr(168) => 'e', chr(195).chr(169) => 'e',
+ chr(195).chr(170) => 'e', chr(195).chr(171) => 'e',
+ chr(195).chr(172) => 'i', chr(195).chr(173) => 'i',
+ chr(195).chr(174) => 'i', chr(195).chr(175) => 'i',
+ chr(195).chr(177) => 'n', chr(195).chr(178) => 'o',
+ chr(195).chr(179) => 'o', chr(195).chr(180) => 'o',
+ chr(195).chr(181) => 'o', chr(195).chr(182) => 'o',
+ chr(195).chr(182) => 'o', chr(195).chr(185) => 'u',
+ chr(195).chr(186) => 'u', chr(195).chr(187) => 'u',
+ chr(195).chr(188) => 'u', chr(195).chr(189) => 'y',
+ chr(195).chr(191) => 'y',
+ // Decompositions for Latin Extended-A
+ chr(196).chr(128) => 'A', chr(196).chr(129) => 'a',
+ chr(196).chr(130) => 'A', chr(196).chr(131) => 'a',
+ chr(196).chr(132) => 'A', chr(196).chr(133) => 'a',
+ chr(196).chr(134) => 'C', chr(196).chr(135) => 'c',
+ chr(196).chr(136) => 'C', chr(196).chr(137) => 'c',
+ chr(196).chr(138) => 'C', chr(196).chr(139) => 'c',
+ chr(196).chr(140) => 'C', chr(196).chr(141) => 'c',
+ chr(196).chr(142) => 'D', chr(196).chr(143) => 'd',
+ chr(196).chr(144) => 'D', chr(196).chr(145) => 'd',
+ chr(196).chr(146) => 'E', chr(196).chr(147) => 'e',
+ chr(196).chr(148) => 'E', chr(196).chr(149) => 'e',
+ chr(196).chr(150) => 'E', chr(196).chr(151) => 'e',
+ chr(196).chr(152) => 'E', chr(196).chr(153) => 'e',
+ chr(196).chr(154) => 'E', chr(196).chr(155) => 'e',
+ chr(196).chr(156) => 'G', chr(196).chr(157) => 'g',
+ chr(196).chr(158) => 'G', chr(196).chr(159) => 'g',
+ chr(196).chr(160) => 'G', chr(196).chr(161) => 'g',
+ chr(196).chr(162) => 'G', chr(196).chr(163) => 'g',
+ chr(196).chr(164) => 'H', chr(196).chr(165) => 'h',
+ chr(196).chr(166) => 'H', chr(196).chr(167) => 'h',
+ chr(196).chr(168) => 'I', chr(196).chr(169) => 'i',
+ chr(196).chr(170) => 'I', chr(196).chr(171) => 'i',
+ chr(196).chr(172) => 'I', chr(196).chr(173) => 'i',
+ chr(196).chr(174) => 'I', chr(196).chr(175) => 'i',
+ chr(196).chr(176) => 'I', chr(196).chr(177) => 'i',
+ chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij',
+ chr(196).chr(180) => 'J', chr(196).chr(181) => 'j',
+ chr(196).chr(182) => 'K', chr(196).chr(183) => 'k',
+ chr(196).chr(184) => 'k', chr(196).chr(185) => 'L',
+ chr(196).chr(186) => 'l', chr(196).chr(187) => 'L',
+ chr(196).chr(188) => 'l', chr(196).chr(189) => 'L',
+ chr(196).chr(190) => 'l', chr(196).chr(191) => 'L',
+ chr(197).chr(128) => 'l', chr(197).chr(129) => 'L',
+ chr(197).chr(130) => 'l', chr(197).chr(131) => 'N',
+ chr(197).chr(132) => 'n', chr(197).chr(133) => 'N',
+ chr(197).chr(134) => 'n', chr(197).chr(135) => 'N',
+ chr(197).chr(136) => 'n', chr(197).chr(137) => 'N',
+ chr(197).chr(138) => 'n', chr(197).chr(139) => 'N',
+ chr(197).chr(140) => 'O', chr(197).chr(141) => 'o',
+ chr(197).chr(142) => 'O', chr(197).chr(143) => 'o',
+ chr(197).chr(144) => 'O', chr(197).chr(145) => 'o',
+ chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe',
+ chr(197).chr(148) => 'R',chr(197).chr(149) => 'r',
+ chr(197).chr(150) => 'R',chr(197).chr(151) => 'r',
+ chr(197).chr(152) => 'R',chr(197).chr(153) => 'r',
+ chr(197).chr(154) => 'S',chr(197).chr(155) => 's',
+ chr(197).chr(156) => 'S',chr(197).chr(157) => 's',
+ chr(197).chr(158) => 'S',chr(197).chr(159) => 's',
+ chr(197).chr(160) => 'S', chr(197).chr(161) => 's',
+ chr(197).chr(162) => 'T', chr(197).chr(163) => 't',
+ chr(197).chr(164) => 'T', chr(197).chr(165) => 't',
+ chr(197).chr(166) => 'T', chr(197).chr(167) => 't',
+ chr(197).chr(168) => 'U', chr(197).chr(169) => 'u',
+ chr(197).chr(170) => 'U', chr(197).chr(171) => 'u',
+ chr(197).chr(172) => 'U', chr(197).chr(173) => 'u',
+ chr(197).chr(174) => 'U', chr(197).chr(175) => 'u',
+ chr(197).chr(176) => 'U', chr(197).chr(177) => 'u',
+ chr(197).chr(178) => 'U', chr(197).chr(179) => 'u',
+ chr(197).chr(180) => 'W', chr(197).chr(181) => 'w',
+ chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y',
+ chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z',
+ chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z',
+ chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z',
+ chr(197).chr(190) => 'z', chr(197).chr(191) => 's',
+ // Euro Sign
+ chr(226).chr(130).chr(172) => 'E');
+
+ $string = strtr($string, $chars);
+ } else {
+ // Assume ISO-8859-1 if not UTF-8
+ $chars['in'] = chr(128).chr(131).chr(138).chr(142).chr(154).chr(158)
+ .chr(159).chr(162).chr(165).chr(181).chr(192).chr(193).chr(194)
+ .chr(195).chr(196).chr(197).chr(199).chr(200).chr(201).chr(202)
+ .chr(203).chr(204).chr(205).chr(206).chr(207).chr(209).chr(210)
+ .chr(211).chr(212).chr(213).chr(214).chr(216).chr(217).chr(218)
+ .chr(219).chr(220).chr(221).chr(224).chr(225).chr(226).chr(227)
+ .chr(228).chr(229).chr(231).chr(232).chr(233).chr(234).chr(235)
+ .chr(236).chr(237).chr(238).chr(239).chr(241).chr(242).chr(243)
+ .chr(244).chr(245).chr(246).chr(248).chr(249).chr(250).chr(251)
+ .chr(252).chr(253).chr(255);
+
+ $chars['out'] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy";
+
+ $string = strtr($string, $chars['in'], $chars['out']);
+ $double_chars['in'] = array(chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254));
+ $double_chars['out'] = array('OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th');
+ $string = str_replace($double_chars['in'], $double_chars['out'], $string);
+ }
+
+ return $string;
+}
+
+function sanitize_user( $username, $strict = false ) {
+ $raw_username = $username;
+ $username = strip_tags($username);
+ // Kill octets
+ $username = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '', $username);
+ $username = preg_replace('/&.+?;/', '', $username); // Kill entities
+
+ // If strict, reduce to ASCII for max portability.
+ if ( $strict )
+ $username = preg_replace('|[^a-z0-9 _.\-@]|i', '', $username);
+
+ return apply_filters('sanitize_user', $username, $raw_username, $strict);
+}
+
+function sanitize_title($title, $fallback_title = '') {
+ $title = strip_tags($title);
+ $title = apply_filters('sanitize_title', $title);
+
+ if (empty($title)) {
+ $title = $fallback_title;
+ }
+
+ return $title;
+}
+
+function sanitize_title_with_dashes($title) {
+ $title = strip_tags($title);
+ // Preserve escaped octets.
+ $title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title);
+ // Remove percent signs that are not part of an octet.
+ $title = str_replace('%', '', $title);
+ // Restore octets.
+ $title = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title);
+
+ $title = remove_accents($title);
+ if (seems_utf8($title)) {
+ if (function_exists('mb_strtolower')) {
+ $title = mb_strtolower($title, 'UTF-8');
+ }
+ $title = utf8_uri_encode($title);
+ }
+
+ $title = strtolower($title);
+ $title = preg_replace('/&.+?;/', '', $title); // kill entities
+ $title = preg_replace('/[^%a-z0-9 _-]/', '', $title);
+ $title = preg_replace('/\s+/', '-', $title);
+ $title = preg_replace('|-+|', '-', $title);
+ $title = trim($title, '-');
+
+ return $title;
+}
+
+function convert_chars($content, $flag = 'obsolete') {
+ // Translation of invalid Unicode references range to valid range
+ $wp_htmltranswinuni = array(
+ '' => '€', // the Euro sign
+ '' => '',
+ '' => '‚', // these are Windows CP1252 specific characters
+ '' => 'ƒ', // they would look weird on non-Windows browsers
+ '' => '„',
+ '
' => '…',
+ '' => '†',
+ '' => '‡',
+ '' => 'ˆ',
+ '' => '‰',
+ '' => 'Š',
+ '' => '‹',
+ '' => 'Œ',
+ '' => '',
+ '' => 'ž',
+ '' => '',
+ '' => '',
+ '' => '‘',
+ '' => '’',
+ '' => '“',
+ '' => '”',
+ '' => '•',
+ '' => '–',
+ '' => '—',
+ '' => '˜',
+ '' => '™',
+ '' => 'š',
+ '' => '›',
+ '' => 'œ',
+ '' => '',
+ '' => '',
+ '' => 'Ÿ'
+ );
+
+ // Remove metadata tags
+ $content = preg_replace('/(.+?)<\/title>/','',$content);
+ $content = preg_replace('/(.+?)<\/category>/','',$content);
+
+ // Converts lone & characters into & (a.k.a. &)
+ $content = preg_replace('/&([^#])(?![a-z1-4]{1,8};)/i', '&$1', $content);
+
+ // Fix Word pasting
+ $content = strtr($content, $wp_htmltranswinuni);
+
+ // Just a little XHTML help
+ $content = str_replace('
', '
', $content);
+ $content = str_replace('
', '
', $content);
+
+ return $content;
+}
+
+function funky_javascript_fix($text) {
+ // Fixes for browsers' javascript bugs
+ global $is_macIE, $is_winIE;
+
+ if ( $is_winIE || $is_macIE )
+ $text = preg_replace("/\%u([0-9A-F]{4,4})/e", "''.base_convert('\\1',16,10).';'", $text);
+
+ return $text;
+}
+
+/*
+ balanceTags
+
+ Balances Tags of string using a modified stack.
+
+ @param text Text to be balanced
+ @return Returns balanced text
+ @author Leonard Lin (leonard@acm.org)
+ @version v1.1
+ @date November 4, 2001
+ @license GPL v2.0
+ @notes
+ @changelog
+ --- Modified by Scott Reilly (coffee2code) 02 Aug 2004
+ 1.2 ***TODO*** Make better - change loop condition to $text
+ 1.1 Fixed handling of append/stack pop order of end text
+ Added Cleaning Hooks
+ 1.0 First Version
+*/
+function balanceTags($text, $is_comment = 0, $force = false) {
+
+ if ( !$force && get_option('use_balanceTags') == 0 )
+ return $text;
+
+ $tagstack = array(); $stacksize = 0; $tagqueue = ''; $newtext = '';
+
+ # WP bug fix for comments - in case you REALLY meant to type '< !--'
+ $text = str_replace('< !--', '< !--', $text);
+ # WP bug fix for LOVE <3 (and other situations with '<' before a number)
+ $text = preg_replace('#<([0-9]{1})#', '<$1', $text);
+
+ while (preg_match("/<(\/?\w*)\s*([^>]*)>/",$text,$regex)) {
+ $newtext .= $tagqueue;
+
+ $i = strpos($text,$regex[0]);
+ $l = strlen($regex[0]);
+
+ // clear the shifter
+ $tagqueue = '';
+ // Pop or Push
+ if ($regex[1][0] == "/") { // End Tag
+ $tag = strtolower(substr($regex[1],1));
+ // if too many closing tags
+ if($stacksize <= 0) {
+ $tag = '';
+ //or close to be safe $tag = '/' . $tag;
+ }
+ // if stacktop value = tag close value then pop
+ else if ($tagstack[$stacksize - 1] == $tag) { // found closing tag
+ $tag = '' . $tag . '>'; // Close Tag
+ // Pop
+ array_pop ($tagstack);
+ $stacksize--;
+ } else { // closing tag not at top, search for it
+ for ($j=$stacksize-1;$j>=0;$j--) {
+ if ($tagstack[$j] == $tag) {
+ // add tag to tagqueue
+ for ($k=$stacksize-1;$k>=$j;$k--){
+ $tagqueue .= '' . array_pop ($tagstack) . '>';
+ $stacksize--;
+ }
+ break;
+ }
+ }
+ $tag = '';
+ }
+ } else { // Begin Tag
+ $tag = strtolower($regex[1]);
+
+ // Tag Cleaning
+
+ // If self-closing or '', don't do anything.
+ if((substr($regex[2],-1) == '/') || ($tag == '')) {
+ }
+ // ElseIf it's a known single-entity tag but it doesn't close itself, do so
+ elseif ($tag == 'br' || $tag == 'img' || $tag == 'hr' || $tag == 'input') {
+ $regex[2] .= '/';
+ } else { // Push the tag onto the stack
+ // If the top of the stack is the same as the tag we want to push, close previous tag
+ if (($stacksize > 0) && ($tag != 'div') && ($tagstack[$stacksize - 1] == $tag)) {
+ $tagqueue = '' . array_pop ($tagstack) . '>';
+ $stacksize--;
+ }
+ $stacksize = array_push ($tagstack, $tag);
+ }
+
+ // Attributes
+ $attributes = $regex[2];
+ if($attributes) {
+ $attributes = ' '.$attributes;
+ }
+ $tag = '<'.$tag.$attributes.'>';
+ //If already queuing a close tag, then put this tag on, too
+ if ($tagqueue) {
+ $tagqueue .= $tag;
+ $tag = '';
+ }
+ }
+ $newtext .= substr($text,0,$i) . $tag;
+ $text = substr($text,$i+$l);
+ }
+
+ // Clear Tag Queue
+ $newtext .= $tagqueue;
+
+ // Add Remaining text
+ $newtext .= $text;
+
+ // Empty Stack
+ while($x = array_pop($tagstack)) {
+ $newtext .= '' . $x . '>'; // Add remaining tags to close
+ }
+
+ // WP fix for the bug with HTML comments
+ $newtext = str_replace("< !--","
+
+
Index: /trunk/wp-includes/link-template.php
===================================================================
--- /trunk/wp-includes/link-template.php (revision 3862)
+++ /trunk/wp-includes/link-template.php (revision 3862)
@@ -0,0 +1,513 @@
+post_title) . '-' . $id;
+ echo '';
+ break;
+ case 'id':
+ default:
+ echo '';
+ break;
+ }
+}
+
+
+function get_permalink($id = 0) {
+ $rewritecode = array(
+ '%year%',
+ '%monthnum%',
+ '%day%',
+ '%hour%',
+ '%minute%',
+ '%second%',
+ '%postname%',
+ '%post_id%',
+ '%category%',
+ '%author%',
+ '%pagename%'
+ );
+
+ $post = &get_post($id);
+ if ( $post->post_type == 'page' )
+ return get_page_link($post->ID);
+ elseif ($post->post_type == 'attachment')
+ return get_attachment_link($post->ID);
+
+ $permalink = get_settings('permalink_structure');
+
+ if ( '' != $permalink && 'draft' != $post->post_status ) {
+ $unixtime = strtotime($post->post_date);
+
+ $category = '';
+ if ( strstr($permalink, '%category%') ) {
+ $cats = get_the_category($post->ID);
+ $category = $cats[0]->category_nicename;
+ if ( $parent=$cats[0]->category_parent )
+ $category = get_category_parents($parent, FALSE, '/', TRUE) . $category;
+ }
+
+ $authordata = get_userdata($post->post_author);
+ $author = $authordata->user_nicename;
+ $date = explode(" ",date('Y m d H i s', $unixtime));
+ $rewritereplace =
+ array(
+ $date[0],
+ $date[1],
+ $date[2],
+ $date[3],
+ $date[4],
+ $date[5],
+ $post->post_name,
+ $post->ID,
+ $category,
+ $author,
+ $post->post_name,
+ );
+ return apply_filters('post_link', get_settings('home') . str_replace($rewritecode, $rewritereplace, $permalink), $post);
+ } else { // if they're not using the fancy permalink option
+ $permalink = get_settings('home') . '/?p=' . $post->ID;
+ return apply_filters('post_link', $permalink, $post);
+ }
+}
+
+// get permalink from post ID
+function post_permalink($post_id = 0, $mode = '') { // $mode legacy
+ return get_permalink($post_id);
+}
+
+function get_page_link($id = false) {
+ global $post, $wp_rewrite;
+
+ if ( !$id )
+ $id = $post->ID;
+
+ $pagestruct = $wp_rewrite->get_page_permastruct();
+
+ if ( '' != $pagestruct && 'draft' != $post->post_status ) {
+ $link = get_page_uri($id);
+ $link = str_replace('%pagename%', $link, $pagestruct);
+ $link = get_settings('home') . "/$link/";
+ } else {
+ $link = get_settings('home') . "/?page_id=$id";
+ }
+
+ if ( 'page' == get_option('show_on_front') && $id == get_option('page_on_front') )
+ $link = get_settings('home');
+
+ return apply_filters('page_link', $link, $id);
+}
+
+function get_attachment_link($id = false) {
+ global $post, $wp_rewrite;
+
+ $link = false;
+
+ if (! $id) {
+ $id = $post->ID;
+ }
+
+ $object = get_post($id);
+ if ( $wp_rewrite->using_permalinks() && ($object->post_parent > 0) ) {
+ $parent = get_post($object->post_parent);
+ $parentlink = get_permalink($object->post_parent);
+ if (! strstr($parentlink, '?') )
+ $link = trim($parentlink, '/') . '/' . $object->post_name . '/';
+ }
+
+ if (! $link ) {
+ $link = get_bloginfo('home') . "/?attachment_id=$id";
+ }
+
+ return apply_filters('attachment_link', $link, $id);
+}
+
+function get_year_link($year) {
+ global $wp_rewrite;
+ if ( !$year )
+ $year = gmdate('Y', time()+(get_settings('gmt_offset') * 3600));
+ $yearlink = $wp_rewrite->get_year_permastruct();
+ if ( !empty($yearlink) ) {
+ $yearlink = str_replace('%year%', $year, $yearlink);
+ return apply_filters('year_link', get_settings('home') . trailingslashit($yearlink), $year);
+ } else {
+ return apply_filters('year_link', get_settings('home') . '/?m=' . $year, $year);
+ }
+}
+
+function get_month_link($year, $month) {
+ global $wp_rewrite;
+ if ( !$year )
+ $year = gmdate('Y', time()+(get_settings('gmt_offset') * 3600));
+ if ( !$month )
+ $month = gmdate('m', time()+(get_settings('gmt_offset') * 3600));
+ $monthlink = $wp_rewrite->get_month_permastruct();
+ if ( !empty($monthlink) ) {
+ $monthlink = str_replace('%year%', $year, $monthlink);
+ $monthlink = str_replace('%monthnum%', zeroise(intval($month), 2), $monthlink);
+ return apply_filters('month_link', get_settings('home') . trailingslashit($monthlink), $year, $month);
+ } else {
+ return apply_filters('month_link', get_settings('home') . '/?m=' . $year . zeroise($month, 2), $year, $month);
+ }
+}
+
+function get_day_link($year, $month, $day) {
+ global $wp_rewrite;
+ if ( !$year )
+ $year = gmdate('Y', time()+(get_settings('gmt_offset') * 3600));
+ if ( !$month )
+ $month = gmdate('m', time()+(get_settings('gmt_offset') * 3600));
+ if ( !$day )
+ $day = gmdate('j', time()+(get_settings('gmt_offset') * 3600));
+
+ $daylink = $wp_rewrite->get_day_permastruct();
+ if ( !empty($daylink) ) {
+ $daylink = str_replace('%year%', $year, $daylink);
+ $daylink = str_replace('%monthnum%', zeroise(intval($month), 2), $daylink);
+ $daylink = str_replace('%day%', zeroise(intval($day), 2), $daylink);
+ return apply_filters('day_link', get_settings('home') . trailingslashit($daylink), $year, $month, $day);
+ } else {
+ return apply_filters('day_link', get_settings('home') . '/?m=' . $year . zeroise($month, 2) . zeroise($day, 2), $year, $month, $day);
+ }
+}
+
+function get_feed_link($feed='rss2') {
+ global $wp_rewrite;
+ $do_perma = 0;
+ $feed_url = get_settings('siteurl');
+ $comment_feed_url = $feed_url;
+
+ $permalink = $wp_rewrite->get_feed_permastruct();
+ if ( '' != $permalink ) {
+ if ( false !== strpos($feed, 'comments_') ) {
+ $feed = str_replace('comments_', '', $feed);
+ $permalink = $wp_rewrite->get_comment_feed_permastruct();
+ }
+
+ if ( 'rss2' == $feed )
+ $feed = '';
+
+ $permalink = str_replace('%feed%', $feed, $permalink);
+ $permalink = preg_replace('#/+#', '/', "/$permalink/");
+ $output = get_settings('home') . $permalink;
+ } else {
+ if ( false !== strpos($feed, 'comments_') )
+ $feed = str_replace('comments_', 'comments-', $feed);
+
+ $output = get_settings('home') . "/?feed={$feed}";
+ }
+
+ return apply_filters('feed_link', $output, $feed);
+}
+
+function edit_post_link($link = 'Edit This', $before = '', $after = '') {
+ global $post;
+
+ if ( is_attachment() )
+ return;
+
+ if( $post->post_type == 'page' ) {
+ if ( ! current_user_can('edit_page', $post->ID) )
+ return;
+ $file = 'page';
+ } else {
+ if ( ! current_user_can('edit_post', $post->ID) )
+ return;
+ $file = 'post';
+ }
+
+ $location = get_settings('siteurl') . "/wp-admin/{$file}.php?action=edit&post=$post->ID";
+ echo $before . "$link" . $after;
+}
+
+function edit_comment_link($link = 'Edit This', $before = '', $after = '') {
+ global $post, $comment;
+
+ if( $post->post_type == 'page' ){
+ if ( ! current_user_can('edit_page', $post->ID) )
+ return;
+ } else {
+ if ( ! current_user_can('edit_post', $post->ID) )
+ return;
+ }
+
+ $location = get_settings('siteurl') . "/wp-admin/comment.php?action=editcomment&comment=$comment->comment_ID";
+ echo $before . "$link" . $after;
+}
+
+// Navigation links
+
+function get_previous_post($in_same_cat = false, $excluded_categories = '') {
+ global $post, $wpdb;
+
+ if( !is_single() || is_attachment() )
+ return null;
+
+ $current_post_date = $post->post_date;
+
+ $join = '';
+ if ( $in_same_cat ) {
+ $join = " INNER JOIN $wpdb->post2cat ON $wpdb->posts.ID= $wpdb->post2cat.post_id ";
+ $cat_array = get_the_category($post->ID);
+ $join .= ' AND (category_id = ' . intval($cat_array[0]->cat_ID);
+ for ( $i = 1; $i < (count($cat_array)); $i++ ) {
+ $join .= ' OR category_id = ' . intval($cat_array[$i]->cat_ID);
+ }
+ $join .= ')';
+ }
+
+ $sql_exclude_cats = '';
+ if ( !empty($excluded_categories) ) {
+ $blah = explode(' and ', $excluded_categories);
+ foreach ( $blah as $category ) {
+ $category = intval($category);
+ $sql_cat_ids = " OR pc.category_ID = '$category'";
+ }
+ $posts_in_ex_cats = $wpdb->get_col("SELECT p.ID FROM $wpdb->posts p LEFT JOIN $wpdb->post2cat pc ON pc.post_id=p.ID WHERE 1 = 0 $sql_cat_ids GROUP BY p.ID");
+ $posts_in_ex_cats_sql = 'AND ID NOT IN (' . implode($posts_in_ex_cats, ',') . ')';
+ }
+
+ return @$wpdb->get_row("SELECT ID, post_title FROM $wpdb->posts $join WHERE post_date < '$current_post_date' AND post_type = 'post' AND post_status = 'publish' $posts_in_ex_cats_sql ORDER BY post_date DESC LIMIT 1");
+}
+
+function get_next_post($in_same_cat = false, $excluded_categories = '') {
+ global $post, $wpdb;
+
+ if( !is_single() || is_attachment() )
+ return null;
+
+ $current_post_date = $post->post_date;
+
+ $join = '';
+ if ( $in_same_cat ) {
+ $join = " INNER JOIN $wpdb->post2cat ON $wpdb->posts.ID= $wpdb->post2cat.post_id ";
+ $cat_array = get_the_category($post->ID);
+ $join .= ' AND (category_id = ' . intval($cat_array[0]->cat_ID);
+ for ( $i = 1; $i < (count($cat_array)); $i++ ) {
+ $join .= ' OR category_id = ' . intval($cat_array[$i]->cat_ID);
+ }
+ $join .= ')';
+ }
+
+ $sql_exclude_cats = '';
+ if ( !empty($excluded_categories) ) {
+ $blah = explode(' and ', $excluded_categories);
+ foreach ( $blah as $category ) {
+ $category = intval($category);
+ $sql_cat_ids = " OR pc.category_ID = '$category'";
+ }
+ $posts_in_ex_cats = $wpdb->get_col("SELECT p.ID from $wpdb->posts p LEFT JOIN $wpdb->post2cat pc ON pc.post_id = p.ID WHERE 1 = 0 $sql_cat_ids GROUP BY p.ID");
+ $posts_in_ex_cats_sql = 'AND ID NOT IN (' . implode($posts_in_ex_cats, ',') . ')';
+ }
+
+ return @$wpdb->get_row("SELECT ID,post_title FROM $wpdb->posts $join WHERE post_date > '$current_post_date' AND post_type = 'post' AND post_status = 'publish' $posts_in_ex_cats_sql AND ID != $post->ID ORDER BY post_date ASC LIMIT 1");
+}
+
+
+function previous_post_link($format='« %link', $link='%title', $in_same_cat = false, $excluded_categories = '') {
+
+ if ( is_attachment() )
+ $post = & get_post($GLOBALS['post']->post_parent);
+ else
+ $post = get_previous_post($in_same_cat, $excluded_categories);
+
+ if ( !$post )
+ return;
+
+ $title = apply_filters('the_title', $post->post_title, $post);
+ $string = '';
+ $link = str_replace('%title', $title, $link);
+ $link = $pre . $string . $link . '';
+
+ $format = str_replace('%link', $link, $format);
+
+ echo $format;
+}
+
+function next_post_link($format='%link »', $link='%title', $in_same_cat = false, $excluded_categories = '') {
+ $post = get_next_post($in_same_cat, $excluded_categories);
+
+ if ( !$post )
+ return;
+
+ $title = apply_filters('the_title', $post->post_title, $post);
+ $string = '';
+ $link = str_replace('%title', $title, $link);
+ $link = $string . $link . '';
+ $format = str_replace('%link', $link, $format);
+
+ echo $format;
+}
+
+function get_pagenum_link($pagenum = 1) {
+ global $wp_rewrite;
+
+ $qstr = wp_specialchars($_SERVER['REQUEST_URI']);
+
+ $page_querystring = "paged";
+ $page_modstring = "page/";
+ $page_modregex = "page/?";
+ $permalink = 0;
+
+ $home_root = parse_url(get_settings('home'));
+ $home_root = $home_root['path'];
+ $home_root = trailingslashit($home_root);
+ $qstr = preg_replace('|^'. $home_root . '|', '', $qstr);
+ $qstr = preg_replace('|^/+|', '', $qstr);
+
+ $index = $_SERVER['PHP_SELF'];
+ $index = preg_replace('|^'. $home_root . '|', '', $index);
+ $index = preg_replace('|^/+|', '', $index);
+
+ // if we already have a QUERY style page string
+ if ( stristr( $qstr, $page_querystring ) ) {
+ $replacement = "$page_querystring=$pagenum";
+ $qstr = preg_replace("/".$page_querystring."[^\d]+\d+/", $replacement, $qstr);
+ // if we already have a mod_rewrite style page string
+ } elseif ( preg_match( '|'.$page_modregex.'\d+|', $qstr ) ) {
+ $permalink = 1;
+ $qstr = preg_replace('|'.$page_modregex.'\d+|',"$page_modstring$pagenum",$qstr);
+
+ // if we don't have a page string at all ...
+ // lets see what sort of URL we have...
+ } else {
+ // we need to know the way queries are being written
+ // if there's a querystring_start (a "?" usually), it's definitely not mod_rewritten
+ if ( stristr( $qstr, '?' ) ) {
+ // so append the query string (using &, since we already have ?)
+ $qstr .= '&' . $page_querystring . '=' . $pagenum;
+ // otherwise, it could be rewritten, OR just the default index ...
+ } elseif( '' != get_settings('permalink_structure') && ! is_admin() ) {
+ $permalink = 1;
+ $index = $wp_rewrite->index;
+ // If it's not a path info permalink structure, trim the index.
+ if ( !$wp_rewrite->using_index_permalinks() ) {
+ $qstr = preg_replace("#/*" . $index . "/*#", '/', $qstr);
+ } else {
+ // If using path info style permalinks, make sure the index is in
+ // the URI.
+ if ( strpos($qstr, $index) === false )
+ $qstr = '/' . $index . $qstr;
+ }
+
+ $qstr = trailingslashit($qstr) . $page_modstring . $pagenum;
+ } else {
+ $qstr = $index . '?' . $page_querystring . '=' . $pagenum;
+ }
+ }
+
+ $qstr = preg_replace('|^/+|', '', $qstr);
+ if ( $permalink )
+ $qstr = trailingslashit($qstr);
+ $qstr = preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', trailingslashit( get_settings('home') ) . $qstr );
+
+ // showing /page/1/ or ?paged=1 is redundant
+ if ( 1 === $pagenum ) {
+ $qstr = str_replace('page/1/', '', $qstr); // for mod_rewrite style
+ $qstr = remove_query_arg('paged', $qstr); // for query style
+ }
+ return $qstr;
+}
+
+function next_posts($max_page = 0) { // original by cfactor at cooltux.org
+ global $paged, $pagenow;
+
+ if ( !is_single() ) {
+ if ( !$paged )
+ $paged = 1;
+ $nextpage = intval($paged) + 1;
+ if ( !$max_page || $max_page >= $nextpage )
+ echo get_pagenum_link($nextpage);
+ }
+}
+
+function next_posts_link($label='Next Page »', $max_page=0) {
+ global $paged, $wpdb;
+ if ( !$max_page ) {
+ $max_page = _max_num_pages();
+ }
+ if ( !$paged )
+ $paged = 1;
+ $nextpage = intval($paged) + 1;
+ if ( (! is_single()) && (empty($paged) || $nextpage <= $max_page) ) {
+ echo ''. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $label) .'';
+ }
+}
+
+
+function previous_posts() { // original by cfactor at cooltux.org
+ global $paged, $pagenow;
+
+ if ( !is_single() ) {
+ $nextpage = intval($paged) - 1;
+ if ( $nextpage < 1 )
+ $nextpage = 1;
+ echo get_pagenum_link($nextpage);
+ }
+}
+
+
+function previous_posts_link($label='« Previous Page') {
+ global $paged;
+ if ( (!is_single()) && ($paged > 1) ) {
+ echo ''. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $label) .'';
+ }
+}
+
+function _max_num_pages() {
+ static $max_num_pages;
+ global $wpdb, $wp_query;
+
+ if (isset($max_num_pages)) return $max_num_pages;
+
+ if ( 'posts' == get_query_var('what_to_show') ) {
+ preg_match('#FROM\s(.*)\sORDER BY#siU', $wp_query->request, $matches);
+ $fromwhere = $matches[1];
+ $numposts = $wpdb->get_var("SELECT COUNT(DISTINCT ID) FROM $fromwhere");
+ $max_num_pages = ceil($numposts / get_option('posts_per_page'));
+ } else {
+ preg_match('#FROM\s(.*)\sORDER BY#siU', $wp_query->request, $matches);
+ $fromwhere = preg_replace('/( AND )?post_date >= (\'|\")(.*?)(\'|\")( AND post_date <= (\'\")(.*?)(\'\"))?/siU', '', $matches[1]);
+ $num_days = $wpdb->query("SELECT DISTINCT post_date FROM $fromwhere GROUP BY year(post_date), month(post_date), dayofmonth(post_date)");
+ $max_num_pages = ceil($num_days / get_option('posts_per_page'));
+ }
+
+ return $max_num_pages;
+}
+
+function posts_nav_link($sep=' — ', $prelabel='« Previous Page', $nxtlabel='Next Page »') {
+ if ( !is_single() ) {
+ $max_num_pages = _max_num_pages();
+ $paged = get_query_var('paged');
+
+ //only have sep if there's both prev and next results
+ if ($paged < 2 || $paged >= $max_num_pages) {
+ $sep = '';
+ }
+
+ if ( $max_num_pages > 1 ) {
+ previous_posts_link($prelabel);
+ echo preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $sep);
+ next_posts_link($nxtlabel);
+ }
+ }
+}
+
+?>
Index: unk/wp-includes/pluggable-functions.php
===================================================================
--- /trunk/wp-includes/pluggable-functions.php (revision 3861)
+++ (revision )
@@ -1,535 +1,0 @@
-ID) )
- return $current_user;
-
- $current_user = new WP_User($id, $name);
-
- setup_userdata($current_user->ID);
-
- do_action('set_current_user');
-
- return $current_user;
-}
-endif;
-
-if ( !function_exists('wp_get_current_user') ) :
-function wp_get_current_user() {
- global $current_user;
-
- get_currentuserinfo();
-
- return $current_user;
-}
-endif;
-
-if ( !function_exists('get_currentuserinfo') ) :
-function get_currentuserinfo() {
- global $current_user;
-
- if ( defined('XMLRPC_REQUEST') && XMLRPC_REQUEST )
- return false;
-
- if ( ! empty($current_user) )
- return;
-
- if ( empty($_COOKIE[USER_COOKIE]) || empty($_COOKIE[PASS_COOKIE]) ||
- !wp_login($_COOKIE[USER_COOKIE], $_COOKIE[PASS_COOKIE], true) ) {
- wp_set_current_user(0);
- return false;
- }
-
- $user_login = $_COOKIE[USER_COOKIE];
- wp_set_current_user(0, $user_login);
-}
-endif;
-
-if ( !function_exists('get_userdata') ) :
-function get_userdata( $user_id ) {
- global $wpdb;
- $user_id = (int) $user_id;
- if ( $user_id == 0 )
- return false;
-
- $user = wp_cache_get($user_id, 'users');
-
- if ( $user )
- return $user;
-
- if ( !$user = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE ID = '$user_id' LIMIT 1") )
- return false;
-
- $wpdb->hide_errors();
- $metavalues = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = '$user_id'");
- $wpdb->show_errors();
-
- if ($metavalues) {
- foreach ( $metavalues as $meta ) {
- @ $value = unserialize($meta->meta_value);
- if ($value === FALSE)
- $value = $meta->meta_value;
- $user->{$meta->meta_key} = $value;
-
- // We need to set user_level from meta, not row
- if ( $wpdb->prefix . 'user_level' == $meta->meta_key )
- $user->user_level = $meta->meta_value;
- } // end foreach
- } //end if
-
- // For backwards compat.
- if ( isset($user->first_name) )
- $user->user_firstname = $user->first_name;
- if ( isset($user->last_name) )
- $user->user_lastname = $user->last_name;
- if ( isset($user->description) )
- $user->user_description = $user->description;
-
- wp_cache_add($user_id, $user, 'users');
- wp_cache_add($user->user_login, $user, 'userlogins');
-
- return $user;
-}
-endif;
-
-if ( !function_exists('update_user_cache') ) :
-function update_user_cache() {
- return true;
-}
-endif;
-
-if ( !function_exists('get_userdatabylogin') ) :
-function get_userdatabylogin($user_login) {
- global $wpdb;
- $user_login = sanitize_user( $user_login );
-
- if ( empty( $user_login ) )
- return false;
-
- $userdata = wp_cache_get($user_login, 'userlogins');
- if ( $userdata )
- return $userdata;
-
- if ( !$user = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE user_login = '$user_login'") )
- return false;
-
- $wpdb->hide_errors();
- $metavalues = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = '$user->ID'");
- $wpdb->show_errors();
-
- if ($metavalues) {
- foreach ( $metavalues as $meta ) {
- @ $value = unserialize($meta->meta_value);
- if ($value === FALSE)
- $value = $meta->meta_value;
- $user->{$meta->meta_key} = $value;
-
- // We need to set user_level from meta, not row
- if ( $wpdb->prefix . 'user_level' == $meta->meta_key )
- $user->user_level = $meta->meta_value;
- }
- }
-
- // For backwards compat.
- if ( isset($user->first_name) )
- $user->user_firstname = $user->first_name;
- if ( isset($user->last_name) )
- $user->user_lastname = $user->last_name;
- if ( isset($user->description) )
- $user->user_description = $user->description;
-
- wp_cache_add($user->ID, $user, 'users');
- wp_cache_add($user->user_login, $user, 'userlogins');
-
- return $user;
-
-}
-endif;
-
-if ( !function_exists('wp_mail') ) :
-function wp_mail($to, $subject, $message, $headers = '') {
- if( $headers == '' ) {
- $headers = "MIME-Version: 1.0\n" .
- "From: wordpress@" . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])) . "\n" .
- "Content-Type: text/plain; charset=\"" . get_settings('blog_charset') . "\"\n";
- }
-
- return @mail($to, $subject, $message, $headers);
-}
-endif;
-
-if ( !function_exists('wp_login') ) :
-function wp_login($username, $password, $already_md5 = false) {
- global $wpdb, $error;
-
- if ( '' == $username )
- return false;
-
- if ( '' == $password ) {
- $error = __('Error: The password field is empty.');
- return false;
- }
-
- $login = get_userdatabylogin($username);
- //$login = $wpdb->get_row("SELECT ID, user_login, user_pass FROM $wpdb->users WHERE user_login = '$username'");
-
- if (!$login) {
- $error = __('Error: Wrong username.');
- return false;
- } else {
- // If the password is already_md5, it has been double hashed.
- // Otherwise, it is plain text.
- if ( ($already_md5 && md5($login->user_pass) == $password) || ($login->user_login == $username && $login->user_pass == md5($password)) ) {
- return true;
- } else {
- $error = __('Error: Incorrect password.');
- $pwd = '';
- return false;
- }
- }
-}
-endif;
-
-if ( !function_exists('is_user_logged_in') ) :
-function is_user_logged_in() {
- $user = wp_get_current_user();
-
- if ( $user->id == 0 )
- return false;
-
- return true;
-}
-endif;
-
-if ( !function_exists('auth_redirect') ) :
-function auth_redirect() {
- // Checks if a user is logged in, if not redirects them to the login page
- if ( (!empty($_COOKIE[USER_COOKIE]) &&
- !wp_login($_COOKIE[USER_COOKIE], $_COOKIE[PASS_COOKIE], true)) ||
- (empty($_COOKIE[USER_COOKIE])) ) {
- nocache_headers();
-
- header('Location: ' . get_settings('siteurl') . '/wp-login.php?redirect_to=' . urlencode($_SERVER['REQUEST_URI']));
- exit();
- }
-}
-endif;
-
-if ( !function_exists('check_admin_referer') ) :
-function check_admin_referer($action = -1) {
- global $pagenow, $menu, $submenu, $parent_file, $submenu_file;;
- $adminurl = strtolower(get_settings('siteurl')).'/wp-admin';
- $referer = strtolower($_SERVER['HTTP_REFERER']);
- if ( !wp_verify_nonce($_REQUEST['_wpnonce'], $action) &&
- !(-1 == $action && strstr($referer, $adminurl)) ) {
- if ( $referer )
- $adminurl = $referer;
- $title = __('WordPress Confirmation');
- require_once(ABSPATH . '/wp-admin/admin-header.php');
- // Remove extra layer of slashes.
- $_POST = stripslashes_deep($_POST );
- if ( $_POST ) {
- $q = http_build_query($_POST);
- $q = explode( ini_get('arg_separator.output'), $q);
- $html .= "\t\n";
- } else {
- $html .= "\t\n";
- }
- $html .= "