Version 1
[yaffs-website] / web / modules / contrib / devel / webprofiler / src / DataCollector / ViewsDataCollector.php
1 <?php
2
3 namespace Drupal\webprofiler\DataCollector;
4
5 use Drupal\Core\Entity\EntityManagerInterface;
6 use Drupal\Core\StringTranslation\StringTranslationTrait;
7 use Drupal\webprofiler\DrupalDataCollectorInterface;
8 use Drupal\webprofiler\Views\TraceableViewExecutable;
9 use Drupal\webprofiler\Views\ViewExecutableFactoryWrapper;
10 use Symfony\Component\HttpFoundation\Request;
11 use Symfony\Component\HttpFoundation\Response;
12 use Symfony\Component\HttpKernel\DataCollector\DataCollector;
13
14 /**
15  * Collects data about rendered views.
16  */
17 class ViewsDataCollector extends DataCollector implements DrupalDataCollectorInterface {
18
19   use StringTranslationTrait, DrupalDataCollectorTrait;
20
21   /**
22    * @var \Drupal\webprofiler\Views\ViewExecutableFactoryWrapper
23    */
24   private $view_executable_factory;
25
26   /**
27    * @var \Drupal\Core\Entity\EntityManagerInterface
28    */
29   private $entityManager;
30
31   /**
32    * @param ViewExecutableFactoryWrapper $view_executable_factory
33    * @param \Drupal\Core\Entity\EntityManagerInterface $entityManager
34    */
35   public function __construct(ViewExecutableFactoryWrapper $view_executable_factory, EntityManagerInterface $entityManager) {
36     $this->entityManager = $entityManager;
37     $this->view_executable_factory = $view_executable_factory;
38
39     $this->data['views'] = [];
40   }
41
42   /**
43    * {@inheritdoc}
44    */
45   public function collect(Request $request, Response $response, \Exception $exception = NULL) {
46     $views = $this->view_executable_factory->getViews();
47     $storage = $this->entityManager->getStorage('view');
48
49     /** @var TraceableViewExecutable $view */
50     foreach ($views as $view) {
51       if ($view->executed) {
52         $data = [
53           'id' => $view->storage->id(),
54           'current_display' => $view->current_display,
55           'build_time' => $view->getBuildTime(),
56           'execute_time' => $view->getExecuteTime(),
57           'render_time' => $view->getRenderTime(),
58         ];
59
60         $entity = $storage->load($view->storage->id());
61         if ($entity->hasLinkTemplate('edit-display-form')) {
62           $route = $entity->toUrl('edit-display-form');
63           $route->setRouteParameter('display_id', $view->current_display);
64           $data['route'] = $route->toString();
65         }
66
67         $this->data['views'][] = $data;
68       }
69     }
70
71 //    TODO: also use those data.
72 //    $loaded = $this->entityManager->getLoaded('view');
73 //
74 //    if ($loaded) {
75 //      /** @var \Drupal\webprofiler\Entity\EntityStorageDecorator $views */
76 //      foreach ($loaded->getEntities() as $views) {
77 //        $this->data['views'][] = array(
78 //          'id' => $views->get('id'),
79 //        );
80 //      }
81 //    }
82   }
83
84   /**
85    * @return int
86    */
87   public function getViewsCount() {
88     return count($this->data['views']);
89   }
90
91   /**
92    * {@inheritdoc}
93    */
94   public function getName() {
95     return 'views';
96   }
97
98   /**
99    * {@inheritdoc}
100    */
101   public function getTitle() {
102     return $this->t('Views');
103   }
104
105   /**
106    * {@inheritdoc}
107    */
108   public function getPanelSummary() {
109     return $this->t('Total: @count', ['@count' => $this->getViewsCount()]);
110   }
111
112   /**
113    * {@inheritdoc}
114    */
115   public function getIcon() {
116     return 'iVBORw0KGgoAAAANSUhEUgAAABUAAAAcCAYAAACOGPReAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowNDgwMTE3NDA3MjA2ODExOEY2MkNCNjI0NDY3NzkwRCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozNEVFREM2NkQ4MUMxMUUzQkMwRUNBMkQwMzE4QjVBMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozNEVFREM2NUQ4MUMxMUUzQkMwRUNBMkQwMzE4QjVBMyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgTWFjaW50b3NoIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDQ4MDExNzQwNzIwNjgxMThGNjJDQjYyNDQ2Nzc5MEQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDQ4MDExNzQwNzIwNjgxMThGNjJDQjYyNDQ2Nzc5MEQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6vqYfFAAAAXUlEQVR42mL8//8/A7UBEwMNwKih1AcsIGLz5s1USwK+vr6MLMgcSg2EOW6IhSkycHR0BHth//79jMh8fACmlr4uRbcVnT8apqNhOhqmAxZR1CyoGUfrfaoDgAADAA4QNs9x67RnAAAAAElFTkSuQmCC';
117   }
118 }