Version 1
[yaffs-website] / web / modules / contrib / devel / webprofiler / src / Controller / ToolbarController.php
1 <?php
2
3 namespace Drupal\webprofiler\Controller;
4
5 use Drupal\Component\Serialization\Json;
6 use Drupal\Core\Controller\ControllerBase;
7 use Drupal\Core\Render\RendererInterface;
8 use Drupal\webprofiler\Profiler\Profiler;
9 use Drupal\webprofiler\Profiler\TemplateManager;
10 use Symfony\Component\DependencyInjection\ContainerInterface;
11 use Symfony\Component\HttpFoundation\JsonResponse;
12 use Symfony\Component\HttpFoundation\Request;
13 use Symfony\Component\HttpFoundation\Response;
14 use Symfony\Component\HttpKernel\Profiler\Profile;
15
16 /**
17  * Class ToolbarController
18  */
19 class ToolbarController extends ControllerBase {
20
21   /**
22    * @var \Drupal\webprofiler\Profiler\Profiler
23    */
24   private $profiler;
25
26   /**
27    * @var \Drupal\webprofiler\Profiler\TemplateManager
28    */
29   private $templateManager;
30
31   /**
32    * @var \Drupal\Core\Render\RendererInterface
33    */
34   private $renderer;
35
36   /**
37    * {@inheritdoc}
38    */
39   public static function create(ContainerInterface $container) {
40     return new static(
41       $container->get('profiler'),
42       $container->get('template_manager'),
43       $container->get('renderer')
44     );
45   }
46
47   /**
48    * Constructs a new WebprofilerController.
49    *
50    * @param \Drupal\webprofiler\Profiler\Profiler $profiler
51    * @param \Drupal\webprofiler\Profiler\TemplateManager $templateManager
52    * @param \Drupal\Core\Render\RendererInterface $renderer
53    */
54   public function __construct(Profiler $profiler, TemplateManager $templateManager, RendererInterface $renderer) {
55     $this->profiler = $profiler;
56     $this->templateManager = $templateManager;
57     $this->renderer = $renderer;
58   }
59
60   /**
61    * Generates the toolbar.
62    *
63    * @param Profile $profile
64    *
65    * @return array
66    */
67   public function toolbarAction(Profile $profile) {
68     $this->profiler->disable();
69
70     $templates = $this->templateManager->getTemplates($profile);
71
72     $rendered = '';
73     foreach ($templates as $name => $template) {
74       $rendered .= $template->renderBlock('toolbar', [
75         'collector' => $profile->getcollector($name),
76         'token' => $profile->getToken(),
77         'name' => $name
78       ]);
79     }
80
81     $toolbar = [
82       '#theme' => 'webprofiler_toolbar',
83       '#toolbar' => $rendered,
84       '#token' => $profile->getToken(),
85     ];
86
87     return new Response($this->renderer->render($toolbar));
88   }
89
90   /**
91    * @param \Symfony\Component\HttpKernel\Profiler\Profile $profile
92    * @param \Symfony\Component\HttpFoundation\Request $request
93    *
94    * @return \Symfony\Component\HttpFoundation\JsonResponse
95    */
96   public function savePerformanceTimingAction(Profile $profile, Request $request) {
97     $this->profiler->disable();
98
99     $data = Json::decode($request->getContent());
100
101     /** @var  $collector */
102     $collector = $profile->getCollector('performance_timing');
103     $collector->setData($data);
104     $this->profiler->updateProfile($profile);
105
106     return new JsonResponse(['success' => TRUE]);
107   }
108 }