Merge pull request #5175 from Firesphere/pulls/feature-set-owner-allmethods

Enhancement: Set the owner on an extension
This commit is contained in:
Damian Mooyman 2016-03-21 17:30:37 +13:00
commit 78f19bd2ed
2 changed files with 25 additions and 2 deletions

View File

@ -816,7 +816,9 @@ abstract class Object {
} }
if(method_exists($extension, 'allMethodNames')) { if(method_exists($extension, 'allMethodNames')) {
if ($extension instanceof Extension) $extension->setOwner($this);
$methods = $extension->allMethodNames(true); $methods = $extension->allMethodNames(true);
if ($extension instanceof Extension) $extension->clearOwner();
} else { } else {
if(!isset(self::$built_in_methods[$extension->class])) { if(!isset(self::$built_in_methods[$extension->class])) {

View File

@ -166,6 +166,13 @@ class DataExtensionTest extends SapphireTest {
$this->assertEquals("hello world", $do->testMethodApplied()); $this->assertEquals("hello world", $do->testMethodApplied());
} }
public function testExtensionAllMethodNamesHasOwner() {
/** @var DataExtensionTest_MyObject $do */
$do = DataExtensionTest_MyObject::create();
$this->assertTrue($do->hasMethod('getTestValueWithDataExtensionTest_MyObject'));
}
public function testPageFieldGeneration() { public function testPageFieldGeneration() {
$page = new DataExtensionTest_CMSFieldsBase(); $page = new DataExtensionTest_CMSFieldsBase();
$fields = $page->getCMSFields(); $fields = $page->getCMSFields();
@ -365,17 +372,31 @@ class DataExtensionTest_Faves extends DataExtension implements TestOnly {
} }
class DataExtensionTest_AppliedToDO extends DataExtension implements TestOnly { class DataExtensionTest_AppliedToDO extends DataExtension implements TestOnly
{
public function testMethodApplied() { public function testMethodApplied()
{
return "hello world"; return "hello world";
} }
} }
class DataExtensionTest_AllMethodNames extends DataExtension implements TestOnly
{
public function allMethodNames()
{
return array(
strtolower('getTestValueWith'.$this->owner->ClassName)
);
}
}
DataExtensionTest_MyObject::add_extension('DataExtensionTest_Ext1'); DataExtensionTest_MyObject::add_extension('DataExtensionTest_Ext1');
DataExtensionTest_MyObject::add_extension('DataExtensionTest_Ext2'); DataExtensionTest_MyObject::add_extension('DataExtensionTest_Ext2');
DataExtensionTest_MyObject::add_extension('DataExtensionTest_Faves'); DataExtensionTest_MyObject::add_extension('DataExtensionTest_Faves');
DataExtensionTest_MyObject::add_extension('DataExtensionTest_AllMethodNames');
/** /**
* Base class for CMS fields * Base class for CMS fields