You are here

function bootstrap_site_alert_preprocess_views_view_fields in Bootstrap Site Alert 8.2

Implements template_preprocess_views_view_fields().

File

./bootstrap_site_alert.module, line 74
The bootstrap_site_alert module file.

Code

function bootstrap_site_alert_preprocess_views_view_fields(&$vars) {

  /** @var \Drupal\views\ViewExecutable $view */
  $view = $vars['view'];
  if ($view
    ->id() === 'bootstrap_site_alert') {
    $fields = $vars['fields'];

    // Remove twig debug from fields.
    if (\Drupal::service('twig')
      ->isDebug()) {
      foreach ($fields as &$field) {
        if (isset($field->content) && $field->content instanceof Markup) {
          $output = preg_replace('/<!--(.|\\s)*?-->\\s*|\\r|\\n/', '', $field->content);
          $field->content = Markup::create($output);
        }
      }
    }

    // Remove referenced variable.
    unset($field);

    // Should we show on admin pages?
    $show_admin = $fields['field_bs_alert_no_admin']->content
      ->__toString() ? !\Drupal::service('router.admin_context')
      ->isAdminRoute() : TRUE;

    // Checks if we should exclude on the current page.
    $page_match = TRUE;
    $page_match_enabled = $fields['field_bs_alert_exclude']->content
      ->__toString();
    $path_check = mb_strtolower($fields['field_bs_alert_only_paths']->content);
    if ($page_match_enabled && !empty($path_check)) {
      $paths = mb_strtolower(Html::decodeEntities($fields['field_bs_alert_only_paths']->content
        ->__toString()));
      $paths = str_replace('<br />', '', $paths);

      // Adjust for the front page.
      $paths = str_replace('<front>', \Drupal::config('system.site')
        ->get('page.front'), $paths);

      // Adjust for aliases, etc.
      $path = \Drupal::service('path.current')
        ->getPath();
      if (!\Drupal::service('path.matcher')
        ->isFrontPage()) {
        $path = \Drupal::service('path_alias.manager')
          ->getAliasByPath($path);
      }
      $page_match = \Drupal::service('path.matcher')
        ->matchPath($path, $paths);
    }
    if ($show_admin && $page_match) {
      $severity = $fields['field_bs_alert_severity']->content;
      if (empty($severity)) {
        return;
      }
      $level = $severity
        ->__toString();

      // Render via template.
      $config = \Drupal::config('bootstrap_site_alert.config');
      $version = $config
        ->get('bootstrap_site_alert_version');
      $vars['output'] = [
        '#theme' => 'bs_site_alert_' . ($version == '5' ? '5' : '4'),
        '#message' => $fields['field_site_alert']->content
          ->__toString(),
        '#level' => $level,
        '#close' => $fields['field_bs_alert_dismiss']->content
          ->__toString(),
      ];
    }
  }
}