You are here

class.krumo.php in Devel 7

Same filename and directory in other branches
  1. 6 krumo/class.krumo.php

File

krumo/class.krumo.php
View source
<?php

/**
* Krumo: Structured information display solution
*
* Krumo is a debugging tool (PHP5 only), which displays structured information
* about any PHP variable. It is a nice replacement for print_r() or var_dump()
* which are used by a lot of PHP developers.
*
* @author Kaloyan K. Tsvetkov <kaloyan@kaloyan.info>
* @license http://opensource.org/licenses/lgpl-license.php GNU Lesser General Public License Version 2.1
*
* @package Krumo
*/

//////////////////////////////////////////////////////////////////////////////

/**
* backward compatibility: the DIR_SEP constant isn't used anymore
*/
if (!defined('DIR_SEP')) {
  define('DIR_SEP', DIRECTORY_SEPARATOR);
}

/**
* backward compatibility: the PATH_SEPARATOR constant is availble since 4.3.0RC2
*/
if (!defined('PATH_SEPARATOR')) {
  define('PATH_SEPARATOR', OS_WINDOWS ? ';' : ':');
}

// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

/**
* Set the KRUMO_DIR constant up with the absolute path to Krumo files. If it is
* not defined, include_path will be used. Set KRUMO_DIR only if any other module
* or application has not already set it up.
*/
if (!defined('KRUMO_DIR')) {
  define('KRUMO_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR);
}

/**
* This constant sets the maximum strings of strings that will be shown
* as they are. Longer strings will be truncated with this length, and
* their `full form` will be shown in a child node.
*/
if (!defined('KRUMO_TRUNCATE_LENGTH')) {
  define('KRUMO_TRUNCATE_LENGTH', 50);
}

//////////////////////////////////////////////////////////////////////////////

/**
* Krumo API
*
* This class stores the Krumo API for rendering and
* displaying the structured information it is reporting
*
* @package Krumo
*/
class krumo {

  /**
   * Return Krumo version
   *
   * @return string
   * @access public
   * @static
   */
  public static function version() {
    return '0.2.1a';
  }

  // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

  /**
   * Prints a debug backtrace
   *
   * @access public
   * @static
   */
  public static function backtrace() {

    // disabled ?
    //
    if (!krumo::_debug()) {
      return false;
    }

    // render it
    //
    return krumo::dump(debug_backtrace());
  }

  /**
   * Prints a list of all currently declared classes.
   *
   * @access public
   * @static
   */
  public static function classes() {

    // disabled ?
    //
    if (!krumo::_debug()) {
      return false;
    }

    // render it
    //
    ?>
<div class="krumo-title">
This is a list of all currently declared classes.
</div>
    <?php

    return krumo::dump(get_declared_classes());
  }

  /**
   * Prints a list of all currently declared interfaces (PHP5 only).
   *
   * @access public
   * @static
   */
  public static function interfaces() {

    // disabled ?
    //
    if (!krumo::_debug()) {
      return false;
    }

    // render it
    //
    ?>
<div class="krumo-title">
This is a list of all currently declared interfaces.
</div>
    <?php

    return krumo::dump(get_declared_interfaces());
  }

  /**
   * Prints a list of all currently included (or required) files.
   *
   * @access public
   * @static
   */
  public static function includes() {

    // disabled ?
    //
    if (!krumo::_debug()) {
      return false;
    }

    // render it
    //
    ?>
<div class="krumo-title">
This is a list of all currently included (or required) files.
</div>
    <?php

    return krumo::dump(get_included_files());
  }

  /**
   * Prints a list of all currently declared functions.
   *
   * @access public
   * @static
   */
  public static function functions() {

    // disabled ?
    //
    if (!krumo::_debug()) {
      return false;
    }

    // render it
    //
    ?>
<div class="krumo-title">
This is a list of all currently declared functions.
</div>
    <?php

    return krumo::dump(get_defined_functions());
  }

  /**
   * Prints a list of all currently declared constants.
   *
   * @access public
   * @static
   */
  public static function defines() {

    // disabled ?
    //
    if (!krumo::_debug()) {
      return false;
    }

    // render it
    //
    ?>
<div class="krumo-title">
This is a list of all currently declared constants (defines).
</div>
    <?php

    return krumo::dump(get_defined_constants());
  }

  /**
   * Prints a list of all currently loaded PHP extensions.
   *
   * @access public
   * @static
   */
  public static function extensions() {

    // disabled ?
    //
    if (!krumo::_debug()) {
      return false;
    }

    // render it
    //
    ?>
<div class="krumo-title">
This is a list of all currently loaded PHP extensions.
</div>
    <?php

    return krumo::dump(get_loaded_extensions());
  }

  /**
   * Prints a list of all HTTP request headers.
   *
   * @access public
   * @static
   */
  public static function headers() {

    // disabled ?
    //
    if (!krumo::_debug()) {
      return false;
    }

    // render it
    //
    ?>
<div class="krumo-title">
This is a list of all HTTP request headers.
</div>
    <?php

    return krumo::dump(getAllHeaders());
  }

  /**
   * Prints a list of the configuration settings read from <i>php.ini</i>
   *
   * @access public
   * @static
   */
  public static function phpini() {

    // disabled ?
    //
    if (!krumo::_debug()) {
      return false;
    }
    if (!readable(get_cfg_var('cfg_file_path'))) {
      return false;
    }

    // render it
    //
    ?>
<div class="krumo-title">
This is a list of the configuration settings read from <code><b><?php

    echo get_cfg_var('cfg_file_path');
    ?></b></code>.
</div>
    <?php

    return krumo::dump(parse_ini_file(get_cfg_var('cfg_file_path'), true));
  }

  /**
   * Prints a list of all your configuration settings.
   *
   * @access public
   * @static
   */
  public static function conf() {

    // disabled ?
    //
    if (!krumo::_debug()) {
      return false;
    }

    // render it
    //
    ?>
<div class="krumo-title">
This is a list of all your configuration settings.
</div>
    <?php

    return krumo::dump(ini_get_all());
  }

  /**
   * Prints a list of the specified directories under your <i>include_path</i> option.
   *
   * @access public
   * @static
   */
  public static function path() {

    // disabled ?
    //
    if (!krumo::_debug()) {
      return false;
    }

    // render it
    //
    ?>
<div class="krumo-title">
This is a list of the specified directories under your <code><b>include_path</b></code> option.
</div>
    <?php

    return krumo::dump(explode(PATH_SEPARATOR, ini_get('include_path')));
  }

  /**
   * Prints a list of all the values from the <i>$_REQUEST</i> array.
   *
   * @access public
   * @static
   */
  public static function request() {

    // disabled ?
    //
    if (!krumo::_debug()) {
      return false;
    }

    // render it
    //
    ?>
<div class="krumo-title">
This is a list of all the values from the <code><b>$_REQUEST</b></code> array.
</div>
    <?php

    return krumo::dump($_REQUEST);
  }

  /**
   * Prints a list of all the values from the <i>$_GET</i> array.
   *
   * @access public
   * @static
   */
  public static function get() {

    // disabled ?
    //
    if (!krumo::_debug()) {
      return false;
    }

    // render it
    //
    ?>
<div class="krumo-title">
This is a list of all the values from the <code><b>$_GET</b></code> array.
</div>
    <?php

    return krumo::dump($_GET);
  }

  /**
   * Prints a list of all the values from the <i>$_POST</i> array.
   *
   * @access public
   * @static
   */
  public static function post() {

    // disabled ?
    //
    if (!krumo::_debug()) {
      return false;
    }

    // render it
    //
    ?>
<div class="krumo-title">
This is a list of all the values from the <code><b>$_POST</b></code> array.
</div>
    <?php

    return krumo::dump($_POST);
  }

  /**
   * Prints a list of all the values from the <i>$_SERVER</i> array.
   *
   * @access public
   * @static
   */
  public static function server() {

    // disabled ?
    //
    if (!krumo::_debug()) {
      return false;
    }

    // render it
    //
    ?>
<div class="krumo-title">
This is a list of all the values from the <code><b>$_SERVER</b></code> array.
</div>
    <?php

    return krumo::dump($_SERVER);
  }

  /**
   * Prints a list of all the values from the <i>$_COOKIE</i> array.
   *
   * @access public
   * @static
   */
  public static function cookie() {

    // disabled ?
    //
    if (!krumo::_debug()) {
      return false;
    }

    // render it
    //
    ?>
<div class="krumo-title">
This is a list of all the values from the <code><b>$_COOKIE</b></code> array.
</div>
    <?php

    return krumo::dump($_COOKIE);
  }

  /**
   * Prints a list of all the values from the <i>$_ENV</i> array.
   *
   * @access public
   * @static
   */
  public static function env() {

    // disabled ?
    //
    if (!krumo::_debug()) {
      return false;
    }

    // render it
    //
    ?>
<div class="krumo-title">
This is a list of all the values from the <code><b>$_ENV</b></code> array.
</div>
    <?php

    return krumo::dump($_ENV);
  }

  /**
   * Prints a list of all the values from the <i>$_SESSION</i> array.
   *
   * @access public
   * @static
   */
  public static function session() {

    // disabled ?
    //
    if (!krumo::_debug()) {
      return false;
    }

    // render it
    //
    ?>
<div class="krumo-title">
This is a list of all the values from the <code><b>$_SESSION</b></code> array.
</div>
    <?php

    return krumo::dump($_SESSION);
  }

  /**
   * Prints a list of all the values from an INI file.
   *
   * @param string $ini_file
   *
   * @access public
   * @static
   */
  public static function ini($ini_file) {

    // disabled ?
    //
    if (!krumo::_debug()) {
      return false;
    }

    // read it
    //
    if (!($_ = @parse_ini_file($ini_file, 1))) {
      return false;
    }

    // render it
    //
    ?>
<div class="krumo-title">
This is a list of all the values from the <code><b><?php

    echo realpath($ini_file) ? realpath($ini_file) : $ini_file;
    ?></b></code> INI file.
</div>
    <?php

    return krumo::dump($_);
  }

  // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

  /**
   * Dump information about a variable
   *
   * @param mixed $data,...
   * @access public
   * @static
   */
  public static function dump($data) {

    // disabled ?
    //
    if (!krumo::_debug()) {
      return false;
    }

    // more arguments ?
    //
    if (func_num_args() > 1) {
      $_ = func_get_args();
      foreach ($_ as $d) {
        krumo::dump($d);
      }
      return;
    }

    // the css ?
    //
    krumo::_css();

    // find caller
    // DEVEL: we added array_reverse() so the proper file+line number is found.
    $_ = array_reverse(debug_backtrace());
    while ($d = array_pop($_)) {

      // DEVEL: changed if() condition below
      if (strpos(@$d['file'], 'devel') === FALSE && strpos(@$d['file'], 'krumo') === FALSE && @$d['class'] != 'krumo') {
        break;
      }
    }

    // the content
    // DEVEL: we add an ltr here.
    ?>
<div class="krumo-root" dir="ltr">
  <ul class="krumo-node krumo-first">
    <?php

    echo krumo::_dump($data);
    ?>
    <li class="krumo-footnote">
      <div class="krumo-version" style="white-space:nowrap;">
        <h6>Krumo version <?php

    echo krumo::version();
    ?></h6> | <a
          href="http://krumo.sourceforge.net"
          target="_blank">http://krumo.sourceforge.net</a>
      </div>

    <?php

    if (@$d['file']) {
      ?>
    <span class="krumo-call" style="white-space:nowrap;">
      Called from <code><?php

      echo $d['file'];
      ?></code>,
        line <code><?php

      echo $d['line'];
      ?></code></span>
    <?php

    }
    ?>
    &nbsp;
    </li>
  </ul>
</div>
<?php


    // flee the hive
    //
    $_recursion_marker = krumo::_marker();
    if ($hive =& krumo::_hive($dummy)) {
      foreach ($hive as $i => $bee) {

        // skip closures set as properties
        if (is_object($bee) && !$bee instanceof Closure) {
          unset($hive[$i]->{$_recursion_marker});

          // DEVEL: changed 'else' to 'elseif' below
        }
        elseif (is_array($bee)) {
          unset($hive[$i][$_recursion_marker]);
        }
      }
    }

    // PHP 4.x.x array reference bug...
    //
    if (is_array($data) && version_compare(PHP_VERSION, "5", "<")) {
      unset($GLOBALS[krumo::_marker()]);
    }
  }

  // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

  /**
   * Returns values from Krumo's configuration
   *
   * @param string $group
   * @param string $name
   * @param mixed $fallback
   * @return mixed
   *
   * @access private
   * @static
   */
  private static function _config($group, $name, $fallback = null) {
    static $_config = array();

    // not loaded ?
    //
    if (empty($_config)) {
      $_config = (array) @parse_ini_file(KRUMO_DIR . 'krumo.ini', true);
    }

    // exists ?
    //
    return isset($_config[$group][$name]) ? $_config[$group][$name] : $fallback;
  }

  // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

  /**
   * Allows CSS and Javascript to be included without performing a krumo::dump().
   */
  public static function addCssJs() {
    return krumo::_css();
  }

  // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

  /**
   * Print the skin (CSS)
   *
   * @return boolean
   * @access private
   * @static
   */
  private static function _css() {
    static $_css = false;

    // already set ?
    //
    if ($_css) {
      return true;
    }
    $css = '';

    // DEVEL: changed for Drupal variables system
    $skin = variable_get('devel_krumo_skin', 'default');

    // custom selected skin ?
    //
    $_ = KRUMO_DIR . "skins/{$skin}/skin.css";
    if ($fp = @fopen($_, 'r', 1)) {
      $css = fread($fp, filesize($_));
      fclose($fp);
    }

    // defautl skin ?
    //
    if (!$css && $skin != 'default') {
      $skin = 'default';
      $_ = KRUMO_DIR . "skins/default/skin.css";
      $css = join('', @file($_));
    }

    // print ?
    //
    if ($_css = $css != '') {

      // fix the urls
      //
      // DEVEL: changed for Drupal path system.
      $css_url = file_create_url(drupal_get_path('module', 'devel') . "/krumo/skins/{$skin}/");
      $css = preg_replace('~%url%~Uis', $css_url, $css);

      // the CSS
      //
      drupal_add_css($css, 'inline');
      drupal_add_js(join(file(KRUMO_DIR . "krumo.js")), 'inline');
    }
    return $_css;
  }

  // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

  /**
   * Enable Krumo
   *
   * @return boolean
   * @access public
   * @static
   */
  public static function enable() {
    return true === krumo::_debug(true);
  }

  /**
   * Disable Krumo
   *
   * @return boolean
   * @access public
   * @static
   */
  public static function disable() {
    return false === krumo::_debug(false);
  }

  /**
   * Get\Set Krumo state: whether it is enabled or disabled
   *
   * @param boolean $state
   * @return boolean
   * @access private
   * @static
   */
  private static function _debug($state = null) {
    static $_ = true;

    // set
    //
    if (isset($state)) {
      $_ = (bool) $state;
    }

    // get
    //
    return $_;
  }

  // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

  /**
   * Dump information about a variable
   *
   * @param mixed $data
   * @param string $name
   * @access private
   * @static
   */
  private static function _dump(&$data, $name = '...') {

    // object ?
    //
    if (is_object($data)) {
      return krumo::_object($data, $name);
    }

    // array ?
    //
    if (is_array($data)) {

      // PHP 4.x.x array reference bug...
      //
      if (version_compare(PHP_VERSION, "5", "<")) {

        // prepare the GLOBAL reference list...
        //
        if (!isset($GLOBALS[krumo::_marker()])) {
          $GLOBALS[krumo::_marker()] = array();
        }
        if (!is_array($GLOBALS[krumo::_marker()])) {
          $GLOBALS[krumo::_marker()] = (array) $GLOBALS[krumo::_marker()];
        }

        // extract ?
        //
        if (!empty($GLOBALS[krumo::_marker()])) {
          $d = array_shift($GLOBALS[krumo::_marker()]);
          if (is_array($d)) {
            $data = $d;
          }
        }
      }
      return krumo::_array($data, $name);
    }

    // resource ?
    //
    if (is_resource($data)) {
      return krumo::_resource($data, $name);
    }

    // scalar ?
    //
    if (is_string($data)) {
      return krumo::_string($data, $name);
    }
    if (is_float($data)) {
      return krumo::_float($data, $name);
    }
    if (is_integer($data)) {
      return krumo::_integer($data, $name);
    }
    if (is_bool($data)) {
      return krumo::_boolean($data, $name);
    }

    // null ?
    //
    if (is_null($data)) {
      return krumo::_null($name);
    }
  }

  // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

  /**
   * Render a dump for a NULL value
   *
   * @param string $name
   * @return string
   * @access private
   * @static
   */
  private static function _null($name) {
    ?>
<li class="krumo-child">
  <div class="krumo-element"
    onMouseOver="krumo.over(this);"
    onMouseOut="krumo.out(this);">

      <?php


    /* DEVEL: added htmlSpecialChars */
    ?>
      <a class="krumo-name"><?php

    echo htmlSpecialChars($name);
    ?></a>
      (<em class="krumo-type krumo-null">NULL</em>)
  </div>
</li>
<?php

  }

  // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

  /**
   * Return the marked used to stain arrays
   * and objects in order to detect recursions
   *
   * @return string
   * @access private
   * @static
   */
  private static function _marker() {
    static $_recursion_marker;
    if (!isset($_recursion_marker)) {
      $_recursion_marker = uniqid('krumo');
    }
    return $_recursion_marker;
  }

  // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

  /**
   * Adds a variable to the hive of arrays and objects which
   * are tracked for whether they have recursive entries
   *
   * @param mixed &$bee either array or object, not a scallar vale
   * @return array all the bees
   *
   * @access private
   * @static
   */
  private static function &_hive(&$bee) {
    static $_ = array();

    // new bee ?
    //
    if (!is_null($bee)) {

      // stain it
      //
      $_recursion_marker = krumo::_marker();
      is_object($bee) ? empty($bee->{$_recursion_marker}) ? $bee->{$_recursion_marker} = 1 : $bee->{$_recursion_marker}++ : @$bee[$_recursion_marker]++;
      $_[0][] =& $bee;
    }

    // return all bees
    //
    return $_[0];
  }

  // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

  /**
   * Render a dump for the properties of an array or objeect
   *
   * @param mixed &$data
   * @access private
   * @static
   */
  private static function _vars(&$data) {
    $_is_object = is_object($data);

    // test for references in order to
    // prevent endless recursion loops
    //
    $_recursion_marker = krumo::_marker();
    $_r = $_is_object ? @$data->{$_recursion_marker} : @$data[$_recursion_marker];
    $_r = (int) $_r;

    // recursion detected
    //
    if ($_r > 0) {
      return krumo::_recursion();
    }

    // stain it
    //
    krumo::_hive($data);

    // render it
    //
    ?>
<div class="krumo-nest" style="display:none;">
  <ul class="krumo-node">
  <?php

    if ($_is_object && get_class($data) != 'stdClass') {

      // this part for protected/private properties only
      $refl = new ReflectionClass($data);
      foreach ($refl
        ->getProperties() as $property) {
        $k = $property
          ->getName();
        if ($k === $_recursion_marker || $property
          ->isPublic()) {
          continue;
        }

        // add key indicators
        if ($property
          ->isProtected()) {
          $k .= ':protected';
        }
        elseif ($property
          ->isPrivate()) {
          $k .= ':private';
        }
        $property
          ->setAccessible(TRUE);
        $v = $property
          ->getValue($data);
        krumo::_dump($v, $k);
      }
    }

    // keys ?
    //
    $keys = $_is_object ? array_keys(get_object_vars($data)) : array_keys($data);

    // itterate
    //
    foreach ($keys as $k) {

      // skip marker
      //
      if ($k === $_recursion_marker) {
        continue;
      }

      // get real value
      //
      if ($_is_object) {
        $v =& $data->{$k};
      }
      else {
        $v =& $data[$k];
      }
      krumo::_dump($v, $k);
    }
    ?>
  </ul>
</div>
<?php

  }

  // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

  /**
   * Render a block that detected recursion
   *
   * @access private
   * @static
   */
  private static function _recursion() {
    ?>
<div class="krumo-nest" style="display:none;">
  <ul class="krumo-node">
    <li class="krumo-child">
      <div class="krumo-element"
        onMouseOver="krumo.over(this);"
        onMouseOut="krumo.out(this);">
          <a class="krumo-name"><span class="krumo-big">&#8734;</span></a>
          (<em class="krumo-type">Recursion</em>)
      </div>

    </li>
  </ul>
</div>
<?php

  }

  // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

  /**
   * Render a dump for an array
   *
   * @param mixed $data
   * @param string $name
   * @access private
   * @static
   */
  private static function _array(&$data, $name) {
    ?>
<li class="krumo-child">

  <div class="krumo-element<?php

    echo !empty($data) ? ' krumo-expand' : '';
    ?>">

      <?php


    /* DEVEL: added htmlSpecialChars */
    ?>
      <a class="krumo-name"><?php

    echo htmlSpecialChars($name);
    ?></a>
      (<em class="krumo-type">Array, <strong class="krumo-array-length"><?php

    echo count($data) == 1 ? "1 element" : count($data) . " elements";
    ?></strong></em>)


      <?php


    // callback ?
    //
    if (is_callable($data)) {
      $_ = array_values($data);
      ?>
        <span class="krumo-callback"> |
          (<em class="krumo-type">Callback</em>)
          <strong class="krumo-string"><?php

      echo !is_object($_[0]) ? htmlSpecialChars($_[0]) : get_class($_[0]);
      ?>::<?php

      echo !is_object($_[1]) ? htmlSpecialChars($_[1]) : get_class($_[1]);
      ?>();</strong></span>
        <?php

    }
    ?>

  </div>

  <?php

    if (count($data)) {
      krumo::_vars($data);
    }
    ?>
</li>
<?php

  }

  // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

  /**
   * Render a dump for an object
   *
   * @param mixed $data
   * @param string $name
   * @access private
   * @static
   */
  private static function _object(&$data, $name) {
    ?>
<li class="krumo-child">

  <div class="krumo-element<?php

    echo ' krumo-expand';
    ?>">

      <?php


    /* DEVEL: added htmlSpecialChars */
    ?>
      <a class="krumo-name"><?php

    echo htmlSpecialChars($name);
    ?></a>
      (<em class="krumo-type">Object</em>)
      <strong class="krumo-class"><?php

    echo get_class($data);
    ?></strong>
  </div>

  <?php


    // Skip closures.
    $closure_prototype = function () {
    };
    if ($data instanceof $closure_prototype) {
      return;
    }
    krumo::_vars($data);
    ?>
</li>
<?php

  }

  // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

  /**
   * Render a dump for a resource
   *
   * @param mixed $data
   * @param string $name
   * @access private
   * @static
   */
  private static function _resource($data, $name) {
    ?>
<li class="krumo-child">

  <div class="krumo-element"
    onMouseOver="krumo.over(this);"
    onMouseOut="krumo.out(this);">

      <?php


    /* DEVEL: added htmlSpecialChars */
    ?>
      <a class="krumo-name"><?php

    echo htmlSpecialChars($name);
    ?></a>
      (<em class="krumo-type">Resource</em>)
      <strong class="krumo-resource"><?php

    echo get_resource_type($data);
    ?></strong>
  </div>

</li>
<?php

  }

  // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

  /**
   * Render a dump for a boolean value
   *
   * @param mixed $data
   * @param string $name
   * @access private
   * @static
   */
  private static function _boolean($data, $name) {
    ?>
<li class="krumo-child">

  <div class="krumo-element"
    onMouseOver="krumo.over(this);"
    onMouseOut="krumo.out(this);">

      <?php


    /* DEVEL: added htmlSpecialChars */
    ?>
      <a class="krumo-name"><?php

    echo htmlSpecialChars($name);
    ?></a>
      (<em class="krumo-type">Boolean</em>)
      <strong class="krumo-boolean"><?php

    echo $data ? 'TRUE' : 'FALSE';
    ?></strong>
  </div>

</li>
<?php

  }

  // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

  /**
   * Render a dump for a integer value
   *
   * @param mixed $data
   * @param string $name
   * @access private
   * @static
   */
  private static function _integer($data, $name) {
    ?>
<li class="krumo-child">

  <div class="krumo-element"
    onMouseOver="krumo.over(this);"
    onMouseOut="krumo.out(this);">

      <?php


    /* DEVEL: added htmlSpecialChars */
    ?>
      <a class="krumo-name"><?php

    echo htmlSpecialChars($name);
    ?></a>
      (<em class="krumo-type">Integer</em>)
      <strong class="krumo-integer"><?php

    echo $data;
    ?></strong>
  </div>

</li>
<?php

  }

  // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

  /**
   * Render a dump for a float value
   *
   * @param mixed $data
   * @param string $name
   * @access private
   * @static
   */
  private static function _float($data, $name) {
    ?>
<li class="krumo-child">

  <div class="krumo-element"
    onMouseOver="krumo.over(this);"
    onMouseOut="krumo.out(this);">

      <?php


    /* DEVEL: added htmlSpecialChars */
    ?>
      <a class="krumo-name"><?php

    echo htmlSpecialChars($name);
    ?></a>
      (<em class="krumo-type">Float</em>)
      <strong class="krumo-float"><?php

    echo $data;
    ?></strong>
  </div>

</li>
<?php

  }

  // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

  /**
   * Render a dump for a string value
   *
   * @param mixed $data
   * @param string $name
   * @access private
   * @static
   */
  private static function _string($data, $name) {

    // extra ?
    //
    $_extra = false;
    $_ = $data;
    if (strLen($data) > KRUMO_TRUNCATE_LENGTH) {
      $_ = drupal_substr($data, 0, KRUMO_TRUNCATE_LENGTH - 3) . '...';
      $_extra = true;
    }
    ?>
<li class="krumo-child">

  <div class="krumo-element<?php

    echo $_extra ? ' krumo-expand' : '';
    ?>">

      <?php


    /* DEVEL: added htmlSpecialChars */
    ?>
      <a class="krumo-name"><?php

    echo htmlSpecialChars($name);
    ?></a>
      (<em class="krumo-type">String,
        <strong class="krumo-string-length"><?php

    echo strlen($data);
    ?> characters</strong> </em>)
      <strong class="krumo-string"><?php

    echo htmlSpecialChars($_);
    ?></strong>

      <?php


    // callback ?
    //
    if (is_callable($data)) {
      ?>
        <span class="krumo-callback"> |
          (<em class="krumo-type">Callback</em>)
          <strong class="krumo-string"><?php

      echo htmlSpecialChars($_);
      ?>();</strong></span>
        <?php

    }
    ?>

  </div>

  <?php

    if ($_extra) {
      ?>
  <div class="krumo-nest" style="display:none;">
    <ul class="krumo-node">

      <li class="krumo-child">
        <div class="krumo-preview"><?php

      echo htmlSpecialChars($data);
      ?></div>
      </li>

    </ul>
  </div>
  <?php

    }
    ?>
</li>
<?php

  }

}

//////////////////////////////////////////////////////////////////////////////

/**
* Alias of {@link krumo::dump()}
*
* @param mixed $data,...
*
* @see krumo::dump()
*/
function krumo() {
  $_ = func_get_args();
  return call_user_func_array(array(
    'krumo',
    'dump',
  ), $_);
}

//////////////////////////////////////////////////////////////////////////////

Functions

Namesort descending Description
krumo Alias of {@link krumo::dump()}

Classes

Namesort descending Description
krumo Krumo API