You are here

function ip_geoloc_plugin_style_differentiator_color_associations_submit in IP Geolocation Views & Maps 8

Submit handler as declared in ip_geoloc_form_alter().

File

src/Plugin/views/style/ip_geoloc_plugin_style.inc, line 309
ip_geoloc_plugin_style.inc

Code

function ip_geoloc_plugin_style_differentiator_color_associations_submit($form, FormStateInterface &$form_state) {
  if (empty($form_state
    ->get('view')) || empty($form_state
    ->get('display_id')) || empty($form_state
    ->get('differentiator'))) {
    return;
  }

  //@TODO Check if this works
  $view_id = $form_state
    ->get('view')->name;
  $display_id = $form_state
    ->get('display_id');
  $differentiator = $form_state
    ->get('differentiator');

  // Erase differentiator values for this display, then rebuild based on form.
  $differentiator_color_associations = \Drupal::state()
    ->get('ip_geoloc_' . $view_id . '_color_mappings', []);
  unset($differentiator_color_associations[$display_id][$differentiator]);
  if (!empty($form_state
    ->getValue('color_table'))) {
    $i = 0;
    foreach ($form_state
      ->getValue('color_table') as $association) {
      if (is_array($association[$differentiator])) {

        // E.g association['field_address']['und'][0]['postal_code'].
        foreach ($association[$differentiator][LANGUAGE_NONE] as $values) {
          $differentiator_value = [];
          if (is_array($values)) {
            foreach ($values as $name => $value) {
              if (isset($value) && strpos($value, '|') === FALSE) {
                $differentiator_value[$name] = $value;
              }
            }
          }
          else {
            $differentiator_value[] = $values;
          }
          if (!empty($differentiator_value)) {
            $differentiator_color_associations[$display_id][$differentiator][$i]['differentiator_value'] = $differentiator_value;
            $differentiator_color_associations[$display_id][$differentiator][$i]['color'] = $association['color'];
            $differentiator_color_associations[$display_id][$differentiator][$i]['special char'] = $association['special char'];
            $differentiator_color_associations[$display_id][$differentiator][$i]['special char class'] = $association['special char class'];
            $i++;
          }
        }
      }
      else {

        // Plain text field or plain taxonomy select.
        $differentiator_value = trim($association[$differentiator]);
        if (!empty($differentiator_value)) {
          $differentiator_color_associations[$display_id][$differentiator][$i]['differentiator_value'] = [
            $differentiator_value,
          ];
          $differentiator_color_associations[$display_id][$differentiator][$i]['color'] = $association['color'];
          $differentiator_color_associations[$display_id][$differentiator][$i]['special char'] = $association['special char'];
          $differentiator_color_associations[$display_id][$differentiator][$i]['special char class'] = $association['special char class'];
          $i++;
        }
      }
    }
  }
  \Drupal::state()
    ->set('ip_geoloc_' . $view_id . '_color_mappings', $differentiator_color_associations);
}