| 
      1
     | 
    
      <?php
 
     | 
  
  
    | 
      2
     | 
    
      /*~ class.quickskindebugger.php
 
     | 
  
  
    | 
      3
     | 
    
      .---------------------------------------------------------------------------.
 
     | 
  
  
    | 
      4
     | 
    
      |  Software: QuickSkinDebugger Class * Used by QuickSkin Class              |
 
     | 
  
  
    | 
      5
     | 
    
      |   Version: 5.0                                                            |
 
     | 
  
  
    | 
      6
     | 
    
      |   Contact: andy.prevost@worxteam.com,andy@codeworx.ca                     |
 
     | 
  
  
    | 
      7
     | 
    
      |      Info: http://quickskin.sourceforge.net                               |
 
     | 
  
  
    | 
      8
     | 
    
      |   Support: http://sourceforge.net/projects/quickskin/                     |
 
     | 
  
  
    | 
      9
     | 
    
      | ------------------------------------------------------------------------- |
 
     | 
  
  
    | 
      10
     | 
    
      |    Author: Andy Prevost andy.prevost@worxteam.com (admin)                 |
 
     | 
  
  
    | 
      11
     | 
    
      |    Author: Manuel 'EndelWar' Dalla Lana endelwar@aregar.it (former admin) |
 
     | 
  
  
    | 
      12
     | 
    
      |    Author: Philipp v. Criegern philipp@criegern.com (original founder)    |
 
     | 
  
  
    | 
      13
     | 
    
      | Copyright (c) 2002-2009, Andy Prevost. All Rights Reserved.               |
 
     | 
  
  
    | 
      14
     | 
    
      |    * NOTE: QuickSkin is the SmartTemplate project renamed. SmartTemplate  |
 
     | 
  
  
    | 
      15
     | 
    
      |            information and downloads can still be accessed at the         |
 
     | 
  
  
    | 
      16
     | 
    
      |            smarttemplate.sourceforge.net site                             |
 
     | 
  
  
    | 
      17
     | 
    
      | ------------------------------------------------------------------------- |
 
     | 
  
  
    | 
      18
     | 
    
      |   License: Distributed under the Lesser General Public License (LGPL)     |
 
     | 
  
  
    | 
      19
     | 
    
      |            http://www.gnu.org/copyleft/lesser.html                        |
 
     | 
  
  
    | 
      20
     | 
    
      | This program is distributed in the hope that it will be useful - WITHOUT  |
 
     | 
  
  
    | 
      21
     | 
    
      | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or     |
 
     | 
  
  
    | 
      22
     | 
    
      | FITNESS FOR A PARTICULAR PURPOSE.                                         |
 
     | 
  
  
    | 
      23
     | 
    
      | ------------------------------------------------------------------------- |
 
     | 
  
  
    | 
      24
     | 
    
      | We offer a number of paid services:                                       |
 
     | 
  
  
    | 
      25
     | 
    
      | - Web Hosting on highly optimized fast and secure servers                 |
 
     | 
  
  
    | 
      26
     | 
    
      | - Technology Consulting                                                   |
 
     | 
  
  
    | 
      27
     | 
    
      | - Oursourcing (highly qualified programmers and graphic designers)        |
 
     | 
  
  
    | 
      28
     | 
    
      '---------------------------------------------------------------------------'
 
     | 
  
  
    | 
      29
     | 
    
      Last modified: January 01 2009 ~*/
 
     | 
  
  
    | 
      30
     | 
    
      
 
     | 
  
  
    | 
      31
     | 
    
      /* designed to work with PHP5 - will NOT work with PHP4 */
 
     | 
  
  
    | 
      32
     | 
    
      
 
     | 
  
  
    | 
      33
     | 
    
      class QuickSkinDebugger {
     | 
  
  
    | 
      34
     | 
    
      
 
     | 
  
  
    | 
      35
     | 
    
        /* The template Filename
 
     | 
  
  
    | 
      36
     | 
    
         * @access private
 
     | 
  
  
    | 
      37
     | 
    
         */
 
     | 
  
  
    | 
      38
     | 
    
        private $filename;
 
     | 
  
  
    | 
      39
     | 
    
      
 
     | 
  
  
    | 
      40
     | 
    
        /* The template itself
 
     | 
  
  
    | 
      41
     | 
    
         * @access private
 
     | 
  
  
    | 
      42
     | 
    
         */
 
     | 
  
  
    | 
      43
     | 
    
        private $template;
 
     | 
  
  
    | 
      44
     | 
    
      
 
     | 
  
  
    | 
      45
     | 
    
        /* Default Left delimiter
 
     | 
  
  
    | 
      46
     | 
    
         * Can be overwritten by global configuration array $_CONFIG['left_delimiter']
 
     | 
  
  
    | 
      47
     | 
    
         * @access public
 
     | 
  
  
    | 
      48
     | 
    
         */
 
     | 
  
  
    | 
      49
     | 
    
        private $left_delimiter =  '{';
     | 
  
  
    | 
      50
     | 
    
      
 
     | 
  
  
    | 
      51
     | 
    
        /* Default Right delimiter
 
     | 
  
  
    | 
      52
     | 
    
         * Can be overwritten by global configuration array $_CONFIG['right_delimiter']
 
     | 
  
  
    | 
      53
     | 
    
         * @access public
 
     | 
  
  
    | 
      54
     | 
    
         */
 
     | 
  
  
    | 
      55
     | 
    
        private $right_delimiter =  '}';
 
     | 
  
  
    | 
      56
     | 
    
      
 
     | 
  
  
    | 
      57
     | 
    
        /* QuickSkinDebugger Constructor
 
     | 
  
  
    | 
      58
     | 
    
         * @param string $template_filename HTML Template Filename
 
     | 
  
  
    | 
      59
     | 
    
         */
 
     | 
  
  
    | 
      60
     | 
    
        function __construct( $template_filename, $right_delimiter = '}', $left_delimiter = '{' ) {
     | 
  
  
    | 
      61
     | 
    
          $this->filename  =  $template_filename;
 
     | 
  
  
    | 
      62
     | 
    
      
 
     | 
  
  
    | 
      63
     | 
    
          /* Load Template */
 
     | 
  
  
    | 
      64
     | 
    
          if ($hd  =  @fopen($template_filename,  'r')) {
     | 
  
  
    | 
      65
     | 
    
            $this->template  =  fread($hd,  filesize($template_filename));
 
     | 
  
  
    | 
      66
     | 
    
            fclose($hd);
 
     | 
  
  
    | 
      67
     | 
    
          } else {
     | 
  
  
    | 
      68
     | 
    
            $this->template  =  'QuickSkin Debugger Error: File not found: ' . $template_filename;
 
     | 
  
  
    | 
      69
     | 
    
          }
 
     | 
  
  
    | 
      70
     | 
    
          $this->tab[0]  =  '';
 
     | 
  
  
    | 
      71
     | 
    
          for ($i=1;  $i < 10;  $i++) {
     | 
  
  
    | 
      72
     | 
    
            $this->tab[$i]  =  str_repeat('    ', $i);
     | 
  
  
    | 
      73
     | 
    
          }
 
     | 
  
  
    | 
      74
     | 
    
          $this->right_delimiter = $right_delimiter;
 
     | 
  
  
    | 
      75
     | 
    
          $this->left_delimiter = $left_delimiter;
 
     | 
  
  
    | 
      76
     | 
    
        }
 
     | 
  
  
    | 
      77
     | 
    
      
 
     | 
  
  
    | 
      78
     | 
    
        /* Main Template Parser
 
     | 
  
  
    | 
      79
     | 
    
         * @param string $compiled_template_filename Compiled Template Filename
 
     | 
  
  
    | 
      80
     | 
    
         * @desc Creates Compiled PHP Template
 
     | 
  
  
    | 
      81
     | 
    
         */
 
     | 
  
  
    | 
      82
     | 
    
        function start ( $vars ) {
     | 
  
  
    | 
      83
     | 
    
          $page  =  $this->template;
 
     | 
  
  
    | 
      84
     | 
    
      
 
     | 
  
  
    | 
      85
     | 
    
          $page  =  preg_replace("/(<!-- BEGIN [ a-zA-Z0-9_.]* -->)/",  "\n$1\n",  $page);
     | 
  
  
    | 
      86
     | 
    
          $page  =  preg_replace("/(<!-- IF .+? -->)/",  "\n$1\n",  $page);
     | 
  
  
    | 
      87
     | 
    
          $page  =  preg_replace("/(<!-- END.*? -->)/",  "\n$1\n",  $page);
     | 
  
  
    | 
      88
     | 
    
          $page  =  preg_replace("/(<!-- ELSEIF .+? -->)/",  "\n$1\n",  $page);
     | 
  
  
    | 
      89
     | 
    
          $page  =  preg_replace("/(<!-- ELSE [ a-zA-Z0-9_.]*-->)/",  "\n$1\n",  $page);
     | 
  
  
    | 
      90
     | 
    
      
 
     | 
  
  
    | 
      91
     | 
    
          $page  =  $this->highlight_html($page);
 
     | 
  
  
    | 
      92
     | 
    
      
 
     | 
  
  
    | 
      93
     | 
    
          $rows      =  explode("\n",  $page);
     | 
  
  
    | 
      94
     | 
    
          $page_arr  =  array();
 
     | 
  
  
    | 
      95
     | 
    
          $level     =  0;
 
     | 
  
  
    | 
      96
     | 
    
          $blocklvl  =  0;
 
     | 
  
  
    | 
      97
     | 
    
          $rowcnt    =  0;
 
     | 
  
  
    | 
      98
     | 
    
          $spancnt   =  0;
 
     | 
  
  
    | 
      99
     | 
    
          $offset    =  22;
 
     | 
  
  
    | 
      100
     | 
    
          $lvl_block =  array();
 
     | 
  
  
    | 
      101
     | 
    
          $lvl_row   =  array();
 
     | 
  
  
    | 
      102
     | 
    
          $lvl_typ   =  array();
 
     | 
  
  
    | 
      103
     | 
    
          foreach ($rows as $row) {
     | 
  
  
    | 
      104
     | 
    
            if ($row  =  trim($row)) {
     | 
  
  
    | 
      105
     | 
    
              $closespan  =  false;
 
     | 
  
  
    | 
      106
     | 
    
              if (substr($row, $offset, 12) == '<!-- END ') {
     | 
  
  
    | 
      107
     | 
    
                if ($level < 1) {
     | 
  
  
    | 
      108
     | 
    
                  $level++;
 
     | 
  
  
    | 
      109
     | 
    
                  $error[$rowcnt]  =  'END Without BEGIN';
 
     | 
  
  
    | 
      110
     | 
    
                } elseif ($lvl_typ[$level] != 'BEGIN') {
     | 
  
  
    | 
      111
     | 
    
                  $error[$lvl_row[$level]]  =  'IF without ENDIF';
 
     | 
  
  
    | 
      112
     | 
    
                  $error[$rowcnt]  =  'END Without BEGIN';
 
     | 
  
  
    | 
      113
     | 
    
                }
 
     | 
  
  
    | 
      114
     | 
    
                $blocklvl--;
 
     | 
  
  
    | 
      115
     | 
    
                $level--;
 
     | 
  
  
    | 
      116
     | 
    
                $closespan  =  true;
 
     | 
  
  
    | 
      117
     | 
    
              }
 
     | 
  
  
    | 
      118
     | 
    
              if (substr($row, $offset, 14) == '<!-- ENDIF ') {
     | 
  
  
    | 
      119
     | 
    
                if ($level < 1) {
     | 
  
  
    | 
      120
     | 
    
                  $level++;
 
     | 
  
  
    | 
      121
     | 
    
                  $error[$rowcnt]  =  'ENDIF Without IF';
 
     | 
  
  
    | 
      122
     | 
    
                } elseif ($lvl_typ[$level] != 'IF') {
     | 
  
  
    | 
      123
     | 
    
                  $error[$lvl_row[$level]]  =  'BEGIN without END';
 
     | 
  
  
    | 
      124
     | 
    
                  $error[$rowcnt]  =  'ENDIF Without IF';
 
     | 
  
  
    | 
      125
     | 
    
                }
 
     | 
  
  
    | 
      126
     | 
    
                $closespan  =  true;
 
     | 
  
  
    | 
      127
     | 
    
                $level--;
 
     | 
  
  
    | 
      128
     | 
    
              }
 
     | 
  
  
    | 
      129
     | 
    
              if ($closespan) {
     | 
  
  
    | 
      130
     | 
    
                $page_arr[$rowcnt-1]  .=  '</span>';
 
     | 
  
  
    | 
      131
     | 
    
              }
 
     | 
  
  
    | 
      132
     | 
    
              $this_row  =  $this->tab[$level] . $row;
 
     | 
  
  
    | 
      133
     | 
    
              if (substr($row, $offset, 12) == '<!-- ELSE') {
     | 
  
  
    | 
      134
     | 
    
                if ($level < 1) {
     | 
  
  
    | 
      135
     | 
    
                  $error[$rowcnt]  =  'ELSE Without IF';
 
     | 
  
  
    | 
      136
     | 
    
                } elseif ($lvl_typ[$level] != 'IF') {
     | 
  
  
    | 
      137
     | 
    
                  $error[$rowcnt]  =  'ELSE Without IF';
 
     | 
  
  
    | 
      138
     | 
    
                } else {
     | 
  
  
    | 
      139
     | 
    
                  $this_row  =  $this->tab[$level-1] . $row;
 
     | 
  
  
    | 
      140
     | 
    
                }
 
     | 
  
  
    | 
      141
     | 
    
              }
 
     | 
  
  
    | 
      142
     | 
    
              if (substr($row, $offset, 14) == '<!-- BEGIN ') {
     | 
  
  
    | 
      143
     | 
    
                if ($blocklvl == 0) {
     | 
  
  
    | 
      144
     | 
    
                  if ($lp = strpos($row, '-->')) {
     | 
  
  
    | 
      145
     | 
    
                    if ($blockname  =  trim(substr($row, $offset + 14, $lp -$offset -14))) {
     | 
  
  
    | 
      146
     | 
    
                      if ($nr = count($vars[$blockname])) {
     | 
  
  
    | 
      147
     | 
    
                        $this_row  .=  $this->toggleview($nr . ' Entries');
 
     | 
  
  
    | 
      148
     | 
    
                      } else {
     | 
  
  
    | 
      149
     | 
    
                        $this_row  .=  $this->toggleview('Emtpy');
     | 
  
  
    | 
      150
     | 
    
                      }
 
     | 
  
  
    | 
      151
     | 
    
                    }
 
     | 
  
  
    | 
      152
     | 
    
                  }
 
     | 
  
  
    | 
      153
     | 
    
                } else {
     | 
  
  
    | 
      154
     | 
    
                  $this_row  .=  $this->toggleview('[');
     | 
  
  
    | 
      155
     | 
    
                }
 
     | 
  
  
    | 
      156
     | 
    
                $blocklvl++;
 
     | 
  
  
    | 
      157
     | 
    
                $level++;
 
     | 
  
  
    | 
      158
     | 
    
                $lvl_row[$level]  =  $rowcnt;
 
     | 
  
  
    | 
      159
     | 
    
                $lvl_typ[$level]  =  'BEGIN';
 
     | 
  
  
    | 
      160
     | 
    
              } elseif (substr($row, $offset, 11) == '<!-- IF ') {
     | 
  
  
    | 
      161
     | 
    
                $level++;
 
     | 
  
  
    | 
      162
     | 
    
                $lvl_row[$level]  =  $rowcnt;
 
     | 
  
  
    | 
      163
     | 
    
                $lvl_typ[$level]  =  'IF';
 
     | 
  
  
    | 
      164
     | 
    
                $this_row  .=  $this->toggleview();
 
     | 
  
  
    | 
      165
     | 
    
              }
 
     | 
  
  
    | 
      166
     | 
    
              $page_arr[]  =  $this_row;
 
     | 
  
  
    | 
      167
     | 
    
              $lvl_block[$rowcnt]  =  $blocklvl;
 
     | 
  
  
    | 
      168
     | 
    
              $rowcnt++;
 
     | 
  
  
    | 
      169
     | 
    
            }
 
     | 
  
  
    | 
      170
     | 
    
          }
 
     | 
  
  
    | 
      171
     | 
    
          if ($level > 0) {
     | 
  
  
    | 
      172
     | 
    
            $error[$lvl_row[$level]]  =  'Block not closed';
 
     | 
  
  
    | 
      173
     | 
    
          }
 
     | 
  
  
    | 
      174
     | 
    
      
 
     | 
  
  
    | 
      175
     | 
    
          $page  =  join("\n", $page_arr);
     | 
  
  
    | 
      176
     | 
    
          $rows  =  explode("\n",  $page);
     | 
  
  
    | 
      177
     | 
    
          $cnt   =  count($rows);
 
     | 
  
  
    | 
      178
     | 
    
      
 
     | 
  
  
    | 
      179
     | 
    
          for ($i = 0;  $i < $cnt;  $i++) {
     | 
  
  
    | 
      180
     | 
    
            /* Add Errortext */
 
     | 
  
  
    | 
      181
     | 
    
            if (isset($error)) {
     | 
  
  
    | 
      182
     | 
    
              if ($err = $error[$i]) {
     | 
  
  
    | 
      183
     | 
    
                $rows[$i]  =  '<b>' . $rows[$i] . '        ERROR: ' . $err . '!</b>';
 
     | 
  
  
    | 
      184
     | 
    
              }
 
     | 
  
  
    | 
      185
     | 
    
            }
 
     | 
  
  
    | 
      186
     | 
    
      
 
     | 
  
  
    | 
      187
     | 
    
            /* Replace Scalars */
 
     | 
  
  
    | 
      188
     | 
    
            $right_delimiter = preg_quote($this->right_delimiter);
 
     | 
  
  
    | 
      189
     | 
    
            $left_delimiter = preg_quote($this->left_delimiter);
 
     | 
  
  
    | 
      190
     | 
    
            if (preg_match_all("/$left_delimiter([a-zA-Z0-9_. &;]+)$right_delimiter/", $rows[$i], $var)) {
     | 
  
  
    | 
      191
     | 
    
              foreach ($var[1] as $tag) {
     | 
  
  
    | 
      192
     | 
    
                $fulltag  =  $tag;
 
     | 
  
  
    | 
      193
     | 
    
                if ($delim = strpos($tag, ' > ')) {
     | 
  
  
    | 
      194
     | 
    
                  $tag  =  substr($tag, 0, $delim);
 
     | 
  
  
    | 
      195
     | 
    
                }
 
     | 
  
  
    | 
      196
     | 
    
                if (substr($tag, 0, 4) == 'top.') {
     | 
  
  
    | 
      197
     | 
    
                  $title  =  $this->tip($vars[substr($tag, 4)]);
 
     | 
  
  
    | 
      198
     | 
    
                } elseif ($lvl_block[$i] == 0) {
     | 
  
  
    | 
      199
     | 
    
                  $title  =  $this->tip($vars[$tag]);
 
     | 
  
  
    | 
      200
     | 
    
                } else {
     | 
  
  
    | 
      201
     | 
    
                  $title  =  '[BLOCK?]';
 
     | 
  
  
    | 
      202
     | 
    
                }
 
     | 
  
  
    | 
      203
     | 
    
                $code  =  '<b title="' . $title . '">' . $left_delimiter . $fulltag . $right_delimiter . '</b>';
 
     | 
  
  
    | 
      204
     | 
    
                $rows[$i]  =  str_replace('{'.$fulltag.'}',  $code,  $rows[$i]);
     | 
  
  
    | 
      205
     | 
    
              }
 
     | 
  
  
    | 
      206
     | 
    
            }
 
     | 
  
  
    | 
      207
     | 
    
      
 
     | 
  
  
    | 
      208
     | 
    
            /* Replace Extensions */
 
     | 
  
  
    | 
      209
     | 
    
            if (preg_match_all("/$left_delimiter([a-zA-Z0-9_]+):([^}]*)$right_delimiter/", $rows[$i], $var)) {
     | 
  
  
    | 
      210
     | 
    
              foreach ($var[2] as $tmpcnt => $tag) {
     | 
  
  
    | 
      211
     | 
    
                $fulltag  =  $tag;
 
     | 
  
  
    | 
      212
     | 
    
                if ($delim = strpos($tag, ' > ')) {
     | 
  
  
    | 
      213
     | 
    
                  $tag  =  substr($tag, 0, $delim);
 
     | 
  
  
    | 
      214
     | 
    
                }
 
     | 
  
  
    | 
      215
     | 
    
                if (strpos($tag, ',')) {
     | 
  
  
    | 
      216
     | 
    
                  list($tag, $addparam)  =  explode(',', $tag, 2);
     | 
  
  
    | 
      217
     | 
    
                }
 
     | 
  
  
    | 
      218
     | 
    
                $extension  =  $var[1][$tmpcnt];
 
     | 
  
  
    | 
      219
     | 
    
      
 
     | 
  
  
    | 
      220
     | 
    
                if (substr($tag, 0, 4) == 'top.') {
     | 
  
  
    | 
      221
     | 
    
                  $title  =  $this->tip($vars[substr($tag, 4)]);
 
     | 
  
  
    | 
      222
     | 
    
                } elseif ($lvl_block[$i] == 0) {
     | 
  
  
    | 
      223
     | 
    
                  $title  =  $this->tip($vars[$tag]);
 
     | 
  
  
    | 
      224
     | 
    
                } else {
     | 
  
  
    | 
      225
     | 
    
                  $title  =  '[BLOCK?]';
 
     | 
  
  
    | 
      226
     | 
    
                }
 
     | 
  
  
    | 
      227
     | 
    
                $code  =  '<b title="' . $title . '">' . $this->left_delimiter . $extension . ':' . $fulltag . $this->right_delimiter . '</b>';
 
     | 
  
  
    | 
      228
     | 
    
                $rows[$i]  =  str_replace($this->left_delimiter . $extension . ':' . $fulltag . $this->right_delimiter,  $code,  $rows[$i]);
 
     | 
  
  
    | 
      229
     | 
    
              }
 
     | 
  
  
    | 
      230
     | 
    
            }
 
     | 
  
  
    | 
      231
     | 
    
      
 
     | 
  
  
    | 
      232
     | 
    
            /* 'IF nnn' Blocks */
 
     | 
  
  
    | 
      233
     | 
    
            if (preg_match_all('/<!-- IF ([a-zA-Z0-9_.]+) -->/', $rows[$i], $var)) {
     | 
  
  
    | 
      234
     | 
    
              foreach ($var[1] as $tag) {
     | 
  
  
    | 
      235
     | 
    
                if (substr($tag, 0, 4) == 'top.') {
     | 
  
  
    | 
      236
     | 
    
                  $title  =  $this->tip($vars[substr($tag, 4)]);
 
     | 
  
  
    | 
      237
     | 
    
                } elseif ($lvl_block[$i] == 0) {
     | 
  
  
    | 
      238
     | 
    
                  $title  =  $this->tip($vars[$tag]);
 
     | 
  
  
    | 
      239
     | 
    
                } else {
     | 
  
  
    | 
      240
     | 
    
                  $title  =  '[BLOCK?]';
 
     | 
  
  
    | 
      241
     | 
    
                }
 
     | 
  
  
    | 
      242
     | 
    
                $code  =  '<span title="' . $title . '"><!-- IF ' . $tag . ' --></span>';
 
     | 
  
  
    | 
      243
     | 
    
                $rows[$i]  =  str_replace("<!-- IF $tag -->",  $code,  $rows[$i]);
     | 
  
  
    | 
      244
     | 
    
                if ($title == '[NULL]') {
     | 
  
  
    | 
      245
     | 
    
                  $rows[$i]  =  str_replace('Hide',  'Show',  $rows[$i]);
     | 
  
  
    | 
      246
     | 
    
                  $rows[$i]  =  str_replace('block',  'none',  $rows[$i]);
     | 
  
  
    | 
      247
     | 
    
                }
 
     | 
  
  
    | 
      248
     | 
    
              }
 
     | 
  
  
    | 
      249
     | 
    
            }
 
     | 
  
  
    | 
      250
     | 
    
          }
 
     | 
  
  
    | 
      251
     | 
    
          $page  =  join('<br>', $rows);
     | 
  
  
    | 
      252
     | 
    
      
 
     | 
  
  
    | 
      253
     | 
    
          /* Print Header */
 
     | 
  
  
    | 
      254
     | 
    
          echo '<html><head><script type="text/javascript">
 
     | 
  
  
    | 
      255
     | 
    
              function toggleVisibility(el, src) {
     | 
  
  
    | 
      256
     | 
    
              var v = el.style.display == "block";
 
     | 
  
  
    | 
      257
     | 
    
              var str = src.innerHTML;
 
     | 
  
  
    | 
      258
     | 
    
              el.style.display = v ? "none" : "block";
 
     | 
  
  
    | 
      259
     | 
    
              src.innerHTML = v ? str.replace(/Hide/, "Show") : str.replace(/Show/, "Hide");}
 
     | 
  
  
    | 
      260
     | 
    
              </script></head><body>';
 
     | 
  
  
    | 
      261
     | 
    
      
 
     | 
  
  
    | 
      262
     | 
    
          /* Print Index */
 
     | 
  
  
    | 
      263
     | 
    
          echo '<font face="Arial" Size="3"><b>';
 
     | 
  
  
    | 
      264
     | 
    
          echo 'QuickSkin Debugger<br>';
 
     | 
  
  
    | 
      265
     | 
    
          echo '<font size="2"><li>PHP-Script: ' . $_SERVER['SCRIPT_FILENAME'] . '</li><li>Template: ' . $this->filename . '</li></font><hr>';
 
     | 
  
  
    | 
      266
     | 
    
          echo '<li><a href="#template_code">Template</a></li>';
 
     | 
  
  
    | 
      267
     | 
    
          echo '<li><a href="#compiled_code">Compiled Template</a></li>';
 
     | 
  
  
    | 
      268
     | 
    
          echo '<li><a href="#data_code">Data</a></li>';
 
     | 
  
  
    | 
      269
     | 
    
          echo '</b></font><hr>';
 
     | 
  
  
    | 
      270
     | 
    
      
 
     | 
  
  
    | 
      271
     | 
    
          /* Print Template */
 
     | 
  
  
    | 
      272
     | 
    
          echo '<a name="template_code"><br><font face="Arial" Size="3"><b>Template:</b> [<a href="javascript:void(\'\');" onclick="toggleVisibility(document.getElementById(\'Template\'), this); return false">Hide Ouptut</a>]</font><br>';
 
     | 
  
  
    | 
      273
     | 
    
          echo '<table border="0" cellpadding="4" cellspacing="1" width="100%" bgcolor="#C6D3EF"><tr><td bgcolor="#F0F0F0"><pre id="Template" style="display:block">';
 
     | 
  
  
    | 
      274
     | 
    
          echo $page;
 
     | 
  
  
    | 
      275
     | 
    
          echo '</pre></td></tr></table>';
 
     | 
  
  
    | 
      276
     | 
    
      
 
     | 
  
  
    | 
      277
     | 
    
          /* Print Compiled Template */
 
     | 
  
  
    | 
      278
     | 
    
          if (@include_once ("class.quickskinparser.php")) {
     | 
  
  
    | 
      279
     | 
    
            $parser = new QuickSkinParser($this->filename);
 
     | 
  
  
    | 
      280
     | 
    
            $compiled  =  $parser->compile();
 
     | 
  
  
    | 
      281
     | 
    
            echo '<a name="compiled_code"><br><br><font face="Arial" Size="3"><b>Compiled Template:</b> [<a href="javascript:void(\'\');" onclick="toggleVisibility(document.getElementById(\'Compiled\'), this); return false">Hide Ouptut</a>]</font><br>';
 
     | 
  
  
    | 
      282
     | 
    
            echo '<table border="0" cellpadding="4" cellspacing="1" width="100%" bgcolor="#C6D3EF"><tr><td bgcolor="#F0F0F0"><pre id="Compiled" style="display:block">';
 
     | 
  
  
    | 
      283
     | 
    
            highlight_string($compiled);
 
     | 
  
  
    | 
      284
     | 
    
            echo '</pre></td></tr></table>';
 
     | 
  
  
    | 
      285
     | 
    
          } else {
     | 
  
  
    | 
      286
     | 
    
            exit( "QuickSkin Error: Cannot find class.quickskinparser.php; check QuickSkin installation");
 
     | 
  
  
    | 
      287
     | 
    
          }
 
     | 
  
  
    | 
      288
     | 
    
      
 
     | 
  
  
    | 
      289
     | 
    
          /* Print Data */
 
     | 
  
  
    | 
      290
     | 
    
          echo '<a name="data_code"><br><br><font face="Arial" Size="3"><b>Data:</b> [<a href="javascript:void(\'\');" onclick="toggleVisibility(document.getElementById(\'Data\'), this); return false">Hide Ouptut</a>]</font><br>';
 
     | 
  
  
    | 
      291
     | 
    
          echo '<table border="0" cellpadding="4" cellspacing="1" width="100%" bgcolor="#C6D3EF"><tr><td bgcolor="#F0F0F0"><pre id="Data" style="display:block">';
 
     | 
  
  
    | 
      292
     | 
    
          echo $this->vardump($vars);
 
     | 
  
  
    | 
      293
     | 
    
          echo '</pre></td></tr></table></body></html>';
 
     | 
  
  
    | 
      294
     | 
    
        }
 
     | 
  
  
    | 
      295
     | 
    
      
 
     | 
  
  
    | 
      296
     | 
    
        /* Insert Hide/Show Layer Switch
 
     | 
  
  
    | 
      297
     | 
    
         * @param string $suffix Additional Text
 
     | 
  
  
    | 
      298
     | 
    
         * @desc Insert Hide/Show Layer Switch
 
     | 
  
  
    | 
      299
     | 
    
         */
 
     | 
  
  
    | 
      300
     | 
    
        function toggleview ( $suffix = '') {
     | 
  
  
    | 
      301
     | 
    
          global $spancnt;
 
     | 
  
  
    | 
      302
     | 
    
      
 
     | 
  
  
    | 
      303
     | 
    
          $spancnt++;
 
     | 
  
  
    | 
      304
     | 
    
          if ($suffix) {
     | 
  
  
    | 
      305
     | 
    
            $suffix  .=  ':';
 
     | 
  
  
    | 
      306
     | 
    
          }
 
     | 
  
  
    | 
      307
     | 
    
          $ret =  '[' . $suffix . '<a href="javascript:void(\'\');" onclick="toggleVisibility(document.getElementById(\'Block' . $spancnt . '\'), this); return false">Hide Block</a>]<span id="Block' . $spancnt . '" style="display:block">';
 
     | 
  
  
    | 
      308
     | 
    
          return $ret;
 
     | 
  
  
    | 
      309
     | 
    
        }
 
     | 
  
  
    | 
      310
     | 
    
      
 
     | 
  
  
    | 
      311
     | 
    
        /* Create Title Text
 
     | 
  
  
    | 
      312
     | 
    
         * @param string $value Content
 
     | 
  
  
    | 
      313
     | 
    
         * @desc Create Title Text
 
     | 
  
  
    | 
      314
     | 
    
         */
 
     | 
  
  
    | 
      315
     | 
    
        function tip ( $value ) {
     | 
  
  
    | 
      316
     | 
    
          if (empty($value)) {
     | 
  
  
    | 
      317
     | 
    
            return '[NULL]';
 
     | 
  
  
    | 
      318
     | 
    
          } else {
     | 
  
  
    | 
      319
     | 
    
            $ret = htmlentities(substr($value,0,200));
 
     | 
  
  
    | 
      320
     | 
    
            return $ret;
 
     | 
  
  
    | 
      321
     | 
    
          }
 
     | 
  
  
    | 
      322
     | 
    
        }
 
     | 
  
  
    | 
      323
     | 
    
      
 
     | 
  
  
    | 
      324
     | 
    
        /* Recursive Variable Display Output
 
     | 
  
  
    | 
      325
     | 
    
         * @param mixed $var Content
 
     | 
  
  
    | 
      326
     | 
    
         * @param int $depth Incremented Indent Counter for Recursive Calls
 
     | 
  
  
    | 
      327
     | 
    
         * @return string Variable Content
 
     | 
  
  
    | 
      328
     | 
    
         * @access private
 
     | 
  
  
    | 
      329
     | 
    
         * @desc Recursive Variable Display Output
 
     | 
  
  
    | 
      330
     | 
    
         */
 
     | 
  
  
    | 
      331
     | 
    
          function vardump($var, $depth = 0) {
     | 
  
  
    | 
      332
     | 
    
            if (is_array($var)) {
     | 
  
  
    | 
      333
     | 
    
              $result  =  "Array (" . count($var) . ")<BR>";
     | 
  
  
    | 
      334
     | 
    
              foreach(array_keys($var) as $key) {
     | 
  
  
    | 
      335
     | 
    
                $result  .=  $this->tab[$depth] . "<B>$key</B>: " . $this->vardump($var[$key],  $depth+1);
 
     | 
  
  
    | 
      336
     | 
    
              }
 
     | 
  
  
    | 
      337
     | 
    
              return $result;
 
     | 
  
  
    | 
      338
     | 
    
            } else {
     | 
  
  
    | 
      339
     | 
    
              $ret =  htmlentities($var) . '<BR>';
 
     | 
  
  
    | 
      340
     | 
    
              return $ret;
 
     | 
  
  
    | 
      341
     | 
    
            }
 
     | 
  
  
    | 
      342
     | 
    
          }
 
     | 
  
  
    | 
      343
     | 
    
      
 
     | 
  
  
    | 
      344
     | 
    
        /* Splits Template-Style Variable Names into an Array-Name/Key-Name Components
 
     | 
  
  
    | 
      345
     | 
    
         * @param string $tag Variale Name used in Template
 
     | 
  
  
    | 
      346
     | 
    
         * @return array  Array Name, Key Name
 
     | 
  
  
    | 
      347
     | 
    
         * @access private
 
     | 
  
  
    | 
      348
     | 
    
         * @desc Splits Template-Style Variable Names into an Array-Name/Key-Name Components
 
     | 
  
  
    | 
      349
     | 
    
         */
 
     | 
  
  
    | 
      350
     | 
    
        function var_name($tag) {
     | 
  
  
    | 
      351
     | 
    
          $parent_level  =  0;
 
     | 
  
  
    | 
      352
     | 
    
          while (substr($tag, 0, 7) == 'parent.') {
     | 
  
  
    | 
      353
     | 
    
            $tag  =  substr($tag, 7);
 
     | 
  
  
    | 
      354
     | 
    
            $parent_level++;
 
     | 
  
  
    | 
      355
     | 
    
          }
 
     | 
  
  
    | 
      356
     | 
    
          if (substr($tag, 0, 4) == 'top.') {
     | 
  
  
    | 
      357
     | 
    
            $ret = array('_stack[0]', substr($tag,4));
     | 
  
  
    | 
      358
     | 
    
            return $ret;
 
     | 
  
  
    | 
      359
     | 
    
          } elseif ($parent_level) {
     | 
  
  
    | 
      360
     | 
    
            $ret = array('_stack[$_stack_cnt-'.$parent_level.']', $tag);
     | 
  
  
    | 
      361
     | 
    
            return $ret;
 
     | 
  
  
    | 
      362
     | 
    
          } else {
     | 
  
  
    | 
      363
     | 
    
            $ret = array('_obj', $tag);
     | 
  
  
    | 
      364
     | 
    
            return $ret;
 
     | 
  
  
    | 
      365
     | 
    
          }
 
     | 
  
  
    | 
      366
     | 
    
        }
 
     | 
  
  
    | 
      367
     | 
    
      
 
     | 
  
  
    | 
      368
     | 
    
        /* Highlight HTML Source
 
     | 
  
  
    | 
      369
     | 
    
         * @param string $code HTML Source
 
     | 
  
  
    | 
      370
     | 
    
         * @return string Hightlighte HTML Source
 
     | 
  
  
    | 
      371
     | 
    
         * @access private
 
     | 
  
  
    | 
      372
     | 
    
         * @desc Highlight HTML Source
 
     | 
  
  
    | 
      373
     | 
    
         */
 
     | 
  
  
    | 
      374
     | 
    
        function highlight_html ( $code ) {
     | 
  
  
    | 
      375
     | 
    
          $code  =  htmlentities($code);
 
     | 
  
  
    | 
      376
     | 
    
          $code  =  preg_replace('/([a-zA-Z_]+)=/',  '<font color="#FF0000">$1=</font>',  $code);
     | 
  
  
    | 
      377
     | 
    
          $code  =  preg_replace('/(<[\/a-zA-Z0-9&;]+)/',  '<font color="#0000FF">$1</font>',  $code);
     | 
  
  
    | 
      378
     | 
    
          $code  =  str_replace('<!--',  '<font color="#008080"><!--',  $code);
     | 
  
  
    | 
      379
     | 
    
          $code  =  str_replace('-->',  '--></font>',  $code);
     | 
  
  
    | 
      380
     | 
    
          $code  =  preg_replace('/[\r\n]+/',  "\n",  $code);
     | 
  
  
    | 
      381
     | 
    
          return $code;
 
     | 
  
  
    | 
      382
     | 
    
        }
 
     | 
  
  
    | 
      383
     | 
    
      }
 
     | 
  
  
    | 
      384
     | 
    
      ?>
 
     |