Skip to content

Commit

Permalink
ENHANCEMENT Extension arguments are now passed through to add_to_class()
Browse files Browse the repository at this point in the history
static function on Extension classes.
BUGFIX FulltextSearchable didn't pass through arguments, use now
available $args parameter with FulltextSearchable::add_to_class()
  • Loading branch information
Sean Harvey committed Mar 12, 2012
1 parent d63efeb commit f63497d
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 29 deletions.
2 changes: 1 addition & 1 deletion core/Extension.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ function __construct() {
* @static
* @param $class
*/
static function add_to_class($class, $extensionClass) {
static function add_to_class($class, $extensionClass, $args) {
Config::add_static_source($class, $extensionClass);
}

Expand Down
4 changes: 2 additions & 2 deletions core/Object.php
Original file line number Diff line number Diff line change
Expand Up @@ -547,12 +547,12 @@ public function __construct() {
if($extensions = Config::inst()->get($class, 'extensions', Config::UNINHERITED)) {
foreach($extensions as $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 (!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
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
if (!isset(self::$_added_extensions[$extensionClass])) self::$_added_extensions[$extensionClass] = array($class => true);
Expand Down
4 changes: 2 additions & 2 deletions model/DataExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -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')) {
$extraStaticsMethod = 'extraDBFields';
} else {
Expand All @@ -57,7 +57,7 @@ static function add_to_class($class, $extensionClass) {
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) {
Expand Down
4 changes: 2 additions & 2 deletions model/Hierarchy.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ function augmentDatabase() {
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));
parent::add_to_class($class, $extensionClass);
parent::add_to_class($class, $extensionClass, $args);
}

/**
Expand Down
4 changes: 2 additions & 2 deletions model/Versioned.php
Original file line number Diff line number Diff line change
Expand Up @@ -107,9 +107,9 @@ function __construct($stages) {
'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));
parent::add_to_class($class, $extensionClass);
parent::add_to_class($class, $extensionClass, $args);
}

/**
Expand Down
28 changes: 8 additions & 20 deletions search/FulltextSearchable.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,28 +77,16 @@ function __construct($searchFields) {
parent::__construct();
}

/**
*
* @param string $class
* @param string $extension
* @return array
*/
function extraStatics($class=null, $extension=null) {
if($extension && preg_match('/\([\'"](.*)[\'"]\)/', $extension, $matches)) {
$searchFields = $matches[1];
static function add_to_class($class, $extensionClass, $args) {
Config::inst()->update($class, 'indexes', array('SearchFields' => array(
'type' => 'fulltext',
'name' => 'SearchFields',
'value' => $args[0]
)));

return array(
'indexes' => array(
"SearchFields" => Array(
'type'=>'fulltext',
'name'=>'SearchFields',
'value'=> $searchFields
),
)
);
}
parent::add_to_class($class, $extensionClass, $args);
}

/**
* Shows all classes that had the {@link FulltextSearchable} extension applied through {@link enable()}.
*
Expand Down

0 comments on commit f63497d

Please sign in to comment.