| 1 | Index: wp-includes/template-functions-post.php |
|---|
| 2 | =================================================================== |
|---|
| 3 | --- wp-includes/template-functions-post.php (revision 2948) |
|---|
| 4 | +++ wp-includes/template-functions-post.php (working copy) |
|---|
| 5 | @@ -411,4 +411,22 @@ |
|---|
| 6 | return $output; |
|---|
| 7 | } |
|---|
| 8 | |
|---|
| 9 | +function prepend_object($content) { |
|---|
| 10 | + global $post; |
|---|
| 11 | + |
|---|
| 12 | + $p = '<p class="subpostobject">'; |
|---|
| 13 | + |
|---|
| 14 | + if ( '' != $post->guid ) { |
|---|
| 15 | + if ( substr($post->post_type, 0, 6) == 'image/' ) |
|---|
| 16 | + $p .= '<a href="' . $post->guid . '" title="Click for full-size image" ><img class="subpostimage" src="' . $post->guid . '" alt="' . $post->post_title . '" /></a>'; |
|---|
| 17 | + else |
|---|
| 18 | + $p .= __('Attachment') . ' (' . $post->post_type . ')'; |
|---|
| 19 | + } else { |
|---|
| 20 | + $p .= __('Missing attachment'); |
|---|
| 21 | + } |
|---|
| 22 | + |
|---|
| 23 | + $p .= '</p>'; |
|---|
| 24 | + |
|---|
| 25 | + return "$p\n$content"; |
|---|
| 26 | +} |
|---|
| 27 | ?> |
|---|
| 28 | Index: wp-includes/template-loader.php |
|---|
| 29 | =================================================================== |
|---|
| 30 | --- wp-includes/template-loader.php (revision 2948) |
|---|
| 31 | +++ wp-includes/template-loader.php (working copy) |
|---|
| 32 | @@ -1,5 +1,4 @@ |
|---|
| 33 | <?php |
|---|
| 34 | - |
|---|
| 35 | if ( defined('WP_USE_THEMES') && constant('WP_USE_THEMES') ) { |
|---|
| 36 | do_action('template_redirect'); |
|---|
| 37 | if ( is_feed() ) { |
|---|
| 38 | @@ -17,10 +16,17 @@ |
|---|
| 39 | } else if ( is_home() && get_home_template() ) { |
|---|
| 40 | include(get_home_template()); |
|---|
| 41 | exit; |
|---|
| 42 | + } else if ( is_subpost() && get_subpost_template() ) { |
|---|
| 43 | + include(get_subpost_template()); |
|---|
| 44 | + exit; |
|---|
| 45 | } else if ( is_single() && get_single_template() ) { |
|---|
| 46 | + if ( is_subpost() ) |
|---|
| 47 | + add_filter('the_content', 'prepend_object'); |
|---|
| 48 | include(get_single_template()); |
|---|
| 49 | exit; |
|---|
| 50 | } else if ( is_page() && get_page_template() ) { |
|---|
| 51 | + if ( is_subpost() ) |
|---|
| 52 | + add_filter('the_content', 'prepend_object'); |
|---|
| 53 | include(get_page_template()); |
|---|
| 54 | exit; |
|---|
| 55 | } else if ( is_category() && get_category_template()) { |
|---|
| 56 | Index: wp-includes/classes.php |
|---|
| 57 | =================================================================== |
|---|
| 58 | --- wp-includes/classes.php (revision 2948) |
|---|
| 59 | +++ wp-includes/classes.php (working copy) |
|---|
| 60 | @@ -29,7 +29,7 @@ |
|---|
| 61 | var $is_404 = false; |
|---|
| 62 | var $is_comments_popup = false; |
|---|
| 63 | var $is_admin = false; |
|---|
| 64 | - var $is_object = false; |
|---|
| 65 | + var $is_subpost = false; |
|---|
| 66 | |
|---|
| 67 | function init_query_flags() { |
|---|
| 68 | $this->is_single = false; |
|---|
| 69 | @@ -49,7 +49,7 @@ |
|---|
| 70 | $this->is_404 = false; |
|---|
| 71 | $this->is_paged = false; |
|---|
| 72 | $this->is_admin = false; |
|---|
| 73 | - $this->is_object = false; |
|---|
| 74 | + $this->is_subpost = false; |
|---|
| 75 | } |
|---|
| 76 | |
|---|
| 77 | function init () { |
|---|
| 78 | @@ -90,13 +90,18 @@ |
|---|
| 79 | $qv['m'] = (int) $qv['m']; |
|---|
| 80 | $qv['p'] = (int) $qv['p']; |
|---|
| 81 | |
|---|
| 82 | + if ( ('' != $qv['subpost']) || $qv['subpost_id'] ) { |
|---|
| 83 | + $this->is_single = true; |
|---|
| 84 | + $this->is_subpost = true; |
|---|
| 85 | + } |
|---|
| 86 | + |
|---|
| 87 | if ('' != $qv['name']) { |
|---|
| 88 | $this->is_single = true; |
|---|
| 89 | } elseif ( $qv['p'] ) { |
|---|
| 90 | $this->is_single = true; |
|---|
| 91 | } elseif (('' != $qv['hour']) && ('' != $qv['minute']) &&('' != $qv['second']) && ('' != $qv['year']) && ('' != $qv['monthnum']) && ('' != $qv['day'])) { |
|---|
| 92 | // If year, month, day, hour, minute, and second are set, a single |
|---|
| 93 | - // post is being queried. |
|---|
| 94 | + // post is being queried. |
|---|
| 95 | $this->is_single = true; |
|---|
| 96 | } elseif ('' != $qv['static'] || '' != $qv['pagename'] || '' != $qv['page_id']) { |
|---|
| 97 | $this->is_page = true; |
|---|
| 98 | @@ -208,7 +213,7 @@ |
|---|
| 99 | $this->is_admin = true; |
|---|
| 100 | } |
|---|
| 101 | |
|---|
| 102 | - if ( ! ($this->is_archive || $this->is_single || $this->is_page || $this->is_search || $this->is_feed || $this->is_trackback || $this->is_404 || $this->is_admin || $this->is_comments_popup)) { |
|---|
| 103 | + if ( ! ($this->is_subpost || $this->is_archive || $this->is_single || $this->is_page || $this->is_search || $this->is_feed || $this->is_trackback || $this->is_404 || $this->is_admin || $this->is_comments_popup)) { |
|---|
| 104 | $this->is_home = true; |
|---|
| 105 | } |
|---|
| 106 | |
|---|
| 107 | @@ -335,9 +340,12 @@ |
|---|
| 108 | $q['pagename'] = sanitize_title(basename(str_replace('%2F', '/', urlencode($q['pagename'])))); |
|---|
| 109 | $q['name'] = $q['pagename']; |
|---|
| 110 | $where .= " AND post_name = '" . $q['pagename'] . "'"; |
|---|
| 111 | + } elseif ('' != $q['subpost']) { |
|---|
| 112 | + $q['subpost'] = sanitize_title($q['subpost']); |
|---|
| 113 | + $q['name'] = $q['subpost']; |
|---|
| 114 | + $where .= " AND post_name = '" . $q['subpost'] . "'"; |
|---|
| 115 | } |
|---|
| 116 | |
|---|
| 117 | - |
|---|
| 118 | if ( (int) $q['w'] ) { |
|---|
| 119 | $q['w'] = ''.intval($q['w']); |
|---|
| 120 | $where .= " AND WEEK(post_date, 1)='" . $q['w'] . "'"; |
|---|
| 121 | @@ -346,6 +354,10 @@ |
|---|
| 122 | if ( intval($q['comments_popup']) ) |
|---|
| 123 | $q['p'] = intval($q['comments_popup']); |
|---|
| 124 | |
|---|
| 125 | + // If a subpost is requested by number, let it supercede any post number. |
|---|
| 126 | + if ( ($q['subpost_id'] != '') && (intval($q['subpost_id']) != 0) ) |
|---|
| 127 | + $q['p'] = (int) $q['subpost_id']; |
|---|
| 128 | + |
|---|
| 129 | // If a post number is specified, load that post |
|---|
| 130 | if (($q['p'] != '') && intval($q['p']) != 0) { |
|---|
| 131 | $q['p'] = (int) $q['p']; |
|---|
| 132 | @@ -516,7 +528,9 @@ |
|---|
| 133 | $distinct = 'DISTINCT'; |
|---|
| 134 | } |
|---|
| 135 | |
|---|
| 136 | - if ($this->is_page) { |
|---|
| 137 | + if ( $this->is_subpost ) { |
|---|
| 138 | + $where .= ' AND (post_status = "object")'; |
|---|
| 139 | + } elseif ($this->is_page) { |
|---|
| 140 | $where .= ' AND (post_status = "static")'; |
|---|
| 141 | } elseif ($this->is_single) { |
|---|
| 142 | $where .= ' AND (post_status != "static")'; |
|---|
| 143 | @@ -529,7 +543,7 @@ |
|---|
| 144 | $where .= ')'; |
|---|
| 145 | } |
|---|
| 146 | |
|---|
| 147 | - if (! $this->is_object ) |
|---|
| 148 | + if (! $this->is_subpost ) |
|---|
| 149 | $where .= ' AND post_status != "object"'; |
|---|
| 150 | |
|---|
| 151 | // Apply filters on where and join prior to paging so that any |
|---|
| 152 | @@ -575,16 +589,17 @@ |
|---|
| 153 | |
|---|
| 154 | // Check post status to determine if post should be displayed. |
|---|
| 155 | if ($this->is_single) { |
|---|
| 156 | - if ('publish' != $this->posts[0]->post_status) { |
|---|
| 157 | + $status = get_post_status($this->posts[0]); |
|---|
| 158 | + if ('publish' != $status) { |
|---|
| 159 | if ( ! (isset($user_ID) && ('' != intval($user_ID))) ) { |
|---|
| 160 | // User must be logged in to view unpublished posts. |
|---|
| 161 | $this->posts = array(); |
|---|
| 162 | } else { |
|---|
| 163 | - if ('draft' == $this->posts[0]->post_status) { |
|---|
| 164 | + if ('draft' == $status) { |
|---|
| 165 | // User must have edit permissions on the draft to preview. |
|---|
| 166 | if (! user_can_edit_post($user_ID, $this->posts[0]->ID)) |
|---|
| 167 | $this->posts = array(); |
|---|
| 168 | - } elseif ('private' == $this->posts[0]->post_status) { |
|---|
| 169 | + } elseif ('private' == $status) { |
|---|
| 170 | if ($this->posts[0]->post_author != $user_ID) |
|---|
| 171 | $this->posts = array(); |
|---|
| 172 | } |
|---|
| 173 | @@ -821,19 +836,19 @@ |
|---|
| 174 | |
|---|
| 175 | var $queryreplace = |
|---|
| 176 | array ( |
|---|
| 177 | - 'year=', |
|---|
| 178 | - 'monthnum=', |
|---|
| 179 | - 'day=', |
|---|
| 180 | - 'hour=', |
|---|
| 181 | - 'minute=', |
|---|
| 182 | - 'second=', |
|---|
| 183 | - 'name=', |
|---|
| 184 | - 'p=', |
|---|
| 185 | - 'category_name=', |
|---|
| 186 | - 'author_name=', |
|---|
| 187 | - 'pagename=', |
|---|
| 188 | - 's=' |
|---|
| 189 | - ); |
|---|
| 190 | + 'year=', |
|---|
| 191 | + 'monthnum=', |
|---|
| 192 | + 'day=', |
|---|
| 193 | + 'hour=', |
|---|
| 194 | + 'minute=', |
|---|
| 195 | + 'second=', |
|---|
| 196 | + 'name=', |
|---|
| 197 | + 'p=', |
|---|
| 198 | + 'category_name=', |
|---|
| 199 | + 'author_name=', |
|---|
| 200 | + 'pagename=', |
|---|
| 201 | + 's=' |
|---|
| 202 | + ); |
|---|
| 203 | |
|---|
| 204 | var $feeds = array ('feed', 'rdf', 'rss', 'rss2', 'atom'); |
|---|
| 205 | |
|---|
| 206 | @@ -845,16 +860,16 @@ |
|---|
| 207 | } |
|---|
| 208 | |
|---|
| 209 | function using_index_permalinks() { |
|---|
| 210 | - if (empty($this->permalink_structure)) { |
|---|
| 211 | + if (empty($this->permalink_structure)) { |
|---|
| 212 | return false; |
|---|
| 213 | - } |
|---|
| 214 | + } |
|---|
| 215 | |
|---|
| 216 | - // If the index is not in the permalink, we're using mod_rewrite. |
|---|
| 217 | - if (preg_match('#^/*' . $this->index . '#', $this->permalink_structure)) { |
|---|
| 218 | - return true; |
|---|
| 219 | - } |
|---|
| 220 | + // If the index is not in the permalink, we're using mod_rewrite. |
|---|
| 221 | + if (preg_match('#^/*' . $this->index . '#', $this->permalink_structure)) { |
|---|
| 222 | + return true; |
|---|
| 223 | + } |
|---|
| 224 | |
|---|
| 225 | - return false; |
|---|
| 226 | + return false; |
|---|
| 227 | } |
|---|
| 228 | |
|---|
| 229 | function using_mod_rewrite_permalinks() { |
|---|
| 230 | @@ -865,15 +880,15 @@ |
|---|
| 231 | } |
|---|
| 232 | |
|---|
| 233 | function preg_index($number) { |
|---|
| 234 | - $match_prefix = '$'; |
|---|
| 235 | - $match_suffix = ''; |
|---|
| 236 | - |
|---|
| 237 | - if (! empty($this->matches)) { |
|---|
| 238 | + $match_prefix = '$'; |
|---|
| 239 | + $match_suffix = ''; |
|---|
| 240 | + |
|---|
| 241 | + if (! empty($this->matches)) { |
|---|
| 242 | $match_prefix = '$' . $this->matches . '['; |
|---|
| 243 | $match_suffix = ']'; |
|---|
| 244 | - } |
|---|
| 245 | - |
|---|
| 246 | - return "$match_prefix$number$match_suffix"; |
|---|
| 247 | + } |
|---|
| 248 | + |
|---|
| 249 | + return "$match_prefix$number$match_suffix"; |
|---|
| 250 | } |
|---|
| 251 | |
|---|
| 252 | function page_rewrite_rules() { |
|---|
| 253 | @@ -897,7 +912,7 @@ |
|---|
| 254 | return $this->date_structure; |
|---|
| 255 | } |
|---|
| 256 | |
|---|
| 257 | - if (empty($this->permalink_structure)) { |
|---|
| 258 | + if (empty($this->permalink_structure)) { |
|---|
| 259 | $this->date_structure = ''; |
|---|
| 260 | return false; |
|---|
| 261 | } |
|---|
| 262 | @@ -973,7 +988,7 @@ |
|---|
| 263 | return $this->category_structure; |
|---|
| 264 | } |
|---|
| 265 | |
|---|
| 266 | - if (empty($this->permalink_structure)) { |
|---|
| 267 | + if (empty($this->permalink_structure)) { |
|---|
| 268 | $this->category_structure = ''; |
|---|
| 269 | return false; |
|---|
| 270 | } |
|---|
| 271 | @@ -993,7 +1008,7 @@ |
|---|
| 272 | return $this->author_structure; |
|---|
| 273 | } |
|---|
| 274 | |
|---|
| 275 | - if (empty($this->permalink_structure)) { |
|---|
| 276 | + if (empty($this->permalink_structure)) { |
|---|
| 277 | $this->author_structure = ''; |
|---|
| 278 | return false; |
|---|
| 279 | } |
|---|
| 280 | @@ -1008,7 +1023,7 @@ |
|---|
| 281 | return $this->search_structure; |
|---|
| 282 | } |
|---|
| 283 | |
|---|
| 284 | - if (empty($this->permalink_structure)) { |
|---|
| 285 | + if (empty($this->permalink_structure)) { |
|---|
| 286 | $this->search_structure = ''; |
|---|
| 287 | return false; |
|---|
| 288 | } |
|---|
| 289 | @@ -1023,7 +1038,7 @@ |
|---|
| 290 | return $this->page_structure; |
|---|
| 291 | } |
|---|
| 292 | |
|---|
| 293 | - if (empty($this->permalink_structure)) { |
|---|
| 294 | + if (empty($this->permalink_structure)) { |
|---|
| 295 | $this->page_structure = ''; |
|---|
| 296 | return false; |
|---|
| 297 | } |
|---|
| 298 | @@ -1038,7 +1053,7 @@ |
|---|
| 299 | return $this->feed_structure; |
|---|
| 300 | } |
|---|
| 301 | |
|---|
| 302 | - if (empty($this->permalink_structure)) { |
|---|
| 303 | + if (empty($this->permalink_structure)) { |
|---|
| 304 | $this->feed_structure = ''; |
|---|
| 305 | return false; |
|---|
| 306 | } |
|---|
| 307 | @@ -1053,7 +1068,7 @@ |
|---|
| 308 | return $this->comment_feed_structure; |
|---|
| 309 | } |
|---|
| 310 | |
|---|
| 311 | - if (empty($this->permalink_structure)) { |
|---|
| 312 | + if (empty($this->permalink_structure)) { |
|---|
| 313 | $this->comment_feed_structure = ''; |
|---|
| 314 | return false; |
|---|
| 315 | } |
|---|
| 316 | @@ -1158,6 +1173,20 @@ |
|---|
| 317 | $trackbackmatch = $match . $trackbackregex; |
|---|
| 318 | $trackbackquery = $trackbackindex . '?' . $query . '&tb=1'; |
|---|
| 319 | $match = rtrim($match, '/'); |
|---|
| 320 | + $submatchbase = str_replace(array('(',')'),'',$match); |
|---|
| 321 | + $sub1 = $submatchbase . '/([^/]+)/'; |
|---|
| 322 | + $sub1tb = $sub1 . $trackbackregex; |
|---|
| 323 | + $sub1feed = $sub1 . $feedregex; |
|---|
| 324 | + $sub1feed2 = $sub1 . $feedregex2; |
|---|
| 325 | + $sub1 .= '?$'; |
|---|
| 326 | + $sub2 = $submatchbase . '/subpost/([^/]+)/'; |
|---|
| 327 | + $sub2tb = $sub2 . $trackbackregex; |
|---|
| 328 | + $sub2feed = $sub2 . $feedregex; |
|---|
| 329 | + $sub2feed2 = $sub2 . $feedregex2; |
|---|
| 330 | + $sub2 .= '?$'; |
|---|
| 331 | + $subquery = $index . '?subpost=' . $this->preg_index(1); |
|---|
| 332 | + $subtbquery = $subquery . '&tb=1'; |
|---|
| 333 | + $subfeedquery = $subquery . '&feed=' . $this->preg_index(2); |
|---|
| 334 | $match = $match . '(/[0-9]+)?/?$'; |
|---|
| 335 | $query = $index . '?' . $query . '&page=' . $this->preg_index($num_toks + 1); |
|---|
| 336 | } else { |
|---|
| 337 | @@ -1168,7 +1197,9 @@ |
|---|
| 338 | $rewrite = $rewrite + array($match => $query); |
|---|
| 339 | |
|---|
| 340 | if ($post) { |
|---|
| 341 | - $rewrite = array($trackbackmatch => $trackbackquery) + $rewrite; |
|---|
| 342 | + $rewrite = array($trackbackmatch => $trackbackquery) + $rewrite + |
|---|
| 343 | + array($sub1 => $subquery, $sub1tb => $subtbquery, $sub1feed => $subfeedquery, $sub1feed2 => $subfeedquery) + |
|---|
| 344 | + array($sub2 => $subquery, $sub2tb => $subtbquery, $sub2feed => $subfeedquery, $sub2feed2 => $subfeedquery); |
|---|
| 345 | } |
|---|
| 346 | } |
|---|
| 347 | |
|---|
| 348 | @@ -1231,6 +1262,7 @@ |
|---|
| 349 | |
|---|
| 350 | do_action('generate_rewrite_rules', array(&$this)); |
|---|
| 351 | $this->rules = apply_filters('rewrite_rules_array', $this->rules); |
|---|
| 352 | + |
|---|
| 353 | return $this->rules; |
|---|
| 354 | } |
|---|
| 355 | |
|---|
| 356 | @@ -1329,7 +1361,7 @@ |
|---|
| 357 | } |
|---|
| 358 | |
|---|
| 359 | class WP { |
|---|
| 360 | - var $public_query_vars = array('m','p','posts','w', 'cat','withcomments','s','search','exact', 'sentence', 'debug', 'calendar','page','paged','more','tb', 'pb','author','order','orderby', 'year', 'monthnum', 'day', 'hour', 'minute', 'second', 'name', 'category_name', 'feed', 'author_name', 'static', 'pagename', 'page_id', 'error', 'comments_popup'); |
|---|
| 361 | + var $public_query_vars = array('m', 'p', 'posts', 'w', 'cat', 'withcomments', 's', 'search', 'exact', 'sentence', 'debug', 'calendar', 'page', 'paged', 'more', 'tb', 'pb', 'author', 'order', 'orderby', 'year', 'monthnum', 'day', 'hour', 'minute', 'second', 'name', 'category_name', 'feed', 'author_name', 'static', 'pagename', 'page_id', 'error', 'comments_popup', 'subpost', 'subpost_id'); |
|---|
| 362 | |
|---|
| 363 | var $private_query_vars = array('posts_per_page', 'posts_per_archive_page', 'what_to_show', 'showposts', 'nopaging'); |
|---|
| 364 | |
|---|
| 365 | @@ -1397,8 +1429,9 @@ |
|---|
| 366 | foreach ($rewrite as $match => $query) { |
|---|
| 367 | // If the requesting file is the anchor of the match, prepend it |
|---|
| 368 | // to the path info. |
|---|
| 369 | - if ((! empty($req_uri)) && (strpos($match, $req_uri) === 0)) { |
|---|
| 370 | + if ((! empty($req_uri)) && (strpos($match, $req_uri) === 0) && ($req_uri != $request)) { |
|---|
| 371 | $request_match = $req_uri . '/' . $request; |
|---|
| 372 | } |
|---|
| 373 | |
|---|
| 374 | Index: wp-includes/template-functions-links.php |
|---|
| 375 | =================================================================== |
|---|
| 376 | --- wp-includes/template-functions-links.php (revision 2948) |
|---|
| 377 | +++ wp-includes/template-functions-links.php (working copy) |
|---|
| 378 | @@ -40,6 +40,8 @@ |
|---|
| 379 | $post = & get_post($id); |
|---|
| 380 | if ($post->post_status == 'static') { |
|---|
| 381 | return get_page_link($post->ID); |
|---|
| 382 | + } elseif ($post->post_status == 'object') { |
|---|
| 383 | + return get_subpost_link($post->ID); |
|---|
| 384 | } |
|---|
| 385 | |
|---|
| 386 | $permalink = get_settings('permalink_structure'); |
|---|
| 387 | @@ -97,6 +99,24 @@ |
|---|
| 388 | return apply_filters('page_link', $link, $id); |
|---|
| 389 | } |
|---|
| 390 | |
|---|
| 391 | +function get_subpost_link($id = false) { |
|---|
| 392 | + global $post, $wp_rewrite; |
|---|
| 393 | + |
|---|
| 394 | + if (! $id) { |
|---|
| 395 | + $id = $post->ID; |
|---|
| 396 | + } |
|---|
| 397 | + |
|---|
| 398 | + $object = get_post($id); |
|---|
| 399 | + if ( $wp_rewrite->using_permalinks() && 'draft' != get_post_status($id) ) { |
|---|
| 400 | + $link = get_permalink($object->post_parent); |
|---|
| 401 | + $link = trim($link, '/') . '/' . $object->post_name . '/'; |
|---|
| 402 | + } else { |
|---|
| 403 | + $link = get_bloginfo('home') . "/index.php?subpost_id=$id"; |
|---|
| 404 | + } |
|---|
| 405 | + |
|---|
| 406 | + return apply_filters('object_link', $link, $id); |
|---|
| 407 | +} |
|---|
| 408 | + |
|---|
| 409 | function get_year_link($year) { |
|---|
| 410 | global $wp_rewrite; |
|---|
| 411 | if (!$year) $year = gmdate('Y', time()+(get_settings('gmt_offset') * 3600)); |
|---|
| 412 | @@ -174,9 +194,9 @@ |
|---|
| 413 | |
|---|
| 414 | get_currentuserinfo(); |
|---|
| 415 | |
|---|
| 416 | - if (!user_can_edit_post($user_ID, $post->ID)) { |
|---|
| 417 | - return; |
|---|
| 418 | - } |
|---|
| 419 | + if ( !user_can_edit_post($user_ID, $post->ID) || is_subpost() ) { |
|---|
| 420 | + return; |
|---|
| 421 | + } |
|---|
| 422 | |
|---|
| 423 | $location = get_settings('siteurl') . "/wp-admin/post.php?action=edit&post=$post->ID"; |
|---|
| 424 | echo $before . "<a href=\"$location\">$link</a>" . $after; |
|---|
| 425 | @@ -200,12 +220,12 @@ |
|---|
| 426 | function get_previous_post($in_same_cat = false, $excluded_categories = '') { |
|---|
| 427 | global $post, $wpdb; |
|---|
| 428 | |
|---|
| 429 | - if(! is_single()) { |
|---|
| 430 | + if( !is_single() || is_subpost() ) { |
|---|
| 431 | return null; |
|---|
| 432 | } |
|---|
| 433 | - |
|---|
| 434 | + |
|---|
| 435 | $current_post_date = $post->post_date; |
|---|
| 436 | - |
|---|
| 437 | + |
|---|
| 438 | $join = ''; |
|---|
| 439 | if ($in_same_cat) { |
|---|
| 440 | $join = " INNER JOIN $wpdb->post2cat ON $wpdb->posts.ID= $wpdb->post2cat.post_id "; |
|---|
| 441 | @@ -232,7 +252,7 @@ |
|---|
| 442 | function get_next_post($in_same_cat = false, $excluded_categories = '') { |
|---|
| 443 | global $post, $wpdb; |
|---|
| 444 | |
|---|
| 445 | - if(! is_single()) { |
|---|
| 446 | + if( !is_single() || is_subpost() ) { |
|---|
| 447 | return null; |
|---|
| 448 | } |
|---|
| 449 | |
|---|
| 450 | @@ -264,43 +284,44 @@ |
|---|
| 451 | } |
|---|
| 452 | |
|---|
| 453 | function previous_post_link($format='« %link', $link='%title', $in_same_cat = false, $excluded_categories = '') { |
|---|
| 454 | - $post = get_previous_post($in_same_cat, $excluded_categories); |
|---|
| 455 | |
|---|
| 456 | - if(! $post) { |
|---|
| 457 | - return; |
|---|
| 458 | - } |
|---|
| 459 | + if ( is_subpost() ) { |
|---|
| 460 | + $post = & get_post($GLOBALS['post']->post_parent); |
|---|
| 461 | + $pre = __('Belongs to '); |
|---|
| 462 | + } else { |
|---|
| 463 | + $post = get_previous_post($in_same_cat, $excluded_categories); |
|---|
| 464 | + $pre = ''; |
|---|
| 465 | + } |
|---|
| 466 | |
|---|
| 467 | - $title = apply_filters('the_title', $post->post_title, $post); |
|---|
| 468 | + if(! $post) |
|---|
| 469 | + return; |
|---|
| 470 | |
|---|
| 471 | - $string = '<a href="'.get_permalink($post->ID).'">'; |
|---|
| 472 | + $title = apply_filters('the_title', $post->post_title, $post); |
|---|
| 473 | + $string = '<a href="'.get_permalink($post->ID).'">'; |
|---|
| 474 | + $link = str_replace('%title', $title, $link); |
|---|
| 475 | + $link = $pre . $string . $link . '</a>'; |
|---|
| 476 | |
|---|
| 477 | - $link = str_replace('%title', $title, $link); |
|---|
| 478 | - |
|---|
| 479 | - $link = $string . $link . '</a>'; |
|---|
| 480 | - |
|---|
| 481 | - $format = str_replace('%link', $link, $format); |
|---|
| 482 | - |
|---|
| 483 | - echo $format; |
|---|
| 484 | + $format = str_replace('%link', $link, $format); |
|---|
| 485 | + echo $format; |
|---|
| 486 | } |
|---|
| 487 | |
|---|
| 488 | function next_post_link($format='%link »', $link='%title', $in_same_cat = false, $excluded_categories = '') { |
|---|
| 489 | - $post = get_next_post($in_same_cat, $excluded_categories); |
|---|
| 490 | |
|---|
| 491 | - if(! $post) { |
|---|
| 492 | - return; |
|---|
| 493 | - } |
|---|
| 494 | + if ( is_subpost() ) |
|---|
| 495 | + return null; |
|---|
| 496 | + else |
|---|
| 497 | + $post = get_next_post($in_same_cat, $excluded_categories); |
|---|
| 498 | |
|---|
| 499 | - $title = apply_filters('the_title', $post->post_title, $post); |
|---|
| 500 | + if(! $post) |
|---|
| 501 | + return; |
|---|
| 502 | |
|---|
| 503 | - $string = '<a href="'.get_permalink($post->ID).'">'; |
|---|
| 504 | + $title = apply_filters('the_title', $post->post_title, $post); |
|---|
| 505 | + $string = '<a href="'.get_permalink($post->ID).'">'; |
|---|
| 506 | + $link = str_replace('%title', $title, $link); |
|---|
| 507 | + $link = $string . $link . '</a>'; |
|---|
| 508 | |
|---|
| 509 | - $link = str_replace('%title', $title, $link); |
|---|
| 510 | - |
|---|
| 511 | - $link = $string . $link . '</a>'; |
|---|
| 512 | - |
|---|
| 513 | - $format = str_replace('%link', $link, $format); |
|---|
| 514 | - |
|---|
| 515 | - echo $format; |
|---|
| 516 | + $format = str_replace('%link', $link, $format); |
|---|
| 517 | + echo $format; |
|---|
| 518 | } |
|---|
| 519 | |
|---|
| 520 | // Deprecated. Use previous_post_link(). |
|---|
| 521 | Index: wp-includes/functions.php |
|---|
| 522 | =================================================================== |
|---|
| 523 | --- wp-includes/functions.php (revision 2948) |
|---|
| 524 | +++ wp-includes/functions.php (working copy) |
|---|
| 525 | @@ -1373,6 +1373,12 @@ |
|---|
| 526 | return false; |
|---|
| 527 | } |
|---|
| 528 | |
|---|
| 529 | +function is_subpost () { |
|---|
| 530 | + global $wp_query; |
|---|
| 531 | + |
|---|
| 532 | + return $wp_query->is_subpost; |
|---|
| 533 | +} |
|---|
| 534 | + |
|---|
| 535 | function is_archive () { |
|---|
| 536 | global $wp_query; |
|---|
| 537 | |
|---|
| 538 | @@ -1858,6 +1864,19 @@ |
|---|
| 539 | return get_query_template('single'); |
|---|
| 540 | } |
|---|
| 541 | |
|---|
| 542 | +function get_subpost_template() { |
|---|
| 543 | + global $posts; |
|---|
| 544 | + $type = explode('/', $posts[0]->post_type); |
|---|
| 545 | + if ( $template = get_query_template($type[0]) ) |
|---|
| 546 | + return $template; |
|---|
| 547 | + elseif ( $template = get_query_template($type[1]) ) |
|---|
| 548 | + return $template; |
|---|
| 549 | + elseif ( $template = get_query_template("$type[0]_$type[1]") ) |
|---|
| 550 | + return $template; |
|---|
| 551 | + else |
|---|
| 552 | + return get_query_template('subpost'); |
|---|
| 553 | +} |
|---|
| 554 | + |
|---|
| 555 | function get_comments_popup_template() { |
|---|
| 556 | if ( file_exists( TEMPLATEPATH . '/comments-popup.php') ) |
|---|
| 557 | $template = TEMPLATEPATH . '/comments-popup.php'; |
|---|
| 558 | Index: wp-commentsrss2.php |
|---|
| 559 | =================================================================== |
|---|
| 560 | --- wp-commentsrss2.php (revision 2948) |
|---|
| 561 | +++ wp-commentsrss2.php (working copy) |
|---|
| 562 | @@ -32,14 +32,14 @@ |
|---|
| 563 | comment_author_url, comment_date, comment_date_gmt, comment_content, comment_post_ID, |
|---|
| 564 | $wpdb->posts.ID, $wpdb->posts.post_password FROM $wpdb->comments |
|---|
| 565 | LEFT JOIN $wpdb->posts ON comment_post_id = id WHERE comment_post_ID = '$id' |
|---|
| 566 | - AND $wpdb->comments.comment_approved = '1' AND ($wpdb->posts.post_status = 'publish' OR $wpdb->posts.post_status = 'static') |
|---|
| 567 | + AND $wpdb->comments.comment_approved = '1' AND $wpdb->posts.post_status IN ('publish', 'static', 'object') |
|---|
| 568 | AND post_date < '".date("Y-m-d H:i:59")."' |
|---|
| 569 | ORDER BY comment_date DESC LIMIT " . get_settings('posts_per_rss') ); |
|---|
| 570 | } else { // if no post id passed in, we'll just ue the last 10 comments. |
|---|
| 571 | $comments = $wpdb->get_results("SELECT comment_ID, comment_author, comment_author_email, |
|---|
| 572 | comment_author_url, comment_date, comment_date_gmt, comment_content, comment_post_ID, |
|---|
| 573 | $wpdb->posts.ID, $wpdb->posts.post_password FROM $wpdb->comments |
|---|
| 574 | - LEFT JOIN $wpdb->posts ON comment_post_id = id WHERE ($wpdb->posts.post_status = 'publish' OR $wpdb->posts.post_status = 'static') |
|---|
| 575 | + LEFT JOIN $wpdb->posts ON comment_post_id = id WHERE $wpdb->posts.post_status IN ('publish', 'static', 'object') |
|---|
| 576 | AND $wpdb->comments.comment_approved = '1' AND post_date < '".date("Y-m-d H:i:s")."' |
|---|
| 577 | ORDER BY comment_date DESC LIMIT " . get_settings('posts_per_rss') ); |
|---|
| 578 | } |
|---|
| 579 | Index: wp-admin/admin-functions.php |
|---|
| 580 | =================================================================== |
|---|
| 581 | --- wp-admin/admin-functions.php (revision 2948) |
|---|
| 582 | +++ wp-admin/admin-functions.php (working copy) |
|---|
| 583 | @@ -669,6 +669,8 @@ |
|---|
| 584 | } |
|---|
| 585 | |
|---|
| 586 | } |
|---|
| 587 | + } else { |
|---|
| 588 | + $error = __('File not found'); |
|---|
| 589 | } |
|---|
| 590 | |
|---|
| 591 | if (!empty ($error)) { |
|---|
| 592 | Index: wp-admin/image-uploading.php |
|---|
| 593 | =================================================================== |
|---|
| 594 | --- wp-admin/image-uploading.php (revision 2948) |
|---|
| 595 | +++ wp-admin/image-uploading.php (working copy) |
|---|
| 596 | @@ -136,6 +268,18 @@ |
|---|
| 597 | $imagedata['hwstring_small'] = "height='$uheight' width='$uwidth'"; |
|---|
| 598 | $imagedata['file'] = $file; |
|---|
| 599 | |
|---|
| 600 | +$error = false; |
|---|
| 601 | +// This is a problem. Three megapixels is by no means a good estimate. Safety check should be in wp_create_thumbnail. |
|---|
| 602 | +// If we run out of memory, it's a fatal error and no postmeta is added. |
|---|
| 603 | +if ( $imagedata['width'] * $imagedata['height'] < 3 * 1024 * 1024 ) { |
|---|
| 604 | + if ( $imagedata['width'] > 128 && $imagedata['width'] >= $imagedata['height'] * 4 / 3 ) |
|---|
| 605 | + $error = wp_create_thumbnail($file, 128); |
|---|
| 606 | + elseif ( $imagedata['height'] > 96 ) |
|---|
| 607 | + $error = wp_create_thumbnail($file, 96); |
|---|
| 608 | +} |
|---|
| 609 | +if ( $error != 1 ) |
|---|
| 610 | + $imagedata['thumb'] = false; |
|---|
| 611 | +else |
|---|
| 612 | + $imagedata['thumb'] = "thumb-$filename"; |
|---|
| 613 | + |
|---|
| 614 | if ( false == add_post_meta($id, 'imagedata', $imagedata) ) |
|---|
| 615 | die("failed to add_post_meta"); |
|---|
| 616 | |
|---|
| 617 | @@ -192,24 +336,49 @@ |
|---|
| 618 | $uwidth_sum = 0; |
|---|
| 619 | $images_html = ''; |
|---|
| 620 | $images_style = ''; |
|---|
| 621 | +$images_script = ''; |
|---|
| 622 | if ( count($images) > 0 ) { |
|---|
| 623 | $images = array_slice( $images, 0, $num ); |
|---|
| 624 | + $__subpost = __('SUBPOST'); |
|---|
| 625 | + $__delete = __('DELETE'); |
|---|
| 626 | + $__thumbnail = __('THUMBNAIL'); |
|---|
| 627 | + $__close = __('CLOSE'); |
|---|
| 628 | + $__on = __('ON'); |
|---|
| 629 | + $__off = __('OFF'); |
|---|
| 630 | + $__confirmdelete = __('Delete this photo from the server?'); |
|---|
| 631 | + $__nothumb = __('There is no thumbnail associated with this photo.'); |
|---|
| 632 | + $images_script .= "on = '$__on';\noff = '$__off';\n"; |
|---|
| 633 | foreach ( $images as $key => $image ) { |
|---|
| 634 | $image = array_merge($image, get_post_meta($image['ID'], 'imagedata', true) ); |
|---|
| 635 | + if ( ($image['width'] > 128 || $image['height'] > 96) && !empty($image['thumb']) && file_exists(dirname($image['file']).'/'.$image['thumb']) ) { |
|---|
| 636 | + $src = str_replace(basename($image['guid']), '', $image['guid']) . $image['thumb']; |
|---|
| 637 | + $images_script .= "src".$i."a = '$src';\nsrc".$i."b = '".$image['guid']."';\n"; |
|---|
| 638 | + $thumb = 'true'; |
|---|
| 639 | + $thumbtext = "$__thumbnail <strong id=\"I$i\">$__on</strong>"; |
|---|
| 640 | + } else { |
|---|
| 641 | + $src = $image['guid']; |
|---|
| 642 | + $thumb = 'false'; |
|---|
| 643 | + $thumbtext = "<del>$__thumbnail</del>"; |
|---|
| 644 | + } |
|---|
| 645 | list($image['uwidth'], $image['uheight']) = get_udims($image['width'], $image['height']); |
|---|
| 646 | - $uwidth_sum += 128; //$image['uwidth']; |
|---|
| 647 | + $height_width = 'height="'.$image['uheight'].'" width="'.$image['uwidth'].'"'; |
|---|
| 648 | + $uwidth_sum += 128; |
|---|
| 649 | $xpadding = (128 - $image['uwidth']) / 2; |
|---|
| 650 | $ypadding = (96 - $image['uheight']) / 2; |
|---|
| 651 | $object = $image['ID']; |
|---|
| 652 | $images_style .= "#target$i img { padding: {$ypadding}px {$xpadding}px; }\n"; |
|---|
| 653 | + $href = get_subpost_link($object); |
|---|
| 654 | + $images_script .= "href".$i."a = '$href';\nhref".$i."b = '{$image['guid']}';\n"; |
|---|
| 655 | $images_html .= <<<HERE |
|---|
| 656 | <div id='target$i' class='imagewrap left'> |
|---|
| 657 | <div id='popup$i' class='popup'> |
|---|
| 658 | - <a onclick='return confirm("Delete this photo from the server?")' href='image-uploading.php?action=delete&object=$object&all=$all&start=$start&post=$post'>DELETE</a> |
|---|
| 659 | - <a onclick="popup.style.display='none';return false;" href="javascript:void()">CANCEL</a> |
|---|
| 660 | + <a onclick="toggleLink($i);return false;" href="javascript:void();">$__subpost <strong id="L$i">$__on</strong></a> |
|---|
| 661 | + <a onclick="if($thumb)toggleImage($i);else alert('$__nothumb');return false;" href="javascript:void();">$thumbtext</a> |
|---|
| 662 | + <a onclick="return confirm('$__confirmdelete')" href="image-uploading.php?action=delete&object=$object&all=$all&start=$start&post=$post">$__delete</a> |
|---|
| 663 | + <a onclick="popup.style.display='none';return false;" href="javascript:void()">$__close</a> |
|---|
| 664 | </div> |
|---|
| 665 | - <a id='link$i' class='imagelink' href='{$image['guid']}' onclick='imagePopup($i);return false;' title='{$image['post_title']}'> |
|---|
| 666 | - <img id='image$i' src='{$image['guid']}' alt='{$image['post_title']}' {$image['hwstring_small']} /> |
|---|
| 667 | + <a id="link$i" class="imagelink" href="$href" onclick="imagePopup($i);return false;" title="{$image['post_title']}"> |
|---|
| 668 | + <img id='image$i' src='$src' alt='{$image['post_title']}' $height_width /> |
|---|
| 669 | </a> |
|---|
| 670 | </div> |
|---|
| 671 | HERE; |
|---|
| 672 | @@ -231,6 +400,7 @@ |
|---|
| 673 | <head> |
|---|
| 674 | <meta http-equiv="imagetoolbar" content="no" /> |
|---|
| 675 | <script type="text/javascript"> |
|---|
| 676 | +<?php echo $images_script; ?> |
|---|
| 677 | function validateImageName() { |
|---|
| 678 | /* This is more for convenience than security. Server-side validation is very thorough.*/ |
|---|
| 679 | obj = document.getElementById('upload'); |
|---|
| 680 | @@ -258,6 +428,28 @@ |
|---|
| 681 | function init() { |
|---|
| 682 | popup = false; |
|---|
| 683 | } |
|---|
| 684 | +function toggleLink(n) { |
|---|
| 685 | + o=document.getElementById('link'+n); |
|---|
| 686 | + oi=document.getElementById('L'+n); |
|---|
| 687 | + if ( oi.innerHTML == on ) { |
|---|
| 688 | + o.href = eval('href'+n+'b'); |
|---|
| 689 | + oi.innerHTML = off; |
|---|
| 690 | + } else { |
|---|
| 691 | + o.href = eval('href'+n+'a'); |
|---|
| 692 | + oi.innerHTML = on; |
|---|
| 693 | + } |
|---|
| 694 | +} |
|---|
| 695 | +function toggleImage(n) { |
|---|
| 696 | + o = document.getElementById('image'+n); |
|---|
| 697 | + oi = document.getElementById('I'+n); |
|---|
| 698 | + if ( oi.innerHTML == on ) { |
|---|
| 699 | + o.src = eval('src'+n+'b'); |
|---|
| 700 | + oi.innerHTML = off; |
|---|
| 701 | + } else { |
|---|
| 702 | + o.src = eval('src'+n+'a'); |
|---|
| 703 | + oi.innerHTML = on; |
|---|
| 704 | + } |
|---|
| 705 | +} |
|---|
| 706 | </script> |
|---|
| 707 | <style type="text/css"> |
|---|
| 708 | body { |
|---|
| 709 | @@ -369,11 +561,11 @@ |
|---|
| 710 | text-align: right; |
|---|
| 711 | } |
|---|
| 712 | .popup { |
|---|
| 713 | -margin: 23px 9px; |
|---|
| 714 | -padding: 5px; |
|---|
| 715 | +margin: 4px 4px; |
|---|
| 716 | +padding: 3px; |
|---|
| 717 | position: absolute; |
|---|
| 718 | -width: 100px; |
|---|
| 719 | -height: 40px; |
|---|
| 720 | +width: 114px; |
|---|
| 721 | +height: 82px; |
|---|
| 722 | display: none; |
|---|
| 723 | background-color: rgb(223, 232, 241); |
|---|
| 724 | opacity: .90; |
|---|
| 725 | @@ -381,7 +573,6 @@ |
|---|
| 726 | text-align: center; |
|---|
| 727 | } |
|---|
| 728 | .popup a, .popup a:visited, .popup a:active { |
|---|
| 729 | -margin-bottom: 3px; |
|---|
| 730 | background-color: transparent; |
|---|
| 731 | display: block; |
|---|
| 732 | width: 100%; |
|---|
| 733 | @@ -389,7 +580,6 @@ |
|---|
| 734 | color: #246; |
|---|
| 735 | } |
|---|
| 736 | .popup a:hover { |
|---|
| 737 | -margin-bottom: 3px; |
|---|
| 738 | background-color: #fff; |
|---|
| 739 | color: #000; |
|---|
| 740 | } |
|---|