more category and storyline modifications

This commit is contained in:
John Bintz 2009-07-29 19:13:20 -04:00
parent 4815766fe4
commit 7b1e8b7348
3 changed files with 168 additions and 52 deletions

View File

@ -57,6 +57,8 @@ class ComicPress {
$this->sort_comic_categories();
add_action('wp_head', array(&$this, 'wp_head'));
add_filter('comicpress_nav', array(&$this, 'comicpress_nav'), 10, 2);
add_filter('comicpress_nav_fields', array(&$this, 'comicpress_nav_fields'));
if (current_user_can('edit_themes')) {
if (!empty($this->comicpress_options['helpers'])) {
@ -77,6 +79,29 @@ class ComicPress {
function is_multicomic() {
return $this->comicpress_options['category_usage'] == "multicomic";
}
function comicpress_nav($type, $content) {
return $type;
}
function comicpress_nav_fields($nav_fields) {
$nav_fields = array(
'first' => '‹‹ ' . __('First', 'comicpress'),
'previous' => '‹ ' . __('Previous', 'comicpress'),
'next' => __('Next', 'comicpress') . ' ›',
'last' => __('Last', 'comicpress') . ' ››'
);
if ($this->needs_storyline_nav()) {
$nav_fields = array_merge(
array('prior' => '‹‹ ' . __('Prior Storyline', 'comicpress')),
$nav_fields,
array('upcoming' => __('Upcoming Storyline', 'comicpress') . ' ››')
);
}
return $nav_fields;
}
function wp_head() {
foreach ($this->additional_stylesheets as $uri) { ?>
@ -297,6 +322,40 @@ class ComicPress {
$comic_posts['show_next'] = (!empty($comic_posts['next']) && (trim($comic_posts['last']->ID) != trim($comic_posts['next']->ID)));
$comic_posts['show_last'] = (trim($post->ID) != trim($comic_posts['last']->ID));
if ($this->needs_storyline_nav()) {
$comic_posts = array_merge($comic_posts, $this->get_storyline_nav_comics());
}
return $comic_posts;
}
function get_storyline_nav_comics() {
$comic_posts = array('prior' => false, 'upcoming' => false);
foreach ($this->get_sorted_post_categories() as $category_id) {
$prev_next_categories = $this->get_previous_next_categories($category_id);
foreach ($prev_next_categories as $master_id => $cat_list) {
foreach ($cat_list as $which => $id) {
switch ($which) {
case "previous":
$terminal_post = $this->get_last_comic($id);
$which_field = "prior";
break;
case "next":
$terminal_post = $this->get_first_comic($id);
$which_field = "upcoming";
break;
}
if (is_object($terminal_post)) {
$comic_posts[$which_field] = $terminal_post;
$comic_posts["show_${which_field}"] =true;
}
if (count($terminal_post) == 2) { break; }
}
}
}
return $comic_posts;
}

View File

@ -1,53 +1,10 @@
<?php
$nav_fields = array(
'first' => '&lsaquo;&lsaquo; ' . __('First', 'comicpress'),
'previous' => '&lsaquo; ' . __('Previous', 'comicpress'),
'next' => __('Next', 'comicpress') . ' &rsaquo;',
'last' => __('Last', 'comicpress') . ' &rsaquo;&rsaquo;'
);
if ($comicpress->needs_storyline_nav()) {
$nav_fields = array_merge(
array('prior' => '&lsaquo;&lsaquo; ' . __('Prior Storyline', 'comicpress')),
$nav_fields,
array('upcoming' => __('Upcoming Storyline', 'comicpress') . ' &rsaquo;&rsaquo;')
);
foreach ($comicpress->get_sorted_post_categories() as $category_id) {
$prev_next_categories = $comicpress->get_previous_next_categories($category_id);
foreach ($prev_next_categories as $master_id => $cat_list) {
foreach ($cat_list as $which => $id) {
switch ($which) {
case "previous":
$terminal_post = $comicpress->get_last_comic($id);
$which_field = "prior";
break;
case "next":
$terminal_post = $comicpress->get_first_comic($id);
$which_field = "upcoming";
break;
}
if (is_object($terminal_post)) {
$nav_comics[$which_field] = $terminal_post;
$nav_comics["show_${which_field}"] =true;
}
if (count($terminal_post) == 2) { break; }
}
}
}
}
?>
<div class="nav">
<?php foreach ($nav_fields as $field => $link_text) { ?>
<?php if ($nav_comics['show_' . $field]) { ?>
<div class="nav-<?php echo $field ?>">
<a href="<?php echo (is_object($nav_comics[$field])) ? get_permalink($nav_comics[$field]->ID) : $nav_comics[$field] ?>"
title="<?php sprintf(__('Go to the %s comic', 'comicpress'), $field) ?>"><?php echo $link_text ?></a>
</div>
<?php } ?>
<div class="nav">
<?php foreach (apply_filters('comicpress_nav_fields', array()) as $field => $link_text) { ?>
<?php if ($nav_comics['show_' . $field]) { ?>
<div class="nav-<?php echo $field ?>">
<a href="<?php echo (is_object($nav_comics[$field])) ? get_permalink($nav_comics[$field]->ID) : $nav_comics[$field] ?>"
title="<?php sprintf(__('Go to the %s comic', 'comicpress'), $field) ?>"><?php echo apply_filters('comicpress_nav', $link_text, $field) ?></a>
</div>
<?php } ?>
</div>
<?php } ?>
</div>

View File

@ -172,6 +172,106 @@ class ComicPressTest extends PHPUnit_Framework_TestCase {
}
}
function providerTestGetNavStorylineEnabled() {
return array(
array(
array('10'),
array(
'10' => array(
'10' => array('previous' => '9', 'next' => '11')
)
),
array(
'9' => true,
'11' => true
),
array(
'prior' => true,
'upcoming' => true
)
),
array(
array('10', '20'),
array(
'10' => array(
'10' => array('previous' => '7', 'next' => '3')
),
'20' => array(
'20' => array('previous' => '9', 'next' => '11')
),
),
array(
'9' => true,
'11' => true
),
array(
'prior' => true,
'upcoming' => true
)
),
array(
array('10'),
array(
'10' => array(
'10' => array('previous' => '7', 'next' => '3')
),
),
array(
'15' => true,
'20' => true
),
array(
'prior' => false,
'upcoming' => false
)
),
array(
array('10'),
array(
'10' => array(
'7' => array('previous' => '15', 'next' => '20')
),
),
array(
'15' => true,
'20' => true
),
array(
'prior' => true,
'upcoming' => true
)
),
);
}
/**
* @dataProvider providerTestGetNavStorylineEnabled
*/
function testGetNavComicsStorylineEnabled($post_categories, $previous_next_categories, $terminal_comics, $expected_results) {
$cp = $this->getMock('ComicPress', array('get_sorted_post_categories', 'get_previous_next_categories', 'get_last_comic', 'get_first_comic'));
$cp->expects($this->once())->method('get_sorted_post_categories')->will($this->returnValue($post_categories));
$cp->expects($this->any())->method('get_previous_next_categories')->will($this->returnCallback(array(&$this, 'callbackGetPreviousNextCategories')));
$cp->expects($this->any())->method('get_first_comic')->will($this->returnCallback(array(&$this, 'callbackGetTerminalComic')));
$cp->expects($this->any())->method('get_last_comic')->will($this->returnCallback(array(&$this, 'callbackGetTerminalComic')));
$this->_previous_next_categories = $previous_next_categories;
$this->_terminal_comics = $terminal_comics;
$result = $cp->get_storyline_nav_comics();
foreach ($expected_results as $field => $value) {
$this->assertEquals($value, $result["show_${field}"]);
}
}
function callbackGetPreviousNextCategories($id) {
return $this->_previous_next_categories[$id];
}
function callbackGetTerminalComic($id) {
return isset($this->_terminal_comics[$id]) ? (object)array() : false;
}
function providerTestGetPreviousNextCategories() {
return array(
array(