fix up more storyline issues

This commit is contained in:
John Bintz 2009-11-15 10:37:43 -05:00
parent 1cafcc9e3b
commit 96eb1e0695
4 changed files with 39 additions and 45 deletions

View File

@ -1,8 +1,6 @@
<?php <?php
class ComicPressDBInterface { class ComicPressDBInterface {
var $_non_comic_categories, $_all_categories;
function ComicPressDBInterface() {} function ComicPressDBInterface() {}
function get_instance() { function get_instance() {
@ -12,34 +10,28 @@ class ComicPressDBInterface {
return $instance; return $instance;
} }
function _get_categories() { return get_categories("hide_empty=0"); } function _get_categories_to_exclude($categories = null) {
if (is_array($categories)) {
/** return array_diff(get_all_category_ids(), $categories);
* Set the comic categories for the current run of ComicPress.
*/
function set_comic_categories($categories) {
$this->_all_categories = get_all_category_ids();
$this->_non_comic_categories = array_values(array_diff($this->_all_categories, $categories));
}
function _get_categories_to_exclude($category = null) {
$result = array_diff($this->_all_categories, array($category));
if (is_array($result)) {
return (is_null($category)) ? $this->_non_comic_categories : array_values($result);
} else { } else {
return $this->_non_comic_categories; return array();
} }
} }
/** /**
* Find the terminal post in a specific category. * Find the terminal post in a specific category.
*/ */
function get_terminal_post_in_category($category_id, $first = true) { function get_terminal_post_in_categories($categories, $first = true) {
$this->_prepare_wp_query(); $this->_prepare_wp_query();
$sort_order = $first ? "asc" : "desc"; $sort_order = $first ? "asc" : "desc";
$terminal_comic_query = new WP_Query(); $terminal_comic_query = new WP_Query();
$terminal_comic_query->query("showposts=1&order=${sort_order}&cat=${category_id}&status=publish"); $terminal_comic_query->query(array(
'showposts' => 1,
'order' => $sort_order,
'category__in' => $categories,
'status' => 'publish'
));
$post = false; $post = false;
if ($terminal_comic_query->have_posts()) { if ($terminal_comic_query->have_posts()) {
$post = reset($terminal_comic_query->posts); $post = reset($terminal_comic_query->posts);
@ -52,28 +44,28 @@ class ComicPressDBInterface {
/** /**
* Get the first comic in a category. * Get the first comic in a category.
*/ */
function get_first_comic($category_id) { function get_first_post($categories) {
return $this->get_terminal_post_in_category($category_id); return $this->get_terminal_post_in_categories($categories);
} }
/** /**
* Get the last comic in a category. * Get the last comic in a category.
*/ */
function get_last_comic($category_id) { function get_last_post($categories) {
return $this->get_terminal_post_in_category($category_id, false); return $this->get_terminal_post_in_categories($categories, false);
} }
/** /**
* Get the comic post adjacent to the current comic. * Get the comic post adjacent to the current comic.
* Wrapper around get_adjacent_post(). Don't unit test this method. * Wrapper around get_adjacent_post(). Don't unit test this method.
*/ */
function get_adjacent_comic($category, $next = false, $override_post = null) { function get_adjacent_post($categories, $next = false, $override_post = null) {
global $post; global $post;
$this->_prepare_wp_query(); $this->_prepare_wp_query();
if (!is_null($override_post)) { $temp_post = $post; $post = $override_post; } if (!is_null($override_post)) { $temp_post = $post; $post = $override_post; }
$result = get_adjacent_post(false, implode(" and ", $this->_get_categories_to_exclude($category)), !$next); $result = get_adjacent_post(false, implode(" and ", $this->_get_categories_to_exclude($categories)), !$next);
$this->_reset_wp_query(); $this->_reset_wp_query();
if (!is_null($override_post)) { $post = $temp_post; } if (!is_null($override_post)) { $post = $temp_post; }
@ -100,12 +92,12 @@ class ComicPressDBInterface {
/** /**
* Get the previous comic from the current one. * Get the previous comic from the current one.
*/ */
function get_previous_comic($category = null, $override_post = null) { return $this->get_adjacent_comic($category, false, $override_post); } function get_previous_post($categories = null, $override_post = null) { return $this->get_adjacent_post($categories, false, $override_post); }
/** /**
* Get the next comic from the current one. * Get the next comic from the current one.
*/ */
function get_next_comic($category = null, $override_post = null) { return $this->get_adjacent_comic($category, true, $override_post); } function get_next_post($categories = null, $override_post = null) { return $this->get_adjacent_post($categories, true, $override_post); }
} }
?> ?>

View File

@ -129,7 +129,9 @@ function R($which, $restrictions = null, $override_post = null) {
$storyline = new ComicPressStoryline(); $storyline = new ComicPressStoryline();
$categories = $storyline->build_from_restrictions(__prep_R($restrictions)); $restrictions = __prep_R($restrictions, $post_to_use);
$categories = $storyline->build_from_restrictions($restrictions);
$dbi = ComicPressDBInterface::get_instance(); $dbi = ComicPressDBInterface::get_instance();

View File

@ -2,31 +2,31 @@
$storyline = new ComicPressStoryline(); $storyline = new ComicPressStoryline();
$storyline->read_from_options(); $storyline->read_from_options();
the_title(); echo '<br />'; echo 'Current: '; the_title(); echo '<br />';
Protect(); Protect();
RT('first', 'from_post'); the_title(); echo '<br />'; echo 'First in category: '; RT('first', 'from_post'); the_title(); echo '<br />';
RT('previous', 'from_post'); the_title(); echo '<br />'; echo 'Previous in category: '; RT('previous', 'from_post'); the_title(); echo '<br />';
RT('previous', array('root_of' => '__post')); the_title(); echo '<br />'; echo 'Previous in root category: '; RT('previous', array('root_of' => '__post')); the_title(); echo '<br />';
RT('previous'); the_title(); echo '<br />'; echo 'Chronologically previous: '; RT('previous'); the_title(); echo '<br />';
Restore(); the_title(); echo '<br />'; echo 'Current: '; Restore(); the_title(); echo '<br />';
foreach (M() as $image) { foreach (M() as $image) {
echo $image->embed(); echo 'Default: '; echo $image->embed();
echo $image->embed('comic'); echo 'Comic: '; echo $image->embed('comic');
echo $image->embed('rss'); echo 'RSS: '; echo $image->embed('rss');
echo $image->embed('archive'); echo 'Archive: '; echo $image->embed('archive');
} }
RT('next'); the_title(); echo '<br />'; echo 'Chronologically next: '; RT('next'); the_title(); echo '<br />';
RT('next', array('root_of' => '__post')); the_title(); echo '<br />'; echo 'Next in root category: '; RT('next', array('root_of' => '__post')); the_title(); echo '<br />';
RT('next', 'from_post'); the_title(); echo '<br />'; echo 'Next in category: '; RT('next', 'from_post'); the_title(); echo '<br />';
RT('last', 'from_post'); the_title(); echo '<br />'; echo 'Last in category: '; RT('last', 'from_post'); the_title(); echo '<br />';
Unprotect(); Unprotect();
the_title(); echo '<br />'; echo 'Current: '; the_title(); echo '<br />';
finish_comicpress(); finish_comicpress();
?> ?>

View File

@ -16,4 +16,4 @@ class ComicPressDBInterfaceTest extends PHPUnit_Framework_TestCase {
} }
} }
?> ?>