X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fmodules%2Fcontrib%2Fdevel%2Fsrc%2FTwig%2FExtension%2FDebug.php;fp=web%2Fmodules%2Fcontrib%2Fdevel%2Fsrc%2FTwig%2FExtension%2FDebug.php;h=9922e610634cf7c6c5280fcc35c583bd5b932479;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/web/modules/contrib/devel/src/Twig/Extension/Debug.php b/web/modules/contrib/devel/src/Twig/Extension/Debug.php new file mode 100644 index 000000000..9922e6106 --- /dev/null +++ b/web/modules/contrib/devel/src/Twig/Extension/Debug.php @@ -0,0 +1,201 @@ +dumper = $dumper; + } + + /** + * {@inheritdoc} + */ + public function getName() { + return 'devel_debug'; + } + + /** + * {@inheritdoc} + */ + public function getFunctions() { + $functions = []; + + foreach (['devel_dump', 'kpr'] as $function) { + $functions[] = new \Twig_SimpleFunction($function, [$this, 'dump'], [ + 'is_safe' => ['html'], + 'needs_environment' => TRUE, + 'needs_context' => TRUE, + 'is_variadic' => TRUE, + ]); + } + + foreach (['devel_message', 'dpm', 'dsm'] as $function) { + $functions[] = new \Twig_SimpleFunction($function, [$this, 'message'], [ + 'is_safe' => ['html'], + 'needs_environment' => TRUE, + 'needs_context' => TRUE, + 'is_variadic' => TRUE, + ]); + } + + foreach (['devel_breakpoint'] as $function) { + $functions[] = new \Twig_SimpleFunction($function, [$this, 'breakpoint'], [ + 'needs_environment' => TRUE, + 'needs_context' => TRUE, + 'is_variadic' => TRUE, + ]); + } + + return $functions; + } + + /** + * Provides debug function to Twig templates. + * + * Handles 0, 1, or multiple arguments. + * + * @param \Twig_Environment $env + * The twig environment instance. + * @param array $context + * An array of parameters passed to the template. + * @param array $args + * An array of parameters passed the function. + * + * @return string + * String representation of the input variables. + * + * @see \Drupal\devel\DevelDumperManager::dump() + */ + public function dump(\Twig_Environment $env, array $context, array $args = []) { + if (!$env->isDebug()) { + return; + } + + ob_start(); + + // No arguments passed, display full Twig context. + if (empty($args)) { + $context_variables = $this->getContextVariables($context); + $this->dumper->dump($context_variables, 'Twig context'); + } + else { + foreach ($args as $variable) { + $this->dumper->dump($variable); + } + } + + return ob_get_clean(); + } + + /** + * Provides debug function to Twig templates. + * + * Handles 0, 1, or multiple arguments. + * + * @param \Twig_Environment $env + * The twig environment instance. + * @param array $context + * An array of parameters passed to the template. + * @param array $args + * An array of parameters passed the function. + * + * @return void + * + * @see \Drupal\devel\DevelDumperManager::message() + */ + public function message(\Twig_Environment $env, array $context, array $args = []) { + if (!$env->isDebug()) { + return; + } + + // No arguments passed, display full Twig context. + if (empty($args)) { + $context_variables = $this->getContextVariables($context); + $this->dumper->message($context_variables, 'Twig context'); + } + else { + foreach ($args as $variable) { + $this->dumper->message($variable); + } + } + + } + + /** + * Provides XDebug integration for Twig templates. + * + * To use this features simply put the following statement in the template + * of interest: + * + * @code + * {{ devel_breakpoint() }} + * @endcode + * + * When the template is evaluated is made a call to a dedicated method in + * devel twig debug extension in which is used xdebug_break(), that emits a + * breakpoint to the debug client (the debugger break on the specific line as + * if a normal file/line breakpoint was set on this line). + * In this way you'll be able to inspect any variables available in the + * template (environment, context, specific variables etc..) in your IDE. + * + * @param \Twig_Environment $env + * The twig environment instance. + * @param array $context + * An array of parameters passed to the template. + * @param array $args + * An array of parameters passed the function. + */ + public function breakpoint(\Twig_Environment $env, array $context, array $args = []) { + if (!$env->isDebug()) { + return; + } + + if (function_exists('xdebug_break')) { + xdebug_break(); + } + } + + /** + * Filters the Twig context variable. + * + * @param array $context + * The Twig context. + * + * @return array + * An array Twig context variables. + */ + protected function getContextVariables(array $context) { + $context_variables = []; + foreach ($context as $key => $value) { + if (!$value instanceof \Twig_Template) { + $context_variables[$key] = $value; + } + } + return $context_variables; + } + +}