m7v
6/25/2014 - 9:28 AM

Data for search

Data for search

<?php

/**
 * Implements hook_entity_property_info_alter().
 */
function MYMODULE_entity_property_info_alter(&$info) {
  $info['node']['properties']['agregate_textfield'] = array(
    'type' => 'list<text>',
    'sanitized' => TRUE,
    'label' => t('Agregate textfield'),
    'getter callback' => 'MYMODULE_agregate_textfield_getter_callback',
  );
}

/**
 * Getter callback for Agregate text field.
 */
function MYMODULE_agregate_textfield_getter_callback($node) {
  $result_array = array();
  $zones = array('field_zone1', 'field_zone2');

  foreach ($zones as $zone) {
    if ($bean_array = $node->{$zone}[LANGUAGE_NONE]) {
      foreach ($bean_array as $item) {
        $bean = bean_load($item['target_id']);

        if (!empty($bean->title)) {
          $result_array[] = $bean->title;
        }
        $fields = field_info_instances('bean', $bean->type);
        if (!empty($fields)) {
          foreach ($fields as $bean_field_name => $field) {
            $field_info = field_info_field($bean_field_name);

            if (in_array($field_info['type'], array('text_long', 'text'))
              && !empty($bean->$bean_field_name[LANGUAGE_NONE])) {
              foreach ($bean->{$bean_field_name}[LANGUAGE_NONE] as $item) {
                if (!in_array($item['value'], $result_array)) {
                  $result_array[] = $item['value'];
                }
              }
            }
            if ($field_info['type'] == 'field_collection' && !empty($bean->{$bean_field_name}[LANGUAGE_NONE])) {
              $field_collection = entity_load('field_collection_item', array($field['id']));
              $field_collection = reset($field_collection);

              $field_collection_fields = field_info_instances('field_collection_item', $bean_field_name);
              foreach ($field_collection_fields as $field_collection_field_name => $field_collection_field) {
                $field_collection_info = field_info_field($field_collection_field_name);

                if (in_array($field_collection_info['type'], array('text_long', 'text'))
                  && !empty($field_collection->{$field_collection_field_name}[LANGUAGE_NONE])) {
                  foreach ($field_collection->{$field_collection_field_name}[LANGUAGE_NONE] as $item) {
                    if (!in_array($item['value'], $result_array)) {
                      $result_array[] = $item['value'];
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  return $result_array;
}