You are here

public function ProfilerPass::process in Devel 8

Same name and namespace in other branches
  1. 8.3 webprofiler/src/Compiler/ProfilerPass.php \Drupal\webprofiler\Compiler\ProfilerPass::process()
  2. 8.2 webprofiler/src/Compiler/ProfilerPass.php \Drupal\webprofiler\Compiler\ProfilerPass::process()
  3. 4.x webprofiler/src/Compiler/ProfilerPass.php \Drupal\webprofiler\Compiler\ProfilerPass::process()

Parameters

\Symfony\Component\DependencyInjection\ContainerBuilder $container:

Throws

\InvalidArgumentException

File

webprofiler/src/Compiler/ProfilerPass.php, line 20

Class

ProfilerPass
Class ProfilerPass

Namespace

Drupal\webprofiler\Compiler

Code

public function process(ContainerBuilder $container) {

  // configure the profiler service
  if (FALSE === $container
    ->hasDefinition('profiler')) {
    return;
  }
  $definition = $container
    ->getDefinition('profiler');
  $collectors = new \SplPriorityQueue();
  $order = PHP_INT_MAX;
  foreach ($container
    ->findTaggedServiceIds('data_collector') as $id => $attributes) {
    $priority = isset($attributes[0]['priority']) ? $attributes[0]['priority'] : 0;
    $template = NULL;
    if (isset($attributes[0]['template'])) {
      if (!isset($attributes[0]['id'])) {
        throw new \InvalidArgumentException(sprintf('Data collector service "%s" must have an id attribute in order to specify a template', $id));
      }
      if (!isset($attributes[0]['title'])) {
        throw new \InvalidArgumentException(sprintf('Data collector service "%s" must have a title attribute', $id));
      }
      $template = [
        $attributes[0]['id'],
        $attributes[0]['template'],
        $attributes[0]['title'],
      ];
    }
    $collectors
      ->insert([
      $id,
      $template,
    ], [
      -$priority,
      --$order,
    ]);
  }
  $templates = [];
  foreach ($collectors as $collector) {
    $definition
      ->addMethodCall('add', [
      new Reference($collector[0]),
    ]);
    $templates[$collector[0]] = $collector[1];
  }
  $container
    ->setParameter('data_collector.templates', $templates);

  // set parameter to store the public folder path
  $path = 'file:' . DRUPAL_ROOT . '/' . PublicStream::basePath() . '/profiler';
  $container
    ->setParameter('data_collector.storage', $path);
}