function ctools_entity_from_field_get_children

cis7 entity_from_field.inc ctools_entity_from_field_get_children($parent_plugin, $parent)
cle7 entity_from_field.inc ctools_entity_from_field_get_children($parent_plugin, $parent)
elmsmedia7 entity_from_field.inc ctools_entity_from_field_get_children($parent_plugin, $parent)
icor7 entity_from_field.inc ctools_entity_from_field_get_children($parent_plugin, $parent)
meedjum_blog7 entity_from_field.inc ctools_entity_from_field_get_children($parent_plugin, $parent)
mooc7 entity_from_field.inc ctools_entity_from_field_get_children($parent_plugin, $parent)
1 call to ctools_entity_from_field_get_children()
ctools_entity_from_field_get_child in sites/all/modules/ulmus/ctools/plugins/relationships/entity_from_field.inc
1 string reference to 'ctools_entity_from_field_get_children'
entity_from_field.inc in sites/all/modules/ulmus/ctools/plugins/relationships/entity_from_field.inc
Plugin to provide an relationship handler for an entity from a field.

File

sites/all/modules/ulmus/ctools/plugins/relationships/entity_from_field.inc, line 27
Plugin to provide an relationship handler for an entity from a field.

Code

function ctools_entity_from_field_get_children($parent_plugin, $parent) {
  $cid = $parent_plugin['name'] . ':' . $parent;
  $cache = &drupal_static(__FUNCTION__);
  if (!empty($cache[$cid])) {
    return $cache[$cid];
  }

  ctools_include('fields');
  $entities = entity_get_info();
  $plugins = array();
  $context_types = array();

  // Get the schema information for every field.
  $fields_info = field_info_fields();
  foreach ($fields_info as $field_name => $field) {
    foreach ($field['bundles'] as $from_entity => $bundles) {
      foreach ($bundles as $bundle) {
        // There might be fields attached to bundles that are disabled (e.g. a
        // module that declared a node's content type, is now disabled), but the
        // field instance is still shown.
        if (!empty($entities[$from_entity]['bundles'][$bundle])) {
          $foreign_keys = ctools_field_foreign_keys($field_name);

          foreach ($foreign_keys as $key => $info) {
            if (isset($info['table'])) {
              foreach ($entities as $to_entity => $to_entity_info) {
                $from_entity_info = $entities[$from_entity];
                // If somehow the bundle doesn't exist on the to-entity,
                // skip.
                if (!isset($from_entity_info['bundles'][$bundle])) {
                  continue;
                }

                if (isset($to_entity_info['base table']) && $to_entity_info['base table'] == $info['table'] && array_keys($info['columns'], $to_entity_info['entity keys']['id'])) {
                  $name = $field_name . '-' . $from_entity . '-' . $to_entity;
                  $plugin_id = $parent . ':' . $name;

                  // Record the bundle for later.
                  $context_types[$plugin_id]['types'][$bundle] = $from_entity_info['bundles'][$bundle]['label'];

                  // We check for every bundle; this plugin may already have
                  // been created, so don't recreate it.
                  if (!isset($plugins[$plugin_id])) {
                    $plugin = $parent_plugin;
                    $replacements = array(
                      '@to_entity' => $to_entity_info['label'],
                      '@from_entity' => $from_entity_info['label'],
                      '@field_name' => $field_name,
                      '@field_label' => ctools_field_label($field_name),
                    );
                    $plugin['title'] = t('@to_entity from @from_entity (on @from_entity: @field_label [@field_name])', $replacements);
                    $plugin['keyword'] = $to_entity;
                    $plugin['context name'] = $name;
                    $plugin['name'] = $plugin_id;
                    $plugin['description'] = t('Creates a @to_entity context from @from_entity using the @field_name field on @from_entity.', $replacements);
                    $plugin['from entity'] = $from_entity;
                    $plugin['to entity'] = $to_entity;
                    $plugin['field name'] = $field_name;
                    $plugin['join key'] = $key;
                    $plugin['source key'] = current(array_keys($info['columns']));
                    $plugin['parent'] = $parent;

                    $plugins[$plugin_id] = $plugin;

                    /*
-- commented out until I figure out how to actually load the reverse properly.
                    // Build the reverse
                    $plugin = $parent_plugin;
                    $name = $field_name . '-' . $from_entity . '-' . $to_entity . '-reverse';
                    $plugin_id = $parent . ':' . $name;

                    $plugin['title'] = t('@from_entity from @to_entity (on @from_entity: @field_name)', $replacements);
                    $plugin['keyword'] = $to_entity;
                    $plugin['context name'] = $name;
                    $plugin['name'] = $plugin_id;
                    $plugin['description'] = t('Creates a @from_entity context from @to_entity using the @field_name field on @from_entity.', $replacements);

                    $plugin['from entity'] = $from_entity;
                    $plugin['to entity'] = $to_entity;
                    $plugin['field name'] = $field_name;
                    $plugin['reverse'] = TRUE;
                    $plugin['parent'] = $parent;

                    // Since we can't apply restrictions on the reverse relationship
                    // we just add the required context here.
                    $plugin['required context'] = new ctools_context_required($to_entity_info['label'], $to_entity);

                    $plugin_entities = array(
                      'to' => array($from_entity => $from_entity_info),
                      'from' => array($to_entity => $to_entity_info)
                    );
                    drupal_alter('ctools_entity_context', $plugin, $plugin_entities, $plugin_id);

                    $plugins[$plugin_id] = $plugin;
*/
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  foreach ($context_types as $key => $context) {
    list($parent, $plugin_name) = explode(':', $key);
    list($field_name, $from_entity, $to_entity) = explode('-', $plugin_name);

    $from_entity_info = $entities[$from_entity];
    $to_entity_info = $entities[$to_entity];

    $plugins[$key]['required context'] = new ctools_context_required($from_entity_info['label'], $from_entity, array('type' => array_keys($context['types'])));

    $plugin_entities = array(
      'to' => array($to_entity => $to_entity_info),
      'from' => array($from_entity => $from_entity_info),
    );
    drupal_alter('ctools_entity_context', $plugins[$key], $plugin_entities, $key);
  }
  drupal_alter('ctools_entity_contexts', $plugins);

  $cache[$cid] = $plugins;
  return $plugins;
}
Error | ELMSLN API

Error

×

Error message

  • Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/elmsln_community/api.elmsln.org/includes/common.inc:2791) in drupal_send_headers() (line 1499 of /var/www/html/elmsln_community/api.elmsln.org/includes/bootstrap.inc).
  • Error: Call to undefined function apc_delete() in DrupalAPCCache->clear() (line 289 of /var/www/html/elmsln_community/api.elmsln.org/sites/all/modules/apc/drupal_apc_cache.inc).
The website encountered an unexpected error. Please try again later.