Textpattern PHP Cross Reference Content Management Systems

Source: /textpattern/include/txp_log.php - 300 lines - 7977 bytes - Summary - Text - Print

   1  <?php
   2  
   3  /*
   4      This is Textpattern
   5  
   6      Copyright 2005 by Dean Allen
   7      www.textpattern.com
   8      All rights reserved
   9  
  10      Use of this software indicates acceptance of
  11      the Textpattern license agreement
  12  
  13  $HeadURL: https://textpattern.googlecode.com/svn/releases/4.5.4/source/textpattern/include/txp_log.php $
  14  $LastChangedRevision: 4062 $
  15  
  16  */
  17      if (!defined('txpinterface')) die('txpinterface is undefined.');
  18  
  19      if ($event == 'log')
  20      {
  21          require_privs('log');
  22  
  23          $available_steps = array(
  24              'log_list'          => false,
  25              'log_change_pageby' => true,
  26              'log_multi_edit'    => true
  27          );
  28  
  29          if ($step && bouncer($step, $available_steps)) {
  30              $step();
  31          } else {
  32              log_list();
  33          }
  34      }
  35  
  36  
  37  //-------------------------------------------------------------
  38  
  39  	function log_list($message = '')
  40      {
  41          global $event, $log_list_pageby, $expire_logs_after;
  42  
  43          pagetop(gTxt('tab_logs'), $message);
  44  
  45          extract(gpsa(array('page', 'sort', 'dir', 'crit', 'search_method')));
  46          if ($sort === '') $sort = get_pref('log_sort_column', 'time');
  47          if ($dir === '') $dir = get_pref('log_sort_dir', 'desc');
  48          $dir = ($dir == 'asc') ? 'asc' : 'desc';
  49  
  50          $expire_logs_after = assert_int($expire_logs_after);
  51  
  52          safe_delete('txp_log', "time < date_sub(now(), interval $expire_logs_after day)");
  53  
  54          switch ($sort)
  55          {
  56              case 'ip':
  57                  $sort_sql = 'ip '.$dir;
  58              break;
  59  
  60              case 'host':
  61                  $sort_sql = 'host '.$dir;
  62              break;
  63  
  64              case 'page':
  65                  $sort_sql = 'page '.$dir;
  66              break;
  67  
  68              case 'refer':
  69                  $sort_sql = 'refer '.$dir;
  70              break;
  71  
  72              case 'method':
  73                  $sort_sql = 'method '.$dir;
  74              break;
  75  
  76              case 'status':
  77                  $sort_sql = 'status '.$dir;
  78              break;
  79  
  80              default:
  81                  $sort = 'time';
  82                  $sort_sql = 'time '.$dir;
  83              break;
  84          }
  85  
  86          set_pref('log_sort_column', $sort, 'log', 2, '', 0, PREF_PRIVATE);
  87          set_pref('log_sort_dir', $dir, 'log', 2, '', 0, PREF_PRIVATE);
  88  
  89          $switch_dir = ($dir == 'desc') ? 'asc' : 'desc';
  90  
  91          $criteria = 1;
  92  
  93          if ($search_method and $crit != '')
  94          {
  95              $verbatim = preg_match('/^"(.*)"$/', $crit, $m);
  96              $crit_escaped = doSlash($verbatim ? $m[1] : str_replace(array('\\','%','_','\''), array('\\\\','\\%','\\_', '\\\''), $crit));
  97              $critsql = $verbatim ?
  98                  array(
  99                      'ip'     => "ip = '$crit_escaped'",
 100                      'host'   => "host = '$crit_escaped'",
 101                      'page'   => "page = '$crit_escaped'",
 102                      'refer'  => "refer = '$crit_escaped'",
 103                      'method' => "method = '$crit_escaped'",
 104                      'status' => "status = '$crit_escaped'"
 105                  ) : array(
 106                      'ip'     => "ip like '%$crit_escaped%'",
 107                      'host'   => "host like '%$crit_escaped%'",
 108                      'page'   => "page like '%$crit_escaped%'",
 109                      'refer'  => "refer like '%$crit_escaped%'",
 110                      'method' => "method like '%$crit_escaped%'",
 111                      'status' => "status like '%$crit_escaped%'"
 112                  );
 113  
 114              if (array_key_exists($search_method, $critsql))
 115              {
 116                  $criteria = $critsql[$search_method];
 117                  $limit = 500;
 118              }
 119  
 120              else
 121              {
 122                  $search_method = '';
 123                  $crit = '';
 124              }
 125          }
 126  
 127          else
 128          {
 129              $search_method = '';
 130              $crit = '';
 131          }
 132  
 133          $criteria .= callback_event('admin_criteria', 'log_list', 0, $criteria);
 134  
 135          $total = safe_count('txp_log', "$criteria");
 136  
 137          echo '<h1 class="txp-heading">'.gTxt('tab_logs').'</h1>';
 138          echo '<div id="'.$event.'_control" class="txp-control-panel">';
 139  
 140          if ($total < 1)
 141          {
 142              if ($criteria != 1)
 143              {
 144                  echo n.log_search_form($crit, $search_method).
 145                      n.graf(gTxt('no_results_found'), ' class="indicator"').'</div>';
 146              }
 147  
 148              else
 149              {
 150                  echo graf(gTxt('no_refers_recorded'), ' class="indicator"').'</div>';
 151              }
 152  
 153              return;
 154          }
 155  
 156          $limit = max($log_list_pageby, 15);
 157  
 158          list($page, $offset, $numPages) = pager($total, $limit, $page);
 159  
 160          echo n.log_search_form($crit, $search_method).'</div>';
 161  
 162          $rs = safe_rows_start('*, unix_timestamp(time) as uTime', 'txp_log',
 163              "$criteria order by $sort_sql limit $offset, $limit");
 164  
 165          if ($rs)
 166          {
 167              echo n.'<div id="'.$event.'_container" class="txp-container">';
 168              echo n.n.'<form action="index.php" id="log_form" class="multi_edit_form" method="post" name="longform">'.
 169  
 170                  n.'<div class="txp-listtables">'.
 171                  n.startTable('', '', 'txp-list').
 172                  n.'<thead>'.
 173                  n.tr(
 174                      n.hCell(fInput('checkbox', 'select_all', 0, '', '', '', '', '', 'select_all'), '', ' title="'.gTxt('toggle_all_selected').'" class="multi-edit"').
 175                      n.column_head('time', 'time', 'log', true, $switch_dir, $crit, $search_method, (('time' == $sort) ? "$dir " : '').'date time').
 176                      n.column_head('IP', 'ip', 'log', true, $switch_dir, $crit, $search_method, (('ip' == $sort) ? "$dir " : '').'log_detail ip').
 177                      n.column_head('host', 'host', 'log', true, $switch_dir, $crit, $search_method, (('host' == $sort) ? "$dir " : '').'host').
 178                      n.column_head('page', 'page', 'log', true, $switch_dir, $crit, $search_method, (('page' == $sort) ? "$dir " : '').'page').
 179                      n.column_head('referrer', 'refer', 'log', true, $switch_dir, $crit, $search_method, (('refer' == $sort) ? "$dir " : '').'refer').
 180                      n.column_head('method', 'method', 'log', true, $switch_dir, $crit, $search_method, (('method' == $sort) ? "$dir " : '').'log_detail method').
 181                      n.column_head('status', 'status', 'log', true, $switch_dir, $crit, $search_method, (('status' == $sort) ? "$dir " : '').'log_detail status')
 182              ).
 183              n.'</thead>';
 184  
 185              echo '<tbody>';
 186  
 187              while ($a = nextRow($rs))
 188              {
 189                  extract($a, EXTR_PREFIX_ALL, 'log');
 190  
 191                  if ($log_refer)
 192                  {
 193                      $log_refer = 'http://'.$log_refer;
 194  
 195                      $log_refer = '<a href="'.txpspecialchars($log_refer).'" target="_blank">'.txpspecialchars(soft_wrap($log_refer, 30)).'</a>';
 196                  }
 197  
 198                  if ($log_page)
 199                  {
 200                      $log_anchor = preg_replace('/\/$/','',$log_page);
 201                      $log_anchor = soft_wrap(substr($log_anchor,1), 30);
 202  
 203                      $log_page = '<a href="'.txpspecialchars($log_page).'" target="_blank">'.txpspecialchars($log_anchor).'</a>';
 204  
 205                      if ($log_method == 'POST')
 206                      {
 207                          $log_page = '<strong>'.$log_page.'</strong>';
 208                      }
 209                  }
 210  
 211                  echo tr(
 212                      n.td(
 213                          fInput('checkbox', 'selected[]', $log_id)
 214                      , '', 'multi-edit').
 215  
 216                      td(
 217                          gTime($log_uTime)
 218                      , '', 'date time').
 219  
 220                      td(txpspecialchars($log_ip), '', 'log_detail ip').
 221  
 222                      td(txpspecialchars(soft_wrap($log_host, 30)), '', 'host').
 223  
 224                      td($log_page, '', 'page').
 225                      td($log_refer, '', 'refer').
 226                      td(txpspecialchars($log_method), '', 'log_detail method').
 227                      td($log_status, '', 'log_detail status')
 228                  );
 229              }
 230  
 231              echo '</tbody>',
 232                  n, endTable(),
 233                  n, '</div>',
 234                  n, log_multiedit_form($page, $sort, $dir, $crit, $search_method),
 235                  n, tInput(),
 236                  n, '</form>',
 237                  n, graf(
 238                      toggle_box('log_detail'),
 239                      ' class="detail-toggle"'
 240                  ),
 241                  n, '<div id="'.$event.'_navigation" class="txp-navigation">',
 242                  n, nav_form('log', $page, $numPages, $sort, $dir, $crit, $search_method, $total, $limit),
 243                  n, pageby_form('log', $log_list_pageby),
 244                  n, '</div>',
 245                  n, '</div>';
 246          }
 247      }
 248  
 249  //-------------------------------------------------------------
 250  
 251  	function log_search_form($crit, $method)
 252      {
 253          $methods = array(
 254              'ip'     => gTxt('IP'),
 255              'host'   => gTxt('host'),
 256              'page'   => gTxt('page'),
 257              'refer'  => gTxt('referrer'),
 258              'method' => gTxt('method'),
 259              'status' => gTxt('status')
 260          );
 261  
 262          return search_form('log', 'log_list', $crit, $methods, $method, 'page');
 263      }
 264  
 265  //-------------------------------------------------------------
 266  
 267  	function log_change_pageby()
 268      {
 269          event_change_pageby('log');
 270          log_list();
 271      }
 272  
 273  // -------------------------------------------------------------
 274  
 275  	function log_multiedit_form($page, $sort, $dir, $crit, $search_method)
 276      {
 277          $methods = array(
 278              'delete' => gTxt('delete')
 279          );
 280  
 281          return multi_edit($methods, 'log', 'log_multi_edit', $page, $sort, $dir, $crit, $search_method);
 282      }
 283  
 284  // -------------------------------------------------------------
 285  
 286  	function log_multi_edit()
 287      {
 288          $deleted = event_multi_edit('txp_log', 'id');
 289  
 290          if ($deleted)
 291          {
 292              $message = gTxt('logs_deleted', array('{list}' => $deleted));
 293  
 294              return log_list($message);
 295          }
 296  
 297          return log_list();
 298      }
 299  
 300  ?>

title

Description

title

Description

title

Description

title

title

Body