Changeset 649 for branches/1.1dev/lib


Ignore:
Timestamp:
Nov 15, 2018 11:02:45 PM (5 years ago)
Author:
anonymous
Message:

Backport dump(), fancyDump(), and truncate() from v2.x

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/1.1dev/lib/Utilities.inc.php

    r646 r649  
    99 * Print variable dump.
    1010 *
    11  * @param  mixed $var      Variable to dump.
    12  * @param  bool  $display   Hide the dump in HTML comments?
    13  * @param  bool  $var_dump Use var_dump instead of print_r.
    14  */
    15 function dump($var, $display=false, $var_dump=false)
    16 {
    17     echo $display ? "\n<br /><pre>\n" : "\n\n\n<!--\n";
    18     if ($var_dump) {
     11 * @param  mixed    $var        The variable to dump.
     12 * @param  bool     $display    Print the dump in <pre> tags or hide it in html comments (non-CLI only).
     13 * @param  bool     $dump_method   Dump method. See SC_DUMP_* constants.
     14 * @param  string   $file       Value of __FILE__.
     15 * @param  string   $line       Value of __LINE__
     16 */
     17define('SC_DUMP_PRINT_R', 0);
     18define('SC_DUMP_VAR_DUMP', 1);
     19define('SC_DUMP_VAR_EXPORT', 2);
     20function dump($var, $display=false, $dump_method=SC_DUMP_PRINT_R, $file='', $line='')
     21{
     22    $app =& App::getInstance();
     23
     24    if ('cli' === php_sapi_name() || defined('_CLI')) {
     25        echo "DUMP FROM: $file $line\n";
     26    } else {
     27        echo $display ? "\n<br />DUMP <strong>$file $line</strong><br /><pre>\n" : "\n<!-- DUMP $file $line\n";
     28    }
     29
     30    switch ($dump_method) {
     31    case SC_DUMP_PRINT_R:
     32    default:
     33        // Print human-readable descriptions of invisible types.
     34        if (null === $var) {
     35            echo '(null)';
     36        } else if (true === $var) {
     37            echo '(bool: true)';
     38        } else if (false === $var) {
     39            echo '(bool: false)';
     40        } else if (is_scalar($var) && '' === $var) {
     41            echo '(empty string)';
     42        } else if (is_scalar($var) && preg_match('/^\s+$/', $var)) {
     43            echo '(only white space)';
     44        } else {
     45            print_r($var);
     46        }
     47        break;
     48
     49    case SC_DUMP_VAR_DUMP:
    1950        var_dump($var);
    20     } else {
    21         print_r($var);
    22     }
    23     echo $display ?  "\n</pre><br />\n" : "\n-->\n\n\n";
     51        break;
     52
     53    case SC_DUMP_VAR_EXPORT:
     54        var_export($var);
     55        break;
     56    }
     57
     58    if ('cli' === php_sapi_name() || defined('_CLI')) {
     59        echo "\n";
     60    } else {
     61        echo $display ? "\n</pre><br />\n" : "\n-->\n";
     62    }
    2463}
    2564
     
    4382 * Return dump as cleaned text. Useful for dumping data into emails.
    4483 *
    45  * @param  mixed $var      Variable to dump.
    46  *
     84 * @param  array    $var        Variable to dump.
     85 * @param  strong   $indent     A string to prepend indented lines (tab for example).
    4786 * @return string Dump of var.
    4887 */
     
    5291    if (is_array($var)) {
    5392        foreach ($var as $k=>$v) {
    54             $k = ucfirst(strtolower(str_replace(array('_', '  '), ' ', $k)));
     93            $k = ucfirst(mb_strtolower(str_replace(array('_', '  '), ' ', $k)));
    5594            if (is_array($v)) {
    5695                $output .= sprintf("\n%s%s: %s\n", $indent, $k, fancyDump($v, $indent . $indent));
     
    62101        $output .= sprintf("%s%s\n", $indent, $var);
    63102    }
    64     return $output;
     103    return preg_replace(['/^[ \t]+$/', '/\n\n\n+/'], ['', "\n\n"], $output);
    65104}
    66105
     
    215254 * @since   29 Mar 2006 13:48:49
    216255 */
    217 function truncate($str, $len, $where='end', $delim='
')
    218 {
    219     if ($len <= 3 || mb_strlen($str) <= 3) {
    220         return '';
    221     }
    222     $part1 = floor(($len - 3) / 2);
    223     $part2 = ceil(($len - 3) / 2);
     256function truncate($str, $len=50, $where='end', $delim='
')
     257{
     258    $dlen = mb_strlen($delim);
     259    if ($len <= $dlen || mb_strlen($str) <= $dlen) {
     260        return substr($str, 0, $len);
     261    }
     262    $part1 = floor(($len - $dlen) / 2);
     263    $part2 = ceil(($len - $dlen) / 2);
     264
     265    if ($len > ini_get('pcre.backtrack_limit')) {
     266        logMsg(sprintf('Asked to truncate string len of %s > pcre.backtrack_limit of %s', $len, ini_get('pcre.backtrack_limit')), LOG_DEBUG, __FILE__, __LINE__);
     267        ini_set('pcre.backtrack_limit', $len);
     268    }
     269
    224270    switch ($where) {
    225271    case 'start' :
    226         return preg_replace(array(sprintf('/^.{4,}(.{%s})$/sU', $part1 + $part2), '/\s*\.{3,}\s*/sU'), array($delim . '$1', $delim), $str);
    227         break;
     272        return preg_replace(array(sprintf('/^.{%s,}(.{%s})$/su', $dlen + 1, $part1 + $part2), sprintf('/\s*%s{%s,}\s*/su', preg_quote($delim), $dlen)), array($delim . '$1', $delim), $str);
     273
     274    case 'middle' :
     275        return preg_replace(array(sprintf('/^(.{%s}).{%s,}(.{%s})$/su', $part1, $dlen + 1, $part2), sprintf('/\s*%s{%s,}\s*/su', preg_quote($delim), $dlen)), array('$1' . $delim . '$2', $delim), $str);
     276
     277    case 'end' :
    228278    default :
    229     case 'middle' :
    230         return preg_replace(array(sprintf('/^(.{%s}).{4,}(.{%s})$/sU', $part1, $part2), '/\s*\.{3,}\s*/sU'), array('$1' . $delim . '$2', $delim), $str);
    231         break;
    232     case 'end' :
    233         return preg_replace(array(sprintf('/^(.{%s}).{4,}$/sU', $part1 + $part2), '/\s*\.{3,}\s*/sU'), array('$1' . $delim, $delim), $str);
    234         break;
     279        return preg_replace(array(sprintf('/^(.{%s}).{%s,}$/su', $part1 + $part2, $dlen + 1), sprintf('/\s*%s{%s,}\s*/su', preg_quote($delim), $dlen)), array('$1' . $delim, $delim), $str);
    235280    }
    236281}
Note: See TracChangeset for help on using the changeset viewer.