From 3c8ed766e1cf775e3a362a19ce233a6a621f7db9 Mon Sep 17 00:00:00 2001 From: ryan Date: Wed, 7 Jun 2006 23:17:59 +0000 Subject: [PATCH] Reworg post/page/attachment functions. #2525 git-svn-id: http://svn.automattic.com/wordpress/trunk@3851 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/comment.php | 46 + wp-includes/functions.php | 490 ++---- ...e-functions-post.php => post-template.php} | 216 +-- wp-includes/{functions-post.php => post.php} | 1506 +++++++++-------- wp-includes/template-functions-author.php | 7 + wp-includes/template-functions-general.php | 75 + wp-includes/template-functions-links.php | 5 + wp-settings.php | 4 +- 8 files changed, 1187 insertions(+), 1162 deletions(-) rename wp-includes/{template-functions-post.php => post-template.php} (75%) rename wp-includes/{functions-post.php => post.php} (65%) diff --git a/wp-includes/comment.php b/wp-includes/comment.php index 931a8a548..45547db11 100644 --- a/wp-includes/comment.php +++ b/wp-includes/comment.php @@ -195,6 +195,52 @@ function wp_allow_comment($commentdata) { return $approved; } +function wp_blacklist_check($author, $email, $url, $comment, $user_ip, $user_agent) { + global $wpdb; + + do_action('wp_blacklist_check', $author, $email, $url, $comment, $user_ip, $user_agent); + + if ( preg_match_all('/&#(\d+);/', $comment . $author . $url, $chars) ) { + foreach ($chars[1] as $char) { + // If it's an encoded char in the normal ASCII set, reject + if ( 38 == $char ) + continue; // Unless it's & + if ($char < 128) + return true; + } + } + + $mod_keys = trim( get_settings('blacklist_keys') ); + if ('' == $mod_keys ) + return false; // If moderation keys are empty + $words = explode("\n", $mod_keys ); + + foreach ($words as $word) { + $word = trim($word); + + // Skip empty lines + if ( empty($word) ) { continue; } + + // Do some escaping magic so that '#' chars in the + // spam words don't break things: + $word = preg_quote($word, '#'); + + $pattern = "#$word#i"; + if ( preg_match($pattern, $author ) ) return true; + if ( preg_match($pattern, $email ) ) return true; + if ( preg_match($pattern, $url ) ) return true; + if ( preg_match($pattern, $comment ) ) return true; + if ( preg_match($pattern, $user_ip ) ) return true; + if ( preg_match($pattern, $user_agent) ) return true; + } + + if ( isset($_SERVER['REMOTE_ADDR']) ) { + if ( wp_proxy_check($_SERVER['REMOTE_ADDR']) ) return true; + } + + return false; +} + function wp_delete_comment($comment_id) { global $wpdb; do_action('delete_comment', $comment_id); diff --git a/wp-includes/functions.php b/wp-includes/functions.php index 1c0781312..26ad2966f 100644 --- a/wp-includes/functions.php +++ b/wp-includes/functions.php @@ -340,303 +340,6 @@ function delete_option($name) { return true; } -function add_post_meta($post_id, $key, $value, $unique = false) { - global $wpdb, $post_meta_cache; - - if ( $unique ) { - if ( $wpdb->get_var("SELECT meta_key FROM $wpdb->postmeta WHERE meta_key -= '$key' AND post_id = '$post_id'") ) { - return false; - } - } - - $original = $value; - if ( is_array($value) || is_object($value) ) - $value = $wpdb->escape(serialize($value)); - - $wpdb->query("INSERT INTO $wpdb->postmeta (post_id,meta_key,meta_value) VALUES ('$post_id','$key','$value')"); - - $post_meta_cache['$post_id'][$key][] = $original; - - return true; -} - -function delete_post_meta($post_id, $key, $value = '') { - global $wpdb, $post_meta_cache; - - if ( empty($value) ) { - $meta_id = $wpdb->get_var("SELECT meta_id FROM $wpdb->postmeta WHERE -post_id = '$post_id' AND meta_key = '$key'"); - } else { - $meta_id = $wpdb->get_var("SELECT meta_id FROM $wpdb->postmeta WHERE -post_id = '$post_id' AND meta_key = '$key' AND meta_value = '$value'"); - } - - if ( !$meta_id ) - return false; - - if ( empty($value) ) { - $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = '$post_id' -AND meta_key = '$key'"); - unset($post_meta_cache['$post_id'][$key]); - } else { - $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = '$post_id' -AND meta_key = '$key' AND meta_value = '$value'"); - $cache_key = $post_meta_cache['$post_id'][$key]; - if ($cache_key) foreach ( $cache_key as $index => $data ) - if ( $data == $value ) - unset($post_meta_cache['$post_id'][$key][$index]); - } - - unset($post_meta_cache['$post_id'][$key]); - - return true; -} - -function get_post_meta($post_id, $key, $single = false) { - global $wpdb, $post_meta_cache; - - if ( isset($post_meta_cache[$post_id][$key]) ) { - if ( $single ) { - return maybe_unserialize( $post_meta_cache[$post_id][$key][0] ); - } else { - return maybe_unserialize( $post_meta_cache[$post_id][$key] ); - } - } - - $metalist = $wpdb->get_results("SELECT meta_value FROM $wpdb->postmeta WHERE post_id = '$post_id' AND meta_key = '$key'", ARRAY_N); - - $values = array(); - if ( $metalist ) { - foreach ($metalist as $metarow) { - $values[] = $metarow[0]; - } - } - - if ( $single ) { - if ( count($values) ) { - $return = maybe_unserialize( $values[0] ); - } else { - return ''; - } - } else { - $return = $values; - } - - return maybe_unserialize($return); -} - -function update_post_meta($post_id, $key, $value, $prev_value = '') { - global $wpdb, $post_meta_cache; - - $original_value = $value; - if ( is_array($value) || is_object($value) ) - $value = $wpdb->escape(serialize($value)); - - $original_prev = $prev_value; - if ( is_array($prev_value) || is_object($prev_value) ) - $prev_value = $wpdb->escape(serialize($prev_value)); - - if (! $wpdb->get_var("SELECT meta_key FROM $wpdb->postmeta WHERE meta_key -= '$key' AND post_id = '$post_id'") ) { - return false; - } - - if ( empty($prev_value) ) { - $wpdb->query("UPDATE $wpdb->postmeta SET meta_value = '$value' WHERE -meta_key = '$key' AND post_id = '$post_id'"); - $cache_key = $post_meta_cache['$post_id'][$key]; - if ( !empty($cache_key) ) - foreach ($cache_key as $index => $data) - $post_meta_cache['$post_id'][$key][$index] = $original_value; - } else { - $wpdb->query("UPDATE $wpdb->postmeta SET meta_value = '$value' WHERE -meta_key = '$key' AND post_id = '$post_id' AND meta_value = '$prev_value'"); - $cache_key = $post_meta_cache['$post_id'][$key]; - if ( !empty($cache_key) ) - foreach ($cache_key as $index => $data) - if ( $data == $original_prev ) - $post_meta_cache['$post_id'][$key][$index] = $original_value; - } - - return true; -} - -// Retrieves post data given a post ID or post object. -// Handles post caching. -function &get_post(&$post, $output = OBJECT) { - global $post_cache, $wpdb; - - if ( empty($post) ) { - if ( isset($GLOBALS['post']) ) - $_post = & $GLOBALS['post']; - else - $_post = null; - } elseif ( is_object($post) ) { - if ( 'page' == $post->post_type ) - return get_page($post, $output); - if ( !isset($post_cache[$post->ID]) ) - $post_cache[$post->ID] = &$post; - $_post = & $post_cache[$post->ID]; - } else { - if ( $_post = wp_cache_get($post, 'pages') ) - return get_page($_post, $output); - elseif ( isset($post_cache[$post]) ) - $_post = & $post_cache[$post]; - else { - $query = "SELECT * FROM $wpdb->posts WHERE ID = '$post' LIMIT 1"; - $_post = & $wpdb->get_row($query); - if ( 'page' == $_post->post_type ) - return get_page($_post, $output); - $post_cache[$post] = & $_post; - } - } - - if ( defined(WP_IMPORTING) ) - unset($post_cache); - - if ( $output == OBJECT ) { - return $_post; - } elseif ( $output == ARRAY_A ) { - return get_object_vars($_post); - } elseif ( $output == ARRAY_N ) { - return array_values(get_object_vars($_post)); - } else { - return $_post; - } -} - -function &get_children($post = 0, $output = OBJECT) { - global $post_cache, $wpdb; - - if ( empty($post) ) { - if ( isset($GLOBALS['post']) ) - $post_parent = & $GLOBALS['post']->post_parent; - else - return false; - } elseif ( is_object($post) ) { - $post_parent = $post->post_parent; - } else { - $post_parent = $post; - } - - $post_parent = (int) $post_parent; - - $query = "SELECT * FROM $wpdb->posts WHERE post_parent = $post_parent"; - - $children = $wpdb->get_results($query); - - if ( $children ) { - foreach ( $children as $key => $child ) { - $post_cache[$child->ID] =& $children[$key]; - $kids[$child->ID] =& $children[$key]; - } - } else { - return false; - } - - if ( $output == OBJECT ) { - return $kids; - } elseif ( $output == ARRAY_A ) { - foreach ( $kids as $kid ) - $weeuns[$kid->ID] = get_object_vars($kids[$kid->ID]); - return $weeuns; - } elseif ( $output == ARRAY_N ) { - foreach ( $kids as $kid ) - $babes[$kid->ID] = array_values(get_object_vars($kids[$kid->ID])); - return $babes; - } else { - return $kids; - } -} - -function get_page_by_path($page_path, $output = OBJECT) { - global $wpdb; - $page_path = rawurlencode(urldecode($page_path)); - $page_path = str_replace('%2F', '/', $page_path); - $page_path = str_replace('%20', ' ', $page_path); - $page_paths = '/' . trim($page_path, '/'); - $leaf_path = sanitize_title(basename($page_paths)); - $page_paths = explode('/', $page_paths); - foreach($page_paths as $pathdir) - $full_path .= ($pathdir!=''?'/':'') . sanitize_title($pathdir); - - $pages = $wpdb->get_results("SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_name = '$leaf_path' AND post_type='page'"); - - if ( empty($pages) ) - return NULL; - - foreach ($pages as $page) { - $path = '/' . $leaf_path; - $curpage = $page; - while ($curpage->post_parent != 0) { - $curpage = $wpdb->get_row("SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE ID = '$curpage->post_parent' and post_type='page'"); - $path = '/' . $curpage->post_name . $path; - } - - if ( $path == $full_path ) - return get_page($page->ID, $output); - } - - return NULL; -} - -// Retrieves page data given a page ID or page object. -// Handles page caching. -function &get_page(&$page, $output = OBJECT) { - global $wpdb; - - if ( empty($page) ) { - if ( isset($GLOBALS['page']) ) { - $_page = & $GLOBALS['page']; - wp_cache_add($_page->ID, $_page, 'pages'); - } else { - $_page = null; - } - } elseif ( is_object($page) ) { - if ( 'post' == $page->post_type ) - return get_post($page, $output); - wp_cache_add($page->ID, $page, 'pages'); - $_page = $page; - } else { - if ( isset($GLOBALS['page']) && ($page == $GLOBALS['page']->ID) ) { - $_page = & $GLOBALS['page']; - wp_cache_add($_page->ID, $_page, 'pages'); - } elseif ( $_page = $GLOBALS['post_cache'][$page] ) { - return get_post($page, $output); - } elseif ( $_page = wp_cache_get($page, 'pages') ) { - // Got it. - } else { - $query = "SELECT * FROM $wpdb->posts WHERE ID= '$page' LIMIT 1"; - $_page = & $wpdb->get_row($query); - if ( 'post' == $_page->post_type ) - return get_post($_page, $output); - wp_cache_add($_page->ID, $_page, 'pages'); - } - } - - if ( $output == OBJECT ) { - return $_page; - } elseif ( $output == ARRAY_A ) { - return get_object_vars($_page); - } elseif ( $output == ARRAY_N ) { - return array_values(get_object_vars($_page)); - } else { - return $_page; - } -} - -function get_all_page_ids() { - global $wpdb; - - if ( ! $page_ids = wp_cache_get('all_page_ids', 'pages') ) { - $page_ids = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE post_type = 'page'"); - wp_cache_add('all_page_ids', $page_ids, 'pages'); - } - - return $page_ids; -} - function gzip_compression() { if ( !get_settings('gzipcompression') ) return false; @@ -1274,14 +977,6 @@ function update_category_cache() { return true; } -function wp_head() { - do_action('wp_head'); -} - -function wp_footer() { - do_action('wp_footer'); -} - /* add_query_arg: Returns a modified querystring by adding a single key & value or an associative array. @@ -1600,4 +1295,189 @@ function wp_nonce_field($action = -1) { echo ''; } +function wp_mkdir_p($target) { + // from php.net/mkdir user contributed notes + if (file_exists($target)) { + if (! @ is_dir($target)) + return false; + else + return true; + } + + // Attempting to create the directory may clutter up our display. + if (@ mkdir($target)) { + $stat = @ stat(dirname($target)); + $dir_perms = $stat['mode'] & 0007777; // Get the permission bits. + @ chmod($target, $dir_perms); + return true; + } else { + if ( is_dir(dirname($target)) ) + return false; + } + + // If the above failed, attempt to create the parent node, then try again. + if (wp_mkdir_p(dirname($target))) + return wp_mkdir_p($target); + + return false; +} + +// Returns an array containing the current upload directory's path and url, or an error message. +function wp_upload_dir() { + $siteurl = get_settings('siteurl'); + //prepend ABSPATH to $dir and $siteurl to $url if they're not already there + $path = str_replace(ABSPATH, '', trim(get_settings('upload_path'))); + $dir = ABSPATH . $path; + $url = trailingslashit($siteurl) . $path; + + if ( $dir == ABSPATH ) { //the option was empty + $dir = ABSPATH . 'wp-content/uploads'; + } + + if ( defined('UPLOADS') ) { + $dir = ABSPATH . UPLOADS; + $url = trailingslashit($siteurl) . UPLOADS; + } + + if ( get_settings('uploads_use_yearmonth_folders')) { + // Generate the yearly and monthly dirs + $time = current_time( 'mysql' ); + $y = substr( $time, 0, 4 ); + $m = substr( $time, 5, 2 ); + $dir = $dir . "/$y/$m"; + $url = $url . "/$y/$m"; + } + + // Make sure we have an uploads dir + if ( ! wp_mkdir_p( $dir ) ) { + $message = sprintf(__('Unable to create directory %s. Is its parent directory writable by the server?'), $dir); + return array('error' => $message); + } + + $uploads = array('path' => $dir, 'url' => $url, 'error' => false); + return apply_filters('upload_dir', $uploads); +} + +function wp_upload_bits($name, $type, $bits) { + if ( empty($name) ) + return array('error' => "Empty filename"); + + $upload = wp_upload_dir(); + + if ( $upload['error'] !== false ) + return $upload; + + $number = ''; + $filename = $name; + $path_parts = pathinfo($filename); + $ext = $path_parts['extension']; + if ( empty($ext) ) + $ext = ''; + else + $ext = ".$ext"; + while ( file_exists($upload['path'] . "/$filename") ) { + if ( '' == "$number$ext" ) + $filename = $filename . ++$number . $ext; + else + $filename = str_replace("$number$ext", ++$number . $ext, $filename); + } + + $new_file = $upload['path'] . "/$filename"; + if ( ! wp_mkdir_p( dirname($new_file) ) ) { + $message = sprintf(__('Unable to create directory %s. Is its parent directory writable by the server?'), dirname($new_file)); + return array('error' => $message); + } + + $ifp = @ fopen($new_file, 'wb'); + if ( ! $ifp ) + return array('error' => "Could not write file $new_file."); + + $success = @ fwrite($ifp, $bits); + fclose($ifp); + // Set correct file permissions + $stat = @ stat(dirname($new_file)); + $perms = $stat['mode'] & 0007777; + $perms = $perms & 0000666; + @ chmod($new_file, $perms); + + // Compute the URL + $url = $upload['url'] . "/$filename"; + + return array('file' => $new_file, 'url' => $url, 'error' => false); +} + +function do_trackbacks($post_id) { + global $wpdb; + + $post = $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID = $post_id"); + $to_ping = get_to_ping($post_id); + $pinged = get_pung($post_id); + if ( empty($to_ping) ) { + $wpdb->query("UPDATE $wpdb->posts SET to_ping = '' WHERE ID = '$post_id'"); + return; + } + + if (empty($post->post_excerpt)) + $excerpt = apply_filters('the_content', $post->post_content); + else + $excerpt = apply_filters('the_excerpt', $post->post_excerpt); + $excerpt = str_replace(']]>', ']]>', $excerpt); + $excerpt = strip_tags($excerpt); + if ( function_exists('mb_strcut') ) // For international trackbacks + $excerpt = mb_strcut($excerpt, 0, 252, get_settings('blog_charset')) . '...'; + else + $excerpt = substr($excerpt, 0, 252) . '...'; + + $post_title = apply_filters('the_title', $post->post_title); + $post_title = strip_tags($post_title); + + if ($to_ping) : foreach ($to_ping as $tb_ping) : + $tb_ping = trim($tb_ping); + if ( !in_array($tb_ping, $pinged) ) { + trackback($tb_ping, $post_title, $excerpt, $post_id); + $pinged[] = $tb_ping; + } else { + $wpdb->query("UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, '$tb_ping', '')) WHERE ID = '$post_id'"); + } + endforeach; endif; +} + +function do_all_pings() { + global $wpdb; + + // Do pingbacks + while ($ping = $wpdb->get_row("SELECT * FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = '_pingme' LIMIT 1")) { + $wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE post_id = {$ping->ID} AND meta_key = '_pingme';"); + pingback($ping->post_content, $ping->ID); + } + + // Do Enclosures + while ($enclosure = $wpdb->get_row("SELECT * FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = '_encloseme' LIMIT 1")) { + $wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE post_id = {$enclosure->ID} AND meta_key = '_encloseme';"); + do_enclose($enclosure->post_content, $enclosure->ID); + } + + // Do Trackbacks + $trackbacks = $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE CHAR_LENGTH(TRIM(to_ping)) > 7 AND post_status = 'publish'"); + if ( is_array($trackbacks) ) { + foreach ( $trackbacks as $trackback ) { + do_trackbacks($trackback->ID); + } + } + + //Do Update Services/Generic Pings + generic_ping(); +} + +function wp_proxy_check($ipnum) { + if ( get_option('open_proxy_check') && isset($ipnum) ) { + $rev_ip = implode( '.', array_reverse( explode( '.', $ipnum ) ) ); + $lookup = $rev_ip . '.opm.blitzed.org.'; + if ( $lookup != gethostbyname( $lookup ) ) + return true; + } + + return false; +} + ?> diff --git a/wp-includes/template-functions-post.php b/wp-includes/post-template.php similarity index 75% rename from wp-includes/template-functions-post.php rename to wp-includes/post-template.php index 40e3b325f..f0f5ce2a9 100644 --- a/wp-includes/template-functions-post.php +++ b/wp-includes/post-template.php @@ -1,25 +1,21 @@ -

' . __("This post is password protected. To view it please enter your password below:") . '

-

- - '; - return $output; -} - +// +// "The Loop" post functions +// function the_ID() { global $id; echo $id; } + function get_the_ID() { global $id; return $id; } + function the_title($before = '', $after = '', $echo = true) { $title = get_the_title(); if ( strlen($title) > 0 ) { @@ -42,6 +38,9 @@ function get_the_title($id = 0) { return $title; } +function the_guid( $id = 0 ) { + echo get_the_guid($id); +} function get_the_guid( $id = 0 ) { $post = &get_post($id); @@ -49,12 +48,6 @@ function get_the_guid( $id = 0 ) { return apply_filters('get_the_guid', $post->guid); } - -function the_guid( $id = 0 ) { - echo get_the_guid($id); -} - - function the_content($more_link_text = '(more...)', $stripteaser = 0, $more_file = '') { $content = get_the_content($more_link_text, $stripteaser, $more_file); $content = apply_filters('the_content', $content); @@ -190,59 +183,9 @@ function link_pages($before='
', $after='
', $next_or_number='number', } -/* -Post-meta: Custom per-post fields. -*/ - - -function get_post_custom( $post_id = 0 ) { - global $id, $post_meta_cache, $wpdb; - - if ( ! $post_id ) - $post_id = $id; - - if ( isset($post_meta_cache[$post_id]) ) - return $post_meta_cache[$post_id]; - - if ( $meta_list = $wpdb->get_results("SELECT post_id, meta_key, meta_value FROM $wpdb->postmeta WHERE post_id = '$post_id' ORDER BY post_id, meta_key", ARRAY_A) ) { - // Change from flat structure to hierarchical: - $post_meta_cache = array(); - foreach ( $meta_list as $metarow ) { - $mpid = $metarow['post_id']; - $mkey = $metarow['meta_key']; - $mval = $metarow['meta_value']; - - // Force subkeys to be array type: - if ( !isset($post_meta_cache[$mpid]) || !is_array($post_meta_cache[$mpid]) ) - $post_meta_cache[$mpid] = array(); - - if ( !isset($post_meta_cache[$mpid]["$mkey"]) || !is_array($post_meta_cache[$mpid]["$mkey"]) ) - $post_meta_cache[$mpid]["$mkey"] = array(); - - // Add a value to the current pid/key: - $post_meta_cache[$mpid][$mkey][] = $mval; - } - return $post_meta_cache[$mpid]; - } -} - - -function get_post_custom_keys() { - $custom = get_post_custom(); - - if ( ! is_array($custom) ) - return; - - if ( $keys = array_keys($custom) ) - return $keys; -} - - -function get_post_custom_values( $key = '' ) { - $custom = get_post_custom(); - - return $custom[$key]; -} +// +// Post-meta: Custom per-post fields. +// function post_custom( $key = '' ) { @@ -274,107 +217,9 @@ function the_meta() { } -/* -Pages -*/ - -function walk_page_tree() { - $walker = new Walker_Page; - $args = func_get_args(); - return call_user_func_array(array(&$walker, 'walk'), $args); -} - -function walk_page_dropdown_tree() { - $walker = new Walker_PageDropdown; - $args = func_get_args(); - return call_user_func_array(array(&$walker, 'walk'), $args); -} - -function &get_page_children($page_id, $pages) { - global $page_cache; - - if ( empty($pages) ) - $pages = &$page_cache; - - $page_list = array(); - foreach ( $pages as $page ) { - if ( $page->post_parent == $page_id ) { - $page_list[] = $page; - if ( $children = get_page_children($page->ID, $pages) ) - $page_list = array_merge($page_list, $children); - } - } - return $page_list; -} - - -function &get_pages($args = '') { - global $wpdb; - - if ( is_array($args) ) - $r = &$args; - else - parse_str($args, $r); - - $defaults = array('child_of' => 0, 'sort_order' => 'ASC', 'sort_column' => 'post_title', - 'hierarchical' => 1, 'exclude' => '', 'include' => '', 'meta_key' => '', 'meta_value' => ''); - $r = array_merge($defaults, $r); - extract($r); - - $inclusions = ''; - if ( !empty($include) ) { - $child_of = 0; //ignore child_of, exclude, meta_key, and meta_value params if using include - $exclude = ''; - $meta_key = ''; - $meta_value = ''; - $incpages = preg_split('/[\s,]+/',$include); - if ( count($incpages) ) { - foreach ( $incpages as $incpage ) { - if (empty($inclusions)) - $inclusions = ' AND ( ID = ' . intval($incpage) . ' '; - else - $inclusions .= ' OR ID = ' . intval($incpage) . ' '; - } - } - } - if (!empty($inclusions)) - $inclusions .= ')'; - - $exclusions = ''; - if ( !empty($exclude) ) { - $expages = preg_split('/[\s,]+/',$exclude); - if ( count($expages) ) { - foreach ( $expages as $expage ) { - if (empty($exclusions)) - $exclusions = ' AND ( ID <> ' . intval($expage) . ' '; - else - $exclusions .= ' AND ID <> ' . intval($expage) . ' '; - } - } - } - if (!empty($exclusions)) - $exclusions .= ')'; - - $query = "SELECT * FROM $wpdb->posts " ; - $query .= ( empty( $meta_key ) ? "" : ", $wpdb->postmeta " ) ; - $query .= " WHERE (post_type = 'page' AND post_status = 'publish') $exclusions $inclusions " ; - $query .= ( empty( $meta_key ) | empty($meta_value) ? "" : " AND ($wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = '$meta_key' AND $wpdb->postmeta.meta_value = '$meta_value' )" ) ; - $query .= " ORDER BY " . $sort_column . " " . $sort_order ; - - $pages = $wpdb->get_results($query); - $pages = apply_filters('get_pages', $pages, $r); - - if ( empty($pages) ) - return array(); - - // Update cache. - update_page_cache($pages); - - if ( $child_of || $hierarchical ) - $pages = & get_page_children($child_of, $pages); - - return $pages; -} +// +// Pages +// function wp_dropdown_pages($args = '') { if ( is_array($args) ) @@ -439,6 +284,26 @@ function wp_list_pages($args = '') { return $output; } +// +// Page helpers +// + +function walk_page_tree() { + $walker = new Walker_Page; + $args = func_get_args(); + return call_user_func_array(array(&$walker, 'walk'), $args); +} + +function walk_page_dropdown_tree() { + $walker = new Walker_PageDropdown; + $args = func_get_args(); + return call_user_func_array(array(&$walker, 'walk'), $args); +} + +// +// Attachments +// + function the_attachment_link($id = 0, $fullsize = false, $max_dims = false) { echo get_the_attachment_link($id, $fullsize, $max_dims); } @@ -561,4 +426,17 @@ function prepend_attachment($content) { return "$p\n$content"; } +// +// Misc +// + +function get_the_password_form() { + $output = '
+

' . __("This post is password protected. To view it please enter your password below:") . '

+

+
+ '; + return $output; +} + ?> diff --git a/wp-includes/functions-post.php b/wp-includes/post.php similarity index 65% rename from wp-includes/functions-post.php rename to wp-includes/post.php index 7c2e497de..578f44ca5 100644 --- a/wp-includes/functions-post.php +++ b/wp-includes/post.php @@ -1,10 +1,414 @@ post_parent; + else + return false; + } elseif ( is_object($post) ) { + $post_parent = $post->post_parent; + } else { + $post_parent = $post; + } + + $post_parent = (int) $post_parent; + + $query = "SELECT * FROM $wpdb->posts WHERE post_parent = $post_parent"; + + $children = $wpdb->get_results($query); + + if ( $children ) { + foreach ( $children as $key => $child ) { + $post_cache[$child->ID] =& $children[$key]; + $kids[$child->ID] =& $children[$key]; + } + } else { + return false; + } + + if ( $output == OBJECT ) { + return $kids; + } elseif ( $output == ARRAY_A ) { + foreach ( $kids as $kid ) + $weeuns[$kid->ID] = get_object_vars($kids[$kid->ID]); + return $weeuns; + } elseif ( $output == ARRAY_N ) { + foreach ( $kids as $kid ) + $babes[$kid->ID] = array_values(get_object_vars($kids[$kid->ID])); + return $babes; + } else { + return $kids; + } +} + +// get extended entry info () +function get_extended($post) { + list($main,$extended) = explode('', $post, 2); + + // Strip leading and trailing whitespace + $main = preg_replace('/^[\s]*(.*)[\s]*$/','\\1',$main); + $extended = preg_replace('/^[\s]*(.*)[\s]*$/','\\1',$extended); + + return array('main' => $main, 'extended' => $extended); +} + +// Retrieves post data given a post ID or post object. +// Handles post caching. +function &get_post(&$post, $output = OBJECT) { + global $post_cache, $wpdb; + + if ( empty($post) ) { + if ( isset($GLOBALS['post']) ) + $_post = & $GLOBALS['post']; + else + $_post = null; + } elseif ( is_object($post) ) { + if ( 'page' == $post->post_type ) + return get_page($post, $output); + if ( !isset($post_cache[$post->ID]) ) + $post_cache[$post->ID] = &$post; + $_post = & $post_cache[$post->ID]; + } else { + if ( $_post = wp_cache_get($post, 'pages') ) + return get_page($_post, $output); + elseif ( isset($post_cache[$post]) ) + $_post = & $post_cache[$post]; + else { + $query = "SELECT * FROM $wpdb->posts WHERE ID = '$post' LIMIT 1"; + $_post = & $wpdb->get_row($query); + if ( 'page' == $_post->post_type ) + return get_page($_post, $output); + $post_cache[$post] = & $_post; + } + } + + if ( defined(WP_IMPORTING) ) + unset($post_cache); + + if ( $output == OBJECT ) { + return $_post; + } elseif ( $output == ARRAY_A ) { + return get_object_vars($_post); + } elseif ( $output == ARRAY_N ) { + return array_values(get_object_vars($_post)); + } else { + return $_post; + } +} + +// Takes a post ID, returns its mime type. +function get_post_mime_type($ID = '') { + $post = & get_post($ID); + + if ( is_object($post) ) + return $post->post_mime_type; + + return false; +} + +function get_post_status($ID = '') { + $post = get_post($ID); + + if ( is_object($post) ) { + if ( ('attachment' == $post->post_type) && $post->post_parent && ($post->ID != $post->post_parent) ) + return get_post_status($post->post_parent); + else + return $post->post_status; + } + + return false; +} + +function get_post_type($post = false) { + global $wpdb, $posts; + + if ( false === $post ) + $post = $posts[0]; + elseif ( (int) $post ) + $post = get_post($post, OBJECT); + + if ( is_object($post) ) + return $post->post_type; + + return false; +} + + +// +// Post meta functions +// + +function add_post_meta($post_id, $key, $value, $unique = false) { + global $wpdb, $post_meta_cache; + + if ( $unique ) { + if ( $wpdb->get_var("SELECT meta_key FROM $wpdb->postmeta WHERE meta_key += '$key' AND post_id = '$post_id'") ) { + return false; + } + } + + $original = $value; + if ( is_array($value) || is_object($value) ) + $value = $wpdb->escape(serialize($value)); + + $wpdb->query("INSERT INTO $wpdb->postmeta (post_id,meta_key,meta_value) VALUES ('$post_id','$key','$value')"); + + $post_meta_cache['$post_id'][$key][] = $original; + + return true; +} + +function delete_post_meta($post_id, $key, $value = '') { + global $wpdb, $post_meta_cache; + + if ( empty($value) ) { + $meta_id = $wpdb->get_var("SELECT meta_id FROM $wpdb->postmeta WHERE +post_id = '$post_id' AND meta_key = '$key'"); + } else { + $meta_id = $wpdb->get_var("SELECT meta_id FROM $wpdb->postmeta WHERE +post_id = '$post_id' AND meta_key = '$key' AND meta_value = '$value'"); + } + + if ( !$meta_id ) + return false; + + if ( empty($value) ) { + $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = '$post_id' +AND meta_key = '$key'"); + unset($post_meta_cache['$post_id'][$key]); + } else { + $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = '$post_id' +AND meta_key = '$key' AND meta_value = '$value'"); + $cache_key = $post_meta_cache['$post_id'][$key]; + if ($cache_key) foreach ( $cache_key as $index => $data ) + if ( $data == $value ) + unset($post_meta_cache['$post_id'][$key][$index]); + } + + unset($post_meta_cache['$post_id'][$key]); + + return true; +} + +function get_post_meta($post_id, $key, $single = false) { + global $wpdb, $post_meta_cache; + + if ( isset($post_meta_cache[$post_id][$key]) ) { + if ( $single ) { + return maybe_unserialize( $post_meta_cache[$post_id][$key][0] ); + } else { + return maybe_unserialize( $post_meta_cache[$post_id][$key] ); + } + } + + $metalist = $wpdb->get_results("SELECT meta_value FROM $wpdb->postmeta WHERE post_id = '$post_id' AND meta_key = '$key'", ARRAY_N); + + $values = array(); + if ( $metalist ) { + foreach ($metalist as $metarow) { + $values[] = $metarow[0]; + } + } + + if ( $single ) { + if ( count($values) ) { + $return = maybe_unserialize( $values[0] ); + } else { + return ''; + } + } else { + $return = $values; + } + + return maybe_unserialize($return); +} + +function update_post_meta($post_id, $key, $value, $prev_value = '') { + global $wpdb, $post_meta_cache; + + $original_value = $value; + if ( is_array($value) || is_object($value) ) + $value = $wpdb->escape(serialize($value)); + + $original_prev = $prev_value; + if ( is_array($prev_value) || is_object($prev_value) ) + $prev_value = $wpdb->escape(serialize($prev_value)); + + if (! $wpdb->get_var("SELECT meta_key FROM $wpdb->postmeta WHERE meta_key += '$key' AND post_id = '$post_id'") ) { + return false; + } + + if ( empty($prev_value) ) { + $wpdb->query("UPDATE $wpdb->postmeta SET meta_value = '$value' WHERE +meta_key = '$key' AND post_id = '$post_id'"); + $cache_key = $post_meta_cache['$post_id'][$key]; + if ( !empty($cache_key) ) + foreach ($cache_key as $index => $data) + $post_meta_cache['$post_id'][$key][$index] = $original_value; + } else { + $wpdb->query("UPDATE $wpdb->postmeta SET meta_value = '$value' WHERE +meta_key = '$key' AND post_id = '$post_id' AND meta_value = '$prev_value'"); + $cache_key = $post_meta_cache['$post_id'][$key]; + if ( !empty($cache_key) ) + foreach ($cache_key as $index => $data) + if ( $data == $original_prev ) + $post_meta_cache['$post_id'][$key][$index] = $original_value; + } + + return true; +} + + +function get_post_custom( $post_id = 0 ) { + global $id, $post_meta_cache, $wpdb; + + if ( ! $post_id ) + $post_id = $id; + + if ( isset($post_meta_cache[$post_id]) ) + return $post_meta_cache[$post_id]; + + if ( $meta_list = $wpdb->get_results("SELECT post_id, meta_key, meta_value FROM $wpdb->postmeta WHERE post_id = '$post_id' ORDER BY post_id, meta_key", ARRAY_A) ) { + // Change from flat structure to hierarchical: + $post_meta_cache = array(); + foreach ( $meta_list as $metarow ) { + $mpid = $metarow['post_id']; + $mkey = $metarow['meta_key']; + $mval = $metarow['meta_value']; + + // Force subkeys to be array type: + if ( !isset($post_meta_cache[$mpid]) || !is_array($post_meta_cache[$mpid]) ) + $post_meta_cache[$mpid] = array(); + + if ( !isset($post_meta_cache[$mpid]["$mkey"]) || !is_array($post_meta_cache[$mpid]["$mkey"]) ) + $post_meta_cache[$mpid]["$mkey"] = array(); + + // Add a value to the current pid/key: + $post_meta_cache[$mpid][$mkey][] = $mval; + } + return $post_meta_cache[$mpid]; + } +} + +function get_post_custom_keys( $post_id = 0 ) { + $custom = get_post_custom( $post_id ); + + if ( ! is_array($custom) ) + return; + + if ( $keys = array_keys($custom) ) + return $keys; +} + + +function get_post_custom_values( $key = '', $post_id = 0 ) { + $custom = get_post_custom($post_id); + + return $custom[$key]; +} + +function wp_delete_post($postid = 0) { + global $wpdb, $wp_rewrite; + $postid = (int) $postid; + + if ( !$post = $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID = $postid") ) + return $post; + + if ( 'attachment' == $post->post_type ) + return wp_delete_attachment($postid); + + do_action('delete_post', $postid); + + if ( 'publish' == $post->post_status && 'post' == $post->post_type ) { + $categories = wp_get_post_categories($post->ID); + if( is_array( $categories ) ) { + foreach ( $categories as $cat_id ) { + $wpdb->query("UPDATE $wpdb->categories SET category_count = category_count - 1 WHERE cat_ID = '$cat_id'"); + wp_cache_delete($cat_id, 'category'); + } + } + } + + if ( 'page' == $post->post_type ) + $wpdb->query("UPDATE $wpdb->posts SET post_parent = $post->post_parent WHERE post_parent = $postid AND post_type = 'page'"); + + $wpdb->query("DELETE FROM $wpdb->posts WHERE ID = $postid"); + + $wpdb->query("DELETE FROM $wpdb->comments WHERE comment_post_ID = $postid"); + + $wpdb->query("DELETE FROM $wpdb->post2cat WHERE post_id = $postid"); + + $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = $postid"); + + if ( 'page' == $post->type ) { + wp_cache_delete('all_page_ids', 'pages'); + $wp_rewrite->flush_rules(); + } + + return $post; +} + +function wp_get_post_categories($post_ID = 0) { + global $wpdb; + + $post_ID = (int) $post_ID; + + $sql = "SELECT category_id + FROM $wpdb->post2cat + WHERE post_id = '$post_ID' + ORDER BY category_id"; + + $result = $wpdb->get_col($sql); + + if ( !$result ) + $result = array(); + + return array_unique($result); +} + +function wp_get_recent_posts($num = 10) { + global $wpdb; + + // Set the limit clause, if we got a limit + if ($num) { + $limit = "LIMIT $num"; + } + + $sql = "SELECT * FROM $wpdb->posts WHERE post_type = 'post' ORDER BY post_date DESC $limit"; + $result = $wpdb->get_results($sql,ARRAY_A); + + return $result?$result:array(); +} + +function wp_get_single_post($postid = 0, $mode = OBJECT) { + global $wpdb; + + $post = get_post($postid, $mode); + + // Set categories + if($mode == OBJECT) { + $post->post_category = wp_get_post_categories($postid); + } + else { + $post['post_category'] = wp_get_post_categories($postid); + } + + return $post; +} -/* - * generic function for inserting data into the posts table. - */ function wp_insert_post($postarr = array()) { global $wpdb, $wp_rewrite, $allowedtags, $user_ID; @@ -223,6 +627,418 @@ function wp_insert_post($postarr = array()) { return $post_ID; } +function wp_update_post($postarr = array()) { + global $wpdb; + + if ( is_object($postarr) ) + $postarr = get_object_vars($postarr); + + // First, get all of the original fields + $post = wp_get_single_post($postarr['ID'], ARRAY_A); + + // Escape data pulled from DB. + $post = add_magic_quotes($post); + + // Passed post category list overwrites existing category list if not empty. + if ( isset($postarr['post_category']) && is_array($postarr['post_category']) + && 0 != count($postarr['post_category']) ) + $post_cats = $postarr['post_category']; + else + $post_cats = $post['post_category']; + + // Drafts shouldn't be assigned a date unless explicitly done so by the user + if ( 'draft' == $post['post_status'] && empty($postarr['edit_date']) && empty($postarr['post_date']) && + ('0000-00-00 00:00:00' == $post['post_date']) ) + $clear_date = true; + else + $clear_date = false; + + // Merge old and new fields with new fields overwriting old ones. + $postarr = array_merge($post, $postarr); + $postarr['post_category'] = $post_cats; + if ( $clear_date ) { + $postarr['post_date'] = ''; + $postarr['post_date_gmt'] = ''; + } + + if ($postarr['post_type'] == 'attachment') + return wp_insert_attachment($postarr); + + return wp_insert_post($postarr); +} + +function wp_publish_post($post_id) { + $post = get_post($post_id); + + if ( empty($post) ) + return; + + if ( 'publish' == $post->post_status ) + return; + + return wp_update_post(array('post_status' => 'publish', 'ID' => $post_id)); +} + +function wp_set_post_categories($post_ID = 0, $post_categories = array()) { + global $wpdb; + // If $post_categories isn't already an array, make it one: + if (!is_array($post_categories) || 0 == count($post_categories)) + $post_categories = array(get_option('default_category')); + + $post_categories = array_unique($post_categories); + + // First the old categories + $old_categories = $wpdb->get_col(" + SELECT category_id + FROM $wpdb->post2cat + WHERE post_id = $post_ID"); + + if (!$old_categories) { + $old_categories = array(); + } else { + $old_categories = array_unique($old_categories); + } + + // Delete any? + $delete_cats = array_diff($old_categories,$post_categories); + + if ($delete_cats) { + foreach ($delete_cats as $del) { + $wpdb->query(" + DELETE FROM $wpdb->post2cat + WHERE category_id = $del + AND post_id = $post_ID + "); + } + } + + // Add any? + $add_cats = array_diff($post_categories, $old_categories); + + if ($add_cats) { + foreach ($add_cats as $new_cat) { + $wpdb->query(" + INSERT INTO $wpdb->post2cat (post_id, category_id) + VALUES ($post_ID, $new_cat)"); + } + } + + // Update category counts. + $all_affected_cats = array_unique(array_merge($post_categories, $old_categories)); + foreach ( $all_affected_cats as $cat_id ) { + $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->post2cat, $wpdb->posts WHERE $wpdb->posts.ID=$wpdb->post2cat.post_id AND post_status = 'publish' AND post_type = 'post' AND category_id = '$cat_id'"); + $wpdb->query("UPDATE $wpdb->categories SET category_count = '$count' WHERE cat_ID = '$cat_id'"); + wp_cache_delete($cat_id, 'category'); + } +} // wp_set_post_categories() + +// +// Trackback and ping functions +// + +function add_ping($post_id, $uri) { // Add a URI to those already pung + global $wpdb; + $pung = $wpdb->get_var("SELECT pinged FROM $wpdb->posts WHERE ID = $post_id"); + $pung = trim($pung); + $pung = preg_split('/\s/', $pung); + $pung[] = $uri; + $new = implode("\n", $pung); + $new = apply_filters('add_ping', $new); + return $wpdb->query("UPDATE $wpdb->posts SET pinged = '$new' WHERE ID = $post_id"); +} + +function get_enclosed($post_id) { // Get enclosures already enclosed for a post + global $wpdb; + $custom_fields = get_post_custom( $post_id ); + $pung = array(); + if ( !is_array( $custom_fields ) ) + return $pung; + + foreach ( $custom_fields as $key => $val ) { + if ( 'enclosure' != $key || !is_array( $val ) ) + continue; + foreach( $val as $enc ) { + $enclosure = split( "\n", $enc ); + $pung[] = trim( $enclosure[ 0 ] ); + } + } + $pung = apply_filters('get_enclosed', $pung); + return $pung; +} + +function get_pung($post_id) { // Get URIs already pung for a post + global $wpdb; + $pung = $wpdb->get_var("SELECT pinged FROM $wpdb->posts WHERE ID = $post_id"); + $pung = trim($pung); + $pung = preg_split('/\s/', $pung); + $pung = apply_filters('get_pung', $pung); + return $pung; +} + +function get_to_ping($post_id) { // Get any URIs in the todo list + global $wpdb; + $to_ping = $wpdb->get_var("SELECT to_ping FROM $wpdb->posts WHERE ID = $post_id"); + $to_ping = trim($to_ping); + $to_ping = preg_split('/\s/', $to_ping, -1, PREG_SPLIT_NO_EMPTY); + $to_ping = apply_filters('get_to_ping', $to_ping); + return $to_ping; +} + +// do trackbacks for a list of urls +// accepts a comma-separated list of trackback urls and a post id +function trackback_url_list($tb_list, $post_id) { + if (!empty($tb_list)) { + // get post data + $postdata = wp_get_single_post($post_id, ARRAY_A); + + // import postdata as variables + extract($postdata); + + // form an excerpt + $excerpt = strip_tags($post_excerpt?$post_excerpt:$post_content); + + if (strlen($excerpt) > 255) { + $excerpt = substr($excerpt,0,252) . '...'; + } + + $trackback_urls = explode(',', $tb_list); + foreach($trackback_urls as $tb_url) { + $tb_url = trim($tb_url); + trackback($tb_url, stripslashes($post_title), $excerpt, $post_id); + } + } +} + +// +// Page functions +// + +function get_all_page_ids() { + global $wpdb; + + if ( ! $page_ids = wp_cache_get('all_page_ids', 'pages') ) { + $page_ids = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE post_type = 'page'"); + wp_cache_add('all_page_ids', $page_ids, 'pages'); + } + + return $page_ids; +} + + +// Retrieves page data given a page ID or page object. +// Handles page caching. +function &get_page(&$page, $output = OBJECT) { + global $wpdb; + + if ( empty($page) ) { + if ( isset($GLOBALS['page']) ) { + $_page = & $GLOBALS['page']; + wp_cache_add($_page->ID, $_page, 'pages'); + } else { + $_page = null; + } + } elseif ( is_object($page) ) { + if ( 'post' == $page->post_type ) + return get_post($page, $output); + wp_cache_add($page->ID, $page, 'pages'); + $_page = $page; + } else { + if ( isset($GLOBALS['page']) && ($page == $GLOBALS['page']->ID) ) { + $_page = & $GLOBALS['page']; + wp_cache_add($_page->ID, $_page, 'pages'); + } elseif ( $_page = $GLOBALS['post_cache'][$page] ) { + return get_post($page, $output); + } elseif ( $_page = wp_cache_get($page, 'pages') ) { + // Got it. + } else { + $query = "SELECT * FROM $wpdb->posts WHERE ID= '$page' LIMIT 1"; + $_page = & $wpdb->get_row($query); + if ( 'post' == $_page->post_type ) + return get_post($_page, $output); + wp_cache_add($_page->ID, $_page, 'pages'); + } + } + + if ( $output == OBJECT ) { + return $_page; + } elseif ( $output == ARRAY_A ) { + return get_object_vars($_page); + } elseif ( $output == ARRAY_N ) { + return array_values(get_object_vars($_page)); + } else { + return $_page; + } +} + +function get_page_by_path($page_path, $output = OBJECT) { + global $wpdb; + $page_path = rawurlencode(urldecode($page_path)); + $page_path = str_replace('%2F', '/', $page_path); + $page_path = str_replace('%20', ' ', $page_path); + $page_paths = '/' . trim($page_path, '/'); + $leaf_path = sanitize_title(basename($page_paths)); + $page_paths = explode('/', $page_paths); + foreach($page_paths as $pathdir) + $full_path .= ($pathdir!=''?'/':'') . sanitize_title($pathdir); + + $pages = $wpdb->get_results("SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_name = '$leaf_path' AND post_type='page'"); + + if ( empty($pages) ) + return NULL; + + foreach ($pages as $page) { + $path = '/' . $leaf_path; + $curpage = $page; + while ($curpage->post_parent != 0) { + $curpage = $wpdb->get_row("SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE ID = '$curpage->post_parent' and post_type='page'"); + $path = '/' . $curpage->post_name . $path; + } + + if ( $path == $full_path ) + return get_page($page->ID, $output); + } + + return NULL; +} + +function &get_page_children($page_id, $pages) { + global $page_cache; + + if ( empty($pages) ) + $pages = &$page_cache; + + $page_list = array(); + foreach ( $pages as $page ) { + if ( $page->post_parent == $page_id ) { + $page_list[] = $page; + if ( $children = get_page_children($page->ID, $pages) ) + $page_list = array_merge($page_list, $children); + } + } + return $page_list; +} + +//fetches the pages returned as a FLAT list, but arranged in order of their hierarchy, i.e., child parents +//immediately follow their parents +function get_page_hierarchy($posts, $parent = 0) { + $result = array ( ); + if ($posts) { foreach ($posts as $post) { + if ($post->post_parent == $parent) { + $result[$post->ID] = $post->post_name; + $children = get_page_hierarchy($posts, $post->ID); + $result += $children; //append $children to $result + } + } } + return $result; +} + +function &get_pages($args = '') { + global $wpdb; + + if ( is_array($args) ) + $r = &$args; + else + parse_str($args, $r); + + $defaults = array('child_of' => 0, 'sort_order' => 'ASC', 'sort_column' => 'post_title', + 'hierarchical' => 1, 'exclude' => '', 'include' => '', 'meta_key' => '', 'meta_value' => ''); + $r = array_merge($defaults, $r); + extract($r); + + $inclusions = ''; + if ( !empty($include) ) { + $child_of = 0; //ignore child_of, exclude, meta_key, and meta_value params if using include + $exclude = ''; + $meta_key = ''; + $meta_value = ''; + $incpages = preg_split('/[\s,]+/',$include); + if ( count($incpages) ) { + foreach ( $incpages as $incpage ) { + if (empty($inclusions)) + $inclusions = ' AND ( ID = ' . intval($incpage) . ' '; + else + $inclusions .= ' OR ID = ' . intval($incpage) . ' '; + } + } + } + if (!empty($inclusions)) + $inclusions .= ')'; + + $exclusions = ''; + if ( !empty($exclude) ) { + $expages = preg_split('/[\s,]+/',$exclude); + if ( count($expages) ) { + foreach ( $expages as $expage ) { + if (empty($exclusions)) + $exclusions = ' AND ( ID <> ' . intval($expage) . ' '; + else + $exclusions .= ' AND ID <> ' . intval($expage) . ' '; + } + } + } + if (!empty($exclusions)) + $exclusions .= ')'; + + $query = "SELECT * FROM $wpdb->posts " ; + $query .= ( empty( $meta_key ) ? "" : ", $wpdb->postmeta " ) ; + $query .= " WHERE (post_type = 'page' AND post_status = 'publish') $exclusions $inclusions " ; + $query .= ( empty( $meta_key ) | empty($meta_value) ? "" : " AND ($wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = '$meta_key' AND $wpdb->postmeta.meta_value = '$meta_value' )" ) ; + $query .= " ORDER BY " . $sort_column . " " . $sort_order ; + + $pages = $wpdb->get_results($query); + $pages = apply_filters('get_pages', $pages, $r); + + if ( empty($pages) ) + return array(); + + // Update cache. + update_page_cache($pages); + + if ( $child_of || $hierarchical ) + $pages = & get_page_children($child_of, $pages); + + return $pages; +} + +function generate_page_uri_index() { + global $wpdb; + + //get pages in order of hierarchy, i.e. children after parents + $posts = get_page_hierarchy($wpdb->get_results("SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_type = 'page'")); + //now reverse it, because we need parents after children for rewrite rules to work properly + $posts = array_reverse($posts, true); + + $page_uris = array(); + $page_attachment_uris = array(); + + if ($posts) { + + foreach ($posts as $id => $post) { + + // URI => page name + $uri = get_page_uri($id); + $attachments = $wpdb->get_results("SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_type = 'attachment' AND post_parent = '$id'"); + if ( $attachments ) { + foreach ( $attachments as $attachment ) { + $attach_uri = get_page_uri($attachment->ID); + $page_attachment_uris[$attach_uri] = $attachment->ID; + } + } + + $page_uris[$uri] = $id; + } + + update_option('page_uris', $page_uris); + + if ( $page_attachment_uris ) + update_option('page_attachment_uris', $page_attachment_uris); + } +} + +// +// Attachment functions +// + function wp_insert_attachment($object, $file = false, $post_parent = 0) { global $wpdb, $user_ID; @@ -404,686 +1220,4 @@ function wp_delete_attachment($postid) { return $post; } -function wp_get_single_post($postid = 0, $mode = OBJECT) { - global $wpdb; - - $post = get_post($postid, $mode); - - // Set categories - if($mode == OBJECT) { - $post->post_category = wp_get_post_categories($postid); - } - else { - $post['post_category'] = wp_get_post_categories($postid); - } - - return $post; -} - -function wp_get_recent_posts($num = 10) { - global $wpdb; - - // Set the limit clause, if we got a limit - if ($num) { - $limit = "LIMIT $num"; - } - - $sql = "SELECT * FROM $wpdb->posts WHERE post_type = 'post' ORDER BY post_date DESC $limit"; - $result = $wpdb->get_results($sql,ARRAY_A); - - return $result?$result:array(); -} - -function wp_update_post($postarr = array()) { - global $wpdb; - - if ( is_object($postarr) ) - $postarr = get_object_vars($postarr); - - // First, get all of the original fields - $post = wp_get_single_post($postarr['ID'], ARRAY_A); - - // Escape data pulled from DB. - $post = add_magic_quotes($post); - - // Passed post category list overwrites existing category list if not empty. - if ( isset($postarr['post_category']) && is_array($postarr['post_category']) - && 0 != count($postarr['post_category']) ) - $post_cats = $postarr['post_category']; - else - $post_cats = $post['post_category']; - - // Drafts shouldn't be assigned a date unless explicitly done so by the user - if ( 'draft' == $post['post_status'] && empty($postarr['edit_date']) && empty($postarr['post_date']) && - ('0000-00-00 00:00:00' == $post['post_date']) ) - $clear_date = true; - else - $clear_date = false; - - // Merge old and new fields with new fields overwriting old ones. - $postarr = array_merge($post, $postarr); - $postarr['post_category'] = $post_cats; - if ( $clear_date ) { - $postarr['post_date'] = ''; - $postarr['post_date_gmt'] = ''; - } - - if ($postarr['post_type'] == 'attachment') - return wp_insert_attachment($postarr); - - return wp_insert_post($postarr); -} - -function wp_publish_post($post_id) { - $post = get_post($post_id); - - if ( empty($post) ) - return; - - if ( 'publish' == $post->post_status ) - return; - - return wp_update_post(array('post_status' => 'publish', 'ID' => $post_id)); -} - -function wp_get_post_categories($post_ID = 0) { - global $wpdb; - - $post_ID = (int) $post_ID; - - $sql = "SELECT category_id - FROM $wpdb->post2cat - WHERE post_id = '$post_ID' - ORDER BY category_id"; - - $result = $wpdb->get_col($sql); - - if ( !$result ) - $result = array(); - - return array_unique($result); -} - -function wp_set_post_categories($post_ID = 0, $post_categories = array()) { - global $wpdb; - // If $post_categories isn't already an array, make it one: - if (!is_array($post_categories) || 0 == count($post_categories)) - $post_categories = array(get_option('default_category')); - - $post_categories = array_unique($post_categories); - - // First the old categories - $old_categories = $wpdb->get_col(" - SELECT category_id - FROM $wpdb->post2cat - WHERE post_id = $post_ID"); - - if (!$old_categories) { - $old_categories = array(); - } else { - $old_categories = array_unique($old_categories); - } - - // Delete any? - $delete_cats = array_diff($old_categories,$post_categories); - - if ($delete_cats) { - foreach ($delete_cats as $del) { - $wpdb->query(" - DELETE FROM $wpdb->post2cat - WHERE category_id = $del - AND post_id = $post_ID - "); - } - } - - // Add any? - $add_cats = array_diff($post_categories, $old_categories); - - if ($add_cats) { - foreach ($add_cats as $new_cat) { - $wpdb->query(" - INSERT INTO $wpdb->post2cat (post_id, category_id) - VALUES ($post_ID, $new_cat)"); - } - } - - // Update category counts. - $all_affected_cats = array_unique(array_merge($post_categories, $old_categories)); - foreach ( $all_affected_cats as $cat_id ) { - $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->post2cat, $wpdb->posts WHERE $wpdb->posts.ID=$wpdb->post2cat.post_id AND post_status = 'publish' AND post_type = 'post' AND category_id = '$cat_id'"); - $wpdb->query("UPDATE $wpdb->categories SET category_count = '$count' WHERE cat_ID = '$cat_id'"); - wp_cache_delete($cat_id, 'category'); - } -} // wp_set_post_categories() - -function wp_delete_post($postid = 0) { - global $wpdb, $wp_rewrite; - $postid = (int) $postid; - - if ( !$post = $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID = $postid") ) - return $post; - - if ( 'attachment' == $post->post_type ) - return wp_delete_attachment($postid); - - do_action('delete_post', $postid); - - if ( 'publish' == $post->post_status && 'post' == $post->post_type ) { - $categories = wp_get_post_categories($post->ID); - if( is_array( $categories ) ) { - foreach ( $categories as $cat_id ) { - $wpdb->query("UPDATE $wpdb->categories SET category_count = category_count - 1 WHERE cat_ID = '$cat_id'"); - wp_cache_delete($cat_id, 'category'); - } - } - } - - if ( 'page' == $post->post_type ) - $wpdb->query("UPDATE $wpdb->posts SET post_parent = $post->post_parent WHERE post_parent = $postid AND post_type = 'page'"); - - $wpdb->query("DELETE FROM $wpdb->posts WHERE ID = $postid"); - - $wpdb->query("DELETE FROM $wpdb->comments WHERE comment_post_ID = $postid"); - - $wpdb->query("DELETE FROM $wpdb->post2cat WHERE post_id = $postid"); - - $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = $postid"); - - if ( 'page' == $post->type ) { - wp_cache_delete('all_page_ids', 'pages'); - $wp_rewrite->flush_rules(); - } - - return $post; -} - -/**** /DB Functions ****/ - -/**** Misc ****/ - -// get permalink from post ID -function post_permalink($post_id = 0, $mode = '') { // $mode legacy - return get_permalink($post_id); -} - -// Get author's preferred display name -function get_author_name( $auth_id ) { - $authordata = get_userdata( $auth_id ); - - return $authordata->display_name; -} - -// get extended entry info () -function get_extended($post) { - list($main,$extended) = explode('', $post, 2); - - // Strip leading and trailing whitespace - $main = preg_replace('/^[\s]*(.*)[\s]*$/','\\1',$main); - $extended = preg_replace('/^[\s]*(.*)[\s]*$/','\\1',$extended); - - return array('main' => $main, 'extended' => $extended); -} - -// do trackbacks for a list of urls -// borrowed from edit.php -// accepts a comma-separated list of trackback urls and a post id -function trackback_url_list($tb_list, $post_id) { - if (!empty($tb_list)) { - // get post data - $postdata = wp_get_single_post($post_id, ARRAY_A); - - // import postdata as variables - extract($postdata); - - // form an excerpt - $excerpt = strip_tags($post_excerpt?$post_excerpt:$post_content); - - if (strlen($excerpt) > 255) { - $excerpt = substr($excerpt,0,252) . '...'; - } - - $trackback_urls = explode(',', $tb_list); - foreach($trackback_urls as $tb_url) { - $tb_url = trim($tb_url); - trackback($tb_url, stripslashes($post_title), $excerpt, $post_id); - } - } -} - -function wp_blacklist_check($author, $email, $url, $comment, $user_ip, $user_agent) { - global $wpdb; - - do_action('wp_blacklist_check', $author, $email, $url, $comment, $user_ip, $user_agent); - - if ( preg_match_all('/&#(\d+);/', $comment . $author . $url, $chars) ) { - foreach ($chars[1] as $char) { - // If it's an encoded char in the normal ASCII set, reject - if ( 38 == $char ) - continue; // Unless it's & - if ($char < 128) - return true; - } - } - - $mod_keys = trim( get_settings('blacklist_keys') ); - if ('' == $mod_keys ) - return false; // If moderation keys are empty - $words = explode("\n", $mod_keys ); - - foreach ($words as $word) { - $word = trim($word); - - // Skip empty lines - if ( empty($word) ) { continue; } - - // Do some escaping magic so that '#' chars in the - // spam words don't break things: - $word = preg_quote($word, '#'); - - $pattern = "#$word#i"; - if ( preg_match($pattern, $author ) ) return true; - if ( preg_match($pattern, $email ) ) return true; - if ( preg_match($pattern, $url ) ) return true; - if ( preg_match($pattern, $comment ) ) return true; - if ( preg_match($pattern, $user_ip ) ) return true; - if ( preg_match($pattern, $user_agent) ) return true; - } - - if ( isset($_SERVER['REMOTE_ADDR']) ) { - if ( wp_proxy_check($_SERVER['REMOTE_ADDR']) ) return true; - } - - return false; -} - -function wp_proxy_check($ipnum) { - if ( get_option('open_proxy_check') && isset($ipnum) ) { - $rev_ip = implode( '.', array_reverse( explode( '.', $ipnum ) ) ); - $lookup = $rev_ip . '.opm.blitzed.org.'; - if ( $lookup != gethostbyname( $lookup ) ) - return true; - } - - return false; -} - -function do_trackbacks($post_id) { - global $wpdb; - - $post = $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID = $post_id"); - $to_ping = get_to_ping($post_id); - $pinged = get_pung($post_id); - if ( empty($to_ping) ) { - $wpdb->query("UPDATE $wpdb->posts SET to_ping = '' WHERE ID = '$post_id'"); - return; - } - - if (empty($post->post_excerpt)) - $excerpt = apply_filters('the_content', $post->post_content); - else - $excerpt = apply_filters('the_excerpt', $post->post_excerpt); - $excerpt = str_replace(']]>', ']]>', $excerpt); - $excerpt = strip_tags($excerpt); - if ( function_exists('mb_strcut') ) // For international trackbacks - $excerpt = mb_strcut($excerpt, 0, 252, get_settings('blog_charset')) . '...'; - else - $excerpt = substr($excerpt, 0, 252) . '...'; - - $post_title = apply_filters('the_title', $post->post_title); - $post_title = strip_tags($post_title); - - if ($to_ping) : foreach ($to_ping as $tb_ping) : - $tb_ping = trim($tb_ping); - if ( !in_array($tb_ping, $pinged) ) { - trackback($tb_ping, $post_title, $excerpt, $post_id); - $pinged[] = $tb_ping; - } else { - $wpdb->query("UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, '$tb_ping', '')) WHERE ID = '$post_id'"); - } - endforeach; endif; -} - -function get_pung($post_id) { // Get URIs already pung for a post - global $wpdb; - $pung = $wpdb->get_var("SELECT pinged FROM $wpdb->posts WHERE ID = $post_id"); - $pung = trim($pung); - $pung = preg_split('/\s/', $pung); - $pung = apply_filters('get_pung', $pung); - return $pung; -} - -function get_enclosed($post_id) { // Get enclosures already enclosed for a post - global $wpdb; - $custom_fields = get_post_custom( $post_id ); - $pung = array(); - if ( !is_array( $custom_fields ) ) - return $pung; - - foreach ( $custom_fields as $key => $val ) { - if ( 'enclosure' != $key || !is_array( $val ) ) - continue; - foreach( $val as $enc ) { - $enclosure = split( "\n", $enc ); - $pung[] = trim( $enclosure[ 0 ] ); - } - } - $pung = apply_filters('get_enclosed', $pung); - return $pung; -} - -function get_to_ping($post_id) { // Get any URIs in the todo list - global $wpdb; - $to_ping = $wpdb->get_var("SELECT to_ping FROM $wpdb->posts WHERE ID = $post_id"); - $to_ping = trim($to_ping); - $to_ping = preg_split('/\s/', $to_ping, -1, PREG_SPLIT_NO_EMPTY); - $to_ping = apply_filters('get_to_ping', $to_ping); - return $to_ping; -} - -function add_ping($post_id, $uri) { // Add a URI to those already pung - global $wpdb; - $pung = $wpdb->get_var("SELECT pinged FROM $wpdb->posts WHERE ID = $post_id"); - $pung = trim($pung); - $pung = preg_split('/\s/', $pung); - $pung[] = $uri; - $new = implode("\n", $pung); - $new = apply_filters('add_ping', $new); - return $wpdb->query("UPDATE $wpdb->posts SET pinged = '$new' WHERE ID = $post_id"); -} - -//fetches the pages returned as a FLAT list, but arranged in order of their hierarchy, i.e., child parents -//immediately follow their parents -function get_page_hierarchy($posts, $parent = 0) { - $result = array ( ); - if ($posts) { foreach ($posts as $post) { - if ($post->post_parent == $parent) { - $result[$post->ID] = $post->post_name; - $children = get_page_hierarchy($posts, $post->ID); - $result += $children; //append $children to $result - } - } } - return $result; -} - -function generate_page_uri_index() { - global $wpdb; - - //get pages in order of hierarchy, i.e. children after parents - $posts = get_page_hierarchy($wpdb->get_results("SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_type = 'page'")); - //now reverse it, because we need parents after children for rewrite rules to work properly - $posts = array_reverse($posts, true); - - $page_uris = array(); - $page_attachment_uris = array(); - - if ($posts) { - - foreach ($posts as $id => $post) { - - // URI => page name - $uri = get_page_uri($id); - $attachments = $wpdb->get_results("SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_type = 'attachment' AND post_parent = '$id'"); - if ( $attachments ) { - foreach ( $attachments as $attachment ) { - $attach_uri = get_page_uri($attachment->ID); - $page_attachment_uris[$attach_uri] = $attachment->ID; - } - } - - $page_uris[$uri] = $id; - } - - update_option('page_uris', $page_uris); - - if ( $page_attachment_uris ) - update_option('page_attachment_uris', $page_attachment_uris); - } -} - -function get_post_status($ID = '') { - $post = get_post($ID); - - if ( is_object($post) ) { - if ( ('attachment' == $post->post_type) && $post->post_parent && ($post->ID != $post->post_parent) ) - return get_post_status($post->post_parent); - else - return $post->post_status; - } - - return false; -} - -function get_post_type($post = false) { - global $wpdb, $posts; - - if ( false === $post ) - $post = $posts[0]; - elseif ( (int) $post ) - $post = get_post($post, OBJECT); - - if ( is_object($post) ) - return $post->post_type; - - return false; -} - -// Takes a post ID, returns its mime type. -function get_post_mime_type($ID = '') { - $post = & get_post($ID); - - if ( is_object($post) ) - return $post->post_mime_type; - - return false; -} - -function get_attached_file($attachment_id) { - return get_post_meta($attachment_id, '_wp_attached_file', true); -} - -function wp_mkdir_p($target) { - // from php.net/mkdir user contributed notes - if (file_exists($target)) { - if (! @ is_dir($target)) - return false; - else - return true; - } - - // Attempting to create the directory may clutter up our display. - if (@ mkdir($target)) { - $stat = @ stat(dirname($target)); - $dir_perms = $stat['mode'] & 0007777; // Get the permission bits. - @ chmod($target, $dir_perms); - return true; - } else { - if ( is_dir(dirname($target)) ) - return false; - } - - // If the above failed, attempt to create the parent node, then try again. - if (wp_mkdir_p(dirname($target))) - return wp_mkdir_p($target); - - return false; -} - -// Returns an array containing the current upload directory's path and url, or an error message. -function wp_upload_dir() { - $siteurl = get_settings('siteurl'); - //prepend ABSPATH to $dir and $siteurl to $url if they're not already there - $path = str_replace(ABSPATH, '', trim(get_settings('upload_path'))); - $dir = ABSPATH . $path; - $url = trailingslashit($siteurl) . $path; - - if ( $dir == ABSPATH ) { //the option was empty - $dir = ABSPATH . 'wp-content/uploads'; - } - - if ( defined('UPLOADS') ) { - $dir = ABSPATH . UPLOADS; - $url = trailingslashit($siteurl) . UPLOADS; - } - - if ( get_settings('uploads_use_yearmonth_folders')) { - // Generate the yearly and monthly dirs - $time = current_time( 'mysql' ); - $y = substr( $time, 0, 4 ); - $m = substr( $time, 5, 2 ); - $dir = $dir . "/$y/$m"; - $url = $url . "/$y/$m"; - } - - // Make sure we have an uploads dir - if ( ! wp_mkdir_p( $dir ) ) { - $message = sprintf(__('Unable to create directory %s. Is its parent directory writable by the server?'), $dir); - return array('error' => $message); - } - - $uploads = array('path' => $dir, 'url' => $url, 'error' => false); - return apply_filters('upload_dir', $uploads); -} - -function wp_upload_bits($name, $type, $bits) { - if ( empty($name) ) - return array('error' => "Empty filename"); - - $upload = wp_upload_dir(); - - if ( $upload['error'] !== false ) - return $upload; - - $number = ''; - $filename = $name; - $path_parts = pathinfo($filename); - $ext = $path_parts['extension']; - if ( empty($ext) ) - $ext = ''; - else - $ext = ".$ext"; - while ( file_exists($upload['path'] . "/$filename") ) { - if ( '' == "$number$ext" ) - $filename = $filename . ++$number . $ext; - else - $filename = str_replace("$number$ext", ++$number . $ext, $filename); - } - - $new_file = $upload['path'] . "/$filename"; - if ( ! wp_mkdir_p( dirname($new_file) ) ) { - $message = sprintf(__('Unable to create directory %s. Is its parent directory writable by the server?'), dirname($new_file)); - return array('error' => $message); - } - - $ifp = @ fopen($new_file, 'wb'); - if ( ! $ifp ) - return array('error' => "Could not write file $new_file."); - - $success = @ fwrite($ifp, $bits); - fclose($ifp); - // Set correct file permissions - $stat = @ stat(dirname($new_file)); - $perms = $stat['mode'] & 0007777; - $perms = $perms & 0000666; - @ chmod($new_file, $perms); - - // Compute the URL - $url = $upload['url'] . "/$filename"; - - return array('file' => $new_file, 'url' => $url, 'error' => false); -} - -function do_all_pings() { - global $wpdb; - - // Do pingbacks - while ($ping = $wpdb->get_row("SELECT * FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = '_pingme' LIMIT 1")) { - $wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE post_id = {$ping->ID} AND meta_key = '_pingme';"); - pingback($ping->post_content, $ping->ID); - } - - // Do Enclosures - while ($enclosure = $wpdb->get_row("SELECT * FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = '_encloseme' LIMIT 1")) { - $wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE post_id = {$enclosure->ID} AND meta_key = '_encloseme';"); - do_enclose($enclosure->post_content, $enclosure->ID); - } - - // Do Trackbacks - $trackbacks = $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE CHAR_LENGTH(TRIM(to_ping)) > 7 AND post_status = 'publish'"); - if ( is_array($trackbacks) ) { - foreach ( $trackbacks as $trackback ) { - do_trackbacks($trackback->ID); - } - } - - //Do Update Services/Generic Pings - generic_ping(); -} - -/** - * Places a textarea according to the current user's preferences, filled with $content. - * Also places a script block that enables tabbing between Title and Content. - * - * @param string Editor contents - * @param string (optional) Previous form field's ID (for tabbing support) - */ -function the_editor($content, $id = 'content', $prev_id = 'title') { - $rows = get_settings('default_post_edit_rows'); - if (($rows < 3) || ($rows > 100)) - $rows = 12; - - $rows = "rows='$rows'"; - - the_quicktags(); - - if ( user_can_richedit() ) - add_filter('the_editor_content', 'wp_richedit_pre'); - - $the_editor = apply_filters('the_editor', "
\n"); - $the_editor_content = apply_filters('the_editor_content', $content); - - printf($the_editor, $the_editor_content); - - ?> - - diff --git a/wp-includes/template-functions-author.php b/wp-includes/template-functions-author.php index 3e5f2c5d9..f265b3ba2 100644 --- a/wp-includes/template-functions-author.php +++ b/wp-includes/template-functions-author.php @@ -155,6 +155,13 @@ function get_author_link($echo = false, $author_id, $author_nicename) { return $link; } +// Get author's preferred display name +function get_author_name( $auth_id ) { + $authordata = get_userdata( $auth_id ); + + return $authordata->display_name; +} + function wp_list_authors($args = '') { if ( is_array($args) ) $r = &$args; diff --git a/wp-includes/template-functions-general.php b/wp-includes/template-functions-general.php index 4d6fac415..4a80d8b4c 100644 --- a/wp-includes/template-functions-general.php +++ b/wp-includes/template-functions-general.php @@ -694,6 +694,14 @@ function the_weekday_date($before='',$after='') { echo $the_weekday_date; } +function wp_head() { + do_action('wp_head'); +} + +function wp_footer() { + do_action('wp_footer'); +} + function rsd_link() { echo '\n"; } @@ -703,4 +711,71 @@ function noindex() { if ( ! get_option('blog_public') ) echo '' . "\n"; } + +/** + * Places a textarea according to the current user's preferences, filled with $content. + * Also places a script block that enables tabbing between Title and Content. + * + * @param string Editor contents + * @param string (optional) Previous form field's ID (for tabbing support) + */ +function the_editor($content, $id = 'content', $prev_id = 'title') { + $rows = get_settings('default_post_edit_rows'); + if (($rows < 3) || ($rows > 100)) + $rows = 12; + + $rows = "rows='$rows'"; + + the_quicktags(); + + if ( user_can_richedit() ) + add_filter('the_editor_content', 'wp_richedit_pre'); + + $the_editor = apply_filters('the_editor', "
\n"); + $the_editor_content = apply_filters('the_editor_content', $content); + + printf($the_editor, $the_editor_content); + + ?> + + diff --git a/wp-includes/template-functions-links.php b/wp-includes/template-functions-links.php index 6ea29850f..8646c41b8 100644 --- a/wp-includes/template-functions-links.php +++ b/wp-includes/template-functions-links.php @@ -84,6 +84,11 @@ function get_permalink($id = 0) { } } +// 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; diff --git a/wp-settings.php b/wp-settings.php index b65dbce79..9c778f64e 100644 --- a/wp-settings.php +++ b/wp-settings.php @@ -124,7 +124,6 @@ if ( !is_blog_installed() && (!strstr($_SERVER['PHP_SELF'], 'install.php') && !d } require (ABSPATH . WPINC . '/functions-formatting.php'); -require (ABSPATH . WPINC . '/functions-post.php'); require (ABSPATH . WPINC . '/capabilities.php'); require (ABSPATH . WPINC . '/classes.php'); require (ABSPATH . WPINC . '/query.php'); @@ -132,7 +131,8 @@ require (ABSPATH . WPINC . '/theme.php'); require (ABSPATH . WPINC . '/template-functions-general.php'); require (ABSPATH . WPINC . '/template-functions-links.php'); require (ABSPATH . WPINC . '/template-functions-author.php'); -require (ABSPATH . WPINC . '/template-functions-post.php'); +require (ABSPATH . WPINC . '/post.php'); +require (ABSPATH . WPINC . '/post-template.php'); require (ABSPATH . WPINC . '/category.php'); require (ABSPATH . WPINC . '/category-template.php'); require (ABSPATH . WPINC . '/comment.php');