diff options
Diffstat (limited to 'phpBB/phpbb/db')
| -rw-r--r-- | phpBB/phpbb/db/driver/postgres.php | 8 | ||||
| -rw-r--r-- | phpBB/phpbb/db/driver/sqlite3.php | 7 | ||||
| -rw-r--r-- | phpBB/phpbb/db/migration/data/v310/rc2.php | 31 | ||||
| -rw-r--r-- | phpBB/phpbb/db/migration/profilefield_base_migration.php | 91 | ||||
| -rw-r--r-- | phpBB/phpbb/db/migration/tool/config_text.php | 125 | 
5 files changed, 251 insertions, 11 deletions
diff --git a/phpBB/phpbb/db/driver/postgres.php b/phpBB/phpbb/db/driver/postgres.php index a67cd9f7c2..83e9fa51f6 100644 --- a/phpBB/phpbb/db/driver/postgres.php +++ b/phpBB/phpbb/db/driver/postgres.php @@ -15,10 +15,11 @@ namespace phpbb\db\driver;  /**  * PostgreSQL Database Abstraction Layer -* Minimum Requirement is Version 7.3+ +* Minimum Requirement is Version 8.3+  */  class postgres extends \phpbb\db\driver\driver  { +	var $multi_insert = true;  	var $last_query_text = '';  	var $connect_error = ''; @@ -101,11 +102,6 @@ class postgres extends \phpbb\db\driver\driver  		if ($this->db_connect_id)  		{ -			if (version_compare($this->sql_server_info(true), '8.2', '>=')) -			{ -				$this->multi_insert = true; -			} -  			if ($schema !== '')  			{  				@pg_query($this->db_connect_id, 'SET search_path TO ' . $schema); diff --git a/phpBB/phpbb/db/driver/sqlite3.php b/phpBB/phpbb/db/driver/sqlite3.php index 6511c755a0..0922229e0a 100644 --- a/phpBB/phpbb/db/driver/sqlite3.php +++ b/phpBB/phpbb/db/driver/sqlite3.php @@ -50,9 +50,10 @@ class sqlite3 extends \phpbb\db\driver\driver  			$this->dbo = new \SQLite3($this->server, SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE);  			$this->db_connect_id = true;  		} -		catch (Exception $e) +		catch (\Exception $e)  		{ -			return array('message' => $e->getMessage()); +			$this->connect_error = $e->getMessage(); +			return array('message' => $this->connect_error);  		}  		return true; @@ -280,7 +281,7 @@ class sqlite3 extends \phpbb\db\driver\driver  	*/  	protected function _sql_error()  	{ -		if (class_exists('SQLite3', false)) +		if (class_exists('SQLite3', false) && isset($this->dbo))  		{  			$error = array(  				'message'	=> $this->dbo->lastErrorMsg(), diff --git a/phpBB/phpbb/db/migration/data/v310/rc2.php b/phpBB/phpbb/db/migration/data/v310/rc2.php new file mode 100644 index 0000000000..e1323659da --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v310/rc2.php @@ -0,0 +1,31 @@ +<?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\db\migration\data\v310; + +class rc2 extends \phpbb\db\migration\migration +{ +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v310\rc1', +		); +	} + +	public function update_data() +	{ +		return array( +			array('config.update', array('version', '3.1.0-RC2')), +		); +	} +} diff --git a/phpBB/phpbb/db/migration/profilefield_base_migration.php b/phpBB/phpbb/db/migration/profilefield_base_migration.php index d416a9b228..9000949a7d 100644 --- a/phpBB/phpbb/db/migration/profilefield_base_migration.php +++ b/phpBB/phpbb/db/migration/profilefield_base_migration.php @@ -21,6 +21,23 @@ abstract class profilefield_base_migration extends \phpbb\db\migration\migration  	protected $profilefield_data; +	/** +	* Language data should be in array -> each language_data in separate key +	* array( +	*	array( +	*		'option_id'	=> value, +	*		'field_type'	=> value, +	*		'lang_value'	=> value, +	*	), +	*	array( +	*		'option_id'	=> value, +	*		'field_type'	=> value, +	*		'lang_value'	=> value, +	*	), +	* ) +	*/ +	protected $profilefield_language_data; +  	protected $user_column_name;  	public function effectively_installed() @@ -58,6 +75,13 @@ abstract class profilefield_base_migration extends \phpbb\db\migration\migration  		);  	} +	public function revert_data() +	{ +		return array( +			array('custom', array(array($this, 'delete_custom_profile_field_data'))), +		); +	} +  	public function create_custom_field()  	{  		$sql = 'SELECT MAX(field_order) as max_field_order @@ -83,8 +107,8 @@ abstract class profilefield_base_migration extends \phpbb\db\migration\migration  		while ($lang_id = (int) $this->db->sql_fetchfield('lang_id'))  		{  			$insert_buffer->insert(array( -				'field_id'				=> $field_id, -				'lang_id'				=> $lang_id, +				'field_id'				=> (int) $field_id, +				'lang_id'				=> (int) $lang_id,  				'lang_name'				=> $lang_name,  				'lang_explain'			=> '',  				'lang_default_value'	=> '', @@ -96,6 +120,69 @@ abstract class profilefield_base_migration extends \phpbb\db\migration\migration  	}  	/** +	* Create Custom profile fields languguage entries +	*/ +	public function create_language_entries() +	{ +		$field_id = $this->get_custom_profile_field_id(); + +		$insert_buffer = new \phpbb\db\sql_insert_buffer($this->db, PROFILE_FIELDS_LANG_TABLE); + +		$sql = 'SELECT lang_id +			FROM ' . LANG_TABLE; +		$result = $this->db->sql_query($sql); +		while ($lang_id = (int) $this->db->sql_fetchfield('lang_id')) +		{ +			foreach ($this->profilefield_language_data as $language_data) +			{ +				$insert_buffer->insert(array_merge(array( +					'field_id'	=> (int) $field_id, +					'lang_id'	=> (int) $lang_id, +				), $language_data)); +			} +		} +		$this->db->sql_freeresult($result); + +		$insert_buffer->flush(); +	} + +	/** +	* Clean database when reverting the migration +	*/ +	public function delete_custom_profile_field_data() +	{ +		$field_id = $this->get_custom_profile_field_id(); + +		$sql = 'DELETE FROM ' . PROFILE_FIELDS_TABLE . ' +			WHERE field_id = ' . (int) $field_id; +		$this->db->sql_query($sql); + +		$sql = 'DELETE FROM ' . PROFILE_LANG_TABLE . ' +			WHERE field_id = ' . (int) $field_id; +		$this->db->sql_query($sql); + +		$sql = 'DELETE FROM ' . PROFILE_FIELDS_LANG_TABLE . ' +			WHERE field_id = ' . (int) $field_id; +		$this->db->sql_query($sql); +	} + +	/** +	* Get custom profile field id +	* @return	int	custom profile filed id +	*/ +	public function get_custom_profile_field_id() +	{ +		$sql = 'SELECT field_id +			FROM ' . PROFILE_FIELDS_TABLE . " +			WHERE field_name = '" . $this->profilefield_name . "'"; +		$result = $this->db->sql_query($sql); +		$field_id = (int) $this->db->sql_fetchfield('field_id'); +		$this->db->sql_freeresult($result); + +		return $field_id; +	} + +	/**  	* @param int			$start		Start of staggering step  	* @return		mixed		int start of the next step, null if the end was reached  	*/ diff --git a/phpBB/phpbb/db/migration/tool/config_text.php b/phpBB/phpbb/db/migration/tool/config_text.php new file mode 100644 index 0000000000..bf8ac55023 --- /dev/null +++ b/phpBB/phpbb/db/migration/tool/config_text.php @@ -0,0 +1,125 @@ +<?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\db\migration\tool; + +/** +* Migration config_text tool +*/ +class config_text implements \phpbb\db\migration\tool\tool_interface +{ +	/** @var \phpbb\config\db_text */ +	protected $config_text; + +	/** +	* Constructor +	* +	* @param \phpbb\config\db_text $config_text +	*/ +	public function __construct(\phpbb\config\db_text $config_text) +	{ +		$this->config_text = $config_text; +	} + +	/** +	* {@inheritdoc} +	*/ +	public function get_name() +	{ +		return 'config_text'; +	} + +	/** +	* Add a config_text setting. +	* +	* @param string $config_name The name of the config_text setting +	* 	you would like to add +	* @param mixed $config_value The value of the config_text setting +	* @return null +	*/ +	public function add($config_name, $config_value) +	{ +		if (!is_null($this->config_text->get($config_name))) +		{ +			return; +		} + +		$this->config_text->set($config_name, $config_value); +	} + +	/** +	* Update an existing config_text setting. +	* +	* @param string $config_name The name of the config_text setting you would +	* 	like to update +	* @param mixed $config_value The value of the config_text setting +	* @return null +	* @throws \phpbb\db\migration\exception +	*/ +	public function update($config_name, $config_value) +	{ +		if (is_null($this->config_text->get($config_name))) +		{ +			throw new \phpbb\db\migration\exception('CONFIG_NOT_EXIST', $config_name); +		} + +		$this->config_text->set($config_name, $config_value); +	} + +	/** +	* Remove an existing config_text setting. +	* +	* @param string $config_name The name of the config_text setting you would +	* 	like to remove +	* @return null +	*/ +	public function remove($config_name) +	{ +		if (is_null($this->config_text->get($config_name))) +		{ +			return; +		} + +		$this->config_text->delete($config_name); +	} + +	/** +	* {@inheritdoc} +	*/ +	public function reverse() +	{ +		$arguments = func_get_args(); +		$original_call = array_shift($arguments); + +		$call = false; +		switch ($original_call) +		{ +			case 'add': +				$call = 'remove'; +			break; + +			case 'remove': +				$call = 'add'; +				if (sizeof($arguments) == 1) +				{ +					$arguments[] = ''; +				} +			break; +		} + +		if ($call) +		{ +			return call_user_func_array(array(&$this, $call), $arguments); +		} +	} +}  | 
