mirror of
				https://github.com/phpbb/phpbb.git
				synced 2025-10-24 21:26:24 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			504 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			504 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
| *
 | |
| * This file is part of the phpBB Forum Software package.
 | |
| *
 | |
| * @copyright (c) phpBB Limited <https://www.phpbb.com>
 | |
| * @license GNU General Public License, version 2 (GPL-2.0)
 | |
| *
 | |
| * For full copyright and license information, please see
 | |
| * the docs/CREDITS.txt file.
 | |
| *
 | |
| */
 | |
| 
 | |
| /**
 | |
| * @ignore
 | |
| */
 | |
| if (!defined('IN_PHPBB'))
 | |
| {
 | |
| 	exit;
 | |
| }
 | |
| 
 | |
| /**
 | |
| * 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 <johannes@php.net>
 | |
| * @copyright	(c) 2007-2008 Johannes Schlueter
 | |
| */
 | |
| class phpbb_questionnaire_data_collector
 | |
| {
 | |
| 	var $providers;
 | |
| 	var $data = null;
 | |
| 	var $install_id = '';
 | |
| 
 | |
| 	/**
 | |
| 	* Constructor.
 | |
| 	*
 | |
| 	* @param	string
 | |
| 	*/
 | |
| 	function phpbb_questionnaire_data_collector($install_id)
 | |
| 	{
 | |
| 		$this->install_id = $install_id;
 | |
| 		$this->providers = array();
 | |
| 	}
 | |
| 
 | |
| 	function add_data_provider(&$provider)
 | |
| 	{
 | |
| 		$this->providers[] = &$provider;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Get data as an array.
 | |
| 	*
 | |
| 	* @return	array	All Data
 | |
| 	*/
 | |
| 	function get_data_raw()
 | |
| 	{
 | |
| 		if (!$this->data)
 | |
| 		{
 | |
| 			$this->collect();
 | |
| 		}
 | |
| 
 | |
| 		return $this->data;
 | |
| 	}
 | |
| 
 | |
| 	function get_data_for_form()
 | |
| 	{
 | |
| 		return base64_encode(serialize($this->get_data_raw()));
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Collect info into the data property.
 | |
| 	*
 | |
| 	* @return	null
 | |
| 	*/
 | |
| 	function collect()
 | |
| 	{
 | |
| 		foreach (array_keys($this->providers) as $key)
 | |
| 		{
 | |
| 			$provider = &$this->providers[$key];
 | |
| 			$this->data[$provider->get_identifier()] = $provider->get_data();
 | |
| 		}
 | |
| 		$this->data['install_id'] = $this->install_id;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /** interface: get_indentifier(), get_data() */
 | |
| 
 | |
| /**
 | |
| * Questionnaire PHP data provider
 | |
| */
 | |
| class phpbb_questionnaire_php_data_provider
 | |
| {
 | |
| 	function get_identifier()
 | |
| 	{
 | |
| 		return 'PHP';
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Get data about the PHP runtime setup.
 | |
| 	*
 | |
| 	* @return	array
 | |
| 	*/
 | |
| 	function get_data()
 | |
| 	{
 | |
| 		return array(
 | |
| 			'version'						=> 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(),
 | |
| 		);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /**
 | |
| * Questionnaire System data provider
 | |
| */
 | |
| class phpbb_questionnaire_system_data_provider
 | |
| {
 | |
| 	function get_identifier()
 | |
| 	{
 | |
| 		return 'System';
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Get data about the general system information, like OS or IP (shortened).
 | |
| 	*
 | |
| 	* @return	array
 | |
| 	*/
 | |
| 	function get_data()
 | |
| 	{
 | |
| 		global $request;
 | |
| 
 | |
| 		// Start discovering the IPV4 server address, if available
 | |
| 		// Try apache, IIS, fall back to 0.0.0.0
 | |
| 		$server_address = htmlspecialchars_decode($request->server('SERVER_ADDR', $request->server('LOCAL_ADDR', '0.0.0.0')));
 | |
| 
 | |
| 		return array(
 | |
| 			'os'	=> PHP_OS,
 | |
| 			'httpd'	=> htmlspecialchars_decode($request->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.
 | |
| 			'private_ip'	=> $this->is_private_ip($server_address),
 | |
| 			'ipv6'			=> strpos($server_address, ':') !== false,
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Checks whether the given IP is in a private network.
 | |
| 	*
 | |
| 	* @param	string	$ip	IP in v4 dot-decimal or v6 hex format
 | |
| 	* @return	bool		true if the IP is from a private network, else false
 | |
| 	*/
 | |
| 	function is_private_ip($ip)
 | |
| 	{
 | |
| 		// IPv4
 | |
| 		if (strpos($ip, ':') === false)
 | |
| 		{
 | |
| 			$ip_address_ary = explode('.', $ip);
 | |
| 
 | |
| 			// build ip
 | |
| 			if (!isset($ip_address_ary[0]) || !isset($ip_address_ary[1]))
 | |
| 			{
 | |
| 				$ip_address_ary = explode('.', '0.0.0.0');
 | |
| 			}
 | |
| 
 | |
| 			// IANA reserved addresses for private networks (RFC 1918) are:
 | |
| 			// - 10.0.0.0/8
 | |
| 			// - 172.16.0.0/12
 | |
| 			// - 192.168.0.0/16
 | |
| 			if ($ip_address_ary[0] == '10' ||
 | |
| 				($ip_address_ary[0] == '172' && intval($ip_address_ary[1]) > 15 && intval($ip_address_ary[1]) < 32) ||
 | |
| 				($ip_address_ary[0] == '192' && $ip_address_ary[1] == '168') ||
 | |
| 				($ip_address_ary[0] == '192' && $ip_address_ary[1] == '168'))
 | |
| 			{
 | |
| 				return true;
 | |
| 			}
 | |
| 		}
 | |
| 		// IPv6
 | |
| 		else
 | |
| 		{
 | |
| 			// unique local unicast
 | |
| 			$prefix = substr($ip, 0, 2);
 | |
| 			if ($prefix == 'fc' || $prefix == 'fd')
 | |
| 			{
 | |
| 				return true;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return false;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /**
 | |
| * Questionnaire phpBB data provider
 | |
| */
 | |
| class phpbb_questionnaire_phpbb_data_provider
 | |
| {
 | |
| 	var $config;
 | |
| 	var $unique_id;
 | |
| 
 | |
| 	/**
 | |
| 	* Constructor.
 | |
| 	*
 | |
| 	* @param	array	$config
 | |
| 	*/
 | |
| 	function phpbb_questionnaire_phpbb_data_provider($config)
 | |
| 	{
 | |
| 		// generate a unique id if necessary
 | |
| 		if (empty($config['questionnaire_unique_id']))
 | |
| 		{
 | |
| 			$this->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 get_identifier()
 | |
| 	{
 | |
| 		return 'phpBB';
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Get data about this phpBB installation.
 | |
| 	*
 | |
| 	* @return	array	Relevant anonymous config options
 | |
| 	*/
 | |
| 	function get_data()
 | |
| 	{
 | |
| 		global $phpbb_root_path, $phpEx, $phpbb_config_php_file;
 | |
| 
 | |
| 		extract($phpbb_config_php_file->get_all());
 | |
| 		unset($dbhost, $dbport, $dbname, $dbuser, $dbpasswd); // Just a precaution
 | |
| 
 | |
| 		$dbms = $phpbb_config_php_file->convert_30_dbms_to_31($dbms);
 | |
| 
 | |
| 		// Only send certain config vars
 | |
| 		$config_vars = array(
 | |
| 			'active_sessions' => true,
 | |
| 			'allow_attachments' => true,
 | |
| 			'allow_autologin' => true,
 | |
| 			'allow_avatar' => true,
 | |
| 			'allow_avatar_local' => true,
 | |
| 			'allow_avatar_remote' => true,
 | |
| 			'allow_avatar_upload' => true,
 | |
| 			'allow_bbcode' => true,
 | |
| 			'allow_birthdays' => true,
 | |
| 			'allow_bookmarks' => true,
 | |
| 			'allow_emailreuse' => true,
 | |
| 			'allow_forum_notify' => true,
 | |
| 			'allow_mass_pm' => true,
 | |
| 			'allow_name_chars' => true,
 | |
| 			'allow_namechange' => true,
 | |
| 			'allow_nocensors' => true,
 | |
| 			'allow_pm_attach' => true,
 | |
| 			'allow_pm_report' => true,
 | |
| 			'allow_post_flash' => true,
 | |
| 			'allow_post_links' => true,
 | |
| 			'allow_privmsg' => true,
 | |
| 			'allow_quick_reply' => true,
 | |
| 			'allow_sig' => true,
 | |
| 			'allow_sig_bbcode' => true,
 | |
| 			'allow_sig_flash' => true,
 | |
| 			'allow_sig_img' => true,
 | |
| 			'allow_sig_links' => true,
 | |
| 			'allow_sig_pm' => true,
 | |
| 			'allow_sig_smilies' => true,
 | |
| 			'allow_smilies' => true,
 | |
| 			'allow_topic_notify' => true,
 | |
| 			'attachment_quota' => true,
 | |
| 			'auth_bbcode_pm' => true,
 | |
| 			'auth_flash_pm' => true,
 | |
| 			'auth_img_pm' => true,
 | |
| 			'auth_method' => true,
 | |
| 			'auth_smilies_pm' => true,
 | |
| 			'avatar_filesize' => true,
 | |
| 			'avatar_max_height' => true,
 | |
| 			'avatar_max_width' => true,
 | |
| 			'avatar_min_height' => true,
 | |
| 			'avatar_min_width' => true,
 | |
| 			'board_email_form' => true,
 | |
| 			'board_hide_emails' => true,
 | |
| 			'board_timezone' => true,
 | |
| 			'browser_check' => true,
 | |
| 			'bump_interval' => true,
 | |
| 			'bump_type' => true,
 | |
| 			'cache_gc' => true,
 | |
| 			'captcha_plugin' => true,
 | |
| 			'captcha_gd' => true,
 | |
| 			'captcha_gd_foreground_noise' => true,
 | |
| 			'captcha_gd_x_grid' => true,
 | |
| 			'captcha_gd_y_grid' => true,
 | |
| 			'captcha_gd_wave' => true,
 | |
| 			'captcha_gd_3d_noise' => true,
 | |
| 			'captcha_gd_fonts' => true,
 | |
| 			'confirm_refresh' => true,
 | |
| 			'check_attachment_content' => true,
 | |
| 			'check_dnsbl' => true,
 | |
| 			'chg_passforce' => true,
 | |
| 			'cookie_secure' => true,
 | |
| 			'coppa_enable' => true,
 | |
| 			'database_gc' => true,
 | |
| 			'dbms_version' => true,
 | |
| 			'default_dateformat' => true,
 | |
| 			'default_lang' => true,
 | |
| 			'display_last_edited' => true,
 | |
| 			'display_order' => true,
 | |
| 			'edit_time' => true,
 | |
| 			'email_check_mx' => true,
 | |
| 			'email_enable' => true,
 | |
| 			'email_function_name' => true,
 | |
| 			'email_package_size' => true,
 | |
| 			'enable_confirm' => true,
 | |
| 			'enable_pm_icons' => true,
 | |
| 			'enable_post_confirm' => true,
 | |
| 			'feed_enable' => true,
 | |
| 			'feed_http_auth' => true,
 | |
| 			'feed_limit_post' => true,
 | |
| 			'feed_limit_topic' => true,
 | |
| 			'feed_overall' => true,
 | |
| 			'feed_overall_forums' => true,
 | |
| 			'feed_forum' => true,
 | |
| 			'feed_topic' => true,
 | |
| 			'feed_topics_new' => true,
 | |
| 			'feed_topics_active' => true,
 | |
| 			'feed_item_statistics' => true,
 | |
| 			'flood_interval' => true,
 | |
| 			'force_server_vars' => true,
 | |
| 			'form_token_lifetime' => true,
 | |
| 			'form_token_mintime' => true,
 | |
| 			'form_token_sid_guests' => true,
 | |
| 			'forward_pm' => true,
 | |
| 			'forwarded_for_check' => true,
 | |
| 			'full_folder_action' => true,
 | |
| 			'fulltext_native_common_thres' => true,
 | |
| 			'fulltext_native_load_upd' => true,
 | |
| 			'fulltext_native_max_chars' => true,
 | |
| 			'fulltext_native_min_chars' => true,
 | |
| 			'gzip_compress' => true,
 | |
| 			'hot_threshold' => true,
 | |
| 			'img_create_thumbnail' => true,
 | |
| 			'img_display_inlined' => true,
 | |
| 			'img_imagick' => true,
 | |
| 			'img_link_height' => true,
 | |
| 			'img_link_width' => true,
 | |
| 			'img_max_height' => true,
 | |
| 			'img_max_thumb_width' => true,
 | |
| 			'img_max_width' => true,
 | |
| 			'img_min_thumb_filesize' => true,
 | |
| 			'ip_check' => true,
 | |
| 			'jab_enable' => true,
 | |
| 			'jab_package_size' => true,
 | |
| 			'jab_use_ssl' => true,
 | |
| 			'limit_load' => true,
 | |
| 			'limit_search_load' => true,
 | |
| 			'load_anon_lastread' => true,
 | |
| 			'load_birthdays' => true,
 | |
| 			'load_cpf_memberlist' => true,
 | |
| 			'load_cpf_viewprofile' => true,
 | |
| 			'load_cpf_viewtopic' => true,
 | |
| 			'load_db_lastread' => true,
 | |
| 			'load_db_track' => true,
 | |
| 			'load_jumpbox' => true,
 | |
| 			'load_moderators' => true,
 | |
| 			'load_online' => true,
 | |
| 			'load_online_guests' => true,
 | |
| 			'load_online_time' => true,
 | |
| 			'load_onlinetrack' => true,
 | |
| 			'load_search' => true,
 | |
| 			'load_tplcompile' => true,
 | |
| 			'load_user_activity' => true,
 | |
| 			'max_attachments' => true,
 | |
| 			'max_attachments_pm' => true,
 | |
| 			'max_autologin_time' => true,
 | |
| 			'max_filesize' => true,
 | |
| 			'max_filesize_pm' => true,
 | |
| 			'max_login_attempts' => true,
 | |
| 			'max_name_chars' => true,
 | |
| 			'max_num_search_keywords' => true,
 | |
| 			'max_pass_chars' => true,
 | |
| 			'max_poll_options' => true,
 | |
| 			'max_post_chars' => true,
 | |
| 			'max_post_font_size' => true,
 | |
| 			'max_post_img_height' => true,
 | |
| 			'max_post_img_width' => true,
 | |
| 			'max_post_smilies' => true,
 | |
| 			'max_post_urls' => true,
 | |
| 			'max_quote_depth' => true,
 | |
| 			'max_reg_attempts' => true,
 | |
| 			'max_sig_chars' => true,
 | |
| 			'max_sig_font_size' => true,
 | |
| 			'max_sig_img_height' => true,
 | |
| 			'max_sig_img_width' => true,
 | |
| 			'max_sig_smilies' => true,
 | |
| 			'max_sig_urls' => true,
 | |
| 			'min_name_chars' => true,
 | |
| 			'min_pass_chars' => true,
 | |
| 			'min_post_chars' => true,
 | |
| 			'min_search_author_chars' => true,
 | |
| 			'mime_triggers' => true,
 | |
| 			'new_member_post_limit' => true,
 | |
| 			'new_member_group_default' => true,
 | |
| 			'override_user_style' => true,
 | |
| 			'pass_complex' => true,
 | |
| 			'pm_edit_time' => true,
 | |
| 			'pm_max_boxes' => true,
 | |
| 			'pm_max_msgs' => true,
 | |
| 			'pm_max_recipients' => true,
 | |
| 			'posts_per_page' => true,
 | |
| 			'print_pm' => true,
 | |
| 			'queue_interval' => true,
 | |
| 			'require_activation' => true,
 | |
| 			'referer_validation' => true,
 | |
| 			'search_block_size' => true,
 | |
| 			'search_gc' => true,
 | |
| 			'search_interval' => true,
 | |
| 			'search_anonymous_interval' => true,
 | |
| 			'search_type' => true,
 | |
| 			'search_store_results' => true,
 | |
| 			'secure_allow_deny' => true,
 | |
| 			'secure_allow_empty_referer' => true,
 | |
| 			'secure_downloads' => true,
 | |
| 			'session_gc' => true,
 | |
| 			'session_length' => true,
 | |
| 			'smtp_auth_method' => true,
 | |
| 			'smtp_delivery' => true,
 | |
| 			'topics_per_page' => true,
 | |
| 			'tpl_allow_php' => true,
 | |
| 			'version' => true,
 | |
| 			'warnings_expire_days' => true,
 | |
| 			'warnings_gc' => true,
 | |
| 
 | |
| 			'num_files' => true,
 | |
| 			'num_posts' => true,
 | |
| 			'num_topics' => true,
 | |
| 			'num_users' => true,
 | |
| 			'record_online_users' => true,
 | |
| 		);
 | |
| 
 | |
| 		$result = array();
 | |
| 		foreach ($config_vars as $name => $void)
 | |
| 		{
 | |
| 			if (isset($this->config[$name]))
 | |
| 			{
 | |
| 				$result['config_' . $name] = $this->config[$name];
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		global $db, $request;
 | |
| 
 | |
| 		$result['dbms'] = $dbms;
 | |
| 		$result['acm_type'] = $acm_type;
 | |
| 		$result['user_agent'] = 'Unknown';
 | |
| 		$result['dbms_version'] = $db->sql_server_info(true);
 | |
| 
 | |
| 		// Try to get user agent vendor and version
 | |
| 		$match = array();
 | |
| 		$user_agent = $request->header('User-Agent');
 | |
| 		$agents = array('firefox', 'msie', 'opera', 'chrome', 'safari', 'mozilla', 'seamonkey', 'konqueror', 'netscape', 'gecko', 'navigator', 'mosaic', 'lynx', 'amaya', 'omniweb', 'avant', 'camino', 'flock', 'aol');
 | |
| 
 | |
| 		// We check here 1 by 1 because some strings occur after others (for example Mozilla [...] Firefox/)
 | |
| 		foreach ($agents as $agent)
 | |
| 		{
 | |
| 			if (preg_match('#(' . $agent . ')[/ ]?([0-9.]*)#i', $user_agent, $match))
 | |
| 			{
 | |
| 				$result['user_agent'] = $match[1] . ' ' . $match[2];
 | |
| 				break;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return $result;
 | |
| 	}
 | |
| }
 |