[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * 4 * @package acp 5 * @version $Id$ 6 * @copyright (c) 2005 phpBB Group 7 * @license http://opensource.org/licenses/gpl-license.php GNU Public License 8 * 9 */ 10 11 /** 12 * @ignore 13 */ 14 if (!defined('IN_PHPBB')) 15 { 16 exit; 17 } 18 19 /** 20 * @package acp 21 */ 22 class acp_main 23 { 24 var $u_action; 25 26 function main($id, $mode) 27 { 28 global $config, $db, $user, $auth, $template; 29 global $phpbb_root_path, $phpbb_admin_path, $phpEx; 30 31 // Show restore permissions notice 32 if ($user->data['user_perm_from'] && $auth->acl_get('a_switchperm')) 33 { 34 $this->tpl_name = 'acp_main'; 35 $this->page_title = 'ACP_MAIN'; 36 37 $sql = 'SELECT user_id, username, user_colour 38 FROM ' . USERS_TABLE . ' 39 WHERE user_id = ' . $user->data['user_perm_from']; 40 $result = $db->sql_query($sql); 41 $user_row = $db->sql_fetchrow($result); 42 $db->sql_freeresult($result); 43 44 $perm_from = '<strong' . (($user_row['user_colour']) ? ' style="color: #' . $user_row['user_colour'] . '">' : '>'); 45 $perm_from .= ($user_row['user_id'] != ANONYMOUS) ? '<a href="' . append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&u=' . $user_row['user_id']) . '">' : ''; 46 $perm_from .= $user_row['username']; 47 $perm_from .= ($user_row['user_id'] != ANONYMOUS) ? '</a>' : ''; 48 $perm_from .= '</strong>'; 49 50 $template->assign_vars(array( 51 'S_RESTORE_PERMISSIONS' => true, 52 'U_RESTORE_PERMISSIONS' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=restore_perm'), 53 'PERM_FROM' => $perm_from, 54 'L_PERMISSIONS_TRANSFERRED_EXPLAIN' => sprintf($user->lang['PERMISSIONS_TRANSFERRED_EXPLAIN'], $perm_from, append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=restore_perm')), 55 )); 56 57 return; 58 } 59 60 $action = request_var('action', ''); 61 62 if ($action) 63 { 64 if ($action === 'admlogout') 65 { 66 $user->unset_admin(); 67 $redirect_url = append_sid("{$phpbb_root_path}index.$phpEx"); 68 meta_refresh(3, $redirect_url); 69 trigger_error($user->lang['ADM_LOGGED_OUT'] . '<br /><br />' . sprintf($user->lang['RETURN_INDEX'], '<a href="' . $redirect_url . '">', '</a>')); 70 } 71 72 if (!confirm_box(true)) 73 { 74 switch ($action) 75 { 76 case 'online': 77 $confirm = true; 78 $confirm_lang = 'RESET_ONLINE_CONFIRM'; 79 break; 80 case 'stats': 81 $confirm = true; 82 $confirm_lang = 'RESYNC_STATS_CONFIRM'; 83 break; 84 case 'user': 85 $confirm = true; 86 $confirm_lang = 'RESYNC_POSTCOUNTS_CONFIRM'; 87 break; 88 case 'date': 89 $confirm = true; 90 $confirm_lang = 'RESET_DATE_CONFIRM'; 91 break; 92 case 'db_track': 93 $confirm = true; 94 $confirm_lang = 'RESYNC_POST_MARKING_CONFIRM'; 95 break; 96 case 'purge_cache': 97 $confirm = true; 98 $confirm_lang = 'PURGE_CACHE_CONFIRM'; 99 break; 100 case 'purge_sessions': 101 $confirm = true; 102 $confirm_lang = 'PURGE_SESSIONS_CONFIRM'; 103 break; 104 105 default: 106 $confirm = true; 107 $confirm_lang = 'CONFIRM_OPERATION'; 108 } 109 110 if ($confirm) 111 { 112 confirm_box(false, $user->lang[$confirm_lang], build_hidden_fields(array( 113 'i' => $id, 114 'mode' => $mode, 115 'action' => $action, 116 ))); 117 } 118 } 119 else 120 { 121 switch ($action) 122 { 123 124 case 'online': 125 if (!$auth->acl_get('a_board')) 126 { 127 trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING); 128 } 129 130 set_config('record_online_users', 1, true); 131 set_config('record_online_date', time(), true); 132 add_log('admin', 'LOG_RESET_ONLINE'); 133 break; 134 135 case 'stats': 136 if (!$auth->acl_get('a_board')) 137 { 138 trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING); 139 } 140 141 $sql = 'SELECT COUNT(post_id) AS stat 142 FROM ' . POSTS_TABLE . ' 143 WHERE post_approved = 1'; 144 $result = $db->sql_query($sql); 145 set_config('num_posts', (int) $db->sql_fetchfield('stat'), true); 146 $db->sql_freeresult($result); 147 148 $sql = 'SELECT COUNT(topic_id) AS stat 149 FROM ' . TOPICS_TABLE . ' 150 WHERE topic_approved = 1'; 151 $result = $db->sql_query($sql); 152 set_config('num_topics', (int) $db->sql_fetchfield('stat'), true); 153 $db->sql_freeresult($result); 154 155 $sql = 'SELECT COUNT(user_id) AS stat 156 FROM ' . USERS_TABLE . ' 157 WHERE user_type IN (' . USER_NORMAL . ',' . USER_FOUNDER . ')'; 158 $result = $db->sql_query($sql); 159 set_config('num_users', (int) $db->sql_fetchfield('stat'), true); 160 $db->sql_freeresult($result); 161 162 $sql = 'SELECT COUNT(attach_id) as stat 163 FROM ' . ATTACHMENTS_TABLE . ' 164 WHERE is_orphan = 0'; 165 $result = $db->sql_query($sql); 166 set_config('num_files', (int) $db->sql_fetchfield('stat'), true); 167 $db->sql_freeresult($result); 168 169 $sql = 'SELECT SUM(filesize) as stat 170 FROM ' . ATTACHMENTS_TABLE . ' 171 WHERE is_orphan = 0'; 172 $result = $db->sql_query($sql); 173 set_config('upload_dir_size', (float) $db->sql_fetchfield('stat'), true); 174 $db->sql_freeresult($result); 175 176 if (!function_exists('update_last_username')) 177 { 178 include($phpbb_root_path . "includes/functions_user.$phpEx"); 179 } 180 update_last_username(); 181 182 add_log('admin', 'LOG_RESYNC_STATS'); 183 break; 184 185 case 'user': 186 if (!$auth->acl_get('a_board')) 187 { 188 trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING); 189 } 190 191 // Resync post counts 192 $start = $max_post_id = 0; 193 194 // Find the maximum post ID, we can only stop the cycle when we've reached it 195 $sql = 'SELECT MAX(forum_last_post_id) as max_post_id 196 FROM ' . FORUMS_TABLE; 197 $result = $db->sql_query($sql); 198 $max_post_id = (int) $db->sql_fetchfield('max_post_id'); 199 $db->sql_freeresult($result); 200 201 // No maximum post id? :o 202 if (!$max_post_id) 203 { 204 $sql = 'SELECT MAX(post_id) as max_post_id 205 FROM ' . POSTS_TABLE; 206 $result = $db->sql_query($sql); 207 $max_post_id = (int) $db->sql_fetchfield('max_post_id'); 208 $db->sql_freeresult($result); 209 } 210 211 // Still no maximum post id? Then we are finished 212 if (!$max_post_id) 213 { 214 add_log('admin', 'LOG_RESYNC_POSTCOUNTS'); 215 break; 216 } 217 218 $step = ($config['num_posts']) ? (max((int) ($config['num_posts'] / 5), 20000)) : 20000; 219 $db->sql_query('UPDATE ' . USERS_TABLE . ' SET user_posts = 0'); 220 221 while ($start < $max_post_id) 222 { 223 $sql = 'SELECT COUNT(post_id) AS num_posts, poster_id 224 FROM ' . POSTS_TABLE . ' 225 WHERE post_id BETWEEN ' . ($start + 1) . ' AND ' . ($start + $step) . ' 226 AND post_postcount = 1 AND post_approved = 1 227 GROUP BY poster_id'; 228 $result = $db->sql_query($sql); 229 230 if ($row = $db->sql_fetchrow($result)) 231 { 232 do 233 { 234 $sql = 'UPDATE ' . USERS_TABLE . " SET user_posts = user_posts + {$row['num_posts']} WHERE user_id = {$row['poster_id']}"; 235 $db->sql_query($sql); 236 } 237 while ($row = $db->sql_fetchrow($result)); 238 } 239 $db->sql_freeresult($result); 240 241 $start += $step; 242 } 243 244 add_log('admin', 'LOG_RESYNC_POSTCOUNTS'); 245 246 break; 247 248 case 'date': 249 if (!$auth->acl_get('a_board')) 250 { 251 trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING); 252 } 253 254 set_config('board_startdate', time() - 1); 255 add_log('admin', 'LOG_RESET_DATE'); 256 break; 257 258 case 'db_track': 259 switch ($db->sql_layer) 260 { 261 case 'sqlite': 262 case 'firebird': 263 $db->sql_query('DELETE FROM ' . TOPICS_POSTED_TABLE); 264 break; 265 266 default: 267 $db->sql_query('TRUNCATE TABLE ' . TOPICS_POSTED_TABLE); 268 break; 269 } 270 271 // This can get really nasty... therefore we only do the last six months 272 $get_from_time = time() - (6 * 4 * 7 * 24 * 60 * 60); 273 274 // Select forum ids, do not include categories 275 $sql = 'SELECT forum_id 276 FROM ' . FORUMS_TABLE . ' 277 WHERE forum_type <> ' . FORUM_CAT; 278 $result = $db->sql_query($sql); 279 280 $forum_ids = array(); 281 while ($row = $db->sql_fetchrow($result)) 282 { 283 $forum_ids[] = $row['forum_id']; 284 } 285 $db->sql_freeresult($result); 286 287 // Any global announcements? ;) 288 $forum_ids[] = 0; 289 290 // Now go through the forums and get us some topics... 291 foreach ($forum_ids as $forum_id) 292 { 293 $sql = 'SELECT p.poster_id, p.topic_id 294 FROM ' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . ' t 295 WHERE t.forum_id = ' . $forum_id . ' 296 AND t.topic_moved_id = 0 297 AND t.topic_last_post_time > ' . $get_from_time . ' 298 AND t.topic_id = p.topic_id 299 AND p.poster_id <> ' . ANONYMOUS . ' 300 GROUP BY p.poster_id, p.topic_id'; 301 $result = $db->sql_query($sql); 302 303 $posted = array(); 304 while ($row = $db->sql_fetchrow($result)) 305 { 306 $posted[$row['poster_id']][] = $row['topic_id']; 307 } 308 $db->sql_freeresult($result); 309 310 $sql_ary = array(); 311 foreach ($posted as $user_id => $topic_row) 312 { 313 foreach ($topic_row as $topic_id) 314 { 315 $sql_ary[] = array( 316 'user_id' => (int) $user_id, 317 'topic_id' => (int) $topic_id, 318 'topic_posted' => 1, 319 ); 320 } 321 } 322 unset($posted); 323 324 if (sizeof($sql_ary)) 325 { 326 $db->sql_multi_insert(TOPICS_POSTED_TABLE, $sql_ary); 327 } 328 } 329 330 add_log('admin', 'LOG_RESYNC_POST_MARKING'); 331 break; 332 333 case 'purge_cache': 334 if ((int) $user->data['user_type'] !== USER_FOUNDER) 335 { 336 trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING); 337 } 338 339 global $cache; 340 $cache->purge(); 341 342 // Clear permissions 343 $auth->acl_clear_prefetch(); 344 cache_moderators(); 345 346 add_log('admin', 'LOG_PURGE_CACHE'); 347 break; 348 349 case 'purge_sessions': 350 if ((int) $user->data['user_type'] !== USER_FOUNDER) 351 { 352 trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING); 353 } 354 355 $tables = array(CONFIRM_TABLE, SESSIONS_TABLE); 356 357 foreach ($tables as $table) 358 { 359 switch ($db->sql_layer) 360 { 361 case 'sqlite': 362 case 'firebird': 363 $db->sql_query("DELETE FROM $table"); 364 break; 365 366 default: 367 $db->sql_query("TRUNCATE TABLE $table"); 368 break; 369 } 370 } 371 372 // let's restore the admin session 373 $reinsert_ary = array( 374 'session_id' => (string) $user->session_id, 375 'session_page' => (string) substr($user->page['page'], 0, 199), 376 'session_forum_id' => $user->page['forum'], 377 'session_user_id' => (int) $user->data['user_id'], 378 'session_start' => (int) $user->data['session_start'], 379 'session_last_visit' => (int) $user->data['session_last_visit'], 380 'session_time' => (int) $user->time_now, 381 'session_browser' => (string) trim(substr($user->browser, 0, 149)), 382 'session_forwarded_for' => (string) $user->forwarded_for, 383 'session_ip' => (string) $user->ip, 384 'session_autologin' => (int) $user->data['session_autologin'], 385 'session_admin' => 1, 386 'session_viewonline' => (int) $user->data['session_viewonline'], 387 ); 388 389 $sql = 'INSERT INTO ' . SESSIONS_TABLE . ' ' . $db->sql_build_array('INSERT', $reinsert_ary); 390 $db->sql_query($sql); 391 392 add_log('admin', 'LOG_PURGE_SESSIONS'); 393 break; 394 } 395 } 396 } 397 398 // Version check 399 $user->add_lang('install'); 400 401 if ($auth->acl_get('a_server') && version_compare(PHP_VERSION, '5.3.3', '<')) 402 { 403 $template->assign_vars(array( 404 'S_PHP_VERSION_OLD' => true, 405 'L_PHP_VERSION_OLD' => sprintf($user->lang['PHP_VERSION_OLD'], '<a href="https://www.phpbb.com/community/viewtopic.php?f=14&t=2152375">', '</a>'), 406 )); 407 } 408 409 $latest_version_info = false; 410 if (($latest_version_info = obtain_latest_version_info(request_var('versioncheck_force', false))) === false) 411 { 412 $template->assign_var('S_VERSIONCHECK_FAIL', true); 413 } 414 else 415 { 416 $latest_version_info = explode("\n", $latest_version_info); 417 418 $template->assign_vars(array( 419 'S_VERSION_UP_TO_DATE' => phpbb_version_compare(trim($latest_version_info[0]), $config['version'], '<='), 420 )); 421 } 422 423 // Get forum statistics 424 $total_posts = $config['num_posts']; 425 $total_topics = $config['num_topics']; 426 $total_users = $config['num_users']; 427 $total_files = $config['num_files']; 428 429 $start_date = $user->format_date($config['board_startdate']); 430 431 $boarddays = (time() - $config['board_startdate']) / 86400; 432 433 $posts_per_day = sprintf('%.2f', $total_posts / $boarddays); 434 $topics_per_day = sprintf('%.2f', $total_topics / $boarddays); 435 $users_per_day = sprintf('%.2f', $total_users / $boarddays); 436 $files_per_day = sprintf('%.2f', $total_files / $boarddays); 437 438 $upload_dir_size = get_formatted_filesize($config['upload_dir_size']); 439 440 $avatar_dir_size = 0; 441 442 if ($avatar_dir = @opendir($phpbb_root_path . $config['avatar_path'])) 443 { 444 while (($file = readdir($avatar_dir)) !== false) 445 { 446 if ($file[0] != '.' && $file != 'CVS' && strpos($file, 'index.') === false) 447 { 448 $avatar_dir_size += filesize($phpbb_root_path . $config['avatar_path'] . '/' . $file); 449 } 450 } 451 closedir($avatar_dir); 452 453 $avatar_dir_size = get_formatted_filesize($avatar_dir_size); 454 } 455 else 456 { 457 // Couldn't open Avatar dir. 458 $avatar_dir_size = $user->lang['NOT_AVAILABLE']; 459 } 460 461 if ($posts_per_day > $total_posts) 462 { 463 $posts_per_day = $total_posts; 464 } 465 466 if ($topics_per_day > $total_topics) 467 { 468 $topics_per_day = $total_topics; 469 } 470 471 if ($users_per_day > $total_users) 472 { 473 $users_per_day = $total_users; 474 } 475 476 if ($files_per_day > $total_files) 477 { 478 $files_per_day = $total_files; 479 } 480 481 if ($config['allow_attachments'] || $config['allow_pm_attach']) 482 { 483 $sql = 'SELECT COUNT(attach_id) AS total_orphan 484 FROM ' . ATTACHMENTS_TABLE . ' 485 WHERE is_orphan = 1 486 AND filetime < ' . (time() - 3*60*60); 487 $result = $db->sql_query($sql); 488 $total_orphan = (int) $db->sql_fetchfield('total_orphan'); 489 $db->sql_freeresult($result); 490 } 491 else 492 { 493 $total_orphan = false; 494 } 495 496 $dbsize = get_database_size(); 497 498 $template->assign_vars(array( 499 'TOTAL_POSTS' => $total_posts, 500 'POSTS_PER_DAY' => $posts_per_day, 501 'TOTAL_TOPICS' => $total_topics, 502 'TOPICS_PER_DAY' => $topics_per_day, 503 'TOTAL_USERS' => $total_users, 504 'USERS_PER_DAY' => $users_per_day, 505 'TOTAL_FILES' => $total_files, 506 'FILES_PER_DAY' => $files_per_day, 507 'START_DATE' => $start_date, 508 'AVATAR_DIR_SIZE' => $avatar_dir_size, 509 'DBSIZE' => $dbsize, 510 'UPLOAD_DIR_SIZE' => $upload_dir_size, 511 'TOTAL_ORPHAN' => $total_orphan, 512 'S_TOTAL_ORPHAN' => ($total_orphan === false) ? false : true, 513 'GZIP_COMPRESSION' => ($config['gzip_compress'] && @extension_loaded('zlib')) ? $user->lang['ON'] : $user->lang['OFF'], 514 'DATABASE_INFO' => $db->sql_server_info(), 515 'BOARD_VERSION' => $config['version'], 516 517 'U_ACTION' => $this->u_action, 518 'U_ADMIN_LOG' => append_sid("{$phpbb_admin_path}index.$phpEx", 'i=logs&mode=admin'), 519 'U_INACTIVE_USERS' => append_sid("{$phpbb_admin_path}index.$phpEx", 'i=inactive&mode=list'), 520 'U_VERSIONCHECK' => append_sid("{$phpbb_admin_path}index.$phpEx", 'i=update&mode=version_check'), 521 'U_VERSIONCHECK_FORCE' => append_sid("{$phpbb_admin_path}index.$phpEx", 'versioncheck_force=1'), 522 523 'S_ACTION_OPTIONS' => ($auth->acl_get('a_board')) ? true : false, 524 'S_FOUNDER' => ($user->data['user_type'] == USER_FOUNDER) ? true : false, 525 ) 526 ); 527 528 $log_data = array(); 529 $log_count = false; 530 531 if ($auth->acl_get('a_viewlogs')) 532 { 533 view_log('admin', $log_data, $log_count, 5); 534 535 foreach ($log_data as $row) 536 { 537 $template->assign_block_vars('log', array( 538 'USERNAME' => $row['username_full'], 539 'IP' => $row['ip'], 540 'DATE' => $user->format_date($row['time']), 541 'ACTION' => $row['action']) 542 ); 543 } 544 } 545 546 if ($auth->acl_get('a_user')) 547 { 548 $user->add_lang('memberlist'); 549 550 $inactive = array(); 551 $inactive_count = 0; 552 553 view_inactive_users($inactive, $inactive_count, 10); 554 555 foreach ($inactive as $row) 556 { 557 $template->assign_block_vars('inactive', array( 558 'INACTIVE_DATE' => $user->format_date($row['user_inactive_time']), 559 'REMINDED_DATE' => $user->format_date($row['user_reminded_time']), 560 'JOINED' => $user->format_date($row['user_regdate']), 561 'LAST_VISIT' => (!$row['user_lastvisit']) ? ' - ' : $user->format_date($row['user_lastvisit']), 562 563 'REASON' => $row['inactive_reason'], 564 'USER_ID' => $row['user_id'], 565 'POSTS' => ($row['user_posts']) ? $row['user_posts'] : 0, 566 'REMINDED' => $row['user_reminded'], 567 568 'REMINDED_EXPLAIN' => $user->lang('USER_LAST_REMINDED', (int) $row['user_reminded'], $user->format_date($row['user_reminded_time'])), 569 570 'USERNAME_FULL' => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour'], false, append_sid("{$phpbb_admin_path}index.$phpEx", 'i=users&mode=overview')), 571 'USERNAME' => get_username_string('username', $row['user_id'], $row['username'], $row['user_colour']), 572 'USER_COLOR' => get_username_string('colour', $row['user_id'], $row['username'], $row['user_colour']), 573 574 'U_USER_ADMIN' => append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&mode=overview&u={$row['user_id']}"), 575 'U_SEARCH_USER' => ($auth->acl_get('u_search')) ? append_sid("{$phpbb_root_path}search.$phpEx", "author_id={$row['user_id']}&sr=posts") : '', 576 )); 577 } 578 579 $option_ary = array('activate' => 'ACTIVATE', 'delete' => 'DELETE'); 580 if ($config['email_enable']) 581 { 582 $option_ary += array('remind' => 'REMIND'); 583 } 584 585 $template->assign_vars(array( 586 'S_INACTIVE_USERS' => true, 587 'S_INACTIVE_OPTIONS' => build_select($option_ary)) 588 ); 589 } 590 591 // Warn if install is still present 592 if (file_exists($phpbb_root_path . 'install') && !is_file($phpbb_root_path . 'install')) 593 { 594 $template->assign_var('S_REMOVE_INSTALL', true); 595 } 596 597 if (!defined('PHPBB_DISABLE_CONFIG_CHECK') && file_exists($phpbb_root_path . 'config.' . $phpEx) && phpbb_is_writable($phpbb_root_path . 'config.' . $phpEx)) 598 { 599 // World-Writable? (000x) 600 $template->assign_var('S_WRITABLE_CONFIG', (bool) (@fileperms($phpbb_root_path . 'config.' . $phpEx) & 0x0002)); 601 } 602 603 if (extension_loaded('mbstring')) 604 { 605 $template->assign_vars(array( 606 'S_MBSTRING_LOADED' => true, 607 'S_MBSTRING_FUNC_OVERLOAD_FAIL' => (intval(@ini_get('mbstring.func_overload')) & (MB_OVERLOAD_MAIL | MB_OVERLOAD_STRING)), 608 'S_MBSTRING_ENCODING_TRANSLATION_FAIL' => (@ini_get('mbstring.encoding_translation') != 0), 609 'S_MBSTRING_HTTP_INPUT_FAIL' => (@ini_get('mbstring.http_input') != 'pass'), 610 'S_MBSTRING_HTTP_OUTPUT_FAIL' => (@ini_get('mbstring.http_output') != 'pass'), 611 )); 612 } 613 614 // Fill dbms version if not yet filled 615 if (empty($config['dbms_version'])) 616 { 617 set_config('dbms_version', $db->sql_server_info(true)); 618 } 619 620 $this->tpl_name = 'acp_main'; 621 $this->page_title = 'ACP_MAIN'; 622 } 623 } 624 625 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Oct 2 15:03:47 2013 | Cross-referenced by PHPXref 0.7.1 |