diff options
Diffstat (limited to 'phpBB/phpbb/install/module/install_data')
5 files changed, 1114 insertions, 0 deletions
| diff --git a/phpBB/phpbb/install/module/install_data/module.php b/phpBB/phpbb/install/module/install_data/module.php new file mode 100644 index 0000000000..77f1f73f1f --- /dev/null +++ b/phpBB/phpbb/install/module/install_data/module.php @@ -0,0 +1,28 @@ +<?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. + * + */ + +namespace phpbb\install\module\install_data; + +/** + * Installer module for recovering and installing default data installation + */ +class module extends \phpbb\install\module_base +{ +	/** +	 * {@inheritdoc} +	 */ +	public function get_navigation_stage_path() +	{ +		return array('install', 0, 'install'); +	} +} diff --git a/phpBB/phpbb/install/module/install_data/task/add_bots.php b/phpBB/phpbb/install/module/install_data/task/add_bots.php new file mode 100644 index 0000000000..1f1cecceb2 --- /dev/null +++ b/phpBB/phpbb/install/module/install_data/task/add_bots.php @@ -0,0 +1,263 @@ +<?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. + * + */ + +namespace phpbb\install\module\install_data\task; + +use phpbb\install\exception\resource_limit_reached_exception; + +class add_bots extends \phpbb\install\task_base +{ +	/** +	 * A list of the web-crawlers/bots we recognise by default +	 * +	 * Candidates but not included: +	 * 'Accoona [Bot]'				'Accoona-AI-Agent/' +	 * 'ASPseek [Crawler]'			'ASPseek/' +	 * 'Boitho [Crawler]'			'boitho.com-dc/' +	 * 'Bunnybot [Bot]'				'powered by www.buncat.de' +	 * 'Cosmix [Bot]'				'cfetch/' +	 * 'Crawler Search [Crawler]'	'.Crawler-Search.de' +	 * 'Findexa [Crawler]'			'Findexa Crawler (' +	 * 'GBSpider [Spider]'			'GBSpider v' +	 * 'genie [Bot]'				'genieBot (' +	 * 'Hogsearch [Bot]'			'oegp v. 1.3.0' +	 * 'Insuranco [Bot]'			'InsurancoBot' +	 * 'IRLbot [Bot]'				'http://irl.cs.tamu.edu/crawler' +	 * 'ISC Systems [Bot]'			'ISC Systems iRc Search' +	 * 'Jyxobot [Bot]'				'Jyxobot/' +	 * 'Kraehe [Metasuche]'			'-DIE-KRAEHE- META-SEARCH-ENGINE/' +	 * 'LinkWalker'					'LinkWalker' +	 * 'MMSBot [Bot]'				'http://www.mmsweb.at/bot.html' +	 * 'Naver [Bot]'				'nhnbot@naver.com)' +	 * 'NetResearchServer'			'NetResearchServer/' +	 * 'Nimble [Crawler]'			'NimbleCrawler' +	 * 'Ocelli [Bot]'				'Ocelli/' +	 * 'Onsearch [Bot]'				'onCHECK-Robot' +	 * 'Orange [Spider]'			'OrangeSpider' +	 * 'Sproose [Bot]'				'http://www.sproose.com/bot' +	 * 'Susie [Sync]'				'!Susie (http://www.sync2it.com/susie)' +	 * 'Tbot [Bot]'					'Tbot/' +	 * 'Thumbshots [Capture]'		'thumbshots-de-Bot' +	 * 'Vagabondo [Crawler]'		'http://webagent.wise-guys.nl/' +	 * 'Walhello [Bot]'				'appie 1.1 (www.walhello.com)' +	 * 'WissenOnline [Bot]'			'WissenOnline-Bot' +	 * 'WWWeasel [Bot]'				'WWWeasel Robot v' +	 * 'Xaldon [Spider]'			'Xaldon WebSpider' +	 * +	 * @var array +	 */ +	protected $bot_list = array( +		'AdsBot [Google]'			=> array('AdsBot-Google', ''), +		'Alexa [Bot]'				=> array('ia_archiver', ''), +		'Alta Vista [Bot]'			=> array('Scooter/', ''), +		'Ask Jeeves [Bot]'			=> array('Ask Jeeves', ''), +		'Baidu [Spider]'			=> array('Baiduspider', ''), +		'Bing [Bot]'				=> array('bingbot/', ''), +		'Exabot [Bot]'				=> array('Exabot', ''), +		'FAST Enterprise [Crawler]'	=> array('FAST Enterprise Crawler', ''), +		'FAST WebCrawler [Crawler]'	=> array('FAST-WebCrawler/', ''), +		'Francis [Bot]'				=> array('http://www.neomo.de/', ''), +		'Gigabot [Bot]'				=> array('Gigabot/', ''), +		'Google Adsense [Bot]'		=> array('Mediapartners-Google', ''), +		'Google Desktop'			=> array('Google Desktop', ''), +		'Google Feedfetcher'		=> array('Feedfetcher-Google', ''), +		'Google [Bot]'				=> array('Googlebot', ''), +		'Heise IT-Markt [Crawler]'	=> array('heise-IT-Markt-Crawler', ''), +		'Heritrix [Crawler]'		=> array('heritrix/1.', ''), +		'IBM Research [Bot]'		=> array('ibm.com/cs/crawler', ''), +		'ICCrawler - ICjobs'		=> array('ICCrawler - ICjobs', ''), +		'ichiro [Crawler]'			=> array('ichiro/', ''), +		'Majestic-12 [Bot]'			=> array('MJ12bot/', ''), +		'Metager [Bot]'				=> array('MetagerBot/', ''), +		'MSN NewsBlogs'				=> array('msnbot-NewsBlogs/', ''), +		'MSN [Bot]'					=> array('msnbot/', ''), +		'MSNbot Media'				=> array('msnbot-media/', ''), +		'Nutch [Bot]'				=> array('http://lucene.apache.org/nutch/', ''), +		'Online link [Validator]'	=> array('online link validator', ''), +		'psbot [Picsearch]'			=> array('psbot/0', ''), +		'Sensis [Crawler]'			=> array('Sensis Web Crawler', ''), +		'SEO Crawler'				=> array('SEO search Crawler/', ''), +		'Seoma [Crawler]'			=> array('Seoma [SEO Crawler]', ''), +		'SEOSearch [Crawler]'		=> array('SEOsearch/', ''), +		'Snappy [Bot]'				=> array('Snappy/1.1 ( http://www.urltrends.com/ )', ''), +		'Steeler [Crawler]'			=> array('http://www.tkl.iis.u-tokyo.ac.jp/~crawler/', ''), +		'Telekom [Bot]'				=> array('crawleradmin.t-info@telekom.de', ''), +		'TurnitinBot [Bot]'			=> array('TurnitinBot/', ''), +		'Voyager [Bot]'				=> array('voyager/', ''), +		'W3 [Sitesearch]'			=> array('W3 SiteSearch Crawler', ''), +		'W3C [Linkcheck]'			=> array('W3C-checklink/', ''), +		'W3C [Validator]'			=> array('W3C_Validator', ''), +		'YaCy [Bot]'				=> array('yacybot', ''), +		'Yahoo MMCrawler [Bot]'		=> array('Yahoo-MMCrawler/', ''), +		'Yahoo Slurp [Bot]'			=> array('Yahoo! DE Slurp', ''), +		'Yahoo [Bot]'				=> array('Yahoo! Slurp', ''), +		'YahooSeeker [Bot]'			=> array('YahooSeeker/', ''), +	); + +	/** +	 * @var \phpbb\db\driver\driver_interface +	 */ +	protected $db; + +	/** +	 * @var \phpbb\install\helper\config +	 */ +	protected $install_config; + +	/** +	 * @var \phpbb\install\helper\iohandler\iohandler_interface +	 */ +	protected $io_handler; + +	/** +	 * @var \phpbb\language\language +	 */ +	protected $language; + +	/** +	 * @var string +	 */ +	protected $phpbb_root_path; + +	/** +	 * @var string +	 */ +	protected $php_ext; + +	/** +	 * Constructor +	 * +	 * @param \phpbb\install\helper\config							$install_config		Installer's config +	 * @param \phpbb\install\helper\iohandler\iohandler_interface	$iohandler			Input-output handler for the installer +	 * @param \phpbb\install\helper\container_factory				$container			Installer's DI container +	 * @param \phpbb\language\language								$language			Language provider +	 * @param string												$phpbb_root_path	Relative path to phpBB root +	 * @param string												$php_ext			PHP extension +	 */ +	public function __construct(\phpbb\install\helper\config $install_config, +								\phpbb\install\helper\iohandler\iohandler_interface $iohandler, +								\phpbb\install\helper\container_factory $container, +								\phpbb\language\language $language, +								$phpbb_root_path, +								$php_ext) +	{ +		parent::__construct(true); + +		$this->db				= $container->get('dbal.conn'); +		$this->install_config	= $install_config; +		$this->io_handler		= $iohandler; +		$this->language			= $language; +		$this->phpbb_root_path	= $phpbb_root_path; +		$this->php_ext			= $php_ext; +	} + +	/** +	 * {@inheritdoc} +	 */ +	public function run() +	{ +		$this->db->sql_return_on_error(true); + +		$sql = 'SELECT group_id +			FROM ' . GROUPS_TABLE . " +			WHERE group_name = 'BOTS'"; +		$result = $this->db->sql_query($sql); +		$group_id = (int) $this->db->sql_fetchfield('group_id'); +		$this->db->sql_freeresult($result); + +		if (!$group_id) +		{ +			// If we reach this point then something has gone very wrong +			$this->io_handler->add_error_message('NO_GROUP'); +		} + +		$i = $this->install_config->get('add_bot_index', 0); +		$bot_list = array_slice($this->bot_list, $i); + +		foreach ($bot_list as $bot_name => $bot_ary) +		{ +			$user_row = array( +				'user_type'				=> USER_IGNORE, +				'group_id'				=> $group_id, +				'username'				=> $bot_name, +				'user_regdate'			=> time(), +				'user_password'			=> '', +				'user_colour'			=> '9E8DA7', +				'user_email'			=> '', +				'user_lang'				=> $this->install_config->get('default_lang'), +				'user_style'			=> 1, +				'user_timezone'			=> 'UTC', +				'user_dateformat'		=> $this->language->lang('default_dateformat'), +				'user_allow_massemail'	=> 0, +				'user_allow_pm'			=> 0, +			); + +			if (!function_exists('user_add')) +			{ +				include($this->phpbb_root_path . 'includes/functions_user.' . $this->php_ext); +			} + +			$user_id = user_add($user_row); + +			if (!$user_id) +			{ +				// If we can't insert this user then continue to the next one to avoid inconsistent data +				$this->io_handler->add_error_message('CONV_ERROR_INSERT_BOT'); + +				$i++; +				continue; +			} + +			$sql = 'INSERT INTO ' . BOTS_TABLE . ' ' . $this->db->sql_build_array('INSERT', array( +				'bot_active'	=> 1, +				'bot_name'		=> (string) $bot_name, +				'user_id'		=> (int) $user_id, +				'bot_agent'		=> (string) $bot_ary[0], +				'bot_ip'		=> (string) $bot_ary[1], +			)); + +			$this->db->sql_query($sql); + +			$i++; + +			// Stop execution if resource limit is reached +			if ($this->install_config->get_time_remaining() <= 0 || $this->install_config->get_memory_remaining() <= 0) +			{ +				break; +			} +		} + +		$this->install_config->set('add_bot_index', $i); + +		if ($i < sizeof($this->bot_list)) +		{ +			throw new resource_limit_reached_exception(); +		} +	} + +	/** +	 * {@inheritdoc} +	 */ +	static public function get_step_count() +	{ +		return 1; +	} + +	/** +	 * {@inheritdoc} +	 */ +	public function get_task_lang_name() +	{ +		return 'TASK_ADD_BOTS'; +	} +} diff --git a/phpBB/phpbb/install/module/install_data/task/add_languages.php b/phpBB/phpbb/install/module/install_data/task/add_languages.php new file mode 100644 index 0000000000..7ffdf4f276 --- /dev/null +++ b/phpBB/phpbb/install/module/install_data/task/add_languages.php @@ -0,0 +1,121 @@ +<?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. + * + */ + +namespace phpbb\install\module\install_data\task; + +class add_languages extends \phpbb\install\task_base +{ +	/** +	 * @var \phpbb\db\driver\driver_interface +	 */ +	protected $db; + +	/** +	 * @var \phpbb\install\helper\iohandler\iohandler_interface +	 */ +	protected $iohandler; + +	/** +	 * @var \phpbb\language\language_file_helper +	 */ +	protected $language_helper; + +	/** +	 * Constructor +	 * +	 * @param \phpbb\install\helper\iohandler\iohandler_interface	$iohandler			Installer's input-output handler +	 * @param \phpbb\install\helper\container_factory				$container			Installer's DI container +	 * @param \phpbb\language\language_file_helper					$language_helper	Language file helper service +	 */ +	public function __construct(\phpbb\install\helper\iohandler\iohandler_interface $iohandler, +								\phpbb\install\helper\container_factory $container, +								\phpbb\language\language_file_helper $language_helper) +	{ +		$this->db				= $container->get('dbal.conn'); +		$this->iohandler		= $iohandler; +		$this->language_helper	= $language_helper; + +		parent::__construct(true); +	} + +	/** +	 * {@inheritdoc} +	 */ +	public function run() +	{ +		$this->db->sql_return_on_error(true); + +		$languages = $this->language_helper->get_available_languages(); +		$installed_languages = array(); + +		foreach ($languages as $lang_info) +		{ +			$lang_pack = array( +				'lang_iso'			=> $lang_info['iso'], +				'lang_dir'			=> $lang_info['iso'], +				'lang_english_name'	=> htmlspecialchars($lang_info['name']), +				'lang_local_name'	=> htmlspecialchars($lang_info['local_name'], ENT_COMPAT, 'UTF-8'), +				'lang_author'		=> htmlspecialchars($lang_info['author'], ENT_COMPAT, 'UTF-8'), +			); + +			$this->db->sql_query('INSERT INTO ' . LANG_TABLE . ' ' . $this->db->sql_build_array('INSERT', $lang_pack)); + +			$installed_languages[] = (int) $this->db->sql_nextid(); +			if ($this->db->get_sql_error_triggered()) +			{ +				$error = $this->db->sql_error($this->db->get_sql_error_sql()); +				$this->iohandler->add_error_message($error['message']); +			} +		} + +		$sql = 'SELECT * FROM ' . PROFILE_FIELDS_TABLE; +		$result = $this->db->sql_query($sql); + +		$insert_buffer = new \phpbb\db\sql_insert_buffer($this->db, PROFILE_LANG_TABLE); +		while ($row = $this->db->sql_fetchrow($result)) +		{ +			foreach ($installed_languages as $lang_id) +			{ +				$insert_buffer->insert(array( +					'field_id'				=> $row['field_id'], +					'lang_id'				=> $lang_id, + +					// Remove phpbb_ from field name +					'lang_name'				=> strtoupper(substr($row['field_name'], 6)), +					'lang_explain'			=> '', +					'lang_default_value'	=> '', +				)); +			} +		} + +		$this->db->sql_freeresult($result); + +		$insert_buffer->flush(); +	} + +	/** +	 * {@inheritdoc} +	 */ +	static public function get_step_count() +	{ +		return 1; +	} + +	/** +	 * {@inheritdoc} +	 */ +	public function get_task_lang_name() +	{ +		return 'TASK_ADD_LANGUAGES'; +	} +} diff --git a/phpBB/phpbb/install/module/install_data/task/add_modules.php b/phpBB/phpbb/install/module/install_data/task/add_modules.php new file mode 100644 index 0000000000..d21a5be823 --- /dev/null +++ b/phpBB/phpbb/install/module/install_data/task/add_modules.php @@ -0,0 +1,568 @@ +<?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. + * + */ + +namespace phpbb\install\module\install_data\task; + +use phpbb\install\exception\resource_limit_reached_exception; +use phpbb\install\helper\config; +use phpbb\install\helper\container_factory; +use phpbb\install\helper\iohandler\iohandler_interface; + +class add_modules extends \phpbb\install\task_base +{ +	/** +	 * @var config +	 */ +	protected $config; + +	/** +	 * @var \phpbb\db\driver\driver_interface +	 */ +	protected $db; + +	/** +	 * @var \phpbb\extension\manager +	 */ +	protected $extension_manager; + +	/** +	 * @var \phpbb\install\helper\iohandler\iohandler_interface +	 */ +	protected $iohandler; + +	/** +	 * @var \phpbb\module\module_manager +	 */ +	protected $module_manager; + +	/** +	 * Define the module structure so that we can populate the database without +	 * needing to hard-code module_id values +	 * +	 * @var array +	 */ +	protected $module_categories = array( +		'acp' => array( +			'ACP_CAT_GENERAL' => array( +				'ACP_QUICK_ACCESS', +				'ACP_BOARD_CONFIGURATION', +				'ACP_CLIENT_COMMUNICATION', +				'ACP_SERVER_CONFIGURATION', +			), +			'ACP_CAT_FORUMS' => array( +				'ACP_MANAGE_FORUMS', +				'ACP_FORUM_BASED_PERMISSIONS', +			), +			'ACP_CAT_POSTING' => array( +				'ACP_MESSAGES', +				'ACP_ATTACHMENTS', +			), +			'ACP_CAT_USERGROUP' => array( +				'ACP_CAT_USERS', +				'ACP_GROUPS', +				'ACP_USER_SECURITY', +			), +			'ACP_CAT_PERMISSIONS' => array( +				'ACP_GLOBAL_PERMISSIONS', +				'ACP_FORUM_BASED_PERMISSIONS', +				'ACP_PERMISSION_ROLES', +				'ACP_PERMISSION_MASKS', +			), +			'ACP_CAT_CUSTOMISE' => array( +				'ACP_STYLE_MANAGEMENT', +				'ACP_EXTENSION_MANAGEMENT', +				'ACP_LANGUAGE', +			), +			'ACP_CAT_MAINTENANCE' => array( +				'ACP_FORUM_LOGS', +				'ACP_CAT_DATABASE', +			), +			'ACP_CAT_SYSTEM' => array( +				'ACP_AUTOMATION', +				'ACP_GENERAL_TASKS', +				'ACP_MODULE_MANAGEMENT', +			), +			'ACP_CAT_DOT_MODS' => null, +		), +		'mcp' => array( +			'MCP_MAIN'		=> null, +			'MCP_QUEUE'		=> null, +			'MCP_REPORTS'	=> null, +			'MCP_NOTES'		=> null, +			'MCP_WARN'		=> null, +			'MCP_LOGS'		=> null, +			'MCP_BAN'		=> null, +		), +		'ucp' => array( +			'UCP_MAIN'			=> null, +			'UCP_PROFILE'		=> null, +			'UCP_PREFS'			=> null, +			'UCP_PM'			=> null, +			'UCP_USERGROUPS'	=> null, +			'UCP_ZEBRA'			=> null, +		), +	); + +	/** +	 * @var array +	 */ +	protected $module_categories_basenames = array( +		'UCP_PM' => 'ucp_pm', +	); + +	/** +	 * @var array +	 */ +	protected $module_extras = array( +		'acp'	=> array( +			'ACP_QUICK_ACCESS' => array( +				'ACP_MANAGE_USERS', +				'ACP_GROUPS_MANAGE', +				'ACP_MANAGE_FORUMS', +				'ACP_MOD_LOGS', +				'ACP_BOTS', +				'ACP_PHP_INFO', +			), +			'ACP_FORUM_BASED_PERMISSIONS' => array( +				'ACP_FORUM_PERMISSIONS', +				'ACP_FORUM_PERMISSIONS_COPY', +				'ACP_FORUM_MODERATORS', +				'ACP_USERS_FORUM_PERMISSIONS', +				'ACP_GROUPS_FORUM_PERMISSIONS', +			), +		), +	); + +	/** +	 * Constructor +	 * +	 * @parma config				$config		Installer's config +	 * @param iohandler_interface	$iohandler	Installer's input-output handler +	 * @param container_factory		$container	Installer's DI container +	 */ +	public function __construct(config $config, iohandler_interface $iohandler, container_factory $container) +	{ +		$this->config				= $config; +		$this->db					= $container->get('dbal.conn'); +		$this->extension_manager	= $container->get('ext.manager'); +		$this->iohandler			= $iohandler; +		$this->module_manager		= $container->get('module.manager'); + +		parent::__construct(true); +	} + +	/** +	 * {@inheritdoc} +	 */ +	public function run() +	{ +		$this->db->sql_return_on_error(true); + +		$module_classes = array('acp', 'mcp', 'ucp'); +		$total = sizeof($module_classes); +		$i = $this->config->get('module_class_index', 0); +		$module_classes = array_slice($module_classes, $i); + +		foreach ($module_classes as $module_class) +		{ +			$categories = $this->config->get('module_categories_array', array()); + +			$k = $this->config->get('module_categories_index', 0); +			$module_categories = array_slice($this->module_categories[$module_class], $k); +			$timed_out = false; + +			foreach ($module_categories as $cat_name => $subs) +			{ +				// Check if this sub-category has a basename. If it has, use it. +				$basename = (isset($this->module_categories_basenames[$cat_name])) ? $this->module_categories_basenames[$cat_name] : ''; + +				$module_data = array( +					'module_basename'	=> $basename, +					'module_enabled'	=> 1, +					'module_display'	=> 1, +					'parent_id'			=> 0, +					'module_class'		=> $module_class, +					'module_langname'	=> $cat_name, +					'module_mode'		=> '', +					'module_auth'		=> '', +				); + +				$this->module_manager->update_module_data($module_data); + +				// Check for last sql error happened +				if ($this->db->get_sql_error_triggered()) +				{ +					$error = $this->db->sql_error($this->db->get_sql_error_sql()); +					$this->iohandler->add_error_message('INST_ERR_DB', $error['message']); +				} + +				$categories[$cat_name]['id'] = (int) $module_data['module_id']; +				$categories[$cat_name]['parent_id'] = 0; + +				if (is_array($subs)) +				{ +					foreach ($subs as $level2_name) +					{ +						// Check if this sub-category has a basename. If it has, use it. +						$basename = (isset($this->module_categories_basenames[$level2_name])) ? $this->module_categories_basenames[$level2_name] : ''; + +						$module_data = array( +							'module_basename'	=> $basename, +							'module_enabled'	=> 1, +							'module_display'	=> 1, +							'parent_id'			=> (int) $categories[$cat_name]['id'], +							'module_class'		=> $module_class, +							'module_langname'	=> $level2_name, +							'module_mode'		=> '', +							'module_auth'		=> '', +						); + +						$this->module_manager->update_module_data($module_data); + +						// Check for last sql error happened +						if ($this->db->get_sql_error_triggered()) +						{ +							$error = $this->db->sql_error($this->db->get_sql_error_sql()); +							$this->iohandler->add_error_message('INST_ERR_DB', $error['message']); +						} + +						$categories[$level2_name]['id'] = (int) $module_data['module_id']; +						$categories[$level2_name]['parent_id'] = (int) $categories[$cat_name]['id']; +					} +				} + +				$k++; + +				// Stop execution if resource limit is reached +				if ($this->config->get_time_remaining() <= 0 || $this->config->get_memory_remaining() <= 0) +				{ +					$timed_out = true; +					break; +				} +			} + +			$this->config->set('module_categories_array', $categories); +			$this->config->set('module_categories_index', $k); + +			if ($timed_out) +			{ +				throw new resource_limit_reached_exception(); +			} + +			// Get the modules we want to add... returned sorted by name +			$module_info = $this->module_manager->get_module_infos($module_class); + +			$k = $this->config->get('module_info_index', 0); +			$module_info = array_slice($module_info, $k); + +			foreach ($module_info as $module_basename => $fileinfo) +			{ +				foreach ($fileinfo['modes'] as $module_mode => $row) +				{ +					foreach ($row['cat'] as $cat_name) +					{ +						if (!isset($categories[$cat_name])) +						{ +							continue; +						} + +						$module_data = array( +							'module_basename'	=> $module_basename, +							'module_enabled'	=> 1, +							'module_display'	=> (isset($row['display'])) ? (int) $row['display'] : 1, +							'parent_id'			=> (int) $categories[$cat_name]['id'], +							'module_class'		=> $module_class, +							'module_langname'	=> $row['title'], +							'module_mode'		=> $module_mode, +							'module_auth'		=> $row['auth'], +						); + +						$this->module_manager->update_module_data($module_data); + +						// Check for last sql error happened +						if ($this->db->get_sql_error_triggered()) +						{ +							$error = $this->db->sql_error($this->db->get_sql_error_sql()); +							$this->iohandler->add_error_message('INST_ERR_DB', $error['message']); +						} +					} +				} + +				$k++; + +				// Stop execution if resource limit is reached +				if ($this->config->get_time_remaining() <= 0 || $this->config->get_memory_remaining() <= 0) +				{ +					$timed_out = true; +					break; +				} +			} + +			$this->config->set('module_info_index', $k); + +			// Stop execution if resource limit is reached +			if ($timed_out) +			{ +				throw new resource_limit_reached_exception(); +			} + +			// Move some of the modules around since the code above will put them in the wrong place +			if (!$this->config->get('modules_ordered', false)) +			{ +				$this->order_modules($module_class); +				$this->config->set('modules_ordered', true); + +				// Stop execution if resource limit is reached +				if ($this->config->get_time_remaining() <= 0 || $this->config->get_memory_remaining() <= 0) +				{ +					throw new resource_limit_reached_exception(); +				} +			} + +			// And now for the special ones +			// (these are modules which appear in multiple categories and thus get added manually +			// to some for more control) +			if (isset($this->module_extras[$module_class])) +			{ +				$this->add_module_extras($module_class); +			} + +			$this->module_manager->remove_cache_file($module_class); + +			$i++; + +			$this->config->set('module_class_index', $i); +			$this->config->set('module_categories_index', 0); +			$this->config->set('module_info_index', 0); +			$this->config->set('added_extra_modules', false); +			$this->config->set('modules_ordered', false); +			$this->config->set('module_categories_array', array()); + +			// Stop execution if resource limit is reached +			if ($this->config->get_time_remaining() <= 0 || $this->config->get_memory_remaining() <= 0) +			{ +				break; +			} +		} + +		if ($i < $total) +		{ +			throw new resource_limit_reached_exception(); +		} +	} + +	/** +	 * Move modules to their correct place +	 * +	 * @param string	$module_class +	 */ +	protected function order_modules($module_class) +	{ +		if ($module_class == 'acp') +		{ +			// Move main module 4 up... +			$sql = 'SELECT * +				FROM ' . MODULES_TABLE . " +				WHERE module_basename = 'acp_main' +					AND module_class = 'acp' +					AND module_mode = 'main'"; +			$result = $this->db->sql_query($sql); +			$row = $this->db->sql_fetchrow($result); +			$this->db->sql_freeresult($result); + +			$this->module_manager->move_module_by($row, 'acp', 'move_up', 4); + +			// Move permissions intro screen module 4 up... +			$sql = 'SELECT * +				FROM ' . MODULES_TABLE . " +				WHERE module_basename = 'acp_permissions' +					AND module_class = 'acp' +					AND module_mode = 'intro'"; +			$result = $this->db->sql_query($sql); +			$row = $this->db->sql_fetchrow($result); +			$this->db->sql_freeresult($result); + +			$this->module_manager->move_module_by($row, 'acp', 'move_up', 4); + +			// Move manage users screen module 5 up... +			$sql = 'SELECT * +				FROM ' . MODULES_TABLE . " +				WHERE module_basename = 'acp_users' +					AND module_class = 'acp' +					AND module_mode = 'overview'"; +			$result = $this->db->sql_query($sql); +			$row = $this->db->sql_fetchrow($result); +			$this->db->sql_freeresult($result); + +			$this->module_manager->move_module_by($row, 'acp', 'move_up', 5); + +			// Move extension management module 1 up... +			$sql = 'SELECT * +				FROM ' . MODULES_TABLE . " +				WHERE module_langname = 'ACP_EXTENSION_MANAGEMENT' +					AND module_class = 'acp' +					AND module_mode = '' +					AND module_basename = ''"; +			$result = $this->db->sql_query($sql); +			$row = $this->db->sql_fetchrow($result); +			$this->db->sql_freeresult($result); + +			$this->module_manager->move_module_by($row, 'acp', 'move_up', 1); +		} + +		if ($module_class == 'mcp') +		{ +			// Move pm report details module 3 down... +			$sql = 'SELECT * +				FROM ' . MODULES_TABLE . " +				WHERE module_basename = 'mcp_pm_reports' +					AND module_class = 'mcp' +					AND module_mode = 'pm_report_details'"; +			$result = $this->db->sql_query($sql); +			$row = $this->db->sql_fetchrow($result); +			$this->db->sql_freeresult($result); + +			$this->module_manager->move_module_by($row, 'mcp', 'move_down', 3); + +			// Move closed pm reports module 3 down... +			$sql = 'SELECT * +				FROM ' . MODULES_TABLE . " +				WHERE module_basename = 'mcp_pm_reports' +					AND module_class = 'mcp' +					AND module_mode = 'pm_reports_closed'"; +			$result = $this->db->sql_query($sql); +			$row = $this->db->sql_fetchrow($result); +			$this->db->sql_freeresult($result); + +			$this->module_manager->move_module_by($row, 'mcp', 'move_down', 3); + +			// Move open pm reports module 3 down... +			$sql = 'SELECT * +				FROM ' . MODULES_TABLE . " +				WHERE module_basename = 'mcp_pm_reports' +					AND module_class = 'mcp' +					AND module_mode = 'pm_reports'"; +			$result = $this->db->sql_query($sql); +			$row = $this->db->sql_fetchrow($result); +			$this->db->sql_freeresult($result); + +			$this->module_manager->move_module_by($row, 'mcp', 'move_down', 3); +		} + +		if ($module_class == 'ucp') +		{ +			// Move attachment module 4 down... +			$sql = 'SELECT * +				FROM ' . MODULES_TABLE . " +				WHERE module_basename = 'ucp_attachments' +					AND module_class = 'ucp' +					AND module_mode = 'attachments'"; +			$result = $this->db->sql_query($sql); +			$row = $this->db->sql_fetchrow($result); +			$this->db->sql_freeresult($result); + +			$this->module_manager->move_module_by($row, 'ucp', 'move_down', 4); + +			// Move notification options module 4 down... +			$sql = 'SELECT * +				FROM ' . MODULES_TABLE . " +				WHERE module_basename = 'ucp_notifications' +					AND module_class = 'ucp' +					AND module_mode = 'notification_options'"; +			$result = $this->db->sql_query($sql); +			$row = $this->db->sql_fetchrow($result); +			$this->db->sql_freeresult($result); + +			$this->module_manager->move_module_by($row, 'ucp', 'move_down', 4); + +			// Move OAuth module 5 down... +			$sql = 'SELECT * +				FROM ' . MODULES_TABLE . " +				WHERE module_basename = 'ucp_auth_link' +					AND module_class = 'ucp' +					AND module_mode = 'auth_link'"; +			$result = $this->db->sql_query($sql); +			$row = $this->db->sql_fetchrow($result); +			$this->db->sql_freeresult($result); + +			$this->module_manager->move_module_by($row, 'ucp', 'move_down', 5); +		} +	} + +	/** +	 * Add extra modules +	 * +	 * @param string	$module_class +	 */ +	protected function add_module_extras($module_class) +	{ +		foreach ($this->module_extras[$module_class] as $cat_name => $mods) +		{ +			$sql = 'SELECT module_id, left_id, right_id +				FROM ' . MODULES_TABLE . " +				WHERE module_langname = '" . $this->db->sql_escape($cat_name) . "' +					AND module_class = '" . $this->db->sql_escape($module_class) . "'"; +			$result = $this->db->sql_query_limit($sql, 1); +			$row2 = $this->db->sql_fetchrow($result); +			$this->db->sql_freeresult($result); + +			foreach ($mods as $mod_name) +			{ +				$sql = 'SELECT * +					FROM ' . MODULES_TABLE . " +					WHERE module_langname = '" . $this->db->sql_escape($mod_name) . "' +						AND module_class = '" . $this->db->sql_escape($module_class) . "' +						AND module_basename <> ''"; +				$result = $this->db->sql_query_limit($sql, 1); +				$row = $this->db->sql_fetchrow($result); +				$this->db->sql_freeresult($result); + +				$module_data = array( +					'module_basename'	=> $row['module_basename'], +					'module_enabled'	=> (int) $row['module_enabled'], +					'module_display'	=> (int) $row['module_display'], +					'parent_id'			=> (int) $row2['module_id'], +					'module_class'		=> $row['module_class'], +					'module_langname'	=> $row['module_langname'], +					'module_mode'		=> $row['module_mode'], +					'module_auth'		=> $row['module_auth'], +				); + +				$this->module_manager->update_module_data($module_data); + +				// Check for last sql error happened +				if ($this->db->get_sql_error_triggered()) +				{ +					$error = $this->db->sql_error($this->db->get_sql_error_sql()); +					$this->iohandler->add_error_message('INST_ERR_DB', $error['message']); +				} +			} +		} +	} + +	/** +	 * {@inheritdoc} +	 */ +	static public function get_step_count() +	{ +		return 1; +	} + +	/** +	 * {@inheritdoc} +	 */ +	public function get_task_lang_name() +	{ +		return 'TASK_ADD_MODULES'; +	} +} diff --git a/phpBB/phpbb/install/module/install_data/task/create_search_index.php b/phpBB/phpbb/install/module/install_data/task/create_search_index.php new file mode 100644 index 0000000000..8a2f6aa1de --- /dev/null +++ b/phpBB/phpbb/install/module/install_data/task/create_search_index.php @@ -0,0 +1,134 @@ +<?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. + * + */ + +namespace phpbb\install\module\install_data\task; + +use phpbb\auth\auth; +use phpbb\db\driver\driver_interface; +use phpbb\event\dispatcher; +use phpbb\config\config; +use phpbb\install\helper\container_factory; +use phpbb\language\language; +use phpbb\search\fulltext_native; +use phpbb\user; + +class create_search_index extends \phpbb\install\task_base +{ +	/** +	 * @var auth +	 */ +	protected $auth; + +	/** +	 * @var config +	 */ +	protected $config; + +	/** +	 * @var driver_interface +	 */ +	protected $db; + +	/** +	 * @var dispatcher +	 */ +	protected $phpbb_dispatcher; + +	/** +	 * @var language +	 */ +	protected $language; + +	/** +	 * @var user +	 */ +	protected $user; + +	/** +	 * @var string phpBB root path +	 */ +	protected $phpbb_root_path; + +	/** +	 * @var string PHP file extension +	 */ +	protected $php_ext; + +	/** +	 * Constructor +	 * +	 * @param config				$config				phpBB config +	 * @param container_factory		$container			Installer's DI container +	 * @param string				$phpbb_root_path	phpBB root path +	 * @param string				$php_ext			PHP file extension +	 */ +	public function __construct(config $config, container_factory $container, +								$phpbb_root_path, $php_ext) +	{ +		$this->auth				= $container->get('auth'); +		$this->config			= $config; +		$this->db				= $container->get('dbal.conn'); +		$this->language			= $container->get('language'); +		$this->phpbb_dispatcher = $container->get('dispatcher'); +		$this->user 			= $container->get('user'); + +		parent::__construct(true); +	} + +	/** +	 * {@inheritdoc} +	 */ +	public function run() +	{ +		// Make sure fulltext native load update is set +		$this->config->set('fulltext_native_load_upd', 1); + +		$error = false; +		$search = new fulltext_native( +			$error, +			$this->phpbb_root_path, +			$this->php_ext, +			$this->auth, +			$this->config, +			$this->db, +			$this->user, +			$this->phpbb_dispatcher +		); + +		$sql = 'SELECT post_id, post_subject, post_text, poster_id, forum_id +			FROM ' . POSTS_TABLE; +		$result = $this->db->sql_query($sql); + +		while ($row = $this->db->sql_fetchrow($result)) +		{ +			$search->index('post', $row['post_id'], $row['post_text'], $row['post_subject'], $row['poster_id'], $row['forum_id']); +		} +		$this->db->sql_freeresult($result); +	} + +	/** +	 * {@inheritdoc} +	 */ +	static public function get_step_count() +	{ +		return 1; +	} + +	/** +	 * {@inheritdoc} +	 */ +	public function get_task_lang_name() +	{ +		return 'TASK_CREATE_SEARCH_INDEX'; +	} +} | 
