X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fmodules%2Fcontrib%2Fdevel%2Fwebprofiler%2Fsrc%2FController%2FDashboardController.php;fp=web%2Fmodules%2Fcontrib%2Fdevel%2Fwebprofiler%2Fsrc%2FController%2FDashboardController.php;h=2b1d93ef1e84212bf5d3614d9c0c80fbd4f64de5;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/web/modules/contrib/devel/webprofiler/src/Controller/DashboardController.php b/web/modules/contrib/devel/webprofiler/src/Controller/DashboardController.php new file mode 100644 index 000000000..2b1d93ef1 --- /dev/null +++ b/web/modules/contrib/devel/webprofiler/src/Controller/DashboardController.php @@ -0,0 +1,243 @@ +get('profiler'), + $container->get('router'), + $container->get('template_manager'), + $container->get('date.formatter'), + $container->get('profiler.storage_manager') + ); + } + + /** + * Constructs a new WebprofilerController. + * + * @param \Drupal\webprofiler\Profiler\Profiler $profiler + * @param \Symfony\Component\Routing\RouterInterface $router + * @param \Drupal\webprofiler\Profiler\TemplateManager $templateManager + * @param \Drupal\Core\Datetime\DateFormatter $date + * @param \Drupal\webprofiler\Profiler\ProfilerStorageManager $storageManager + */ + public function __construct(Profiler $profiler, RouterInterface $router, TemplateManager $templateManager, DateFormatter $date, ProfilerStorageManager $storageManager) { + $this->profiler = $profiler; + $this->router = $router; + $this->templateManager = $templateManager; + $this->date = $date; + $this->storageManager = $storageManager; + } + + /** + * Generates the dashboard page. + * + * @param Profile $profile + * + * @return array + */ + public function dashboardAction(Profile $profile) { + $this->profiler->disable(); + + $templateManager = $this->templateManager; + $templates = $templateManager->getTemplates($profile); + + $panels = []; + $libraries = ['webprofiler/dashboard']; + $drupalSettings = [ + 'webprofiler' => [ + 'token' => $profile->getToken(), + 'ide_link' => $this->config('webprofiler.config')->get('ide_link'), + 'ide_link_remote' => $this->config('webprofiler.config')->get('ide_link_remote'), + 'ide_link_local' => $this->config('webprofiler.config')->get('ide_link_local'), + 'collectors' => [], + ], + ]; + + foreach ($templates as $name => $template) { + /** @var DrupalDataCollectorInterface $collector */ + $collector = $profile->getCollector($name); + + if ($collector->hasPanel()) { + $rendered = $template->renderBlock('panel', [ + 'token' => $profile->getToken(), + 'name' => $name, + ]); + + $panels[] = [ + '#theme' => 'webprofiler_panel', + '#panel' => $rendered, + ]; + + $drupalSettings['webprofiler']['collectors'][] = [ + 'id' => $name, + 'name' => $name, + 'label' => $collector->getTitle(), + 'summary' => $collector->getPanelSummary(), + 'icon' => $collector->getIcon(), + ]; + + $libraries = array_merge($libraries, $collector->getLibraries()); + $drupalSettings['webprofiler'] += $collector->getDrupalSettings(); + } + } + + $build = []; + $build['panels'] = [ + '#theme' => 'webprofiler_dashboard', + '#profile' => $profile, + '#panels' => $panels, + '#spinner_path' => '/' . $this->moduleHandler() + ->getModule('webprofiler') + ->getPath() . '/images/searching.gif', + '#attached' => [ + 'drupalSettings' => $drupalSettings, + 'library' => $libraries, + ], + ]; + + return $build; + } + + /** + * Generates the list page. + * + * @param \Symfony\Component\HttpFoundation\Request $request + * + * @return array + */ + public function listAction(Request $request) { + $limit = $request->get('limit', 10); + $this->profiler->disable(); + + $ip = $request->query->get('ip'); + $method = $request->query->get('method'); + $url = $request->query->get('url'); + + $profiles = $this->profiler->find($ip, $url, $limit, $method, '', ''); + + $rows = []; + if (count($profiles)) { + foreach ($profiles as $profile) { + $row = []; + $row[] = $this->l($profile['token'], new Url('webprofiler.dashboard', ['profile' => $profile['token']])); + $row[] = $profile['ip']; + $row[] = $profile['method']; + $row[] = $profile['url']; + $row[] = $this->date->format($profile['time']); + + $rows[] = $row; + } + } + else { + $rows[] = [ + [ + 'data' => $this->t('No profiles found'), + 'colspan' => 6, + ], + ]; + } + + $build = []; + + $storage_id = $this->config('webprofiler.config')->get('storage'); + $storage = $this->storageManager->getStorage($storage_id); + + $build['resume'] = [ + '#type' => 'inline_template', + '#template' => '

{{ message }}

', + '#context' => [ + 'message' => $this->t('Profiles stored with %storage service.', ['%storage' => $storage['title']]), + ], + ]; + + $build['filters'] = $this->formBuilder() + ->getForm('Drupal\\webprofiler\\Form\\ProfilesFilterForm'); + + $build['table'] = [ + '#type' => 'table', + '#rows' => $rows, + '#header' => [ + $this->t('Token'), + [ + 'data' => $this->t('Ip'), + 'class' => [RESPONSIVE_PRIORITY_LOW], + ], + [ + 'data' => $this->t('Method'), + 'class' => [RESPONSIVE_PRIORITY_LOW], + ], + $this->t('Url'), + [ + 'data' => $this->t('Time'), + 'class' => [RESPONSIVE_PRIORITY_MEDIUM], + ], + ], + '#sticky' => TRUE, + ]; + + return $build; + } + + /** + * Exposes collector's data as JSON. + * + * @param \Symfony\Component\HttpKernel\Profiler\Profile $profile + * @param $collector + * + * @return \Symfony\Component\HttpFoundation\JsonResponse + */ + public function restCollectorAction(Profile $profile, $collector) { + $this->profiler->disable(); + + $data = $profile->getCollector($collector)->getData(); + + return new JsonResponse(['data' => $data]); + } +}