diff options
| -rw-r--r-- | phpBB/includes/mcp/mcp_main.php | 18 | ||||
| -rw-r--r-- | phpBB/language/en/posting.php | 10 | ||||
| -rw-r--r-- | phpBB/phpbb/db/migration/tool/config.php | 2 | ||||
| -rw-r--r-- | phpBB/phpbb/db/migration/tool/config_text.php | 2 | ||||
| -rw-r--r-- | phpBB/phpbb/db/migration/tool/module.php | 2 | ||||
| -rw-r--r-- | phpBB/phpbb/db/migration/tool/permission.php | 2 | ||||
| -rw-r--r-- | phpBB/phpbb/db/migrator.php | 92 | ||||
| -rw-r--r-- | phpBB/phpbb/db/migrator_output_handler_interface.php | 10 | ||||
| -rw-r--r-- | phpBB/posting.php | 1 | ||||
| -rw-r--r-- | phpBB/styles/prosilver/template/confirm_delete_body.html | 4 | 
10 files changed, 72 insertions, 71 deletions
diff --git a/phpBB/includes/mcp/mcp_main.php b/phpBB/includes/mcp/mcp_main.php index d0908a0d8b..b2441aed1b 100644 --- a/phpBB/includes/mcp/mcp_main.php +++ b/phpBB/includes/mcp/mcp_main.php @@ -877,11 +877,12 @@ function mcp_delete_topic($topic_ids, $is_soft = false, $soft_delete_reason = ''  		}  		$template->assign_vars(array( -			'S_SHADOW_TOPICS'		=> $only_shadow, -			'S_SOFTDELETED'			=> $only_softdeleted, -			'S_TOPIC_MODE'			=> true, -			'S_ALLOWED_DELETE'		=> $auth->acl_get('m_delete', $forum_id), -			'S_ALLOWED_SOFTDELETE'	=> $auth->acl_get('m_softdelete', $forum_id), +			'S_SHADOW_TOPICS'					=> $only_shadow, +			'S_SOFTDELETED'						=> $only_softdeleted, +			'S_TOPIC_MODE'						=> true, +			'S_ALLOWED_DELETE'					=> $auth->acl_get('m_delete', $forum_id), +			'S_ALLOWED_SOFTDELETE'				=> $auth->acl_get('m_softdelete', $forum_id), +			'DELETE_TOPIC_PERMANENTLY_EXPLAIN'	=> $user->lang('DELETE_TOPIC_PERMANENTLY', sizeof($topic_ids)),  		));  		$l_confirm = (sizeof($topic_ids) == 1) ? 'DELETE_TOPIC' : 'DELETE_TOPICS'; @@ -1116,9 +1117,10 @@ function mcp_delete_post($post_ids, $is_soft = false, $soft_delete_reason = '',  		}  		$template->assign_vars(array( -			'S_SOFTDELETED'			=> $only_softdeleted, -			'S_ALLOWED_DELETE'		=> $auth->acl_get('m_delete', $forum_id), -			'S_ALLOWED_SOFTDELETE'	=> $auth->acl_get('m_softdelete', $forum_id), +			'S_SOFTDELETED'						=> $only_softdeleted, +			'S_ALLOWED_DELETE'					=> $auth->acl_get('m_delete', $forum_id), +			'S_ALLOWED_SOFTDELETE'				=> $auth->acl_get('m_softdelete', $forum_id), +			'DELETE_POST_PERMANENTLY_EXPLAIN'	=> $user->lang('DELETE_POST_PERMANENTLY', sizeof($post_ids)),  		));  		$l_confirm = (sizeof($post_ids) == 1) ? 'DELETE_POST' : 'DELETE_POSTS'; diff --git a/phpBB/language/en/posting.php b/phpBB/language/en/posting.php index 924395ed44..ef52f59753 100644 --- a/phpBB/language/en/posting.php +++ b/phpBB/language/en/posting.php @@ -90,14 +90,20 @@ $lang = array_merge($lang, array(  	'DELETE_PERMANENTLY'		=> 'Delete permanently',  	'DELETE_POST_CONFIRM'		=> 'Are you sure you want to delete this post?',  	'DELETE_POST_PERMANENTLY_CONFIRM'	=> 'Are you sure you want to <strong>permanently</strong> delete this post?', -	'DELETE_POST_PERMANENTLY'	=> 'Permanently delete this post so it can not be recovered', +	'DELETE_POST_PERMANENTLY'	=> array( +		1	=> 'Permanently delete this post so it can not be recovered', +		2	=> 'Permanently delete %1$d posts so they can not be recovered', +	),  	'DELETE_POSTS_CONFIRM'		=> 'Are you sure you want to delete these posts?',  	'DELETE_POSTS_PERMANENTLY_CONFIRM'	=> 'Are you sure you want to <strong>permanently</strong> delete these posts?',  	'DELETE_REASON'				=> 'Reason for deletion',  	'DELETE_REASON_EXPLAIN'		=> 'The specified reason for deletion will be visible to moderators.',  	'DELETE_POST_WARN'			=> 'Delete this post',  	'DELETE_TOPIC_CONFIRM'		=> 'Are you sure you want to delete this topic?', -	'DELETE_TOPIC_PERMANENTLY'	=> 'Permanently delete this topic so it can not be recovered', +	'DELETE_TOPIC_PERMANENTLY'	=> array( +		1	=> 'Permanently delete this topic so it can not be recovered', +		2	=> 'Permanently delete %1$d topics so they can not be recovered', +	),  	'DELETE_TOPIC_PERMANENTLY_CONFIRM'	=> 'Are you sure you want to <strong>permanently</strong> delete this topic?',  	'DELETE_TOPICS_CONFIRM'		=> 'Are you sure you want to delete these topics?',  	'DELETE_TOPICS_PERMANENTLY_CONFIRM'	=> 'Are you sure you want to <strong>permanently</strong> delete these topics?', diff --git a/phpBB/phpbb/db/migration/tool/config.php b/phpBB/phpbb/db/migration/tool/config.php index 2a76409db5..33aa8ff026 100644 --- a/phpBB/phpbb/db/migration/tool/config.php +++ b/phpBB/phpbb/db/migration/tool/config.php @@ -152,7 +152,7 @@ class config implements \phpbb\db\migration\tool\tool_interface  			break;  			case 'reverse': -				// It's like double negative +				// Reversing a reverse is just the call itself  				$call = array_shift($arguments);  			break;  		} diff --git a/phpBB/phpbb/db/migration/tool/config_text.php b/phpBB/phpbb/db/migration/tool/config_text.php index 21b8a8b3a0..54b45f6f6d 100644 --- a/phpBB/phpbb/db/migration/tool/config_text.php +++ b/phpBB/phpbb/db/migration/tool/config_text.php @@ -117,7 +117,7 @@ class config_text implements \phpbb\db\migration\tool\tool_interface  			break;  			case 'reverse': -				// It's like double negative +				// Reversing a reverse is just the call itself  				$call = array_shift($arguments);  			break;  		} diff --git a/phpBB/phpbb/db/migration/tool/module.php b/phpBB/phpbb/db/migration/tool/module.php index a6baf40dc1..59719db9a4 100644 --- a/phpBB/phpbb/db/migration/tool/module.php +++ b/phpBB/phpbb/db/migration/tool/module.php @@ -456,7 +456,7 @@ class module implements \phpbb\db\migration\tool\tool_interface  			break;  			case 'reverse': -				// It's like double negative +				// Reversing a reverse is just the call itself  				$call = array_shift($arguments);  			break;  		} diff --git a/phpBB/phpbb/db/migration/tool/permission.php b/phpBB/phpbb/db/migration/tool/permission.php index 3a1e2e344b..9688420025 100644 --- a/phpBB/phpbb/db/migration/tool/permission.php +++ b/phpBB/phpbb/db/migration/tool/permission.php @@ -639,7 +639,7 @@ class permission implements \phpbb\db\migration\tool\tool_interface  			break;  			case 'reverse': -				// It's like double negative +				// Reversing a reverse is just the call itself  				$call = array_shift($arguments);  			break;  		} diff --git a/phpBB/phpbb/db/migrator.php b/phpBB/phpbb/db/migrator.php index 65db4b74bf..4c4c0a8672 100644 --- a/phpBB/phpbb/db/migrator.php +++ b/phpBB/phpbb/db/migrator.php @@ -320,8 +320,10 @@ class migrator  			$total_time = (is_array($state['migration_data_state']) && isset($state['migration_data_state']['_total_time'])) ?  				$state['migration_data_state']['_total_time'] : 0.0;  			$elapsed_time = microtime(true); +  			$steps = $this->helper->get_schema_steps($migration->update_schema());  			$result = $this->process_data_step($steps, $state['migration_data_state']); +  			$elapsed_time = microtime(true) - $elapsed_time;  			$total_time += $elapsed_time; @@ -355,7 +357,9 @@ class migrator  				$total_time = (is_array($state['migration_data_state']) && isset($state['migration_data_state']['_total_time'])) ?  					$state['migration_data_state']['_total_time'] : 0.0;  				$elapsed_time = microtime(true); +  				$result = $this->process_data_step($migration->update_data(), $state['migration_data_state']); +  				$elapsed_time = microtime(true) - $elapsed_time;  				$total_time += $elapsed_time; @@ -379,7 +383,10 @@ class migrator  			}  			catch (\phpbb\db\migration\exception $e)  			{ -				// Revert the schema changes +				// Reset data state and revert the schema changes +				$state['migration_data_state'] = ''; +				$this->set_migration_state($name, $state); +  				$this->revert_do($name);  				throw $e; @@ -502,6 +509,11 @@ class migrator  	*/  	protected function process_data_step($steps, $state, $revert = false)  	{ +		if (sizeof($steps) === 0) +		{ +			return true; +		} +  		$state = is_array($state) ? $state : false;  		// reverse order of steps if reverting @@ -510,65 +522,45 @@ class migrator  			$steps = array_reverse($steps);  		} -		end($steps); -		$last_step_identifier = key($steps); - -		foreach ($steps as $step_identifier => $step) +		$step = $last_result = 0; +		if ($state)  		{ -			$last_result = 0; -			if ($state) -			{ -				// Continue until we reach the step that matches the last step called -				if ($state['step'] != $step_identifier) -				{ -					continue; -				} - -				// We send the result from last time to the callable function -				$last_result = $state['result']; +			$step = $state['step']; -				// Set state to false since we reached the point we were at -				$state = false; - -				// There is a tendency to get stuck in some cases -				if ($last_result === null || $last_result === true) -				{ -					continue; -				} -			} +			// We send the result from last time to the callable function +			$last_result = $state['result']; +		} -			try +		try +		{ +			// Result will be null or true if everything completed correctly +			// Stop after each update step, to let the updater control the script runtime +			$result = $this->run_step($steps[$step], $last_result, $revert); +			if (($result !== null && $result !== true) || $step + 1 < sizeof($steps))  			{ -				// Result will be null or true if everything completed correctly -				// After any schema update step we allow to pause, since -				// database changes can take quite some time -				$result = $this->run_step($step, $last_result, $revert); -				if (($result !== null && $result !== true) || -					(strpos($step[0], 'dbtools') === 0 && $step_identifier !== $last_step_identifier)) -				{ -					return array( -						'result'	=> $result, -						'step'		=> $step_identifier, -					); -				} +				return array( +					'result'	=> $result, +					// Move on if the last call finished +					'step'		=> ($result !== null && $result !== true) ? $step : $step + 1, +				);  			} -			catch (\phpbb\db\migration\exception $e) +		} +		catch (\phpbb\db\migration\exception $e) +		{ +			// We should try rolling back here +			foreach ($steps as $reverse_step_identifier => $reverse_step)  			{ -				// We should try rolling back here -				foreach ($steps as $reverse_step_identifier => $reverse_step) +				// If we've reached the current step we can break because we reversed everything that was run +				if ($reverse_step_identifier == $step)  				{ -					// If we've reached the current step we can break because we reversed everything that was run -					if ($reverse_step_identifier == $step_identifier) -					{ -						break; -					} - -					// Reverse the step that was run -					$result = $this->run_step($reverse_step, false, !$revert); +					break;  				} -				throw $e; +				// Reverse the step that was run +				$result = $this->run_step($reverse_step, false, !$revert);  			} + +			throw $e;  		}  		return true; diff --git a/phpBB/phpbb/db/migrator_output_handler_interface.php b/phpBB/phpbb/db/migrator_output_handler_interface.php index a923af99f6..9947b51dcc 100644 --- a/phpBB/phpbb/db/migrator_output_handler_interface.php +++ b/phpBB/phpbb/db/migrator_output_handler_interface.php @@ -15,11 +15,11 @@ namespace phpbb\db;  interface migrator_output_handler_interface  { -	const VERBOSITY_QUIET        = 0; -	const VERBOSITY_NORMAL       = 1; -	const VERBOSITY_VERBOSE      = 2; -	const VERBOSITY_VERY_VERBOSE = 3; -	const VERBOSITY_DEBUG        = 4; +	const VERBOSITY_QUIET        = 16; +	const VERBOSITY_NORMAL       = 32; +	const VERBOSITY_VERBOSE      = 64; +	const VERBOSITY_VERY_VERBOSE = 128; +	const VERBOSITY_DEBUG        = 256;  	/**  	 * Write output using the configured closure. diff --git a/phpBB/posting.php b/phpBB/posting.php index 653740ae1c..f1e8452305 100644 --- a/phpBB/posting.php +++ b/phpBB/posting.php @@ -1741,6 +1741,7 @@ $page_data = array(  	'L_POST_A'					=> $page_title,  	'L_ICON'					=> ($mode == 'reply' || $mode == 'quote' || ($mode == 'edit' && $post_id != $post_data['topic_first_post_id'])) ? $user->lang['POST_ICON'] : $user->lang['TOPIC_ICON'],  	'L_MESSAGE_BODY_EXPLAIN'	=> $user->lang('MESSAGE_BODY_EXPLAIN', (int) $config['max_post_chars']), +	'L_DELETE_POST_PERMANENTLY'	=> $user->lang('DELETE_POST_PERMANENTLY', 1),  	'FORUM_NAME'			=> $post_data['forum_name'],  	'FORUM_DESC'			=> ($post_data['forum_desc']) ? generate_text_for_display($post_data['forum_desc'], $post_data['forum_desc_uid'], $post_data['forum_desc_bitfield'], $post_data['forum_desc_options']) : '', diff --git a/phpBB/styles/prosilver/template/confirm_delete_body.html b/phpBB/styles/prosilver/template/confirm_delete_body.html index f0a7ab2bdb..fbd881a940 100644 --- a/phpBB/styles/prosilver/template/confirm_delete_body.html +++ b/phpBB/styles/prosilver/template/confirm_delete_body.html @@ -7,7 +7,7 @@  			<label>  				<strong>{L_DELETE_PERMANENTLY}{L_COLON}</strong>  				<input id="delete_permanent" name="delete_permanent" type="checkbox" value="1" {S_CHECKED_PERMANENT} /> -				<!-- IF S_TOPIC_MODE -->{L_DELETE_TOPIC_PERMANENTLY}<!-- ELSE -->{L_DELETE_POST_PERMANENTLY}<!-- ENDIF --> +				<!-- IF S_TOPIC_MODE -->{DELETE_TOPIC_PERMANENTLY_EXPLAIN}<!-- ELSE -->{DELETE_POST_PERMANENTLY_EXPLAIN}<!-- ENDIF -->  			</label>  		<!-- ENDIF --> @@ -43,7 +43,7 @@  				<dd>  					<label for="delete_permanent">  						<input id="delete_permanent" name="delete_permanent" type="checkbox" value="1" {S_CHECKED_PERMANENT} /> -						<!-- IF S_TOPIC_MODE -->{L_DELETE_TOPIC_PERMANENTLY}<!-- ELSE -->{L_DELETE_POST_PERMANENTLY}<!-- ENDIF --> +						<!-- IF S_TOPIC_MODE -->{DELETE_TOPIC_PERMANENTLY_EXPLAIN}<!-- ELSE -->{DELETE_POST_PERMANENTLY_EXPLAIN}<!-- ENDIF -->  					</label>  				</dd>  			</dl>  | 
