commit 9db75297794b36ab0d8ca1ceac02cb5b2b70da85 Author: Damien Tournoud Date: Mon Feb 13 07:03:55 2012 +0100 Issue #1427040: Behaviors are not instantiated properly. diff --git a/entityreference.module b/entityreference.module index 8154503..22132ef 100644 --- a/entityreference.module +++ b/entityreference.module @@ -122,7 +122,7 @@ function entityreference_get_behavior_handlers($field, $instance = NULL) { continue; } - $object_cache[$identifier][] = _entityreference_get_behavior_handler($behavior, $field, $instance); + $object_cache[$identifier][] = _entityreference_get_behavior_handler($behavior); } } @@ -135,7 +135,7 @@ function entityreference_get_behavior_handlers($field, $instance = NULL) { * @param $handler * The behavior handler name. */ -function _entityreference_get_behavior_handler($behavior, $field, $instance = NULL) { +function _entityreference_get_behavior_handler($behavior) { $object_cache = drupal_static(__FUNCTION__); if (!isset($object_cache[$behavior])) { @@ -143,7 +143,7 @@ function _entityreference_get_behavior_handler($behavior, $field, $instance = NU $class = ctools_plugin_load_class('entityreference', 'behavior', $behavior, 'class'); $class = class_exists($class) ? $class : 'EntityReference_BehaviorHandler_Broken'; - $object_cache[$behavior] = new $class($behavior, $field, $instance); + $object_cache[$behavior] = new $class($behavior); } return $object_cache[$behavior]; @@ -402,8 +402,8 @@ function _entityreference_get_behavior_elements(&$element, $field, $instance, $l '#disabled' => $plugin['force enabled'], ); - $handler = _entityreference_get_behavior_handler($name, $field, $instance); - if ($behavior_elements = $handler->settingsForm()) { + $handler = _entityreference_get_behavior_handler($name); + if ($behavior_elements = $handler->settingsForm($field, $instance)) { $enable_element = $level == 'field' ? 'field[settings][handler_settings][behaviors]' : 'instance[settings][behaviors]'; foreach ($behavior_elements as $key => &$behavior_element) { $behavior_element += array( @@ -430,7 +430,7 @@ function entityreference_get_accessible_behavior_plugins($field, $instance) { ctools_include('plugins'); $plugins = array('field' => array(), 'instance' => array()); foreach (ctools_get_plugins('entityreference', 'behavior') as $name => $plugin) { - $handler = _entityreference_get_behavior_handler($name, $field, $instance); + $handler = _entityreference_get_behavior_handler($name); $level = $plugin['behavior type']; if ($handler->access($field, $instance)) { $plugins[$level][$name] = $plugin; diff --git a/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceFieldBehaviorExample.class.php b/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceFieldBehaviorExample.class.php index 6d45058..788d996 100644 --- a/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceFieldBehaviorExample.class.php +++ b/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceFieldBehaviorExample.class.php @@ -21,7 +21,7 @@ class EntityReferenceFieldBehaviorExample extends EntityReference_BehaviorHandle /** * Generate a settings form for this handler. */ - public function settingsForm() { + public function settingsForm($field, $instance) { $form['test_field'] = array( '#type' => 'checkbox', '#title' => t('Field behavoir setting'), diff --git a/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceInstanceBehaviorExample.class.php b/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceInstanceBehaviorExample.class.php index 2ca2d3e..ed9ff14 100644 --- a/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceInstanceBehaviorExample.class.php +++ b/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceInstanceBehaviorExample.class.php @@ -21,7 +21,7 @@ class EntityReferenceInstanceBehaviorExample extends EntityReference_BehaviorHan /** * Generate a settings form for this handler. */ - public function settingsForm() { + public function settingsForm($field, $instance) { $form['test_instance'] = array( '#type' => 'checkbox', '#title' => t('Instance behavoir setting'), diff --git a/plugins/behavior/abstract.inc b/plugins/behavior/abstract.inc index ec4303c..d3ce5b8 100644 --- a/plugins/behavior/abstract.inc +++ b/plugins/behavior/abstract.inc @@ -9,6 +9,14 @@ interface EntityReference_BehaviorHandler { /** + * Constructor for the behavior. + * + * @param $behavior + * The name of the behavior plugin. + */ + public function __construct($behavior); + + /** * Alter the field schema. * * @see hook_field_schema() @@ -81,7 +89,7 @@ interface EntityReference_BehaviorHandler { /** * Generate a settings form for this handler. */ - public function settingsForm(); + public function settingsForm($field, $instance); /** * Determine if handler should appear. @@ -94,23 +102,22 @@ interface EntityReference_BehaviorHandler { */ abstract class EntityReference_BehaviorHandler_Abstract implements EntityReference_BehaviorHandler { - public function __construct($behavior, array $field, array $instance = NULL) { - ctools_include('plugins'); - $plugin = ctools_get_plugins('entityreference', 'behavior', $behavior); - $this->plugin = $plugin; + /** + * The name of the behavior plugin. + */ + protected $behavior; - if ($plugin['behavior type'] == 'field') { - $this->settings = !empty($field['settings']['handler_settings']['behavior']) ? $field['settings']['handler_settings']['behavior'] : array(); - } - else { - $this->settings = !empty($instance['settings']['behavior']) ? $instance['settings']['behavior'] : array(); - } + /** + * The plugin definition. + */ + protected $plugin; - $this->status = !empty($settings['status']) ? $settings['status'] : FALSE; - unset($this->settings['status']); + public function __construct($behavior) { + $this->behavior = $behavior; - $this->field = $field; - $this->instance = $instance; + ctools_include('plugins'); + $plugin = ctools_get_plugins('entityreference', 'behavior', $behavior); + $this->plugin = $plugin; } public function schema_alter(&$schema, $field) {} @@ -133,7 +140,7 @@ abstract class EntityReference_BehaviorHandler_Abstract implements EntityReferen public function delete($entity_type, $entity, $field, $instance, $langcode, &$items) {} - public function settingsForm() {} + public function settingsForm($field, $instance) {} public function access($field, $instance) { return TRUE; @@ -144,7 +151,7 @@ abstract class EntityReference_BehaviorHandler_Abstract implements EntityReferen * A broken implementation of EntityReference_BehaviorHandler. */ class EntityReference_BehaviorHandler_Broken extends EntityReference_BehaviorHandler_Abstract { - public function settingsForm() { + public function settingsForm($field, $instance) { $form['behavior_handler'] = array( '#markup' => t('The selected behavior handler is broken.'), );