diff --git a/phpBB/adm/style/acp_send_statistics.html b/phpBB/adm/style/acp_send_statistics.html new file mode 100644 index 0000000000..573eee6fad --- /dev/null +++ b/phpBB/adm/style/acp_send_statistics.html @@ -0,0 +1,63 @@ + + + + +

{L_SEND_STATISTICS}

+ +

{L_EXPLAIN_SEND_STATISTICS}

+ + + + +
+ +

+ +
+ +

+ +

+ +
+ {providers.NAME} + +
+
{providers.values.KEY}
+
{providers.values.VALUE}
+
+ +
+ +
+

+ + +

+
+
+

{L_THANKS_SEND_STATISTICS}

+
+ + + \ No newline at end of file diff --git a/phpBB/includes/acp/acp_ranks.php b/phpBB/includes/acp/acp_ranks.php index a1a10545ef..fcfef2a61e 100644 --- a/phpBB/includes/acp/acp_ranks.php +++ b/phpBB/includes/acp/acp_ranks.php @@ -39,7 +39,7 @@ class acp_ranks $this->tpl_name = 'acp_ranks'; $this->page_title = 'ACP_MANAGE_RANKS'; - $form_name = 'acp_prune'; + $form_name = 'acp_ranks'; add_form_key($form_name); switch ($action) diff --git a/phpBB/includes/acp/acp_send_statistics.php b/phpBB/includes/acp/acp_send_statistics.php new file mode 100644 index 0000000000..4bfacfdb50 --- /dev/null +++ b/phpBB/includes/acp/acp_send_statistics.php @@ -0,0 +1,93 @@ +tpl_name = 'acp_send_statistics'; + $this->page_title = 'ACP_SEND_STATISTICS'; + + $c = new Questionnaire_Data_Collector(); + $c->addDataProvider(new Questionnaire_PHP_Data_Provider()); + $c->addDataProvider(new Questionnaire_System_Data_Provider()); + $c->addDataProvider(new questionnaire_phpbb_data_provider($config)); + + $template->assign_vars(array( + 'U_COLLECT_STATS' => $collect_url, + 'RAW_DATA' => $c->getDataForForm(), + )); + + $raw = $c->getDataRaw(); + + foreach ($raw as $provider => $data) + { + $template->assign_block_vars('providers', array( + 'NAME' => htmlentities($provider), + )); + + foreach ($data as $key => $value) + { + if (is_array($value)) + { + $value = utf8_wordwrap(serialize($value), 75, "\n", true); + } + + $template->assign_block_vars('providers.values', array( + 'KEY' => htmlentities($key), + 'VALUE' => htmlentities($value), + )); + } + } + } + + /** + * Output the data as an HTML Definition List. + * + * @param mixed + * @param string + * @param string + * @return void + */ + function data_printer($value, $key) + { + echo '
', htmlentities($key), '
', $ident, "\t", '
'; + if (is_array($value)) + { + $value = htmlentities(serialize($value)); + echo '
'; + echo '
'; + } else { + echo htmlentities($value); + } + echo '
'; + } +} + +?> \ No newline at end of file diff --git a/phpBB/includes/acp/info/acp_send_statistics.php b/phpBB/includes/acp/info/acp_send_statistics.php new file mode 100644 index 0000000000..33e66ecd26 --- /dev/null +++ b/phpBB/includes/acp/info/acp_send_statistics.php @@ -0,0 +1,37 @@ + 'acp_send_statistics', + 'title' => 'ACP_SEND_STATISTICS', + 'version' => '1.0.0', + 'modes' => array( + 'questionnaire' => array('title' => 'ACP_SEND_STATISTICS', 'auth' => 'acl_a_server', 'cat' => array('ACP_SERVER_CONFIGURATION')), + ), + ); + } + + function install() + { + } + + function uninstall() + { + } +} + +?> \ No newline at end of file diff --git a/phpBB/includes/questionnaire/questionnaire.php b/phpBB/includes/questionnaire/questionnaire.php new file mode 100644 index 0000000000..7eeb4e4113 --- /dev/null +++ b/phpBB/includes/questionnaire/questionnaire.php @@ -0,0 +1,152 @@ + PHP_VERSION, + 'sapi' => PHP_SAPI, + 'int_size' => defined('PHP_INT_SIZE') ? PHP_INT_SIZE : '', + 'safe_mode' => (int)ini_get('safe_mode'), + 'open_basedir' => (int)ini_get('open_basedir'), + 'memory_limit' => ini_get('memory_limit'), + 'allow_url_fopen' => (int)ini_get('allow_url_fopen'), + 'allow_url_include' => (int)ini_get('allow_url_include'), + 'file_uploads' => (int)ini_get('file_uploads'), + 'upload_max_filesize' => ini_get('upload_max_filesize'), + 'post_max_size' => ini_get('post_max_size'), + 'disable_functions' => ini_get('disable_functions'), + 'disable_classes' => ini_get('disable_classes'), + 'enable_dl' => (int)ini_get('enable_dl'), + 'magic_quotes_gpc' => (int)ini_get('magic_quotes_gpc'), + 'register_globals' => (int)ini_get('register_globals'), + 'filter.default' => ini_get('filter.default'), + 'zend.ze1_compatibility_mode' => (int)ini_get('zend.ze1_compatibility_mode'), + 'unicode.semantics' => (int)ini_get('unicode.semantics'), + 'zend_thread_safty' => (int)function_exists('zend_thread_id'), + 'extensions' => get_loaded_extensions() + ); + } +} + + +class Questionnaire_System_Data_Provider +{ + function getIdentifier() + { + return 'System'; + } + + /** + * Get data about the general system information, like OS or IP (shortened). + * + * @return array + */ + function getData() + { + // Start discovering the IPV4 server address, if available + $serverAddress = '0.0.0.0'; + if (isset($_SERVER['SERVER_ADDR'])) { + $serverAddress = $_SERVER['SERVER_ADDR']; + } + // Running on IIS? + if (isset($_SERVER['LOCAL_ADDR'])) { + $serverAddress = $_SERVER['LOCAL_ADDR']; + } + $aIPAddress = explode('.', $serverAddress); + + return array( + 'os' => PHP_OS, + 'httpd' => $_SERVER['SERVER_SOFTWARE'], + // we don't want the real IP address (for privacy policy reasons) but only + // a network address to see whether your installation is running on a private or public network. + // IANA reserved addresses for private networks (RFC 1918) are: + // - 10.0.0.0/8 + // - 172.16.0.0/12 + // - 192.168.0.0/16 + 'ip' => $aIPAddress[0].'.'.$aIPAddress[1].'.XXX.YYY' + ); + } +} + +/** + * This class collects data which is used to create some usage statistics. + * + * The collected data is - after authorization of the administrator - submitted + * to a central server. For privacy reasons we try to collect only data which aren't private + * or don't give any information which might help to identify the user. + * + * @author Johannes Schlueter + * @copyright (c) 2007-2008 Johannes Schlueter + */ + +class Questionnaire_Data_Collector +{ + var $providers; + var $data = null; + + /** + * Constructor. + * + * @param array + * @param string + */ + function __construct() + { + $this->providers = array(); + } + + function addDataProvider(&$provider) + { + $this->providers[] = &$provider; + } + + /** + * Get data as an array. + * + * @return array All Data + */ + function getDataRaw() + { + if (!$this->data) { + $this->collect(); + } + + return $this->data; + } + + function getDataForForm() + { + return base64_encode(serialize($this->getDataRaw())); + } + + /** + * Collect info into the data property. + * + * @return void + */ + function collect() + { + foreach (array_keys($this->providers) as $key) { + $provider = &$this->providers[$key]; + $this->data[$provider->getIdentifier()] = $provider->getData(); + } + } +} diff --git a/phpBB/includes/questionnaire/questionnaire_phpbb.php b/phpBB/includes/questionnaire/questionnaire_phpbb.php new file mode 100644 index 0000000000..7c2ce4c292 --- /dev/null +++ b/phpBB/includes/questionnaire/questionnaire_phpbb.php @@ -0,0 +1,122 @@ +unique_id = unique_id(); + set_config('questionnaire_unique_id', $this->unique_id); + } + else + { + $this->unique_id = $config['questionnaire_unique_id']; + } + + $this->config = $config; + } + + /** + * Returns a string identifier for this data provider + * + * @return string "phpBB" + */ + function getIdentifier() + { + return 'phpBB'; + } + + + /** + * Get data about this phpBB installation. + * + * @return array Relevant anonymous config options + */ + function getData() + { + + // Exclude certain config vars + $exclude_config_vars = array( + 'avatar_gallery_path' => true, + 'avatar_path' => true, + 'avatar_salt' => true, + 'board_contact' => true, + 'board_disable_msg' => true, + 'board_email' => true, + 'board_email_sig' => true, + 'cookie_name' => true, + 'icons_path' => true, + 'icons_path' => true, + 'jab_host' => true, + 'jab_password' => true, + 'jab_port' => true, + 'jab_username' => true, + 'ldap_base_dn' => true, + 'ldap_email' => true, + 'ldap_password' => true, + 'ldap_port' => true, + 'ldap_server' => true, + 'ldap_uid' => true, + 'ldap_user' => true, + 'ldap_user_filter' => true, + 'ranks_path' => true, + 'script_path' => true, + 'server_name' => true, + 'server_port' => true, + 'server_protocol' => true, + 'site_desc' => true, + 'sitename' => true, + 'smilies_path' => true, + 'smtp_host' => true, + 'smtp_password' => true, + 'smtp_port' => true, + 'smtp_username' => true, + 'upload_icons_path' => true, + 'upload_path' => true, + 'newest_user_colour' => true, + 'newest_user_id' => true, + 'newest_username' => true, + 'rand_seed' => true, + ); + + $result = array(); + foreach ($this->config as $name => $value) + { + if (!isset($exclude_config_vars[$name])) + { + $result['config.' . $name] = $value; + } + } + + return $result; + } +} \ No newline at end of file diff --git a/phpBB/language/en/acp/common.php b/phpBB/language/en/acp/common.php index 7e92594b85..55c3ed0cac 100644 --- a/phpBB/language/en/acp/common.php +++ b/phpBB/language/en/acp/common.php @@ -393,6 +393,14 @@ $lang = array_merge($lang, array( 'USER_IS_INACTIVE' => 'User is inactive', )); +// Send statistics page +$lang = array_merge($lang, array( + 'EXPLAIN_SEND_STATISTICS' => 'Please send some statistical information about your server and forum configuration to phpBB. All information that could identify you has been removed - the data is entirely anonymous. We will base decisions about future phpBB versions on this information. Below you can display all variables that will be transmitted.', + 'HIDE_STATISTICS' => 'Hide details', + 'SEND_STATISTICS' => 'Send statistical information', + 'SHOW_STATISTICS' => 'Show details', +)); + // Log Entries $lang = array_merge($lang, array( 'LOG_ACL_ADD_USER_GLOBAL_U_' => 'Added or edited users’ user permissions
» %s',