diff --git a/includes/og.field.inc b/includes/og.field.inc index 1b11fb1..7f419de 100644 --- a/includes/og.field.inc +++ b/includes/og.field.inc @@ -31,7 +31,7 @@ function og_field_widget_form(&$form, &$form_state, $field, $instance, $langcode return; } - if ($field['settings']['handler'] != 'og') { + if ($field['settings']['handler'] != 'og' && strpos($field['settings']['handler'], 'og_') !== 0) { $params = array('%label' => $instance['label']); form_error($form, t('Field %label is a group-audience but its Entity selection mode is not defined as "Organic groups" in the field settings page.', $params)); return; diff --git a/og.install b/og.install index 87375c5..d956d92 100644 --- a/og.install +++ b/og.install @@ -73,7 +73,7 @@ function og_uninstall() { } else { $field = field_info_field($instance['field_name']); - if ($field['type'] == 'entityreference' && $field['settings']['handler'] == 'og') { + if ($field['type'] == 'entityreference' && ($field['settings']['handler'] == 'og' || strpos($field['settings']['handler'], 'og_') === 0)) { // Last instance will take care also of deleting the field itself. field_delete_instance($instance); } diff --git a/og.module b/og.module index 60a1458..ea09411 100644 --- a/og.module +++ b/og.module @@ -2250,7 +2250,7 @@ function og_get_entity_groups($entity_type = 'user', $entity = NULL, $states = a */ function og_is_group_audience_field($field_name) { $field = field_info_field($field_name); - return $field['type'] == 'entityreference' && $field['settings']['handler'] == 'og'; + return $field['type'] == 'entityreference' && ($field['settings']['handler'] == 'og' || strpos($field['settings']['handler'], 'og_') === 0); } /** diff --git a/og_example/og_example.module b/og_example/og_example.module index c6d58f6..1fd3024 100644 --- a/og_example/og_example.module +++ b/og_example/og_example.module @@ -1,3 +1,12 @@ field['settings']['target_type']; + + + if (empty($this->instance['field_mode']) || $group_type != 'node') { + return parent::buildEntityFieldQuery($match, $match_operator); + } + + $field_mode = $this->instance['field_mode']; + $handler = EntityReference_SelectionHandler_Generic::getInstance($this->field, $this->instance, $this->entity_type, $this->entity); + $query = $handler->buildEntityFieldQuery($match, $match_operator); + + // Show only the entities that are active groups. + $query->fieldCondition(OG_GROUP_FIELD, 'value', 1, '='); + + if ($field_mode == 'default') { + $query->propertyCondition('nid', '5', '<='); + } + else { + $query->propertyCondition('nid', '5', '>'); + } + + return $query; + } +} diff --git a/og_example/plugins/entityreference/selection/og_example.inc b/og_example/plugins/entityreference/selection/og_example.inc new file mode 100644 index 0000000..5f6e37c --- /dev/null +++ b/og_example/plugins/entityreference/selection/og_example.inc @@ -0,0 +1,7 @@ + t('Organic groups example'), + 'class' => 'OgExampleSelectionHandler', +); + diff --git a/plugins/entityreference/behavior/OgBehaviorHandler.class.php b/plugins/entityreference/behavior/OgBehaviorHandler.class.php index 68f0247..4d67801 100644 --- a/plugins/entityreference/behavior/OgBehaviorHandler.class.php +++ b/plugins/entityreference/behavior/OgBehaviorHandler.class.php @@ -9,7 +9,7 @@ class OgBehaviorHandler extends EntityReference_BehaviorHandler_Abstract { * Implements EntityReference_BehaviorHandler_Abstract::access(). */ public function access($field, $instance) { - return $field['settings']['handler'] == 'og'; + return $field['settings']['handler'] == 'og' || strpos($field['settings']['handler'], 'og_') === 0; } /** diff --git a/plugins/entityreference/behavior/OgWidgetHandler.class.php b/plugins/entityreference/behavior/OgWidgetHandler.class.php index dcd04c3..85c2659 100644 --- a/plugins/entityreference/behavior/OgWidgetHandler.class.php +++ b/plugins/entityreference/behavior/OgWidgetHandler.class.php @@ -6,7 +6,7 @@ class OgWidgetHandler extends EntityReference_BehaviorHandler_Abstract { public function access($field, $instance) { - return $field['settings']['handler'] == 'og' && $instance['widget']['type'] == 'og_complex'; + return ($field['settings']['handler'] == 'og' || strpos($field['settings']['handler'], 'og_') === 0) && $instance['widget']['type'] == 'og_complex'; } /**