diff options
103 files changed, 1332 insertions, 1462 deletions
diff --git a/phpBB/adm/style/ajax.js b/phpBB/adm/style/ajax.js index 294a35b615..8f7c210e00 100644 --- a/phpBB/adm/style/ajax.js +++ b/phpBB/adm/style/ajax.js @@ -115,9 +115,9 @@ phpbb.addAjaxCallback('activate_deactivate', function(res) { el.text(res.text); if (newHref.indexOf('deactivate') !== -1) { - newHref = newHref.replace('deactivate', 'activate') + newHref = newHref.replace('deactivate', 'activate'); } else { - newHref = newHref.replace('activate', 'deactivate') + newHref = newHref.replace('activate', 'deactivate'); } el.attr('href', newHref); diff --git a/phpBB/adm/style/editor.js b/phpBB/adm/style/editor.js index c9e8afe08e..9938ff5d0b 100644 --- a/phpBB/adm/style/editor.js +++ b/phpBB/adm/style/editor.js @@ -10,18 +10,16 @@ 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); // 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 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) -{ +function helpline(help) { document.forms[form_name].helpbox.value = help_line[help]; } @@ -29,26 +27,22 @@ function helpline(help) * Fix a bug involving the TextRange object. From * http://www.frostjedi.com/terra/scripts/demo/caretBug.html */ -function initInsertions() -{ +function initInsertions() { var doc; - if(document.forms[form_name]) - { + + if (document.forms[form_name]) { doc = document; - } - else - { + } else { doc = opener.document; } var textarea = doc.forms[form_name].elements[text_name]; - if (is_ie && typeof(baseHeight) != 'number') - { + + if (is_ie && typeof(baseHeight) !== 'number') { textarea.focus(); baseHeight = doc.selection.createRange().duplicate().boundingHeight; - if (!document.forms[form_name]) - { + if (!document.forms[form_name]) { document.body.focus(); } } @@ -57,69 +51,59 @@ function initInsertions() /** * bbstyle */ -function bbstyle(bbnumber) -{ - if (bbnumber != -1) - { +function bbstyle(bbnumber) { + if (bbnumber !== -1) { bbfontstyle(bbtags[bbnumber], bbtags[bbnumber+1]); - } - else - { + } else { insert_text('[*]'); - document.forms[form_name].elements[text_name].focus(); + document.forms[form_name].elements[text_name].focus(); } } /** * Apply bbcodes */ -function bbfontstyle(bbopen, bbclose) -{ +function bbfontstyle(bbopen, bbclose) { theSelection = false; - + var textarea = document.forms[form_name].elements[text_name]; textarea.focus(); - if ((clientVer >= 4) && is_ie && is_win) - { + if ((clientVer >= 4) && is_ie && is_win) { // Get text selection theSelection = document.selection.createRange().text; - if (theSelection) - { + 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)) - { + } 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; + 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)) - { + if (!isNaN(textarea.selectionStart)) { textarea.selectionStart = new_pos; textarea.selectionEnd = new_pos; - } + } // IE - else if (document.selection) - { + else if (document.selection) { var range = textarea.createTextRange(); range.move("character", new_pos); range.select(); @@ -133,62 +117,47 @@ function bbfontstyle(bbopen, bbclose) /** * Insert text at position */ -function insert_text(text, spaces, popup) -{ +function insert_text(text, spaces, popup) { var textarea; - - if (!popup) - { + + if (!popup) { textarea = document.forms[form_name].elements[text_name]; - } - else - { + } else { textarea = opener.document.forms[form_name].elements[text_name]; } - if (spaces) - { + if (spaces) { text = ' ' + text + ' '; } - if (!isNaN(textarea.selectionStart)) - { + 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) - { + } 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 - { + 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) - { + if (!popup) { textarea.focus(); } - } /** * Add inline attachment at position */ -function attach_inline(index, filename) -{ +function attach_inline(index, filename) { insert_text('[attachment=' + index + ']' + filename + '[/attachment]'); document.forms[form_name].elements[text_name].focus(); } @@ -202,56 +171,39 @@ function addquote(post_id, username) var theSelection = ''; var divarea = false; - if (document.all) - { + if (document.all) { divarea = document.all[message_name]; - } - else - { + } else { divarea = document.getElementById(message_name); } // Get text selection - not only the post content :( - if (window.getSelection) - { + if (window.getSelection) { theSelection = window.getSelection().toString(); - } - else if (document.getSelection) - { + } else if (document.getSelection) { theSelection = document.getSelection(); - } - else if (document.selection) - { + } else if (document.selection) { theSelection = document.selection.createRange().text; } - if (theSelection == '' || typeof theSelection == 'undefined' || theSelection == null) - { - if (divarea.innerHTML) - { + 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(/<\;/ig, '<'); theSelection = theSelection.replace(/>\;/ig, '>'); - theSelection = theSelection.replace(/&\;/ig, '&'); + theSelection = theSelection.replace(/&\;/ig, '&'); theSelection = theSelection.replace(/ \;/ig, ' '); - } - else if (document.all) - { + } else if (document.all) { theSelection = divarea.innerText; - } - else if (divarea.textContent) - { + } else if (divarea.textContent) { theSelection = divarea.textContent; - } - else if (divarea.firstChild.nodeValue) - { + } else if (divarea.firstChild.nodeValue) { theSelection = divarea.firstChild.nodeValue; } } - if (theSelection) - { + if (theSelection) { insert_text('[quote="' + username + '"]' + theSelection + '[/quote]'); } @@ -261,15 +213,13 @@ function addquote(post_id, username) /** * From http://www.massless.org/mozedit/ */ -function mozWrap(txtarea, open, close) -{ - var selLength = (typeof(txtarea.textLength) == 'undefined') ? txtarea.value.length : txtarea.textLength; +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) - { + if (selEnd === 1 || selEnd === 2) { selEnd = selLength; } @@ -290,10 +240,8 @@ function mozWrap(txtarea, open, close) * Insert at Caret position. Code from * http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130 */ -function storeCaret(textEl) -{ - if (textEl.createTextRange) - { +function storeCaret(textEl) { + if (textEl.createTextRange) { textEl.caretPos = document.selection.createRange().duplicate(); } } @@ -301,8 +249,7 @@ function storeCaret(textEl) /** * Color pallette */ -function colorPalette(dir, width, height) -{ +function colorPalette(dir, width, height) { var r = 0, g = 0, b = 0; var numberList = new Array(6); var color = ''; @@ -315,88 +262,74 @@ function colorPalette(dir, width, height) document.writeln('<table class="type2">'); - for (r = 0; r < 5; r++) - { - if (dir == 'h') - { + for (r = 0; r < 5; r++) { + if (dir === 'h') { document.writeln('<tr>'); } - for (g = 0; g < 5; g++) - { - if (dir == 'v') - { + for (g = 0; g < 5; g++) { + if (dir === 'v') { document.writeln('<tr>'); } - - for (b = 0; b < 5; b++) - { + + 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') - { + if (dir === 'v') { document.writeln('</tr>'); } } - if (dir == 'h') - { + if (dir === 'h') { document.writeln('</tr>'); } } document.writeln('</table>'); } - /** * Caret Position object */ -function caretPosition() -{ +function caretPosition() { var start = null; var end = null; } - /** * Get the caret position in an textarea */ -function getCaretPosition(txtarea) -{ +function getCaretPosition(txtarea) { var caretPos = new caretPosition(); - + // simple Gecko/Opera way - if (txtarea.selectionStart || txtarea.selectionStart == 0) - { + if (txtarea.selectionStart || txtarea.selectionStart === 0) { caretPos.start = txtarea.selectionStart; caretPos.end = txtarea.selectionEnd; } // dirty and slow IE way - else if (document.selection) - { + 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++) - { + 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; + caretPos.end = txtarea.sel_start; } return caretPos; diff --git a/phpBB/adm/style/permissions.js b/phpBB/adm/style/permissions.js index adc8995c23..1c85fbd9ef 100644 --- a/phpBB/adm/style/permissions.js +++ b/phpBB/adm/style/permissions.js @@ -2,35 +2,27 @@ * Hide and show all checkboxes * status = true (show boxes), false (hide boxes) */ -function display_checkboxes(status) -{ +function display_checkboxes(status) { var form = document.getElementById('set-permissions'); var cb = document.getElementsByTagName('input'); var display; //show - if (status) - { + if (status) { display = 'inline'; } //hide - else - { + else { display = 'none'; } - - for (var i = 0; i < cb.length; i++ ) - { - if (cb[i].className == 'permissions-checkbox') - { + + for (var i = 0; i < cb.length; i++ ) { + if (cb[i].className === 'permissions-checkbox') { cb[i].style.display = display; } - - } - + } } - /** * Change opacity of element * e = element @@ -38,7 +30,7 @@ function display_checkboxes(status) */ function set_opacity(e, value) { e.style.opacity = value/10; - + //IE opacity currently turned off, because of its astronomical stupidity //e.style.filter = 'alpha(opacity=' + value*10 + ')'; } @@ -50,13 +42,10 @@ function set_opacity(e, value) { function toggle_opacity(block_id) { var cb = document.getElementById('checkbox' + block_id); var fs = document.getElementById('perm' + block_id); - - if (cb.checked) - { + + if (cb.checked) { set_opacity(fs, 5); - } - else - { + } else { set_opacity(fs, 10); } } @@ -71,21 +60,17 @@ function reset_opacity(status, except_id) { var fs = perm.getElementsByTagName('fieldset'); var opacity = 5; - if (status) - { - opacity = 10; + if (status) { + opacity = 10; } - - for (var i = 0; i < fs.length; i++ ) - { - if (fs[i].className != 'quick') - { + + for (var i = 0; i < fs.length; i++ ) { + if (fs[i].className !== 'quick') { set_opacity(fs[i], opacity); } } - if (typeof(except_id) != 'undefined') - { + if (typeof(except_id) !== 'undefined') { set_opacity(document.getElementById('perm' + except_id), 10); } @@ -93,20 +78,15 @@ function reset_opacity(status, except_id) { marklist('set-permissions', 'inherit', !status); } - /** * Check whether we have a full radiobutton row of true * index = offset for the row of inputs (0 == first row, 1 == second, 2 == third), * rb = array of radiobuttons */ -function get_radio_status(index, rb) -{ - for (var i = index; i < rb.length; i = i + 3 ) - { - if (rb[i].checked != true) - { - if (i > index) - { +function get_radio_status(index, rb) { + for (var i = index; i < rb.length; i = i + 3 ) { + if (rb[i].checked !== true) { + if (i > index) { //at least one is true, but not all (custom) return 2; } @@ -121,17 +101,15 @@ function get_radio_status(index, rb) /** * Set tab colours -* id = panel the tab needs to be set for, -* init = initialising on open, +* id = panel the tab needs to be set for, +* init = initialising on open, * quick = If no calculation needed, this contains the colour */ -function set_colours(id, init, quick) -{ +function set_colours(id, init, quick) { var table = document.getElementById('table' + id); var tab = document.getElementById('tab' + id); - if (typeof(quick) != 'undefined') - { + if (typeof(quick) !== 'undefined') { tab.className = 'permissions-preset-' + quick + ' activetab'; return; } @@ -141,37 +119,27 @@ function set_colours(id, init, quick) var status = get_radio_status(0, rb); - if (status == 1) - { + if (status === 1) { colour = 'yes'; - } - else if (status == 0) - { + } else if (status === 0) { // We move on to No status = get_radio_status(1, rb); - if (status == 1) - { + if (status === 1) { colour = 'no'; - } - else if (status == 0) - { + } else if (status === 0) { // We move on to Never status = get_radio_status(2, rb); - if (status == 1) - { + if (status === 1) { colour = 'never'; } } } - if (init) - { + if (init) { tab.className = 'permissions-preset-' + colour; - } - else - { + } else { tab.className = 'permissions-preset-' + colour + ' activetab'; } } @@ -180,16 +148,13 @@ function set_colours(id, init, quick) * Initialise advanced tab colours on first load * block_id = block that is opened */ -function init_colours(block_id) -{ +function init_colours(block_id) { var block = document.getElementById('advanced' + block_id); var panels = block.getElementsByTagName('div'); var tab = document.getElementById('tab' + id); - for (var i = 0; i < panels.length; i++) - { - if(panels[i].className == 'permissions-panel') - { + for (var i = 0; i < panels.length; i++) { + if (panels[i].className === 'permissions-panel') { set_colours(panels[i].id.replace(/options/, ''), true); } } @@ -203,17 +168,15 @@ function init_colours(block_id) * adv = we are opening advanced permissions * view = called from view permissions */ -function swap_options(pmask, fmask, cat, adv, view) -{ +function swap_options(pmask, fmask, cat, adv, view) { id = pmask + fmask + cat; active_option = active_pmask + active_fmask + active_cat; - var old_tab = document.getElementById('tab' + active_option); + var old_tab = document.getElementById('tab' + active_option); var new_tab = document.getElementById('tab' + id); var adv_block = document.getElementById('advanced' + pmask + fmask); - if (adv_block.style.display == 'block' && adv == true) - { + if (adv_block.style.display === 'block' && adv === true) { dE('advanced' + pmask + fmask, -1); reset_opacity(1); display_checkboxes(false); @@ -221,20 +184,16 @@ function swap_options(pmask, fmask, cat, adv, view) } // no need to set anything if we are clicking on the same tab again - if (new_tab == old_tab && !adv) - { + if (new_tab === old_tab && !adv) { return; } // init colours - if (adv && (pmask + fmask) != (active_pmask + active_fmask)) - { + if (adv && (pmask + fmask) !== (active_pmask + active_fmask)) { init_colours(pmask + fmask); display_checkboxes(true); reset_opacity(1); - } - else if (adv) - { + } else if (adv) { //Checkbox might have been clicked, but we need full visibility display_checkboxes(true); reset_opacity(1); @@ -244,31 +203,26 @@ function swap_options(pmask, fmask, cat, adv, view) old_tab.className = old_tab.className.replace(/\ activetab/g, ''); new_tab.className = new_tab.className + ' activetab'; - if (id == active_option && adv != true) - { + if (id === active_option && adv !== true) { return; } dE('options' + active_option, -1); - + //hiding and showing the checkbox - if (document.getElementById('checkbox' + active_pmask + active_fmask)) - { - dE('checkbox' + pmask + fmask, -1); - - if ((pmask + fmask) != (active_pmask + active_fmask)) - { + if (document.getElementById('checkbox' + active_pmask + active_fmask)) { + dE('checkbox' + pmask + fmask, -1); + + if ((pmask + fmask) !== (active_pmask + active_fmask)) { document.getElementById('checkbox' + active_pmask + active_fmask).style.display = 'inline'; } } - if (!view) - { + if (!view) { dE('advanced' + active_pmask + active_fmask, -1); } - if (!view) - { + if (!view) { dE('advanced' + pmask + fmask, 1); } dE('options' + id, 1); @@ -282,41 +236,33 @@ function swap_options(pmask, fmask, cat, adv, view) * Mark all radio buttons in one panel * id = table ID container, s = status ['y'/'u'/'n'] */ -function mark_options(id, s) -{ +function mark_options(id, s) { var t = document.getElementById(id); - if (!t) - { + if (!t) { return; } var rb = t.getElementsByTagName('input'); - for (var r = 0; r < rb.length; r++) - { - if (rb[r].id.substr(rb[r].id.length-1) == s) - { + for (var r = 0; r < rb.length; r++) { + if (rb[r].id.substr(rb[r].id.length-1) === s) { rb[r].checked = true; } } } -function mark_one_option(id, field_name, s) -{ +function mark_one_option(id, field_name, s) { var t = document.getElementById(id); - if (!t) - { + if (!t) { return; } var rb = t.getElementsByTagName('input'); - for (var r = 0; r < rb.length; r++) - { - if (rb[r].id.substr(rb[r].id.length-field_name.length-3, field_name.length) == field_name && rb[r].id.substr(rb[r].id.length-1) == s) - { + for (var r = 0; r < rb.length; r++) { + if (rb[r].id.substr(rb[r].id.length-field_name.length-3, field_name.length) === field_name && rb[r].id.substr(rb[r].id.length-1) === s) { rb[r].checked = true; } } @@ -325,12 +271,10 @@ function mark_one_option(id, field_name, s) /** * Reset role dropdown field to Select role... if an option gets changed */ -function reset_role(id) -{ +function reset_role(id) { var t = document.getElementById(id); - if (!t) - { + if (!t) { return; } @@ -340,20 +284,17 @@ function reset_role(id) /** * Load role and set options accordingly */ -function set_role_settings(role_id, target_id) -{ +function set_role_settings(role_id, target_id) { settings = role_options[role_id]; - if (!settings) - { + if (!settings) { return; } // Mark all options to no (unset) first... mark_options(target_id, 'u'); - for (var r in settings) - { - mark_one_option(target_id, r, (settings[r] == 1) ? 'y' : 'n'); + for (var r in settings) { + mark_one_option(target_id, r, (settings[r] === 1) ? 'y' : 'n'); } } diff --git a/phpBB/adm/style/timezone.js b/phpBB/adm/style/timezone.js index 419d37c34f..b5e27c907c 100644 --- a/phpBB/adm/style/timezone.js +++ b/phpBB/adm/style/timezone.js @@ -1,5 +1,7 @@ (function($) { // Avoid conflicts with other libraries +"use strict"; + $('#tz_date').change(function() { phpbb.timezoneSwitchDate(false); }); diff --git a/phpBB/adm/style/tooltip.js b/phpBB/adm/style/tooltip.js index 20610b52fe..3a89008706 100644 --- a/phpBB/adm/style/tooltip.js +++ b/phpBB/adm/style/tooltip.js @@ -1,6 +1,6 @@ /* javascript for Bubble Tooltips by Alessandro Fulciniti -- http://pro.html.it - http://web-graphics.com +- http://pro.html.it - http://web-graphics.com obtained from: http://web-graphics.com/mtarchive/001717.php phpBB Development Team: @@ -15,14 +15,12 @@ var head_text, tooltip_mode; /** * Enable tooltip replacements for links */ -function enable_tooltips_link(id, headline, sub_id) -{ +function enable_tooltips_link(id, headline, sub_id) { var links, i, hold; - + head_text = headline; - if (!document.getElementById || !document.getElementsByTagName) - { + if (!document.getElementById || !document.getElementsByTagName) { return; } @@ -33,26 +31,18 @@ function enable_tooltips_link(id, headline, sub_id) document.getElementsByTagName('body')[0].appendChild(hold); - if (id == null) - { + if (id === null) { links = document.getElementsByTagName('a'); - } - else - { + } else { links = document.getElementById(id).getElementsByTagName('a'); } - for (i = 0; i < links.length; i++) - { - if (sub_id) - { - if (links[i].id.substr(0, sub_id.length) == sub_id) - { + for (i = 0; i < links.length; i++) { + if (sub_id) { + if (links[i].id.substr(0, sub_id.length) === sub_id) { prepare(links[i]); } - } - else - { + } else { prepare(links[i]); } } @@ -63,14 +53,12 @@ function enable_tooltips_link(id, headline, sub_id) /** * Enable tooltip replacements for selects */ -function enable_tooltips_select(id, headline, sub_id) -{ +function enable_tooltips_select(id, headline, sub_id) { var links, i, hold; - + head_text = headline; - if (!document.getElementById || !document.getElementsByTagName) - { + if (!document.getElementById || !document.getElementsByTagName) { return; } @@ -81,26 +69,18 @@ function enable_tooltips_select(id, headline, sub_id) document.getElementsByTagName('body')[0].appendChild(hold); - if (id == null) - { + if (id === null) { links = document.getElementsByTagName('option'); - } - else - { + } else { links = document.getElementById(id).getElementsByTagName('option'); } - for (i = 0; i < links.length; i++) - { - if (sub_id) - { - if (links[i].parentNode.id.substr(0, sub_id.length) == sub_id) - { + for (i = 0; i < links.length; i++) { + if (sub_id) { + if (links[i].parentNode.id.substr(0, sub_id.length) === sub_id) { prepare(links[i]); } - } - else - { + } else { prepare(links[i]); } } @@ -111,14 +91,12 @@ function enable_tooltips_select(id, headline, sub_id) /** * Prepare elements to replace */ -function prepare(element) -{ +function prepare(element) { var tooltip, text, desc, title; text = element.getAttribute('title'); - if (text == null || text.length == 0) - { + if (text === null || text.length === 0) { return; } @@ -139,8 +117,7 @@ function prepare(element) element.onmouseover = show_tooltip; element.onmouseout = hide_tooltip; - if (tooltip_mode == 'link') - { + if (tooltip_mode === 'link') { element.onmousemove = locate; } } @@ -148,8 +125,7 @@ function prepare(element) /** * Show tooltip */ -function show_tooltip(e) -{ +function show_tooltip(e) { document.getElementById('_tooltip_container').appendChild(this.tooltip); locate(this); } @@ -157,11 +133,9 @@ function show_tooltip(e) /** * Hide tooltip */ -function hide_tooltip(e) -{ +function hide_tooltip(e) { var d = document.getElementById('_tooltip_container'); - if (d.childNodes.length > 0) - { + if (d.childNodes.length > 0) { d.removeChild(d.firstChild); } } @@ -169,8 +143,7 @@ function hide_tooltip(e) /** * Set opacity on tooltip element */ -function set_opacity(element) -{ +function set_opacity(element) { element.style.filter = 'alpha(opacity:95)'; element.style.KHTMLOpacity = '0.95'; element.style.MozOpacity = '0.95'; @@ -180,8 +153,7 @@ function set_opacity(element) /** * Create new element */ -function create_element(tag, c) -{ +function create_element(tag, c) { var x = document.createElement(tag); x.className = c; x.style.display = 'block'; @@ -191,34 +163,26 @@ function create_element(tag, c) /** * Correct positioning of tooltip container */ -function locate(e) -{ +function locate(e) { var posx = 0; var posy = 0; e = e.parentNode; - if (e.offsetParent) - { - for (var posx = 0, posy = 0; e.offsetParent; e = e.offsetParent) - { + if (e.offsetParent) { + for (posx = 0, posy = 0; e.offsetParent; e = e.offsetParent) { posx += e.offsetLeft; posy += e.offsetTop; } - } - else - { + } else { posx = e.offsetLeft; posy = e.offsetTop; } - if (tooltip_mode == 'link') - { + if (tooltip_mode === 'link') { document.getElementById('_tooltip_container').style.top=(posy+20) + 'px'; document.getElementById('_tooltip_container').style.left=(posx-20) + 'px'; - } - else - { + } else { document.getElementById('_tooltip_container').style.top=(posy+30) + 'px'; document.getElementById('_tooltip_container').style.left=(posx-205) + 'px'; } diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index 40da09377e..8bbea8b8c9 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -57,7 +57,7 @@ phpbb.clearLoadingTimeout = function() { * @param string title Title of the message, eg "Information" (HTML). * @param string msg Message to display (HTML). * @param bool fadedark Remove the dark background when done? Defaults - * to yes. + * to yes. * * @returns object Returns the div created. */ @@ -121,9 +121,9 @@ phpbb.alert = function(title, msg, fadedark) { * * @param string msg Message to display (HTML). * @param function callback Callback. Bool param, whether the user pressed - * yes or no (or whatever their language is). + * yes or no (or whatever their language is). * @param bool fadedark Remove the dark background when done? Defaults - * to yes. + * to yes. * * @returns object Returns the div created. */ @@ -232,10 +232,10 @@ phpbb.parseQuerystring = function(string) { * * @param object options Options. * @param bool/function refresh If we are sent back a refresh, should it be - * acted upon? This can either be true / false / a function. + * acted upon? This can either be true / false / a function. * @param function callback Callback to call on completion of event. Has - * three parameters: the element that the event was evoked from, the JSON - * that was returned and (if it is a form) the form action. + * three parameters: the element that the event was evoked from, the JSON + * that was returned and (if it is a form) the form action. */ phpbb.ajaxify = function(options) { var elements = $(options.selector), @@ -252,6 +252,11 @@ phpbb.ajaxify = function(options) { return; } + function errorHandler() { + phpbb.clearLoadingTimeout(); + phpbb.alert(dark.attr('data-ajax-error-title'), dark.attr('data-ajax-error-text')); + } + /** * This is a private function used to handle the callbacks, refreshes * and alert. It calls the callback, refreshes the page if necessary, and @@ -320,13 +325,6 @@ phpbb.ajaxify = function(options) { } } - function errorHandler() { - var alert; - - phpbb.clearLoadingTimeout(); - alert = phpbb.alert(dark.attr('data-ajax-error-title'), dark.attr('data-ajax-error-text')); - } - // If the element is a form, POST must be used and some extra data must // be taken from the form. var runFilter = (typeof options.filter === 'function'); @@ -355,8 +353,7 @@ phpbb.ajaxify = function(options) { return; } - if (overlay && (typeof $this.attr('data-overlay') === 'undefined' || $this.attr('data-overlay') == 'true')) - { + if (overlay && (typeof $this.attr('data-overlay') === 'undefined' || $this.attr('data-overlay') === 'true')) { phpbb.loadingAlert(); } @@ -389,7 +386,7 @@ phpbb.ajaxify = function(options) { * @param bool keepSelection Shall we keep the value selected, or shall the user be forced to repick one. */ phpbb.timezoneSwitchDate = function(keepSelection) { - if ($('#timezone_copy').length == 0) { + if ($('#timezone_copy').length === 0) { // We make a backup of the original dropdown, so we can remove optgroups // instead of setting display to none, because IE and chrome will not // hide options inside of optgroups and selects via css @@ -399,17 +396,17 @@ phpbb.timezoneSwitchDate = function(keepSelection) { $('#timezone').replaceWith($('#timezone_copy').clone().attr('id', 'timezone').css('display', 'block').attr('name', 'tz')); } - if ($('#tz_date').val() != '') { + if ($('#tz_date').val() !== '') { $('#timezone > optgroup').remove(":not([label='" + $('#tz_date').val() + "'])"); } - if ($('#tz_date').val() == $('#tz_select_date_suggest').attr('data-suggested-tz')) { + if ($('#tz_date').val() === $('#tz_select_date_suggest').attr('data-suggested-tz')) { $('#tz_select_date_suggest').css('display', 'none'); } else { $('#tz_select_date_suggest').css('display', 'inline'); } - if ($("#timezone > optgroup[label='" + $('#tz_date').val() + "'] > option").size() == 1) { + if ($("#timezone > optgroup[label='" + $('#tz_date').val() + "'] > option").size() === 1) { // If there is only one timezone for the selected date, we just select that automatically. $("#timezone > optgroup[label='" + $('#tz_date').val() + "'] > option:first").attr('selected', true); keepSelection = true; @@ -440,12 +437,11 @@ phpbb.timezonePreselectSelect = function(forceSelector) { // The offset returned here is in minutes and negated. // http://www.w3schools.com/jsref/jsref_getTimezoneOffset.asp var offset = (new Date()).getTimezoneOffset(); + var sign = '-'; if (offset < 0) { - var sign = '+'; + sign = '+'; offset = -offset; - } else { - var sign = '-'; } var minutes = offset % 60; @@ -466,12 +462,13 @@ phpbb.timezonePreselectSelect = function(forceSelector) { var prefix = 'GMT' + sign + hours + ':' + minutes; var prefixLength = prefix.length; var selectorOptions = $('#tz_date > option'); + var i; - for (var i = 0; i < selectorOptions.length; ++i) { + for (i = 0; i < selectorOptions.length; ++i) { var option = selectorOptions[i]; - if (option.value.substring(0, prefixLength) == prefix) { - if ($('#tz_date').val() != option.value && !forceSelector) { + if (option.value.substring(0, prefixLength) === prefix) { + if ($('#tz_date').val() !== option.value && !forceSelector) { // We do not select the option for the user, but notify him, // that we would suggest a different setting. phpbb.timezoneSwitchDate(true); diff --git a/phpBB/common.php b/phpBB/common.php index c33e2cbb1f..f6f109c3de 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -44,8 +44,11 @@ if (!defined('PHPBB_INSTALLED')) // Replace any number of consecutive backslashes and/or slashes with a single slash // (could happen on some proxy setups and/or Windows servers) $script_path = preg_replace('#[\\\\/]{2,}#', '/', $script_path); + // Eliminate . and .. from the path - $script_path = phpbb_clean_path($script_path); + require($phpbb_root_path . 'includes/filesystem.' . $phpEx); + $phpbb_filesystem = new phpbb_filesystem(); + $script_path = $phpbb_filesystem->clean_path($script_path); $url = (($secure) ? 'https://' : 'http://') . $server_name; @@ -82,9 +85,9 @@ require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx); set_error_handler(defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handler'); // Setup class loader first -$phpbb_class_loader = new phpbb_class_loader('phpbb_', "{$phpbb_root_path}includes/", ".$phpEx"); +$phpbb_class_loader = new phpbb_class_loader('phpbb_', "{$phpbb_root_path}includes/", $phpEx); $phpbb_class_loader->register(); -$phpbb_class_loader_ext = new phpbb_class_loader('phpbb_ext_', "{$phpbb_root_path}ext/", ".$phpEx"); +$phpbb_class_loader_ext = new phpbb_class_loader('phpbb_ext_', "{$phpbb_root_path}ext/", $phpEx); $phpbb_class_loader_ext->register(); // Set up container diff --git a/phpBB/config/avatars.yml b/phpBB/config/avatars.yml index fa0f07372a..0aad08bac9 100644 --- a/phpBB/config/avatars.yml +++ b/phpBB/config/avatars.yml @@ -4,7 +4,7 @@ services: arguments: - @config - %core.root_path% - - .%core.php_ext% + - %core.php_ext% - @cache.driver calls: - [set_name, [avatar.driver.gravatar]] @@ -16,7 +16,7 @@ services: arguments: - @config - %core.root_path% - - .%core.php_ext% + - %core.php_ext% - @cache.driver calls: - [set_name, [avatar.driver.local]] @@ -28,7 +28,7 @@ services: arguments: - @config - %core.root_path% - - .%core.php_ext% + - %core.php_ext% - @cache.driver calls: - [set_name, [avatar.driver.remote]] @@ -40,7 +40,7 @@ services: arguments: - @config - %core.root_path% - - .%core.php_ext% + - %core.php_ext% - @cache.driver calls: - [set_name, [avatar.driver.upload]] diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml index b9c71844dc..7923c94a3f 100644 --- a/phpBB/config/services.yml +++ b/phpBB/config/services.yml @@ -36,7 +36,7 @@ services: arguments: - phpbb_ - %core.root_path%includes/ - - .%core.php_ext% + - %core.php_ext% calls: - [register, []] - [set_cache, [@cache.driver]] @@ -46,7 +46,7 @@ services: arguments: - phpbb_ext_ - %core.root_path%ext/ - - .%core.php_ext% + - %core.php_ext% calls: - [register, []] - [set_cache, [@cache.driver]] @@ -70,7 +70,7 @@ services: - @template - @user - %core.root_path% - - .%core.php_ext% + - %core.php_ext% controller.resolver: class: phpbb_controller_resolver @@ -131,20 +131,25 @@ services: - @dbal.conn - @config - @migrator + - @filesystem - %tables.ext% - %core.root_path% - - .%core.php_ext% + - %core.php_ext% - @cache.driver ext.finder: class: phpbb_extension_finder arguments: - @ext.manager + - @filesystem - %core.root_path% - @cache.driver - - .%core.php_ext% + - %core.php_ext% - _ext_finder + filesystem: + class: phpbb_filesystem + groupposition.legend: class: phpbb_groupposition_legend arguments: @@ -168,7 +173,7 @@ services: class: phpbb_hook_finder arguments: - %core.root_path% - - .%core.php_ext% + - %core.php_ext% - @cache.driver kernel_request_subscriber: @@ -176,7 +181,7 @@ services: arguments: - @ext.finder - %core.root_path% - - .%core.php_ext% + - %core.php_ext% tags: - { name: kernel.event_subscriber } @@ -242,6 +247,7 @@ services: arguments: - @ext.manager - @style.path_provider + - %core.root_path% style.path_provider: class: phpbb_style_path_provider diff --git a/phpBB/download/file.php b/phpBB/download/file.php index 91c05586a5..eee2090da0 100644 --- a/phpBB/download/file.php +++ b/phpBB/download/file.php @@ -50,9 +50,9 @@ if (isset($_GET['avatar'])) require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx); // Setup class loader first - $phpbb_class_loader = new phpbb_class_loader('phpbb_', "{$phpbb_root_path}includes/", ".$phpEx"); + $phpbb_class_loader = new phpbb_class_loader('phpbb_', "{$phpbb_root_path}includes/", $phpEx); $phpbb_class_loader->register(); - $phpbb_class_loader_ext = new phpbb_class_loader('phpbb_ext_', "{$phpbb_root_path}ext/", ".$phpEx"); + $phpbb_class_loader_ext = new phpbb_class_loader('phpbb_ext_', "{$phpbb_root_path}ext/", $phpEx); $phpbb_class_loader_ext->register(); // Set up container diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php index 24211196bd..e4defa0400 100644 --- a/phpBB/includes/acp/acp_extensions.php +++ b/phpBB/includes/acp/acp_extensions.php @@ -54,7 +54,7 @@ class acp_extensions // If they've specified an extension, let's load the metadata manager and validate it. if ($ext_name) { - $md_manager = new phpbb_extension_metadata_manager($ext_name, $db, $phpbb_extension_manager, $phpbb_root_path, ".$phpEx", $template, $config); + $md_manager = new phpbb_extension_metadata_manager($ext_name, $db, $phpbb_extension_manager, $phpbb_root_path, $phpEx, $template, $config); try { @@ -81,7 +81,7 @@ class acp_extensions case 'enable_pre': if (!$md_manager->validate_enable()) { - trigger_error($user->lang['EXTENSION_NOT_AVAILABLE'] . adm_back_link($this->u_action)); + trigger_error($user->lang['EXTENSION_NOT_AVAILABLE'] . adm_back_link($this->u_action), E_USER_WARNING); } if ($phpbb_extension_manager->enabled($ext_name)) @@ -100,7 +100,7 @@ class acp_extensions case 'enable': if (!$md_manager->validate_enable()) { - trigger_error($user->lang['EXTENSION_NOT_AVAILABLE'] . adm_back_link($this->u_action)); + trigger_error($user->lang['EXTENSION_NOT_AVAILABLE'] . adm_back_link($this->u_action), E_USER_WARNING); } try diff --git a/phpBB/includes/acp/acp_groups.php b/phpBB/includes/acp/acp_groups.php index 8cae0151c8..865810687b 100644 --- a/phpBB/includes/acp/acp_groups.php +++ b/phpBB/includes/acp/acp_groups.php @@ -148,57 +148,58 @@ class acp_groups 'action' => $action)) ); } + break; - break; case 'set_default_on_all': - if (confirm_box(true)) - { - $group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name']; - - $start = 0; + if (confirm_box(true)) + { + $group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name']; + + $start = 0; - do + do + { + $sql = 'SELECT user_id + FROM ' . USER_GROUP_TABLE . " + WHERE group_id = $group_id + ORDER BY user_id"; + $result = $db->sql_query_limit($sql, 200, $start); + + $mark_ary = array(); + if ($row = $db->sql_fetchrow($result)) { - $sql = 'SELECT user_id - FROM ' . USER_GROUP_TABLE . " - WHERE group_id = $group_id - ORDER BY user_id"; - $result = $db->sql_query_limit($sql, 200, $start); - - $mark_ary = array(); - if ($row = $db->sql_fetchrow($result)) + do { - do - { - $mark_ary[] = $row['user_id']; - } - while ($row = $db->sql_fetchrow($result)); + $mark_ary[] = $row['user_id']; + } + while ($row = $db->sql_fetchrow($result)); - group_user_attributes('default', $group_id, $mark_ary, false, $group_name, $group_row); + group_user_attributes('default', $group_id, $mark_ary, false, $group_name, $group_row); - $start = (sizeof($mark_ary) < 200) ? 0 : $start + 200; - } - else - { - $start = 0; - } - $db->sql_freeresult($result); + $start = (sizeof($mark_ary) < 200) ? 0 : $start + 200; } - while ($start); - - trigger_error($user->lang['GROUP_DEFS_UPDATED'] . adm_back_link($this->u_action . '&action=list&g=' . $group_id)); - } - else - { - confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array( - 'mark' => $mark_ary, - 'g' => $group_id, - 'i' => $id, - 'mode' => $mode, - 'action' => $action)) - ); + else + { + $start = 0; + } + $db->sql_freeresult($result); } + while ($start); + + trigger_error($user->lang['GROUP_DEFS_UPDATED'] . adm_back_link($this->u_action . '&action=list&g=' . $group_id)); + } + else + { + confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array( + 'mark' => $mark_ary, + 'g' => $group_id, + 'i' => $id, + 'mode' => $mode, + 'action' => $action)) + ); + } break; + case 'deleteusers': if (empty($mark_ary)) { diff --git a/phpBB/includes/acp/acp_inactive.php b/phpBB/includes/acp/acp_inactive.php index e61115f681..de4679b58d 100644 --- a/phpBB/includes/acp/acp_inactive.php +++ b/phpBB/includes/acp/acp_inactive.php @@ -115,7 +115,7 @@ class acp_inactive { $messenger->template('admin_welcome_activated', $row['user_lang']); - $messenger->to($row['user_email'], $row['username']); + $messenger->set_addresses($row); $messenger->anti_abuse_headers($config, $user); @@ -203,8 +203,7 @@ class acp_inactive { $messenger->template('user_remind_inactive', $row['user_lang']); - $messenger->to($row['user_email'], $row['username']); - $messenger->im($row['user_jabber'], $row['username']); + $messenger->set_addresses($row); $messenger->anti_abuse_headers($config, $user); diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index 8f4a22b61f..c8542ddbe7 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -347,7 +347,7 @@ class acp_users $messenger->template($email_template, $user_row['user_lang']); - $messenger->to($user_row['user_email'], $user_row['username']); + $messenger->set_addresses($user_row); $messenger->anti_abuse_headers($config, $user); @@ -402,7 +402,7 @@ class acp_users $messenger->template('admin_welcome_activated', $user_row['user_lang']); - $messenger->to($user_row['user_email'], $user_row['username']); + $messenger->set_addresses($user_row); $messenger->anti_abuse_headers($config, $user); diff --git a/phpBB/includes/avatar/driver/gravatar.php b/phpBB/includes/avatar/driver/gravatar.php index 2e2ae2071f..d559da1c0d 100644 --- a/phpBB/includes/avatar/driver/gravatar.php +++ b/phpBB/includes/avatar/driver/gravatar.php @@ -74,7 +74,7 @@ class phpbb_avatar_driver_gravatar extends phpbb_avatar_driver if (!function_exists('validate_data')) { - require($this->phpbb_root_path . 'includes/functions_user' . $this->php_ext); + require($this->phpbb_root_path . 'includes/functions_user.' . $this->php_ext); } $validate_array = validate_data( diff --git a/phpBB/includes/avatar/driver/remote.php b/phpBB/includes/avatar/driver/remote.php index 3661e16160..7da58107a1 100644 --- a/phpBB/includes/avatar/driver/remote.php +++ b/phpBB/includes/avatar/driver/remote.php @@ -63,7 +63,7 @@ class phpbb_avatar_driver_remote extends phpbb_avatar_driver if (!function_exists('validate_data')) { - require($this->phpbb_root_path . 'includes/functions_user' . $this->php_ext); + require($this->phpbb_root_path . 'includes/functions_user.' . $this->php_ext); } $validate_array = validate_data( @@ -117,7 +117,7 @@ class phpbb_avatar_driver_remote extends phpbb_avatar_driver if (!class_exists('fileupload')) { - include($this->phpbb_root_path . 'includes/functions_upload' . $this->php_ext); + include($this->phpbb_root_path . 'includes/functions_upload.' . $this->php_ext); } $types = fileupload::image_types(); diff --git a/phpBB/includes/avatar/driver/upload.php b/phpBB/includes/avatar/driver/upload.php index f91d170d7c..19737693fd 100644 --- a/phpBB/includes/avatar/driver/upload.php +++ b/phpBB/includes/avatar/driver/upload.php @@ -27,7 +27,7 @@ class phpbb_avatar_driver_upload extends phpbb_avatar_driver public function get_data($row, $ignore_config = false) { return array( - 'src' => $this->phpbb_root_path . 'download/file' . $this->php_ext . '?avatar=' . $row['avatar'], + 'src' => $this->phpbb_root_path . 'download/file.' . $this->php_ext . '?avatar=' . $row['avatar'], 'width' => $row['avatar_width'], 'height' => $row['avatar_height'], ); @@ -63,7 +63,7 @@ class phpbb_avatar_driver_upload extends phpbb_avatar_driver if (!class_exists('fileupload')) { - include($this->phpbb_root_path . 'includes/functions_upload' . $this->php_ext); + include($this->phpbb_root_path . 'includes/functions_upload.' . $this->php_ext); } $upload = new fileupload('AVATAR_', $this->allowed_extensions, $this->config['avatar_filesize'], $this->config['avatar_min_width'], $this->config['avatar_min_height'], $this->config['avatar_max_width'], $this->config['avatar_max_height'], (isset($this->config['mime_triggers']) ? explode('|', $this->config['mime_triggers']) : false)); diff --git a/phpBB/includes/bbcode.php b/phpBB/includes/bbcode.php index e8681420d4..c198abeb54 100644 --- a/phpBB/includes/bbcode.php +++ b/phpBB/includes/bbcode.php @@ -133,7 +133,7 @@ class bbcode $this->template_bitfield = new bitfield($user->style['bbcode_bitfield']); $style_resource_locator = new phpbb_style_resource_locator(); - $style_path_provider = new phpbb_style_extension_path_provider($phpbb_extension_manager, new phpbb_style_path_provider()); + $style_path_provider = new phpbb_style_extension_path_provider($phpbb_extension_manager, new phpbb_style_path_provider(), $phpbb_root_path); $template = new phpbb_template($phpbb_root_path, $phpEx, $config, $user, $style_resource_locator, new phpbb_template_context(), $phpbb_extension_manager); $style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $style_resource_locator, $style_path_provider, $template); $style->set_style(); diff --git a/phpBB/includes/captcha/plugins/phpbb_recaptcha_plugin.php b/phpBB/includes/captcha/plugins/phpbb_recaptcha_plugin.php index 83d40bbba7..cb21b04ec5 100644 --- a/phpBB/includes/captcha/plugins/phpbb_recaptcha_plugin.php +++ b/phpBB/includes/captcha/plugins/phpbb_recaptcha_plugin.php @@ -270,7 +270,7 @@ class phpbb_recaptcha extends phpbb_default_captcha $response = ''; if (false == ($fs = @fsockopen($host, $port, $errno, $errstr, 10))) { - trigger_error('Could not open socket', E_USER_ERROR); + trigger_error('RECAPTCHA_SOCKET_ERROR', E_USER_ERROR); } fwrite($fs, $http_request); diff --git a/phpBB/includes/class_loader.php b/phpBB/includes/class_loader.php index 6082800908..02a2d584dc 100644 --- a/phpBB/includes/class_loader.php +++ b/phpBB/includes/class_loader.php @@ -52,7 +52,7 @@ class phpbb_class_loader * @param string $php_ext The file extension for PHP files * @param phpbb_cache_driver_interface $cache An implementation of the phpBB cache interface. */ - public function __construct($prefix, $path, $php_ext = '.php', phpbb_cache_driver_interface $cache = null) + public function __construct($prefix, $path, $php_ext = 'php', phpbb_cache_driver_interface $cache = null) { $this->prefix = $prefix; $this->path = $path; @@ -111,7 +111,7 @@ class phpbb_class_loader { if (isset($this->cached_paths[$class])) { - return $this->path . $this->cached_paths[$class] . $this->php_ext; + return $this->path . $this->cached_paths[$class] . '.' . $this->php_ext; } if (!preg_match('/^' . $this->prefix . '[a-zA-Z0-9_]+$/', $class)) @@ -136,7 +136,7 @@ class phpbb_class_loader $relative_path = $dirs . implode(array_slice($parts, $i, sizeof($parts) - $i), '_'); - if (!file_exists($this->path . $relative_path . $this->php_ext)) + if (!file_exists($this->path . $relative_path . '.' . $this->php_ext)) { return false; } @@ -147,7 +147,7 @@ class phpbb_class_loader $this->cache->put('class_loader_' . $this->prefix, $this->cached_paths); } - return $this->path . $relative_path . $this->php_ext; + return $this->path . $relative_path . '.' . $this->php_ext; } /** diff --git a/phpBB/includes/controller/helper.php b/phpBB/includes/controller/helper.php index 46c6307cb4..74410ddfd1 100644 --- a/phpBB/includes/controller/helper.php +++ b/phpBB/includes/controller/helper.php @@ -117,7 +117,7 @@ class phpbb_controller_helper $params = array('controller' => $route); } - return append_sid($this->phpbb_root_path . 'app' . $this->php_ext . $route_params, $params, $is_amp, $session_id); + return append_sid($this->phpbb_root_path . 'app.' . $this->php_ext . $route_params, $params, $is_amp, $session_id); } /** diff --git a/phpBB/includes/db/driver/mssql_base.php b/phpBB/includes/db/driver/mssql_base.php new file mode 100644 index 0000000000..56c111c871 --- /dev/null +++ b/phpBB/includes/db/driver/mssql_base.php @@ -0,0 +1,65 @@ +<?php +/** +* +* @package dbal +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +/** +* @ignore +*/ +if (!defined('IN_PHPBB')) +{ + exit; +} + +/** +* MSSQL Database Base Abstraction Layer +* @package dbal + */ +abstract class phpbb_db_driver_mssql_base extends phpbb_db_driver +{ + /** + * {@inheritDoc} + */ + public function sql_concatenate($expr1, $expr2) + { + return $expr1 . ' + ' . $expr2; + } + + /** + * Escape string used in sql query + */ + function sql_escape($msg) + { + return str_replace(array("'", "\0"), array("''", ''), $msg); + } + + /** + * {@inheritDoc} + */ + function sql_lower_text($column_name) + { + return "LOWER(SUBSTRING($column_name, 1, DATALENGTH($column_name)))"; + } + + /** + * Build LIKE expression + * @access private + */ + function _sql_like_expression($expression) + { + return $expression . " ESCAPE '\\'"; + } + + /** + * Build db-specific query data + * @access private + */ + function _sql_custom_build($stage, $data) + { + return $data; + } +} diff --git a/phpBB/includes/db/driver/mssql_odbc.php b/phpBB/includes/db/driver/mssql_odbc.php index f7834443eb..cde9d332ba 100644 --- a/phpBB/includes/db/driver/mssql_odbc.php +++ b/phpBB/includes/db/driver/mssql_odbc.php @@ -26,7 +26,7 @@ if (!defined('IN_PHPBB')) * * @package dbal */ -class phpbb_db_driver_mssql_odbc extends phpbb_db_driver +class phpbb_db_driver_mssql_odbc extends phpbb_db_driver_mssql_base { var $last_query_text = ''; var $connect_error = ''; @@ -126,14 +126,6 @@ class phpbb_db_driver_mssql_odbc extends phpbb_db_driver } /** - * {@inheritDoc} - */ - public function sql_concatenate($expr1, $expr2) - { - return $expr1 . ' + ' . $expr2; - } - - /** * SQL Transaction * @access private */ @@ -326,40 +318,6 @@ class phpbb_db_driver_mssql_odbc extends phpbb_db_driver } /** - * Escape string used in sql query - */ - function sql_escape($msg) - { - return str_replace(array("'", "\0"), array("''", ''), $msg); - } - - /** - * {@inheritDoc} - */ - function sql_lower_text($column_name) - { - return "LOWER(SUBSTRING($column_name, 1, DATALENGTH($column_name)))"; - } - - /** - * Build LIKE expression - * @access private - */ - function _sql_like_expression($expression) - { - return $expression . " ESCAPE '\\'"; - } - - /** - * Build db-specific query data - * @access private - */ - function _sql_custom_build($stage, $data) - { - return $data; - } - - /** * return sql error array * @access private */ diff --git a/phpBB/includes/db/driver/mssqlnative.php b/phpBB/includes/db/driver/mssqlnative.php index 656cbd2437..6f433e10cf 100644 --- a/phpBB/includes/db/driver/mssqlnative.php +++ b/phpBB/includes/db/driver/mssqlnative.php @@ -191,7 +191,7 @@ class result_mssqlnative /** * @package dbal */ -class phpbb_db_driver_mssqlnative extends phpbb_db_driver +class phpbb_db_driver_mssqlnative extends phpbb_db_driver_mssql_base { var $m_insert_id = NULL; var $last_query_text = ''; @@ -259,14 +259,6 @@ class phpbb_db_driver_mssqlnative extends phpbb_db_driver /** * {@inheritDoc} */ - public function sql_concatenate($expr1, $expr2) - { - return $expr1 . ' + ' . $expr2; - } - - /** - * {@inheritDoc} - */ function sql_buffer_nested_transactions() { return true; @@ -491,31 +483,6 @@ class phpbb_db_driver_mssqlnative extends phpbb_db_driver } /** - * Escape string used in sql query - */ - function sql_escape($msg) - { - return str_replace(array("'", "\0"), array("''", ''), $msg); - } - - /** - * {@inheritDoc} - */ - function sql_lower_text($column_name) - { - return "LOWER(SUBSTRING($column_name, 1, DATALENGTH($column_name)))"; - } - - /** - * Build LIKE expression - * @access private - */ - function _sql_like_expression($expression) - { - return $expression . " ESCAPE '\\'"; - } - - /** * return sql error array * @access private */ @@ -561,15 +528,6 @@ class phpbb_db_driver_mssqlnative extends phpbb_db_driver } /** - * Build db-specific query data - * @access private - */ - function _sql_custom_build($stage, $data) - { - return $data; - } - - /** * Close sql connection * @access private */ diff --git a/phpBB/includes/db/driver/mysql.php b/phpBB/includes/db/driver/mysql.php index 9de7283a42..f3744ac09d 100644 --- a/phpBB/includes/db/driver/mysql.php +++ b/phpBB/includes/db/driver/mysql.php @@ -24,7 +24,7 @@ if (!defined('IN_PHPBB')) * MySQL 5.0+ * @package dbal */ -class phpbb_db_driver_mysql extends phpbb_db_driver +class phpbb_db_driver_mysql extends phpbb_db_driver_mysql_base { var $multi_insert = true; var $connect_error = ''; @@ -136,14 +136,6 @@ class phpbb_db_driver_mysql extends phpbb_db_driver } /** - * {@inheritDoc} - */ - public function sql_concatenate($expr1, $expr2) - { - return 'CONCAT(' . $expr1 . ', ' . $expr2 . ')'; - } - - /** * SQL Transaction * @access private */ @@ -227,25 +219,6 @@ class phpbb_db_driver_mysql extends phpbb_db_driver } /** - * Build LIMIT query - */ - function _sql_query_limit($query, $total, $offset = 0, $cache_ttl = 0) - { - $this->query_result = false; - - // if $total is set to 0 we do not want to limit the number of rows - if ($total == 0) - { - // Having a value of -1 was always a bug - $total = '18446744073709551615'; - } - - $query .= "\n LIMIT " . ((!empty($offset)) ? $offset . ', ' . $total : $total); - - return $this->sql_query($query, $cache_ttl); - } - - /** * Return number of affected rows */ function sql_affectedrows() @@ -342,101 +315,6 @@ class phpbb_db_driver_mysql extends phpbb_db_driver } /** - * Gets the estimated number of rows in a specified table. - * - * @param string $table_name Table name - * - * @return string Number of rows in $table_name. - * Prefixed with ~ if estimated (otherwise exact). - * - * @access public - */ - function get_estimated_row_count($table_name) - { - $table_status = $this->get_table_status($table_name); - - if (isset($table_status['Engine'])) - { - if ($table_status['Engine'] === 'MyISAM') - { - return $table_status['Rows']; - } - else if ($table_status['Engine'] === 'InnoDB' && $table_status['Rows'] > 100000) - { - return '~' . $table_status['Rows']; - } - } - - return parent::get_row_count($table_name); - } - - /** - * Gets the exact number of rows in a specified table. - * - * @param string $table_name Table name - * - * @return string Exact number of rows in $table_name. - * - * @access public - */ - function get_row_count($table_name) - { - $table_status = $this->get_table_status($table_name); - - if (isset($table_status['Engine']) && $table_status['Engine'] === 'MyISAM') - { - return $table_status['Rows']; - } - - return parent::get_row_count($table_name); - } - - /** - * Gets some information about the specified table. - * - * @param string $table_name Table name - * - * @return array - * - * @access protected - */ - function get_table_status($table_name) - { - $sql = "SHOW TABLE STATUS - LIKE '" . $this->sql_escape($table_name) . "'"; - $result = $this->sql_query($sql); - $table_status = $this->sql_fetchrow($result); - $this->sql_freeresult($result); - - return $table_status; - } - - /** - * Build LIKE expression - * @access private - */ - function _sql_like_expression($expression) - { - return $expression; - } - - /** - * Build db-specific query data - * @access private - */ - function _sql_custom_build($stage, $data) - { - switch ($stage) - { - case 'FROM': - $data = '(' . $data . ')'; - break; - } - - return $data; - } - - /** * return sql error array * @access private */ diff --git a/phpBB/includes/db/driver/mysql_base.php b/phpBB/includes/db/driver/mysql_base.php new file mode 100644 index 0000000000..ba44ea61aa --- /dev/null +++ b/phpBB/includes/db/driver/mysql_base.php @@ -0,0 +1,145 @@ +<?php +/** +* +* @package dbal +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +/** +* @ignore +*/ +if (!defined('IN_PHPBB')) +{ + exit; +} + +/** +* Abstract MySQL Database Base Abstraction Layer +* @package dbal +*/ +abstract class phpbb_db_driver_mysql_base extends phpbb_db_driver +{ + /** + * {@inheritDoc} + */ + public function sql_concatenate($expr1, $expr2) + { + return 'CONCAT(' . $expr1 . ', ' . $expr2 . ')'; + } + + /** + * Build LIMIT query + */ + function _sql_query_limit($query, $total, $offset = 0, $cache_ttl = 0) + { + $this->query_result = false; + + // if $total is set to 0 we do not want to limit the number of rows + if ($total == 0) + { + // MySQL 4.1+ no longer supports -1 in limit queries + $total = '18446744073709551615'; + } + + $query .= "\n LIMIT " . ((!empty($offset)) ? $offset . ', ' . $total : $total); + + return $this->sql_query($query, $cache_ttl); + } + + /** + * Gets the estimated number of rows in a specified table. + * + * @param string $table_name Table name + * + * @return string Number of rows in $table_name. + * Prefixed with ~ if estimated (otherwise exact). + * + * @access public + */ + function get_estimated_row_count($table_name) + { + $table_status = $this->get_table_status($table_name); + + if (isset($table_status['Engine'])) + { + if ($table_status['Engine'] === 'MyISAM') + { + return $table_status['Rows']; + } + else if ($table_status['Engine'] === 'InnoDB' && $table_status['Rows'] > 100000) + { + return '~' . $table_status['Rows']; + } + } + + return parent::get_row_count($table_name); + } + + /** + * Gets the exact number of rows in a specified table. + * + * @param string $table_name Table name + * + * @return string Exact number of rows in $table_name. + * + * @access public + */ + function get_row_count($table_name) + { + $table_status = $this->get_table_status($table_name); + + if (isset($table_status['Engine']) && $table_status['Engine'] === 'MyISAM') + { + return $table_status['Rows']; + } + + return parent::get_row_count($table_name); + } + + /** + * Gets some information about the specified table. + * + * @param string $table_name Table name + * + * @return array + * + * @access protected + */ + function get_table_status($table_name) + { + $sql = "SHOW TABLE STATUS + LIKE '" . $this->sql_escape($table_name) . "'"; + $result = $this->sql_query($sql); + $table_status = $this->sql_fetchrow($result); + $this->sql_freeresult($result); + + return $table_status; + } + + /** + * Build LIKE expression + * @access private + */ + function _sql_like_expression($expression) + { + return $expression; + } + + /** + * Build db-specific query data + * @access private + */ + function _sql_custom_build($stage, $data) + { + switch ($stage) + { + case 'FROM': + $data = '(' . $data . ')'; + break; + } + + return $data; + } +} diff --git a/phpBB/includes/db/driver/mysqli.php b/phpBB/includes/db/driver/mysqli.php index 7448bf1670..0f7a73ee6e 100644 --- a/phpBB/includes/db/driver/mysqli.php +++ b/phpBB/includes/db/driver/mysqli.php @@ -21,7 +21,7 @@ if (!defined('IN_PHPBB')) * MySQL 4.1+ or MySQL 5.0+ * @package dbal */ -class phpbb_db_driver_mysqli extends phpbb_db_driver +class phpbb_db_driver_mysqli extends phpbb_db_driver_mysql_base { var $multi_insert = true; var $connect_error = ''; @@ -103,6 +103,7 @@ class phpbb_db_driver_mysqli extends phpbb_db_driver /** * Version information about used database + * @param bool $raw if true, only return the fetched sql_server_version * @param bool $use_cache If true, it is safe to retrieve the value from the cache * @return string sql server version */ @@ -128,14 +129,6 @@ class phpbb_db_driver_mysqli extends phpbb_db_driver } /** - * {@inheritDoc} - */ - public function sql_concatenate($expr1, $expr2) - { - return 'CONCAT(' . $expr1 . ', ' . $expr2 . ')'; - } - - /** * SQL Transaction * @access private */ @@ -218,25 +211,6 @@ class phpbb_db_driver_mysqli extends phpbb_db_driver } /** - * Build LIMIT query - */ - function _sql_query_limit($query, $total, $offset = 0, $cache_ttl = 0) - { - $this->query_result = false; - - // if $total is set to 0 we do not want to limit the number of rows - if ($total == 0) - { - // MySQL 4.1+ no longer supports -1 in limit queries - $total = '18446744073709551615'; - } - - $query .= "\n LIMIT " . ((!empty($offset)) ? $offset . ', ' . $total : $total); - - return $this->sql_query($query, $cache_ttl); - } - - /** * Return number of affected rows */ function sql_affectedrows() @@ -328,101 +302,6 @@ class phpbb_db_driver_mysqli extends phpbb_db_driver } /** - * Gets the estimated number of rows in a specified table. - * - * @param string $table_name Table name - * - * @return string Number of rows in $table_name. - * Prefixed with ~ if estimated (otherwise exact). - * - * @access public - */ - function get_estimated_row_count($table_name) - { - $table_status = $this->get_table_status($table_name); - - if (isset($table_status['Engine'])) - { - if ($table_status['Engine'] === 'MyISAM') - { - return $table_status['Rows']; - } - else if ($table_status['Engine'] === 'InnoDB' && $table_status['Rows'] > 100000) - { - return '~' . $table_status['Rows']; - } - } - - return parent::get_row_count($table_name); - } - - /** - * Gets the exact number of rows in a specified table. - * - * @param string $table_name Table name - * - * @return string Exact number of rows in $table_name. - * - * @access public - */ - function get_row_count($table_name) - { - $table_status = $this->get_table_status($table_name); - - if (isset($table_status['Engine']) && $table_status['Engine'] === 'MyISAM') - { - return $table_status['Rows']; - } - - return parent::get_row_count($table_name); - } - - /** - * Gets some information about the specified table. - * - * @param string $table_name Table name - * - * @return array - * - * @access protected - */ - function get_table_status($table_name) - { - $sql = "SHOW TABLE STATUS - LIKE '" . $this->sql_escape($table_name) . "'"; - $result = $this->sql_query($sql); - $table_status = $this->sql_fetchrow($result); - $this->sql_freeresult($result); - - return $table_status; - } - - /** - * Build LIKE expression - * @access private - */ - function _sql_like_expression($expression) - { - return $expression; - } - - /** - * Build db-specific query data - * @access private - */ - function _sql_custom_build($stage, $data) - { - switch ($stage) - { - case 'FROM': - $data = '(' . $data . ')'; - break; - } - - return $data; - } - - /** * return sql error array * @access private */ diff --git a/phpBB/includes/db/migration/data/310/style_update_p1.php b/phpBB/includes/db/migration/data/310/style_update_p1.php index e324ce7f24..d43537559d 100644 --- a/phpBB/includes/db/migration/data/310/style_update_p1.php +++ b/phpBB/includes/db/migration/data/310/style_update_p1.php @@ -19,6 +19,34 @@ class phpbb_db_migration_data_310_style_update_p1 extends phpbb_db_migration return array('phpbb_db_migration_data_30x_3_0_11'); } + public function update_schema() + { + return array( + 'add_columns' => array( + $this->table_prefix . 'styles' => array( + 'style_path' => array('VCHAR:100', ''), + 'bbcode_bitfield' => array('VCHAR:255', 'kNg='), + 'style_parent_id' => array('UINT', 0), + 'style_parent_tree' => array('TEXT', ''), + ), + ), + ); + } + + public function revert_schema() + { + return array( + 'drop_columns' => array( + $this->table_prefix . 'styles' => array( + 'style_path', + 'bbcode_bitfield', + 'style_parent_id', + 'style_parent_tree', + ), + ), + ); + } + public function update_data() { return array( diff --git a/phpBB/includes/extension/finder.php b/phpBB/includes/extension/finder.php index f71e32bc8d..766b9e9b63 100644 --- a/phpBB/includes/extension/finder.php +++ b/phpBB/includes/extension/finder.php @@ -23,6 +23,7 @@ if (!defined('IN_PHPBB')) class phpbb_extension_finder { protected $extension_manager; + protected $filesystem; protected $phpbb_root_path; protected $cache; protected $php_ext; @@ -54,15 +55,17 @@ class phpbb_extension_finder * @param phpbb_extension_manager $extension_manager An extension manager * instance that provides the finder with a list of active * extensions and their locations + * @param phpbb_filesystem $filesystem Filesystem instance * @param string $phpbb_root_path Path to the phpbb root directory * @param phpbb_cache_driver_interface $cache A cache instance or null * @param string $php_ext php file extension * @param string $cache_name The name of the cache variable, defaults to * _ext_finder */ - public function __construct(phpbb_extension_manager $extension_manager, $phpbb_root_path = '', phpbb_cache_driver_interface $cache = null, $php_ext = '.php', $cache_name = '_ext_finder') + public function __construct(phpbb_extension_manager $extension_manager, phpbb_filesystem $filesystem, $phpbb_root_path = '', phpbb_cache_driver_interface $cache = null, $php_ext = 'php', $cache_name = '_ext_finder') { $this->extension_manager = $extension_manager; + $this->filesystem = $filesystem; $this->phpbb_root_path = $phpbb_root_path; $this->cache = $cache; $this->php_ext = $php_ext; @@ -227,7 +230,7 @@ class phpbb_extension_finder */ protected function sanitise_directory($directory) { - $directory = preg_replace('#(?:^|/)\./#', '/', $directory); + $directory = $this->filesystem->clean_path($directory); $dir_len = strlen($directory); if ($dir_len > 1 && $directory[$dir_len - 1] === '/') @@ -253,8 +256,8 @@ class phpbb_extension_finder */ public function get_classes($cache = true, $use_all_available = false) { - $this->query['extension_suffix'] .= $this->php_ext; - $this->query['core_suffix'] .= $this->php_ext; + $this->query['extension_suffix'] .= '.' . $this->php_ext; + $this->query['core_suffix'] .= '.' . $this->php_ext; $files = $this->find($cache, false, $use_all_available); @@ -274,7 +277,7 @@ class phpbb_extension_finder { $file = preg_replace('#^includes/#', '', $file); - $classes[] = 'phpbb_' . str_replace('/', '_', substr($file, 0, -strlen($this->php_ext))); + $classes[] = 'phpbb_' . str_replace('/', '_', substr($file, 0, -strlen('.' . $this->php_ext))); } return $classes; } diff --git a/phpBB/includes/extension/manager.php b/phpBB/includes/extension/manager.php index 44a30c6280..a1022762b8 100644 --- a/phpBB/includes/extension/manager.php +++ b/phpBB/includes/extension/manager.php @@ -44,13 +44,14 @@ class phpbb_extension_manager * @param phpbb_db_driver $db A database connection * @param phpbb_config $config phpbb_config * @param phpbb_db_migrator $migrator + * @param phpbb_filesystem $filesystem * @param string $extension_table The name of the table holding extensions * @param string $phpbb_root_path Path to the phpbb includes directory. * @param string $php_ext php file extension * @param phpbb_cache_driver_interface $cache A cache instance or null * @param string $cache_name The name of the cache variable, defaults to _ext */ - public function __construct(ContainerInterface $container, phpbb_db_driver $db, phpbb_config $config, phpbb_db_migrator $migrator, $extension_table, $phpbb_root_path, $php_ext = '.php', phpbb_cache_driver_interface $cache = null, $cache_name = '_ext') + public function __construct(ContainerInterface $container, phpbb_db_driver $db, phpbb_config $config, phpbb_db_migrator $migrator, phpbb_filesystem $filesystem, $extension_table, $phpbb_root_path, $php_ext = 'php', phpbb_cache_driver_interface $cache = null, $cache_name = '_ext') { $this->container = $container; $this->phpbb_root_path = $phpbb_root_path; @@ -58,6 +59,7 @@ class phpbb_extension_manager $this->config = $config; $this->migrator = $migrator; $this->cache = $cache; + $this->filesystem = $filesystem; $this->php_ext = $php_ext; $this->extension_table = $extension_table; $this->cache_name = $cache_name; @@ -410,7 +412,7 @@ class phpbb_extension_manager RecursiveIteratorIterator::SELF_FIRST); foreach ($iterator as $file_info) { - if ($file_info->isFile() && $file_info->getFilename() == 'ext' . $this->php_ext) + if ($file_info->isFile() && $file_info->getFilename() == 'ext.' . $this->php_ext) { $ext_name = $iterator->getInnerIterator()->getSubPath(); @@ -510,7 +512,7 @@ class phpbb_extension_manager */ public function get_finder() { - return new phpbb_extension_finder($this, $this->phpbb_root_path, $this->cache, $this->php_ext, $this->cache_name . '_finder'); + return new phpbb_extension_finder($this, $this->filesystem, $this->phpbb_root_path, $this->cache, $this->php_ext, $this->cache_name . '_finder'); } /** diff --git a/phpBB/includes/extension/metadata_manager.php b/phpBB/includes/extension/metadata_manager.php index 36b0f8b184..1637abd340 100644 --- a/phpBB/includes/extension/metadata_manager.php +++ b/phpBB/includes/extension/metadata_manager.php @@ -39,7 +39,7 @@ class phpbb_extension_metadata_manager * @param string $phpbb_root_path Path to the phpbb includes directory. * @param string $phpEx php file extension */ - public function __construct($ext_name, phpbb_db_driver $db, phpbb_extension_manager $extension_manager, $phpbb_root_path, $phpEx = '.php', phpbb_template $template, phpbb_config $config) + public function __construct($ext_name, phpbb_db_driver $db, phpbb_extension_manager $extension_manager, $phpbb_root_path, $phpEx = 'php', phpbb_template $template, phpbb_config $config) { $this->phpbb_root_path = $phpbb_root_path; $this->db = $db; diff --git a/phpBB/includes/filesystem.php b/phpBB/includes/filesystem.php new file mode 100644 index 0000000000..27cab48fb0 --- /dev/null +++ b/phpBB/includes/filesystem.php @@ -0,0 +1,52 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ +/** +* @ignore +*/ +if (!defined('IN_PHPBB')) +{ + exit; +} + +/** +* A class with various functions that are related to paths, files and the filesystem +* @package phpBB3 +*/ +class phpbb_filesystem +{ + /** + * Eliminates useless . and .. components from specified path. + * + * @param string $path Path to clean + * @return string Cleaned path + */ + public function clean_path($path) + { + $exploded = explode('/', $path); + $filtered = array(); + foreach ($exploded as $part) + { + if ($part === '.' && !empty($filtered)) + { + continue; + } + + if ($part === '..' && !empty($filtered) && $filtered[sizeof($filtered) - 1] !== '..') + { + array_pop($filtered); + } + else + { + $filtered[] = $part; + } + } + $path = implode('/', $filtered); + return $path; + } +} diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 58d2ad4760..3a650b37fc 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -1049,31 +1049,33 @@ else /** * Eliminates useless . and .. components from specified path. * +* Deprecated, use filesystem class instead +* * @param string $path Path to clean * @return string Cleaned path +* +* @deprecated */ function phpbb_clean_path($path) { - $exploded = explode('/', $path); - $filtered = array(); - foreach ($exploded as $part) - { - if ($part === '.' && !empty($filtered)) - { - continue; - } + global $phpbb_container; - if ($part === '..' && !empty($filtered) && $filtered[sizeof($filtered) - 1] !== '..') - { - array_pop($filtered); - } - else + if ($phpbb_container) + { + $phpbb_filesystem = $phpbb_container->get('filesystem'); + } + else + { + // The container is not yet loaded, use a new instance + if (!class_exists('phpbb_filesystem')) { - $filtered[] = $part; + global $phpbb_root_path, $phpEx; + require($phpbb_root_path . 'includes/filesystem.' . $phpEx); } + $phpbb_filesystem = new phpbb_filesystem(); } - $path = implode('/', $filtered); - return $path; + + return $phpbb_filesystem->clean_path($path); } // functions used for building option fields @@ -2731,7 +2733,7 @@ function redirect($url, $return = false, $disable_cd_check = false) // Make sure no linebreaks are there... to prevent http response splitting for PHP < 4.4.2 if (strpos(urldecode($url), "\n") !== false || strpos(urldecode($url), "\r") !== false || strpos($url, ';') !== false) { - trigger_error('Tried to redirect to potentially insecure url.', E_USER_ERROR); + trigger_error('INSECURE_REDIRECT', E_USER_ERROR); } // Now, also check the protocol and for a valid url the last time... @@ -2740,7 +2742,7 @@ function redirect($url, $return = false, $disable_cd_check = false) if ($url_parts === false || empty($url_parts['scheme']) || !in_array($url_parts['scheme'], $allowed_protocols)) { - trigger_error('Tried to redirect to potentially insecure url.', E_USER_ERROR); + trigger_error('INSECURE_REDIRECT', E_USER_ERROR); } if ($return) @@ -4182,7 +4184,7 @@ function phpbb_checkdnsrr($host, $type = 'MX') // Handler, header and footer /** -* Error and message handler, call with trigger_error if reqd +* Error and message handler, call with trigger_error if read */ function msg_handler($errno, $msg_text, $errfile, $errline) { diff --git a/phpBB/includes/functions_messenger.php b/phpBB/includes/functions_messenger.php index 821f0d970d..a646f35fdd 100644 --- a/phpBB/includes/functions_messenger.php +++ b/phpBB/includes/functions_messenger.php @@ -55,6 +55,24 @@ class messenger $this->vars = $this->msg = $this->replyto = $this->from = ''; $this->mail_priority = MAIL_NORMAL_PRIORITY; } + + /** + * Set addresses for to/im as available + * + * @param array $user User row + */ + function set_addresses($user) + { + if (isset($user['user_email']) && $user['user_email']) + { + $this->to($user['user_email'], (isset($user['username']) ? $user['username'] : '')); + } + + if (isset($user['user_jabber']) && $user['user_jabber']) + { + $this->im($user['user_jabber'], (isset($user['username']) ? $user['username'] : '')); + } + } /** * Sets an email address to send to @@ -209,7 +227,7 @@ class messenger if (!isset($this->tpl_msg[$template_lang . $template_file])) { $style_resource_locator = new phpbb_style_resource_locator(); - $style_path_provider = new phpbb_style_extension_path_provider($phpbb_extension_manager, new phpbb_style_path_provider()); + $style_path_provider = new phpbb_style_extension_path_provider($phpbb_extension_manager, new phpbb_style_path_provider(), $phpbb_root_path); $tpl = new phpbb_template($phpbb_root_path, $phpEx, $config, $user, $style_resource_locator, new phpbb_template_context(), $phpbb_extension_manager); $style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $style_resource_locator, $style_path_provider, $tpl); diff --git a/phpBB/includes/functions_url_matcher.php b/phpBB/includes/functions_url_matcher.php index 7280cb74eb..a89ab7b126 100644 --- a/phpBB/includes/functions_url_matcher.php +++ b/phpBB/includes/functions_url_matcher.php @@ -60,7 +60,7 @@ function phpbb_create_dumped_url_matcher(phpbb_extension_finder $finder, $root_p 'class' => 'phpbb_url_matcher', )); - file_put_contents($root_path . 'cache/url_matcher' . $php_ext, $cached_url_matcher_dump); + file_put_contents($root_path . 'cache/url_matcher.' . $php_ext, $cached_url_matcher_dump); } /** @@ -87,7 +87,7 @@ function phpbb_create_url_matcher(phpbb_extension_finder $finder, RequestContext */ function phpbb_load_url_matcher(RequestContext $context, $root_path, $php_ext) { - require($root_path . 'cache/url_matcher' . $php_ext); + require($root_path . 'cache/url_matcher.' . $php_ext); return new phpbb_url_matcher($context); } @@ -102,5 +102,5 @@ function phpbb_load_url_matcher(RequestContext $context, $root_path, $php_ext) */ function phpbb_url_matcher_dumped($root_path, $php_ext) { - return file_exists($root_path . 'cache/url_matcher' . $php_ext); + return file_exists($root_path . 'cache/url_matcher.' . $php_ext); } diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php index bc636acabb..599cb24f75 100644 --- a/phpBB/includes/functions_user.php +++ b/phpBB/includes/functions_user.php @@ -2924,8 +2924,7 @@ function group_user_attributes($action, $group_id, $user_id_ary = false, $userna { $messenger->template('group_approved', $row['user_lang']); - $messenger->to($row['user_email'], $row['username']); - $messenger->im($row['user_jabber'], $row['username']); + $messenger->set_addresses($row); $messenger->assign_vars(array( 'USERNAME' => htmlspecialchars_decode($row['username']), diff --git a/phpBB/includes/hook/finder.php b/phpBB/includes/hook/finder.php index 065e685514..7b0412f733 100644 --- a/phpBB/includes/hook/finder.php +++ b/phpBB/includes/hook/finder.php @@ -66,7 +66,7 @@ class phpbb_hook_finder { while (($file = readdir($dh)) !== false) { - if (strpos($file, 'hook_') === 0 && substr($file, -(strlen($this->php_ext) + 1)) === '.' . $this->php_ext) + if (strpos($file, 'hook_') === 0 && substr($file, -strlen('.' . $this->php_ext)) === '.' . $this->php_ext) { $hook_files[] = substr($file, 0, -(strlen($this->php_ext) + 1)); } diff --git a/phpBB/includes/notification/method/email.php b/phpBB/includes/notification/method/email.php index dc505c0d41..44666b1422 100644 --- a/phpBB/includes/notification/method/email.php +++ b/phpBB/includes/notification/method/email.php @@ -21,7 +21,7 @@ if (!defined('IN_PHPBB')) * * @package notifications */ -class phpbb_notification_method_email extends phpbb_notification_method_base +class phpbb_notification_method_email extends phpbb_notification_method_messenger_base { /** * Get notification method name diff --git a/phpBB/includes/notification/method/jabber.php b/phpBB/includes/notification/method/jabber.php index debffa8ce5..d3b756d020 100644 --- a/phpBB/includes/notification/method/jabber.php +++ b/phpBB/includes/notification/method/jabber.php @@ -48,7 +48,13 @@ class phpbb_notification_method_jabber extends phpbb_notification_method_messeng */ public function global_available() { - return ($this->config['jab_enable'] && @extension_loaded('xml')); + return !( + empty($this->config['jab_enable']) || + empty($this->config['jab_host']) || + empty($this->config['jab_username']) || + empty($this->config['jab_password']) || + !@extension_loaded('xml') + ); } public function notify() diff --git a/phpBB/includes/notification/method/messenger_base.php b/phpBB/includes/notification/method/messenger_base.php index ce1ecc09ce..4966aa94bc 100644 --- a/phpBB/includes/notification/method/messenger_base.php +++ b/phpBB/includes/notification/method/messenger_base.php @@ -78,9 +78,9 @@ abstract class phpbb_notification_method_messenger_base extends phpbb_notificati continue; } - $messenger->template($email_template_base_dir . $notification->get_email_template(), $user['user_lang']); + $messenger->template($template_dir_prefix . $notification->get_email_template(), $user['user_lang']); - $messenger->to($user['user_email'], $user['username']); + $messenger->set_addresses($user); $messenger->assign_vars(array_merge(array( 'USERNAME' => $user['username'], diff --git a/phpBB/includes/style/extension_path_provider.php b/phpBB/includes/style/extension_path_provider.php index 6976a45ed0..ec1d85f821 100644 --- a/phpBB/includes/style/extension_path_provider.php +++ b/phpBB/includes/style/extension_path_provider.php @@ -40,17 +40,22 @@ class phpbb_style_extension_path_provider extends phpbb_extension_provider imple */ protected $base_path_provider; + /** @var string */ + protected $phpbb_root_path; + /** * Constructor stores extension manager * * @param phpbb_extension_manager $extension_manager phpBB extension manager * @param phpbb_style_path_provider $base_path_provider A simple path provider * to provide paths to be located in extensions + * @param string $phpbb_root_path phpBB root path */ - public function __construct(phpbb_extension_manager $extension_manager, phpbb_style_path_provider $base_path_provider) + public function __construct(phpbb_extension_manager $extension_manager, phpbb_style_path_provider $base_path_provider, $phpbb_root_path) { parent::__construct($extension_manager); $this->base_path_provider = $base_path_provider; + $this->phpbb_root_path = $phpbb_root_path; } /** @@ -91,10 +96,23 @@ class phpbb_style_extension_path_provider extends phpbb_extension_provider imple $directories['style'][] = $path; if ($path && !phpbb_is_absolute($path)) { + // Remove phpBB root path from the style path, + // so the finder is able to find extension styles, + // when the root path is not ./ + if (strpos($path, $this->phpbb_root_path) === 0) + { + $path = substr($path, strlen($this->phpbb_root_path)); + } + $result = $finder->directory('/' . $this->ext_dir_prefix . $path) ->get_directories(true, false, true); foreach ($result as $ext => $ext_path) { + // Make sure $ext_path has no ending slash + if (substr($ext_path, -1) === '/') + { + $ext_path = substr($ext_path, 0, -1); + } $directories[$ext][] = $ext_path; } } diff --git a/phpBB/includes/ucp/ucp_activate.php b/phpBB/includes/ucp/ucp_activate.php index 577761dfde..898dacd831 100644 --- a/phpBB/includes/ucp/ucp_activate.php +++ b/phpBB/includes/ucp/ucp_activate.php @@ -114,7 +114,7 @@ class ucp_activate $messenger->template('admin_welcome_activated', $user_row['user_lang']); - $messenger->to($user_row['user_email'], $user_row['username']); + $messenger->set_addresses($user_row); $messenger->anti_abuse_headers($config, $user); diff --git a/phpBB/includes/ucp/ucp_groups.php b/phpBB/includes/ucp/ucp_groups.php index 8516682633..50d13e00b1 100644 --- a/phpBB/includes/ucp/ucp_groups.php +++ b/phpBB/includes/ucp/ucp_groups.php @@ -212,8 +212,7 @@ class ucp_groups { $messenger->template('group_request', $row['user_lang']); - $messenger->to($row['user_email'], $row['username']); - $messenger->im($row['user_jabber'], $row['username']); + $messenger->set_addresses($row); $messenger->assign_vars(array( 'USERNAME' => htmlspecialchars_decode($row['username']), diff --git a/phpBB/includes/ucp/ucp_profile.php b/phpBB/includes/ucp/ucp_profile.php index d2507e5dbd..55df5f610c 100644 --- a/phpBB/includes/ucp/ucp_profile.php +++ b/phpBB/includes/ucp/ucp_profile.php @@ -175,8 +175,7 @@ class ucp_profile while ($row = $db->sql_fetchrow($result)) { $messenger->template('admin_activate', $row['user_lang']); - $messenger->to($row['user_email'], $row['username']); - $messenger->im($row['user_jabber'], $row['username']); + $messenger->set_addresses($row); $messenger->assign_vars(array( 'USERNAME' => htmlspecialchars_decode($data['username']), diff --git a/phpBB/includes/ucp/ucp_register.php b/phpBB/includes/ucp/ucp_register.php index 1de38fddb7..70fbfe46fb 100644 --- a/phpBB/includes/ucp/ucp_register.php +++ b/phpBB/includes/ucp/ucp_register.php @@ -384,8 +384,7 @@ class ucp_register while ($row = $db->sql_fetchrow($result)) { $messenger->template('admin_activate', $row['user_lang']); - $messenger->to($row['user_email'], $row['username']); - $messenger->im($row['user_jabber'], $row['username']); + $messenger->set_addresses($row); $messenger->assign_vars(array( 'USERNAME' => htmlspecialchars_decode($data['username']), diff --git a/phpBB/includes/ucp/ucp_remind.php b/phpBB/includes/ucp/ucp_remind.php index 4f65ed1866..8a7ba5d0ca 100644 --- a/phpBB/includes/ucp/ucp_remind.php +++ b/phpBB/includes/ucp/ucp_remind.php @@ -94,8 +94,7 @@ class ucp_remind $messenger->template('user_activate_passwd', $user_row['user_lang']); - $messenger->to($user_row['user_email'], $user_row['username']); - $messenger->im($user_row['user_jabber'], $user_row['username']); + $messenger->set_addresses($user_row); $messenger->assign_vars(array( 'USERNAME' => htmlspecialchars_decode($user_row['username']), diff --git a/phpBB/includes/ucp/ucp_resend.php b/phpBB/includes/ucp/ucp_resend.php index 5f1e3a92c3..ab396cdec9 100644 --- a/phpBB/includes/ucp/ucp_resend.php +++ b/phpBB/includes/ucp/ucp_resend.php @@ -91,7 +91,7 @@ class ucp_resend if ($config['require_activation'] == USER_ACTIVATION_SELF || $coppa) { $messenger->template(($coppa) ? 'coppa_resend_inactive' : 'user_resend_inactive', $user_row['user_lang']); - $messenger->to($user_row['user_email'], $user_row['username']); + $messenger->set_addresses($user_row); $messenger->anti_abuse_headers($config, $user); @@ -126,8 +126,7 @@ class ucp_resend while ($row = $db->sql_fetchrow($result)) { $messenger->template('admin_activate', $row['user_lang']); - $messenger->to($row['user_email'], $row['username']); - $messenger->im($row['user_jabber'], $row['username']); + $messenger->set_addresses($row); $messenger->anti_abuse_headers($config, $user); diff --git a/phpBB/includes/user.php b/phpBB/includes/user.php index 9ddd806b27..5530fe3f03 100644 --- a/phpBB/includes/user.php +++ b/phpBB/includes/user.php @@ -215,7 +215,7 @@ class phpbb_user extends phpbb_session if (!$this->style) { - trigger_error('Could not get style data', E_USER_ERROR); + trigger_error('NO_STYLE_DATA', E_USER_ERROR); } // Now parse the cfg file and cache it diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 867235e607..5ea950bfad 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -95,7 +95,7 @@ require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx); set_error_handler(defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handler'); // Setup class loader first -$phpbb_class_loader = new phpbb_class_loader('phpbb_', "{$phpbb_root_path}includes/", ".$phpEx"); +$phpbb_class_loader = new phpbb_class_loader('phpbb_', "{$phpbb_root_path}includes/", $phpEx); $phpbb_class_loader->register(); // Set up container (must be done here because extensions table may not exist) diff --git a/phpBB/install/index.php b/phpBB/install/index.php index a03fda6395..57bcdaffc1 100644 --- a/phpBB/install/index.php +++ b/phpBB/install/index.php @@ -90,9 +90,9 @@ include($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx); require($phpbb_root_path . 'includes/functions_install.' . $phpEx); // Setup class loader first -$phpbb_class_loader = new phpbb_class_loader('phpbb_', "{$phpbb_root_path}includes/", ".$phpEx"); +$phpbb_class_loader = new phpbb_class_loader('phpbb_', "{$phpbb_root_path}includes/", $phpEx); $phpbb_class_loader->register(); -$phpbb_class_loader_ext = new phpbb_class_loader('phpbb_ext_', "{$phpbb_root_path}ext/", ".$phpEx"); +$phpbb_class_loader_ext = new phpbb_class_loader('phpbb_ext_', "{$phpbb_root_path}ext/", $phpEx); $phpbb_class_loader_ext->register(); // Set up container diff --git a/phpBB/install/install_update.php b/phpBB/install/install_update.php index bfceed6b17..aa1bd0fa35 100644 --- a/phpBB/install/install_update.php +++ b/phpBB/install/install_update.php @@ -72,7 +72,13 @@ class install_update extends module function main($mode, $sub) { global $phpbb_style, $template, $phpEx, $phpbb_root_path, $user, $db, $config, $cache, $auth, $language; - global $request, $phpbb_admin_path, $phpbb_adm_relative_path; + global $request, $phpbb_admin_path, $phpbb_adm_relative_path, $phpbb_container; + + // Create a normal container now + $phpbb_container = phpbb_create_default_container($phpbb_root_path, $phpEx); + + // Writes into global $cache + $cache = $phpbb_container->get('cache'); $this->tpl_name = 'install_update'; $this->page_title = 'UPDATE_INSTALLATION'; diff --git a/phpBB/language/en/captcha_recaptcha.php b/phpBB/language/en/captcha_recaptcha.php index c72957ca16..3d91a9d110 100644 --- a/phpBB/language/en/captcha_recaptcha.php +++ b/phpBB/language/en/captcha_recaptcha.php @@ -46,4 +46,5 @@ $lang = array_merge($lang, array( 'RECAPTCHA_PRIVATE_EXPLAIN' => 'Your private reCaptcha key. Keys can be obtained on <a href="http://www.google.com/recaptcha">www.google.com/recaptcha</a>.', 'RECAPTCHA_EXPLAIN' => 'In an effort to prevent automatic submissions, we require that you enter both of the words displayed into the text field underneath.', + 'RECAPTCHA_SOCKET_ERROR' => 'There was a problem connecting to the RECAPTCHA service: could not open socket. Try again later.', )); diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index 5d6fe03b5f..c1d6ef4af3 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -313,6 +313,7 @@ $lang = array_merge($lang, array( 'IN' => 'in', 'INDEX' => 'Index page', 'INFORMATION' => 'Information', + 'INSECURE_REDIRECT' => 'Tried to redirect to potentially insecure url.', 'INTERESTS' => 'Interests', 'INVALID_DIGEST_CHALLENGE' => 'Invalid digest challenge.', 'INVALID_EMAIL_LOG' => '<strong>%s</strong> possibly an invalid email address?', @@ -454,6 +455,7 @@ $lang = array_merge($lang, array( 'NO_POSTS_TIME_FRAME' => 'No posts exist inside this topic for the selected time frame.', 'NO_FEED_ENABLED' => 'Feeds are not available on this board.', 'NO_FEED' => 'The requested feed is not available.', + 'NO_STYLE_DATA' => 'Could not get style data', 'NO_SUBJECT' => 'No subject specified', // Used for posts having no subject defined but displayed within management pages. 'NO_SUCH_SEARCH_MODULE' => 'The specified search backend doesn’t exist.', 'NO_SUPPORTED_AUTH_METHODS' => 'No supported authentication methods.', diff --git a/phpBB/language/en/email/post_approved.txt b/phpBB/language/en/email/post_approved.txt index e715b54026..a02dba142a 100644 --- a/phpBB/language/en/email/post_approved.txt +++ b/phpBB/language/en/email/post_approved.txt @@ -10,5 +10,4 @@ If you want to view the post, click the following link: If you want to view the topic, click the following link: {U_VIEW_TOPIC} - {EMAIL_SIG}
\ No newline at end of file diff --git a/phpBB/language/en/email/post_disapproved.txt b/phpBB/language/en/email/post_disapproved.txt index 2f8a8381cb..9b2ee643ff 100644 --- a/phpBB/language/en/email/post_disapproved.txt +++ b/phpBB/language/en/email/post_disapproved.txt @@ -8,5 +8,4 @@ The following reason was given for the disapproval: {REASON} - {EMAIL_SIG} diff --git a/phpBB/language/en/email/post_in_queue.txt b/phpBB/language/en/email/post_in_queue.txt index 8d56ce6c4d..941f070d37 100644 --- a/phpBB/language/en/email/post_in_queue.txt +++ b/phpBB/language/en/email/post_in_queue.txt @@ -1,4 +1,4 @@ -Subject: Topic reply notification - "{TOPIC_TITLE}" +Subject: Post moderation notification - "{TOPIC_TITLE}" Hello {USERNAME}, @@ -10,8 +10,4 @@ If you want to view the post, click the following link: If you want to view the topic, click the following link: {U_TOPIC} -If you no longer wish to receive updates about replies to bookmarks, please update your notification settings here: - -{U_NOTIFICATION_SETTINGS} - {EMAIL_SIG} diff --git a/phpBB/language/en/email/report_closed.txt b/phpBB/language/en/email/report_closed.txt index eb7ef22b5e..f248018f9a 100644 --- a/phpBB/language/en/email/report_closed.txt +++ b/phpBB/language/en/email/report_closed.txt @@ -4,5 +4,4 @@ Hello {USERNAME}, You are receiving this notification because the report you filed on the post "{POST_SUBJECT}" in "{TOPIC_TITLE}" at "{SITENAME}" was handled by a moderator or by an administrator. The report was afterwards closed. If you have further questions contact {CLOSER_NAME} with a personal message. - -{EMAIL_SIG}
\ No newline at end of file +{EMAIL_SIG} diff --git a/phpBB/language/en/email/report_deleted.txt b/phpBB/language/en/email/report_deleted.txt index 4292ca2239..9a30ea2ddd 100644 --- a/phpBB/language/en/email/report_deleted.txt +++ b/phpBB/language/en/email/report_deleted.txt @@ -4,5 +4,4 @@ Hello {USERNAME}, You are receiving this notification because the report you filed on the post "{POST_SUBJECT}" in "{TOPIC_TITLE}" at "{SITENAME}" was deleted by a moderator or by an administrator. - -{EMAIL_SIG}
\ No newline at end of file +{EMAIL_SIG} diff --git a/phpBB/language/en/email/report_pm.txt b/phpBB/language/en/email/report_pm.txt index 66ae82d074..a101a014ff 100644 --- a/phpBB/language/en/email/report_pm.txt +++ b/phpBB/language/en/email/report_pm.txt @@ -1,4 +1,4 @@ -Subject: Topic reply notification - "{TOPIC_TITLE}" +Subject: Private Message report - "{TOPIC_TITLE}" Hello {USERNAME}, @@ -7,8 +7,4 @@ You are receiving this notification because a Private Message titled "{SUBJECT}" If you want to view the report, click the following link: {U_VIEW_REPORT} -If you no longer wish to receive updates about replies to bookmarks, please update your notification settings here: - -{U_NOTIFICATION_SETTINGS} - {EMAIL_SIG} diff --git a/phpBB/language/en/email/report_post.txt b/phpBB/language/en/email/report_post.txt index 46983be1ed..8eb24ec6af 100644 --- a/phpBB/language/en/email/report_post.txt +++ b/phpBB/language/en/email/report_post.txt @@ -1,4 +1,4 @@ -Subject: Topic reply notification - "{TOPIC_TITLE}" +Subject: Post report - "{TOPIC_TITLE}" Hello {USERNAME}, @@ -10,8 +10,4 @@ If you want to view the report, click the following link: If you want to view the post, click the following link: {U_VIEW_POST} -If you no longer wish to receive updates about replies to bookmarks, please update your notification settings here: - -{U_NOTIFICATION_SETTINGS} - {EMAIL_SIG} diff --git a/phpBB/language/en/email/short/post_approved.txt b/phpBB/language/en/email/short/post_approved.txt index e715b54026..a02dba142a 100644 --- a/phpBB/language/en/email/short/post_approved.txt +++ b/phpBB/language/en/email/short/post_approved.txt @@ -10,5 +10,4 @@ If you want to view the post, click the following link: If you want to view the topic, click the following link: {U_VIEW_TOPIC} - {EMAIL_SIG}
\ No newline at end of file diff --git a/phpBB/language/en/email/short/post_disapproved.txt b/phpBB/language/en/email/short/post_disapproved.txt index 2f8a8381cb..9b2ee643ff 100644 --- a/phpBB/language/en/email/short/post_disapproved.txt +++ b/phpBB/language/en/email/short/post_disapproved.txt @@ -8,5 +8,4 @@ The following reason was given for the disapproval: {REASON} - {EMAIL_SIG} diff --git a/phpBB/language/en/email/short/post_in_queue.txt b/phpBB/language/en/email/short/post_in_queue.txt index 8d56ce6c4d..941f070d37 100644 --- a/phpBB/language/en/email/short/post_in_queue.txt +++ b/phpBB/language/en/email/short/post_in_queue.txt @@ -1,4 +1,4 @@ -Subject: Topic reply notification - "{TOPIC_TITLE}" +Subject: Post moderation notification - "{TOPIC_TITLE}" Hello {USERNAME}, @@ -10,8 +10,4 @@ If you want to view the post, click the following link: If you want to view the topic, click the following link: {U_TOPIC} -If you no longer wish to receive updates about replies to bookmarks, please update your notification settings here: - -{U_NOTIFICATION_SETTINGS} - {EMAIL_SIG} diff --git a/phpBB/language/en/email/short/report_pm.txt b/phpBB/language/en/email/short/report_pm.txt index 66ae82d074..a101a014ff 100644 --- a/phpBB/language/en/email/short/report_pm.txt +++ b/phpBB/language/en/email/short/report_pm.txt @@ -1,4 +1,4 @@ -Subject: Topic reply notification - "{TOPIC_TITLE}" +Subject: Private Message report - "{TOPIC_TITLE}" Hello {USERNAME}, @@ -7,8 +7,4 @@ You are receiving this notification because a Private Message titled "{SUBJECT}" If you want to view the report, click the following link: {U_VIEW_REPORT} -If you no longer wish to receive updates about replies to bookmarks, please update your notification settings here: - -{U_NOTIFICATION_SETTINGS} - {EMAIL_SIG} diff --git a/phpBB/language/en/email/short/report_post.txt b/phpBB/language/en/email/short/report_post.txt index 46983be1ed..8eb24ec6af 100644 --- a/phpBB/language/en/email/short/report_post.txt +++ b/phpBB/language/en/email/short/report_post.txt @@ -1,4 +1,4 @@ -Subject: Topic reply notification - "{TOPIC_TITLE}" +Subject: Post report - "{TOPIC_TITLE}" Hello {USERNAME}, @@ -10,8 +10,4 @@ If you want to view the report, click the following link: If you want to view the post, click the following link: {U_VIEW_POST} -If you no longer wish to receive updates about replies to bookmarks, please update your notification settings here: - -{U_NOTIFICATION_SETTINGS} - {EMAIL_SIG} diff --git a/phpBB/language/en/email/short/topic_approved.txt b/phpBB/language/en/email/short/topic_approved.txt index 0b09918b89..60c7ef4c09 100644 --- a/phpBB/language/en/email/short/topic_approved.txt +++ b/phpBB/language/en/email/short/topic_approved.txt @@ -7,5 +7,4 @@ You are receiving this notification because your topic "{TOPIC_TITLE}" at "{SITE If you want to view the topic, click the following link: {U_VIEW_TOPIC} - {EMAIL_SIG} diff --git a/phpBB/language/en/email/short/topic_disapproved.txt b/phpBB/language/en/email/short/topic_disapproved.txt index a4bd9c151e..9c821e2bba 100644 --- a/phpBB/language/en/email/short/topic_disapproved.txt +++ b/phpBB/language/en/email/short/topic_disapproved.txt @@ -8,5 +8,4 @@ The following reason was given for the disapproval: {REASON} - {EMAIL_SIG} diff --git a/phpBB/language/en/email/short/topic_in_queue.txt b/phpBB/language/en/email/short/topic_in_queue.txt index ae8f9e2484..706dddf64f 100644 --- a/phpBB/language/en/email/short/topic_in_queue.txt +++ b/phpBB/language/en/email/short/topic_in_queue.txt @@ -1,4 +1,4 @@ -Subject: Topic reply notification - "{TOPIC_TITLE}" +Subject: Topic moderation notification - "{TOPIC_TITLE}" Hello {USERNAME}, @@ -10,8 +10,4 @@ If you want to view the topic, click the following link: If you want to view the forum, click the following link: {U_FORUM} -If you no longer wish to receive updates about replies to bookmarks, please update your notification settings here: - -{U_NOTIFICATION_SETTINGS} - {EMAIL_SIG} diff --git a/phpBB/language/en/email/topic_approved.txt b/phpBB/language/en/email/topic_approved.txt index 0b09918b89..60c7ef4c09 100644 --- a/phpBB/language/en/email/topic_approved.txt +++ b/phpBB/language/en/email/topic_approved.txt @@ -7,5 +7,4 @@ You are receiving this notification because your topic "{TOPIC_TITLE}" at "{SITE If you want to view the topic, click the following link: {U_VIEW_TOPIC} - {EMAIL_SIG} diff --git a/phpBB/language/en/email/topic_disapproved.txt b/phpBB/language/en/email/topic_disapproved.txt index a4bd9c151e..9c821e2bba 100644 --- a/phpBB/language/en/email/topic_disapproved.txt +++ b/phpBB/language/en/email/topic_disapproved.txt @@ -8,5 +8,4 @@ The following reason was given for the disapproval: {REASON} - {EMAIL_SIG} diff --git a/phpBB/language/en/email/topic_in_queue.txt b/phpBB/language/en/email/topic_in_queue.txt index ae8f9e2484..706dddf64f 100644 --- a/phpBB/language/en/email/topic_in_queue.txt +++ b/phpBB/language/en/email/topic_in_queue.txt @@ -1,4 +1,4 @@ -Subject: Topic reply notification - "{TOPIC_TITLE}" +Subject: Topic moderation notification - "{TOPIC_TITLE}" Hello {USERNAME}, @@ -10,8 +10,4 @@ If you want to view the topic, click the following link: If you want to view the forum, click the following link: {U_FORUM} -If you no longer wish to receive updates about replies to bookmarks, please update your notification settings here: - -{U_NOTIFICATION_SETTINGS} - {EMAIL_SIG} diff --git a/phpBB/language/en/email/user_reactivate_account.txt b/phpBB/language/en/email/user_reactivate_account.txt index 7e25018f4d..385c09f4c5 100644 --- a/phpBB/language/en/email/user_reactivate_account.txt +++ b/phpBB/language/en/email/user_reactivate_account.txt @@ -15,5 +15,4 @@ Please visit the following link to reactivate your account: {U_ACTIVATE} - {EMAIL_SIG}
\ No newline at end of file diff --git a/phpBB/language/en/email/user_resend_inactive.txt b/phpBB/language/en/email/user_resend_inactive.txt index 7879b914b9..b9b95ce9e5 100644 --- a/phpBB/language/en/email/user_resend_inactive.txt +++ b/phpBB/language/en/email/user_resend_inactive.txt @@ -14,7 +14,6 @@ Please visit the following link in order to activate your account: {U_ACTIVATE} - Thank you for registering. {EMAIL_SIG}
\ No newline at end of file diff --git a/phpBB/language/en/mcp.php b/phpBB/language/en/mcp.php index eaa2d7e3a5..29f418183f 100644 --- a/phpBB/language/en/mcp.php +++ b/phpBB/language/en/mcp.php @@ -250,6 +250,8 @@ $lang = array_merge($lang, array( 'ONLY_TOPIC' => 'Only topic “%s”', 'OTHER_USERS' => 'Other users posting from this IP', + 'QUICKMOD_ACTION_NOT_ALLOWED' => "%s not allowed as quickmod", + 'PM_REPORT_CLOSED_SUCCESS' => 'The selected PM report has been closed successfully.', 'PM_REPORT_DELETED_SUCCESS' => 'The selected PM report has been deleted successfully.', 'PM_REPORTED_SUCCESS' => 'This private message has been successfully reported.', diff --git a/phpBB/mcp.php b/phpBB/mcp.php index d04a297cf9..c36faad74b 100644 --- a/phpBB/mcp.php +++ b/phpBB/mcp.php @@ -182,7 +182,7 @@ if ($quickmod) break; default: - trigger_error("$action not allowed as quickmod", E_USER_ERROR); + trigger_error($user->lang('QUICKMOD_ACTION_NOT_ALLOWED', $action), E_USER_ERROR); break; } } diff --git a/phpBB/memberlist.php b/phpBB/memberlist.php index d25583b84a..7ecf332720 100644 --- a/phpBB/memberlist.php +++ b/phpBB/memberlist.php @@ -146,7 +146,7 @@ switch ($mode) $result = $db->sql_query($db->sql_build_query('SELECT', $sql_ary)); - $user_ary = array(); + $user_ary = $user_ids = $group_users = array(); while ($row = $db->sql_fetchrow($result)) { $row['forums'] = ''; @@ -157,11 +157,13 @@ switch ($mode) } $db->sql_freeresult($result); - if ($config['teampage_forums']) + $user_ids = array_unique($user_ids); + + if (!empty($user_ids) && $config['teampage_forums']) { $template->assign_var('S_DISPLAY_MODERATOR_FORUMS', true); // Get all moderators - $perm_ary = $auth->acl_get_list(array_unique($user_ids), array('m_'), false); + $perm_ary = $auth->acl_get_list($user_ids, array('m_'), false); foreach ($perm_ary as $forum_id => $forum_ary) { @@ -374,7 +376,7 @@ switch ($mode) $messenger->subject(htmlspecialchars_decode($subject)); $messenger->replyto($user->data['user_email']); - $messenger->im($row['user_jabber'], $row['username']); + $messenger->set_addresses($row); $messenger->assign_vars(array( 'BOARD_CONTACT' => $config['board_contact'], diff --git a/phpBB/styles/prosilver/template/ajax.js b/phpBB/styles/prosilver/template/ajax.js index 0b587ac561..8dd1f58c97 100644 --- a/phpBB/styles/prosilver/template/ajax.js +++ b/phpBB/styles/prosilver/template/ajax.js @@ -39,7 +39,7 @@ phpbb.addAjaxCallback('mark_forums_read', function(res) { // Mark topics read if we are watching a category and showing active topics if ($('#active_topics').length) { - phpbb.ajaxCallbacks['mark_topics_read'].call(this, res, false); + phpbb.ajaxCallbacks.mark_topics_read.call(this, res, false); } // Update mark forums read links @@ -75,7 +75,7 @@ phpbb.addAjaxCallback('mark_topics_read', function(res, update_topic_links) { $.each(iconsArray, function(unreadClass, readClass) { $.each(iconsState, function(key, value) { // Only topics can be hot - if ((value == '_hot' || value == '_hot_mine') && unreadClass != 'topic_unread') { + if ((value === '_hot' || value === '_hot_mine') && unreadClass !== 'topic_unread') { return true; } classMap[unreadClass + value] = readClass + value; @@ -217,7 +217,7 @@ $('#quick-mod-select').change(function () { */ $('#member_search').click(function () { $('#memberlist_search').slideToggle('fast'); - phpbb.ajax_callbacks['alt_text'].call(this); + phpbb.ajax_callbacks.alt_text.call(this); // Focus on the username textbox if it's available and displayed if ($('#memberlist_search').is(':visible')) { $('#username').focus(); diff --git a/phpBB/styles/prosilver/template/editor.js b/phpBB/styles/prosilver/template/editor.js index c16b0ef703..93506b8d4a 100644 --- a/phpBB/styles/prosilver/template/editor.js +++ b/phpBB/styles/prosilver/template/editor.js @@ -6,22 +6,21 @@ // 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); // Get browser version +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 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) -{ +function helpline(help) { document.forms[form_name].helpbox.value = help_line[help]; } @@ -29,28 +28,22 @@ function helpline(help) * Fix a bug involving the TextRange object. From * http://www.frostjedi.com/terra/scripts/demo/caretBug.html */ -function initInsertions() -{ +function initInsertions() { var doc; - if (document.forms[form_name]) - { + if (document.forms[form_name]) { doc = document; - } - else - { + } else { doc = opener.document; } var textarea = doc.forms[form_name].elements[text_name]; - if (is_ie && typeof(baseHeight) != 'number') - { + if (is_ie && typeof(baseHeight) !== 'number') { textarea.focus(); baseHeight = doc.selection.createRange().duplicate().boundingHeight; - if (!document.forms[form_name]) - { + if (!document.forms[form_name]) { document.body.focus(); } } @@ -59,14 +52,10 @@ function initInsertions() /** * bbstyle */ -function bbstyle(bbnumber) -{ - if (bbnumber != -1) - { +function bbstyle(bbnumber) { + if (bbnumber !== -1) { bbfontstyle(bbtags[bbnumber], bbtags[bbnumber+1]); - } - else - { + } else { insert_text('[*]'); document.forms[form_name].elements[text_name].focus(); } @@ -75,53 +64,47 @@ function bbstyle(bbnumber) /** * Apply bbcodes */ -function bbfontstyle(bbopen, bbclose) -{ +function bbfontstyle(bbopen, bbclose) { theSelection = false; var textarea = document.forms[form_name].elements[text_name]; textarea.focus(); - if ((clientVer >= 4) && is_ie && is_win) - { + if ((clientVer >= 4) && is_ie && is_win) { // Get text selection theSelection = document.selection.createRange().text; - if (theSelection) - { + 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)) - { + } 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; + 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)) - { + if (!isNaN(textarea.selectionStart)) { textarea.selectionStart = new_pos; textarea.selectionEnd = new_pos; - } + } // IE - else if (document.selection) - { + else if (document.selection) { var range = textarea.createTextRange(); range.move("character", new_pos); range.select(); @@ -135,51 +118,41 @@ function bbfontstyle(bbopen, bbclose) /** * Insert text at position */ -function insert_text(text, spaces, popup) -{ +function insert_text(text, spaces, popup) { var textarea; - - if (!popup) - { + + if (!popup) { textarea = document.forms[form_name].elements[text_name]; - } - else - { + } else { textarea = opener.document.forms[form_name].elements[text_name]; } - if (spaces) - { + + 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) - { + 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) - { + } 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 - { + 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) - { + + if (!popup) { textarea.focus(); } } @@ -187,8 +160,7 @@ function insert_text(text, spaces, popup) /** * Add inline attachment at position */ -function attach_inline(index, filename) -{ +function attach_inline(index, filename) { insert_text('[attachment=' + index + ']' + filename + '[/attachment]'); document.forms[form_name].elements[text_name].focus(); } @@ -196,79 +168,57 @@ function attach_inline(index, filename) /** * Add quote text to message */ -function addquote(post_id, username, l_wrote) -{ +function addquote(post_id, username, l_wrote) { var message_name = 'message_' + post_id; var theSelection = ''; var divarea = false; + var i; - if (l_wrote === undefined) - { + if (l_wrote === undefined) { // Backwards compatibility l_wrote = 'wrote'; } - if (document.all) - { + if (document.all) { divarea = document.all[message_name]; - } - else - { + } 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) - { + if (window.getSelection && !is_ie && !window.opera) { theSelection = window.getSelection().toString(); - } - else if (document.getSelection && !is_ie) - { + } else if (document.getSelection && !is_ie) { theSelection = document.getSelection(); - } - else if (document.selection) - { + } else if (document.selection) { theSelection = document.selection.createRange().text; } - if (theSelection == '' || typeof theSelection == 'undefined' || theSelection == null) - { - if (divarea.innerHTML) - { + 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(/<\;/ig, '<'); theSelection = theSelection.replace(/>\;/ig, '>'); theSelection = theSelection.replace(/&\;/ig, '&'); theSelection = theSelection.replace(/ \;/ig, ' '); - } - else if (document.all) - { + } else if (document.all) { theSelection = divarea.innerText; - } - else if (divarea.textContent) - { + } else if (divarea.textContent) { theSelection = divarea.textContent; - } - else if (divarea.firstChild.nodeValue) - { + } else if (divarea.firstChild.nodeValue) { theSelection = divarea.firstChild.nodeValue; } } - if (theSelection) - { - if (bbcodeEnabled) - { + if (theSelection) { + if (bbcodeEnabled) { insert_text('[quote="' + username + '"]' + theSelection + '[/quote]'); - } - else - { + } else { insert_text(username + ' ' + l_wrote + ':' + '\n'); var lines = split_lines(theSelection); - for (i = 0; i < lines.length; i++) - { + for (i = 0; i < lines.length; i++) { insert_text('> ' + lines[i] + '\n'); } } @@ -277,54 +227,47 @@ function addquote(post_id, username, l_wrote) return; } -function split_lines(text) -{ +function split_lines(text) { var lines = text.split('\n'); var splitLines = new Array(); var j = 0; - for(i = 0; i < lines.length; i++) - { - if (lines[i].length <= 80) - { + var i; + + for(i = 0; i < lines.length; i++) { + if (lines[i].length <= 80) { splitLines[j] = lines[i]; j++; - } - else - { + } else { var line = lines[i]; - do - { - var splitAt = line.indexOf(' ', 80); - - if (splitAt == -1) - { + var splitAt; + do { + splitAt = line.indexOf(' ', 80); + + if (splitAt === -1) { splitLines[j] = line; j++; - } - else - { + } else { splitLines[j] = line.substring(0, splitAt); line = line.substring(splitAt); j++; } } - while(splitAt != -1); + 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; +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) - { + if (selEnd === 1 || selEnd === 2) { selEnd = selLength; } @@ -345,10 +288,8 @@ function mozWrap(txtarea, open, close) * Insert at Caret position. Code from * http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130 */ -function storeCaret(textEl) -{ - if (textEl.createTextRange) - { +function storeCaret(textEl) { + if (textEl.createTextRange) { textEl.caretPos = document.selection.createRange().duplicate(); } } @@ -356,8 +297,7 @@ function storeCaret(textEl) /** * Color pallette */ -function colorPalette(dir, width, height) -{ +function colorPalette(dir, width, height) { var r = 0, g = 0, b = 0; var numberList = new Array(6); var color = ''; @@ -370,89 +310,74 @@ function colorPalette(dir, width, height) document.writeln('<table cellspacing="1" cellpadding="0" border="0">'); - for (r = 0; r < 5; r++) - { - if (dir == 'h') - { + for (r = 0; r < 5; r++) { + if (dir === 'h') { document.writeln('<tr>'); } - for (g = 0; g < 5; g++) - { - if (dir == 'v') - { + for (g = 0; g < 5; g++) { + if (dir === 'v') { document.writeln('<tr>'); } - - for (b = 0; b < 5; b++) - { + + 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') - { + if (dir === 'v') { document.writeln('</tr>'); } } - if (dir == 'h') - { + if (dir === 'h') { document.writeln('</tr>'); } } document.writeln('</table>'); } - /** * Caret Position object */ -function caretPosition() -{ +function caretPosition() { var start = null; var end = null; } - /** * Get the caret position in an textarea */ -function getCaretPosition(txtarea) -{ +function getCaretPosition(txtarea) { var caretPos = new caretPosition(); - + // simple Gecko/Opera way - if(txtarea.selectionStart || txtarea.selectionStart == 0) - { + if (txtarea.selectionStart || txtarea.selectionStart === 0) { caretPos.start = txtarea.selectionStart; caretPos.end = txtarea.selectionEnd; } // dirty and slow IE way - else if(document.selection) - { - + 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++) - { + 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; + caretPos.end = txtarea.sel_start; } return caretPos; diff --git a/phpBB/styles/prosilver/template/forum_fn.js b/phpBB/styles/prosilver/template/forum_fn.js index 995b4b0ab7..19fe5ca4d2 100644 --- a/phpBB/styles/prosilver/template/forum_fn.js +++ b/phpBB/styles/prosilver/template/forum_fn.js @@ -5,10 +5,8 @@ /** * Window popup */ -function popup(url, width, height, name) -{ - if (!name) - { +function popup(url, width, height, name) { + if (!name) { name = '_popup'; } @@ -19,18 +17,13 @@ function popup(url, width, height, name) /** * Jump to page */ -function jumpto() -{ +function jumpto() { var page = prompt(jump_page, on_page); - if (page !== null && !isNaN(page) && page == Math.floor(page) && page > 0) - { - if (base_url.indexOf('?') == -1) - { + if (page !== null && !isNaN(page) && page === Math.floor(page) && page > 0) { + if (base_url.indexOf('?') === -1) { document.location.href = base_url + '?start=' + ((page - 1) * per_page); - } - else - { + } else { document.location.href = base_url.replace(/&/g, '&') + '&start=' + ((page - 1) * per_page); } } @@ -40,21 +33,17 @@ function jumpto() * Mark/unmark checklist * id = ID of parent container, name = name prefix, state = state [true/false] */ -function marklist(id, name, state) -{ +function marklist(id, name, state) { var parent = document.getElementById(id) || document[id]; - if (!parent) - { + if (!parent) { return; } var rb = parent.getElementsByTagName('input'); - - for (var r = 0; r < rb.length; r++) - { - if (rb[r].name.substr(0, name.length) == name) - { + + for (var r = 0; r < rb.length; r++) { + if (rb[r].name.substr(0, name.length) === name) { rb[r].checked = state; } } @@ -64,25 +53,23 @@ function marklist(id, name, state) * Resize viewable area for attached image or topic review panel (possibly others to come) * e = element */ -function viewableArea(e, itself) -{ - if (!e) return; - if (!itself) - { +function viewableArea(e, itself) { + if (!e) { + return; + } + + if (!itself) { e = e.parentNode; } - - if (!e.vaHeight) - { + + if (!e.vaHeight) { // Store viewable area height before changing style to auto e.vaHeight = e.offsetHeight; e.vaMaxHeight = e.style.maxHeight; e.style.height = 'auto'; e.style.maxHeight = 'none'; e.style.overflow = 'visible'; - } - else - { + } else { // Restore viewable area height to the default e.style.height = e.vaHeight + 'px'; e.style.overflow = 'auto'; @@ -96,53 +83,41 @@ function viewableArea(e, itself) * s[-1,0,1] = hide,toggle display,show * type = string: inline, block, inline-block or other CSS "display" type */ -function dE(n, s, type) -{ - if (!type) - { +function dE(n, s, type) { + if (!type) { type = 'block'; } var e = document.getElementById(n); - if (!s) - { - s = (e.style.display == '' || e.style.display == type) ? -1 : 1; + if (!s) { + s = (e.style.display === '' || e.style.display === type) ? -1 : 1; } - e.style.display = (s == 1) ? type : 'none'; + e.style.display = (s === 1) ? type : 'none'; } /** * Alternate display of subPanels */ -function subPanels(p) -{ +function subPanels(p) { var i, e, t; - if (typeof(p) == 'string') - { + if (typeof(p) === 'string') { show_panel = p; } - for (i = 0; i < panels.length; i++) - { + for (i = 0; i < panels.length; i++) { e = document.getElementById(panels[i]); t = document.getElementById(panels[i] + '-tab'); - if (e) - { - if (panels[i] == show_panel) - { + if (e) { + if (panels[i] === show_panel) { e.style.display = 'block'; - if (t) - { + if (t) { t.className = 'activetab'; } - } - else - { + } else { e.style.display = 'none'; - if (t) - { + if (t) { t.className = ''; } } @@ -153,14 +128,10 @@ function subPanels(p) /** * Call print preview */ -function printPage() -{ - if (is_ie) - { +function printPage() { + if (is_ie) { printPreview(); - } - else - { + } else { window.print(); } } @@ -169,70 +140,60 @@ function printPage() * Show/hide groups of blocks * c = CSS style name * e = checkbox element -* t = toggle dispay state (used to show 'grip-show' image in the profile block when hiding the profiles) +* t = toggle dispay state (used to show 'grip-show' image in the profile block when hiding the profiles) */ -function displayBlocks(c, e, t) -{ - var s = (e.checked == true) ? 1 : -1; +function displayBlocks(c, e, t) { + var s = (e.checked === true) ? 1 : -1; - if (t) - { + if (t) { s *= -1; } var divs = document.getElementsByTagName("DIV"); - for (var d = 0; d < divs.length; d++) - { - if (divs[d].className.indexOf(c) == 0) - { - divs[d].style.display = (s == 1) ? 'none' : 'block'; + for (var d = 0; d < divs.length; d++) { + if (divs[d].className.indexOf(c) === 0) { + divs[d].style.display = (s === 1) ? 'none' : 'block'; } } } -function selectCode(a) -{ +function selectCode(a) { // Get ID of code block var e = a.parentNode.parentNode.getElementsByTagName('CODE')[0]; + var s, r; // Not IE and IE9+ - if (window.getSelection) - { - var s = window.getSelection(); + if (window.getSelection) { + s = window.getSelection(); // Safari - if (s.setBaseAndExtent) - { + if (s.setBaseAndExtent) { s.setBaseAndExtent(e, 0, e, e.innerText.length - 1); } // Firefox and Opera - else - { + else { // workaround for bug # 42885 - if (window.opera && e.innerHTML.substring(e.innerHTML.length - 4) == '<BR>') - { + if (window.opera && e.innerHTML.substring(e.innerHTML.length - 4) === '<BR>') { e.innerHTML = e.innerHTML + ' '; } - var r = document.createRange(); + r = document.createRange(); r.selectNodeContents(e); s.removeAllRanges(); s.addRange(r); } } // Some older browsers - else if (document.getSelection) - { - var s = document.getSelection(); - var r = document.createRange(); + else if (document.getSelection) { + s = document.getSelection(); + r = document.createRange(); r.selectNodeContents(e); s.removeAllRanges(); s.addRange(r); } // IE - else if (document.selection) - { - var r = document.body.createTextRange(); + else if (document.selection) { + r = document.body.createTextRange(); r.moveToElementText(e); r.select(); } @@ -242,25 +203,22 @@ function selectCode(a) * Play quicktime file by determining it's width/height * from the displayed rectangle area */ -function play_qt_file(obj) -{ +function play_qt_file(obj) { var rectangle = obj.GetRectangle(); + var width, height; - if (rectangle) - { + if (rectangle) { rectangle = rectangle.split(','); - var x1 = parseInt(rectangle[0]); - var x2 = parseInt(rectangle[2]); - var y1 = parseInt(rectangle[1]); - var y2 = parseInt(rectangle[3]); - - var width = (x1 < 0) ? (x1 * -1) + x2 : x2 - x1; - var height = (y1 < 0) ? (y1 * -1) + y2 : y2 - y1; - } - else - { - var width = 200; - var height = 0; + var x1 = parseInt(rectangle[0], 10); + var x2 = parseInt(rectangle[2], 10); + var y1 = parseInt(rectangle[1], 10); + var y2 = parseInt(rectangle[3], 10); + + width = (x1 < 0) ? (x1 * -1) + x2 : x2 - x1; + height = (y1 < 0) ? (y1 * -1) + y2 : y2 - y1; + } else { + width = 200; + height = 0; } obj.width = width; @@ -274,21 +232,21 @@ function play_qt_file(obj) * Check if the nodeName of elem is name * @author jQuery */ -function is_node_name(elem, name) -{ - return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); +function is_node_name(elem, name) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); } /** * Check if elem is in array, return position * @author jQuery */ -function is_in_array(elem, array) -{ - for (var i = 0, length = array.length; i < length; i++) +function is_in_array(elem, array) { + for (var i = 0, length = array.length; i < length; i++) { // === is correct (IE) - if (array[i] === elem) + if (array[i] === elem) { return i; + } + } return -1; } @@ -298,23 +256,26 @@ function is_in_array(elem, array) * Not used, but may come in handy for those not using JQuery * @author jQuery.find, Meik Sievertsen */ -function find_in_tree(node, tag, type, class_name) -{ +function find_in_tree(node, tag, type, class_name) { var result, element, i = 0, length = node.childNodes.length; - for (element = node.childNodes[0]; i < length; element = node.childNodes[++i]) - { - if (!element || element.nodeType != 1) continue; + for (element = node.childNodes[0]; i < length; element = node.childNodes[++i]) { + if (!element || element.nodeType !== 1) { + continue; + } - if ((!tag || is_node_name(element, tag)) && (!type || element.type == type) && (!class_name || is_in_array(class_name, (element.className || element).toString().split(/\s+/)) > -1)) - { + if ((!tag || is_node_name(element, tag)) && (!type || element.type === type) + && (!class_name || is_in_array(class_name, (element.className || element).toString().split(/\s+/)) > -1)) { return element; } - if (element.childNodes.length) + if (element.childNodes.length) { result = find_in_tree(element, tag, type, class_name); + } - if (result) return result; + if (result) { + return result; + } } } @@ -324,26 +285,23 @@ var last_key_entered = ''; /** * Check event key */ -function phpbb_check_key(event) -{ +function phpbb_check_key(event) { // Keycode is array down or up? - if (event.keyCode && (event.keyCode == 40 || event.keyCode == 38)) + if (event.keyCode && (event.keyCode === 40 || event.keyCode === 38)) { in_autocomplete = true; + } // Make sure we are not within an "autocompletion" field - if (in_autocomplete) - { + if (in_autocomplete) { // If return pressed and key changed we reset the autocompletion - if (!last_key_entered || last_key_entered == event.which) - { + if (!last_key_entered || last_key_entered === event.which) { in_autocompletion = false; return true; } } // Keycode is not return, then return. ;) - if (event.which != 13) - { + if (event.which !== 13) { last_key_entered = event.which; return true; } @@ -354,34 +312,37 @@ function phpbb_check_key(event) /** * Usually used for onkeypress event, to submit a form on enter */ -function submit_default_button(event, selector, class_name) -{ +function submit_default_button(event, selector, class_name) { // Add which for key events - if (!event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode)) + if (!event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode)) { event.which = event.charCode || event.keyCode; + } - if (phpbb_check_key(event)) + if (phpbb_check_key(event)) { return true; + } - var current = selector['parentNode']; + var current = selector.parentNode; // Search parent form element - while (current && (!current.nodeName || current.nodeType != 1 || !is_node_name(current, 'form')) && current != document) - current = current['parentNode']; + while (current && (!current.nodeName || current.nodeType !== 1 || !is_node_name(current, 'form')) && current !== document) { + current = current.parentNode; + } // Find the input submit button with the class name //current = find_in_tree(current, 'input', 'submit', class_name); var input_tags = current.getElementsByTagName('input'); current = false; - for (var i = 0, element = input_tags[0]; i < input_tags.length; element = input_tags[++i]) - { - if (element.type == 'submit' && is_in_array(class_name, (element.className || element).toString().split(/\s+/)) > -1) + for (var i = 0, element = input_tags[0]; i < input_tags.length; element = input_tags[++i]) { + if (element.type === 'submit' && is_in_array(class_name, (element.className || element).toString().split(/\s+/)) > -1) { current = element; + } } - if (!current) + if (!current) { return true; + } // Submit form current.focus(); @@ -394,39 +355,35 @@ function submit_default_button(event, selector, class_name) * The jQuery snippet used is based on http://greatwebguy.com/programming/dom/default-html-button-submit-on-enter-with-jquery/ * The non-jQuery code is a mimick of the jQuery code ;) */ -function apply_onkeypress_event() -{ +function apply_onkeypress_event() { // jQuery code in case jQuery is used - if (jquery_present) - { - jQuery('form input[type=text], form input[type=password]').live('keypress', function (e) - { + if (jquery_present) { + jQuery('form input[type=text], form input[type=password]').live('keypress', function (e) { var default_button = jQuery(this).parents('form').find('input[type=submit].default-submit-action'); - - if (!default_button || default_button.length <= 0) + + if (!default_button || default_button.length <= 0) { return true; + } - if (phpbb_check_key(e)) + if (phpbb_check_key(e)) { return true; + } - if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) - { + if ((e.which && e.which === 13) || (e.keyCode && e.keyCode === 13)) { default_button.click(); return false; } return true; }); - + return; } var input_tags = document.getElementsByTagName('input'); - for (var i = 0, element = input_tags[0]; i < input_tags.length ; element = input_tags[++i]) - { - if (element.type == 'text' || element.type == 'password') - { + for (var i = 0, element = input_tags[0]; i < input_tags.length ; element = input_tags[++i]) { + if (element.type === 'text' || element.type === 'password') { // onkeydown is possible too element.onkeypress = function (evt) { submit_default_button((evt || window.event), this, 'default-submit-action'); }; } @@ -436,4 +393,4 @@ function apply_onkeypress_event() /** * Detect JQuery existance. We currently do not deliver it, but some styles do, so why not benefit from it. ;) */ -var jquery_present = typeof jQuery == 'function'; +var jquery_present = typeof jQuery === 'function'; diff --git a/phpBB/styles/prosilver/template/timezone.js b/phpBB/styles/prosilver/template/timezone.js index 5e81a0bfdf..e0d3da9ff7 100644 --- a/phpBB/styles/prosilver/template/timezone.js +++ b/phpBB/styles/prosilver/template/timezone.js @@ -1,5 +1,7 @@ (function($) { // Avoid conflicts with other libraries +"use strict"; + $('#tz_date').change(function() { phpbb.timezoneSwitchDate(false); }); @@ -13,7 +15,7 @@ $(document).ready( ); $(document).ready( - phpbb.timezonePreselectSelect($('#tz_select_date_suggest').attr('timezone-preselect') == 'true') + phpbb.timezonePreselectSelect($('#tz_select_date_suggest').attr('timezone-preselect') === 'true') ); })(jQuery); // Avoid conflicts with other libraries diff --git a/phpBB/styles/prosilver/template/ucp_main_subscribed.html b/phpBB/styles/prosilver/template/ucp_main_subscribed.html index 11957aa90d..d5097a2191 100644..100755 --- a/phpBB/styles/prosilver/template/ucp_main_subscribed.html +++ b/phpBB/styles/prosilver/template/ucp_main_subscribed.html @@ -34,8 +34,16 @@ <!-- END forumrow --> </ul> <!-- ELSEIF S_FORUM_NOTIFY --> + <ul class="topiclist"> + <li class="header"> + <dl class="icon"> + <dt>{L_WATCHED_FORUMS}</dt> + </dl> + </li> + </ul> <p><strong>{L_NO_WATCHED_FORUMS}</strong></p> <!-- ENDIF --> + <br /> <!-- IF .topicrow --> <ul class="topiclist"> @@ -83,14 +91,21 @@ <ul class="linklist"> <li class="rightside pagination"> <!-- IF TOTAL_TOPICS --> {TOTAL_TOPICS} • <!-- ENDIF --> - <!-- IF .pagination --> + <!-- IF .pagination --> <!-- INCLUDE pagination.html --> - <!-- ELSE --> + <!-- ELSE --> {PAGE_NUMBER} <!-- ENDIF --> </li> </ul> <!-- ELSEIF S_TOPIC_NOTIFY --> + <ul class="topiclist"> + <li class="header"> + <dl class="icon"> + <dt>{L_WATCHED_TOPICS}</dt> + </dl> + </li> + </ul> <p><strong>{L_NO_WATCHED_TOPICS}</strong></p> <!-- ENDIF --> diff --git a/phpBB/styles/subsilver2/template/editor.js b/phpBB/styles/subsilver2/template/editor.js index 151cf53ff1..93506b8d4a 100644 --- a/phpBB/styles/subsilver2/template/editor.js +++ b/phpBB/styles/subsilver2/template/editor.js @@ -11,18 +11,16 @@ 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); // 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 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) -{ +function helpline(help) { document.forms[form_name].helpbox.value = help_line[help]; } @@ -30,27 +28,22 @@ function helpline(help) * Fix a bug involving the TextRange object. From * http://www.frostjedi.com/terra/scripts/demo/caretBug.html */ -function initInsertions() -{ +function initInsertions() { var doc; - if (document.forms[form_name]) - { + if (document.forms[form_name]) { doc = document; - } - else - { + } else { doc = opener.document; } var textarea = doc.forms[form_name].elements[text_name]; - if (is_ie && typeof(baseHeight) != 'number') - { + + if (is_ie && typeof(baseHeight) !== 'number') { textarea.focus(); baseHeight = doc.selection.createRange().duplicate().boundingHeight; - if (!document.forms[form_name]) - { + if (!document.forms[form_name]) { document.body.focus(); } } @@ -59,14 +52,10 @@ function initInsertions() /** * bbstyle */ -function bbstyle(bbnumber) -{ - if (bbnumber != -1) - { +function bbstyle(bbnumber) { + if (bbnumber !== -1) { bbfontstyle(bbtags[bbnumber], bbtags[bbnumber+1]); - } - else - { + } else { insert_text('[*]'); document.forms[form_name].elements[text_name].focus(); } @@ -75,36 +64,32 @@ function bbstyle(bbnumber) /** * Apply bbcodes */ -function bbfontstyle(bbopen, bbclose) -{ +function bbfontstyle(bbopen, bbclose) { theSelection = false; - + var textarea = document.forms[form_name].elements[text_name]; textarea.focus(); - if ((clientVer >= 4) && is_ie && is_win) - { + if ((clientVer >= 4) && is_ie && is_win) { // Get text selection theSelection = document.selection.createRange().text; - if (theSelection) - { + 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)) - { + } 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; @@ -114,14 +99,12 @@ function bbfontstyle(bbopen, bbclose) // Center the cursor when we don't have a selection // Gecko and proper browsers - if (!isNaN(textarea.selectionStart)) - { + if (!isNaN(textarea.selectionStart)) { textarea.selectionStart = new_pos; textarea.selectionEnd = new_pos; - } + } // IE - else if (document.selection) - { + else if (document.selection) { var range = textarea.createTextRange(); range.move("character", new_pos); range.select(); @@ -135,62 +118,49 @@ function bbfontstyle(bbopen, bbclose) /** * Insert text at position */ -function insert_text(text, spaces, popup) -{ +function insert_text(text, spaces, popup) { var textarea; - - if (!popup) - { + + if (!popup) { textarea = document.forms[form_name].elements[text_name]; - } - else - { + } else { textarea = opener.document.forms[form_name].elements[text_name]; } - if (spaces) - { + + 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) - { + 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) - { + } 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 - { + 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(); - } + if (!popup) { + textarea.focus(); + } } /** * Add inline attachment at position */ -function attach_inline(index, filename) -{ +function attach_inline(index, filename) { insert_text('[attachment=' + index + ']' + filename + '[/attachment]'); document.forms[form_name].elements[text_name].focus(); } @@ -198,79 +168,57 @@ function attach_inline(index, filename) /** * Add quote text to message */ -function addquote(post_id, username, l_wrote) -{ +function addquote(post_id, username, l_wrote) { var message_name = 'message_' + post_id; var theSelection = ''; var divarea = false; + var i; - if (l_wrote === undefined) - { + if (l_wrote === undefined) { // Backwards compatibility l_wrote = 'wrote'; } - if (document.all) - { + if (document.all) { divarea = document.all[message_name]; - } - else - { + } 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) - { + if (window.getSelection && !is_ie && !window.opera) { theSelection = window.getSelection().toString(); - } - else if (document.getSelection && !is_ie) - { + } else if (document.getSelection && !is_ie) { theSelection = document.getSelection(); - } - else if (document.selection) - { + } else if (document.selection) { theSelection = document.selection.createRange().text; } - if (theSelection == '' || typeof theSelection == 'undefined' || theSelection == null) - { - if (divarea.innerHTML) - { + 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(/<\;/ig, '<'); theSelection = theSelection.replace(/>\;/ig, '>'); theSelection = theSelection.replace(/&\;/ig, '&'); theSelection = theSelection.replace(/ \;/ig, ' '); - } - else if (document.all) - { + } else if (document.all) { theSelection = divarea.innerText; - } - else if (divarea.textContent) - { + } else if (divarea.textContent) { theSelection = divarea.textContent; - } - else if (divarea.firstChild.nodeValue) - { + } else if (divarea.firstChild.nodeValue) { theSelection = divarea.firstChild.nodeValue; } } - if (theSelection) - { - if (bbcodeEnabled) - { + if (theSelection) { + if (bbcodeEnabled) { insert_text('[quote="' + username + '"]' + theSelection + '[/quote]'); - } - else - { + } else { insert_text(username + ' ' + l_wrote + ':' + '\n'); var lines = split_lines(theSelection); - for (i = 0; i < lines.length; i++) - { + for (i = 0; i < lines.length; i++) { insert_text('> ' + lines[i] + '\n'); } } @@ -279,39 +227,32 @@ function addquote(post_id, username, l_wrote) return; } - -function split_lines(text) -{ +function split_lines(text) { var lines = text.split('\n'); var splitLines = new Array(); var j = 0; - for(i = 0; i < lines.length; i++) - { - if (lines[i].length <= 80) - { + var i; + + for(i = 0; i < lines.length; i++) { + if (lines[i].length <= 80) { splitLines[j] = lines[i]; j++; - } - else - { + } else { var line = lines[i]; - do - { - var splitAt = line.indexOf(' ', 80); - - if (splitAt == -1) - { + var splitAt; + do { + splitAt = line.indexOf(' ', 80); + + if (splitAt === -1) { splitLines[j] = line; j++; - } - else - { + } else { splitLines[j] = line.substring(0, splitAt); line = line.substring(splitAt); j++; } } - while(splitAt != -1); + while(splitAt !== -1); } } return splitLines; @@ -320,15 +261,13 @@ function split_lines(text) /** * From http://www.massless.org/mozedit/ */ -function mozWrap(txtarea, open, close) -{ - var selLength = (typeof(txtarea.textLength) == 'undefined') ? txtarea.value.length : txtarea.textLength; +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) - { + if (selEnd === 1 || selEnd === 2) { selEnd = selLength; } @@ -349,10 +288,8 @@ function mozWrap(txtarea, open, close) * Insert at Caret position. Code from * http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130 */ -function storeCaret(textEl) -{ - if (textEl.createTextRange) - { +function storeCaret(textEl) { + if (textEl.createTextRange) { textEl.caretPos = document.selection.createRange().duplicate(); } } @@ -360,8 +297,7 @@ function storeCaret(textEl) /** * Color pallette */ -function colorPalette(dir, width, height) -{ +function colorPalette(dir, width, height) { var r = 0, g = 0, b = 0; var numberList = new Array(6); var color = ''; @@ -374,85 +310,71 @@ function colorPalette(dir, width, height) document.writeln('<table cellspacing="1" cellpadding="0" border="0">'); - for (r = 0; r < 5; r++) - { - if (dir == 'h') - { + for (r = 0; r < 5; r++) { + if (dir === 'h') { document.writeln('<tr>'); } - for (g = 0; g < 5; g++) - { - if (dir == 'v') - { + for (g = 0; g < 5; g++) { + if (dir === 'v') { document.writeln('<tr>'); } - - for (b = 0; b < 5; b++) - { + + 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') - { + if (dir === 'v') { document.writeln('</tr>'); } } - if (dir == 'h') - { + if (dir === 'h') { document.writeln('</tr>'); } } document.writeln('</table>'); } - /** * Caret Position object */ -function caretPosition() -{ +function caretPosition() { var start = null; var end = null; } - /** * Get the caret position in an textarea */ -function getCaretPosition(txtarea) -{ +function getCaretPosition(txtarea) { var caretPos = new caretPosition(); - + // simple Gecko/Opera way - if(txtarea.selectionStart || txtarea.selectionStart == 0) - { + if (txtarea.selectionStart || txtarea.selectionStart === 0) { caretPos.start = txtarea.selectionStart; caretPos.end = txtarea.selectionEnd; } // dirty and slow IE way - else if(document.selection) - { + 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++) - { + 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; diff --git a/phpBB/styles/subsilver2/template/mcp_jumpbox.html b/phpBB/styles/subsilver2/template/mcp_jumpbox.html deleted file mode 100644 index e6ef4ecdad..0000000000 --- a/phpBB/styles/subsilver2/template/mcp_jumpbox.html +++ /dev/null @@ -1,19 +0,0 @@ -<!-- Note: no longer in use... --> - -<form name="jumpbox" method="get" action="{S_JUMPBOX_ACTION}"> - - {HIDDEN_FIELDS_FOR_JUMPBOX} - <span class="gensmall">{L_JUMP_TO}{L_COLON}</span> <select name="f" onChange="if(this.options[this.selectedIndex].value != -1 && this.options[this.selectedIndex].value != document.jumpbox.current_f.value){ document.forms['jumpbox'].submit() }"> - -<!-- IF S_ENABLE_SELECT_ALL --> - <option value="0">{L_ALL_FORUMS}</option> -<!-- ELSE --> - <option value="-1">{L_SELECT_FORUM}</option> -<!-- ENDIF --> - -<!-- BEGIN options --> - <option value="{options.VALUE}"<!-- IF options.VALUE eq -1 --> class="disabled-option"<!-- ENDIF -->{options.SELECTED}/>{options.TEXT}</option> -<!-- BEGINELSE --> -<!-- END options --> -</select> <input type="hidden" name="current_f" value="{S_CURRENT_FORUM}" /><input name="jumpbox" class="btnlite" type="submit" value="{L_GO}" onclick="if(document.jumpbox.f.value == -1){return false;}" /> -</form> diff --git a/phpBB/styles/subsilver2/template/timezone.js b/phpBB/styles/subsilver2/template/timezone.js index 5e81a0bfdf..c5829c0bb1 100644 --- a/phpBB/styles/subsilver2/template/timezone.js +++ b/phpBB/styles/subsilver2/template/timezone.js @@ -1,5 +1,7 @@ (function($) { // Avoid conflicts with other libraries +"use strict"; + $('#tz_date').change(function() { phpbb.timezoneSwitchDate(false); }); diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 1017e0c72f..a38740c82d 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -16,11 +16,11 @@ $table_prefix = 'phpbb_'; require_once $phpbb_root_path . 'includes/constants.php'; require_once $phpbb_root_path . 'includes/class_loader.' . $phpEx; -$phpbb_class_loader_mock = new phpbb_class_loader('phpbb_mock_', $phpbb_root_path . '../tests/mock/', ".php"); +$phpbb_class_loader_mock = new phpbb_class_loader('phpbb_mock_', $phpbb_root_path . '../tests/mock/', "php"); $phpbb_class_loader_mock->register(); -$phpbb_class_loader_ext = new phpbb_class_loader('phpbb_ext_', $phpbb_root_path . 'ext/', ".php"); +$phpbb_class_loader_ext = new phpbb_class_loader('phpbb_ext_', $phpbb_root_path . 'ext/', "php"); $phpbb_class_loader_ext->register(); -$phpbb_class_loader = new phpbb_class_loader('phpbb_', $phpbb_root_path . 'includes/', ".php"); +$phpbb_class_loader = new phpbb_class_loader('phpbb_', $phpbb_root_path . 'includes/', "php"); $phpbb_class_loader->register(); require_once 'test_framework/phpbb_test_case_helpers.php'; diff --git a/tests/class_loader/class_loader_test.php b/tests/class_loader/class_loader_test.php index 76af4dde37..bf27c7c217 100644 --- a/tests/class_loader/class_loader_test.php +++ b/tests/class_loader/class_loader_test.php @@ -71,8 +71,8 @@ class phpbb_class_loader_test extends PHPUnit_Framework_TestCase $cache = new phpbb_mock_cache($cache_map); $prefix = dirname(__FILE__) . '/'; - $class_loader = new phpbb_class_loader('phpbb_', $prefix . 'includes/', '.php', $cache); - $class_loader_ext = new phpbb_class_loader('phpbb_ext_', $prefix . 'includes/', '.php', $cache); + $class_loader = new phpbb_class_loader('phpbb_', $prefix . 'includes/', 'php', $cache); + $class_loader_ext = new phpbb_class_loader('phpbb_ext_', $prefix . 'includes/', 'php', $cache); $prefix .= 'includes/'; diff --git a/tests/controller/helper_url_test.php b/tests/controller/helper_url_test.php index 195f48d8a9..2c22700ca6 100644 --- a/tests/controller/helper_url_test.php +++ b/tests/controller/helper_url_test.php @@ -52,7 +52,7 @@ class phpbb_controller_helper_url_test extends phpbb_test_case $this->user = $this->getMock('phpbb_user'); $this->template = new phpbb_template($phpbb_root_path, $phpEx, $config, $this->user, $this->style_resource_locator, new phpbb_template_context()); - $helper = new phpbb_controller_helper($this->template, $this->user, '', '.php'); + $helper = new phpbb_controller_helper($this->template, $this->user, '', 'php'); $this->assertEquals($helper->url($route, $params, $is_amp, $session_id), $expected); } } diff --git a/tests/dbal/migrator_test.php b/tests/dbal/migrator_test.php index 89669b85ec..6390d6a715 100644 --- a/tests/dbal/migrator_test.php +++ b/tests/dbal/migrator_test.php @@ -60,9 +60,10 @@ class phpbb_dbal_migrator_test extends phpbb_database_test_case $this->db, $this->config, $this->migrator, + new phpbb_filesystem(), 'phpbb_ext', dirname(__FILE__) . '/../../phpBB/', - '.php', + 'php', null ); } @@ -144,15 +145,8 @@ class phpbb_dbal_migrator_test extends phpbb_database_test_case $this->migrator->update(); } - if ($migrator_test_if_true_failed) - { - $this->fail('True test failed'); - } - - if ($migrator_test_if_false_failed) - { - $this->fail('False test failed'); - } + $this->assertFalse($migrator_test_if_true_failed, 'True test failed'); + $this->assertFalse($migrator_test_if_false_failed, 'False test failed'); } public function test_recall() diff --git a/tests/extension/ext/bar/styles/prosilver/template/foobar_body.html b/tests/extension/ext/bar/styles/prosilver/template/foobar_body.html new file mode 100644 index 0000000000..00c2a84a18 --- /dev/null +++ b/tests/extension/ext/bar/styles/prosilver/template/foobar_body.html @@ -0,0 +1 @@ +bertie rules! diff --git a/tests/extension/finder_test.php b/tests/extension/finder_test.php index c96b11a73c..dc3e26be02 100644 --- a/tests/extension/finder_test.php +++ b/tests/extension/finder_test.php @@ -6,6 +6,7 @@ * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ +require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php'; class phpbb_extension_finder_test extends phpbb_test_case { @@ -66,7 +67,7 @@ class phpbb_extension_finder_test extends phpbb_test_case public function test_prefix_get_directories() { $dirs = $this->finder - ->prefix('t') + ->prefix('ty') ->get_directories(); sort($dirs); @@ -142,13 +143,28 @@ class phpbb_extension_finder_test extends phpbb_test_case ); } + public function test_uncleansub_directory_get_classes() + { + $classes = $this->finder + ->directory('/sub/../sub/type') + ->get_classes(); + + sort($classes); + $this->assertEquals( + array( + 'phpbb_ext_foo_sub_type_alternative', + ), + $classes + ); + } + /** * These do not work because of changes with PHPBB3-11386 * They do not seem neccessary to me, so I am commenting them out for now public function test_get_classes_create_cache() { $cache = new phpbb_mock_cache; - $finder = new phpbb_extension_finder($this->extension_manager, dirname(__FILE__) . '/', $cache, '.php', '_custom_cache_name'); + $finder = new phpbb_extension_finder($this->extension_manager, new phpbb_filesystem(), dirname(__FILE__) . '/', $cache, 'php', '_custom_cache_name'); $files = $finder->suffix('_class.php')->get_files(); $expected_files = array( @@ -188,6 +204,7 @@ class phpbb_extension_finder_test extends phpbb_test_case $finder = new phpbb_extension_finder( $this->extension_manager, + new phpbb_filesystem(), dirname(__FILE__) . '/', new phpbb_mock_cache(array( '_ext_finder' => array( diff --git a/tests/extension/manager_test.php b/tests/extension/manager_test.php index 1f311116f4..106f078691 100644 --- a/tests/extension/manager_test.php +++ b/tests/extension/manager_test.php @@ -112,9 +112,10 @@ class phpbb_extension_manager_test extends phpbb_database_test_case $db, $config, $migrator, + new phpbb_filesystem(), 'phpbb_ext', dirname(__FILE__) . '/', - '.' . $php_ext, + $php_ext, ($with_cache) ? new phpbb_mock_cache() : null ); } diff --git a/tests/extension/metadata_manager_test.php b/tests/extension/metadata_manager_test.php index 081a32e277..05d1cbccc3 100644 --- a/tests/extension/metadata_manager_test.php +++ b/tests/extension/metadata_manager_test.php @@ -36,7 +36,7 @@ class metadata_manager_test extends phpbb_database_test_case $this->db = $this->new_dbal(); $this->db_tools = new phpbb_db_tools($this->db); $this->phpbb_root_path = dirname(__FILE__) . '/'; - $this->phpEx = '.php'; + $this->phpEx = 'php'; $this->user = new phpbb_user(); $this->table_prefix = 'phpbb_'; @@ -64,6 +64,7 @@ class metadata_manager_test extends phpbb_database_test_case $this->db, $this->config, $this->migrator, + new phpbb_filesystem(), 'phpbb_ext', $this->phpbb_root_path, $this->phpEx, diff --git a/tests/extension/style_path_provider_test.php b/tests/extension/style_path_provider_test.php new file mode 100644 index 0000000000..e1021c20ac --- /dev/null +++ b/tests/extension/style_path_provider_test.php @@ -0,0 +1,50 @@ +<?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.php'; + +class phpbb_extension_style_path_provider_test extends phpbb_test_case +{ + protected $relative_root_path; + protected $root_path; + + public function setUp() + { + $this->relative_root_path = './'; + $this->root_path = dirname(__FILE__) . '/'; + } + + public function test_find() + { + $phpbb_style_path_provider = new phpbb_style_path_provider(); + $phpbb_style_path_provider->set_styles(array($this->relative_root_path . 'styles/prosilver')); + $phpbb_style_extension_path_provider = new phpbb_style_extension_path_provider(new phpbb_mock_extension_manager( + $this->root_path, + array( + 'foo' => array( + 'ext_name' => 'foo', + 'ext_active' => '1', + 'ext_path' => 'ext/foo/', + ), + 'bar' => array( + 'ext_name' => 'bar', + 'ext_active' => '1', + 'ext_path' => 'ext/bar/', + ), + )), $phpbb_style_path_provider, $this->relative_root_path); + + $this->assertEquals(array( + 'style' => array( + $this->relative_root_path . 'styles/prosilver', + ), + 'bar' => array( + $this->root_path . 'ext/bar/styles/prosilver', + ), + ), $phpbb_style_extension_path_provider->find()); + } +} diff --git a/tests/extension/subdir/style_path_provider_test.php b/tests/extension/subdir/style_path_provider_test.php new file mode 100644 index 0000000000..1b5ce62e5f --- /dev/null +++ b/tests/extension/subdir/style_path_provider_test.php @@ -0,0 +1,18 @@ +<?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__) . '/../style_path_provider_test.php'; + +class phpbb_extension_subdir_style_path_provider_test extends phpbb_extension_style_path_provider_test +{ + public function setUp() + { + $this->relative_root_path = '../'; + $this->root_path = dirname(__FILE__) . '/../'; + } +} diff --git a/tests/functions/clean_path_test.php b/tests/filesystem/clean_path_test.php index bcbe9838d9..50951fc88c 100644 --- a/tests/functions/clean_path_test.php +++ b/tests/filesystem/clean_path_test.php @@ -7,11 +7,17 @@ * */ -require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php'; - -class phpbb_clean_path_test extends phpbb_test_case +class phpbb_filesystem_clean_path_test extends phpbb_test_case { - public function clean_path_test_data() + protected $filesystem; + + public function setUp() + { + parent::setUp(); + $this->filesystem = new phpbb_filesystem(); + } + + public function clean_path_data() { return array( array('foo', 'foo'), @@ -33,12 +39,10 @@ class phpbb_clean_path_test extends phpbb_test_case } /** - * @dataProvider clean_path_test_data + * @dataProvider clean_path_data */ public function test_clean_path($input, $expected) { - $output = phpbb_clean_path($input); - - $this->assertEquals($expected, $output); + $this->assertEquals($expected, $this->filesystem->clean_path($input)); } } diff --git a/tests/extension/acp.php b/tests/functional/extension_acp_test.php index 790df77c0d..1879cbd62c 100644 --- a/tests/extension/acp.php +++ b/tests/functional/extension_acp_test.php @@ -7,7 +7,10 @@ * */ -class acp_test extends phpbb_functional_test_case +/** +* @group functional +*/ +class phpbb_functional_extension_acp_test extends phpbb_functional_test_case { static private $copied_files = array(); static private $helper; @@ -24,14 +27,19 @@ class acp_test extends phpbb_functional_test_case self::$helper = new phpbb_test_case_helpers(self); - // First, move any extensions setup on the board to a temp directory - self::$copied_files = self::$helper->copy_dir($phpbb_root_path . 'ext/', $phpbb_root_path . 'store/temp_ext/'); + self::$copied_files = array(); - // Then empty the ext/ directory on the board (for accurate test cases) - self::$helper->empty_dir($phpbb_root_path . 'ext/'); + if (file_exists($phpbb_root_path . 'ext/')) + { + // First, move any extensions setup on the board to a temp directory + self::$copied_files = self::$helper->copy_dir($phpbb_root_path . 'ext/', $phpbb_root_path . 'store/temp_ext/'); + + // Then empty the ext/ directory on the board (for accurate test cases) + self::$helper->empty_dir($phpbb_root_path . 'ext/'); + } // Copy our ext/ files from the test case to the board - self::$copied_files = array_merge(self::$copied_files, self::$helper->copy_dir(dirname(__FILE__) . '/ext/', $phpbb_root_path . 'ext/')); + self::$copied_files = array_merge(self::$copied_files, self::$helper->copy_dir(dirname(__FILE__) . '/../extension/ext/', $phpbb_root_path . 'ext/')); } public function setUp() @@ -84,13 +92,19 @@ class acp_test extends phpbb_functional_test_case { global $phpbb_root_path; - // Copy back the board installed extensions from the temp directory - self::$helper->copy_dir($phpbb_root_path . 'store/temp_ext/', $phpbb_root_path . 'ext/'); - - self::$copied_files[] = $phpbb_root_path . 'store/temp_ext/'; + if (file_exists($phpbb_root_path . 'store/temp_ext/')) + { + // Copy back the board installed extensions from the temp directory + self::$helper->copy_dir($phpbb_root_path . 'store/temp_ext/', $phpbb_root_path . 'ext/'); + } // Remove all of the files we copied around (from board ext -> temp_ext, from test ext -> board ext) self::$helper->remove_files(self::$copied_files); + + if (file_exists($phpbb_root_path . 'store/temp_ext/')) + { + self::$helper->empty_dir($phpbb_root_path . 'store/temp_ext/'); + } } public function test_list() diff --git a/tests/functional/memberlist_test.php b/tests/functional/memberlist_test.php index 879bee2f0e..92ede8bd04 100644 --- a/tests/functional/memberlist_test.php +++ b/tests/functional/memberlist_test.php @@ -40,4 +40,60 @@ class phpbb_functional_memberlist_test extends phpbb_functional_test_case $this->assert_response_success(); $this->assertContains('admin', $crawler->filter('h2')->text()); } + + protected function get_memberlist_leaders_table_crawler() + { + $crawler = $this->request('GET', 'memberlist.php?mode=leaders&sid=' . $this->sid); + $this->assert_response_success(); + + return $crawler->filter('.forumbg-table'); + } + + public function test_leaders() + { + $this->login(); + $this->create_user('memberlist-test-moderator'); + + $crawler = $this->get_memberlist_leaders_table_crawler(); + + // Admin in admin group, but not in moderators + $this->assertContains('admin', $crawler->eq(0)->text()); + $this->assertNotContains('admin', $crawler->eq(1)->text()); + + // memberlist-test-user in neither group + $this->assertNotContains('memberlist-test-user', $crawler->eq(0)->text()); + $this->assertNotContains('memberlist-test-user', $crawler->eq(1)->text()); + + // memberlist-test-moderator in neither group + $this->assertNotContains('memberlist-test-moderator', $crawler->eq(0)->text()); + $this->assertNotContains('memberlist-test-moderator', $crawler->eq(1)->text()); + } + + public function test_leaders_remove_users() + { + $this->login(); + + // Remove admin from admins, but is now in moderators + $this->remove_user_group('ADMINISTRATORS', array('admin')); + $crawler = $this->get_memberlist_leaders_table_crawler(); + $this->assertNotContains('admin', $crawler->eq(0)->text()); + $this->assertContains('admin', $crawler->eq(1)->text()); + + // Remove admin from moderators, should not be visible anymore + $this->remove_user_group('GLOBAL_MODERATORS', array('admin')); + $crawler = $this->get_memberlist_leaders_table_crawler(); + $this->assertNotContains('admin', $crawler->eq(0)->text()); + $this->assertNotContains('admin', $crawler->eq(1)->text()); + } + + public function test_leaders_add_users() + { + $this->login(); + + // Add memberlist-test-moderator to moderators + $this->add_user_group('GLOBAL_MODERATORS', array('memberlist-test-moderator')); + $crawler = $this->get_memberlist_leaders_table_crawler(); + $this->assertNotContains('memberlist-test-moderator', $crawler->eq(0)->text()); + $this->assertContains('memberlist-test-moderator', $crawler->eq(1)->text()); + } } diff --git a/tests/log/function_add_log_test.php b/tests/log/function_add_log_test.php index 864b364862..7aa42be6df 100644 --- a/tests/log/function_add_log_test.php +++ b/tests/log/function_add_log_test.php @@ -16,7 +16,7 @@ class phpbb_log_function_add_log_test extends phpbb_database_test_case return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/empty_log.xml'); } - public static function test_add_log_function_data() + public static function add_log_function_data() { return array( /** @@ -138,7 +138,7 @@ class phpbb_log_function_add_log_test extends phpbb_database_test_case } /** - * @dataProvider test_add_log_function_data + * @dataProvider add_log_function_data */ public function test_add_log_function($expected, $user_id, $mode, $required1, $additional1 = null, $additional2 = null, $additional3 = null) { diff --git a/tests/log/function_view_log_test.php b/tests/log/function_view_log_test.php index 2ecf77aeb8..1ab9488568 100644 --- a/tests/log/function_view_log_test.php +++ b/tests/log/function_view_log_test.php @@ -22,7 +22,7 @@ class phpbb_log_function_view_log_test extends phpbb_database_test_case return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/full_log.xml'); } - public static function test_view_log_function_data() + public static function view_log_function_data() { global $phpEx, $phpbb_dispatcher; $phpbb_dispatcher = new phpbb_mock_event_dispatcher(); @@ -296,7 +296,7 @@ class phpbb_log_function_view_log_test extends phpbb_database_test_case } /** - * @dataProvider test_view_log_function_data + * @dataProvider view_log_function_data */ public function test_view_log_function($expected, $expected_returned, $mode, $log_count, $limit = 5, $offset = 0, $forum_id = 0, $topic_id = 0, $user_id = 0, $limit_days = 0, $sort_by = 'l.log_id ASC', $keywords = '') { diff --git a/tests/mock/extension_manager.php b/tests/mock/extension_manager.php index fdda4cbadc..10b3595206 100644 --- a/tests/mock/extension_manager.php +++ b/tests/mock/extension_manager.php @@ -12,7 +12,8 @@ class phpbb_mock_extension_manager extends phpbb_extension_manager public function __construct($phpbb_root_path, $extensions = array()) { $this->phpbb_root_path = $phpbb_root_path; - $this->php_ext = '.php'; + $this->php_ext = 'php'; $this->extensions = $extensions; + $this->filesystem = new phpbb_filesystem(); } } diff --git a/tests/notification/submit_post_base.php b/tests/notification/submit_post_base.php index c5b2450e1c..953bedac80 100644 --- a/tests/notification/submit_post_base.php +++ b/tests/notification/submit_post_base.php @@ -92,12 +92,12 @@ class phpbb_notification_submit_post_base extends phpbb_database_test_case // Container $phpbb_container = new phpbb_mock_container_builder(); - $user_loader = new phpbb_user_loader($db, $phpbb_root_path, '.' . $phpEx, USERS_TABLE); + $user_loader = new phpbb_user_loader($db, $phpbb_root_path, $phpEx, USERS_TABLE); // Notification Manager $phpbb_notifications = new phpbb_notification_manager(array(), array(), $phpbb_container, $user_loader, $db, $user, - $phpbb_root_path, '.' . $phpEx, + $phpbb_root_path, $phpEx, NOTIFICATION_TYPES_TABLE, NOTIFICATIONS_TABLE, USER_NOTIFICATIONS_TABLE); $phpbb_container->set('notification_manager', $phpbb_notifications); @@ -108,7 +108,7 @@ class phpbb_notification_submit_post_base extends phpbb_database_test_case $class_name = 'phpbb_notification_type_' . $type; $phpbb_container->set('notification.type.' . $type, new $class_name( $user_loader, $db, $cache, $user, $auth, $config, - $phpbb_root_path, '.' . $phpEx, + $phpbb_root_path, $phpEx, NOTIFICATION_TYPES_TABLE, NOTIFICATIONS_TABLE, USER_NOTIFICATIONS_TABLE)); } } diff --git a/tests/security/redirect_test.php b/tests/security/redirect_test.php index 1325466137..8e36780ca4 100644 --- a/tests/security/redirect_test.php +++ b/tests/security/redirect_test.php @@ -18,11 +18,11 @@ class phpbb_security_redirect_test extends phpbb_security_test_base // array(Input -> redirect(), expected triggered error (else false), expected returned result url (else false)) return array( array('data://x', false, 'http://localhost/phpBB'), - array('bad://localhost/phpBB/index.php', 'Tried to redirect to potentially insecure url.', false), + array('bad://localhost/phpBB/index.php', 'INSECURE_REDIRECT', false), array('http://www.otherdomain.com/somescript.php', false, 'http://localhost/phpBB'), - array("http://localhost/phpBB/memberlist.php\n\rConnection: close", 'Tried to redirect to potentially insecure url.', false), + array("http://localhost/phpBB/memberlist.php\n\rConnection: close", 'INSECURE_REDIRECT', false), array('javascript:test', false, 'http://localhost/phpBB/../javascript:test'), - array('http://localhost/phpBB/index.php;url=', 'Tried to redirect to potentially insecure url.', false), + array('http://localhost/phpBB/index.php;url=', 'INSECURE_REDIRECT', false), ); } diff --git a/tests/test_framework/phpbb_functional_test_case.php b/tests/test_framework/phpbb_functional_test_case.php index a411d9c98a..5534de89c9 100644 --- a/tests/test_framework/phpbb_functional_test_case.php +++ b/tests/test_framework/phpbb_functional_test_case.php @@ -153,9 +153,10 @@ class phpbb_functional_test_case extends phpbb_test_case $db, $config, $migrator, + new phpbb_filesystem(), self::$config['table_prefix'] . 'ext', dirname(__FILE__) . '/', - '.' . $php_ext, + $php_ext, $this->get_cache_driver() ); @@ -316,6 +317,90 @@ class phpbb_functional_test_case extends phpbb_test_case return user_add($user_row); } + protected function remove_user_group($group_name, $usernames) + { + global $db, $cache, $auth, $config, $phpbb_dispatcher, $phpbb_log, $phpbb_container, $phpbb_root_path, $phpEx; + + $config = new phpbb_config(array()); + $config['coppa_enable'] = 0; + + $db = $this->get_db(); + $phpbb_dispatcher = new phpbb_mock_event_dispatcher(); + $user = $this->getMock('phpbb_user'); + $auth = $this->getMock('phpbb_auth'); + + $phpbb_log = new phpbb_log($db, $user, $auth, $phpbb_dispatcher, $phpbb_root_path, 'adm/', $phpEx, LOG_TABLE); + $cache = new phpbb_mock_null_cache; + + $cache_driver = new phpbb_cache_driver_null(); + $phpbb_container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface'); + $phpbb_container + ->expects($this->any()) + ->method('get') + ->with('cache.driver') + ->will($this->returnValue($cache_driver)); + + if (!function_exists('utf_clean_string')) + { + require_once(__DIR__ . '/../../phpBB/includes/utf/utf_tools.php'); + } + if (!function_exists('group_user_del')) + { + require_once(__DIR__ . '/../../phpBB/includes/functions_user.php'); + } + + $sql = 'SELECT group_id + FROM ' . GROUPS_TABLE . " + WHERE group_name = '" . $db->sql_escape($group_name) . "'"; + $result = $db->sql_query($sql); + $group_id = (int) $db->sql_fetchfield('group_id'); + $db->sql_freeresult($result); + + return group_user_del($group_id, false, $usernames, $group_name); + } + + protected function add_user_group($group_name, $usernames) + { + global $db, $cache, $auth, $config, $phpbb_dispatcher, $phpbb_log, $phpbb_container, $phpbb_root_path, $phpEx; + + $config = new phpbb_config(array()); + $config['coppa_enable'] = 0; + + $db = $this->get_db(); + $phpbb_dispatcher = new phpbb_mock_event_dispatcher(); + $user = $this->getMock('phpbb_user'); + $auth = $this->getMock('phpbb_auth'); + + $phpbb_log = new phpbb_log($db, $user, $auth, $phpbb_dispatcher, $phpbb_root_path, 'adm/', $phpEx, LOG_TABLE); + $cache = new phpbb_mock_null_cache; + + $cache_driver = new phpbb_cache_driver_null(); + $phpbb_container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface'); + $phpbb_container + ->expects($this->any()) + ->method('get') + ->with('cache.driver') + ->will($this->returnValue($cache_driver)); + + if (!function_exists('utf_clean_string')) + { + require_once(__DIR__ . '/../../phpBB/includes/utf/utf_tools.php'); + } + if (!function_exists('group_user_del')) + { + require_once(__DIR__ . '/../../phpBB/includes/functions_user.php'); + } + + $sql = 'SELECT group_id + FROM ' . GROUPS_TABLE . " + WHERE group_name = '" . $db->sql_escape($group_name) . "'"; + $result = $db->sql_query($sql); + $group_id = (int) $db->sql_fetchfield('group_id'); + $db->sql_freeresult($result); + + return group_user_add($group_id, false, $usernames, $group_name); + } + protected function login($username = 'admin') { $this->add_lang('ucp'); @@ -446,6 +531,9 @@ class phpbb_functional_test_case extends phpbb_test_case $this->assertEquals(200, $this->client->getResponse()->getStatus()); $content = $this->client->getResponse()->getContent(); $this->assertNotContains('Fatal error:', $content); + $this->assertNotContains('Notice:', $content); + $this->assertNotContains('Warning:', $content); + $this->assertNotContains('[phpBB Debug]', $content); } public function assert_filter($crawler, $expr, $msg = null) |
