[ Index ] |
PHP Cross Reference of phpBB-3.3.14-deutsch |
[Summary view] [Print] [Text view]
1 <?php 2 3 /* 4 * This file is part of the Symfony package. 5 * 6 * (c) Fabien Potencier <fabien@symfony.com> 7 * 8 * For the full copyright and license information, please view the LICENSE 9 * file that was distributed with this source code. 10 */ 11 12 namespace Symfony\Bridge\Twig\DataCollector; 13 14 use Symfony\Component\HttpFoundation\Request; 15 use Symfony\Component\HttpFoundation\Response; 16 use Symfony\Component\HttpKernel\DataCollector\DataCollector; 17 use Symfony\Component\HttpKernel\DataCollector\LateDataCollectorInterface; 18 use Twig\Environment; 19 use Twig\Error\LoaderError; 20 use Twig\Markup; 21 use Twig\Profiler\Dumper\HtmlDumper; 22 use Twig\Profiler\Profile; 23 24 /** 25 * TwigDataCollector. 26 * 27 * @author Fabien Potencier <fabien@symfony.com> 28 */ 29 class TwigDataCollector extends DataCollector implements LateDataCollectorInterface 30 { 31 private $profile; 32 private $twig; 33 private $computed; 34 35 public function __construct(Profile $profile, Environment $twig = null) 36 { 37 $this->profile = $profile; 38 $this->twig = $twig; 39 } 40 41 /** 42 * {@inheritdoc} 43 */ 44 public function collect(Request $request, Response $response, \Exception $exception = null) 45 { 46 } 47 48 /** 49 * {@inheritdoc} 50 */ 51 public function reset() 52 { 53 $this->profile->reset(); 54 $this->computed = null; 55 $this->data = []; 56 } 57 58 /** 59 * {@inheritdoc} 60 */ 61 public function lateCollect() 62 { 63 $this->data['profile'] = serialize($this->profile); 64 $this->data['template_paths'] = []; 65 66 if (null === $this->twig) { 67 return; 68 } 69 70 $templateFinder = function (Profile $profile) use (&$templateFinder) { 71 if ($profile->isTemplate()) { 72 try { 73 $template = $this->twig->load($name = $profile->getName()); 74 } catch (LoaderError $e) { 75 $template = null; 76 } 77 78 if (null !== $template && '' !== $path = $template->getSourceContext()->getPath()) { 79 $this->data['template_paths'][$name] = $path; 80 } 81 } 82 83 foreach ($profile as $p) { 84 $templateFinder($p); 85 } 86 }; 87 $templateFinder($this->profile); 88 } 89 90 public function getTime() 91 { 92 return $this->getProfile()->getDuration() * 1000; 93 } 94 95 public function getTemplateCount() 96 { 97 return $this->getComputedData('template_count'); 98 } 99 100 public function getTemplatePaths() 101 { 102 return $this->data['template_paths']; 103 } 104 105 public function getTemplates() 106 { 107 return $this->getComputedData('templates'); 108 } 109 110 public function getBlockCount() 111 { 112 return $this->getComputedData('block_count'); 113 } 114 115 public function getMacroCount() 116 { 117 return $this->getComputedData('macro_count'); 118 } 119 120 public function getHtmlCallGraph() 121 { 122 $dumper = new HtmlDumper(); 123 $dump = $dumper->dump($this->getProfile()); 124 125 // needed to remove the hardcoded CSS styles 126 $dump = str_replace([ 127 '<span style="background-color: #ffd">', 128 '<span style="color: #d44">', 129 '<span style="background-color: #dfd">', 130 ], [ 131 '<span class="status-warning">', 132 '<span class="status-error">', 133 '<span class="status-success">', 134 ], $dump); 135 136 return new Markup($dump, 'UTF-8'); 137 } 138 139 public function getProfile() 140 { 141 if (null === $this->profile) { 142 if (\PHP_VERSION_ID >= 70000) { 143 $this->profile = unserialize($this->data['profile'], ['allowed_classes' => ['Twig_Profiler_Profile', 'Twig\Profiler\Profile']]); 144 } else { 145 $this->profile = unserialize($this->data['profile']); 146 } 147 } 148 149 return $this->profile; 150 } 151 152 private function getComputedData($index) 153 { 154 if (null === $this->computed) { 155 $this->computed = $this->computeData($this->getProfile()); 156 } 157 158 return $this->computed[$index]; 159 } 160 161 private function computeData(Profile $profile) 162 { 163 $data = [ 164 'template_count' => 0, 165 'block_count' => 0, 166 'macro_count' => 0, 167 ]; 168 169 $templates = []; 170 foreach ($profile as $p) { 171 $d = $this->computeData($p); 172 173 $data['template_count'] += ($p->isTemplate() ? 1 : 0) + $d['template_count']; 174 $data['block_count'] += ($p->isBlock() ? 1 : 0) + $d['block_count']; 175 $data['macro_count'] += ($p->isMacro() ? 1 : 0) + $d['macro_count']; 176 177 if ($p->isTemplate()) { 178 if (!isset($templates[$p->getTemplate()])) { 179 $templates[$p->getTemplate()] = 1; 180 } else { 181 ++$templates[$p->getTemplate()]; 182 } 183 } 184 185 foreach ($d['templates'] as $template => $count) { 186 if (!isset($templates[$template])) { 187 $templates[$template] = $count; 188 } else { 189 $templates[$template] += $count; 190 } 191 } 192 } 193 $data['templates'] = $templates; 194 195 return $data; 196 } 197 198 /** 199 * {@inheritdoc} 200 */ 201 public function getName() 202 { 203 return 'twig'; 204 } 205 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Mon Nov 25 19:05:08 2024 | Cross-referenced by PHPXref 0.7.1 |