image.inc 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. /**
  3. * @file
  4. * Image module integration.
  5. */
  6. /**
  7. * Implements hook_filefield_paths_form_alter().
  8. */
  9. function image_filefield_paths_form_alter(&$form, &$ffp) {
  10. if (isset($form['#field']) && $form['#field']['type'] == 'image' && isset($form['instance']['settings']['file_directory'])) {
  11. $ffp[$form['#field']['field_name']] = array(
  12. 'show' => TRUE,
  13. 'type' => "{$form['instance']['entity_type']['#value']}::{$form['instance']['bundle']['#value']}",
  14. 'form_path' => &$form['instance']["ffp_{$form['#field']['field_name']}"],
  15. 'file_path_default' => $form['instance']['settings']['file_directory']['#default_value']
  16. );
  17. // Create path settings fieldset
  18. $ffp[$form['#field']['field_name']]['form_path'] = array(
  19. '#type' => 'fieldset',
  20. '#title' => t('Image Path settings'),
  21. '#collapsible' => TRUE,
  22. '#collapsed' => TRUE,
  23. '#weight' => 1,
  24. );
  25. $ffp[$form['#field']['field_name']]['form_path']['file_path'] = $form['instance']['settings']['file_directory'];
  26. $ffp[$form['#field']['field_name']]['form_path']['file_path']['#title'] = t('File path');
  27. $form['instance']['settings']['file_directory']['#access'] = FALSE;
  28. }
  29. }
  30. /**
  31. * Implements hook_filefield_paths_form_submit().
  32. */
  33. function image_filefield_paths_form_submit(&$form_state, &$ffp) {
  34. if (isset($form_state['values']['form_id']) && $form_state['values']['form_id'] == 'field_ui_field_edit_form') {
  35. $form_state['values']["ffp_{$form_state['values']['instance']['field_name']}"] = $form_state['values']['instance']["ffp_{$form_state['values']['instance']['field_name']}"];
  36. $ffp[$form_state['values']['instance']['field_name']] = array(
  37. 'type' => "{$form_state['values']['instance']['entity_type']}::{$form_state['values']['instance']['bundle']}",
  38. );
  39. $form_state['values']['instance']['settings']['file_directory'] = $form_state['values']["ffp_{$form_state['values']['instance']['field_name']}"]['file_path'];
  40. }
  41. }
  42. /**
  43. * Implements hook_filefield_paths_get_fields().
  44. */
  45. function image_filefield_paths_get_fields(&$entity, &$ffp) {
  46. if (is_object($entity)) {
  47. $fields = field_info_fields();
  48. foreach ($fields as $name => $field) {
  49. if ($field['type'] == 'image' && isset($entity->{$field['field_name']}) && is_array($entity->{$field['field_name']})) {
  50. foreach ($entity->{$field['field_name']} as $language) {
  51. foreach ($language as $file) {
  52. $new = isset($file['new']) ? $file['new'] : FALSE;
  53. $file = file_load($file['fid']);
  54. $ffp['#files'][] = array(
  55. 'field' => (array) $file,
  56. 'module' => $field['module'],
  57. 'name' => $field['field_name'],
  58. 'new' => $new || $file->timestamp == REQUEST_TIME,
  59. );
  60. $ffp['#types'][$field['field_name']] = TRUE;
  61. }
  62. }
  63. }
  64. }
  65. }
  66. }
  67. /**
  68. * Implements hook_filefield_paths_batch_update().
  69. */
  70. function image_filefield_paths_batch_update($instance, &$objects) {
  71. $query = new EntityFieldQuery();
  72. $result = $query->entityCondition('entity_type', $instance['entity_type'])
  73. ->entityCondition('bundle', array($instance['bundle']))
  74. ->fieldCondition($instance['field_name'])
  75. ->execute();
  76. $objects = array_keys($result[$instance['entity_type']]);
  77. }
  78. /**
  79. * Implements hook_filefield_paths_update().
  80. */
  81. function image_filefield_paths_update($oid, $instance) {
  82. $entity = current(entity_load($instance['entity_type'], array($oid)));
  83. // Flag files for update.
  84. if (isset($entity->{$instance['field_name']})) {
  85. foreach ($entity->{$instance['field_name']} as &$language) {
  86. foreach ($language as &$file) {
  87. if (!is_array($file) || empty($file['uri'])) {
  88. continue;
  89. }
  90. $file['new'] = TRUE;
  91. }
  92. }
  93. }
  94. // Process Entity.
  95. filefield_paths_entity_update($entity, $instance['entity_type']);
  96. }