You are here

private function BrowscapImporter::saveParsedData in Browscap 8.3

Saves parsed Browscap data.

Parameters

array $browscap_data: Browscap data that has been parsed with parse_ini_string() or parse_ini_file().

1 call to BrowscapImporter::saveParsedData()
BrowscapImporter::processData in src/BrowscapImporter.php
Processes Browscap data.

File

src/BrowscapImporter.php, line 234

Class

BrowscapImporter
Class BrowscapImporter.

Namespace

Drupal\browscap

Code

private function saveParsedData(array &$browscap_data) {

  // Prepare the data for insertion.
  $import_data = [];
  foreach ($browscap_data as $key => $values) {

    // Store the current value.
    $original_values = $values;

    // Replace '*?' with '%_'.
    $user_agent = strtr($key, '*?', '%_');

    // Remove trailing spaces to prevent "duplicate entry" errors. Databases
    // such as MySQL do not preserve trailing spaces when storing VARCHARs.
    $user_agent = rtrim($user_agent);

    // Change all array keys to lowercase.
    $original_values = array_change_key_case($original_values);

    // Add to array of data to import.
    $import_data[$user_agent] = $original_values;

    // Remove processed data to reduce memory usage.
    unset($browscap_data[$key]);
  }
  $query = db_insert('browscap')
    ->fields([
    'useragent',
    'data',
  ]);
  foreach ($import_data as $user_agent => $values) {

    // Recurse through the available user agent information.
    $previous_parent = NULL;
    $parent = isset($values['parent']) ? $values['parent'] : FALSE;
    while ($parent && $parent !== $previous_parent) {
      $parent_values = isset($import_data[$parent]) ? $import_data[$parent] : [];
      $values = array_merge($parent_values, $values);
      $previous_parent = $parent;
      $parent = isset($parent_values['parent']) ? $parent_values['parent'] : FALSE;
    }

    // Do not import DefaultProperties user agent.
    // It is currently only needed for inheriting properties prior to import.
    if ($user_agent == 'DefaultProperties') {
      continue;
    }
    $query
      ->values([
      'useragent' => $user_agent,
      'data' => serialize($values),
    ]);
  }
  $query
    ->execute();
}