more storyline handling stuff
This commit is contained in:
parent
55950e3a0a
commit
3fda650af7
@ -5,6 +5,7 @@ require_once('ComicPressDBInterface.inc');
|
|||||||
|
|
||||||
class ComicPressStoryline {
|
class ComicPressStoryline {
|
||||||
var $_structure, $root_category;
|
var $_structure, $root_category;
|
||||||
|
var $_category_search;
|
||||||
|
|
||||||
function read_from_options() {
|
function read_from_options() {
|
||||||
$this->create_structure($this->get_flattened_storyline());
|
$this->create_structure($this->get_flattened_storyline());
|
||||||
@ -78,6 +79,8 @@ class ComicPressStoryline {
|
|||||||
$leaf = end($parts);
|
$leaf = end($parts);
|
||||||
$all_leaves[] = $leaf;
|
$all_leaves[] = $leaf;
|
||||||
|
|
||||||
|
$data['level'] = count($parts) - 1;
|
||||||
|
|
||||||
if (count($parts) > 2) {
|
if (count($parts) > 2) {
|
||||||
$parent = $parts[count($parts) - 2];
|
$parent = $parts[count($parts) - 2];
|
||||||
|
|
||||||
@ -351,6 +354,65 @@ class ComicPressStoryline {
|
|||||||
}
|
}
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function &include_all() {
|
||||||
|
$this->_category_search = array_keys($this->_structure);
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
function &exclude_all() {
|
||||||
|
$this->_category_search = array();
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _find_children($parent) {
|
||||||
|
$children = array($parent);
|
||||||
|
do {
|
||||||
|
$found_children = false;
|
||||||
|
foreach ($this->_structure as $category_id => $info) {
|
||||||
|
if (!in_array($category_id, $children)) {
|
||||||
|
if (in_array($info['parent'], $children)) {
|
||||||
|
$children[] = $category_id;
|
||||||
|
$found_children = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while ($found_children);
|
||||||
|
|
||||||
|
return $children;
|
||||||
|
}
|
||||||
|
|
||||||
|
function &include_children($parent = null) {
|
||||||
|
$this->_category_search = array_unique(array_merge($this->_category_search, $this->_find_children($parent)));
|
||||||
|
sort($this->_category_search);
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
function &exclude_children($parent = null) {
|
||||||
|
$this->_category_search = array_diff($this->_category_search, $this->_find_children($parent));
|
||||||
|
sort($this->_category_search);
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _find_level_or_above($level = null) {
|
||||||
|
$found = array();
|
||||||
|
foreach ($this->_structure as $category_id => $info) {
|
||||||
|
if ($info['level'] <= $level) { $found[] = $category_id; }
|
||||||
|
}
|
||||||
|
return $found;
|
||||||
|
}
|
||||||
|
|
||||||
|
function &include_level_or_above($level = null) {
|
||||||
|
$this->_category_search = array_unique(array_merge($this->_category_search, $this->_find_level_or_above($level)));
|
||||||
|
sort($this->_category_search);
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
function &exclude_level_or_above($level = null) {
|
||||||
|
$this->_category_search = array_diff($this->_category_search, $this->_find_level_or_above($level));
|
||||||
|
sort($this->_category_search);
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
@ -35,46 +35,46 @@ class ComicPressStorylineTest extends PHPUnit_Framework_TestCase {
|
|||||||
),
|
),
|
||||||
array(
|
array(
|
||||||
array('0/1'),
|
array('0/1'),
|
||||||
array('1' => array()),
|
array('1' => array('level' => 1)),
|
||||||
1
|
1
|
||||||
),
|
),
|
||||||
array(
|
array(
|
||||||
array('0/1', '0/1/2'),
|
array('0/1', '0/1/2'),
|
||||||
array('1' => array('next' => 2), '2' => array('parent' => 1, 'previous' => 1)),
|
array('1' => array('next' => 2, 'level' => 1), '2' => array('parent' => 1, 'previous' => 1, 'level' => 2)),
|
||||||
1
|
1
|
||||||
),
|
),
|
||||||
array(
|
array(
|
||||||
array('0/1', '0/1/2', '0/1/3'),
|
array('0/1', '0/1/2', '0/1/3'),
|
||||||
array(
|
array(
|
||||||
'1' => array('next' => 2),
|
'1' => array('next' => 2, 'level' => 1),
|
||||||
'2' => array('parent' => 1, 'previous' => 1, 'next' => 3),
|
'2' => array('parent' => 1, 'previous' => 1, 'next' => 3, 'level' => 2),
|
||||||
'3' => array('parent' => 1, 'previous' => 2),
|
'3' => array('parent' => 1, 'previous' => 2, 'level' => 2),
|
||||||
),
|
),
|
||||||
1
|
1
|
||||||
),
|
),
|
||||||
array(
|
array(
|
||||||
array('0/1', '0/1/2', '0/1/2/3', '0/1/2/4', '0/1/5'),
|
array('0/1', '0/1/2', '0/1/2/3', '0/1/2/4', '0/1/5'),
|
||||||
array(
|
array(
|
||||||
'1' => array('next' => 2),
|
'1' => array('next' => 2, 'level' => 1),
|
||||||
'2' => array('parent' => 1, 'next' => 3, 'previous' => 1),
|
'2' => array('parent' => 1, 'next' => 3, 'previous' => 1, 'level' => 2),
|
||||||
'3' => array('parent' => 2, 'next' => 4, 'previous' => 2),
|
'3' => array('parent' => 2, 'next' => 4, 'previous' => 2, 'level' => 3),
|
||||||
'4' => array('parent' => 2, 'next' => 5, 'previous' => 3),
|
'4' => array('parent' => 2, 'next' => 5, 'previous' => 3, 'level' => 3),
|
||||||
'5' => array('parent' => 1, 'previous' => 4),
|
'5' => array('parent' => 1, 'previous' => 4, 'level' => 2),
|
||||||
),
|
),
|
||||||
1
|
1
|
||||||
),
|
),
|
||||||
array(
|
array(
|
||||||
array('0/1', '0/1/2', '0/1/2/3', '0/1/2/4', '0/1/5', '0/1/5/6', '0/1/5/7', '0/1/5/8', '0/1/9'),
|
array('0/1', '0/1/2', '0/1/2/3', '0/1/2/4', '0/1/5', '0/1/5/6', '0/1/5/7', '0/1/5/8', '0/1/9'),
|
||||||
array(
|
array(
|
||||||
'1' => array('next' => 2),
|
'1' => array('next' => 2, 'level' => 1),
|
||||||
'2' => array('parent' => 1, 'next' => 3, 'previous' => 1),
|
'2' => array('parent' => 1, 'next' => 3, 'previous' => 1, 'level' => 2),
|
||||||
'3' => array('parent' => 2, 'next' => 4, 'previous' => 2),
|
'3' => array('parent' => 2, 'next' => 4, 'previous' => 2, 'level' => 3),
|
||||||
'4' => array('parent' => 2, 'next' => 5, 'previous' => 3),
|
'4' => array('parent' => 2, 'next' => 5, 'previous' => 3, 'level' => 3),
|
||||||
'5' => array('parent' => 1, 'next' => 6, 'previous' => 4),
|
'5' => array('parent' => 1, 'next' => 6, 'previous' => 4, 'level' => 2),
|
||||||
'6' => array('parent' => 5, 'next' => 7, 'previous' => 5),
|
'6' => array('parent' => 5, 'next' => 7, 'previous' => 5, 'level' => 3),
|
||||||
'7' => array('parent' => 5, 'next' => 8, 'previous' => 6),
|
'7' => array('parent' => 5, 'next' => 8, 'previous' => 6, 'level' => 3),
|
||||||
'8' => array('parent' => 5, 'next' => 9, 'previous' => 7),
|
'8' => array('parent' => 5, 'next' => 9, 'previous' => 7, 'level' => 3),
|
||||||
'9' => array('parent' => 1, 'previous' => 8),
|
'9' => array('parent' => 1, 'previous' => 8, 'level' => 2),
|
||||||
),
|
),
|
||||||
1
|
1
|
||||||
),
|
),
|
||||||
@ -311,6 +311,88 @@ class ComicPressStorylineTest extends PHPUnit_Framework_TestCase {
|
|||||||
|
|
||||||
$this->assertEquals($expected_result, $this->css->_length_sort($data));
|
$this->assertEquals($expected_result, $this->css->_length_sort($data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testIncludeAll() {
|
||||||
|
$this->css->_structure = array(
|
||||||
|
'1' => array('next' => 2),
|
||||||
|
'2' => array('parent' => 1, 'previous' => 1, 'next' => 3),
|
||||||
|
'3' => array('parent' => 2, 'next' => 4, 'previous' => 2),
|
||||||
|
'4' => array('parent' => 2, 'previous' => 3)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals($this->css, $this->css->include_all());
|
||||||
|
$this->assertEquals(array(1,2,3,4), $this->css->_category_search);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testExcludeAll() {
|
||||||
|
$this->css->_category_search = array(1,2,3,4);
|
||||||
|
|
||||||
|
$this->assertEquals($this->css, $this->css->exclude_all());
|
||||||
|
$this->assertEquals(array(), $this->css->_category_search);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testFindChildren() {
|
||||||
|
$this->css->_structure = array(
|
||||||
|
'1' => array('next' => 2),
|
||||||
|
'2' => array('parent' => 1, 'previous' => 1, 'next' => 3),
|
||||||
|
'3' => array('parent' => 2, 'next' => 4, 'previous' => 2),
|
||||||
|
'4' => array('parent' => 2, 'previous' => 3)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(array(2,3,4), $this->css->_find_children(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
function testIncludeChildren() {
|
||||||
|
$css = $this->getMock('ComicPressStoryline', array('_find_children'));
|
||||||
|
$css->expects($this->once())->method('_find_children')->will($this->returnValue(array(2,3,4)));
|
||||||
|
$css->_category_search = array(4,5);
|
||||||
|
|
||||||
|
$css->include_children(2);
|
||||||
|
|
||||||
|
$this->assertEquals(array(2,3,4,5), $css->_category_search);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testExcludeChildren() {
|
||||||
|
$css = $this->getMock('ComicPressStoryline', array('_find_children'));
|
||||||
|
$css->expects($this->once())->method('_find_children')->will($this->returnValue(array(2,3,4)));
|
||||||
|
$css->_category_search = array(4, 5, 6);
|
||||||
|
|
||||||
|
$css->exclude_children(2);
|
||||||
|
|
||||||
|
$this->assertEquals(array(5, 6), $css->_category_search);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testFindLevelOrAbove() {
|
||||||
|
$this->css->_structure = array(
|
||||||
|
'1' => array('next' => 2, 'level' => 1),
|
||||||
|
'2' => array('parent' => 1, 'previous' => 1, 'next' => 3, 'level' => 2),
|
||||||
|
'3' => array('parent' => 2, 'next' => 4, 'previous' => 2, 'level' => 3),
|
||||||
|
'4' => array('parent' => 2, 'previous' => 3, 'level' => 3)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(array(1, 2), $this->css->_find_level_or_above(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
function testIncludeLevelOrAbove() {
|
||||||
|
$css = $this->getMock('ComicPressStoryline', array('_find_level_or_above'));
|
||||||
|
$css->expects($this->once())->method('_find_level_or_above')->will($this->returnValue(array(2,3,4)));
|
||||||
|
$css->_category_search = array(4,5);
|
||||||
|
|
||||||
|
$css->include_level_or_above(2);
|
||||||
|
|
||||||
|
$this->assertEquals(array(2,3,4,5), $css->_category_search);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testExcludeLevelOrAbove() {
|
||||||
|
$css = $this->getMock('ComicPressStoryline', array('_find_level_or_above'));
|
||||||
|
$css->expects($this->once())->method('_find_level_or_above')->will($this->returnValue(array(2,3,4)));
|
||||||
|
$css->_category_search = array(4, 5, 6);
|
||||||
|
|
||||||
|
$css->exclude_level_or_above(2);
|
||||||
|
|
||||||
|
$this->assertEquals(array(5, 6), $css->_category_search);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
Loading…
Reference in New Issue
Block a user