Merge pull request #1314 from kinglozzer/hide_ancestor

FIX: Setting hide_ancestor=true causes a random page type to be hidden
This commit is contained in:
Daniel Hensby 2016-01-25 11:57:04 +00:00
commit 0eb4b8e256
2 changed files with 14 additions and 3 deletions

View File

@ -392,7 +392,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
* *
* @return array * @return array
*/ */
static public function page_type_classes() { public static function page_type_classes() {
$classes = ClassInfo::getValidSubClasses(); $classes = ClassInfo::getValidSubClasses();
$baseClassIndex = array_search('SiteTree', $classes); $baseClassIndex = array_search('SiteTree', $classes);
@ -417,10 +417,12 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
$kill_ancestors = array_unique($kill_ancestors); $kill_ancestors = array_unique($kill_ancestors);
foreach($kill_ancestors as $mark) { foreach($kill_ancestors as $mark) {
// unset from $classes // unset from $classes
$idx = array_search($mark, $classes); $idx = array_search($mark, $classes, true);
if ($idx !== false) {
unset($classes[$idx]); unset($classes[$idx]);
} }
} }
}
return $classes; return $classes;
} }

View File

@ -878,6 +878,15 @@ class SiteTreeTest extends SapphireTest {
$classes = SiteTree::page_type_classes(); $classes = SiteTree::page_type_classes();
$this->assertNotContains('SiteTree', $classes, 'Page types do not include base class'); $this->assertNotContains('SiteTree', $classes, 'Page types do not include base class');
$this->assertContains('Page', $classes, 'Page types do contain subclasses'); $this->assertContains('Page', $classes, 'Page types do contain subclasses');
// Testing what happens in an incorrect config value is set - hide_ancestor should be a string
Config::inst()->update('SiteTreeTest_ClassA', 'hide_ancestor', true);
$newClasses = SiteTree::page_type_classes();
$this->assertEquals(
$classes,
$newClasses,
'Setting hide_ancestor to a boolean (incorrect) value caused a page class to be hidden'
);
} }
public function testAllowedChildren() { public function testAllowedChildren() {