Version 1
[yaffs-website] / web / modules / contrib / devel / webprofiler / src / DataCollector / DevelDataCollector.php
1 <?php
2
3 namespace Drupal\webprofiler\DataCollector;
4
5 use Drupal\Core\Link;
6 use Drupal\Core\Menu\MenuTreeParameters;
7 use Drupal\Core\Render\Markup;
8 use Drupal\Core\StringTranslation\StringTranslationTrait;
9 use Drupal\devel\Plugin\Menu\DestinationMenuLink;
10 use Drupal\webprofiler\DrupalDataCollectorInterface;
11 use Symfony\Component\HttpFoundation\Request;
12 use Symfony\Component\HttpFoundation\Response;
13 use Symfony\Component\HttpKernel\DataCollector\DataCollector;
14
15 /**
16  * Class DevelDataCollector
17  */
18 class DevelDataCollector extends DataCollector implements DrupalDataCollectorInterface {
19
20   use StringTranslationTrait, DrupalDataCollectorTrait;
21
22   /**
23    * {@inheritdoc}
24    */
25   public function collect(Request $request, Response $response, \Exception $exception = NULL) {
26     $this->data['original_url'] = $request->getPathInfo();
27   }
28
29   /**
30    * @return string
31    */
32   public function getLinks() {
33     return $this->develMenuLinks($this->data['original_url']);
34   }
35
36   /**
37    * {@inheritdoc}
38    */
39   public function getName() {
40     return 'devel';
41   }
42
43   /**
44    * {@inheritdoc}
45    */
46   public function getTitle() {
47     return $this->t('Development');
48   }
49
50   /**
51    * {@inheritdoc}
52    */
53   public function hasPanel() {
54     return FALSE;
55   }
56
57   /**
58    * Returns the collector icon in base64 format.
59    *
60    * @return string
61    *   The collector icon.
62    */
63   public function getIcon() {
64     return 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAcCAYAAABlL09dAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2RTdCREU2NUVFQUUxMUU1QTc4Q0Q0OEU5RUY0N0YwMyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo2RTdCREU2NkVFQUUxMUU1QTc4Q0Q0OEU5RUY0N0YwMyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjZFN0JERTYzRUVBRTExRTVBNzhDRDQ4RTlFRjQ3RjAzIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjZFN0JERTY0RUVBRTExRTVBNzhDRDQ4RTlFRjQ3RjAzIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+6sNOKAAAAPVJREFUeNpi/P//PwMtABMDjcCowbQ3mNHe3h6XnBUQTwJiTRzy14E4+8CBAyexSbLgsZQbiI2BOBCH/HqoGgZSDYaBDXjk/uMzuBaLzeVI7FV4DN7n4OAAojvRxL+CwvgnkMFG5bj7BUoVv4lUfBWIrxGp9jcoKM4DsQABhZ+A2BPqs61AzEVA/XuQwT1AzElA4Q8g/gJN951EBN13kMFLgJiHgMJvQCwNxOxAvJwIg7+wEBnGv4D4M1TtLyIMBocxMQUyKExnAzEzEHMQof4/C5GxDHJh4qAp3VhpYC4rKCieAbEQlQ1+yzhamY4aTD+DAQIMAFv+MFaJEyYhAAAAAElFTkSuQmCC';
65   }
66
67   /**
68    * @param string $original_url
69    *
70    * @return array Array containing Devel Menu links
71    *   Array containing Devel Menu links
72    */
73   protected function develMenuLinks($original_url) {
74     // We cannot use injected services here because at this point this
75     // class is deserialized from a storage and not constructed.
76     $menuLinkTreeService = \Drupal::service('menu.link_tree');
77     $rendererService = \Drupal::service('renderer');
78
79     $parameters = new MenuTreeParameters();
80     $parameters->setMaxDepth(1)->onlyEnabledLinks();
81     $tree = $menuLinkTreeService->load('devel', $parameters);
82
83     $manipulators = array(
84       array('callable' => 'menu.default_tree_manipulators:checkAccess'),
85       array('callable' => 'menu.default_tree_manipulators:generateIndexAndSort'),
86     );
87     $tree = $menuLinkTreeService->transform($tree, $manipulators);
88
89     $links = array();
90
91     foreach ($tree as $item) {
92       /** @var DestinationMenuLink $link */
93       $link = $item->link;
94       $renderable = Link::fromTextAndUrl($link->getTitle(), $link->getUrlObject())
95         ->toRenderable();
96       $rendered = $rendererService->renderPlain($renderable);
97       $linkString = preg_replace('/\/profiler\/(.*)&/', $original_url . '&', $rendered);
98       $links[] = Markup::create($linkString);;
99     }
100
101     return $links;
102   }
103 }