/** * Overrides OgSelectionHandler::buildEntityFieldQuery(). */ public function buildEntityFieldQuery($match = NULL, $match_operator = 'CONTAINS') { $group_type = $this->field['settings']['target_type']; // See if the Entity allows for non-member postings $user_access = FALSE; $event = NULL; if ($this->entity && isset($this->entity->og_group_ref[LANGUAGE_NONE][0]['target_id'])) { $event = $this->entity->og_group_ref[LANGUAGE_NONE][0]['target_id']; } elseif (module_exists('og_context') && isset($_SESSION)) { $event = isset($_SESSION['og_context']) ? $_SESSION['og_context'] : og_context('node'); $event = isset($event['gid']) ? $event['gid'] : NULL; } if ($event) { $user_access = og_user_access('node', $event, "create " . $this->instance['bundle'] . " content") || og_user_access('node', $event, "update own " . $this->instance['bundle'] . " content") || og_user_access('node', $event, "edit any " . $this->instance['bundle'] . " content"); } if (empty($this->instance['field_mode']) || $group_type != 'node' || user_is_anonymous() || !$user_access) { return parent::buildEntityFieldQuery($match, $match_operator); } $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); // Add this property to make sure we will have the {node} table later on in // OgCommonsSelectionHandler::entityFieldQueryAlter(). $query->propertyCondition('nid', 0, '>'); $query->addMetaData('entityreference_selection_handler', $this); // FIXME: http://drupal.org/node/1325628 unset($query->tags['node_access']); $query->addTag('entity_field_access'); $query->addTag('og'); return $query; }
/** * Overrides EntityReference_SelectionHandler_Generic::buildEntityFieldQuery(). */ public function buildEntityFieldQuery($match = NULL, $match_operator = 'CONTAINS') { $handler = EntityReference_SelectionHandler_Generic::getInstance($this->field, $this->instance, $this->entity_type, $this->entity); $query = $handler->buildEntityFieldQuery($match, $match_operator); if (!empty($this->queue->settings['target_bundles'])) { $query->entityCondition('bundle', $this->queue->settings['target_bundles'], 'IN'); } return $query; }
/** * Overrides TicketStateSelectionHandler::buildEntityFieldQuery(). */ public function buildEntityFieldQuery($match = NULL, $match_operator = 'CONTAINS') { $group_type = $this->field['settings']['target_type']; if (empty($this->instance['field_mode']) || $group_type != 'node' || user_is_anonymous()) { return parent::buildEntityFieldQuery($match, $match_operator); } $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->propertyCondition('active', 1); $query->addMetaData('entityreference_selection_handler', $this); $query->addTag('entity_field_access'); return $query; }
/** * Overrides OgSelectionHandler::buildEntityFieldQuery(). */ public function buildEntityFieldQuery($match = NULL, $match_operator = 'CONTAINS') { $group_type = $this->field['settings']['target_type']; if (empty($this->instance['field_mode']) || $group_type != 'node' || user_is_anonymous()) { return parent::buildEntityFieldQuery($match, $match_operator); } $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); $query->fieldCondition('field_og_subscribe_settings', 'value', 'anyone'); // Add this property to make sure we will have the {node} table later on in // OgCommonsSelectionHandler::entityFieldQueryAlter(). $query->propertyCondition('nid', 0, '>'); $query->addMetaData('entityreference_selection_handler', $this); // FIXME: http://drupal.org/node/1325628 unset($query->tags['node_access']); $query->addTag('entity_field_access'); $query->addTag('og'); return $query; }
/** * {@inheritdoc} */ public function buildEntityFieldQuery($match = NULL, $match_operator = 'CONTAINS') { parent::buildEntityFieldQuery(); global $user; $handler = EntityReference_SelectionHandler_Generic::getInstance($this->field, $this->instance, $this->entity_type, $this->entity); $query = $handler->buildEntityFieldQuery($match, $match_operator); // FIXME: http://drupal.org/node/1325628 unset($query->tags['node_access']); // FIXME: drupal.org/node/1413108 unset($query->tags['entityreference']); $query->addTag('entity_field_access'); $query->addTag('og'); $group_type = $this->field['settings']['target_type']; $entity_info = entity_get_info($group_type); if (!field_info_field(OG_GROUP_FIELD)) { // There are no groups, so falsify query. $query->propertyCondition($entity_info['entity keys']['id'], -1, '='); return $query; } // Show only the entities that are active groups. $query->fieldCondition(OG_GROUP_FIELD, 'value', 1, '='); $account = user_load($user->uid); if (user_access('administer site configuration', $account)) { // Site administrator can choose also groups he is not member of. $query->fieldCondition('c4m_og_status', 'value', array('deleted'), 'NOT IN'); return $query; } $user_groups = og_get_groups_by_user(NULL, $group_type); $user_groups = $user_groups ? $user_groups : array(); if ($user_groups) { $query->propertyCondition($entity_info['entity keys']['id'], $user_groups, 'IN'); } else { // User doesn't have permission to select any group so falsify this // query. $query->propertyCondition($entity_info['entity keys']['id'], -1, '='); } $unallowed_values = array('requested', 'archived', 'rejected', 'deleted'); $query->fieldCondition('c4m_og_status', 'value', $unallowed_values, 'NOT IN'); return $query; }
/** * Overrides OgSelectionHandler::buildEntityFieldQuery(). */ public function buildEntityFieldQuery($match = NULL, $match_operator = 'CONTAINS') { $group_type = $this->field['settings']['target_type']; // See if the Entity allows for non-member postings $event_entity_types = cod_events_get_group_content_entity_types(); if (empty($this->instance['field_mode']) || $group_type != 'node' || user_is_anonymous() || isset($this->instance['bundle']) && !(isset($event_entity_types['node'][$this->instance['bundle']]['non_member']) && user_access("create " . $this->instance['bundle'] . " content"))) { return parent::buildEntityFieldQuery($match, $match_operator); } $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); // Add this property to make sure we will have the {node} table later on in // OgCommonsSelectionHandler::entityFieldQueryAlter(). $query->propertyCondition('nid', 0, '>'); $query->addMetaData('entityreference_selection_handler', $this); // FIXME: http://drupal.org/node/1325628 unset($query->tags['node_access']); $query->addTag('entity_field_access'); $query->addTag('og'); return $query; }
/** * Overrides OgSelectionHandler::buildEntityFieldQuery(). * * This is an example of "subgroups" (but without getting into the logic of * sub-grouping). * The idea here is to show we can set "My groups" and "Other groups" to * reference different groups by different * logic. In this example, all group nodes below node ID 5, will appear under * "My groups", and the rest will appear under "Other groups", * for administrators. */ public function buildEntityFieldQuery($match = NULL, $match_operator = 'CONTAINS') { $group_type = $this->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', '>'); } // FIXME: http://drupal.org/node/1325628 unset($query->tags['node_access']); // FIXME: drupal.org/node/1413108 unset($query->tags['entityreference']); $query->addTag('entity_field_access'); $query->addTag('og'); return $query; }
public function entityFieldQueryAlter(SelectQueryInterface $query) { $handler = EntityReference_SelectionHandler_Generic::getInstance($this->field, $this->instance); // FIXME: Allow altering, after fixing http://drupal.org/node/1413108 // $handler->entityFieldQueryAlter($query); }
/** * Overrides OgSelectionHandler::buildEntityFieldQuery(). * * Includes inherited groups. */ public function buildEntityFieldQuery($match = NULL, $match_operator = 'CONTAINS') { global $user; $handler = EntityReference_SelectionHandler_Generic::getInstance($this->field, $this->instance, $this->entity_type, $this->entity); $query = $handler->buildEntityFieldQuery($match, $match_operator); // FIXME: http://drupal.org/node/1325628 unset($query->tags['node_access']); // FIXME: drupal.org/node/1413108 unset($query->tags['entityreference']); $query->addTag('entity_field_access'); $query->addTag('og'); $group_type = $this->field['settings']['target_type']; $entity_info = entity_get_info($group_type); if (!field_info_field(OG_GROUP_FIELD)) { // There are no groups, so falsify query. $query->propertyCondition($entity_info['entity keys']['id'], -1, '='); return $query; } // Show only the entities that are active groups. $query->fieldCondition(OG_GROUP_FIELD, 'value', 1, '='); if (empty($this->instance['field_mode'])) { return $query; } $field_mode = $this->instance['field_mode']; $user_groups = og_get_groups_by_user(NULL, $group_type); $user_groups = $user_groups ? $user_groups : array(); $user_groups = array_merge($user_groups, $this->getGidsForCreate()); // Show the user only the groups they belong to. if ($field_mode == 'default') { if ($user_groups && !empty($this->instance) && $this->instance['entity_type'] == 'node') { // Determine which groups should be selectable. $node = $this->entity; $node_type = $this->instance['bundle']; $ids = array(); foreach ($user_groups as $gid) { // Check if user has "create" permissions on those groups. // If the user doesn't have create permission, check if perhaps the // content already exists and the user has edit permission. if (og_user_access($group_type, $gid, "create {$node_type} content", $user)) { $ids[] = $gid; // Include inherited groups as well $inherited_groups = og_subgroup_user_groups_load($user); if (isset($inherited_groups[$group_type])) { foreach (array_keys($inherited_groups[$group_type]) as $inherited_gid) { $ids[] = $inherited_gid; } } } elseif (!empty($node->nid) && (og_user_access($group_type, $gid, "update any {$node_type} content") || $user->uid == $node->uid && og_user_access($group_type, $gid, "update own {$node_type} content"))) { $node_groups = isset($node_groups) ? $node_groups : og_get_entity_groups('node', $node->nid); if (in_array($gid, $node_groups['node'])) { $ids[] = $gid; // Include inherited groups as well $inherited_groups = og_subgroup_user_groups_load($user); if (isset($inherited_groups[$group_type])) { foreach (array_keys($inherited_groups[$group_type]) as $inherited_gid) { $ids[] = $inherited_gid; } } } } } } else { $ids = $user_groups; } if ($ids) { $query->propertyCondition($entity_info['entity keys']['id'], $ids, 'IN'); } else { // User doesn't have permission to select any group so falsify this // query. $query->propertyCondition($entity_info['entity keys']['id'], -1, '='); } } elseif ($field_mode == 'admin' && $user_groups) { // Show only groups the user doesn't belong to. if (!empty($this->instance) && $this->instance['entity_type'] == 'node') { // Don't include the groups, the user doesn't have create // permission. $node_type = $this->instance['bundle']; foreach ($user_groups as $delta => $gid) { if (!og_user_access($group_type, $gid, "create {$node_type} content")) { unset($user_groups[$delta]); } } } if ($user_groups) { $query->propertyCondition($entity_info['entity keys']['id'], $user_groups, 'NOT IN'); } } return $query; }