You are here

function olark_page_bottom in Olark Chat 8

Implements hook_page_bottom().

File

./olark.module, line 14
Integrates Olark Chat in a Drupal site.

Code

function olark_page_bottom(array &$page_bottom) {
  $settings = \Drupal::config('olark.settings');

  // Note that the 'olark_enable' variable can be (un)set in the $conf array in
  // settings.php, or by another module to enable/disable however, there is not
  // a user interface for this variable.
  if (!$settings
    ->get('olark_enable')) {
    return;
  }

  // Exit if olark is not allowed on admin pages and we are on an admin page.
  if (!$settings
    ->get('olark_enable_admin') && \Drupal::service('router.admin_context')
    ->isAdminRoute()) {
    return;
  }
  $user = \Drupal::currentUser();
  $js_settings = [
    'olark' => [
      'disable_ios' => $settings
        ->get('olark_ios'),
      'enabled' => $settings
        ->get('olark_enable'),
    ],
  ];

  // If the user is logged in, let's get some pertinent information and pass it
  // along as well.
  if ($user
    ->id()) {
    $user_page_url = Url::fromRoute('entity.user.canonical', [
      'user' => $user
        ->id(),
    ], [
      'absolute' => TRUE,
    ])
      ->toString();
    $js_settings['olark']['uid'] = $user
      ->id();
    $js_settings['olark']['name'] = $user
      ->getAccountName();
    $js_settings['olark']['mail'] = $user
      ->getEmail();
    $js_settings['olark']['roles'] = t('roles @roles', [
      '@roles' => implode(', ', $user
        ->getRoles(TRUE)),
    ]);
    $js_settings['olark']['userpage'] = $user_page_url;
    $js_settings['olark']['loggedinas'] = t('logged in as <a href=":url">@name</a>', [
      '@name' => $user
        ->getAccountName(),
      ':url' => $user_page_url,
    ]);
  }
  $page_bottom['olark'] = [
    '#markup' => Markup::create($settings
      ->get('olark_code')),
    '#attached' => [
      'library' => [
        'olark/integration',
      ],
      'drupalSettings' => $js_settings,
    ],
    '#cache' => [
      'contexts' => [
        'user',
      ],
      'tags' => [
        'user:' . $user
          ->id(),
      ],
    ],
  ];

  // Add cachability metadata.

  /** @var Drupal\Core\Render\Renderer $renderer */
  $renderer = \Drupal::service('renderer');
  $renderer
    ->addCacheableDependency($page_bottom['olark'], $settings);
}