synonyms_provider_field.module 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <?php
  2. /**
  3. * @file
  4. * Provides synonyms from entity fields.
  5. */
  6. /**
  7. * Implements hook_field_delete_instance().
  8. */
  9. function synonyms_provider_field_field_delete_instance($instance) {
  10. // Remove, if necessary, any synonyms behaviors enabled on this instance.
  11. foreach (synonyms_behavior_get_all_enabled($instance['entity_type'], $instance['bundle'], synonyms_provider_field_provider_name(field_info_field($instance['field_name']))) as $behavior_implementation) {
  12. synonyms_behavior_implementation_delete($behavior_implementation);
  13. }
  14. }
  15. /**
  16. * Implements hook_synonyms_provider_info().
  17. */
  18. function synonyms_provider_field_synonyms_behavior_implementation_info($entity_type, $bundle, $behavior) {
  19. $providers = array();
  20. // Proxy the request down to any module that ships a synonyms behavior
  21. // implementation based on a field.
  22. $field_providers = module_invoke_all('synonyms_provider_field_behavior_implementation_info', $behavior);
  23. drupal_alter('synonyms_provider_field_behavior_implementation_info', $field_providers, $behavior);
  24. $instances = field_info_instances($entity_type, $bundle);
  25. foreach ($instances as $instance) {
  26. $field = field_info_field($instance['field_name']);
  27. if (isset($field_providers[$field['type']])) {
  28. $providers[] = array(
  29. 'provider' => synonyms_provider_field_provider_name($field),
  30. 'label' => $instance['label'],
  31. 'class' => $field_providers[$field['type']],
  32. );
  33. }
  34. }
  35. return $providers;
  36. }
  37. /**
  38. * Implements hook_synonyms_provider_field_behavior_implementation_info().
  39. */
  40. function synonyms_provider_field_synonyms_provider_field_behavior_implementation_info($behavior) {
  41. switch ($behavior) {
  42. case 'autocomplete':
  43. case 'select':
  44. return array(
  45. 'number_integer' => 'TextSynonymsBehavior',
  46. 'number_decimal' => 'TextSynonymsBehavior',
  47. 'number_float' => 'TextSynonymsBehavior',
  48. 'text' => 'TextSynonymsBehavior',
  49. 'taxonomy_term_reference' => 'TaxonomySynonymsBehavior',
  50. 'entityreference' => 'EntityReferenceSynonymsBehavior',
  51. );
  52. break;
  53. }
  54. return array();
  55. }
  56. /**
  57. * Construct synonyms provider name out of underlying field.
  58. *
  59. * This function is inverse of synonyms_provider_field_field_name().
  60. *
  61. * @param array $field
  62. * Field definition array whose provider name should be constructed
  63. *
  64. * @return string
  65. * Provider name that corresponds to the $field
  66. *
  67. * @see synonyms_provider_field_field_name()
  68. */
  69. function synonyms_provider_field_provider_name($field) {
  70. return 'synonyms_provider_field_' . $field['field_name'];
  71. }
  72. /**
  73. * Reconstruct field name from the name of its provider.
  74. *
  75. * This function is inverse of synonyms_provider_field_provider_name().
  76. *
  77. * @param string $provider
  78. * Name of the provider whose underlying field should be reconstructed
  79. *
  80. * @return string
  81. * Field name that corresponds to the $provider
  82. *
  83. * @see synonyms_provider_field_provider_name()
  84. */
  85. function synonyms_provider_field_field_name($provider) {
  86. return drupal_substr($provider, drupal_strlen('synonyms_provider_field_'));
  87. }