123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- <?php
- /**
- * YiiDebugViewRenderer class file.
- *
- * @author Sergey Malyshev <malyshev.php@gmail.com>
- */
- /**
- * YiiDebugViewRenderer represents an ...
- *
- * Description of YiiDebugViewRenderer
- *
- * @author Sergey Malyshev <malyshev.php@gmail.com>
- * @version $Id$
- * @package
- * @since 1.1.7
- */
- class YiiDebugViewRenderer extends YiiDebugComponentProxy
- {
- protected $abstract = array(
- 'fileExtension' => '.php',
- );
- protected $_debugStackTrace = array();
- public function getDebugStackTrace()
- {
- return $this->_debugStackTrace;
- }
- public function renderFile($context, $sourceFile, $data, $return)
- {
- $this->collectDebugInfo($context, $sourceFile, $data);
- if (false !== $this->getIsProxy())
- {
- return $this->instance->renderFile($context,$sourceFile,$data,$return);
- }
- return $context->renderInternal($sourceFile,$data,$return);
- }
- public function generateViewFile($sourceFile, $viewFile)
- {
- if (false !== $this->getIsProxy())
- {
- return $this->instance->generateViewFile($sourceFile, $viewFile);
- }
- }
-
- protected function getDebugBacktrace()
- {
- // @see "http://www.php.net/manual/en/function.debug-backtrace.php"
- //
- // debug_backtrace Changelog
- //
- // Version Description
- // 5.4.0 Added the optional parameter limit.
- // 5.3.6 The parameter provide_object changed to options and
- // additional option DEBUG_BACKTRACE_IGNORE_ARGS is added.
- // 5.2.5 Added the optional parameter provide_object.
- // 5.1.1 Added the current object as a possible return element.
- if (version_compare(PHP_VERSION, '5.4.0', '>='))
- {
- // signature is:
- // array debug_backtrace ([ int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT [, int $limit = 0 ]] )
- //
- // possible values for $options:
- // - DEBUG_BACKTRACE_PROVIDE_OBJECT
- // - DEBUG_BACKTRACE_IGNORE_ARGS
- // - DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS
- $debugBacktrace = debug_backtrace( DEBUG_BACKTRACE_PROVIDE_OBJECT );
- }
- elseif (version_compare(PHP_VERSION, '5.3.6', '>='))
- {
- // signature is:
- // array debug_backtrace ([ int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT ] )
- //
- // possible values for $options:
- // - DEBUG_BACKTRACE_PROVIDE_OBJECT
- // - DEBUG_BACKTRACE_IGNORE_ARGS
- // - DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS
- $debugBacktrace = debug_backtrace( DEBUG_BACKTRACE_PROVIDE_OBJECT );
- }
- elseif (version_compare(PHP_VERSION, '5.2.5', '>='))
- {
- // signature is:
- // array debug_backtrace ([ bool $provide_object = TRUE ] )
- $debugBacktrace = debug_backtrace( true );
- }
- else /* version < 5.2.5 */
- {
- // signature is:
- // array debug_backtrace ( )
- $debugBacktrace = debug_backtrace();
- }
-
- return $debugBacktrace;
- }
-
- protected function collectDebugInfo($context, $sourceFile, $data)
- {
- if($context instanceof YiiDebugToolbar || false !== ($context instanceof YiiDebugToolbarPanel))
- return;
- $backTrace = $this->getDebugBacktrace();
- $backTraceItem = null;
- while($backTraceItem = array_shift($backTrace))
- {
- if(isset($backTraceItem['object']) && $backTraceItem['object'] && ($backTraceItem['object'] instanceof $context) && in_array($backTraceItem['function'], array(
- 'render',
- 'renderPartial'
- )) )
- {
- break;
- }
- }
- array_push($this->_debugStackTrace, array(
- 'context'=>$context,
- 'contextProperties'=> get_object_vars($context),
- 'action'=> $context instanceof CController ? $context->action : null,
- 'actionParams'=> ($context instanceof CController && method_exists($context, 'getActionParams'))
- ? $context->actionParams
- : null,
- 'route'=> $context instanceof CController ? $context->route : null,
- 'sourceFile'=>$sourceFile,
- 'data'=>$data,
- 'backTrace'=>$backTraceItem,
- 'reflection' => new ReflectionObject($context)
- ));
- }
-
- }
|