From 651db07359cd83abe8af70b92d43218f7188c717 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Fri, 6 Nov 2009 07:33:06 -0500 Subject: [PATCH] adding caching --- classes/ComicPressComicPost.inc | 7 ++ classes/ComicPressStoryline.inc | 122 ++++++++++++++++-------------- test/ComicPressComicPostTest.php | 4 + test/ComicPressNavigationTest.php | 1 - test/ComicPressStorylineTest.php | 39 +++++++--- 5 files changed, 105 insertions(+), 68 deletions(-) diff --git a/classes/ComicPressComicPost.inc b/classes/ComicPressComicPost.inc index fbda9fe..e2a6287 100644 --- a/classes/ComicPressComicPost.inc +++ b/classes/ComicPressComicPost.inc @@ -203,6 +203,13 @@ class ComicPressComicPost { update_post_meta($this->post->ID, 'comic_ordering', $new_order); } + + function get_parent_categories() { + $parents = wp_get_post_categories($this->post->ID); + do { + $parents + } while ($parents_found); + } } ?> \ No newline at end of file diff --git a/classes/ComicPressStoryline.inc b/classes/ComicPressStoryline.inc index 2ec3b00..08a3155 100644 --- a/classes/ComicPressStoryline.inc +++ b/classes/ComicPressStoryline.inc @@ -4,7 +4,7 @@ require_once('ComicPress.inc'); require_once('ComicPressDBInterface.inc'); class ComicPressStoryline { - var $_structure, $root_category; + var $_structure; var $_category_search; function read_from_options() { @@ -52,64 +52,76 @@ class ComicPressStoryline { * @return boolean True if the structure was valid. */ function create_structure($structure) { - $new_structure = array(); - $parent = null; - $all_leaves = array(); - $this->root_category = false; - - $adjacents_by_parent = array(); - - if (is_string($structure)) { - $structure = explode(',', $structure); - } - - if (is_array($structure)) { - $is_valid = true; - foreach ($structure as $branch) { - if (is_string($branch)) { - $parts = explode('/', $branch); - $valid = false; - if (count($parts) > 1) { - if ($parts[0] == '0') { $valid = true; } - } - if (!$valid) { - $is_valid = false; break; - } else { - $data = array(); - $leaf = end($parts); - $all_leaves[] = $leaf; - - $data['level'] = count($parts) - 1; - - if (count($parts) > 2) { - $parent = $parts[count($parts) - 2]; - - if (!isset($adjacents_by_parent[$parent])) { - $adjacents_by_parent[$parent] = array(); - } - $adjacents_by_parent[$parent][] = $leaf; - - $data['parent'] = $parent; - } else { - $this->root_category = $leaf; - } - - $new_structure[$leaf] = $data; - } - } else { - $is_valid = false; break; - } + $key = null; + if (is_string($structure)) { + $key = $structure; + $structure = explode(',', $structure); + } else { + if (is_array($structure)) { + $key = implode(',', $structure); } - if ($is_valid) { - for ($i = 0; $i < count($all_leaves); ++$i) { - foreach (array('previous' => -1, 'next' => 1) as $type => $dir) { - if (isset($all_leaves[$i + $dir])) { - $new_structure[$all_leaves[$i]][$type] = $all_leaves[$i + $dir]; + } + + if (!is_null($key)) { + $key = "storyline-structure-${key}"; + + if (($result = wp_cache_get($key, 'comicpress')) !== false) { + $this->_structure = $result; + } else { + $new_structure = array(); + $parent = null; + $all_leaves = array(); + + $adjacents_by_parent = array(); + + if (is_array($structure)) { + $is_valid = true; + foreach ($structure as $branch) { + if (is_string($branch)) { + $parts = explode('/', $branch); + $valid = false; + if (count($parts) > 1) { + if ($parts[0] == '0') { $valid = true; } + } + if (!$valid) { + $is_valid = false; break; + } else { + $data = array(); + $leaf = end($parts); + $all_leaves[] = $leaf; + + $data['level'] = count($parts) - 1; + + if (count($parts) > 2) { + $parent = $parts[count($parts) - 2]; + + if (!isset($adjacents_by_parent[$parent])) { + $adjacents_by_parent[$parent] = array(); + } + $adjacents_by_parent[$parent][] = $leaf; + + $data['parent'] = $parent; + } + + $new_structure[$leaf] = $data; + } + } else { + $is_valid = false; break; } } - } + if ($is_valid) { + for ($i = 0; $i < count($all_leaves); ++$i) { + foreach (array('previous' => -1, 'next' => 1) as $type => $dir) { + if (isset($all_leaves[$i + $dir])) { + $new_structure[$all_leaves[$i]][$type] = $all_leaves[$i + $dir]; + } + } + } - $this->_structure = $new_structure; + $this->_structure = $new_structure; + } + } + wp_cache_set($key, $this->_structure, 'comicpress'); } } return is_array($this->_structure); diff --git a/test/ComicPressComicPostTest.php b/test/ComicPressComicPostTest.php index 3dc834d..1ba24a8 100644 --- a/test/ComicPressComicPostTest.php +++ b/test/ComicPressComicPostTest.php @@ -161,6 +161,10 @@ class ComicPressComicPostTest extends PHPUnit_Framework_TestCase { $this->assertEquals($expected_result, get_post_meta(1, 'comic_ordering', true)); } + + function testFindParents() { + + } } ?> \ No newline at end of file diff --git a/test/ComicPressNavigationTest.php b/test/ComicPressNavigationTest.php index 93c740e..a135904 100644 --- a/test/ComicPressNavigationTest.php +++ b/test/ComicPressNavigationTest.php @@ -17,7 +17,6 @@ class ComicPressNavigationTest extends PHPUnit_Framework_TestCase { $dbi = $this->getMock('ComicPressDBInterface', array('get_previous_comic', 'get_next_comic', 'get_first_comic', 'get_last_comic')); $storyline = new ComicPressStoryline(); - $storyline->root_category = 1; $storyline->_structure = array( '1' => array('next' => 2), '2' => array('previous' => 1, 'next' => 3), diff --git a/test/ComicPressStorylineTest.php b/test/ComicPressStorylineTest.php index f34bae6..6b05021 100644 --- a/test/ComicPressStorylineTest.php +++ b/test/ComicPressStorylineTest.php @@ -35,13 +35,11 @@ class ComicPressStorylineTest extends PHPUnit_Framework_TestCase { ), array( array('0/1'), - array('1' => array('level' => 1)), - 1 + array('1' => array('level' => 1)) ), array( array('0/1', '0/1/2'), - array('1' => array('next' => 2, 'level' => 1), '2' => array('parent' => 1, 'previous' => 1, 'level' => 2)), - 1 + array('1' => array('next' => 2, 'level' => 1), '2' => array('parent' => 1, 'previous' => 1, 'level' => 2)) ), array( array('0/1', '0/1/2', '0/1/3'), @@ -49,8 +47,7 @@ class ComicPressStorylineTest extends PHPUnit_Framework_TestCase { '1' => array('next' => 2, 'level' => 1), '2' => array('parent' => 1, 'previous' => 1, 'next' => 3, 'level' => 2), '3' => array('parent' => 1, 'previous' => 2, 'level' => 2), - ), - 1 + ) ), array( array('0/1', '0/1/2', '0/1/2/3', '0/1/2/4', '0/1/5'), @@ -60,8 +57,7 @@ class ComicPressStorylineTest extends PHPUnit_Framework_TestCase { '3' => array('parent' => 2, 'next' => 4, 'previous' => 2, 'level' => 3), '4' => array('parent' => 2, 'next' => 5, 'previous' => 3, 'level' => 3), '5' => array('parent' => 1, 'previous' => 4, 'level' => 2), - ), - 1 + ) ), 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'), @@ -75,19 +71,38 @@ class ComicPressStorylineTest extends PHPUnit_Framework_TestCase { '7' => array('parent' => 5, 'next' => 8, 'previous' => 6, 'level' => 3), '8' => array('parent' => 5, 'next' => 9, 'previous' => 7, 'level' => 3), '9' => array('parent' => 1, 'previous' => 8, 'level' => 2), - ), - 1 + ) ), ); } /** * @dataProvider providerTestCreateStorylineStructure + * @group nocache */ - function testCreateStorylineStructure($input, $expected_structure, $expected_root_category) { + function testCreateStorylineStructure($input, $expected_structure) { + global $wp_object_cache; + $this->assertTrue(empty($wp_object_cache->cache['comicpress'])); + + $this->assertEquals(is_array($expected_structure), $this->css->create_structure($input)); + $this->assertEquals($expected_structure, $this->css->_structure); + + if ($expected_structure !== false) { + $this->assertTrue(!empty($wp_object_cache->cache['comicpress'])); + } + } + + /** + * @dataProvider providerTestCreateStorylineStructure + * @group cache + */ + function testCreateStorylineStructureFromCache($input, $expected_structure) { + if (is_string($input)) { + wp_cache_set("storyline-structure-${input}", $expected_structure, 'comicpress'); + } + $this->assertEquals(is_array($expected_structure), $this->css->create_structure($input)); $this->assertEquals($expected_structure, $this->css->_structure); - $this->assertEquals($expected_root_category, $this->css->root_category); } function providerTestGetFields() {