| Textpattern | PHP Cross Reference | Content Management Systems |
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
Body
title
Description
Body
title
Description
Body
title
Body
title