From 4922d6d284d1891338e80c3055910e845b3f23e0 Mon Sep 17 00:00:00 2001
From: Samuel Georges
Date: Sun, 20 Mar 2016 16:04:27 +1100
Subject: [PATCH] Retain previous listInTheme cache functionality
---
modules/cms/classes/CmsObject.php | 14 +-
modules/cms/classes/Page.php | 2 +-
tests/unit/cms/classes/SectionParserTest.php | 338 -------------------
3 files changed, 14 insertions(+), 340 deletions(-)
delete mode 100644 tests/unit/cms/classes/SectionParserTest.php
diff --git a/modules/cms/classes/CmsObject.php b/modules/cms/classes/CmsObject.php
index 02f160017..f17ae5c50 100644
--- a/modules/cms/classes/CmsObject.php
+++ b/modules/cms/classes/CmsObject.php
@@ -99,7 +99,19 @@ class CmsObject extends HalcyonModel implements CmsObjectContract
*/
public static function listInTheme($theme, $skipCache = false)
{
- return static::inTheme($theme)->get();
+ $instance = static::inTheme($theme);
+
+ if ($skipCache) {
+ return $instance->get();
+ }
+
+ $items = $instance->newQuery()->lists('fileName');
+
+ $items = array_map(function ($item) use ($theme) {
+ return static::loadCached($theme, $item);
+ }, $items);
+
+ return $instance->newCollection($items);
}
/**
diff --git a/modules/cms/classes/Page.php b/modules/cms/classes/Page.php
index 625fac40d..b25c550f0 100644
--- a/modules/cms/classes/Page.php
+++ b/modules/cms/classes/Page.php
@@ -75,7 +75,7 @@ class Page extends CmsCompoundObject
}
/**
- * Returns a list of layouts available in the theme.
+ * Returns a list of layouts available in the theme.
* This method is used by the form widget.
* @return array Returns an array of strings.
*/
diff --git a/tests/unit/cms/classes/SectionParserTest.php b/tests/unit/cms/classes/SectionParserTest.php
deleted file mode 100644
index 0f200ad2f..000000000
--- a/tests/unit/cms/classes/SectionParserTest.php
+++ /dev/null
@@ -1,338 +0,0 @@
-assertInternalType('array', $result);
- $this->assertCount(3, $result);
- $this->assertArrayHasKey("settings", $result);
- $this->assertArrayHasKey("code", $result);
- $this->assertArrayHasKey("markup", $result);
- $this->assertEmpty($result["settings"]);
- $this->assertNull($result["code"]);
- $this->assertNotNull($result["markup"]);
- $this->assertEquals("this is a twig content", $result["markup"]);
-
- // Test two sections
- $result = SectionParser::parse("url = \"/blog/post/\" \n==\n this is a twig content");
- $this->assertInternalType('array', $result);
- $this->assertCount(3, $result);
- $this->assertArrayHasKey("settings", $result);
- $this->assertArrayHasKey("code", $result);
- $this->assertArrayHasKey("markup", $result);
- $this->assertNotNull($result["markup"]);
- $this->assertNotNull($result["settings"]);
- $this->assertNull($result["code"]);
- $this->assertEquals("this is a twig content", $result["markup"]);
- $this->assertInternalType("array", $result["settings"]);
- $this->assertArrayHasKey("url", $result["settings"]);
- $this->assertEquals("/blog/post/", $result["settings"]["url"]);
-
- // Test three sections
- $result = SectionParser::parse("url = \"/blog/post/\"\n[section]\nindex = value \n===\n \$var = 23; \n phpinfo(); \n===\n this is a twig content");
- $this->assertInternalType('array', $result);
- $this->assertCount(3, $result);
- $this->assertArrayHasKey("settings", $result);
- $this->assertArrayHasKey("code", $result);
- $this->assertArrayHasKey("markup", $result);
- $this->assertNotNull($result["settings"]);
- $this->assertNotNull($result["markup"]);
- $this->assertNotNull($result["code"]);
- $this->assertEquals("this is a twig content", $result["markup"]);
- $this->assertInternalType("array", $result["settings"]);
- $this->assertArrayHasKey("url", $result["settings"]);
- $this->assertEquals("/blog/post/", $result["settings"]["url"]);
- $this->assertContains("\$var = 23;", $result["code"]);
- $this->assertContains("phpinfo();", $result["code"]);
-
- $this->assertArrayHasKey("section", $result["settings"]);
- $this->assertInternalType("array", $result["settings"]["section"]);
- $this->assertArrayHasKey("index", $result["settings"]["section"]);
- $this->assertEquals("value", $result["settings"]["section"]["index"]);
-
- // Test zero sections
- $result = SectionParser::parse("");
- $this->assertCount(3, $result);
- $this->assertArrayHasKey("settings", $result);
- $this->assertArrayHasKey("code", $result);
- $this->assertArrayHasKey("markup", $result);
- $this->assertEmpty($result["settings"]);
- $this->assertNotNull($result["markup"]);
- $this->assertNull($result["code"]);
- $this->assertEquals("", $result["markup"]);
- }
-
- public function testParseOffset()
- {
-
- // Test three sections
- $content = <<Line 7
-ESC;
-
- $result = SectionParser::parseOffset($content);
- $this->assertArrayHasKey("settings", $result);
- $this->assertArrayHasKey("code", $result);
- $this->assertArrayHasKey("markup", $result);
- $this->assertNotNull($result["settings"]);
- $this->assertNotNull($result["code"]);
- $this->assertNotNull($result["markup"]);
- $this->assertEquals(1, $result["settings"]);
- $this->assertEquals(3, $result["code"]);
- $this->assertEquals(7, $result["markup"]);
-
- // Test two sections
- $content = <<Line 5
-ESC;
- $result = SectionParser::parseOffset($content);
- $this->assertArrayHasKey("settings", $result);
- $this->assertArrayHasKey("code", $result);
- $this->assertArrayHasKey("markup", $result);
- $this->assertNotNull($result["markup"]);
- $this->assertNotNull($result["settings"]);
- $this->assertNull($result["code"]);
- $this->assertEquals(1, $result["settings"]);
- $this->assertEquals(5, $result["markup"]);
-
- // Test two sections with white space
- $content = <<Line 12
-ESC;
- $result = SectionParser::parseOffset($content);
- $this->assertArrayHasKey("settings", $result);
- $this->assertArrayHasKey("code", $result);
- $this->assertArrayHasKey("markup", $result);
- $this->assertNotNull($result["markup"]);
- $this->assertNotNull($result["settings"]);
- $this->assertNull($result["code"]);
- $this->assertEquals(3, $result["settings"]);
- $this->assertEquals(12, $result["markup"]);
-
- // Test one section
- $content = <<Line 1
-Line 2
-Line 3
-ESC;
- $result = SectionParser::parseOffset($content);
- $this->assertArrayHasKey("settings", $result);
- $this->assertArrayHasKey("code", $result);
- $this->assertArrayHasKey("markup", $result);
- $this->assertNotNull($result["markup"]);
- $this->assertNull($result["settings"]);
- $this->assertNull($result["code"]);
- $this->assertEquals(1, $result["markup"]);
-
-
- // Test empty PHP
- $content = <<Line 4
-ESC;
-
- $result = SectionParser::parseOffset($content);
- $this->assertArrayHasKey("settings", $result);
- $this->assertArrayHasKey("code", $result);
- $this->assertArrayHasKey("markup", $result);
- $this->assertNotNull($result["settings"]);
- $this->assertNotNull($result["code"]);
- $this->assertNotNull($result["markup"]);
- $this->assertEquals(1, $result["settings"]);
- $this->assertEquals(3, $result["code"]);
- $this->assertEquals(4, $result["markup"]);
-
- // Test with PHP tags
- $content = <<
-==
-Line 10
-ESC;
-
- $result = SectionParser::parseOffset($content);
- $this->assertArrayHasKey("settings", $result);
- $this->assertArrayHasKey("code", $result);
- $this->assertArrayHasKey("markup", $result);
- $this->assertNotNull($result["settings"]);
- $this->assertNotNull($result["code"]);
- $this->assertNotNull($result["markup"]);
- $this->assertEquals(1, $result["settings"]);
- $this->assertEquals(5, $result["code"]);
- $this->assertEquals(10, $result["markup"]);
-
- // Test with PHP tags and whitespace
- $content = <<
-==
-Line 18
-ESC;
-
- $result = SectionParser::parseOffset($content);
- $this->assertArrayHasKey("settings", $result);
- $this->assertArrayHasKey("code", $result);
- $this->assertArrayHasKey("markup", $result);
- $this->assertNotNull($result["settings"]);
- $this->assertNotNull($result["code"]);
- $this->assertNotNull($result["markup"]);
- $this->assertEquals(1, $result["settings"]);
- $this->assertEquals(13, $result["code"]);
- $this->assertEquals(18, $result["markup"]);
-
- // Test with PHP tags and whitespace both sides
- $content = <<
-==
-Line 25
-ESC;
-
- $result = SectionParser::parseOffset($content);
- $this->assertArrayHasKey("settings", $result);
- $this->assertArrayHasKey("code", $result);
- $this->assertArrayHasKey("markup", $result);
- $this->assertNotNull($result["settings"]);
- $this->assertNotNull($result["code"]);
- $this->assertNotNull($result["markup"]);
- $this->assertEquals(1, $result["settings"]);
- $this->assertEquals(20, $result["code"]);
- $this->assertEquals(25, $result["markup"]);
-
- // Test with whitespace on PHP and Twig
- $content = <<Line 19
-ESC;
-
- $result = SectionParser::parseOffset($content);
- $this->assertArrayHasKey("settings", $result);
- $this->assertArrayHasKey("code", $result);
- $this->assertArrayHasKey("markup", $result);
- $this->assertNotNull($result["settings"]);
- $this->assertNotNull($result["code"]);
- $this->assertNotNull($result["markup"]);
- $this->assertEquals(1, $result["settings"]);
- $this->assertEquals(8, $result["code"]);
- $this->assertEquals(19, $result["markup"]);
-
- // Test namespaces
- $content = <<Line 16
-ESC;
-
- $result = SectionParser::parseOffset($content);
- $this->assertArrayHasKey("settings", $result);
- $this->assertArrayHasKey("code", $result);
- $this->assertArrayHasKey("markup", $result);
- $this->assertNotNull($result["settings"]);
- $this->assertNotNull($result["code"]);
- $this->assertNotNull($result["markup"]);
- $this->assertEquals(2, $result["settings"]);
- $this->assertEquals(7, $result["code"]);
- $this->assertEquals(16, $result["markup"]);
-
- }
-
-}
\ No newline at end of file