You are here

class SearchApiAttachmentsFieldCollectionsAlterSettings in Search API attachments 7

Hierarchy

Expanded class hierarchy of SearchApiAttachmentsFieldCollectionsAlterSettings

1 string reference to 'SearchApiAttachmentsFieldCollectionsAlterSettings'
search_api_attachments_field_collections_search_api_alter_callback_info in contrib/search_api_attachments_field_collections/search_api_attachments_field_collections.module
Implements hook_search_api_alter_callback_info().

File

contrib/search_api_attachments_field_collections/includes/callback_attachments_field_collections_settings.inc, line 11
Search API data alteration callback.

View source
class SearchApiAttachmentsFieldCollectionsAlterSettings extends SearchApiAttachmentsAlterSettings {

  /**
   * {@inheritdoc}
   */
  public function alterItems(array &$items) {

    // Get the field collection bundles.
    $field_collections_instances = field_info_instances('field_collection_item');
    $field_collections = array_keys($field_collections_instances);
    if (!empty($field_collections_instances)) {
      foreach ($items as &$item) {

        // Case of field collection fields.
        foreach ($field_collections as $field_collection) {
          if (isset($item->{$field_collection})) {

            // Get the file fields of the field collection item.
            $file_fields = array();
            foreach (array_keys($field_collections_instances[$field_collection]) as $field_name) {
              $field_info = field_info_field($field_name);
              if ($field_info['type'] == 'file') {
                $file_fields[] = $field_name;
              }
            }
            if (empty($file_fields)) {
              return;
            }
            $collections = field_get_items($this->index
              ->getEntityType(), $item, $field_collection);
            if ($collections) {
              $collection_item_ids = array();
              foreach ($collections as $field_collection_id) {
                $collection_item_ids[] = $field_collection_id['value'];
              }
              $collection_items = entity_load_multiple_by_name('field_collection_item', $collection_item_ids);

              // Index the files content.
              foreach ($file_fields as $file_field) {
                foreach ($collection_items as $collection_item) {
                  $field_collection_name = $collection_item->field_name;
                  if (isset($item->{$field_collection_name}) && !empty($item->{$field_collection_name})) {
                    $files = field_get_items('field_collection_item', $collection_item, $file_field);
                    if (!empty($files)) {

                      // Limit to the max number of value per field.
                      if (isset($this->options['number_indexed']) && $this->options['number_indexed'] != '0' && count($files) > $this->options['number_indexed']) {
                        $files = array_slice($files, 0, $this->options['number_indexed']);
                      }
                      foreach ($files as $file) {
                        if ($this
                          ->isFileIndexable($file, $item, $field_collection_name)) {
                          $attachments = 'attachments_' . $file_field;
                          if (isset($item->{$attachments})) {
                            $item->{$attachments} .= ' ' . $this
                              ->getFileContent($file);
                          }
                          else {
                            $item->{$attachments} = $this
                              ->getFileContent($file);
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  /**
   * {@inheritdoc}
   */
  public function propertyInfo() {
    $ret = array();
    if ($this->index
      ->getEntityType() == 'file') {
      $ret['attachments_content'] = array(
        'label' => 'File content',
        'description' => 'File content',
        'type' => 'text',
      );
    }
    else {
      $fields = $this
        ->getFileFields();
      foreach ($fields as $name => $field) {
        $ret['attachments_' . $name] = array(
          'label' => 'Attachment content: ' . $name,
          'description' => $name,
          'type' => 'text',
        );
      }
    }
    return $ret;
  }

  /**
   * {@inheritdoc}
   */
  protected function getFileFields() {
    $ret = array();
    foreach (field_info_fields() as $name => $field) {
      if ($field['type'] == 'file') {
        $ret[$name] = $field;
      }
    }
    return $ret;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
SearchApiAbstractAlterCallback::$index protected property The index whose items will be altered.
SearchApiAbstractAlterCallback::$options protected property The configuration options for this callback, if it has any.
SearchApiAbstractAlterCallback::configurationFormSubmit public function Implements SearchApiAlterCallbackInterface::configurationFormSubmit(). Overrides SearchApiAlterCallbackInterface::configurationFormSubmit 4
SearchApiAbstractAlterCallback::configurationFormValidate public function Implements SearchApiAlterCallbackInterface::configurationFormValidate(). Overrides SearchApiAlterCallbackInterface::configurationFormValidate 1
SearchApiAbstractAlterCallback::isMultiEntityIndex protected function Determines whether the given index contains multiple types of entities.
SearchApiAbstractAlterCallback::supportsIndex public function Implements SearchApiAlterCallbackInterface::supportsIndex(). Overrides SearchApiAlterCallbackInterface::supportsIndex 10
SearchApiAbstractAlterCallback::__construct public function Implements SearchApiAlterCallbackInterface::__construct(). Overrides SearchApiAlterCallbackInterface::__construct 1
SearchApiAttachmentsAlterSettings::CACHE_TABLE constant 1
SearchApiAttachmentsAlterSettings::configurationForm public function Adds configuration form. Overrides SearchApiAbstractAlterCallback::configurationForm
SearchApiAttachmentsAlterSettings::extractExif protected function Extracts images metadata.
SearchApiAttachmentsAlterSettings::extractPdftotext protected function Extracts pdf file content using pdftotext.
SearchApiAttachmentsAlterSettings::extractPythonPdf2txt protected function Extracts pdf file content using python pdf2txt script.
SearchApiAttachmentsAlterSettings::extractSimple protected function Extracts file content for text files.
SearchApiAttachmentsAlterSettings::extractSolr protected function Extract data using Solr.
SearchApiAttachmentsAlterSettings::extractTika protected function Extracts file content using local tika executable.
SearchApiAttachmentsAlterSettings::extractTikaServer protected function Extracts file content using a tika server.
SearchApiAttachmentsAlterSettings::getFileContent protected function Extracts th file content.
SearchApiAttachmentsAlterSettings::getIndexableFileFields protected function Retrieve list of fields, that should be indexed.
SearchApiAttachmentsAlterSettings::getRealpath protected function Helper method to get a file's real path.
SearchApiAttachmentsAlterSettings::imageMimetypes protected function Helper function to store image's mimetypes.
SearchApiAttachmentsAlterSettings::isFileIndexable public function Checks if file is allowed to be indexed. 1
SearchApiAttachmentsAlterSettings::isMultipleIndexWithFile protected function
SearchApiAttachmentsAlterSettings::isPrivate protected function Check if the file is private.
SearchApiAttachmentsAlterSettings::isTemporary protected function Check if the file is temporary.
SearchApiAttachmentsAlterSettings::pdfMimetypes protected function Helper function to store pdf's mimetypes.
SearchApiAttachmentsAlterSettings::textMimetypes protected function Helper function to store text's mimetypes.
SearchApiAttachmentsFieldCollectionsAlterSettings::alterItems public function Alter items before indexing. Overrides SearchApiAttachmentsAlterSettings::alterItems
SearchApiAttachmentsFieldCollectionsAlterSettings::getFileFields protected function Helper method to get all file fields. Overrides SearchApiAttachmentsAlterSettings::getFileFields
SearchApiAttachmentsFieldCollectionsAlterSettings::propertyInfo public function Adds attachments property. Overrides SearchApiAttachmentsAlterSettings::propertyInfo