Skip to content

Commit 11623dd

Browse files
committed
[ticket/13740] Front facing files and controllers
[ci skip] PHPBB3-13740
1 parent 8155205 commit 11623dd

10 files changed

Lines changed: 798 additions & 1 deletion

File tree

phpBB/adm/style/admin.css

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1776,7 +1776,7 @@ li.pagination ul {
17761776

17771777
/* Action Highlighting
17781778
---------------------------------------- */
1779-
.successbox, .errorbox {
1779+
.successbox, .errorbox, .warningbox {
17801780
padding: 8px;
17811781
margin: 10px 0;
17821782
color: #FFFFFF;
@@ -1800,6 +1800,10 @@ li.pagination ul {
18001800
background-color: #BC2A4D;
18011801
}
18021802

1803+
.warningbox {
1804+
background-color: #fca600;
1805+
}
1806+
18031807
.successbox h3, .errorbox h3 {
18041808
color: #FFFFFF;
18051809
margin: 0 0 0.5em;
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<form id="<!-- IF FORM_ID -->{FORM_ID}<!-- ELSE -->install_install<!-- ENDIF -->" method="POST" action="{U_ACTION}">
2+
<!-- IF .options -->
3+
<fieldset>
4+
5+
<!-- BEGIN options -->
6+
<!-- IF options.S_LEGEND -->
7+
<!-- IF not options.S_FIRST_ROW -->
8+
</fieldset>
9+
10+
<fieldset>
11+
<!-- ENDIF -->
12+
<legend>{options.LEGEND}</legend>
13+
<!-- ELSE -->
14+
15+
<!-- IF options.TYPE <> 'submit' -->
16+
<dl>
17+
<dt><label for="{options.KEY}">{options.TITLE}{L_COLON}</label><!-- IF options.S_EXPLAIN --><br /><span class="explain">{options.TITLE_EXPLAIN}</span><!-- ENDIF --></dt>
18+
<dd>
19+
<!-- IF options.TYPE == 'text' -->
20+
<input type="text" name="{options.KEY}" value="{options.DEFAULT}" />
21+
<!-- ENDIF -->
22+
<!-- IF options.TYPE == 'email' -->
23+
<input type="email" name="{options.KEY}" value="{options.DEFAULT}" />
24+
<!-- ENDIF -->
25+
<!-- IF options.TYPE == 'password' -->
26+
<input type="password" name="{options.KEY}" />
27+
<!-- ENDIF -->
28+
<!-- IF options.TYPE == 'select' -->
29+
<select name="{options.KEY}">
30+
<!-- BEGIN options.OPTIONS -->
31+
<option value="{options.OPTIONS.value}"<!-- IF options.OPTIONS.selected --> selected<!-- ENDIF -->>{options.OPTIONS.label}</option>
32+
<!-- END options.OPTIONS -->
33+
</select>
34+
<!-- ENDIF -->
35+
<!-- IF options.TYPE == 'radio' -->
36+
<!-- BEGIN options.OPTIONS -->
37+
<input type="radio" name="{options.KEY}" value="{options.OPTIONS.value}" <!-- IF options.OPTIONS.selected -->checked<!-- ENDIF --> /> {options.OPTIONS.label}
38+
<!-- END options.OPTIONS -->
39+
<!-- ENDIF -->
40+
</dd>
41+
</dl>
42+
<!-- ELSE -->
43+
</fieldset>
44+
<fieldset class="submit-buttons">
45+
<legend>{L_SUBMIT}</legend>
46+
<input class="button1" type="submit" name="{options.KEY}" value="{options.TITLE}" />
47+
</fieldset>
48+
<!-- ENDIF -->
49+
<!-- ENDIF-->
50+
<!-- END options -->
51+
<!-- ENDIF -->
52+
</form>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<!-- INCLUDE install_header.html -->
2+
<h1>{L_INSTALL}</h1>
3+
{CONTENT}
4+
<!-- IF SHOW_INSTALL_START_FORM -->
5+
<form id="install_install" method="post" action="{U_ACTION}">
6+
<fieldset class="submit-buttons">
7+
<legend>{L_SUBMIT}</legend>
8+
<input name="install" type="submit" value="{L_INSTALL}" />
9+
</fieldset>
10+
</form>
11+
<!-- ENDIF -->
12+
<!-- INCLUDEJS {T_ASSETS_PATH}/javascript/installer.js -->
13+
<!-- INCLUDE install_footer.html -->
Lines changed: 205 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,205 @@
1+
/**
2+
* Installer's AJAX frontend handler
3+
*/
4+
5+
(function($) { // Avoid conflicts with other libraries
6+
// Global variables
7+
var pollTimer = null;
8+
var nextReadPosition = 0;
9+
10+
// Template related variables
11+
var $contentWrapper = $('.install-body').find('.main');
12+
13+
// Intercept form submits
14+
intercept_form_submit($('#install_install'));
15+
16+
function poll_content(xhReq) {
17+
var messages = xhReq.responseText;
18+
19+
do {
20+
var unprocessed = messages.substring(nextReadPosition);
21+
var messageEndIndex = unprocessed.indexOf('}\n\n');
22+
23+
if (messageEndIndex !== -1) {
24+
var endOfMessageIndex = messageEndIndex + 3; // 3 is the length of "}\n\n"
25+
var message = unprocessed.substring(0, endOfMessageIndex);
26+
parse_message(message);
27+
nextReadPosition += endOfMessageIndex;
28+
}
29+
} while (messageEndIndex !== -1);
30+
31+
if (xhReq.readyState === 4) {
32+
$('#loading_indicator').css('display', 'none');
33+
reset_polling();
34+
}
35+
}
36+
37+
function parse_message(messageJSON) {
38+
$('#loading_indicator').css('display', 'none');
39+
40+
messageJSON = messageJSON.trim();
41+
var responseObject = JSON.parse(messageJSON);
42+
43+
// Parse object
44+
if (responseObject.hasOwnProperty('errors')) {
45+
add_message('error', responseObject.errors)
46+
}
47+
48+
if (responseObject.hasOwnProperty('warnings')) {
49+
add_message('warning', responseObject.warnings)
50+
}
51+
52+
if (responseObject.hasOwnProperty('logs')) {
53+
add_message('log', responseObject.logs);
54+
}
55+
56+
if (responseObject.hasOwnProperty('form')) {
57+
add_form(responseObject.form);
58+
}
59+
}
60+
61+
function add_message(type, messages) {
62+
// Get message containers
63+
var errorContainer = $('#error-container');
64+
var warningContainer = $('#warning-container');
65+
var logContainer = $('#log-container');
66+
67+
var title, description, msgElement, arraySize = messages.length;
68+
for (var i = 0; i < arraySize; i++) {
69+
msgElement = $('<div />');
70+
title = $(document.createElement('strong'));
71+
title.text(messages[i].title);
72+
msgElement.append(title);
73+
74+
if (messages[i].hasOwnProperty('description')) {
75+
description = $(document.createElement('p'));
76+
description.text(messages[i].description);
77+
msgElement.append(description);
78+
}
79+
80+
switch (type) {
81+
case 'error':
82+
msgElement.addClass('errorbox');
83+
errorContainer.append(msgElement);
84+
break;
85+
case 'warning':
86+
msgElement.addClass('warningbox');
87+
warningContainer.append(msgElement);
88+
break;
89+
case 'log':
90+
msgElement.addClass('log');
91+
logContainer.append(msgElement);
92+
break;
93+
}
94+
}
95+
}
96+
97+
function add_form(formHtml) {
98+
var formContainer = $('#content-container');
99+
formContainer.html(formHtml);
100+
var form = $('#install_install');
101+
intercept_form_submit(form);
102+
}
103+
104+
function start_polling(xhReq) {
105+
reset_polling();
106+
pollTimer = setInterval(function () {
107+
poll_content(xhReq);
108+
}, 500);
109+
}
110+
111+
function reset_polling() {
112+
clearInterval(pollTimer);
113+
nextReadPosition = 0;
114+
}
115+
116+
function submit_form(form, submitBtn) {
117+
form.css('display', 'none');
118+
119+
var xhReq = create_xhr_object();
120+
xhReq.open('POST', form.attr('action'), true);
121+
xhReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
122+
xhReq.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
123+
xhReq.send(get_form_fields(form, submitBtn));
124+
125+
// Clear content
126+
setup_ajax_layout();
127+
$('#loading_indicator').css('display', 'block');
128+
129+
start_polling(xhReq);
130+
}
131+
132+
// Workaround for submit buttons
133+
function get_form_fields(form, submitBtn) {
134+
var formData = form.serialize();
135+
//var submitBtn = form.find(':submit');
136+
formData += ((formData.length) ? '&' : '') + encodeURIComponent(submitBtn.attr('name')) + '=';
137+
formData += encodeURIComponent(submitBtn.attr('value'));
138+
139+
return formData;
140+
}
141+
142+
function intercept_form_submit(form) {
143+
if (!form.length) {
144+
return;
145+
}
146+
147+
form.find(':submit').bind('click', function (event) {
148+
event.preventDefault();
149+
submit_form(form, $(this));
150+
});
151+
152+
}
153+
154+
/**
155+
* jQuery cannot be used as the response is streamed, and
156+
* as of now, jQuery does not provide access to the response until
157+
* the connection is not closed.
158+
*/
159+
function create_xhr_object() {
160+
var xhReq;
161+
162+
if (window.XMLHttpRequest) {
163+
xhReq = new XMLHttpRequest();
164+
}
165+
else if (window.ActiveXObject) {
166+
xhReq = new ActiveXObject("Msxml2.XMLHTTP");
167+
}
168+
169+
return xhReq;
170+
}
171+
172+
function setup_ajax_layout() {
173+
// Clear content
174+
$contentWrapper.html('');
175+
176+
var $header = $('<div />');
177+
$header.attr('id', 'header-container');
178+
$contentWrapper.append($header);
179+
180+
var $description = $('<div />');
181+
$description.attr('id', 'description-container');
182+
$contentWrapper.append($description);
183+
184+
var $errorContainer = $('<div />');
185+
$errorContainer.attr('id', 'error-container');
186+
$contentWrapper.append($errorContainer);
187+
188+
var $warningContainer = $('<div />');
189+
$warningContainer.attr('id', 'warning-container');
190+
$contentWrapper.append($warningContainer);
191+
192+
var $installerContentWrapper = $('<div />');
193+
$installerContentWrapper.attr('id', 'content-container');
194+
$contentWrapper.append($installerContentWrapper);
195+
196+
var $logContainer = $('<div />');
197+
$logContainer.attr('id', 'log-container');
198+
$contentWrapper.append($logContainer);
199+
200+
var $spinner = $('<div />');
201+
$spinner.attr('id', 'loading_indicator');
202+
$spinner.html('&nbsp;');
203+
$contentWrapper.append($spinner);
204+
}
205+
})(jQuery); // Avoid conflicts with other libraries
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
core.default:
2+
resource: "installer.yml"
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
phpbb_installer_index:
2+
path: /
3+
defaults:
4+
_controller: phpbb.installer.controller.welcome:handle
5+
mode: "intro"
6+
7+
phpbb_installer_license:
8+
path: /license
9+
defaults:
10+
_controller: phpbb.installer.controller.welcome:handle
11+
mode: "license"
12+
13+
phpbb_installer_support:
14+
path: /support
15+
defaults:
16+
_controller: phpbb.installer.controller.welcome:handle
17+
mode: "support"
18+
19+
phpbb_installer_install:
20+
path: /install
21+
defaults:
22+
_controller: phpbb.installer.controller.install:handle

0 commit comments

Comments
 (0)