move final template tags out
This commit is contained in:
parent
3b1727e476
commit
23c145c262
|
@ -43,7 +43,7 @@ class ComicPressTagBuilderFactory {
|
|||
}
|
||||
|
||||
class ComicPressTagBuilder {
|
||||
public $categories, $restrictions, $storyline, $dbi, $parent_post, $post;
|
||||
public $categories, $restrictions, $storyline, $dbi, $parent_post, $post, $category;
|
||||
|
||||
public function __construct($parent_post, $storyline, $dbi) {
|
||||
$this->restrictions = array();
|
||||
|
@ -61,6 +61,7 @@ class ComicPressTagBuilder {
|
|||
}
|
||||
|
||||
// TODO categories (SC and SL)
|
||||
// TODO filtered versions of template tags
|
||||
public function __call($method, $arguments) {
|
||||
$ok = false;
|
||||
$return = $this;
|
||||
|
@ -80,11 +81,48 @@ class ComicPressTagBuilder {
|
|||
$this->parent_post = (object)$arguments[0];
|
||||
$ok = true;
|
||||
break;
|
||||
case 'current':
|
||||
if (isset($this->category)) {
|
||||
if (isset($arguments[0])) {
|
||||
return $this->category;
|
||||
} else {
|
||||
return get_category($this->category);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'parent':
|
||||
$id = $this->storyline->parent($this->category);
|
||||
return isset($arguments[0]) ? get_category($id) : $id;
|
||||
case 'children':
|
||||
$children = $this->storyline->_find_children($this->category);
|
||||
if (!isset($arguments[0])) {
|
||||
foreach ($children as &$child) {
|
||||
$child = get_category($child);
|
||||
}
|
||||
unset($child);
|
||||
}
|
||||
return $children;
|
||||
case 'next':
|
||||
case 'previous':
|
||||
case 'first':
|
||||
case 'last':
|
||||
$this->post = call_user_func(array($this->dbi, "get_${method}_post"), $this->storyline->build_from_restrictions($this->restrictions), $this->parent_post);
|
||||
if (isset($this->category)) {
|
||||
switch ($method) {
|
||||
case 'next':
|
||||
case 'previous':
|
||||
$id = $this->storyline->{$method}($this->category);
|
||||
break;
|
||||
case 'first':
|
||||
$id = reset(array_keys($this->storyline->_structure));
|
||||
break;
|
||||
case 'last':
|
||||
$id = end(array_keys($this->storyline->_structure));
|
||||
break;
|
||||
}
|
||||
return isset($arguments[0]) ? get_category($id) : $id;
|
||||
} else {
|
||||
$this->post = call_user_func(array($this->dbi, "get_${method}_post"), $this->storyline->build_from_restrictions($this->restrictions), $this->parent_post);
|
||||
}
|
||||
$ok = true;
|
||||
break;
|
||||
case 'in':
|
||||
|
@ -117,6 +155,14 @@ class ComicPressTagBuilder {
|
|||
$which = (isset($arguments[1])) ? $arguments[1] : 'default';
|
||||
return ComicPressBackend::generate_from_id($arguments[0][$which]);
|
||||
}
|
||||
case 'category':
|
||||
if (isset($arguments[0])) {
|
||||
$this->category = $arguments[0];
|
||||
} else {
|
||||
$this->category = reset(wp_get_post_categories($this->parent_post->ID));
|
||||
}
|
||||
$ok = true;
|
||||
break;
|
||||
case 'structure':
|
||||
return $this->storyline->_structure;
|
||||
default:
|
||||
|
|
|
@ -5,10 +5,6 @@ foreach (array(
|
|||
'Protect' => 0,
|
||||
'Restore' => 0,
|
||||
'Unprotect' => 0,
|
||||
'M' => 1,
|
||||
'EM' => 3,
|
||||
'SL' => 1,
|
||||
'SC' => 2,
|
||||
) as $function => $param_count) {
|
||||
if ($param_count == 0) {
|
||||
add_action("comicpress-${function}", $function, 10);
|
||||
|
@ -65,49 +61,3 @@ function Unprotect() {
|
|||
|
||||
$__post = $__wp_query = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a category relative to the provided category.
|
||||
* If no category is provided, use the current post's category.
|
||||
* Relative measures can be one of: current, previous, lext, level, parent
|
||||
* If no relative measure is provided, the current category is returned.
|
||||
* @param string $which The relative measure to use.
|
||||
* @param object $relative_to The post object to be relative to.
|
||||
* @return object|false The relative category object, or false if not found.
|
||||
*/
|
||||
function SC($which = 'current', $relative_to = null) {
|
||||
global $post;
|
||||
|
||||
$storyline = new ComicPressStoryline();
|
||||
$storyline->read_from_options();
|
||||
|
||||
if (is_null($relative_to)) {
|
||||
if (is_object($post)) {
|
||||
if (isset($post->ID)) {
|
||||
$categories = wp_get_post_categories($post->ID);
|
||||
if (is_array($categories)) {
|
||||
$relative_to = reset($categories);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_null($relative_to)) {
|
||||
if ($which == 'current') {
|
||||
$result = $relative_to;
|
||||
} else {
|
||||
$result = $storyline->_get_field($which, $relative_to);
|
||||
}
|
||||
if ($result !== false) {
|
||||
$category = get_category($result);
|
||||
// sanity check
|
||||
// @codeCoverageIgnoreStart
|
||||
if (!empty($category)) {
|
||||
return $category;
|
||||
}
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -378,4 +378,122 @@ class ComicPressTagBuilderTest extends PHPUnit_Framework_TestCase {
|
|||
'3' => array('previous' => 2, 'level' => 1),
|
||||
), $core->structure());
|
||||
}
|
||||
|
||||
function providerTestCategoryTraversal() {
|
||||
return array(
|
||||
array(
|
||||
array(
|
||||
array('category'),
|
||||
array('current')
|
||||
),
|
||||
2
|
||||
),
|
||||
array(
|
||||
array(
|
||||
array('category'),
|
||||
array('current', true)
|
||||
),
|
||||
2
|
||||
),
|
||||
array(
|
||||
array(
|
||||
array('category'),
|
||||
array('next')
|
||||
),
|
||||
3
|
||||
),
|
||||
array(
|
||||
array(
|
||||
array('category'),
|
||||
array('previous')
|
||||
),
|
||||
1
|
||||
),
|
||||
array(
|
||||
array(
|
||||
array('category'),
|
||||
array('first')
|
||||
),
|
||||
1
|
||||
),
|
||||
array(
|
||||
array(
|
||||
array('category'),
|
||||
array('last')
|
||||
),
|
||||
5
|
||||
),
|
||||
array(
|
||||
array(
|
||||
array('category'),
|
||||
array('parent')
|
||||
),
|
||||
false
|
||||
),
|
||||
array(
|
||||
array(
|
||||
array('from', (object)array('ID' => 2)),
|
||||
array('category'),
|
||||
array('parent')
|
||||
),
|
||||
2
|
||||
),
|
||||
array(
|
||||
array(
|
||||
array('category', 4),
|
||||
array('parent')
|
||||
),
|
||||
2
|
||||
),
|
||||
array(
|
||||
array(
|
||||
array('category', 2),
|
||||
array('children', true)
|
||||
),
|
||||
array(2, 3, 4)
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider providerTestCategoryTraversal
|
||||
*/
|
||||
function testCategoryTraversal($methods, $expected_result) {
|
||||
global $post;
|
||||
|
||||
$storyline = new ComicPressStoryline();
|
||||
$storyline->set_flattened_storyline('0/1,0/2,0/2/3,0/2/4,0/5');
|
||||
|
||||
foreach (array(
|
||||
1 => array('cat_name' => 'Test 1', 'category_nicename' => 'category-1', 'category_parent' => 0),
|
||||
2 => array('cat_name' => 'Test 2', 'category_nicename' => 'category-2', 'category_parent' => 0),
|
||||
3 => array('cat_name' => 'Test 3', 'category_nicename' => 'category-3', 'category_parent' => 2),
|
||||
4 => array('cat_name' => 'Test 4', 'category_nicename' => 'category-4', 'category_parent' => 2),
|
||||
5 => array('cat_name' => 'Test 5', 'category_nicename' => 'category-5', 'category_parent' => 0),
|
||||
) as $id => $category) {
|
||||
add_category($id, (object)$category);
|
||||
}
|
||||
|
||||
$post = (object)array('ID' => 1);
|
||||
|
||||
$dbi = $this->getMock('ComicPressDBInterface');
|
||||
$core = new ComicPressTagBuilderFactory($dbi);
|
||||
|
||||
wp_insert_post($post);
|
||||
wp_insert_post((object)array('ID' => 2));
|
||||
|
||||
wp_set_post_categories(1, array(2));
|
||||
wp_set_post_categories(2, array(3));
|
||||
|
||||
foreach ($methods as $method_info) {
|
||||
$method = array_shift($method_info);
|
||||
$core = call_user_func_array(array($core, $method), $method_info);
|
||||
}
|
||||
|
||||
if (is_object($core)) {
|
||||
$this->assertEquals($expected_result, $core->cat_ID);
|
||||
} else {
|
||||
$this->assertEquals($expected_result, $core);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,41 +61,6 @@ class FunctionsTest extends PHPUnit_Framework_TestCase {
|
|||
$this->assertTrue(is_null($__wp_query));
|
||||
}
|
||||
|
||||
function providerTestSC() {
|
||||
return array(
|
||||
array('next', 1, 2),
|
||||
array('next', null, 3),
|
||||
array('next', 4, false),
|
||||
array('test', 4, false),
|
||||
array('current', 1, 1),
|
||||
array('current', null, 2),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider providerTestSC
|
||||
*/
|
||||
function testSC($which, $relative_to, $expected_result) {
|
||||
global $post;
|
||||
|
||||
$post = (object)array('ID' => 1);
|
||||
wp_set_post_categories(1, array(2));
|
||||
|
||||
$s = new ComicPressStoryline();
|
||||
$s->set_flattened_storyline('0/1,0/2,0/2/3,0/2/4');
|
||||
|
||||
for ($i = 1; $i <= 4; ++$i) {
|
||||
add_category($i, (object)array('slug' => 'test-' . $i));
|
||||
}
|
||||
|
||||
$result = SC($which, $relative_to);
|
||||
if ($expected_result === false) {
|
||||
$this->assertTrue(false === $result);
|
||||
} else {
|
||||
$this->assertEquals($expected_result, $result->term_id);
|
||||
}
|
||||
}
|
||||
|
||||
function providerTestF() {
|
||||
return array(
|
||||
array(null, array(1 => 'one')),
|
||||
|
|
Loading…
Reference in New Issue