ENHANCEMENT Extension arguments are now passed through to add_to_class()

static function on Extension classes.
BUGFIX FulltextSearchable didn't pass through arguments, use now
available $args parameter with FulltextSearchable::add_to_class()
This commit is contained in:
Sean Harvey 2012-03-12 16:14:47 +13:00
parent d63efeb4a5
commit f63497d6f9
6 changed files with 17 additions and 29 deletions

View File

@ -52,7 +52,7 @@ abstract class Extension {
* @static * @static
* @param $class * @param $class
*/ */
static function add_to_class($class, $extensionClass) { static function add_to_class($class, $extensionClass, $args) {
Config::add_static_source($class, $extensionClass); Config::add_static_source($class, $extensionClass);
} }

View File

@ -547,12 +547,12 @@ abstract class Object {
if($extensions = Config::inst()->get($class, 'extensions', Config::UNINHERITED)) { if($extensions = Config::inst()->get($class, 'extensions', Config::UNINHERITED)) {
foreach($extensions as $extension) { foreach($extensions as $extension) {
// Get the extension class for this extension // Get the extension class for this extension
$extensionClass = Extension::get_classname_without_arguments($extension); list($extensionClass, $extensionArgs) = self::parse_class_spec($extension);
// If we haven't told that extension it's attached to this class yet, do that now // If we haven't told that extension it's attached to this class yet, do that now
if (!isset(self::$_added_extensions[$extensionClass][$class])) { if (!isset(self::$_added_extensions[$extensionClass][$class])) {
// First call the add_to_class method - this will inherit down & is defined on Extension, so if not defined, no worries // First call the add_to_class method - this will inherit down & is defined on Extension, so if not defined, no worries
call_user_func(array($extensionClass, 'add_to_class'), $class, $extensionClass); call_user_func(array($extensionClass, 'add_to_class'), $class, $extensionClass, $extensionArgs);
// Then register it as having been told about us // Then register it as having been told about us
if (!isset(self::$_added_extensions[$extensionClass])) self::$_added_extensions[$extensionClass] = array($class => true); if (!isset(self::$_added_extensions[$extensionClass])) self::$_added_extensions[$extensionClass] = array($class => true);

View File

@ -32,7 +32,7 @@ abstract class DataExtension extends Extension {
); );
static function add_to_class($class, $extensionClass) { static function add_to_class($class, $extensionClass, $args) {
if(method_exists($class, 'extraDBFields')) { if(method_exists($class, 'extraDBFields')) {
$extraStaticsMethod = 'extraDBFields'; $extraStaticsMethod = 'extraDBFields';
} else { } else {
@ -57,7 +57,7 @@ abstract class DataExtension extends Extension {
DataObject::$cache_has_own_table_field[$class] = null; DataObject::$cache_has_own_table_field[$class] = null;
} }
parent::add_to_class($class, $extensionClass); parent::add_to_class($class, $extensionClass, $args);
} }
public static function unload_extra_statics($class, $extension) { public static function unload_extra_statics($class, $extension) {

View File

@ -25,9 +25,9 @@ class Hierarchy extends DataExtension {
function augmentWrite(&$manipulation) { function augmentWrite(&$manipulation) {
} }
static function add_to_class($class, $extensionClass) { static function add_to_class($class, $extensionClass, $args) {
Config::inst()->update($class, 'has_one', array('Parent' => $class)); Config::inst()->update($class, 'has_one', array('Parent' => $class));
parent::add_to_class($class, $extensionClass); parent::add_to_class($class, $extensionClass, $args);
} }
/** /**

View File

@ -107,9 +107,9 @@ class Versioned extends DataExtension {
'Version' => 'Int' 'Version' => 'Int'
); );
static function add_to_class($class, $extensionClass) { static function add_to_class($class, $extensionClass, $args) {
Config::inst()->update($class, 'has_many', array('Versions' => $class)); Config::inst()->update($class, 'has_many', array('Versions' => $class));
parent::add_to_class($class, $extensionClass); parent::add_to_class($class, $extensionClass, $args);
} }
/** /**

View File

@ -77,28 +77,16 @@ class FulltextSearchable extends DataExtension {
parent::__construct(); parent::__construct();
} }
/** static function add_to_class($class, $extensionClass, $args) {
* Config::inst()->update($class, 'indexes', array('SearchFields' => array(
* @param string $class 'type' => 'fulltext',
* @param string $extension 'name' => 'SearchFields',
* @return array 'value' => $args[0]
*/ )));
function extraStatics($class=null, $extension=null) {
if($extension && preg_match('/\([\'"](.*)[\'"]\)/', $extension, $matches)) {
$searchFields = $matches[1];
return array( parent::add_to_class($class, $extensionClass, $args);
'indexes' => array(
"SearchFields" => Array(
'type'=>'fulltext',
'name'=>'SearchFields',
'value'=> $searchFields
),
)
);
}
} }
/** /**
* Shows all classes that had the {@link FulltextSearchable} extension applied through {@link enable()}. * Shows all classes that had the {@link FulltextSearchable} extension applied through {@link enable()}.
* *