Projet

Général

Profil

Paste
Télécharger (3,72 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / field_collection / ctools / relationships / field_collection_from_field.inc @ 950416da

1
<?php
2

    
3
/**
4
 * @file
5
 * Plugin to provide a relationship handler for a field collection field.
6
 */
7

    
8
// Plugin definition.
9
$plugin = array(
10
  'title' => t('Field collection item'),
11
  'description' => t('Creates an entity context from a field collection field on a field.'),
12
  'context' => 'field_collection_field_collection_from_field_context',
13
  'edit form' => 'field_collection_field_collection_from_field_edit_form',
14
  'get child' => 'field_collection_field_collection_from_field_get_child',
15
  'get children' => 'field_collection_field_collection_from_field_get_children',
16
  'defaults' => array('delta' => 0),
17
);
18

    
19
/**
20
 * Get child callback.
21
 */
22
function field_collection_field_collection_from_field_get_child($plugin, $parent, $child) {
23
  $plugins = field_collection_field_collection_from_field_get_children($plugin, $parent);
24
  return $plugins[$parent . ':' . $child];
25
}
26

    
27
/**
28
 * Get children callback.
29
 */
30
function field_collection_field_collection_from_field_get_children($plugin, $parent) {
31

    
32
  $plugins = array();
33
  $instances_info = field_info_instances();
34
  if (isset($instances_info['field_collection_item'])) {
35
    $field_collection_items = $instances_info['field_collection_item'];
36

    
37
    foreach (field_read_instances() as $instance) {
38
      if (isset($field_collection_items[$instance['field_name']])) {
39
        $child_plugin_id = $parent . ':' . $instance['entity_type'] . ':' . $instance['bundle'] . ':' . $instance['field_name'];
40

    
41
        $child_plugin = $plugin;
42
        $child_plugin['context name'] = $instance['entity_type'] . ':' . $instance['bundle'] . ':' . $instance['field_name'];
43
        $child_plugin['title'] = t(
44
          '!label field collection (!field_name) from !entity_type (!bundle)',
45
          array(
46
            '!label' => $instance['label'],
47
            '!field_name' => $instance['field_name'],
48
            '!entity_type' => $instance['entity_type'],
49
            '!bundle' => $instance['bundle'],
50
          )
51
        );
52
        $restrictions = array('type' => array($instance['bundle']));
53
        $child_plugin['required context'] = new ctools_context_required(ucfirst($instance['entity_type']), $instance['entity_type'], $restrictions);
54
        $child_plugin['parent'] = $parent;
55
        $child_plugin['keyword'] = 'Field collection';
56
        $child_plugin['entity_type'] = $instance['entity_type'];
57
        $child_plugin['field_name'] = $instance['field_name'];
58

    
59
        $child_plugin['name'] = $child_plugin_id;
60
        $plugins[$child_plugin_id] = $child_plugin;
61

    
62
      }
63
    }
64
  }
65

    
66
  return $plugins;
67
}
68

    
69
/**
70
 * Return a new field collection context based on an existing context.
71
 */
72
function field_collection_field_collection_from_field_context($context, $conf) {
73

    
74
  $plugin_info = ctools_get_relationship($conf['name']);
75
  $delta = (int) $conf['delta'];
76

    
77
  $entity = $context->data;
78
  if (isset($entity->{$plugin_info['field_name']})) {
79

    
80
    $items = field_get_items($plugin_info['entity_type'], $entity, $plugin_info['field_name']);
81
    if (!empty($items) && isset($items[$delta]['value'])) {
82
      $field_collection_item = field_collection_item_load($items[$delta]['value']);
83
    }
84

    
85
    return ctools_context_create('entity:field_collection_item', $items[$delta]['value']);
86
  }
87

    
88
  return ctools_context_create_empty('entity:field_collection_item', NULL);
89
}
90

    
91
/**
92
 * Settings form.
93
 */
94
function field_collection_field_collection_from_field_edit_form($form, &$form_state) {
95
  $conf = $form_state['conf'];
96

    
97
  $form['delta'] = array(
98
    '#type' => 'textfield',
99
    '#title' => t('Delta'),
100
    '#size' => 3,
101
    '#description' => t('The relationship can only create one context, but multiple items can be related. Please type in the number you want. The first one will be 0.'),
102
    '#default_value' => empty($conf['delta']) ? 0 : $conf['delta'],
103
  );
104

    
105
  return $form;
106
}