aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--phpBB/adm/style/acp_users_signature.html64
-rw-r--r--phpBB/adm/style/admin.css9
-rw-r--r--phpBB/adm/style/editor.js336
-rw-r--r--phpBB/assets/javascript/editor.js (renamed from phpBB/styles/prosilver/template/editor.js)6
-rwxr-xr-xphpBB/bin/phpbbcli.php36
-rw-r--r--phpBB/composer.json1
-rw-r--r--phpBB/composer.lock55
-rw-r--r--phpBB/config/console.yml35
-rw-r--r--phpBB/config/services.yml1
-rw-r--r--phpBB/develop/extensions.php129
-rw-r--r--phpBB/includes/functions_install.php48
-rw-r--r--phpBB/install/install_update.php2
-rw-r--r--phpBB/phpbb/console/application.php23
-rw-r--r--phpBB/phpbb/console/command/command.php14
-rw-r--r--phpBB/phpbb/console/command/extension/command.php22
-rw-r--r--phpBB/phpbb/console/command/extension/disable.php47
-rw-r--r--phpBB/phpbb/console/command/extension/enable.php47
-rw-r--r--phpBB/phpbb/console/command/extension/purge.php47
-rw-r--r--phpBB/phpbb/console/command/extension/show.php58
-rw-r--r--phpBB/phpbb/console/command/fixup/recalculate_email_hash.php71
-rw-r--r--phpBB/styles/prosilver/template/posting_buttons.html4
-rw-r--r--phpBB/styles/prosilver/template/posting_smilies.html2
-rw-r--r--phpBB/styles/subsilver2/template/editor.js385
-rw-r--r--phpBB/styles/subsilver2/template/posting_body.html7
-rw-r--r--phpBB/styles/subsilver2/template/posting_buttons.html2
-rw-r--r--phpBB/styles/subsilver2/template/posting_smilies.html2
-rw-r--r--phpBB/styles/subsilver2/template/ucp_main_drafts.html7
-rw-r--r--phpBB/styles/subsilver2/template/ucp_profile_signature.html7
-rw-r--r--phpBB/styles/subsilver2/theme/stylesheet.css9
-rw-r--r--tests/functions_install/ignore_new_file_on_update_test.php39
30 files changed, 605 insertions, 910 deletions
diff --git a/phpBB/adm/style/acp_users_signature.html b/phpBB/adm/style/acp_users_signature.html
index 2b4964803e..cfcab155bd 100644
--- a/phpBB/adm/style/acp_users_signature.html
+++ b/phpBB/adm/style/acp_users_signature.html
@@ -3,6 +3,8 @@
var form_name = 'user_signature';
var text_name = 'signature';
+ var load_draft = false;
+ var upload = false;
// Define the bbCode tags
var bbcode = new Array();
@@ -20,11 +22,11 @@
o: '{LA_BBCODE_O_HELP}',
p: '{LA_BBCODE_P_HELP}',
w: '{LA_BBCODE_W_HELP}',
+ a: '{LA_BBCODE_A_HELP}',
s: '{LA_BBCODE_S_HELP}',
f: '{LA_BBCODE_F_HELP}',
y: '{LA_BBCODE_Y_HELP}',
- d: '{LA_BBCODE_D_HELP}',
- tip: '{L_STYLES_TIP}'
+ d: '{LA_BBCODE_D_HELP}'
<!-- BEGIN custom_tags -->
,cb_{custom_tags.BBCODE_ID}{L_COLON} '{custom_tags.A_BBCODE_HELPLINE}'
<!-- END custom_tags -->
@@ -32,7 +34,7 @@
// ]]>
</script>
-<script type="text/javascript" src="{T_TEMPLATE_PATH}/editor.js"></script>
+<!-- INCLUDEJS {T_ASSETS_PATH}/javascript/editor.js -->
<form id="user_signature" method="post" action="{U_ACTION}">
@@ -48,52 +50,46 @@
<p>{L_SIGNATURE_EXPLAIN}</p>
<div id="format-buttons">
- <input type="button" class="button2" accesskey="b" name="addbbcode0" value=" B " style="font-weight:bold; width: 30px;" onclick="bbstyle(0)" onmouseover="helpline('b')" onmouseout="helpline('tip')" />
- <input type="button" class="button2" accesskey="i" name="addbbcode2" value=" i " style="font-style:italic; width: 30px;" onclick="bbstyle(2)" onmouseover="helpline('i')" onmouseout="helpline('tip')" />
- <input type="button" class="button2" accesskey="u" name="addbbcode4" value=" u " style="text-decoration: underline; width: 30px;" onclick="bbstyle(4)" onmouseover="helpline('u')" onmouseout="helpline('tip')" />
- <input type="button" class="button2" accesskey="q" name="addbbcode6" value="Quote" style="width: 50px" onclick="bbstyle(6)" onmouseover="helpline('q')" onmouseout="helpline('tip')" />
- <input type="button" class="button2" accesskey="c" name="addbbcode8" value="Code" style="width: 40px" onclick="bbstyle(8)" onmouseover="helpline('c')" onmouseout="helpline('tip')" />
- <input type="button" class="button2" accesskey="l" name="addbbcode10" value="List" style="width: 40px" onclick="bbstyle(10)" onmouseover="helpline('l')" onmouseout="helpline('tip')" />
- <input type="button" class="button2" accesskey="o" name="addbbcode12" value="List=" style="width: 40px" onclick="bbstyle(12)" onmouseover="helpline('o')" onmouseout="helpline('tip')" />
- <input type="button" class="button2" accesskey="y" name="addlistitem" value="[*]" style="width: 40px" onclick="bbstyle(-1)" onmouseover="helpline('y')" onmouseout="helpline('tip')" />
+ <input type="button" class="button2" accesskey="b" name="addbbcode0" value=" B " style="font-weight:bold; width: 30px" onclick="bbstyle(0)" title="{L_BBCODE_B_HELP}" />
+ <input type="button" class="button2" accesskey="i" name="addbbcode2" value=" i " style="font-style:italic; width: 30px" onclick="bbstyle(2)" title="{L_BBCODE_I_HELP}" />
+ <input type="button" class="button2" accesskey="u" name="addbbcode4" value=" u " style="text-decoration: underline; width: 30px" onclick="bbstyle(4)" title="{L_BBCODE_U_HELP}" />
+ <!-- IF S_BBCODE_QUOTE -->
+ <input type="button" class="button2" accesskey="q" name="addbbcode6" value="Quote" style="width: 50px" onclick="bbstyle(6)" title="{L_BBCODE_Q_HELP}" />
+ <!-- ENDIF -->
+ <input type="button" class="button2" accesskey="c" name="addbbcode8" value="Code" style="width: 40px" onclick="bbstyle(8)" title="{L_BBCODE_C_HELP}" />
+ <input type="button" class="button2" accesskey="l" name="addbbcode10" value="List" style="width: 40px" onclick="bbstyle(10)" title="{L_BBCODE_L_HELP}" />
+ <input type="button" class="button2" accesskey="o" name="addbbcode12" value="List=" style="width: 40px" onclick="bbstyle(12)" title="{L_BBCODE_O_HELP}" />
+ <input type="button" class="button2" accesskey="y" name="addlistitem" value="[*]" style="width: 40px" onclick="bbstyle(-1)" title="{L_BBCODE_LISTITEM_HELP}" />
<!-- IF S_BBCODE_IMG -->
- <input type="button" class="button2" accesskey="p" name="addbbcode14" value="Img" style="width: 40px" onclick="bbstyle(14)" onmouseover="helpline('p')" onmouseout="helpline('tip')" />
+ <input type="button" class="button2" accesskey="p" name="addbbcode14" value="Img" style="width: 40px" onclick="bbstyle(14)" title="{L_BBCODE_P_HELP}" />
<!-- ENDIF -->
<!-- IF S_LINKS_ALLOWED -->
- <input type="button" class="button2" accesskey="w" name="addbbcode16" value="URL" style="text-decoration: underline; width: 40px" onclick="bbstyle(16)" onmouseover="helpline('w')" onmouseout="helpline('tip')" />
+ <input type="button" class="button2" accesskey="w" name="addbbcode16" value="URL" style="text-decoration: underline; width: 40px" onclick="bbstyle(16)" title="{L_BBCODE_W_HELP}" />
<!-- ENDIF -->
<!-- IF S_BBCODE_FLASH -->
- <input type="button" class="button2" accesskey="d" name="addbbcode18" value="Flash" onclick="bbstyle(18)" onmouseover="helpline('d')" onmouseout="helpline('tip')" />
+ <input type="button" class="button2" accesskey="d" name="addbbcode18" value="Flash" onclick="bbstyle(18)" title="{L_BBCODE_D_HELP}" />
<!-- ENDIF -->
-
- {L_FONT_SIZE}{L_COLON} <select name="addbbcode20" onchange="bbfontstyle('[size=' + this.form.addbbcode20.options[this.form.addbbcode20.selectedIndex].value + ']', '[/size]');this.form.addbbcode20.selectedIndex = 2;" title="{L_FONT_SIZE}" onmouseover="helpline('f')" onmouseout="helpline('tip')">
+ <select name="addbbcode20" onchange="bbfontstyle('[size=' + this.form.addbbcode20.options[this.form.addbbcode20.selectedIndex].value + ']', '[/size]');this.form.addbbcode20.selectedIndex = 2;" title="{L_BBCODE_F_HELP}">
<option value="50">{L_FONT_TINY}</option>
<option value="85">{L_FONT_SMALL}</option>
<option value="100" selected="selected">{L_FONT_NORMAL}</option>
- <option value="150">{L_FONT_LARGE}</option>
- <option value="200">{L_FONT_HUGE}</option>
+ <!-- IF not MAX_FONT_SIZE or MAX_FONT_SIZE >= 150 -->
+ <option value="150">{L_FONT_LARGE}</option>
+ <!-- IF not MAX_FONT_SIZE or MAX_FONT_SIZE >= 200 -->
+ <option value="200">{L_FONT_HUGE}</option>
+ <!-- ENDIF -->
+ <!-- ENDIF -->
</select>
- <!-- IF .custom_tags -->
- <br /><br />
<!-- BEGIN custom_tags -->
- <input type="button" class="button2" name="addbbcode{custom_tags.BBCODE_ID}" value="{custom_tags.BBCODE_TAG}" onclick="bbstyle({custom_tags.BBCODE_ID})"<!-- IF custom_tags.BBCODE_HELPLINE !== '' --> onmouseover="helpline('cb_{custom_tags.BBCODE_ID}')" onmouseout="helpline('tip')"<!-- ENDIF --> />
+ <input type="button" class="button2" name="addbbcode{custom_tags.BBCODE_ID}" value="{custom_tags.BBCODE_TAG}" onclick="bbstyle({custom_tags.BBCODE_ID})" title="{custom_tags.BBCODE_HELPLINE}" />
<!-- END custom_tags -->
- <!-- ENDIF -->
-
</div>
- <p><input type="text" class="text full" style="border: 0; background: none;" name="helpbox" value="{L_STYLES_TIP}" /></p>
-
<dl>
- <dt style="width: 90px;">
- <script type="text/javascript">
- // <![CDATA[
- colorPalette('v', 12, 10);
- // ]]>
- </script>
+ <dt style="width: 90px;" id="color_palette_placeholder" data-orientation="v" data-height="12" data-width="15">
</dt>
- <dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 90px;"><textarea name="signature" rows="10" cols="60" style="width: 95%;" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" onfocus="initInsertions();" data-bbcode="true">{SIGNATURE}</textarea></dd>
- <dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 90px; margin-top: 5px;">
+ <dd style="margin-{S_CONTENT_FLOW_BEGIN}: 90px;"><textarea name="signature" rows="10" cols="60" style="width: 95%;" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" onfocus="initInsertions();" data-bbcode="true">{SIGNATURE}</textarea></dd>
+ <dd style="margin-{S_CONTENT_FLOW_BEGIN}: 90px; margin-top: 5px;">
<!-- IF S_BBCODE_ALLOWED -->
<label><input type="checkbox" class="radio" name="disable_bbcode"{S_BBCODE_CHECKED} /> {L_DISABLE_BBCODE}</label>
<!-- ENDIF -->
@@ -104,7 +100,7 @@
<label><input type="checkbox" class="radio" name="disable_magic_url"{S_MAGIC_URL_CHECKED} /> {L_DISABLE_MAGIC_URL}</label>
<!-- ENDIF -->
</dd>
- <dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 90px; margin-top: 10px;"><strong>{L_OPTIONS}{L_COLON} </strong>{BBCODE_STATUS} :: {IMG_STATUS} :: {FLASH_STATUS} :: {URL_STATUS} :: {SMILIES_STATUS}</dd>
+ <dd style="margin-{S_CONTENT_FLOW_BEGIN}: 90px; margin-top: 10px;"><strong>{L_OPTIONS}{L_COLON} </strong>{BBCODE_STATUS} :: {IMG_STATUS} :: {FLASH_STATUS} :: {URL_STATUS} :: {SMILIES_STATUS}</dd>
</dl>
</fieldset>
diff --git a/phpBB/adm/style/admin.css b/phpBB/adm/style/admin.css
index eae4f42641..512c714fcc 100644
--- a/phpBB/adm/style/admin.css
+++ b/phpBB/adm/style/admin.css
@@ -737,6 +737,15 @@ td {
border-spacing: 1px;
}
+dt#color_palette_placeholder table {
+ margin-right: 5px;
+ width: 80px;
+}
+
+#color_palette_placeholder td {
+ padding: 0;
+}
+
table.type2 {
border: none;
background: none;
diff --git a/phpBB/adm/style/editor.js b/phpBB/adm/style/editor.js
deleted file mode 100644
index 9938ff5d0b..0000000000
--- a/phpBB/adm/style/editor.js
+++ /dev/null
@@ -1,336 +0,0 @@
-/**
-* bbCode control by subBlue design [ www.subBlue.com ]
-* Includes unixsafe colour palette selector by SHS`
-*/
-
-// Startup variables
-var imageTag = false;
-var theSelection = false;
-
-// Check for Browser & Platform for PC & IE specific bits
-// More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html
-var clientPC = navigator.userAgent.toLowerCase(); // Get client info
-var clientVer = parseInt(navigator.appVersion, 10); // Get browser version
-
-var is_ie = ((clientPC.indexOf('msie') !== -1) && (clientPC.indexOf('opera') === -1));
-var is_win = ((clientPC.indexOf('win') !== -1) || (clientPC.indexOf('16bit') !== -1));
-var baseHeight;
-
-/**
-* Shows the help messages in the helpline window
-*/
-function helpline(help) {
- document.forms[form_name].helpbox.value = help_line[help];
-}
-
-/**
-* Fix a bug involving the TextRange object. From
-* http://www.frostjedi.com/terra/scripts/demo/caretBug.html
-*/
-function initInsertions() {
- var doc;
-
- if (document.forms[form_name]) {
- doc = document;
- } else {
- doc = opener.document;
- }
-
- var textarea = doc.forms[form_name].elements[text_name];
-
- if (is_ie && typeof(baseHeight) !== 'number') {
- textarea.focus();
- baseHeight = doc.selection.createRange().duplicate().boundingHeight;
-
- if (!document.forms[form_name]) {
- document.body.focus();
- }
- }
-}
-
-/**
-* bbstyle
-*/
-function bbstyle(bbnumber) {
- if (bbnumber !== -1) {
- bbfontstyle(bbtags[bbnumber], bbtags[bbnumber+1]);
- } else {
- insert_text('[*]');
- document.forms[form_name].elements[text_name].focus();
- }
-}
-
-/**
-* Apply bbcodes
-*/
-function bbfontstyle(bbopen, bbclose) {
- theSelection = false;
-
- var textarea = document.forms[form_name].elements[text_name];
-
- textarea.focus();
-
- if ((clientVer >= 4) && is_ie && is_win) {
- // Get text selection
- theSelection = document.selection.createRange().text;
-
- if (theSelection) {
- // Add tags around selection
- document.selection.createRange().text = bbopen + theSelection + bbclose;
- document.forms[form_name].elements[text_name].focus();
- theSelection = '';
- return;
- }
- } else if (document.forms[form_name].elements[text_name].selectionEnd
- && (document.forms[form_name].elements[text_name].selectionEnd - document.forms[form_name].elements[text_name].selectionStart > 0)) {
- mozWrap(document.forms[form_name].elements[text_name], bbopen, bbclose);
- document.forms[form_name].elements[text_name].focus();
- theSelection = '';
- return;
- }
-
- //The new position for the cursor after adding the bbcode
- var caret_pos = getCaretPosition(textarea).start;
- var new_pos = caret_pos + bbopen.length;
-
- // Open tag
- insert_text(bbopen + bbclose);
-
- // Center the cursor when we don't have a selection
- // Gecko and proper browsers
- if (!isNaN(textarea.selectionStart)) {
- textarea.selectionStart = new_pos;
- textarea.selectionEnd = new_pos;
- }
- // IE
- else if (document.selection) {
- var range = textarea.createTextRange();
- range.move("character", new_pos);
- range.select();
- storeCaret(textarea);
- }
-
- textarea.focus();
- return;
-}
-
-/**
-* Insert text at position
-*/
-function insert_text(text, spaces, popup) {
- var textarea;
-
- if (!popup) {
- textarea = document.forms[form_name].elements[text_name];
- } else {
- textarea = opener.document.forms[form_name].elements[text_name];
- }
-
- if (spaces) {
- text = ' ' + text + ' ';
- }
-
- if (!isNaN(textarea.selectionStart)) {
- var sel_start = textarea.selectionStart;
- var sel_end = textarea.selectionEnd;
-
- mozWrap(textarea, text, '');
- textarea.selectionStart = sel_start + text.length;
- textarea.selectionEnd = sel_end + text.length;
- } else if (textarea.createTextRange && textarea.caretPos) {
- if (baseHeight !== textarea.caretPos.boundingHeight) {
- textarea.focus();
- storeCaret(textarea);
- }
-
- var caret_pos = textarea.caretPos;
- caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) === ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text;
- } else {
- textarea.value = textarea.value + text;
- }
-
- if (!popup) {
- textarea.focus();
- }
-}
-
-/**
-* Add inline attachment at position
-*/
-function attach_inline(index, filename) {
- insert_text('[attachment=' + index + ']' + filename + '[/attachment]');
- document.forms[form_name].elements[text_name].focus();
-}
-
-/**
-* Add quote text to message
-*/
-function addquote(post_id, username)
-{
- var message_name = 'message_' + post_id;
- var theSelection = '';
- var divarea = false;
-
- if (document.all) {
- divarea = document.all[message_name];
- } else {
- divarea = document.getElementById(message_name);
- }
-
- // Get text selection - not only the post content :(
- if (window.getSelection) {
- theSelection = window.getSelection().toString();
- } else if (document.getSelection) {
- theSelection = document.getSelection();
- } else if (document.selection) {
- theSelection = document.selection.createRange().text;
- }
-
- if (theSelection === '' || typeof theSelection === 'undefined' || theSelection === null) {
- if (divarea.innerHTML) {
- theSelection = divarea.innerHTML.replace(/<br>/ig, '\n');
- theSelection = theSelection.replace(/<br\/>/ig, '\n');
- theSelection = theSelection.replace(/&lt\;/ig, '<');
- theSelection = theSelection.replace(/&gt\;/ig, '>');
- theSelection = theSelection.replace(/&amp\;/ig, '&');
- theSelection = theSelection.replace(/&nbsp\;/ig, ' ');
- } else if (document.all) {
- theSelection = divarea.innerText;
- } else if (divarea.textContent) {
- theSelection = divarea.textContent;
- } else if (divarea.firstChild.nodeValue) {
- theSelection = divarea.firstChild.nodeValue;
- }
- }
-
- if (theSelection) {
- insert_text('[quote="' + username + '"]' + theSelection + '[/quote]');
- }
-
- return;
-}
-
-/**
-* From http://www.massless.org/mozedit/
-*/
-function mozWrap(txtarea, open, close) {
- var selLength = (typeof(txtarea.textLength) === 'undefined') ? txtarea.value.length : txtarea.textLength;
- var selStart = txtarea.selectionStart;
- var selEnd = txtarea.selectionEnd;
- var scrollTop = txtarea.scrollTop;
-
- if (selEnd === 1 || selEnd === 2) {
- selEnd = selLength;
- }
-
- var s1 = (txtarea.value).substring(0,selStart);
- var s2 = (txtarea.value).substring(selStart, selEnd);
- var s3 = (txtarea.value).substring(selEnd, selLength);
-
- txtarea.value = s1 + open + s2 + close + s3;
- txtarea.selectionStart = selStart + open.length;
- txtarea.selectionEnd = selEnd + open.length;
- txtarea.focus();
- txtarea.scrollTop = scrollTop;
-
- return;
-}
-
-/**
-* Insert at Caret position. Code from
-* http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
-*/
-function storeCaret(textEl) {
- if (textEl.createTextRange) {
- textEl.caretPos = document.selection.createRange().duplicate();
- }
-}
-
-/**
-* Color pallette
-*/
-function colorPalette(dir, width, height) {
- var r = 0, g = 0, b = 0;
- var numberList = new Array(6);
- var color = '';
-
- numberList[0] = '00';
- numberList[1] = '40';
- numberList[2] = '80';
- numberList[3] = 'BF';
- numberList[4] = 'FF';
-
- document.writeln('<table class="type2">');
-
- for (r = 0; r < 5; r++) {
- if (dir === 'h') {
- document.writeln('<tr>');
- }
-
- for (g = 0; g < 5; g++) {
- if (dir === 'v') {
- document.writeln('<tr>');
- }
-
- for (b = 0; b < 5; b++) {
- color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]);
- document.write('<td bgcolor="#' + color + '" style="width: ' + width + 'px; height: ' + height + 'px;">');
- document.write('<a href="#" onclick="bbfontstyle(\'[color=#' + color + ']\', \'[/color]\'); return false;"><img src="images/spacer.gif" width="' + width + '" height="' + height + '" alt="#' + color + '" title="#' + color + '" /></a>');
- document.writeln('</td>');
- }
-
- if (dir === 'v') {
- document.writeln('</tr>');
- }
- }
-
- if (dir === 'h') {
- document.writeln('</tr>');
- }
- }
- document.writeln('</table>');
-}
-
-/**
-* Caret Position object
-*/
-function caretPosition() {
- var start = null;
- var end = null;
-}
-
-/**
-* Get the caret position in an textarea
-*/
-function getCaretPosition(txtarea) {
- var caretPos = new caretPosition();
-
- // simple Gecko/Opera way
- if (txtarea.selectionStart || txtarea.selectionStart === 0) {
- caretPos.start = txtarea.selectionStart;
- caretPos.end = txtarea.selectionEnd;
- }
- // dirty and slow IE way
- else if (document.selection) {
- // get current selection
- var range = document.selection.createRange();
-
- // a new selection of the whole textarea
- var range_all = document.body.createTextRange();
- range_all.moveToElementText(txtarea);
-
- // calculate selection start point by moving beginning of range_all to beginning of range
- var sel_start;
- for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) {
- range_all.moveStart('character', 1);
- }
-
- txtarea.sel_start = sel_start;
-
- // we ignore the end value for IE, this is already dirty enough and we don't need it
- caretPos.start = txtarea.sel_start;
- caretPos.end = txtarea.sel_start;
- }
-
- return caretPos;
-}
diff --git a/phpBB/styles/prosilver/template/editor.js b/phpBB/assets/javascript/editor.js
index 66a3cb51ac..418dd163aa 100644
--- a/phpBB/styles/prosilver/template/editor.js
+++ b/phpBB/assets/javascript/editor.js
@@ -346,7 +346,11 @@ function colorPalette(dir, width, height) {
(function($) {
$(document).ready(function() {
$('#color_palette_placeholder').each(function() {
- $(this).html(colorPalette('h', 15, 12));
+ var orientation = $(this).attr('data-orientation'),
+ height = $(this).attr('data-height'),
+ width = $(this).attr('data-width');
+
+ $(this).html(colorPalette(orientation, width, height));
});
});
})(jQuery);
diff --git a/phpBB/bin/phpbbcli.php b/phpBB/bin/phpbbcli.php
new file mode 100755
index 0000000000..49f4ca13e7
--- /dev/null
+++ b/phpBB/bin/phpbbcli.php
@@ -0,0 +1,36 @@
+#!/usr/bin/env php
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+if (php_sapi_name() != 'cli')
+{
+ echo 'This program must be run from the command line.' . PHP_EOL;
+ exit(1);
+}
+
+define('IN_PHPBB', true);
+$phpbb_root_path = __DIR__ . '/../';
+$phpEx = substr(strrchr(__FILE__, '.'), 1);
+require($phpbb_root_path . 'includes/startup.' . $phpEx);
+require($phpbb_root_path . 'config.' . $phpEx);
+require($phpbb_root_path . 'includes/constants.' . $phpEx);
+require($phpbb_root_path . 'includes/functions.' . $phpEx);
+require($phpbb_root_path . 'includes/functions_container.' . $phpEx);
+require($phpbb_root_path . 'phpbb/class_loader.' . $phpEx);
+
+$phpbb_class_loader = new \phpbb\class_loader('phpbb\\', "{$phpbb_root_path}phpbb/", $phpEx);
+$phpbb_class_loader->register();
+$phpbb_class_loader_ext = new \phpbb\class_loader('\\', "{$phpbb_root_path}ext/", $phpEx);
+$phpbb_class_loader_ext->register();
+
+$phpbb_container = phpbb_create_update_container($phpbb_root_path, $phpEx, "$phpbb_root_path/config");
+
+$application = new \phpbb\console\application('phpBB Console', PHPBB_VERSION);
+$application->register_container_commands($phpbb_container);
+$application->run();
diff --git a/phpBB/composer.json b/phpBB/composer.json
index ddb264de17..3cf83a8fe9 100644
--- a/phpBB/composer.json
+++ b/phpBB/composer.json
@@ -3,6 +3,7 @@
"require": {
"lusitanian/oauth": "0.2.*",
"symfony/config": "2.3.*",
+ "symfony/console": "2.3.*",
"symfony/dependency-injection": "2.3.*",
"symfony/event-dispatcher": "2.3.*",
"symfony/http-kernel": "2.3.*",
diff --git a/phpBB/composer.lock b/phpBB/composer.lock
index 5d1ba4efe1..c0eb7afcbb 100644
--- a/phpBB/composer.lock
+++ b/phpBB/composer.lock
@@ -3,7 +3,7 @@
"This file locks the dependencies of your project to a known state",
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
],
- "hash": "7bcfe8f8ce4fa46cb53c276cf93dcd3e",
+ "hash": "cc83663b780856890f787b9b4d6ea474",
"packages": [
{
"name": "lusitanian/oauth",
@@ -155,6 +155,59 @@
"time": "2013-08-06 05:49:23"
},
{
+ "name": "symfony/console",
+ "version": "v2.3.6",
+ "target-dir": "Symfony/Component/Console",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/Console.git",
+ "reference": "f880062d56edefb25b36f2defa65aafe65959dc7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/Console/zipball/f880062d56edefb25b36f2defa65aafe65959dc7",
+ "reference": "f880062d56edefb25b36f2defa65aafe65959dc7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "symfony/event-dispatcher": "~2.1"
+ },
+ "suggest": {
+ "symfony/event-dispatcher": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.3-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Symfony\\Component\\Console\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Console Component",
+ "homepage": "http://symfony.com",
+ "time": "2013-09-25 06:04:15"
+ },
+ {
"name": "symfony/debug",
"version": "v2.3.4",
"target-dir": "Symfony/Component/Debug",
diff --git a/phpBB/config/console.yml b/phpBB/config/console.yml
new file mode 100644
index 0000000000..c85a9d19ed
--- /dev/null
+++ b/phpBB/config/console.yml
@@ -0,0 +1,35 @@
+services:
+ console.command.extension.disable:
+ class: phpbb\console\command\extension\disable
+ arguments:
+ - @ext.manager
+ tags:
+ - { name: console.command }
+
+ console.command.extension.enable:
+ class: phpbb\console\command\extension\enable
+ arguments:
+ - @ext.manager
+ tags:
+ - { name: console.command }
+
+ console.command.extension.purge:
+ class: phpbb\console\command\extension\purge
+ arguments:
+ - @ext.manager
+ tags:
+ - { name: console.command }
+
+ console.command.extension.show:
+ class: phpbb\console\command\extension\show
+ arguments:
+ - @ext.manager
+ tags:
+ - { name: console.command }
+
+ console.command.fixup.recalculate_email_hash:
+ class: phpbb\console\command\fixup\recalculate_email_hash
+ arguments:
+ - @dbal.conn
+ tags:
+ - { name: console.command }
diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml
index 8961ef0606..4280f90375 100644
--- a/phpBB/config/services.yml
+++ b/phpBB/config/services.yml
@@ -6,6 +6,7 @@ imports:
- { resource: avatars.yml }
- { resource: feed.yml }
- { resource: auth_providers.yml }
+ - { resource: console.yml }
services:
acl.permissions:
diff --git a/phpBB/develop/extensions.php b/phpBB/develop/extensions.php
deleted file mode 100644
index 43621f3080..0000000000
--- a/phpBB/develop/extensions.php
+++ /dev/null
@@ -1,129 +0,0 @@
-<?php
-/**
-*
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-define('IN_PHPBB', 1);
-define('ANONYMOUS', 1);
-$phpEx = substr(strrchr(__FILE__, '.'), 1);
-$phpbb_root_path = __DIR__.'/../';
-
-include($phpbb_root_path . 'common.'.$phpEx);
-
-function usage()
-{
- echo "Usage: extensions.php COMMAND [OPTION]...\n";
- echo "Console extension manager.\n";
- echo "\n";
- echo "list:\n";
- echo " Lists all extensions in the database and the filesystem.\n";
- echo "\n";
- echo "enable NAME:\n";
- echo " Enables the specified extension.\n";
- echo "\n";
- echo "disable NAME:\n";
- echo " Disables the specified extension.\n";
- echo "\n";
- echo "purge NAME:\n";
- echo " Purges the specified extension.\n";
- exit(2);
-}
-
-function list_extensions()
-{
- global $phpbb_extension_manager;
-
- $phpbb_extension_manager->load_extensions();
- $all = array_keys($phpbb_extension_manager->all_available());
-
- if (empty($all))
- {
- echo "There were no extensions found.\n";
- exit(3);
- }
-
- echo "Enabled:\n";
- $enabled = array_keys($phpbb_extension_manager->all_enabled());
- print_extensions($enabled);
- echo "\n";
-
- echo "Disabled:\n";
- $disabled = array_keys($phpbb_extension_manager->all_disabled());
- print_extensions($disabled);
- echo "\n";
-
- echo "Available:\n";
- $purged = array_diff($all, $enabled, $disabled);
- print_extensions($purged);
-}
-
-function print_extensions($exts)
-{
- foreach ($exts as $ext)
- {
- echo "- $ext\n";
- }
-}
-
-function enable_extension($name)
-{
- global $phpbb_extension_manager;
-
- $phpbb_extension_manager->enable($name);
-}
-
-function disable_extension($name)
-{
- global $phpbb_extension_manager;
-
- $phpbb_extension_manager->disable($name);
-}
-
-function purge_extension($name)
-{
- global $phpbb_extension_manager;
-
- $phpbb_extension_manager->purge($name);
-}
-
-function validate_argument_count($count)
-{
- global $argv;
-
- if (count($argv) <= $count)
- {
- usage();
- }
-}
-
-validate_argument_count(1);
-
-$action = $argv[1];
-
-switch ($action)
-{
- case 'list':
- list_extensions();
- break;
-
- case 'enable':
- validate_argument_count(2);
- enable_extension($argv[2]);
- break;
-
- case 'disable':
- validate_argument_count(2);
- disable_extension($argv[2]);
- break;
-
- case 'purge':
- validate_argument_count(2);
- purge_extension($argv[2]);
- break;
-
- default:
- usage();
-}
diff --git a/phpBB/includes/functions_install.php b/phpBB/includes/functions_install.php
index 1be6e49471..10e9878cc8 100644
--- a/phpBB/includes/functions_install.php
+++ b/phpBB/includes/functions_install.php
@@ -533,3 +533,51 @@ function phpbb_create_config_file_data($data, $dbms, $debug = false, $debug_test
return $config_data;
}
+
+/**
+* Check whether a file should be ignored on update
+*
+* We ignore new files in some circumstances:
+* 1. The file is a language file, but the language is not installed
+* 2. The file is a style file, but the style is not installed
+* 3. The file is a style language file, but the language is not installed
+*
+* @param string $phpbb_root_path phpBB root path
+* @param string $file File including path from phpbb root
+* @return bool Should we ignore the new file or add it to the board?
+*/
+function phpbb_ignore_new_file_on_update($phpbb_root_path, $file)
+{
+ $ignore_new_file = false;
+
+ // We ignore new files in some circumstances:
+ // 1. The file is a language file, but the language is not installed
+ if (!$ignore_new_file && strpos($file, 'language/') === 0)
+ {
+ list($language_dir, $language_iso) = explode('/', $file);
+ $ignore_new_file = !file_exists($phpbb_root_path . $language_dir . '/' . $language_iso);
+ }
+
+ // 2. The file is a style file, but the style is not installed
+ if (!$ignore_new_file && strpos($file, 'styles/') === 0)
+ {
+ list($styles_dir, $style_name) = explode('/', $file);
+ $ignore_new_file = !file_exists($phpbb_root_path . $styles_dir . '/' . $style_name);
+ }
+
+ // 3. The file is a style language file, but the language is not installed
+ if (!$ignore_new_file && strpos($file, 'styles/') === 0)
+ {
+ $dirs = explode('/', $file);
+ if ($dirs >= 5)
+ {
+ list($styles_dir, $style_name, $template_component, $language_iso) = explode('/', $file);
+ if ($template_component == 'theme' && $language_iso !== 'images')
+ {
+ $ignore_new_file = !file_exists($phpbb_root_path . 'language/' . $language_iso);
+ }
+ }
+ }
+
+ return $ignore_new_file;
+}
diff --git a/phpBB/install/install_update.php b/phpBB/install/install_update.php
index b7b358ab2f..dc6e57c851 100644
--- a/phpBB/install/install_update.php
+++ b/phpBB/install/install_update.php
@@ -1311,7 +1311,7 @@ class install_update extends module
}
}*/
- if (file_exists($phpbb_root_path . dirname($file)) || (strpos($file, 'styles/') !== 0 && strpos($file, 'language/') !== 0))
+ if (!phpbb_ignore_new_file_on_update($phpbb_root_path, $file))
{
$this->get_custom_info($update_list['new'], $file);
$update_list['new'][] = array('filename' => $file, 'custom' => false);
diff --git a/phpBB/phpbb/console/application.php b/phpBB/phpbb/console/application.php
new file mode 100644
index 0000000000..fdcd9d42f6
--- /dev/null
+++ b/phpBB/phpbb/console/application.php
@@ -0,0 +1,23 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+namespace phpbb\console;
+
+use Symfony\Component\DependencyInjection\TaggedContainerInterface;
+
+class application extends \Symfony\Component\Console\Application
+{
+ function register_container_commands(TaggedContainerInterface $container, $tag = 'console.command')
+ {
+ foreach($container->findTaggedServiceIds($tag) as $id => $void)
+ {
+ $this->add($container->get($id));
+ }
+ }
+}
diff --git a/phpBB/phpbb/console/command/command.php b/phpBB/phpbb/console/command/command.php
new file mode 100644
index 0000000000..6abbdd203c
--- /dev/null
+++ b/phpBB/phpbb/console/command/command.php
@@ -0,0 +1,14 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+namespace phpbb\console\command;
+
+abstract class command extends \Symfony\Component\Console\Command\Command
+{
+}
diff --git a/phpBB/phpbb/console/command/extension/command.php b/phpBB/phpbb/console/command/extension/command.php
new file mode 100644
index 0000000000..edde7ce2e2
--- /dev/null
+++ b/phpBB/phpbb/console/command/extension/command.php
@@ -0,0 +1,22 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+namespace phpbb\console\command\extension;
+
+abstract class command extends \phpbb\console\command\command
+{
+ /** @var \phpbb\extension\manager */
+ protected $manager;
+
+ function __construct(\phpbb\extension\manager $manager)
+ {
+ $this->manager = $manager;
+
+ parent::__construct();
+ }
+}
diff --git a/phpBB/phpbb/console/command/extension/disable.php b/phpBB/phpbb/console/command/extension/disable.php
new file mode 100644
index 0000000000..e4de70ca34
--- /dev/null
+++ b/phpBB/phpbb/console/command/extension/disable.php
@@ -0,0 +1,47 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+namespace phpbb\console\command\extension;
+
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class disable extends command
+{
+ protected function configure()
+ {
+ $this
+ ->setName('extension:disable')
+ ->setDescription('Disables the specified extension.')
+ ->addArgument(
+ 'extension-name',
+ InputArgument::REQUIRED,
+ 'Name of the extension'
+ )
+ ;
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $name = $input->getArgument('extension-name');
+ $this->manager->disable($name);
+ $this->manager->load_extensions();
+
+ if ($this->manager->enabled($name))
+ {
+ $output->writeln("<error>Could not disable extension $name</error>");
+ return 1;
+ }
+ else
+ {
+ $output->writeln("<info>Successfully disabled extension $name</info>");
+ return 0;
+ }
+ }
+}
diff --git a/phpBB/phpbb/console/command/extension/enable.php b/phpBB/phpbb/console/command/extension/enable.php
new file mode 100644
index 0000000000..ee7dae76aa
--- /dev/null
+++ b/phpBB/phpbb/console/command/extension/enable.php
@@ -0,0 +1,47 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+namespace phpbb\console\command\extension;
+
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class enable extends command
+{
+ protected function configure()
+ {
+ $this
+ ->setName('extension:enable')
+ ->setDescription('Enables the specified extension.')
+ ->addArgument(
+ 'extension-name',
+ InputArgument::REQUIRED,
+ 'Name of the extension'
+ )
+ ;
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $name = $input->getArgument('extension-name');
+ $this->manager->enable($name);
+ $this->manager->load_extensions();
+
+ if ($this->manager->enabled($name))
+ {
+ $output->writeln("<info>Successfully enabled extension $name</info>");
+ return 0;
+ }
+ else
+ {
+ $output->writeln("<error>Could not enable extension $name</error>");
+ return 1;
+ }
+ }
+}
diff --git a/phpBB/phpbb/console/command/extension/purge.php b/phpBB/phpbb/console/command/extension/purge.php
new file mode 100644
index 0000000000..c2e1d2928c
--- /dev/null
+++ b/phpBB/phpbb/console/command/extension/purge.php
@@ -0,0 +1,47 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+namespace phpbb\console\command\extension;
+
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class purge extends command
+{
+ protected function configure()
+ {
+ $this
+ ->setName('extension:purge')
+ ->setDescription('Purges the specified extension.')
+ ->addArgument(
+ 'extension-name',
+ InputArgument::REQUIRED,
+ 'Name of the extension'
+ )
+ ;
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $name = $input->getArgument('extension-name');
+ $this->manager->purge($name);
+ $this->manager->load_extensions();
+
+ if ($this->manager->enabled($name))
+ {
+ $output->writeln("<error>Could not purge extension $name</error>");
+ return 1;
+ }
+ else
+ {
+ $output->writeln("<info>Successfully purge extension $name</info>");
+ return 0;
+ }
+ }
+}
diff --git a/phpBB/phpbb/console/command/extension/show.php b/phpBB/phpbb/console/command/extension/show.php
new file mode 100644
index 0000000000..0f48ac2379
--- /dev/null
+++ b/phpBB/phpbb/console/command/extension/show.php
@@ -0,0 +1,58 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+namespace phpbb\console\command\extension;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class show extends command
+{
+ protected function configure()
+ {
+ $this
+ ->setName('extension:show')
+ ->setDescription('Lists all extensions in the database and on the filesystem.')
+ ;
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $this->manager->load_extensions();
+ $all = array_keys($this->manager->all_available());
+
+ if (empty($all))
+ {
+ $output->writeln('<comment>No extensions were found.</comment>');
+ return 3;
+ }
+
+ $enabled = array_keys($this->manager->all_enabled());
+ $this->print_extension_list($output, 'Enabled', $enabled);
+
+ $output->writeln('');
+
+ $disabled = array_keys($this->manager->all_disabled());
+ $this->print_extension_list($output, 'Disabled', $disabled);
+
+ $output->writeln('');
+
+ $purged = array_diff($all, $enabled, $disabled);
+ $this->print_extension_list($output, 'Available', $purged);
+ }
+
+ protected function print_extension_list(OutputInterface $output, $type, array $extensions)
+ {
+ $output->writeln("<info>$type:</info>");
+
+ foreach ($extensions as $extension)
+ {
+ $output->writeln(" - $extension");
+ }
+ }
+}
diff --git a/phpBB/phpbb/console/command/fixup/recalculate_email_hash.php b/phpBB/phpbb/console/command/fixup/recalculate_email_hash.php
new file mode 100644
index 0000000000..04db880091
--- /dev/null
+++ b/phpBB/phpbb/console/command/fixup/recalculate_email_hash.php
@@ -0,0 +1,71 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+namespace phpbb\console\command\fixup;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class recalculate_email_hash extends \phpbb\console\command\command
+{
+ /** @var \phpbb\db\driver\driver */
+ protected $db;
+
+ function __construct(\phpbb\db\driver\driver $db)
+ {
+ $this->db = $db;
+
+ parent::__construct();
+ }
+
+ protected function configure()
+ {
+ $this
+ ->setName('fixup:recalculate-email-hash')
+ ->setDescription('Recalculates the user_email_hash column of the users table.')
+ ;
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $sql = 'SELECT user_id, user_email, user_email_hash
+ FROM ' . USERS_TABLE . '
+ WHERE user_type <> ' . USER_IGNORE . "
+ AND user_email <> ''";
+ $result = $this->db->sql_query($sql);
+
+ while ($row = $this->db->sql_fetchrow($result))
+ {
+ $user_email_hash = phpbb_email_hash($row['user_email']);
+ if ($user_email_hash !== $row['user_email_hash'])
+ {
+ $sql_ary = array(
+ 'user_email_hash' => $user_email_hash,
+ );
+
+ $sql = 'UPDATE ' . USERS_TABLE . '
+ SET ' . $this->db->sql_build_array('UPDATE', $sql_ary) . '
+ WHERE user_id = ' . (int) $row['user_id'];
+ $this->db->sql_query($sql);
+
+ if ($output->getVerbosity() >= OutputInterface::VERBOSITY_DEBUG)
+ {
+ $output->writeln(sprintf(
+ 'user_id %d, email %s => %s',
+ $row['user_id'],
+ $row['user_email'],
+ $user_email_hash
+ ));
+ }
+ }
+ }
+ $this->db->sql_freeresult($result);
+
+ $output->writeln('<info>Successfully recalculated all email hashes.</info>');
+ }
+}
diff --git a/phpBB/styles/prosilver/template/posting_buttons.html b/phpBB/styles/prosilver/template/posting_buttons.html
index 798faa2ff7..aa269058cc 100644
--- a/phpBB/styles/prosilver/template/posting_buttons.html
+++ b/phpBB/styles/prosilver/template/posting_buttons.html
@@ -49,13 +49,13 @@
// ]]>
</script>
-<!-- INCLUDEJS editor.js -->
+<!-- INCLUDEJS {T_ASSETS_PATH}/javascript/editor.js -->
<!-- IF S_BBCODE_ALLOWED -->
<div id="colour_palette" style="display: none;">
<dl style="clear: left;">
<dt><label>{L_FONT_COLOR}{L_COLON}</label></dt>
- <dd id="color_palette_placeholder"></dd>
+ <dd id="color_palette_placeholder" data-orientation="h" data-height="12" data-width="15"></dd>
</dl>
</div>
diff --git a/phpBB/styles/prosilver/template/posting_smilies.html b/phpBB/styles/prosilver/template/posting_smilies.html
index 3d56a932b7..cb542c1a8c 100644
--- a/phpBB/styles/prosilver/template/posting_smilies.html
+++ b/phpBB/styles/prosilver/template/posting_smilies.html
@@ -6,7 +6,7 @@
var text_name = opener.text_name;
// ]]>
</script>
-<script type="text/javascript" src="{T_SUPER_TEMPLATE_PATH}/editor.js"></script>
+<!-- INCLUDEJS {T_ASSETS_PATH}/javascript/editor.js -->
<h2>{L_SMILIES}</h2>
<div class="panel">
diff --git a/phpBB/styles/subsilver2/template/editor.js b/phpBB/styles/subsilver2/template/editor.js
deleted file mode 100644
index 6cf616e180..0000000000
--- a/phpBB/styles/subsilver2/template/editor.js
+++ /dev/null
@@ -1,385 +0,0 @@
-/**
-* bbCode control by subBlue design [ www.subBlue.com ]
-* Includes unixsafe colour palette selector by SHS`
-*/
-
-// Startup variables
-var imageTag = false;
-var theSelection = false;
-var bbcodeEnabled = true;
-
-// Check for Browser & Platform for PC & IE specific bits
-// More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html
-var clientPC = navigator.userAgent.toLowerCase(); // Get client info
-var clientVer = parseInt(navigator.appVersion, 10); // Get browser version
-
-var is_ie = ((clientPC.indexOf('msie') !== -1) && (clientPC.indexOf('opera') === -1));
-var is_win = ((clientPC.indexOf('win') !== -1) || (clientPC.indexOf('16bit') !== -1));
-var baseHeight;
-
-/**
-* Shows the help messages in the helpline window
-*/
-function helpline(help) {
- document.forms[form_name].helpbox.value = help_line[help];
-}
-
-/**
-* Fix a bug involving the TextRange object. From
-* http://www.frostjedi.com/terra/scripts/demo/caretBug.html
-*/
-function initInsertions() {
- var doc;
-
- if (document.forms[form_name]) {
- doc = document;
- } else {
- doc = opener.document;
- }
-
- var textarea = doc.forms[form_name].elements[text_name];
- phpbb.applyCodeEditor(textarea);
-
- if (is_ie && typeof(baseHeight) !== 'number') {
- textarea.focus();
- baseHeight = doc.selection.createRange().duplicate().boundingHeight;
-
- if (!document.forms[form_name]) {
- document.body.focus();
- }
- }
-}
-
-/**
-* bbstyle
-*/
-function bbstyle(bbnumber) {
- if (bbnumber !== -1) {
- bbfontstyle(bbtags[bbnumber], bbtags[bbnumber+1]);
- } else {
- insert_text('[*]');
- document.forms[form_name].elements[text_name].focus();
- }
-}
-
-/**
-* Apply bbcodes
-*/
-function bbfontstyle(bbopen, bbclose) {
- theSelection = false;
-
- var textarea = document.forms[form_name].elements[text_name];
-
- textarea.focus();
-
- if ((clientVer >= 4) && is_ie && is_win) {
- // Get text selection
- theSelection = document.selection.createRange().text;
-
- if (theSelection) {
- // Add tags around selection
- document.selection.createRange().text = bbopen + theSelection + bbclose;
- document.forms[form_name].elements[text_name].focus();
- theSelection = '';
- return;
- }
- } else if (document.forms[form_name].elements[text_name].selectionEnd
- && (document.forms[form_name].elements[text_name].selectionEnd - document.forms[form_name].elements[text_name].selectionStart > 0)) {
- mozWrap(document.forms[form_name].elements[text_name], bbopen, bbclose);
- document.forms[form_name].elements[text_name].focus();
- theSelection = '';
- return;
- }
-
- //The new position for the cursor after adding the bbcode
- var caret_pos = getCaretPosition(textarea).start;
- var new_pos = caret_pos + bbopen.length;
-
- // Open tag
- insert_text(bbopen + bbclose);
-
- // Center the cursor when we don't have a selection
- // Gecko and proper browsers
- if (!isNaN(textarea.selectionStart)) {
- textarea.selectionStart = new_pos;
- textarea.selectionEnd = new_pos;
- }
- // IE
- else if (document.selection) {
- var range = textarea.createTextRange();
- range.move("character", new_pos);
- range.select();
- storeCaret(textarea);
- }
-
- textarea.focus();
- return;
-}
-
-/**
-* Insert text at position
-*/
-function insert_text(text, spaces, popup) {
- var textarea;
-
- if (!popup) {
- textarea = document.forms[form_name].elements[text_name];
- } else {
- textarea = opener.document.forms[form_name].elements[text_name];
- }
-
- if (spaces) {
- text = ' ' + text + ' ';
- }
-
- // Since IE9, IE also has textarea.selectionStart, but it still needs to be treated the old way.
- // Therefore we simply add a !is_ie here until IE fixes the text-selection completely.
- if (!isNaN(textarea.selectionStart) && !is_ie) {
- var sel_start = textarea.selectionStart;
- var sel_end = textarea.selectionEnd;
-
- mozWrap(textarea, text, '');
- textarea.selectionStart = sel_start + text.length;
- textarea.selectionEnd = sel_end + text.length;
- } else if (textarea.createTextRange && textarea.caretPos) {
- if (baseHeight !== textarea.caretPos.boundingHeight) {
- textarea.focus();
- storeCaret(textarea);
- }
-
- var caret_pos = textarea.caretPos;
- caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) === ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text;
- } else {
- textarea.value = textarea.value + text;
- }
-
- if (!popup) {
- textarea.focus();
- }
-}
-
-/**
-* Add inline attachment at position
-*/
-function attach_inline(index, filename) {
- insert_text('[attachment=' + index + ']' + filename + '[/attachment]');
- document.forms[form_name].elements[text_name].focus();
-}
-
-/**
-* Add quote text to message
-*/
-function addquote(post_id, username, l_wrote) {
- var message_name = 'message_' + post_id;
- var theSelection = '';
- var divarea = false;
- var i;
-
- if (l_wrote === undefined) {
- // Backwards compatibility
- l_wrote = 'wrote';
- }
-
- if (document.all) {
- divarea = document.all[message_name];
- } else {
- divarea = document.getElementById(message_name);
- }
-
- // Get text selection - not only the post content :(
- // IE9 must use the document.selection method but has the *.getSelection so we just force no IE
- if (window.getSelection && !is_ie && !window.opera) {
- theSelection = window.getSelection().toString();
- } else if (document.getSelection && !is_ie) {
- theSelection = document.getSelection();
- } else if (document.selection) {
- theSelection = document.selection.createRange().text;
- }
-
- if (theSelection === '' || typeof theSelection === 'undefined' || theSelection === null) {
- if (divarea.innerHTML) {
- theSelection = divarea.innerHTML.replace(/<br>/ig, '\n');
- theSelection = theSelection.replace(/<br\/>/ig, '\n');
- theSelection = theSelection.replace(/&lt\;/ig, '<');
- theSelection = theSelection.replace(/&gt\;/ig, '>');
- theSelection = theSelection.replace(/&amp\;/ig, '&');
- theSelection = theSelection.replace(/&nbsp\;/ig, ' ');
- } else if (document.all) {
- theSelection = divarea.innerText;
- } else if (divarea.textContent) {
- theSelection = divarea.textContent;
- } else if (divarea.firstChild.nodeValue) {
- theSelection = divarea.firstChild.nodeValue;
- }
- }
-
- if (theSelection) {
- if (bbcodeEnabled) {
- insert_text('[quote="' + username + '"]' + theSelection + '[/quote]');
- } else {
- insert_text(username + ' ' + l_wrote + ':' + '\n');
- var lines = split_lines(theSelection);
- for (i = 0; i < lines.length; i++) {
- insert_text('> ' + lines[i] + '\n');
- }
- }
- }
-
- return;
-}
-
-function split_lines(text) {
- var lines = text.split('\n');
- var splitLines = new Array();
- var j = 0;
- var i;
-
- for(i = 0; i < lines.length; i++) {
- if (lines[i].length <= 80) {
- splitLines[j] = lines[i];
- j++;
- } else {
- var line = lines[i];
- var splitAt;
- do {
- splitAt = line.indexOf(' ', 80);
-
- if (splitAt === -1) {
- splitLines[j] = line;
- j++;
- } else {
- splitLines[j] = line.substring(0, splitAt);
- line = line.substring(splitAt);
- j++;
- }
- }
- while(splitAt !== -1);
- }
- }
- return splitLines;
-}
-
-/**
-* From http://www.massless.org/mozedit/
-*/
-function mozWrap(txtarea, open, close) {
- var selLength = (typeof(txtarea.textLength) === 'undefined') ? txtarea.value.length : txtarea.textLength;
- var selStart = txtarea.selectionStart;
- var selEnd = txtarea.selectionEnd;
- var scrollTop = txtarea.scrollTop;
-
- if (selEnd === 1 || selEnd === 2) {
- selEnd = selLength;
- }
-
- var s1 = (txtarea.value).substring(0,selStart);
- var s2 = (txtarea.value).substring(selStart, selEnd);
- var s3 = (txtarea.value).substring(selEnd, selLength);
-
- txtarea.value = s1 + open + s2 + close + s3;
- txtarea.selectionStart = selStart + open.length;
- txtarea.selectionEnd = selEnd + open.length;
- txtarea.focus();
- txtarea.scrollTop = scrollTop;
-
- return;
-}
-
-/**
-* Insert at Caret position. Code from
-* http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
-*/
-function storeCaret(textEl) {
- if (textEl.createTextRange) {
- textEl.caretPos = document.selection.createRange().duplicate();
- }
-}
-
-/**
-* Color pallette
-*/
-function colorPalette(dir, width, height) {
- var r = 0, g = 0, b = 0;
- var numberList = new Array(6);
- var color = '';
-
- numberList[0] = '00';
- numberList[1] = '40';
- numberList[2] = '80';
- numberList[3] = 'BF';
- numberList[4] = 'FF';
-
- document.writeln('<table cellspacing="1" cellpadding="0" border="0">');
-
- for (r = 0; r < 5; r++) {
- if (dir === 'h') {
- document.writeln('<tr>');
- }
-
- for (g = 0; g < 5; g++) {
- if (dir === 'v') {
- document.writeln('<tr>');
- }
-
- for (b = 0; b < 5; b++) {
- color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]);
- document.write('<td bgcolor="#' + color + '" style="width: ' + width + 'px; height: ' + height + 'px;">');
- document.write('<a href="#" onclick="bbfontstyle(\'[color=#' + color + ']\', \'[/color]\'); return false;"><img src="images/spacer.gif" width="' + width + '" height="' + height + '" alt="#' + color + '" title="#' + color + '" /></a>');
- document.writeln('</td>');
- }
-
- if (dir === 'v') {
- document.writeln('</tr>');
- }
- }
-
- if (dir === 'h') {
- document.writeln('</tr>');
- }
- }
- document.writeln('</table>');
-}
-
-/**
-* Caret Position object
-*/
-function caretPosition() {
- var start = null;
- var end = null;
-}
-
-/**
-* Get the caret position in an textarea
-*/
-function getCaretPosition(txtarea) {
- var caretPos = new caretPosition();
-
- // simple Gecko/Opera way
- if (txtarea.selectionStart || txtarea.selectionStart === 0) {
- caretPos.start = txtarea.selectionStart;
- caretPos.end = txtarea.selectionEnd;
- }
- // dirty and slow IE way
- else if (document.selection) {
- // get current selection
- var range = document.selection.createRange();
-
- // a new selection of the whole textarea
- var range_all = document.body.createTextRange();
- range_all.moveToElementText(txtarea);
-
- // calculate selection start point by moving beginning of range_all to beginning of range
- var sel_start;
- for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) {
- range_all.moveStart('character', 1);
- }
-
- txtarea.sel_start = sel_start;
-
- // we ignore the end value for IE, this is already dirty enough and we don't need it
- caretPos.start = txtarea.sel_start;
- caretPos.end = txtarea.sel_start;
- }
-
- return caretPos;
-}
diff --git a/phpBB/styles/subsilver2/template/posting_body.html b/phpBB/styles/subsilver2/template/posting_body.html
index 7b77f85694..79c0fa2dbb 100644
--- a/phpBB/styles/subsilver2/template/posting_body.html
+++ b/phpBB/styles/subsilver2/template/posting_body.html
@@ -207,12 +207,7 @@
<tr>
<td valign="top" style="width: 100%;"><textarea name="message" rows="15" cols="76" tabindex="3" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" onfocus="initInsertions();" style="width: 700px; height: 270px; min-width: 98%; max-width: 98%;">{MESSAGE}</textarea></td>
<!-- IF S_BBCODE_ALLOWED -->
- <td width="80" align="center" valign="top">
- <script type="text/javascript">
- // <![CDATA[
- colorPalette('v', 7, 6)
- // ]]>
- </script>
+ <td width="80" align="center" valign="top" id="color_palette_placeholder" data-orientation="v" data-width="11" data-height="10">
</td>
<!-- ENDIF -->
</tr>
diff --git a/phpBB/styles/subsilver2/template/posting_buttons.html b/phpBB/styles/subsilver2/template/posting_buttons.html
index 1a7093e1be..7a3a4ca73c 100644
--- a/phpBB/styles/subsilver2/template/posting_buttons.html
+++ b/phpBB/styles/subsilver2/template/posting_buttons.html
@@ -33,7 +33,7 @@
// ]]>
</script>
- <script type="text/javascript" src="{T_SUPER_TEMPLATE_PATH}/editor.js"></script>
+ <!-- INCLUDEJS {T_ASSETS_PATH}/javascript/editor.js -->
<!-- IF S_BBCODE_ALLOWED -->
<input type="button" class="btnbbcode" accesskey="b" name="addbbcode0" value=" B " style="font-weight:bold; width: 30px;" onclick="bbstyle(0)" onmouseover="helpline('b')" onmouseout="helpline('tip')" />
diff --git a/phpBB/styles/subsilver2/template/posting_smilies.html b/phpBB/styles/subsilver2/template/posting_smilies.html
index d0ced9ff12..0be71098db 100644
--- a/phpBB/styles/subsilver2/template/posting_smilies.html
+++ b/phpBB/styles/subsilver2/template/posting_smilies.html
@@ -6,7 +6,7 @@
var text_name = opener.text_name;
// ]]>
</script>
-<script type="text/javascript" src="{T_SUPER_TEMPLATE_PATH}/editor.js"></script>
+<!-- INCLUDEJS {T_ASSETS_PATH}/javascript/editor.js -->
<table width="100%" cellspacing="1" cellpadding="4" border="0">
<tr>
diff --git a/phpBB/styles/subsilver2/template/ucp_main_drafts.html b/phpBB/styles/subsilver2/template/ucp_main_drafts.html
index 8e18e9cabf..0206c7c613 100644
--- a/phpBB/styles/subsilver2/template/ucp_main_drafts.html
+++ b/phpBB/styles/subsilver2/template/ucp_main_drafts.html
@@ -75,12 +75,7 @@
<td colspan="9">
<table cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
- <td align="{S_CONTENT_FLOW_BEGIN}">
- <script type="text/javascript">
- // <![CDATA[
- colorPalette('h', 6, 5)
- // ]]>
- </script>
+ <td align="{S_CONTENT_FLOW_BEGIN}" id="color_palette_placeholder" data-orientation="h" data-width="11" data-height="10">
</td>
</tr>
</table>
diff --git a/phpBB/styles/subsilver2/template/ucp_profile_signature.html b/phpBB/styles/subsilver2/template/ucp_profile_signature.html
index 85c8b0f616..5a2690edda 100644
--- a/phpBB/styles/subsilver2/template/ucp_profile_signature.html
+++ b/phpBB/styles/subsilver2/template/ucp_profile_signature.html
@@ -61,12 +61,7 @@
<td colspan="2">
<table cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
- <td align="{S_CONTENT_FLOW_BEGIN}">
- <script type="text/javascript">
- // <![CDATA[
- colorPalette('h', 6, 5)
- // ]]>
- </script>
+ <td align="{S_CONTENT_FLOW_BEGIN}" id="color_palette_placeholder" data-orientation="h" data-width="11" data-height="10">
</td>
</tr>
</table>
diff --git a/phpBB/styles/subsilver2/theme/stylesheet.css b/phpBB/styles/subsilver2/theme/stylesheet.css
index 7d14376454..da99051329 100644
--- a/phpBB/styles/subsilver2/theme/stylesheet.css
+++ b/phpBB/styles/subsilver2/theme/stylesheet.css
@@ -303,6 +303,15 @@ p.topicdetails {
/* Tables
------------ */
+#color_palette_placeholder table {
+ border-collapse: separate;
+ border-spacing: 1px;
+}
+
+#color_palette_placeholder td {
+ padding: 0;
+}
+
th {
color: #FFA34F;
font-size: 1.1em;
diff --git a/tests/functions_install/ignore_new_file_on_update_test.php b/tests/functions_install/ignore_new_file_on_update_test.php
new file mode 100644
index 0000000000..ae1dde96f7
--- /dev/null
+++ b/tests/functions_install/ignore_new_file_on_update_test.php
@@ -0,0 +1,39 @@
+<?php
+/**
+*
+* @package testing
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+require_once dirname(__FILE__) . '/../../phpBB/includes/functions_install.php';
+
+class phpbb_functions_install_ignore_new_file_on_update_test extends phpbb_test_case
+{
+ static public function ignore_new_file_on_update_data()
+ {
+ return array(
+ array('willneverexist.php', false),
+ array('includes/dirwillneverexist/newfile.php', false),
+
+ array('language/en/email/short/bookmark.txt', false),
+ array('language/languagewillneverexist/email/short/bookmark.txt', true),
+
+ array('styles/prosilver/template/bbcode.html', false),
+ array('styles/stylewillneverexist/template/bbcode.html', true),
+
+ array('styles/prosilver/theme/en/icon_user_online.gif', false),
+ array('styles/prosilver/theme/languagewillneverexist/icon_user_online.gif', true),
+ );
+ }
+
+ /**
+ * @dataProvider ignore_new_file_on_update_data
+ */
+ public function test_ignore_new_file_on_update($file, $expected)
+ {
+ global $phpbb_root_path;
+ $this->assertEquals($expected, phpbb_ignore_new_file_on_update($phpbb_root_path, $file));
+ }
+}