123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356 |
- <?php
- function ctools_fields_fake_field_instance($field_name, $view_mode = 'ctools', $formatter, $formatter_settings) {
- $field = field_read_field($field_name);
- $field_type = field_info_field_types($field['type']);
- return array(
-
- 'field_name' => $field_name,
- 'entity_type' => 'ctools',
- 'bundle' => 'ctools',
-
- 'settings' => field_info_instance_settings($field['type']),
- 'widget' => array(
- 'type' => $field_type['default_widget'],
- 'settings' => array(),
- ),
-
- 'display' => array(
- $view_mode => array(
- 'type' => $formatter,
- 'settings' => $formatter_settings,
- ),
- ),
-
-
- 'required' => FALSE,
- 'label' => $field_name,
- 'description' => '',
- 'deleted' => 0,
- );
- }
- function ctools_fields_get_field_formatter_settings_form($field, $formatter_type, &$form, $form_state, $view_mode = 'ctools') {
- $conf = $form_state['conf'];
- $formatter = field_info_formatter_types($formatter_type);
- if (isset($formatter['settings'])) {
- $conf['formatter_settings'] += $formatter['settings'];
- }
- $function = $formatter['module'] . '_field_formatter_settings_form';
- if (function_exists($function)) {
- $instance = ctools_fields_fake_field_instance($field['field_name'], $view_mode, $formatter_type, $conf['formatter_settings']);
- $settings_form = $function($field, $instance, $view_mode, $form, $form_state);
- if ($settings_form) {
-
- $context = array(
- 'module' => $formatter['module'],
- 'formatter' => $formatter,
- 'field' => $field,
- 'instance' => $instance,
- 'view_mode' => $view_mode,
- 'form' => $form,
- 'form_state' => $form_state,
- );
- drupal_alter('field_formatter_settings_form', $settings_form, $context);
- $settings_form['#tree'] = TRUE;
- $form['ctools_field_list']['#value'][] = $field;
- $form += $settings_form;
- }
- }
- if (isset($field['cardinality']) && $field['cardinality'] != 1) {
- list($prefix, $suffix) = explode('@count', t('Skip the first @count item(s)'));
- $form['delta_offset'] = array(
- '#type' => 'textfield',
- '#size' => 5,
- '#field_prefix' => $prefix,
- '#field_suffix' => $suffix,
- '#default_value' => isset($conf['delta_offset']) ? $conf['delta_offset'] : 0,
- );
- list($prefix, $suffix) = explode('@count', t('Then display at most @count item(s)'));
- $form['delta_limit'] = array(
- '#type' => 'textfield',
- '#size' => 5,
- '#field_prefix' => $prefix,
- '#field_suffix' => $suffix,
- '#description' => t('Enter 0 to display all items.'),
- '#default_value' => isset($conf['delta_limit']) ? $conf['delta_limit'] : 0,
- );
- $form['delta_reversed'] = array(
- '#title' => t('Display in reverse order'),
- '#type' => 'checkbox',
- '#default_value' => !empty($conf['delta_reversed']),
- '#description' => t('(start from last values)'),
- );
- }
- }
- function ctools_fields_get_field_formatter_info($fields) {
- $info = array();
- $field_info = field_info_formatter_types();
- foreach ($fields as $field) {
- foreach ($field_info as $format_name => $formatter_info) {
- if (in_array($field['type'], $formatter_info['field types'])) {
- $info += array($format_name => $formatter_info);
- }
- }
- }
- return $info;
- }
- function ctools_field_label($field_name) {
- $label_counter = array();
-
- $instances = field_info_instances();
- foreach ($instances as $entity_type) {
- foreach ($entity_type as $bundle) {
- if (isset($bundle[$field_name])) {
- $label_counter[$bundle[$field_name]['label']] = isset($label_counter[$bundle[$field_name]['label']]) ? ++$label_counter[$bundle[$field_name]['label']] : 1;
- }
- }
- }
- if (empty($label_counter)) {
- return $field_name;
- }
-
- arsort($label_counter);
- $label_counter = array_keys($label_counter);
- return $label_counter[0];
- }
- function ctools_field_invoke_field($field_name, $op, $entity_type, $entity, &$a = NULL, &$b = NULL, $options = array()) {
- if (is_array($field_name)) {
- $instance = $field_name;
- $field = empty($field_name['field']) ? field_info_field($instance['field_name']) : $field_name['field'];
- $field_name = $instance['field_name'];
- }
- else {
- list(, , $bundle) = entity_extract_ids($entity_type, $entity);
- $instance = field_info_instance($entity_type, $field_name, $bundle);
- }
- if (empty($instance)) {
- return;
- }
-
- $default_options = array(
- 'default' => FALSE,
- 'deleted' => FALSE,
- 'language' => NULL,
- );
- $options += $default_options;
- $return = array();
-
-
- $function = $options['default'] ? 'field_default_' . $op : $field['module'] . '_field_' . $op;
- if (function_exists($function)) {
-
- $available_languages = field_available_languages($entity_type, $field);
- $languages = _field_language_suggestion($available_languages, $options['language'], $field_name);
- foreach ($languages as $langcode) {
- $items = isset($entity->{$field_name}[$langcode]) ? $entity->{$field_name}[$langcode] : array();
- $result = $function($entity_type, $entity, $field, $instance, $langcode, $items, $a, $b);
- if (isset($result)) {
-
-
- if (is_array($result)) {
- $return = array_merge($return, $result);
- }
- else {
- $return[] = $result;
- }
- }
-
-
- if ($items !== array() || isset($entity->{$field_name}[$langcode])) {
- $entity->{$field_name}[$langcode] = $items;
- }
- }
- }
- return $return;
- }
- function ctools_field_invoke_field_default($field_name, $op, $entity_type, $entity, &$a = NULL, &$b = NULL, $options = array()) {
- $options['default'] = TRUE;
- return ctools_field_invoke_field($field_name, $op, $entity_type, $entity, $a, $b, $options);
- }
- function ctools_fields_get_fields_by_type($field_type) {
- $fields = array();
- foreach (field_info_fields() as $field_name => $field_info) {
- if ($field_info['type'] == $field_type) {
- $fields[$field_name] = $field_info;
- }
- }
- return $fields;
- }
- function ctools_field_foreign_keys($field_name) {
- $foreign_keys = &drupal_static(__FUNCTION__, array());
- if (!isset($foreign_keys[$field_name])) {
- $foreign_keys[$field_name] = array();
- $field = field_info_field($field_name);
- if (!empty($field['foreign keys'])) {
- $foreign_keys[$field_name] = $field['foreign keys'];
- }
- else {
-
-
- $module = $field['module'];
- module_load_install($module);
- $schema = module_invoke($module, 'field_schema', $field);
- if (!empty($schema['foreign keys'])) {
- $foreign_keys[$field_name] = $schema['foreign keys'];
- }
- }
- }
- return $foreign_keys[$field_name];
- }
|