PageRenderTime 28ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/admin/index.php

https://github.com/karpenoktem/punbb
PHP | 244 lines | 185 code | 36 blank | 23 comment | 42 complexity | bec3ddd274fbcab4b23b8a3125cb3ca2 MD5 | raw file
  1. <?php
  2. /**
  3. * Administration panel index page.
  4. *
  5. * Gives an overview of some statistics to administrators and moderators.
  6. *
  7. * @copyright (C) 2008-2012 PunBB, partially based on code (C) 2008-2009 FluxBB.org
  8. * @license http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
  9. * @package PunBB
  10. */
  11. if (!defined('FORUM_ROOT'))
  12. define('FORUM_ROOT', '../');
  13. require FORUM_ROOT.'include/common.php';
  14. require FORUM_ROOT.'include/common_admin.php';
  15. ($hook = get_hook('ain_start')) ? eval($hook) : null;
  16. if (!$forum_user['is_admmod'])
  17. message($lang_common['No permission']);
  18. // Load the admin.php language files
  19. require FORUM_ROOT.'lang/'.$forum_user['language'].'/admin_common.php';
  20. require FORUM_ROOT.'lang/'.$forum_user['language'].'/admin_index.php';
  21. // Show phpinfo() output
  22. if (isset($_GET['action']) && $_GET['action'] == 'phpinfo' && $forum_user['g_id'] == FORUM_ADMIN)
  23. {
  24. ($hook = get_hook('ain_phpinfo_selected')) ? eval($hook) : null;
  25. // Is phpinfo() a disabled function?
  26. if (strpos(strtolower((string)@ini_get('disable_functions')), 'phpinfo') !== false)
  27. message($lang_admin_index['phpinfo disabled']);
  28. phpinfo();
  29. exit;
  30. }
  31. // Generate check for updates text block
  32. if ($forum_user['g_id'] == FORUM_ADMIN)
  33. {
  34. if ($forum_config['o_check_for_updates'] == '1')
  35. $punbb_updates = $lang_admin_index['Check for updates enabled'];
  36. else
  37. {
  38. // Get a list of installed hotfix extensions
  39. $query = array(
  40. 'SELECT' => 'e.id',
  41. 'FROM' => 'extensions AS e',
  42. 'WHERE' => 'e.id LIKE \'hotfix_%\''
  43. );
  44. ($hook = get_hook('ain_update_check_qr_get_hotfixes')) ? eval($hook) : null;
  45. $result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
  46. $hotfixes = array();
  47. while ($row = $forum_db->fetch_assoc($result))
  48. {
  49. $hotfixes[] = urlencode($row['id']);
  50. }
  51. $punbb_updates = '<a href="http://punbb.informer.com/update/?version='.urlencode($forum_config['o_cur_version']).'&amp;hotfixes='.implode(',', $hotfixes).'">'.$lang_admin_index['Check for updates manual'].'</a>';
  52. }
  53. }
  54. // Get the server load averages (if possible)
  55. if (function_exists('sys_getloadavg') && is_array($load_averages = sys_getloadavg()))
  56. {
  57. array_walk($load_averages, create_function('&$v', '$v = forum_number_format(round($v, 2), 2);'));
  58. $server_load = $load_averages[0].' '.$load_averages[1].' '.$load_averages[2];
  59. }
  60. else if (@/**/is_readable('/proc/loadavg'))
  61. {
  62. // We use @ just in case
  63. $fh = @/**/fopen('/proc/loadavg', 'r');
  64. $load_averages = @fread($fh, 64);
  65. @/**/fclose($fh);
  66. $load_averages = empty($load_averages) ? array() : explode(' ', $load_averages);
  67. $server_load = isset($load_averages[2]) ? forum_number_format(round($load_averages[0], 2), 2).' '.forum_number_format(round($load_averages[1], 2), 2).' '.forum_number_format(round($load_averages[2], 2), 2) : 'Not available';
  68. }
  69. else if (!in_array(PHP_OS, array('WINNT', 'WIN32')) && preg_match('/averages?: ([0-9\.]+),[\s]+([0-9\.]+),[\s]+([0-9\.]+)/i', @exec('uptime'), $load_averages))
  70. $server_load = forum_number_format(round($load_averages[1], 2), 2).' '.forum_number_format(round($load_averages[2], 2), 2).' '.forum_number_format(round($load_averages[3], 2), 2);
  71. else
  72. $server_load = $lang_admin_index['Not available'];
  73. // Get number of current visitors
  74. $query = array(
  75. 'SELECT' => 'COUNT(o.user_id)',
  76. 'FROM' => 'online AS o',
  77. 'WHERE' => 'o.idle=0'
  78. );
  79. ($hook = get_hook('ain_qr_get_users_online')) ? eval($hook) : null;
  80. $result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
  81. $num_online = $forum_db->result($result);
  82. // Collect some additional info about MySQL
  83. if (in_array($db_type, array('mysql', 'mysqli', 'mysql_innodb', 'mysqli_innodb')))
  84. {
  85. // Calculate total db size/row count
  86. $result = $forum_db->query('SHOW TABLE STATUS FROM `'.$db_name.'` LIKE \''.$db_prefix.'%\'') or error(__FILE__, __LINE__);
  87. $total_records = $total_size = 0;
  88. while ($status = $forum_db->fetch_assoc($result))
  89. {
  90. $total_records += $status['Rows'];
  91. $total_size += $status['Data_length'] + $status['Index_length'];
  92. }
  93. $total_size = $total_size / 1024;
  94. if ($total_size > 1024)
  95. $total_size = forum_number_format($total_size / 1024, 2).' MB';
  96. else
  97. $total_size = forum_number_format($total_size, 2).' KB';
  98. }
  99. // Check for the existance of various PHP opcode caches/optimizers
  100. if (function_exists('mmcache'))
  101. $php_accelerator = '<a href="http://turck-mmcache.sourceforge.net/">Turck MMCache</a>';
  102. else if (isset($_PHPA))
  103. $php_accelerator = '<a href="http://www.php-accelerator.co.uk/">ionCube PHP Accelerator</a>';
  104. else if (ini_get('apc.enabled'))
  105. $php_accelerator ='<a href="http://www.php.net/apc/">Alternative PHP Cache (APC)</a>';
  106. else if (ini_get('zend_optimizer.optimization_level'))
  107. $php_accelerator = '<a href="http://www.zend.com/products/zend_optimizer/">Zend Optimizer</a>';
  108. else if (ini_get('eaccelerator.enable'))
  109. $php_accelerator = '<a href="http://eaccelerator.net/">eAccelerator</a>';
  110. else if (ini_get('xcache.cacher'))
  111. $php_accelerator = '<a href="http://xcache.lighttpd.net/">XCache</a>';
  112. else
  113. $php_accelerator = $lang_admin_index['Not applicable'];
  114. // Setup breadcrumbs
  115. $forum_page['crumbs'] = array(
  116. array($forum_config['o_board_title'], forum_link($forum_url['index'])),
  117. array($lang_admin_common['Forum administration'], forum_link($forum_url['admin_index']))
  118. );
  119. if ($forum_user['g_id'] == FORUM_ADMIN)
  120. $forum_page['crumbs'][] = array($lang_admin_common['Start'], forum_link($forum_url['admin_index']));
  121. $forum_page['crumbs'][] = array($lang_admin_common['Information'], forum_link($forum_url['admin_index']));
  122. ($hook = get_hook('ain_pre_header_load')) ? eval($hook) : null;
  123. define('FORUM_PAGE_SECTION', 'start');
  124. define('FORUM_PAGE', 'admin-information');
  125. require FORUM_ROOT.'header.php';
  126. $forum_page['item_count'] = 0;
  127. // START SUBST - <!-- forum_main -->
  128. ob_start();
  129. ($hook = get_hook('ain_main_output_start')) ? eval($hook) : null;
  130. ?>
  131. <div class="main-subhead">
  132. <h2 class="hn"><span><?php echo $lang_admin_index['Information head'] ?></span></h2>
  133. </div>
  134. <div class="main-content main-frm">
  135. <?php if (!empty($alert_items)): ?>
  136. <div id="admin-alerts" class="ct-set warn-set">
  137. <div class="ct-box warn-box">
  138. <h3 class="ct-legend hn warn"><span><?php echo $lang_admin_index['Alerts'] ?></span></h3>
  139. <?php echo implode(' ', $alert_items)."\n" ?>
  140. </div>
  141. </div>
  142. <?php endif; ?>
  143. <div class="ct-group">
  144. <?php ($hook = get_hook('ain_pre_version')) ? eval($hook) : null; ?>
  145. <div class="ct-set group-item<?php echo ++$forum_page['item_count'] ?>">
  146. <div class="ct-box">
  147. <h3 class="ct-legend hn"><span><?php echo $lang_admin_index['PunBB version'] ?></span></h3>
  148. <ul class="data-list">
  149. <li><span>PunBB <?php echo $forum_config['o_cur_version'] ?></span></li>
  150. <li><span><?php echo $lang_admin_index['Copyright message'] ?></span></li>
  151. <?php if (isset($punbb_updates)): ?>
  152. <li><span><?php echo $punbb_updates ?></span></li>
  153. <?php endif; ?>
  154. </ul>
  155. </div>
  156. </div>
  157. <?php ($hook = get_hook('ain_pre_community')) ? eval($hook) : null; ?>
  158. <div class="ct-set group-item<?php echo ++$forum_page['item_count'] ?>">
  159. <div class="ct-box">
  160. <h3 class="ct-legend hn"><span><?php echo $lang_admin_index['PunBB community'] ?></span></h3>
  161. <ul class="data-list">
  162. <li><span><?php echo $lang_admin_index['Forums'] ?>: <a href="http://punbb.informer.com/forums/">Forums</a></span></li>
  163. <li><span><?php echo $lang_admin_index['Twitter'] ?>: <a href="https://twitter.com/punbb_forum">@punbb_forum</a></span></li>
  164. <li><span><?php echo $lang_admin_index['Development'] ?>: <a href="https://github.com/punbb/punbb">https://github.com/punbb</a></span></li>
  165. </ul>
  166. </div>
  167. </div>
  168. <?php ($hook = get_hook('ain_pre_server_load')) ? eval($hook) : null; ?>
  169. <div class="ct-set group-item<?php echo ++$forum_page['item_count'] ?>">
  170. <div class="ct-box">
  171. <h3 class="ct-legend hn"><span><?php echo $lang_admin_index['Server load'] ?></span></h3>
  172. <p><span><?php echo $server_load ?> (<?php echo $num_online.' '.$lang_admin_index['users online']?>)</span></p>
  173. </div>
  174. </div>
  175. <?php ($hook = get_hook('ain_pre_environment')) ? eval($hook) : null; if ($forum_user['g_id'] == FORUM_ADMIN): ?>
  176. <div class="ct-set group-item<?php echo ++$forum_page['item_count'] ?>">
  177. <div class="ct-box">
  178. <h3 class="ct-legend hn"><span><?php echo $lang_admin_index['Environment'] ?></span></h3>
  179. <ul class="data-list">
  180. <li><span><?php echo $lang_admin_index['Operating system'] ?>: <?php echo PHP_OS ?></span></li>
  181. <li><span>PHP: <?php echo PHP_VERSION ?> - <a href="<?php echo forum_link($forum_url['admin_index']) ?>?action=phpinfo"><?php echo $lang_admin_index['Show info'] ?></a></span></li>
  182. <li><span><?php echo $lang_admin_index['Accelerator'] ?>: <?php echo $php_accelerator ?></span></li>
  183. </ul>
  184. </div>
  185. </div>
  186. <?php ($hook = get_hook('ain_pre_database')) ? eval($hook) : null; ?>
  187. <div class="ct-set group-item<?php echo ++$forum_page['item_count'] ?>">
  188. <div class="ct-box">
  189. <h3 class="ct-legend hn"><span><?php echo $lang_admin_index['Database'] ?></span></h3>
  190. <ul class="data-list">
  191. <li><span><?php echo implode(' ', $forum_db->get_version()) ?></span></li>
  192. <?php if (isset($total_records) && isset($total_size)): ?>
  193. <li><span><?php echo $lang_admin_index['Rows'] ?>: <?php echo forum_number_format($total_records) ?></span></li>
  194. <li><span><?php echo $lang_admin_index['Size'] ?>: <?php echo $total_size ?></span></li>
  195. <?php endif; ?>
  196. </ul>
  197. </div>
  198. </div>
  199. <?php endif; ($hook = get_hook('ain_items_end')) ? eval($hook) : null; ?>
  200. </div>
  201. </div>
  202. <?php
  203. ($hook = get_hook('ain_end')) ? eval($hook) : null;
  204. $tpl_temp = forum_trim(ob_get_contents());
  205. $tpl_main = str_replace('<!-- forum_main -->', $tpl_temp, $tpl_main);
  206. ob_end_clean();
  207. // END SUBST - <!-- forum_main -->
  208. require FORUM_ROOT.'footer.php';