You are here

public function SolrFieldTypeListBuilder::getConfigZip in Search API Multilingual Solr Search 8

Return value

\ZipStream\ZipStream

File

src/Controller/SolrFieldTypeListBuilder.php, line 320

Class

SolrFieldTypeListBuilder
Provides a listing of SolrFieldType.

Namespace

Drupal\search_api_solr_multilingual\Controller

Code

public function getConfigZip() {
  $solr_field_types = $this
    ->load();

  /** @var \Drupal\search_api_solr\SolrBackendInterface $backend */
  $backend = $this
    ->getBackend();
  $connector = $backend
    ->getSolrConnector();
  $solr_branch = $connector
    ->getSolrBranch($this->assumed_minimum_version);
  $search_api_solr_conf_path = drupal_get_path('module', 'search_api_solr') . '/solr-conf/' . $solr_branch;
  $solrcore_properties = parse_ini_file($search_api_solr_conf_path . '/solrcore.properties', FALSE, INI_SCANNER_RAW);
  $schema = file_get_contents($search_api_solr_conf_path . '/schema.xml');
  $schema = preg_replace('@<fieldType name="text_und".*?</fieldType>@ms', '<!-- fieldType text_und is moved to schema_extra_types.xml by Search API Multilingual Solr -->', $schema);
  $schema = preg_replace('@<dynamicField name="([^"]*)".*?type="text_und".*?/>@', "<!-- dynamicField \$1 is moved to schema_extra_fields.xml by Search API Multilingual Solr -->", $schema);
  $zip = new ZipStream('solr_' . $solr_branch . '_config.zip');
  $zip
    ->addFile('schema.xml', $schema);
  $zip
    ->addFile('schema_extra_types.xml', $this
    ->generateSchemaExtraTypesXml());
  $zip
    ->addFile('schema_extra_fields.xml', $this
    ->generateSchemaExtraFieldsXml());

  // Add language specific text files.

  /** @var \Drupal\search_api_solr_multilingual\SolrFieldTypeInterface $solr_field_type */
  foreach ($solr_field_types as $solr_field_type) {
    $text_files = $solr_field_type
      ->getTextFiles();
    foreach ($text_files as $text_file_name => $text_file) {
      $language_specific_text_file_name = $text_file_name . '_' . $solr_field_type
        ->getFieldTypeLanguageCode() . '.txt';
      $zip
        ->addFile($language_specific_text_file_name, $text_file);
      $solrcore_properties['solr.replication.confFiles'] .= ',' . $language_specific_text_file_name;
    }
  }
  $solrcore_properties['solr.luceneMatchVersion'] = $connector
    ->getLuceneMatchVersion($this->assumed_minimum_version ?: '');

  // @todo
  // $solrcore_properties['solr.replication.masterUrl']
  $solrcore_properties_string = '';
  foreach ($solrcore_properties as $property => $value) {
    $solrcore_properties_string .= $property . '=' . $value . "\n";
  }
  $zip
    ->addFile('solrcore.properties', $solrcore_properties_string);

  // @todo provide a hook to add more things.
  // Now add all remaining static files from the conf dir that have not been
  // generated dynamically above.
  foreach (scandir($search_api_solr_conf_path) as $file) {
    if (strpos($file, '.') !== 0) {
      foreach ($zip->files as $zipped_file) {

        /* @see \ZipStream\ZipStream::addToCdr() */
        if ($file == $zipped_file[0]) {
          continue 2;
        }
      }
      $zip
        ->addFileFromPath($file, $search_api_solr_conf_path . '/' . $file);
    }
  }
  return $zip;
}