SystemStatus.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php if ( ! defined( 'ABSPATH' ) ) exit;
  2. final class NF_Admin_Menus_SystemStatus extends NF_Abstracts_Submenu
  3. {
  4. public $parent_slug = 'ninja-forms';
  5. public $menu_slug = 'nf-system-status';
  6. public $priority = 12;
  7. public function __construct()
  8. {
  9. parent::__construct();
  10. }
  11. public function get_page_title()
  12. {
  13. return __( 'Get Help', 'ninja-forms' );
  14. }
  15. public function get_capability()
  16. {
  17. return apply_filters( 'ninja_forms_admin_status_capabilities', $this->capability );
  18. }
  19. public function display()
  20. {
  21. /** @global wpdb $wpdb */
  22. global $wpdb;
  23. wp_enqueue_style( 'nf-admin-system-status', Ninja_Forms::$url . 'assets/css/admin-system-status.css' );
  24. wp_enqueue_script( 'nf-admin-system-status-script', Ninja_Forms::$url . 'assets/js/admin-system-status.js', array( 'jquery' ) );
  25. wp_enqueue_script( 'jBox', Ninja_Forms::$url . 'assets/js/lib/jBox.min.js', array( 'jquery' ) );
  26. wp_enqueue_style( 'jBox', Ninja_Forms::$url . 'assets/css/jBox.css' );
  27. wp_enqueue_style( 'nf-font-awesome', Ninja_Forms::$url . 'assets/css/font-awesome.min.css' );
  28. //PHP locale
  29. $locale = localeconv();
  30. if ( is_multisite() ) {
  31. $multisite = __( 'Yes', 'ninja-forms' );
  32. } else {
  33. $multisite = __( 'No', 'ninja-forms' );
  34. }
  35. //TODO: Possible refactor
  36. foreach( $locale as $key => $val ){
  37. if( is_string( $val ) ){
  38. $data = $key . ': ' . $val . '</br>';
  39. }
  40. }
  41. //TODO: Ask if this check is need
  42. //if ( function_exists( 'phpversion' ) ) echo esc_html( phpversion() );
  43. //WP_DEBUG
  44. if ( defined('WP_DEBUG') && WP_DEBUG ){
  45. $debug = __( 'Yes', 'ninja-forms' );
  46. } else {
  47. $debug = __( 'No', 'ninja-forms' );
  48. }
  49. //WPLANG
  50. if ( defined( 'WPLANG' ) && WPLANG ) {
  51. $lang = WPLANG;
  52. } else {
  53. $lang = __( 'Default', 'ninja-forms' );
  54. }
  55. //TODO: Ask if this long list of ini_get checks are need?
  56. // if( function_exists( 'ini_get' ) ){
  57. // $get_ini = size_format( ini_get('post_max_size') );
  58. // }
  59. //SUHOSIN
  60. if ( extension_loaded( 'suhosin' ) ) {
  61. $suhosin = __( 'Yes', 'ninja-forms' );
  62. } else {
  63. $suhosin = __( 'No', 'ninja-forms' );
  64. }
  65. //max_input_nesting_level check for 5.2.2
  66. if ( version_compare( PHP_VERSION, '5.2.2', '>' ) ) {
  67. $max_input_nesting_level = ini_get( 'max_input_nesting_level' );
  68. } else {
  69. $max_input_nesting_level = __( 'Unknown', 'ninja-forms' );
  70. }
  71. //max_input_vars check for 5.3.8
  72. if ( version_compare( PHP_VERSION, '5.3.8', '>' ) ) {
  73. $max_input_vars = ini_get( 'max_input_vars' );
  74. } else {
  75. $max_input_vars = __( 'Unknown', 'ninja-forms' );
  76. }
  77. //Time Zone Check
  78. //TODO: May need refactored
  79. $default_timezone = get_option( 'timezone_string' );
  80. //Check for active plugins
  81. $active_plugins = (array) get_option( 'active_plugins', array() );
  82. if ( is_multisite() ) {
  83. $active_plugins = array_merge( $active_plugins, get_site_option( 'active_sitewide_plugins', array() ) );
  84. }
  85. $all_plugins = array();
  86. foreach ( $active_plugins as $plugin ) {
  87. $plugin_data = @get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin );
  88. $dirname = dirname( $plugin );
  89. $version_string = '';
  90. if ( ! empty( $plugin_data['Name'] ) ) {
  91. // link the plugin name to the plugin url if available
  92. $plugin_name = $plugin_data['Name'];
  93. if ( ! empty( $plugin_data['PluginURI'] ) ) {
  94. $plugin_name = '<a href="' . esc_attr( $plugin_data[ 'PluginURI' ] ) . '" title="' . __( 'Visit plugin homepage' , 'ninja-forms' ) . '">' . $plugin_name . '</a>';
  95. }
  96. $all_plugins[] = $plugin_name . ' ' . __( 'by', 'ninja-forms' ) . ' ' . $plugin_data['Author'] . ' ' . __( 'version', 'ninja-forms' ) . ' ' . $plugin_data['Version'] . $version_string;
  97. }
  98. }
  99. if ( sizeof( $all_plugins ) == 0 ) {
  100. $site_wide_plugins = '-';
  101. } else {
  102. $site_wide_plugins = implode( ', <br/>', $all_plugins );
  103. }
  104. $server_ip = '';
  105. if( array_key_exists( 'SERVER_ADDR', $_SERVER ) )
  106. $server_ip = $_SERVER[ 'SERVER_ADDR' ];
  107. elseif( array_key_exists( 'LOCAL_ADDR', $_SERVER ) )
  108. $server_ip = $_SERVER[ 'LOCAL_ADDR' ];
  109. $host_name = gethostbyaddr( $server_ip );
  110. $wp_version = get_bloginfo('version');
  111. $wp_compatible = ( version_compare( $wp_version, Ninja_Forms::WP_MIN_VERSION ) >= 0 ) ? __( 'Supported', 'ninja-forms' ) : __( 'Not Supported', 'ninja-forms' );
  112. /*
  113. * Error log
  114. */
  115. $error_log = array();
  116. $log = $wpdb->get_results( 'SELECT * FROM `' . $wpdb->prefix . 'nf3_objects` WHERE type = "log" ORDER BY created_at DESC LIMIT 10', ARRAY_A );
  117. if ( is_array( $log ) && 0 < count( $log ) ) {
  118. foreach ( $log as $error ) {
  119. $error_object = Ninja_Forms()->form()->object( $error[ 'id' ] )->get();
  120. // Make sure we don't have a duplicate message
  121. if ( false === in_array( $error_object->get_setting( 'message' ) ,$error_log ) ) {
  122. $error_log[] = $error_object->get_setting( 'message' );
  123. }
  124. }
  125. } else {
  126. $error_log[] = __( 'None Logged', 'ninja-forms' );
  127. }
  128. //Output array
  129. $environment = array(
  130. __( 'Home URL','ninja-forms' ) => home_url(),
  131. __( 'Site URL','ninja-forms' ) => site_url(),
  132. __( 'Ninja Forms Version','ninja-forms' ) => esc_html( Ninja_Forms::VERSION ),
  133. __( 'WP Version','ninja-forms' ) => $wp_version . ' - ' . $wp_compatible,
  134. __( 'WP Multisite Enabled','ninja-forms' ) => $multisite,
  135. __( 'Web Server Info','ninja-forms' ) => esc_html( $_SERVER['SERVER_SOFTWARE'] ),
  136. __( 'PHP Version','ninja-forms' ) => esc_html( phpversion() ),
  137. //TODO: Possibly Refactor with Ninja forms global $_db?
  138. __( 'MySQL Version','ninja-forms' ) => $wpdb->db_version(),
  139. __( 'PHP Locale','ninja-forms' ) => $data,
  140. //TODO: Possibly move the ninja_forms_letters_to_numbers function over.
  141. __( 'WP Memory Limit','ninja-forms' ) => WP_MEMORY_LIMIT,
  142. __( 'WP Debug Mode', 'ninja-forms' ) => $debug,
  143. __( 'WP Language', 'ninja-forms' ) => $lang,
  144. __( 'WP Max Upload Size','ninja-forms' ) => size_format( wp_max_upload_size() ),
  145. __('PHP Post Max Size','ninja-forms' ) => ini_get( 'post_max_size' ),
  146. __('Max Input Nesting Level','ninja-forms' ) => $max_input_nesting_level,
  147. __('PHP Time Limit','ninja-forms' ) => ini_get('max_execution_time'),
  148. __( 'PHP Max Input Vars','ninja-forms' ) => $max_input_vars,
  149. __( 'SUHOSIN Installed','ninja-forms' ) => $suhosin,
  150. __( 'Server IP Address', 'ninja-forms' ) => $server_ip,
  151. __( 'Host Name', 'ninja-forms' ) => $host_name,
  152. __( 'SMTP','ninja-forms' ) => ini_get('SMTP'),
  153. __( 'smtp_port','ninja-forms' ) => ini_get('smtp_port'),
  154. __( 'Default Timezone','ninja-forms' ) => $default_timezone,
  155. );
  156. Ninja_Forms::template( 'admin-menu-system-status.html.php', compact( 'environment', 'site_wide_plugins', 'error_log' ) );
  157. }
  158. } // End Class NF_Admin_SystemStatus