[ticket/13740] Add navigation bar support for the installer

Also added various UI elements and texts.
[ci skip]

PHPBB3-13740
This commit is contained in:
CHItA 2015-06-11 19:32:11 +02:00 committed by Mate Bartus
parent 1b81bf5b23
commit db4cfa7df6
27 changed files with 495 additions and 54 deletions

View file

@ -43,7 +43,7 @@
<li<!-- IF l_block1.S_SELECTED --> id="activemenu"<!-- ENDIF -->><a href="{l_block1.U_TITLE}"><span>{l_block1.L_TITLE}</span></a></li> <li<!-- IF l_block1.S_SELECTED --> id="activemenu"<!-- ENDIF -->><a href="{l_block1.U_TITLE}"><span>{l_block1.L_TITLE}</span></a></li>
<!-- END l_block1 --> <!-- END l_block1 -->
<!-- BEGIN l_block2 --> <!-- BEGIN l_block2 -->
<li<!-- IF l_block2.S_SELECTED --> id="activemenu"<!-- ENDIF -->><span<!-- IF l_block2.S_COMPLETE --> class="completed"<!-- ENDIF -->>{l_block2.L_TITLE}</span></li> <li<!-- IF l_block2.S_SELECTED --> id="activemenu"<!-- ENDIF -->><span<!-- IF l_block2.S_COMPLETE --> class="completed"<!-- ENDIF --> id="installer-stage-{l_block2.STAGE_NAME}">{l_block2.L_TITLE}</span></li>
<!-- END l_block2 --> <!-- END l_block2 -->
</ul> </ul>
</div> </div>

View file

@ -1,6 +1,8 @@
<form id="<!-- IF FORM_ID -->{FORM_ID}<!-- ELSE -->install_install<!-- ENDIF -->" method="POST" action="{U_ACTION}"> <form id="<!-- IF FORM_ID -->{FORM_ID}<!-- ELSE -->install_install<!-- ENDIF -->" method="POST" action="{U_ACTION}">
<!-- IF .options --> <!-- IF .options -->
<!-- IF S_FORM_ELEM_COUNT > 1 -->
<fieldset> <fieldset>
<!-- ENDIF -->
<!-- BEGIN options --> <!-- BEGIN options -->
<!-- IF options.S_LEGEND --> <!-- IF options.S_LEGEND -->
@ -40,7 +42,9 @@
</dd> </dd>
</dl> </dl>
<!-- ELSE --> <!-- ELSE -->
<!-- IF S_FORM_ELEM_COUNT > 1 -->
</fieldset> </fieldset>
<!-- ENDIF -->
<fieldset class="submit-buttons"> <fieldset class="submit-buttons">
<legend>{L_SUBMIT}</legend> <legend>{L_SUBMIT}</legend>
<input class="button1" type="submit" name="{options.KEY}" value="{options.TITLE}" /> <input class="button1" type="submit" name="{options.KEY}" value="{options.TITLE}" />

View file

@ -1,11 +1,11 @@
<!-- INCLUDE install_header.html --> <!-- INCLUDE install_header.html -->
<h1>{L_INSTALL}</h1> <h1>{TITLE}</h1>
{CONTENT} <p>{CONTENT}</p>
<!-- IF SHOW_INSTALL_START_FORM --> <!-- IF SHOW_INSTALL_START_FORM -->
<form id="install_install" method="post" action="{U_ACTION}"> <form id="install_install" method="post" action="{U_ACTION}">
<fieldset class="submit-buttons"> <fieldset class="submit-buttons">
<legend>{L_SUBMIT}</legend> <legend>{L_SUBMIT}</legend>
<input name="install" type="submit" value="{L_INSTALL}" /> <input class="button1" name="install" type="submit" value="{L_INSTALL}" />
</fieldset> </fieldset>
</form> </form>
<!-- ENDIF --> <!-- ENDIF -->

View file

@ -95,6 +95,45 @@
interceptFormSubmit($form); interceptFormSubmit($form);
} }
/**
* Handles navigation status updates
*
* @param navObj
*/
function updateNavbarStatus(navObj) {
var navID, $stage, $stageListItem, $active;
$active = $('#activemenu');
if (navObj.hasOwnProperty('finished')) {
// This should be an Array
var navItems = navObj.finished;
for (var i = 0; i < navItems.length; i++) {
navID = 'installer-stage-' + navItems[i];
$stage = $('#' + navID);
$stageListItem = $stage.parent();
if ($active.length && $active.is($stageListItem)) {
$active.removeAttr('id');
}
$stage.addClass('completed');
}
}
if (navObj.hasOwnProperty('active')) {
navID = 'installer-stage-' + navObj.active;
$stage = $('#' + navID);
$stageListItem = $stage.parent();
if ($active.length && !$active.is($stageListItem)) {
$active.removeAttr('id');
}
$stageListItem.attr('id', 'activemenu');
}
}
/** /**
* Renders progress bar * Renders progress bar
* *
@ -166,6 +205,10 @@
if (responseObject.hasOwnProperty('progress')) { if (responseObject.hasOwnProperty('progress')) {
setProgress(responseObject.progress); setProgress(responseObject.progress);
} }
if (responseObject.hasOwnProperty('nav')) {
updateNavbarStatus(responseObject.nav);
}
} }
/** /**
@ -231,6 +274,14 @@
}, 10); }, 10);
} }
/**
* Resets the polling timer
*/
function resetPolling() {
clearInterval(pollTimer);
nextReadPosition = 0;
}
/** /**
* Sets up timer for processing the streamed HTTP response * Sets up timer for processing the streamed HTTP response
* *
@ -240,15 +291,7 @@
resetPolling(); resetPolling();
pollTimer = setInterval(function () { pollTimer = setInterval(function () {
pollContent(xhReq); pollContent(xhReq);
}, 500); }, 250);
}
/**
* Resets the polling timer
*/
function resetPolling() {
clearInterval(pollTimer);
nextReadPosition = 0;
} }
/** /**

View file

@ -23,7 +23,10 @@ services:
class: phpbb\install\controller\install class: phpbb\install\controller\install
arguments: arguments:
- @phpbb.installer.controller.helper - @phpbb.installer.controller.helper
- @installer.helper.config
- @installer.helper.iohandler_factory - @installer.helper.iohandler_factory
- @installer.navigation.provider
- @language
- @template - @template
- @request - @request
- @installer.installer.install - @installer.installer.install

View file

@ -13,6 +13,7 @@ services:
- @installer.helper.database - @installer.helper.database
- @installer.helper.iohandler - @installer.helper.iohandler
# Please note, that the name of this module is hard coded in the installer service
installer.module.requirements_install: installer.module.requirements_install:
class: phpbb\install\module\requirements\module class: phpbb\install\module\requirements\module
parent: installer.module_base parent: installer.module_base

View file

@ -157,7 +157,18 @@ class helper
{ {
// @todo Sort navs by order // @todo Sort navs by order
foreach ($entry[0] as $sub_entry) foreach ($entry[0] as $name => $sub_entry)
{
if (isset($sub_entry['stage']) && $sub_entry['stage'] === true)
{
$this->template->assign_block_vars('l_block2', array(
'L_TITLE' => $this->language->lang($sub_entry['label']),
'S_SELECTED' => (isset($sub_entry['selected']) && $sub_entry['selected'] === true),
'S_COMPLETE' => (isset($sub_entry['completed']) && $sub_entry['completed'] === true),
'STAGE_NAME' => $name,
));
}
else
{ {
$this->template->assign_block_vars('l_block1', array( $this->template->assign_block_vars('l_block1', array(
'L_TITLE' => $this->language->lang($sub_entry['label']), 'L_TITLE' => $this->language->lang($sub_entry['label']),
@ -168,6 +179,7 @@ class helper
} }
} }
} }
}
/** /**
* Returns path from route name * Returns path from route name

View file

@ -13,7 +13,16 @@
namespace phpbb\install\controller; namespace phpbb\install\controller;
use phpbb\install\helper\config;
use phpbb\install\helper\navigation\navigation_provider;
use Symfony\Component\HttpFoundation\StreamedResponse; use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Component\HttpFoundation\Response;
use phpbb\install\helper\iohandler\factory;
use phpbb\install\controller\helper;
use phpbb\template\template;
use phpbb\request\request_interface;
use phpbb\install\installer;
use phpbb\language\language;
/** /**
* Controller for installing phpBB * Controller for installing phpBB
@ -21,27 +30,42 @@ use Symfony\Component\HttpFoundation\StreamedResponse;
class install class install
{ {
/** /**
* @var \phpbb\install\controller\helper * @var helper
*/ */
protected $controller_helper; protected $controller_helper;
/** /**
* @var \phpbb\install\helper\iohandler\factory * @var config
*/
protected $installer_config;
/**
* @var factory
*/ */
protected $iohandler_factory; protected $iohandler_factory;
/** /**
* @var \phpbb\template\template * @var navigation_provider
*/
protected $menu_provider;
/**
* @var language
*/
protected $language;
/**
* @var template
*/ */
protected $template; protected $template;
/** /**
* @var \phpbb\request\request_interface * @var request_interface
*/ */
protected $request; protected $request;
/** /**
* @var \phpbb\install\installer * @var installer
*/ */
protected $installer; protected $installer;
@ -49,14 +73,20 @@ class install
* Constructor * Constructor
* *
* @param helper $helper * @param helper $helper
* @param \phpbb\install\helper\iohandler\factory $factory * @param config $install_config
* @param \phpbb\request\request_interface $request * @param factory $factory
* @param \phpbb\install\installer $installer * @param navigation_provider $nav_provider
* @param language $language
* @param request_interface $request
* @param installer $installer
*/ */
public function __construct(helper $helper, \phpbb\install\helper\iohandler\factory $factory, \phpbb\template\template $template, \phpbb\request\request_interface $request, \phpbb\install\installer $installer) public function __construct(helper $helper, config $install_config, factory $factory, navigation_provider $nav_provider, language $language, template $template, request_interface $request, installer $installer)
{ {
$this->controller_helper = $helper; $this->controller_helper = $helper;
$this->installer_config = $install_config;
$this->iohandler_factory = $factory; $this->iohandler_factory = $factory;
$this->menu_provider = $nav_provider;
$this->language = $language;
$this->template = $template; $this->template = $template;
$this->request = $request; $this->request = $request;
$this->installer = $installer; $this->installer = $installer;
@ -65,7 +95,7 @@ class install
/** /**
* Controller logic * Controller logic
* *
* @return \Symfony\Component\HttpFoundation\Response|StreamedResponse * @return Response|StreamedResponse
*/ */
public function handle() public function handle()
{ {
@ -86,13 +116,38 @@ class install
} }
// Set the appropriate input-output handler // Set the appropriate input-output handler
//$this->installer->set_iohandler($this->iohandler_factory->get()); $this->installer->set_iohandler($this->iohandler_factory->get());
// Set up navigation
$nav_data = $this->installer_config->get_navigation_data();
/** @var \phpbb\install\helper\iohandler\iohandler_interface $iohandler */
$iohandler = $this->iohandler_factory->get();
// Set active navigation stage
if (isset($nav_data['active']) && is_array($nav_data['active']))
{
$iohandler->set_active_stage_menu($nav_data['active']);
$this->menu_provider->set_nav_property($nav_data['active'], array(
'selected' => true,
'completed' => false,
));
}
// Set finished navigation stages
if (isset($nav_data['finished']) && is_array($nav_data['finished']))
{
foreach ($nav_data['finished'] as $finished_stage)
{
$iohandler->set_finished_stage_menu($finished_stage);
$this->menu_provider->set_nav_property($finished_stage, array(
'selected' => false,
'completed' => true,
));
}
}
if ($this->request->is_ajax()) if ($this->request->is_ajax())
{ {
// @todo: remove this line, and use the above
$this->installer->set_iohandler($this->iohandler_factory->get());
$installer = $this->installer; $installer = $this->installer;
$response = new StreamedResponse(); $response = new StreamedResponse();
$response->setCallback(function() use ($installer) { $response->setCallback(function() use ($installer) {
@ -106,9 +161,20 @@ class install
// Determine whether the installation was started or not // Determine whether the installation was started or not
if (true) if (true)
{ {
// Set active stage
$this->menu_provider->set_nav_property(
array('install', 0, 'introduction'),
array(
'selected' => true,
'completed' => false,
)
);
// If not, let's render the welcome page // If not, let's render the welcome page
$this->template->assign_vars(array( $this->template->assign_vars(array(
'SHOW_INSTALL_START_FORM' => true, 'SHOW_INSTALL_START_FORM' => true,
'TITLE' => $this->language->lang('INSTALL_INTRO'),
'CONTENT' => $this->language->lang('INSTALL_INTRO_BODY'),
)); ));
return $this->controller_helper->render('installer_install.html', 'INSTALL'); return $this->controller_helper->render('installer_install.html', 'INSTALL');
} }

View file

@ -13,7 +13,7 @@
namespace phpbb\install\controller; namespace phpbb\install\controller;
class install_index class installer_index
{ {
/** /**
* @var helper * @var helper

View file

@ -0,0 +1,22 @@
<?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\exception;
/**
* Exception for the event when installer config is not writable to disk
*/
class installer_config_not_writable_exception extends installer_exception
{
}

View file

@ -15,6 +15,9 @@ namespace phpbb\install\exception;
/** /**
* This exception should be thrown when user interaction is inevitable * This exception should be thrown when user interaction is inevitable
*
* Note: Please note that the output should already be setup for the user
* when you use throw this exception
*/ */
class user_interaction_required_exception extends installer_exception class user_interaction_required_exception extends installer_exception
{ {

View file

@ -13,6 +13,8 @@
namespace phpbb\install\helper; namespace phpbb\install\helper;
use phpbb\install\exception\installer_config_not_writable_exception;
/** /**
* Stores common settings and installation status * Stores common settings and installation status
*/ */
@ -64,6 +66,13 @@ class config
*/ */
protected $system_data; protected $system_data;
/**
* Array containing navigation bar information
*
* @var array
*/
protected $navigation_data;
/** /**
* Constructor * Constructor
*/ */
@ -74,6 +83,7 @@ class config
$this->phpbb_root_path = $phpbb_root_path; $this->phpbb_root_path = $phpbb_root_path;
// Set up data arrays // Set up data arrays
$this->navigation_data = array();
$this->installer_config = array(); $this->installer_config = array();
$this->system_data = array(); $this->system_data = array();
$this->progress_data = array( $this->progress_data = array(
@ -206,6 +216,7 @@ class config
$this->installer_config = $unserialized_data['installer_config']; $this->installer_config = $unserialized_data['installer_config'];
$this->progress_data = $unserialized_data['progress_data']; $this->progress_data = $unserialized_data['progress_data'];
$this->navigation_data = $unserialized_data['navigation_data'];
} }
/** /**
@ -217,6 +228,7 @@ class config
$save_array = array( $save_array = array(
'installer_config' => $this->installer_config, 'installer_config' => $this->installer_config,
'progress_data' => $this->progress_data, 'progress_data' => $this->progress_data,
'navigation_data' => $this->navigation_data,
); );
// Create file content // Create file content
@ -225,7 +237,12 @@ class config
$file_content .= "\n"; $file_content .= "\n";
// Dump file_content to disk // Dump file_content to disk
$fp = fopen($this->install_config_file, 'w'); $fp = @fopen($this->install_config_file, 'w');
if (!$fp)
{
throw new installer_config_not_writable_exception();
}
fwrite($fp, $file_content); fwrite($fp, $file_content);
fclose($fp); fclose($fp);
} }
@ -285,6 +302,36 @@ class config
return $this->progress_data['max_task_progress']; return $this->progress_data['max_task_progress'];
} }
/**
* Marks stage as completed in the navigation bar
*
* @param array $nav_path Array to the navigation elem
*/
public function set_finished_navigation_stage($nav_path)
{
$this->navigation_data['finished'][] = $nav_path;
}
/**
* Marks stage as active in the navigation bar
*
* @param array $nav_path Array to the navigation elem
*/
public function set_active_navigation_stage($nav_path)
{
$this->navigation_data['active'] = $nav_path;
}
/**
* Returns navigation data
*
* @return array
*/
public function get_navigation_data()
{
return $this->navigation_data;
}
/** /**
* Filling up system_data array * Filling up system_data array
*/ */

View file

@ -33,6 +33,16 @@ class ajax_iohandler extends iohandler_base
*/ */
protected $form; protected $form;
/**
* @var bool
*/
protected $request_client_refresh;
/**
* @var array
*/
protected $nav_data;
/** /**
* Constructor * Constructor
* *
@ -44,6 +54,7 @@ class ajax_iohandler extends iohandler_base
$this->request = $request; $this->request = $request;
$this->template = $template; $this->template = $template;
$this->form = ''; $this->form = '';
$this->nav_data = array();
parent::__construct(); parent::__construct();
} }
@ -89,6 +100,8 @@ class ajax_iohandler extends iohandler_base
// This code is pretty ugly... but works // This code is pretty ugly... but works
// //
$this->template->assign_var('S_FORM_ELEM_COUNT', sizeof($form));
$this->template->assign_block_vars('options', array( $this->template->assign_block_vars('options', array(
'LEGEND' => $this->language->lang($title), 'LEGEND' => $this->language->lang($title),
'S_LEGEND' => true, 'S_LEGEND' => true,
@ -187,9 +200,21 @@ class ajax_iohandler extends iohandler_base
); );
} }
if (!empty($this->nav_data))
{
$json_array['nav'] = $this->nav_data;
}
$this->errors = array(); $this->errors = array();
$this->warnings = array(); $this->warnings = array();
$this->logs = array(); $this->logs = array();
$this->nav_data = array();
if ($this->request_client_refresh)
{
$json_array['refresh'] = true;
$this->request_client_refresh = false;
}
return $json_array; return $json_array;
} }
@ -203,6 +228,32 @@ class ajax_iohandler extends iohandler_base
$this->send_response(); $this->send_response();
} }
/**
* {@inheritdoc}
*/
public function request_refresh()
{
$this->request_client_refresh = true;
}
/**
* {@inheritdoc}
*/
public function set_active_stage_menu($menu_path)
{
$this->nav_data['active'] = $menu_path[sizeof($menu_path) - 1];
$this->send_response();
}
/**
* {@inheritdoc}
*/
public function set_finished_stage_menu($menu_path)
{
$this->nav_data['finished'][] = $menu_path[sizeof($menu_path) - 1];
$this->send_response();
}
/** /**
* Callback function for language replacing * Callback function for language replacing
* *

View file

@ -64,6 +64,10 @@ class factory
case 'ajax': case 'ajax':
return $this->container->get('installer.helper.iohandler_ajax'); return $this->container->get('installer.helper.iohandler_ajax');
break; break;
case 'nojs':
// @todo replace this
return $this->container->get('installer.helper.iohandler_ajax');
break;
default: default:
throw new iohandler_not_implemented_exception(); throw new iohandler_not_implemented_exception();
break; break;

View file

@ -123,4 +123,23 @@ interface iohandler_interface
* @param int $task_number Position of the current task in the task queue * @param int $task_number Position of the current task in the task queue
*/ */
public function set_progress($task_lang_key, $task_number); public function set_progress($task_lang_key, $task_number);
/**
* Sends refresh request to the client
*/
public function request_refresh();
/**
* Marks stage as active in the navigation bar
*
* @param array $menu_path Array to the navigation elem
*/
public function set_active_stage_menu($menu_path);
/**
* Marks stage as completed in the navigation bar
*
* @param array $menu_path Array to the navigation elem
*/
public function set_finished_stage_menu($menu_path);
} }

View file

@ -21,8 +21,30 @@ class install_navigation implements navigation_interface
'install' => array( 'install' => array(
'label' => 'INSTALL', 'label' => 'INSTALL',
'route' => 'phpbb_installer_install', 'route' => 'phpbb_installer_install',
'order' => 1,
array(
'introduction' => array(
'label' => 'INTRODUCTION_TITLE',
'stage' => true,
'order' => 0, 'order' => 0,
), ),
'requirements' => array(
'label' => 'STAGE_REQUIREMENTS',
'stage' => true,
'order' => 1,
),
'obtain_data' => array(
'label' => 'STAGE_OBTAIN_DATA',
'stage' => true,
'order' => 2,
),
'install' => array(
'label' => 'STAGE_INSTALL',
'stage' => true,
'order' => 3,
),
),
),
); );
} }
} }

View file

@ -13,6 +13,8 @@
namespace phpbb\install\helper\navigation; namespace phpbb\install\helper\navigation;
use phpbb\di\service_collection;
/** /**
* Installers navigation provider * Installers navigation provider
*/ */
@ -26,9 +28,9 @@ class navigation_provider
/** /**
* Constructor * Constructor
* *
* @param \phpbb\di\service_collection $plugins * @param service_collection $plugins
*/ */
public function __construct(\phpbb\di\service_collection $plugins) public function __construct(service_collection $plugins)
{ {
$this->menu_collection = array(); $this->menu_collection = array();
@ -59,6 +61,27 @@ class navigation_provider
$this->merge($nav_arry, $this->menu_collection); $this->merge($nav_arry, $this->menu_collection);
} }
/**
* Set a property in the navigation array
*
* @param array $nav_element Array to the navigation elem
* @param array $property_array Array with the properties to set
*/
public function set_nav_property($nav_element, $property_array)
{
$array_pointer = array();
$array_root_pointer = &$array_pointer;
foreach ($nav_element as $array_path)
{
$array_pointer[$array_path] = array();
$array_pointer = &$array_pointer[$array_path];
}
$array_pointer = $property_array;
$this->merge($array_root_pointer, $this->menu_collection);
}
/** /**
* Recursive array merge * Recursive array merge
* *

View file

@ -13,6 +13,7 @@
namespace phpbb\install; namespace phpbb\install;
use phpbb\install\exception\installer_config_not_writable_exception;
use phpbb\install\exception\invalid_service_name_exception; use phpbb\install\exception\invalid_service_name_exception;
use phpbb\install\exception\module_not_found_exception; use phpbb\install\exception\module_not_found_exception;
use phpbb\install\exception\task_not_found_exception; use phpbb\install\exception\task_not_found_exception;
@ -106,6 +107,10 @@ class installer
// Flag used by exception handling, whether or not we need to flush output buffer once again // Flag used by exception handling, whether or not we need to flush output buffer once again
$flush_messages = false; $flush_messages = false;
// We are installing something, so the introduction stage can go now...
$this->install_config->set_finished_navigation_stage(array('install', 0, 'introduction'));
$this->iohandler->set_finished_stage_menu(array('install', 0, 'introduction'));
try try
{ {
if ($this->install_config->get_task_progress_count() === 0) if ($this->install_config->get_task_progress_count() === 0)
@ -168,6 +173,9 @@ class installer
// Check if module should be executed // Check if module should be executed
if (!$module->is_essential() && !$module->check_requirements()) if (!$module->is_essential() && !$module->check_requirements())
{ {
$this->install_config->set_finished_navigation_stage($module->get_navigation_stage_path());
$this->iohandler->set_finished_stage_menu($module->get_navigation_stage_path());
$this->iohandler->add_log_message(array( $this->iohandler->add_log_message(array(
'SKIP_MODULE', 'SKIP_MODULE',
$module_service_name, $module_service_name,
@ -176,8 +184,15 @@ class installer
continue; continue;
} }
// Set the correct stage in the navigation bar
$this->install_config->set_active_navigation_stage($module->get_navigation_stage_path());
$this->iohandler->set_active_stage_menu($module->get_navigation_stage_path());
$module->run(); $module->run();
$this->install_config->set_finished_navigation_stage($module->get_navigation_stage_path());
$this->iohandler->set_finished_stage_menu($module->get_navigation_stage_path());
// Clear task progress // Clear task progress
$this->install_config->set_finished_task('', 0); $this->install_config->set_finished_task('', 0);
} }
@ -189,12 +204,12 @@ class installer
} }
else else
{ {
// @todo: Send refresh request $this->iohandler->request_refresh();
} }
} }
catch (user_interaction_required_exception $e) catch (user_interaction_required_exception $e)
{ {
// @todo handle exception // Do nothing
} }
catch (module_not_found_exception $e) catch (module_not_found_exception $e)
{ {
@ -234,8 +249,21 @@ class installer
} }
// Save install progress // Save install progress
try
{
$this->install_config->save_config(); $this->install_config->save_config();
} }
catch (installer_config_not_writable_exception $e)
{
// It is allowed to fail this test during requirements testing
$progress_data = $this->install_config->get_progress_data();
if ($progress_data['last_task_module_name'] !== 'installer.module.requirements_install')
{
$this->iohandler->add_error_message('INSTALLER_CONFIG_NOT_WRITABLE');
}
}
}
/** /**
* Recover install progress * Recover install progress

View file

@ -18,5 +18,11 @@ namespace phpbb\install\module\install_data;
*/ */
class module extends \phpbb\install\module_base class module extends \phpbb\install\module_base
{ {
/**
* {@inheritdoc}
*/
public function get_navigation_stage_path()
{
return array('install', 0, 'install');
}
} }

View file

@ -18,5 +18,11 @@ namespace phpbb\install\module\install_database;
*/ */
class module extends \phpbb\install\module_base class module extends \phpbb\install\module_base
{ {
/**
* {@inheritdoc}
*/
public function get_navigation_stage_path()
{
return array('install', 0, 'install');
}
} }

View file

@ -18,5 +18,11 @@ namespace phpbb\install\module\install_filesystem;
*/ */
class module extends \phpbb\install\module_base class module extends \phpbb\install\module_base
{ {
/**
* {@inheritdoc}
*/
public function get_navigation_stage_path()
{
return array('install', 0, 'install');
}
} }

View file

@ -18,5 +18,11 @@ namespace phpbb\install\module\install_finish;
*/ */
class module extends \phpbb\install\module_base class module extends \phpbb\install\module_base
{ {
/**
* {@inheritdoc}
*/
public function get_navigation_stage_path()
{
return array('install', 0, 'install');
}
} }

View file

@ -15,6 +15,14 @@ namespace phpbb\install\module\obtain_data;
class module extends \phpbb\install\module_base class module extends \phpbb\install\module_base
{ {
/**
* {@inheritdoc}
*/
public function get_navigation_stage_path()
{
return array('install', 0, 'obtain_data');
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */

View file

@ -61,6 +61,15 @@ class module extends \phpbb\install\module_base
if (!$tests_passed) if (!$tests_passed)
{ {
// If requirements are not met, exit form installer // If requirements are not met, exit form installer
// Set up UI for retesting
$this->iohandler->add_user_form_group('', array(
'install' => array(
'label' => 'RETEST_REQUIREMENTS',
'type' => 'submit',
),
));
// Send the response and quit
$this->iohandler->send_response(); $this->iohandler->send_response();
throw new user_interaction_required_exception(); throw new user_interaction_required_exception();
} }
@ -77,4 +86,12 @@ class module extends \phpbb\install\module_base
{ {
return 0; return 0;
} }
/**
* {@inheritdoc}
*/
public function get_navigation_stage_path()
{
return array('install', 0, 'requirements');
}
} }

View file

@ -53,4 +53,11 @@ interface module_interface
* @return int * @return int
*/ */
public function get_step_count(); public function get_step_count();
/**
* Returns an array to the correct navigation stage
*
* @return array
*/
public function get_navigation_stage_path();
} }

View file

@ -40,6 +40,8 @@ if (empty($lang) || !is_array($lang))
$lang = array_merge($lang, array( $lang = array_merge($lang, array(
'INSTALL_PANEL' => 'Installation Panel', 'INSTALL_PANEL' => 'Installation Panel',
'STAGE_INSTALL' => 'Installing phpBB',
// Introduction page // Introduction page
'INTRODUCTION_TITLE' => 'Introduction', 'INTRODUCTION_TITLE' => 'Introduction',
'INTRODUCTION_BODY' => 'Welcome to phpBB3!<br /><br />phpBB® is the most widely used open source bulletin board solution in the world. phpBB3 is the latest installment in a package line started in 2000. Like its predecessors, phpBB3 is feature-rich, user-friendly, and fully supported by the phpBB Team. phpBB3 greatly improves on what made phpBB2 popular, and adds commonly requested features that were not present in previous versions. We hope it exceeds your expectations.<br /><br />This installation system will guide you through installing phpBB3, updating to the latest version of phpBB3 from past releases, as well as converting to phpBB3 from a different discussion board system (including phpBB2). For more information, we encourage you to read <a href="../docs/INSTALL.html">the installation guide</a>.<br /><br />To read the phpBB3 license or learn about obtaining support and our stance on it, please select the respective options from the side menu. To continue, please select the appropriate tab above.', 'INTRODUCTION_BODY' => 'Welcome to phpBB3!<br /><br />phpBB® is the most widely used open source bulletin board solution in the world. phpBB3 is the latest installment in a package line started in 2000. Like its predecessors, phpBB3 is feature-rich, user-friendly, and fully supported by the phpBB Team. phpBB3 greatly improves on what made phpBB2 popular, and adds commonly requested features that were not present in previous versions. We hope it exceeds your expectations.<br /><br />This installation system will guide you through installing phpBB3, updating to the latest version of phpBB3 from past releases, as well as converting to phpBB3 from a different discussion board system (including phpBB2). For more information, we encourage you to read <a href="../docs/INSTALL.html">the installation guide</a>.<br /><br />To read the phpBB3 license or learn about obtaining support and our stance on it, please select the respective options from the side menu. To continue, please select the appropriate tab above.',
@ -50,6 +52,33 @@ $lang = array_merge($lang, array(
// License // License
'LICENSE_TITLE' => 'General Public License', 'LICENSE_TITLE' => 'General Public License',
// Install page
'INSTALL_INTRO' => 'Welcome to Installation',
'INSTALL_INTRO_BODY' => 'With this option, it is possible to install phpBB3 onto your server.</p><p>In order to proceed, you will need your database settings. If you do not know your database settings, please contact your host and ask for them. You will not be able to continue without them. You need:</p>
<ul>
<li>The Database Type - the database you will be using.</li>
<li>The Database server hostname or DSN - the address of the database server.</li>
<li>The Database server port - the port of the database server (most of the time this is not needed).</li>
<li>The Database name - the name of the database on the server.</li>
<li>The Database username and Database password - the login data to access the database.</li>
</ul>
<p><strong>Note:</strong> if you are installing using SQLite, you should enter the full path to your database file in the DSN field and leave the username and password fields blank. For security reasons, you should make sure that the database file is not stored in a location accessible from the web.</p>
<p>phpBB3 supports the following databases:</p>
<ul>
<li>MySQL 3.23 or above (MySQLi supported)</li>
<li>PostgreSQL 8.3+</li>
<li>SQLite 2.8.2+</li>
<li>SQLite 3.6.15+</li>
<li>MS SQL Server 2000 or above (directly or via ODBC)</li>
<li>MS SQL Server 2005 or above (native)</li>
<li>Oracle</li>
</ul>
<p>Only those databases supported on your server will be displayed.',
)); ));
// Requirements translation // Requirements translation
@ -76,6 +105,10 @@ $lang = array_merge($lang, array(
'PHP_JSON_SUPPORT_EXPLAIN' => 'In order for phpBB to function correctly, the PHP JSON extension needs to be available.', 'PHP_JSON_SUPPORT_EXPLAIN' => 'In order for phpBB to function correctly, the PHP JSON extension needs to be available.',
'PHP_SUPPORTED_DB' => 'Supported databases', 'PHP_SUPPORTED_DB' => 'Supported databases',
'PHP_SUPPORTED_DB_EXPLAIN' => 'You must have support for at least one compatible database within PHP. If no database modules are shown as available you should contact your hosting provider or review the relevant PHP installation documentation for advice.', 'PHP_SUPPORTED_DB_EXPLAIN' => 'You must have support for at least one compatible database within PHP. If no database modules are shown as available you should contact your hosting provider or review the relevant PHP installation documentation for advice.',
'RETEST_REQUIREMENTS' => 'Retest requirements',
'STAGE_REQUIREMENTS' => 'Check requirements'
)); ));
// General error messages // General error messages
@ -85,6 +118,8 @@ $lang = array_merge($lang, array(
// Data obtaining translations // Data obtaining translations
$lang = array_merge($lang, array( $lang = array_merge($lang, array(
'STAGE_OBTAIN_DATA' => 'Set installation data',
// //
// Admin data // Admin data
// //
@ -263,4 +298,6 @@ $lang = array_merge($lang, array(
'TASK_SERVICE_INSTALLER_MISSING' => 'All installer task services should start with “installer”', 'TASK_SERVICE_INSTALLER_MISSING' => 'All installer task services should start with “installer”',
'TASK_CLASS_NOT_FOUND' => 'Installer task service definition is invalid. Service name “%1$s” given, the expected class namespace is “%2$s” for that. For more information please see the documentation of task_interface.', 'TASK_CLASS_NOT_FOUND' => 'Installer task service definition is invalid. Service name “%1$s” given, the expected class namespace is “%2$s” for that. For more information please see the documentation of task_interface.',
'INSTALLER_CONFIG_NOT_WRITABLE' => 'The installer config file is not writable.',
)); ));