diff options
Diffstat (limited to 'phpBB/includes/acp/acp_extensions.php')
| -rw-r--r-- | phpBB/includes/acp/acp_extensions.php | 187 | 
1 files changed, 136 insertions, 51 deletions
diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php index a1cb2108e7..6ac70ce3a8 100644 --- a/phpBB/includes/acp/acp_extensions.php +++ b/phpBB/includes/acp/acp_extensions.php @@ -38,7 +38,7 @@ class acp_extensions  	private $phpbb_container;  	private $php_ini; -	function main() +	function main($id, $mode)  	{  		// Start the page  		global $config, $user, $template, $request, $phpbb_extension_manager, $phpbb_root_path, $phpbb_log, $phpbb_dispatcher, $phpbb_container; @@ -172,23 +172,27 @@ class acp_extensions  				}  				$extension = $this->ext_manager->get_extension($ext_name); -				if (!$extension->is_enableable()) -				{ -					trigger_error($this->user->lang['EXTENSION_NOT_ENABLEABLE'] . adm_back_link($this->u_action), E_USER_WARNING); -				} + +				$this->check_is_enableable($extension);  				if ($this->ext_manager->is_enabled($ext_name))  				{  					redirect($this->u_action);  				} -				$this->tpl_name = 'acp_ext_enable'; - -				$this->template->assign_vars(array( -					'PRE'				=> true, -					'L_CONFIRM_MESSAGE'	=> $this->user->lang('EXTENSION_ENABLE_CONFIRM', $md_manager->get_metadata('display-name')), -					'U_ENABLE'			=> $this->u_action . '&action=enable&ext_name=' . urlencode($ext_name) . '&hash=' . generate_link_hash('enable.' . $ext_name), -				)); +				if (confirm_box(true)) +				{ +					redirect($this->u_action . '&action=enable&ext_name=' . urlencode($ext_name) . '&hash=' . generate_link_hash('enable.' . $ext_name)); +				} +				else +				{ +					confirm_box(false, $this->user->lang('EXTENSION_ENABLE_CONFIRM', $md_manager->get_metadata('display-name')), build_hidden_fields(array( +						'i'			=> $id, +						'mode'		=> $mode, +						'action'	=> 'enable_pre', +						'ext_name'	=> $ext_name, +					))); +				}  			break;  			case 'enable': @@ -203,10 +207,8 @@ class acp_extensions  				}  				$extension = $this->ext_manager->get_extension($ext_name); -				if (!$extension->is_enableable()) -				{ -					trigger_error($this->user->lang['EXTENSION_NOT_ENABLEABLE'] . adm_back_link($this->u_action), E_USER_WARNING); -				} + +				$this->check_is_enableable($extension);  				try  				{ @@ -215,9 +217,8 @@ class acp_extensions  						// Are we approaching the time limit? If so we want to pause the update and continue after refreshing  						if ((time() - $start_time) >= $safe_time_limit)  						{ -							$this->template->assign_var('S_NEXT_STEP', true); -  							meta_refresh(0, $this->u_action . '&action=enable&ext_name=' . urlencode($ext_name) . '&hash=' . generate_link_hash('enable.' . $ext_name)); +							trigger_error('EXTENSION_ENABLE_IN_PROGRESS', E_USER_NOTICE);  						}  					} @@ -233,14 +234,22 @@ class acp_extensions  				}  				catch (\phpbb\db\migration\exception $e)  				{ -					$this->template->assign_var('MIGRATOR_ERROR', $e->getLocalisedMessage($this->user)); +					trigger_error($this->user->lang('MIGRATION_EXCEPTION_ERROR', $e->getLocalisedMessage($this->user)), E_USER_WARNING);  				} -				$this->tpl_name = 'acp_ext_enable'; - -				$this->template->assign_vars(array( -					'U_RETURN'		=> $this->u_action . '&action=list', -				)); +				if ($this->request->is_ajax()) +				{ +					$actions = $this->output_actions('enabled', [ +						'DISABLE'	=> $this->u_action . '&action=disable_pre&ext_name=' . urlencode($ext_name), +					]); + +					$json_response = new \phpbb\json_response; +					$json_response->send(array( +						'EXT_ENABLE_SUCCESS'	=> true, +						'ACTIONS'				=> $actions, +					)); +				} +				trigger_error($this->user->lang('EXTENSION_ENABLE_SUCCESS') . adm_back_link($this->u_action), E_USER_NOTICE);  			break;  			case 'disable_pre': @@ -249,13 +258,19 @@ class acp_extensions  					redirect($this->u_action);  				} -				$this->tpl_name = 'acp_ext_disable'; - -				$this->template->assign_vars(array( -					'PRE'				=> true, -					'L_CONFIRM_MESSAGE'	=> $this->user->lang('EXTENSION_DISABLE_CONFIRM', $md_manager->get_metadata('display-name')), -					'U_DISABLE'			=> $this->u_action . '&action=disable&ext_name=' . urlencode($ext_name) . '&hash=' . generate_link_hash('disable.' . $ext_name), -				)); +				if (confirm_box(true)) +				{ +					redirect($this->u_action . '&action=disable&ext_name=' . urlencode($ext_name) . '&hash=' . generate_link_hash('disable.' . $ext_name)); +				} +				else +				{ +					confirm_box(false, $this->user->lang('EXTENSION_DISABLE_CONFIRM', $md_manager->get_metadata('display-name')), build_hidden_fields(array( +						'i'			=> $id, +						'mode'		=> $mode, +						'action'	=> 'disable_pre', +						'ext_name'	=> $ext_name, +					))); +				}  			break;  			case 'disable': @@ -272,15 +287,25 @@ class acp_extensions  						$this->template->assign_var('S_NEXT_STEP', true);  						meta_refresh(0, $this->u_action . '&action=disable&ext_name=' . urlencode($ext_name) . '&hash=' . generate_link_hash('disable.' . $ext_name)); +						trigger_error('EXTENSION_DISABLE_IN_PROGRESS', E_USER_NOTICE);  					}  				}  				$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_EXT_DISABLE', time(), array($ext_name)); -				$this->tpl_name = 'acp_ext_disable'; - -				$this->template->assign_vars(array( -					'U_RETURN'	=> $this->u_action . '&action=list', -				)); +				if ($this->request->is_ajax()) +				{ +					$actions = $this->output_actions('disabled', [ +						'ENABLE'		=> $this->u_action . '&action=enable_pre&ext_name=' . urlencode($ext_name), +						'DELETE_DATA'	=> $this->u_action . '&action=delete_data_pre&ext_name=' . urlencode($ext_name), +					]); + +					$json_response = new \phpbb\json_response; +					$json_response->send(array( +						'EXT_DISABLE_SUCCESS'	=> true, +						'ACTIONS'				=> $actions, +					)); +				} +				trigger_error($this->user->lang('EXTENSION_DISABLE_SUCCESS') . adm_back_link($this->u_action), E_USER_NOTICE);  			break;  			case 'delete_data_pre': @@ -288,13 +313,20 @@ class acp_extensions  				{  					redirect($this->u_action);  				} -				$this->tpl_name = 'acp_ext_delete_data'; -				$this->template->assign_vars(array( -					'PRE'				=> true, -					'L_CONFIRM_MESSAGE'	=> $this->user->lang('EXTENSION_DELETE_DATA_CONFIRM', $md_manager->get_metadata('display-name')), -					'U_PURGE'			=> $this->u_action . '&action=delete_data&ext_name=' . urlencode($ext_name) . '&hash=' . generate_link_hash('delete_data.' . $ext_name), -				)); +				if (confirm_box(true)) +				{ +					redirect($this->u_action . '&action=delete_data&ext_name=' . urlencode($ext_name) . '&hash=' . generate_link_hash('delete_data.' . $ext_name)); +				} +				else +				{ +					confirm_box(false, $this->user->lang('EXTENSION_DELETE_DATA_CONFIRM', $md_manager->get_metadata('display-name')), build_hidden_fields(array( +						'i'			=> $id, +						'mode'		=> $mode, +						'action'	=> 'delete_data_pre', +						'ext_name'	=> $ext_name, +					))); +				}  			break;  			case 'delete_data': @@ -313,20 +345,29 @@ class acp_extensions  							$this->template->assign_var('S_NEXT_STEP', true);  							meta_refresh(0, $this->u_action . '&action=delete_data&ext_name=' . urlencode($ext_name) . '&hash=' . generate_link_hash('delete_data.' . $ext_name)); +							trigger_error('EXTENSION_DELETE_DATA_IN_PROGRESS', E_USER_NOTICE);  						}  					}  					$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_EXT_PURGE', time(), array($ext_name));  				}  				catch (\phpbb\db\migration\exception $e)  				{ -					$this->template->assign_var('MIGRATOR_ERROR', $e->getLocalisedMessage($this->user)); +					trigger_error($this->user->lang('MIGRATION_EXCEPTION_ERROR', $e->getLocalisedMessage($this->user)), E_USER_WARNING);  				} -				$this->tpl_name = 'acp_ext_delete_data'; - -				$this->template->assign_vars(array( -					'U_RETURN'	=> $this->u_action . '&action=list', -				)); +				if ($this->request->is_ajax()) +				{ +					$actions = $this->output_actions('disabled', [ +						'ENABLE'		=> $this->u_action . '&action=enable_pre&ext_name=' . urlencode($ext_name), +					]); + +					$json_response = new \phpbb\json_response; +					$json_response->send(array( +						'EXT_DELETE_DATA_SUCCESS'	=> true, +						'ACTIONS'					=> $actions, +					)); +				} +				trigger_error($this->user->lang('EXTENSION_DELETE_DATA_SUCCESS') . adm_back_link($this->u_action), E_USER_NOTICE);  			break;  			case 'details': @@ -605,17 +646,37 @@ class acp_extensions  	*  	* @param string $block  	* @param array $actions +	* @return array List of actions to be performed on the extension  	*/  	private function output_actions($block, $actions)  	{ -		foreach ($actions as $lang => $url) +		$vars_ary = array(); +		foreach ($actions as $lang => $options)  		{ -			$this->template->assign_block_vars($block . '.actions', array( +			$url = $options; +			if (is_array($options)) +			{ +				$url = $options['url']; +			} + +			$vars = array(  				'L_ACTION'			=> $this->user->lang('EXTENSION_' . $lang),  				'L_ACTION_EXPLAIN'	=> (isset($this->user->lang['EXTENSION_' . $lang . '_EXPLAIN'])) ? $this->user->lang('EXTENSION_' . $lang . '_EXPLAIN') : '',  				'U_ACTION'			=> $url, -			)); +				'ACTION_AJAX'		=> 'ext_' . strtolower($lang), +			); + +			if (isset($options['color'])) +			{ +				$vars['COLOR'] = $options['color']; +			} + +			$this->template->assign_block_vars($block . '.actions', $vars); + +			$vars_ary[] = $vars;  		} + +		return $vars_ary;  	}  	/** @@ -662,4 +723,28 @@ class acp_extensions  			));  		}  	} + +	/** +	* Checks whether the extension can be enabled. Triggers error if not. +	* Error message can be set by the extension. +	* +	* @param \phpbb\extension\extension_interface $extension Extension to check +	*/ +	protected function check_is_enableable(\phpbb\extension\extension_interface $extension) +	{ +		$message = $extension->is_enableable(); +		if ($message !== true) +		{ +			if (empty($message)) +			{ +				$message = $this->user->lang('EXTENSION_NOT_ENABLEABLE'); +			} +			else if (is_array($message)) +			{ +				$message = implode('<br>', $message); +			} + +			trigger_error($message . adm_back_link($this->u_action), E_USER_WARNING); +		} +	}  }  | 
