123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816 |
- <?php
- function _field_info_field_cache() {
-
- static $drupal_static_fast;
- if (!isset($drupal_static_fast)) {
- $drupal_static_fast['field_info_field_cache'] = &drupal_static(__FUNCTION__);
- }
- $field_info = &$drupal_static_fast['field_info_field_cache'];
- if (!isset($field_info)) {
-
-
-
- include_once dirname(__FILE__) . '/field.info.class.inc';
- $field_info = new FieldInfo();
- }
- return $field_info;
- }
- function field_info_cache_clear() {
- drupal_static_reset('field_view_mode_settings');
- drupal_static_reset('field_available_languages');
-
-
- entity_info_cache_clear();
- _field_info_collate_types(TRUE);
- _field_info_field_cache()->flush();
- }
- function _field_info_collate_fields($reset = FALSE) {
- if ($reset) {
- _field_info_field_cache()->flush();
- return;
- }
- $cache = _field_info_field_cache();
-
- $fields = $cache->getFields();
- $field_ids = array();
- foreach ($fields as $id => $field) {
- if (!$field['deleted']) {
- $field_ids[$field['field_name']] = $id;
- }
- }
-
- $extra_fields = array();
- foreach (field_info_bundles() as $entity_type => $bundles) {
- foreach ($bundles as $bundle => $info) {
- $extra_fields[$entity_type][$bundle] = $cache->getBundleExtraFields($entity_type, $bundle);
- }
- }
- return array(
- 'fields' => $fields,
- 'field_ids' => $field_ids,
- 'instances' => $cache->getInstances(),
- 'extra_fields' => $extra_fields,
- );
- }
- function _field_info_collate_types($reset = FALSE) {
- global $language;
- static $info;
-
-
- $langcode = $language->language;
- if ($reset) {
- $info = NULL;
-
- cache_clear_all('field_info_types:', 'cache_field', TRUE);
- return;
- }
- if (!isset($info)) {
- if ($cached = cache_get("field_info_types:$langcode", 'cache_field')) {
- $info = $cached->data;
- }
- else {
- $info = array(
- 'field types' => array(),
- 'widget types' => array(),
- 'formatter types' => array(),
- 'storage types' => array(),
- );
-
- foreach (module_implements('field_info') as $module) {
- $field_types = (array) module_invoke($module, 'field_info');
- foreach ($field_types as $name => $field_info) {
-
- $field_info += array(
- 'settings' => array(),
- 'instance_settings' => array(),
- );
- $info['field types'][$name] = $field_info;
- $info['field types'][$name]['module'] = $module;
- }
- }
- drupal_alter('field_info', $info['field types']);
-
- foreach (module_implements('field_widget_info') as $module) {
- $widget_types = (array) module_invoke($module, 'field_widget_info');
- foreach ($widget_types as $name => $widget_info) {
-
- $widget_info += array(
- 'settings' => array(),
- );
- $info['widget types'][$name] = $widget_info;
- $info['widget types'][$name]['module'] = $module;
- }
- }
- drupal_alter('field_widget_info', $info['widget types']);
- uasort($info['widget types'], 'drupal_sort_weight');
-
- foreach (module_implements('field_formatter_info') as $module) {
- $formatter_types = (array) module_invoke($module, 'field_formatter_info');
- foreach ($formatter_types as $name => $formatter_info) {
-
- $formatter_info += array(
- 'settings' => array(),
- );
- $info['formatter types'][$name] = $formatter_info;
- $info['formatter types'][$name]['module'] = $module;
- }
- }
- drupal_alter('field_formatter_info', $info['formatter types']);
-
- foreach (module_implements('field_storage_info') as $module) {
- $storage_types = (array) module_invoke($module, 'field_storage_info');
- foreach ($storage_types as $name => $storage_info) {
-
- $storage_info += array(
- 'settings' => array(),
- );
- $info['storage types'][$name] = $storage_info;
- $info['storage types'][$name]['module'] = $module;
- }
- }
- drupal_alter('field_storage_info', $info['storage types']);
-
- if (lock_acquire("field_info_types:$langcode")) {
- cache_set("field_info_types:$langcode", $info, 'cache_field');
- lock_release("field_info_types:$langcode");
- }
- }
- }
- return $info;
- }
- function _field_info_prepare_field($field) {
- $cache = _field_info_field_cache();
- return $cache->prepareField($field);
- }
- function _field_info_prepare_instance($instance, $field) {
- $cache = _field_info_field_cache();
- return $cache->prepareInstance($instance, $field['type']);
- }
- function _field_info_prepare_instance_display($field, $display) {
- $cache = _field_info_field_cache();
- return $cache->prepareInstanceDisplay($display, $field['type']);
- }
- function _field_info_prepare_instance_widget($field, $widget) {
- $cache = _field_info_field_cache();
- return $cache->prepareInstanceWidget($widget, $field['type']);
- }
- function _field_info_prepare_extra_fields($extra_fields, $entity_type, $bundle) {
- $cache = _field_info_field_cache();
- return $cache->prepareExtraFields($extra_fields, $entity_type, $bundle);
- }
- function field_behaviors_widget($op, $instance) {
- $info = field_info_widget_types($instance['widget']['type']);
- return isset($info['behaviors'][$op]) ? $info['behaviors'][$op] : FIELD_BEHAVIOR_DEFAULT;
- }
- function field_info_field_types($field_type = NULL) {
- $info = _field_info_collate_types();
- $field_types = $info['field types'];
- if ($field_type) {
- if (isset($field_types[$field_type])) {
- return $field_types[$field_type];
- }
- }
- else {
- return $field_types;
- }
- }
- function field_info_widget_types($widget_type = NULL) {
- $info = _field_info_collate_types();
- $widget_types = $info['widget types'];
- if ($widget_type) {
- if (isset($widget_types[$widget_type])) {
- return $widget_types[$widget_type];
- }
- }
- else {
- return $widget_types;
- }
- }
- function field_info_formatter_types($formatter_type = NULL) {
- $info = _field_info_collate_types();
- $formatter_types = $info['formatter types'];
- if ($formatter_type) {
- if (isset($formatter_types[$formatter_type])) {
- return $formatter_types[$formatter_type];
- }
- }
- else {
- return $formatter_types;
- }
- }
- function field_info_storage_types($storage_type = NULL) {
- $info = _field_info_collate_types();
- $storage_types = $info['storage types'];
- if ($storage_type) {
- if (isset($storage_types[$storage_type])) {
- return $storage_types[$storage_type];
- }
- }
- else {
- return $storage_types;
- }
- }
- function field_info_bundles($entity_type = NULL) {
- $info = entity_get_info();
- if ($entity_type) {
- return isset($info[$entity_type]['bundles']) ? $info[$entity_type]['bundles'] : array();
- }
- $bundles = array();
- foreach ($info as $type => $entity_info) {
- $bundles[$type] = $entity_info['bundles'];
- }
- return $bundles;
- }
- function field_info_field_map() {
- $cache = _field_info_field_cache();
- return $cache->getFieldMap();
- }
- function field_info_fields() {
- $cache = _field_info_field_cache();
- $info = $cache->getFields();
- $fields = array();
- foreach ($info as $key => $field) {
- if (!$field['deleted']) {
- $fields[$field['field_name']] = $field;
- }
- }
- return $fields;
- }
- function field_info_field($field_name) {
- $cache = _field_info_field_cache();
- return $cache->getField($field_name);
- }
- function field_info_field_by_id($field_id) {
- $cache = _field_info_field_cache();
- return $cache->getFieldById($field_id);
- }
- function field_info_field_by_ids() {
- $cache = _field_info_field_cache();
- return $cache->getFields();
- }
- function field_info_instances($entity_type = NULL, $bundle_name = NULL) {
- $cache = _field_info_field_cache();
- if (!isset($entity_type)) {
- return $cache->getInstances();
- }
- if (!isset($bundle_name)) {
- return $cache->getInstances($entity_type);
- }
- return $cache->getBundleInstances($entity_type, $bundle_name);
- }
- function field_info_instance($entity_type, $field_name, $bundle_name) {
- $cache = _field_info_field_cache();
- $info = $cache->getBundleInstances($entity_type, $bundle_name);
- if (isset($info[$field_name])) {
- return $info[$field_name];
- }
- }
- function field_info_extra_fields($entity_type, $bundle, $context) {
- $cache = _field_info_field_cache();
- $info = $cache->getBundleExtraFields($entity_type, $bundle);
- return isset($info[$context]) ? $info[$context] : array();
- }
- function field_info_max_weight($entity_type, $bundle, $context) {
- $weights = array();
-
- foreach (field_info_instances($entity_type, $bundle) as $instance) {
- if ($context == 'form') {
- $weights[] = $instance['widget']['weight'];
- }
- elseif (isset($instance['display'][$context]['weight'])) {
- $weights[] = $instance['display'][$context]['weight'];
- }
- }
-
- foreach (field_info_extra_fields($entity_type, $bundle, $context) as $extra) {
- $weights[] = $extra['weight'];
- }
-
- $weights = array_merge($weights, module_invoke_all('field_info_max_weight', $entity_type, $bundle, $context));
- $max_weight = $weights ? max($weights) : NULL;
- return $max_weight;
- }
- function field_info_field_settings($type) {
- $info = field_info_field_types($type);
- return isset($info['settings']) ? $info['settings'] : array();
- }
- function field_info_instance_settings($type) {
- $info = field_info_field_types($type);
- return isset($info['instance_settings']) ? $info['instance_settings'] : array();
- }
- function field_info_widget_settings($type) {
- $info = field_info_widget_types($type);
- return isset($info['settings']) ? $info['settings'] : array();
- }
- function field_info_formatter_settings($type) {
- $info = field_info_formatter_types($type);
- return isset($info['settings']) ? $info['settings'] : array();
- }
- function field_info_storage_settings($type) {
- $info = field_info_storage_types($type);
- return isset($info['settings']) ? $info['settings'] : array();
- }
|