From 421fc8d94db1b6a89518cbcc3f3141625eefff25 Mon Sep 17 00:00:00 2001
From: Callum Macrae
Date: Tue, 10 Apr 2012 11:25:06 +0100
Subject: [PATCH 001/704] [ticket/10776] Fixed errors in docs/README.html.
PHPBB3-10776
---
phpBB/docs/README.html | 77 +++++++++++++++++++++---------------------
1 file changed, 38 insertions(+), 39 deletions(-)
diff --git a/phpBB/docs/README.html b/phpBB/docs/README.html
index aa60d7dd25..d54b9d920f 100644
--- a/phpBB/docs/README.html
+++ b/phpBB/docs/README.html
@@ -41,7 +41,7 @@
- Thank you for downloading phpBB3. This README will guide through the basics of installation and operation of phpBB3. Please ensure you read this and the accompanying documentation fully before proceeding with the installation.
+ Thank you for downloading phpBB3. This README will guide you through the basics of installation and operation of phpBB3. Please ensure you read this and the accompanying documentation fully before proceeding with the installation.
Readme
@@ -62,12 +62,12 @@
Getting help with phpBB3
Documentation
- Community Forums
+ Community forums
Internet Relay Chat
Status of this version
- Reporting Bugs
+ Reporting bugs
Security related bugs
@@ -91,11 +91,11 @@
-
Installation, update and conversion instructions can be found in the INSTALL document contained in this distribution. If you are intending to convert from a previous phpBB 2.0.x installation we highly recommend you backup any existing data before proceeding!
+
Installation, update and conversion instructions can be found in the INSTALL document in this directory. If you are intending on converting from a phpBB 2.0.x installation we highly recommend that you backup any existing data before proceeding!
Users of phpBB3 Beta versions cannot directly update.
-
Please note that we won't support the following installation types:
+
Please note that we don't support the following installation types:
Updates from phpBB3 Beta versions to phpBB3 RC1 and higher
Conversions from phpBB 2.0.x to phpBB3 Beta versions
@@ -107,7 +107,7 @@
Updates from phpBB3 RC1 to the latest version
Conversions from phpBB 2.0.x to the latest version
- New installations of phpBB3 - always only the latest released version
+ New installations of phpBB3 - only the latest released version
@@ -134,33 +134,33 @@
http://www.phpbb.com/downloads/
- This is the official location for all supported language sets. If you download a package from a 3rd party site you do so with the understanding that we cannot offer support. So please, do not ask for help in these cases!
+ This is the official location for all supported language sets. If you download a package from a 3rd party site you do so with the understanding that we cannot offer support. Please do not ask for support if you download a language pack from a 3rd party site.
- Installation of these packages is straightforward, simply download the required language pack and unarchive it into the languages/ folder. Please ensure you retain the directory structure when doing this! Once uploaded go to the Admin->System->Language Packs
and install the now appeared new language pack. To install the style imageset you should download the imageset for your language and unarchive the file/s into the relevant imageset directory (styles/prosilver/imageset or styles/subsilver2/imageset), again you must retain the directory structure. Once installed the imageset will become immediately available.
+ Installation of these packages is straightforward; simply download the required language pack and unarchive it into the languages/ folder. Please ensure you retain the directory structure when doing this! Once uploaded go to the Admin->System->Language Packs
and install the new language pack, which will have been automatically detected. To install the style imageset you should download the imageset for your language and unarchive the file/s into the relevant imageset directory (styles/prosilver/imageset or styles/subsilver2/imageset). Again, you must retain the directory structure. Once installed the imageset will immediately become available.
If your language is not available please visit our forums where you will find a topic listing translations currently available or in preparation. This topic also gives you information should you wish to volunteer to translate a language not currently listed.
2.ii. Styles
- Although phpBB Group are rather proud of the included styles we realise that it may not be to everyones tastes. Therefore phpBB3 allows styles to be switched with relative ease. Firstly you need to locate and download a style you like. We maintain such a site at
+ Although phpBB Group are rather proud of the included styles we realise that it may not be to everyones tastes. Therefore phpBB3 allows other styles to be used with relative ease. First, you need to locate and download a style you like. We maintain such a site at
http://www.phpbb.com/styles/
- Please note that 3rd party styles downloaded for versions of phpBB2 will not work in phpBB3.
+ Please note that styles for phpBB2 will not work with phpBB3.
- Once you have downloaded a style the usual next step is to unarchive (or upload the unarchived contents of) the package into your styles/ directory. You then need to visit Administration -> Styles
, you should see the new style available, click install and it will become available for all your users.
+ Once you have downloaded a style, the next step is to unarchive (or upload the unarchived contents of) the package into your styles/ directory. You then need to visit Administration -> Styles
. You should see the new style, click install and it will become available for all your users.
- Please note that if you create your own style or modify existing ones, please remember to enable the "Recompile stale style components" setting within the Admin->General->Load Settings
screen. This setting allows the cache to detect changes made to the style and automatically refresh it. If this setting is disabled, you will not see your changes taking effect.
+ Please note that if you create your own style or modify existing ones, you should enable the "Recompile stale style components" setting within the Admin->General->Load Settings
screen. This setting allows the cache to detect changes made to the style and automatically refresh it. If this setting is disabled, you will not see your changes taking effect without manually refreshing the style components.
2.iii. Modifications
- Although not officially supported by phpBB Group, phpBB has a thriving modification scene. These third party modifications to the standard phpBB extend its capabilities still further and can be found at:
+ Although the modifications themselves are not officially supported by phpBB Group, phpBB has a thriving modification scene. These add features to phpBB, and can be found at:
http://www.phpbb.com/mods/
- Please remember that any bugs or other issues that occur after you have added any modification should NOT be reported to the bug tracker (see below). First remove the modification and see if the problem is resolved.
+ Please remember that any bugs or other issues that may occur as a result of installing a modification should NOT be reported to the bug tracker (see below). First remove the modification, and then see if that has fixed the problem.
- Also remember that any modifications which modify the database in any way may render upgrading your forum to future versions more difficult unless we state otherwise. With all this said many users have and continue to utilise many of the mods already available with great success.
+ Also remember that any modifications which modify the database in any way may make upgrading your forum to future versions more difficult. However, many users have and continue to utilise many of the mods already available with great success.
@@ -178,27 +178,27 @@
-
phpBB3 can seem a little daunting to new users in places, particularly with regard the permission system. The first thing you should do is check the FAQ which covers a few basic getting started questions. If you need additional help there are several places you should look.
+
phpBB3 can sometimes seem a little daunting to new users, particularly with regards to the permission system. The first thing you should do is check the FAQ , which covers a few basic getting started questions. If you need additional help there are several places you can find it.
3.i. phpBB3 Documentation
-
A comprehensive documentation is now available online and can be accessed from the following location:
+
Comprehensive documentation is now available on the phpBB website:
http://www.phpbb.com/support/documentation/3.0/
-
This covers everything from installation through setting permissions and managing users.
+
This covers everything from installation to setting permissions and managing users.
3.ii. Community Forums
-
phpBB Group maintains a thriving community where a number of people have generously decided to donate their time to help support users. This site can be found at:
+
phpBB Group maintains a thriving community where a number of people generously donate their time to help support users. This site can be found at:
-
http://www.phpbb.com/
+
http://www.phpbb.com/community/
-
If you do seek help via our forums please be sure to do a Search before posting. This may well save both you and us time and allow the developer, moderator and support groups to spend more time responding to people with unknown issues and problems. Please also remember that phpBB is an entirely volunteer effort, no one receives any compensation for the time they give, this includes moderators as well as developers. So please be respectful and mindful when awaiting responses.
+
If you do seek help via our forums please be sure to do a search before posting to make sure; if someone has experienced the issue before, then you may find that your question has already been answered. Please remember that phpBB is entirely staffed by volunteers, no one receives any compensation for the time they give, including moderators as well as developers; please be respectful and mindful when awaiting responses and receiving support.
3.iii Internet Relay Chat
-
Another place you may find help is our IRC channel. This operates on the Freenode IRC network, irc.freenode.net and the channel is #phpbb and can be accessed by any good IRC client such as mIRC, XChat, etc. Again, please do not abuse this service and be respectful of other users.
+
Another place you can find help is our IRC channel, which you can find on the Freenode IRC network, irc.freenode.net in #phpbb . It can be accessed by any IRC client such as mIRC, XChat, etc. Again, please do not abuse this service and be respectful of other users.
@@ -216,13 +216,13 @@
-
This is the third stable release of phpBB. The 3.0.x line is essentially feature frozen, with only point releases seeing fixes for bugs and security issues, though feature alterations and minor feature additions may be done if deemed absolutely required. Our next major release will be phpBB 3.2 and the planning phase has begun (the unstable development version is 3.1). Please do not post questions asking when 3.2 will be available, no release date has been set.
+
This is the third stable release of phpBB. The 3.0.x line is essentially feature frozen, with releases only containing fixes for bugs and security issues, though feature alterations and minor feature additions may be done if deemed absolutely required. Our next major release will be phpBB 3.1, which is currently under development. Please do not post questions asking when any future releases will be released; they will be released when they are finished.
-
For those interested in the development of phpBB should keep an eye on the community forums to see how things are progressing:
+
Those interested in the development of phpBB should keep an eye on the forums on the development site, Area51, to see how things are progressing and to help out if you wish:
http://area51.phpbb.com/phpBB/
-
Please note that this forum should NOT be used to obtain support for or ask questions about phpBB 2.0.x or phpBB 3.0.x, the main community forums are the place for this. Any such posts will be locked and go unanswered.
+
Please note that these forums should NOT be used to obtain support, as the main community forums are the place for this. Any such posts will be locked and go unanswered.
@@ -240,20 +240,19 @@
-
The phpBB Group uses a bug tracking system to store, list and manage all reported bugs, it can be found at the location listed below. Please DO NOT post bug reports to our forums, they will be locked. In addition please DO NOT use the bug tracker for support requests. Posting such a request will only see you directed to the support forums (while taking time away from working on real bugs).
+
The phpBB Group uses a bug tracking system to manage all reported bugs, which can be found at the location listed below. Please DO NOT post bug reports to our forums, they will be locked. In addition please DO NOT use the bug tracker for support requests. Posting such a request will only see you directed to the support forums (while taking time away from working on real bugs).
http://tracker.phpbb.com/
While we very much appreciate receiving bug reports (the more reports the more stable phpBB will be) we ask you carry out a few steps before adding new entries:
- Firstly determine if your bug is reproduceable, how to determine this depends on the bug in question. Only if the bug is reproduceable it is likely to be a problem with phpBB3 (or in some way connected). If something cannot be reproduced it may turn out to have been your hosting provider working on something, a user doing something silly, etc. Bug reports for non-reproduceable events can slow down our attempts to fix real, reproduceable issues
- Next please read or search through the existing bug reports to see if your bug (or one very similar to it) is already listed. If it is please add to that existing bug rather than creating a new duplicate entry (all this does is slow us down).
- Check the forums (use search!) to see if people have discussed anything that sounds similar to what you are seeing. However, as noted above please DO NOT post your particular bug to the forum unless it's non-reproduceable or you are sure it's related to something you have done rather phpBB3
- If no existing bug exists then please feel free to add it
+ First determine if your bug is reproducible. How to determine this depends on the bug in question. If the bug is reproduceable it is likely to be a problem with phpBB3 (or in some way connected). If it cannot, then it is most likely not a bug in phpBB.
+ Next please read or search through the existing bug reports to see whether we already know about the bug you found. If there is already a ticket, then please add to that existing bug rather than creating a new duplicate entry (all this does is slow us down).
+ If no existing bug exists then please add it
-
If you do post a new bug (i.e. one that isn't already listed in the bug tracker) firstly make sure you have logged in (your username and password are the same as for the community forums) then please include the following details:
+
If you do post a new bug, make sure you are logged in (your username and password are the same as for the community forums) then please include the following details in your bug report:
Your server type/version, e.g. Apache 1.3.28, IIS 4, Sambar, etc.
@@ -263,9 +262,9 @@
The relevant database type/version is listed within the administration control panel
- Please also be as detailed as you can in your report, if possible list the steps required to duplicate the problem. If you have a patch that fixes the issue, please attach it to the ticket or submit a pull request on GitHub .
+ Please be as detailed as you can in your report, and if possible, list the steps required to duplicate the problem. If you have a patch that fixes the issue, please attach it to the ticket or submit a pull request to our repository on GitHub .
- Once a bug has been submitted you will be emailed any follow up comments added to it. Please if you are requested to supply additional information, do so! It is frustrating for us to receive bug reports, ask for additional information but get nothing. In these cases we have a policy of closing the bug, which may leave a very real problem in place. Obviously we would rather not have this situation arise.
+ Once a bug has been submitted you will be emailed any follow up comments added to it. If you are requested to supply additional information, please do so! It is frustrating for us to receive bug reports, ask for additional information but get nothing. If we cannot replicate the bug we may close the ticket, which could leave the bug in phpBB. Obviously we would rather not have this situation arise.
5.i. Security related bugs
@@ -289,11 +288,11 @@
-
This list is not complete but does represent those bugs which may effect users on a wider scale. Other bugs listed in the tracker have typically been shown to be limited to certain setups or methods of installation, updating and/or conversions.
+
This list is by no means complete but does represent those bugs which may effect users on a wider scale. Other bugs listed in the tracker have typically been shown to be limited to certain setups or methods of installation, updating and/or conversions.
- Conversions may fail to complete on large boards under some hosts
- Updates may fail to complete on large update sets under some hosts
+ Conversions may fail to complete on large boards under some hosts.
+ Updates may fail to complete on large update sets under some hosts.
Smilies placed directly after bbcode tags will not get parsed. Smilies always need to be separated by spaces.
@@ -313,9 +312,9 @@
-
phpBB is no longer supported on PHP3 due to several compatibility issues and we recommend that you upgrade to the latest stable release of PHP5 to run phpBB. The minimum version required is PHP 4.3.3.
+
phpBB is no longer supported on PHP3 due to several compatibility issues and we recommend that you upgrade to the latest stable release of PHP5 to run phpBB. The minimum version required is PHP 4.3.3. The minimum version that will be required for phpBB 3.1 is PHP 5.3.2.
-
Please remember that running any application on a developmental version of PHP can lead to strange/unexpected results which may appear to be bugs in the application (which may not be true). Therefore we recommend you upgrade to the newest stable version of PHP before running phpBB3. If you are running a developmental version of PHP please check any bugs you find on a system running a stable release before submitting.
+
Please remember that running any application on a development (unstable, e.g. a beta release) version of PHP can lead to strange/unexpected results which may appear to be bugs in the application. Therefore, we recommend you upgrade to the newest stable version of PHP before running phpBB3. If you are running a development version of PHP please check any bugs you find on a system running a stable release before submitting.
This board has been developed and tested under Linux and Windows (amongst others) running Apache using MySQL 3.23, 4.x, 5.x, MSSQL Server 2000, PostgreSQL 7.x, Oracle 8, SQLite and Firebird. Versions of PHP used range from 4.3.3 to 6.0.0-dev without problem.
@@ -339,7 +338,7 @@
-
This application is opensource software released under the GNU General Public License v2 . Please see source code and the docs directory for more details. This package and its contents are Copyright (c) phpBB Group , All Rights Reserved.
+
This application is open source software released under the GNU General Public License v2 . Please see source code and the docs directory for more details. This package and its contents are Copyright © phpBB Group , All Rights Reserved.
From 8a2063090c382445835e64fb95ad3aebd777e146 Mon Sep 17 00:00:00 2001
From: Callum Macrae
Date: Thu, 12 Apr 2012 20:53:27 +0100
Subject: [PATCH 002/704] [ticket/10776] Fixed a couple language changes in
docs/README.html.
PHPBB3-10776
---
phpBB/docs/README.html | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/phpBB/docs/README.html b/phpBB/docs/README.html
index d54b9d920f..0b5709a7c7 100644
--- a/phpBB/docs/README.html
+++ b/phpBB/docs/README.html
@@ -136,7 +136,7 @@
This is the official location for all supported language sets. If you download a package from a 3rd party site you do so with the understanding that we cannot offer support. Please do not ask for support if you download a language pack from a 3rd party site.
- Installation of these packages is straightforward; simply download the required language pack and unarchive it into the languages/ folder. Please ensure you retain the directory structure when doing this! Once uploaded go to the Admin->System->Language Packs
and install the new language pack, which will have been automatically detected. To install the style imageset you should download the imageset for your language and unarchive the file/s into the relevant imageset directory (styles/prosilver/imageset or styles/subsilver2/imageset). Again, you must retain the directory structure. Once installed the imageset will immediately become available.
+ Installation of these packages is straightforward; simply download the required language pack and extract it into the languages/ folder. Please ensure you retain the directory structure when doing this! Once uploaded go to the Admin->System->Language Packs
and install the new language pack, which will have been automatically detected. To install the style imageset you should download the imageset for your language and extract the file/s into the relevant imageset directory (styles/prosilver/imageset or styles/subsilver2/imageset). Again, you must retain the directory structure. Once installed the imageset will immediately become available.
If your language is not available please visit our forums where you will find a topic listing translations currently available or in preparation. This topic also gives you information should you wish to volunteer to translate a language not currently listed.
@@ -148,7 +148,7 @@
Please note that styles for phpBB2 will not work with phpBB3.
- Once you have downloaded a style, the next step is to unarchive (or upload the unarchived contents of) the package into your styles/ directory. You then need to visit Administration -> Styles
. You should see the new style, click install and it will become available for all your users.
+ Once you have downloaded a style, the next step is to extract (or upload the extracted contents of) the package into your styles/ directory. You then need to visit Administration -> Styles
. You should see the new style, click install and it will become available for all your users.
Please note that if you create your own style or modify existing ones, you should enable the "Recompile stale style components" setting within the Admin->General->Load Settings
screen. This setting allows the cache to detect changes made to the style and automatically refresh it. If this setting is disabled, you will not see your changes taking effect without manually refreshing the style components.
@@ -194,7 +194,7 @@
http://www.phpbb.com/community/
- If you do seek help via our forums please be sure to do a search before posting to make sure; if someone has experienced the issue before, then you may find that your question has already been answered. Please remember that phpBB is entirely staffed by volunteers, no one receives any compensation for the time they give, including moderators as well as developers; please be respectful and mindful when awaiting responses and receiving support.
+ If you do seek help via our forums please be sure to do a search before posting; if someone has experienced the issue before, then you may find that your question has already been answered. Please remember that phpBB is entirely staffed by volunteers, no one receives any compensation for the time they give, including moderators as well as developers; please be respectful and mindful when awaiting responses and receiving support.
3.iii Internet Relay Chat
From 9c4f0d51df4424f410534686f00bf629d98d53e0 Mon Sep 17 00:00:00 2001
From: Marc Alexander
Date: Thu, 10 Jan 2013 10:59:20 +0100
Subject: [PATCH 003/704] [ticket/11314] Cleanup core.js coding
function errorHandler() was used in returnHandler() before it was defined.
The unused variable alert has been removed from errorHandler(). Overuse of
the var keyword for the variable sign has been removed and the if
statement has been simplified. The definition of the variable i has been
moved outside of the for loop definition. The var keyword shouldn't be
used inside the definition of the for loop.
PHPBB3-11314
---
phpBB/assets/javascript/core.js | 20 +++++++++-----------
1 file changed, 9 insertions(+), 11 deletions(-)
diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js
index 16ed04746d..9323f4a447 100644
--- a/phpBB/assets/javascript/core.js
+++ b/phpBB/assets/javascript/core.js
@@ -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');
@@ -440,12 +438,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,8 +463,9 @@ 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) {
From 0fc863c68a6832fe6589b14b2ca9107f7b570621 Mon Sep 17 00:00:00 2001
From: Marc Alexander
Date: Thu, 10 Jan 2013 11:06:05 +0100
Subject: [PATCH 004/704] [ticket/11314] Add missing semi-colons
Omitting the semi-colon is not legal behavior for JavaScript.
PHPBB3-11314
---
phpBB/adm/style/ajax.js | 4 ++--
1 file changed, 2 insertions(+), 2 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);
From f7af4eb2e98a70cce267d01828437e205527e47f Mon Sep 17 00:00:00 2001
From: Marc Alexander
Date: Thu, 10 Jan 2013 11:11:30 +0100
Subject: [PATCH 005/704] [ticket/11314] Use return variable instead of
overusing the return keyword
Use a return variable and modify it to our needs.
PHPBB3-11314
---
phpBB/styles/prosilver/template/ajax.js | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/phpBB/styles/prosilver/template/ajax.js b/phpBB/styles/prosilver/template/ajax.js
index 8583fb565c..771981b3e3 100644
--- a/phpBB/styles/prosilver/template/ajax.js
+++ b/phpBB/styles/prosilver/template/ajax.js
@@ -173,18 +173,19 @@ phpbb.ajaxify({
refresh: true,
filter: function (data) {
var action = $('#quick-mod-select').val();
+ var ret = false;
if (action === 'make_normal') {
- return $(this).find('select option[value="make_global"]').length > 0;
+ ret = $(this).find('select option[value="make_global"]').length > 0;
} else if (action === 'lock' || action === 'unlock') {
- return true;
+ ret = true;
}
if (action === 'delete_topic' || action === 'make_sticky' || action === 'make_announce' || action === 'make_global') {
- return true;
+ ret = true;
}
- return false;
+ return ret;
}
});
From c31f489cce8fd5d60eb484928221bef0666f3c06 Mon Sep 17 00:00:00 2001
From: Marc Alexander
Date: Thu, 10 Jan 2013 11:14:07 +0100
Subject: [PATCH 006/704] [ticket/11314] Add missing "use strict" to
timezone.js files
PHPBB3-11314
---
phpBB/adm/style/timezone.js | 2 ++
phpBB/styles/prosilver/template/timezone.js | 2 ++
phpBB/styles/subsilver2/template/timezone.js | 2 ++
3 files changed, 6 insertions(+)
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/styles/prosilver/template/timezone.js b/phpBB/styles/prosilver/template/timezone.js
index af8206d12d..b0e8a38366 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);
});
diff --git a/phpBB/styles/subsilver2/template/timezone.js b/phpBB/styles/subsilver2/template/timezone.js
index af8206d12d..b0e8a38366 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);
});
From 49edfa49ab9b475e02997f8a89050acc73bf30c8 Mon Sep 17 00:00:00 2001
From: Marc Alexander
Date: Sat, 12 Jan 2013 19:08:34 +0100
Subject: [PATCH 007/704] [ticket/11314] Fix whitespace issues
PHPBB3-11314
---
phpBB/assets/javascript/core.js | 12 ++++++------
phpBB/styles/subsilver2/template/editor.js | 5 ++---
2 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js
index 9323f4a447..f38b35d613 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),
diff --git a/phpBB/styles/subsilver2/template/editor.js b/phpBB/styles/subsilver2/template/editor.js
index 151cf53ff1..0b5b15643a 100644
--- a/phpBB/styles/subsilver2/template/editor.js
+++ b/phpBB/styles/subsilver2/template/editor.js
@@ -179,11 +179,10 @@ function insert_text(text, spaces, popup)
{
textarea.value = textarea.value + text;
}
- if (!popup)
+ if (!popup)
{
textarea.focus();
- }
-
+ }
}
/**
From 2f6b072bb13ce9d7c7784136bedec651b73ae11b Mon Sep 17 00:00:00 2001
From: Marc Alexander
Date: Sun, 13 Jan 2013 23:00:48 +0100
Subject: [PATCH 008/704] [ticket/11314] Add missing radix parameters
PHPBB3-11314
---
phpBB/adm/style/editor.js | 2 +-
phpBB/styles/prosilver/template/editor.js | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/phpBB/adm/style/editor.js b/phpBB/adm/style/editor.js
index c9e8afe08e..2b814a10c6 100644
--- a/phpBB/adm/style/editor.js
+++ b/phpBB/adm/style/editor.js
@@ -10,7 +10,7 @@ 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 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));
diff --git a/phpBB/styles/prosilver/template/editor.js b/phpBB/styles/prosilver/template/editor.js
index c16b0ef703..c099466005 100644
--- a/phpBB/styles/prosilver/template/editor.js
+++ b/phpBB/styles/prosilver/template/editor.js
@@ -11,7 +11,7 @@ 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));
From 8e3aa08845d170633db5fddbecd18e9493d050bc Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Fri, 8 Feb 2013 16:22:36 +0530
Subject: [PATCH 009/704] [ticket/11303] add S_TZ_PRESELECT template var
add a new template variable to check if timezone has already been selected
by the user while registeration.
PHPBB3-11303
---
phpBB/includes/ucp/ucp_register.php | 1 +
phpBB/styles/prosilver/template/timezone_option.html | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/phpBB/includes/ucp/ucp_register.php b/phpBB/includes/ucp/ucp_register.php
index c57aec00a0..9434667111 100644
--- a/phpBB/includes/ucp/ucp_register.php
+++ b/phpBB/includes/ucp/ucp_register.php
@@ -457,6 +457,7 @@ class ucp_register
'S_LANG_OPTIONS' => language_select($data['lang']),
'S_TZ_OPTIONS' => $timezone_selects['tz_select'],
'S_TZ_DATE_OPTIONS' => $timezone_selects['tz_dates'],
+ 'S_TZ_PRESELECT' => (!$submit),
'S_CONFIRM_REFRESH' => ($config['enable_confirm'] && $config['confirm_refresh']) ? true : false,
'S_REGISTRATION' => true,
'S_COPPA' => $coppa,
diff --git a/phpBB/styles/prosilver/template/timezone_option.html b/phpBB/styles/prosilver/template/timezone_option.html
index 320b9b7121..6f09f276ff 100644
--- a/phpBB/styles/prosilver/template/timezone_option.html
+++ b/phpBB/styles/prosilver/template/timezone_option.html
@@ -6,7 +6,7 @@
{L_SELECT_CURRENT_TIME}
{S_TZ_DATE_OPTIONS}
-
+
From 1994fadb6fcdfd780fb14b9b458d0810541c8a69 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Tue, 12 Feb 2013 11:25:54 +0530
Subject: [PATCH 010/704] [ticket/11303] use S_TZ_PRESELECT in subsilver
PHPBB3-11303
---
phpBB/styles/subsilver2/template/timezone_option.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/styles/subsilver2/template/timezone_option.html b/phpBB/styles/subsilver2/template/timezone_option.html
index 7fa310b1bc..71c5cf8a30 100644
--- a/phpBB/styles/subsilver2/template/timezone_option.html
+++ b/phpBB/styles/subsilver2/template/timezone_option.html
@@ -7,7 +7,7 @@
{L_SELECT_CURRENT_TIME}
{S_TZ_DATE_OPTIONS}
-
+
From 6b00a6bb7dab0b5645e0598165e1ef04532ba070 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Tue, 12 Feb 2013 21:09:26 +0530
Subject: [PATCH 011/704] [ticket/11303] remove additional brackets
PHPBB3-11303
---
phpBB/includes/ucp/ucp_register.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/includes/ucp/ucp_register.php b/phpBB/includes/ucp/ucp_register.php
index 9434667111..1de38fddb7 100644
--- a/phpBB/includes/ucp/ucp_register.php
+++ b/phpBB/includes/ucp/ucp_register.php
@@ -457,7 +457,7 @@ class ucp_register
'S_LANG_OPTIONS' => language_select($data['lang']),
'S_TZ_OPTIONS' => $timezone_selects['tz_select'],
'S_TZ_DATE_OPTIONS' => $timezone_selects['tz_dates'],
- 'S_TZ_PRESELECT' => (!$submit),
+ 'S_TZ_PRESELECT' => !$submit,
'S_CONFIRM_REFRESH' => ($config['enable_confirm'] && $config['confirm_refresh']) ? true : false,
'S_REGISTRATION' => true,
'S_COPPA' => $coppa,
From f60540d31f89bfd1ee8aabb2ce85fe3cd7dfe829 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Sun, 17 Feb 2013 12:53:14 +0530
Subject: [PATCH 012/704] [ticket/11303] rename attribute to timezone-preselect
PHPBB3-11303
---
phpBB/styles/prosilver/template/timezone.js | 2 +-
phpBB/styles/prosilver/template/timezone_option.html | 2 +-
phpBB/styles/subsilver2/template/timezone.js | 2 +-
phpBB/styles/subsilver2/template/timezone_option.html | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/phpBB/styles/prosilver/template/timezone.js b/phpBB/styles/prosilver/template/timezone.js
index af8206d12d..5e81a0bfdf 100644
--- a/phpBB/styles/prosilver/template/timezone.js
+++ b/phpBB/styles/prosilver/template/timezone.js
@@ -13,7 +13,7 @@ $(document).ready(
);
$(document).ready(
- phpbb.timezonePreselectSelect($('#tz_select_date_suggest').attr('data-is-registration') == 'true')
+ phpbb.timezonePreselectSelect($('#tz_select_date_suggest').attr('timezone-preselect') == 'true')
);
})(jQuery); // Avoid conflicts with other libraries
diff --git a/phpBB/styles/prosilver/template/timezone_option.html b/phpBB/styles/prosilver/template/timezone_option.html
index 6f09f276ff..a77e82f9a1 100644
--- a/phpBB/styles/prosilver/template/timezone_option.html
+++ b/phpBB/styles/prosilver/template/timezone_option.html
@@ -6,7 +6,7 @@
{L_SELECT_CURRENT_TIME}
{S_TZ_DATE_OPTIONS}
-
+
diff --git a/phpBB/styles/subsilver2/template/timezone.js b/phpBB/styles/subsilver2/template/timezone.js
index af8206d12d..5e81a0bfdf 100644
--- a/phpBB/styles/subsilver2/template/timezone.js
+++ b/phpBB/styles/subsilver2/template/timezone.js
@@ -13,7 +13,7 @@ $(document).ready(
);
$(document).ready(
- phpbb.timezonePreselectSelect($('#tz_select_date_suggest').attr('data-is-registration') == 'true')
+ phpbb.timezonePreselectSelect($('#tz_select_date_suggest').attr('timezone-preselect') == 'true')
);
})(jQuery); // Avoid conflicts with other libraries
diff --git a/phpBB/styles/subsilver2/template/timezone_option.html b/phpBB/styles/subsilver2/template/timezone_option.html
index 71c5cf8a30..26ba2388c9 100644
--- a/phpBB/styles/subsilver2/template/timezone_option.html
+++ b/phpBB/styles/subsilver2/template/timezone_option.html
@@ -7,7 +7,7 @@
{L_SELECT_CURRENT_TIME}
{S_TZ_DATE_OPTIONS}
-
+
From 01a2622dc6b9910b2f4a3d7c77e7b06b51584bc0 Mon Sep 17 00:00:00 2001
From: Marc Alexander
Date: Tue, 19 Feb 2013 15:49:49 +0100
Subject: [PATCH 013/704] [ticket/11323] Correctly treat variables in template
defines
Previously, any template variables that were used when defining a variable
were treated as strings. This is a regression to phpBB 3.0. With this
patch the template variables will be properly parsed.
PHPBB3-11323
---
phpBB/includes/template/filter.php | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/phpBB/includes/template/filter.php b/phpBB/includes/template/filter.php
index f73ad28ba1..93bacd9c1e 100644
--- a/phpBB/includes/template/filter.php
+++ b/phpBB/includes/template/filter.php
@@ -830,10 +830,11 @@ class phpbb_template_filter extends php_user_filter
*/
private function compile_tag_define($tag_args, $op)
{
+ $add_quote = true;
$match = array();
- preg_match('#^((?:' . self::REGEX_NS . '\.)+)?\$(?=[A-Z])([A-Z0-9_\-]*)(?: = (.*?))?$#', $tag_args, $match);
+ preg_match('#^((?:' . self::REGEX_NS . '\.)+)?\$(?=[A-Z])([A-Z0-9_\-]*)(?: = (\'?)([^\']*)(\'?))?$#', $tag_args, $match);
- if (empty($match[2]) || (!isset($match[3]) && $op))
+ if (empty($match[2]) || (!isset($match[4]) && $op))
{
return '';
}
@@ -843,7 +844,12 @@ class phpbb_template_filter extends php_user_filter
return 'unset(' . (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ');';
}
- $parsed_statement = implode(' ', $this->compile_expression($match[3]));
+ if ($match[3] && $match[5] && substr($match[4], 0, 1) == '{' && substr($match[4], -1, 1) == '}')
+ {
+ $match[4] = substr($match[4], 1, -1);
+ $add_quote = false;
+ }
+ $parsed_statement = ($add_quote) ? "'" . implode(' ', $this->compile_expression($match[4])) . "'" : implode(' ', $this->compile_expression($match[4]));
return (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ' = ' . $parsed_statement . ';';
}
From dd5963eabb17b29fc4abc98ea0cb95357fe253bb Mon Sep 17 00:00:00 2001
From: Marc Alexander
Date: Tue, 19 Feb 2013 15:59:15 +0100
Subject: [PATCH 014/704] [ticket/11323] Enable tests for inclusion of defined
variables
PHPBB3-11323
---
tests/template/template_test.php | 3 ---
1 file changed, 3 deletions(-)
diff --git a/tests/template/template_test.php b/tests/template/template_test.php
index f43157775a..56cc7a9de5 100644
--- a/tests/template/template_test.php
+++ b/tests/template/template_test.php
@@ -197,8 +197,6 @@ class phpbb_template_template_test extends phpbb_template_template_test_case
array('loop'),
'',
),
- /* Currently fail on develop:
- http://tracker.phpbb.com/browse/PHPBB3-11323
array(
'include_define_variable.html',
array('VARIABLE' => 'variable.html'),
@@ -213,7 +211,6 @@ class phpbb_template_template_test extends phpbb_template_template_test_case
array(),
'value',
),
- */
/* no top level nested loops
array(
'loop_vars.html',
From 1ebb17c698ce17147abec0af5048ac522014cf45 Mon Sep 17 00:00:00 2001
From: Marc Alexander
Date: Tue, 26 Feb 2013 21:43:39 +0100
Subject: [PATCH 015/704] [ticket/11323] Reduce additional code and revert
regex to previous one
PHPBB3-11323
---
phpBB/includes/template/filter.php | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/phpBB/includes/template/filter.php b/phpBB/includes/template/filter.php
index 93bacd9c1e..9e8ad2fef0 100644
--- a/phpBB/includes/template/filter.php
+++ b/phpBB/includes/template/filter.php
@@ -830,11 +830,10 @@ class phpbb_template_filter extends php_user_filter
*/
private function compile_tag_define($tag_args, $op)
{
- $add_quote = true;
$match = array();
- preg_match('#^((?:' . self::REGEX_NS . '\.)+)?\$(?=[A-Z])([A-Z0-9_\-]*)(?: = (\'?)([^\']*)(\'?))?$#', $tag_args, $match);
+ preg_match('#^((?:' . self::REGEX_NS . '\.)+)?\$(?=[A-Z])([A-Z0-9_\-]*)(?: = (.*?))?$#', $tag_args, $match);
- if (empty($match[2]) || (!isset($match[4]) && $op))
+ if (empty($match[2]) || (!isset($match[3]) && $op))
{
return '';
}
@@ -844,12 +843,18 @@ class phpbb_template_filter extends php_user_filter
return 'unset(' . (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ');';
}
- if ($match[3] && $match[5] && substr($match[4], 0, 1) == '{' && substr($match[4], -1, 1) == '}')
+ /*
+ * Define tags that contain template variables (enclosed in curly brackets)
+ * need to be treated differently.
+ */
+ if (substr($match[3], 1, 1) == '{' && substr($match[3], -2, 1) == '}')
{
- $match[4] = substr($match[4], 1, -1);
- $add_quote = false;
+ $parsed_statement = implode(' ', $this->compile_expression(substr($match[3], 2, -2)));
+ }
+ else
+ {
+ $parsed_statement = implode(' ', $this->compile_expression($match[3]));
}
- $parsed_statement = ($add_quote) ? "'" . implode(' ', $this->compile_expression($match[4])) . "'" : implode(' ', $this->compile_expression($match[4]));
return (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ' = ' . $parsed_statement . ';';
}
From 49de9e3d444ab71a2ad1e5ac1db6d92e3cb80466 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Sat, 2 Mar 2013 15:03:13 -0600
Subject: [PATCH 016/704] [ticket/11387] Log module added only after it has
been added
PHPBB3-11387
---
phpBB/includes/db/migration/tool/module.php | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/phpBB/includes/db/migration/tool/module.php b/phpBB/includes/db/migration/tool/module.php
index 6ffb073543..3ba82d8a0f 100644
--- a/phpBB/includes/db/migration/tool/module.php
+++ b/phpBB/includes/db/migration/tool/module.php
@@ -209,9 +209,6 @@ class phpbb_db_migration_tool_module implements phpbb_db_migration_tool_interfac
}
// The "manual" way
- $module_log_name = ((isset($this->user->lang[$data['module_langname']])) ? $this->user->lang[$data['module_langname']] : $data['module_langname']);
- add_log('admin', 'LOG_MODULE_ADD', $module_log_name);
-
if (!is_numeric($parent))
{
$sql = 'SELECT module_id
@@ -267,6 +264,8 @@ class phpbb_db_migration_tool_module implements phpbb_db_migration_tool_interfac
else
{
// Success
+ $module_log_name = ((isset($this->user->lang[$data['module_langname']])) ? $this->user->lang[$data['module_langname']] : $data['module_langname']);
+ add_log('admin', 'LOG_MODULE_ADD', $module_log_name);
// Move the module if requested above/below an existing one
if (isset($data['before']) && $data['before'])
From eb61edf4d1b5fd82e225ed1ac50f6310f72953f8 Mon Sep 17 00:00:00 2001
From: OpenShift guest
Date: Sun, 3 Mar 2013 01:44:21 -0500
Subject: [PATCH 017/704] [ticket/11383] Correctly revert modules added/removed
by migrator
PHPBB3-11383
---
phpBB/includes/db/migrator.php | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/phpBB/includes/db/migrator.php b/phpBB/includes/db/migrator.php
index de9c06948c..5e1266cc4a 100644
--- a/phpBB/includes/db/migrator.php
+++ b/phpBB/includes/db/migrator.php
@@ -462,6 +462,12 @@ class phpbb_db_migrator
{
$state = ($state) ? unserialize($state) : false;
+ // reverse order of steps if reverting
+ if ($revert === true)
+ {
+ $steps = array_reverse($steps);
+ }
+
foreach ($steps as $step_identifier => $step)
{
$last_result = false;
From 5963905825ed65a522fe94e380c6c179a461e437 Mon Sep 17 00:00:00 2001
From: Marc Alexander
Date: Wed, 6 Mar 2013 11:32:23 +0100
Subject: [PATCH 018/704] [ticket/11404] Return empty array of avatar data if
$row is empty
While creating a group in the acp, the group data ($group_row) is empty.
Due to that array_combine in phpbb_avatar_manager::clean_row() will cause
PHP Warnings. In addition to that the required indexes 'avatar',
'avatar_width', 'avatar_height', and 'avatar_type' won't be defined. This
patch will solve that issue.
PHPBB3-11404
---
phpBB/includes/avatar/manager.php | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/phpBB/includes/avatar/manager.php b/phpBB/includes/avatar/manager.php
index 9c60436de8..f126d69300 100644
--- a/phpBB/includes/avatar/manager.php
+++ b/phpBB/includes/avatar/manager.php
@@ -177,6 +177,17 @@ class phpbb_avatar_manager
$keys = array_keys($row);
$values = array_values($row);
+ // Upon creation of a user/group $row might be empty
+ if (empty($keys))
+ {
+ return array(
+ 'avatar' => '',
+ 'avatar_type' => '',
+ 'avatar_width' => '',
+ 'avatar_height' => '',
+ );
+ }
+
$keys = array_map(array('phpbb_avatar_manager', 'strip_prefix'), $keys);
return array_combine($keys, $values);
From 300a42f5b840384eef87abfd1b415102b3367f16 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 7 Mar 2013 11:14:01 +0100
Subject: [PATCH 019/704] [ticket/11421] Correctly display submit button when
needed
PHPBB3-11421
---
phpBB/styles/prosilver/template/ucp_notifications.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/styles/prosilver/template/ucp_notifications.html b/phpBB/styles/prosilver/template/ucp_notifications.html
index a2d558d0ca..b06d6bb759 100644
--- a/phpBB/styles/prosilver/template/ucp_notifications.html
+++ b/phpBB/styles/prosilver/template/ucp_notifications.html
@@ -118,7 +118,7 @@
-
+
{S_HIDDEN_FIELDS}
From 2caf7fbf121d969948a4384517f17986306db6ad Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 7 Mar 2013 11:30:02 +0100
Subject: [PATCH 020/704] [ticket/11417] FIx submit button description on
notifications options page
PHPBB3-11417
---
phpBB/styles/prosilver/template/ucp_notifications.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/styles/prosilver/template/ucp_notifications.html b/phpBB/styles/prosilver/template/ucp_notifications.html
index a2d558d0ca..e59e674ba2 100644
--- a/phpBB/styles/prosilver/template/ucp_notifications.html
+++ b/phpBB/styles/prosilver/template/ucp_notifications.html
@@ -122,7 +122,7 @@
{S_HIDDEN_FIELDS}
-
+
{S_FORM_TOKEN}
From 899d85792914c6095996fa47b389b1b945501757 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 7 Mar 2013 11:39:33 +0100
Subject: [PATCH 021/704] [ticket/11390] Hide pagination when there are no
notifications
PHPBB3-11390
---
.../styles/prosilver/template/ucp_notifications.html | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/phpBB/styles/prosilver/template/ucp_notifications.html b/phpBB/styles/prosilver/template/ucp_notifications.html
index a2d558d0ca..e407e47fea 100644
--- a/phpBB/styles/prosilver/template/ucp_notifications.html
+++ b/phpBB/styles/prosilver/template/ucp_notifications.html
@@ -48,6 +48,7 @@
+
+
+
{L_NO_NOTIFICATIONS}
+
+
From 7ac945358ed5aefa947f29b359210a076c181a0a Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 7 Mar 2013 11:39:55 +0100
Subject: [PATCH 022/704] [ticket/11390] Correctly separate list of
notifications from header
PHPBB3-11390
---
phpBB/styles/prosilver/template/ucp_notifications.html | 2 ++
1 file changed, 2 insertions(+)
diff --git a/phpBB/styles/prosilver/template/ucp_notifications.html b/phpBB/styles/prosilver/template/ucp_notifications.html
index e407e47fea..ac36809985 100644
--- a/phpBB/styles/prosilver/template/ucp_notifications.html
+++ b/phpBB/styles/prosilver/template/ucp_notifications.html
@@ -71,6 +71,8 @@
{L_MARK_READ}
+
+
From d219eafa16449bba1adb286fa01f7c0355745905 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 7 Mar 2013 12:18:53 +0100
Subject: [PATCH 023/704] [ticket/11407] Fix description of
"notification" option.
PHPBB3-11407
---
phpBB/styles/prosilver/template/ucp_notifications.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/styles/prosilver/template/ucp_notifications.html b/phpBB/styles/prosilver/template/ucp_notifications.html
index a2d558d0ca..9004d235b4 100644
--- a/phpBB/styles/prosilver/template/ucp_notifications.html
+++ b/phpBB/styles/prosilver/template/ucp_notifications.html
@@ -41,7 +41,7 @@
checked="checked" /> {notification_methods.NAME}
- checked="checked" /> {notification_methods.NAME}
+ checked="checked" /> {L_NOTIFICATIONS}
From bb584627248cc95443ebda511fca51effea6d0af Mon Sep 17 00:00:00 2001
From: Marc Alexander
Date: Thu, 7 Mar 2013 13:03:27 +0100
Subject: [PATCH 024/704] [ticket/11404] Use a default data row if $row is
empty in clean_row()
A statically defined $default_row will be used inside the
phpbb_avatar_manager::clean_row() method if the $row passed to it is
empty.
PHPBB3-11404
---
phpBB/includes/avatar/manager.php | 28 +++++++++++++++++-----------
1 file changed, 17 insertions(+), 11 deletions(-)
diff --git a/phpBB/includes/avatar/manager.php b/phpBB/includes/avatar/manager.php
index f126d69300..58d994c3c0 100644
--- a/phpBB/includes/avatar/manager.php
+++ b/phpBB/includes/avatar/manager.php
@@ -45,6 +45,17 @@ class phpbb_avatar_manager
*/
protected $container;
+ /**
+ * Default avatar data row
+ * @var array
+ */
+ static protected $default_row = array(
+ 'avatar' => '',
+ 'avatar_type' => '',
+ 'avatar_width' => '',
+ 'avatar_height' => '',
+ );
+
/**
* Construct an avatar manager object
*
@@ -174,20 +185,15 @@ class phpbb_avatar_manager
*/
static public function clean_row($row)
{
+ // Upon creation of a user/group $row might be empty
+ if (empty($row))
+ {
+ return self::$default_row;
+ }
+
$keys = array_keys($row);
$values = array_values($row);
- // Upon creation of a user/group $row might be empty
- if (empty($keys))
- {
- return array(
- 'avatar' => '',
- 'avatar_type' => '',
- 'avatar_width' => '',
- 'avatar_height' => '',
- );
- }
-
$keys = array_map(array('phpbb_avatar_manager', 'strip_prefix'), $keys);
return array_combine($keys, $values);
From 36de18e174c1137904d2f318d4f5eb7db9e96ebc Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Sat, 9 Mar 2013 09:12:46 -0600
Subject: [PATCH 025/704] [ticket/11423] Send unformatted usernames to the
email template
PHPBB3-11423
---
phpBB/includes/notification/type/post.php | 2 +-
phpBB/includes/notification/type/topic.php | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/phpBB/includes/notification/type/post.php b/phpBB/includes/notification/type/post.php
index ddfa720e5e..d8ffdea81d 100644
--- a/phpBB/includes/notification/type/post.php
+++ b/phpBB/includes/notification/type/post.php
@@ -216,7 +216,7 @@ class phpbb_notification_type_post extends phpbb_notification_type_base
}
else
{
- $username = $this->user_loader->get_username($this->get_data('poster_id'), 'no_profile');
+ $username = $this->user_loader->get_username($this->get_data('poster_id'), 'username');
}
return array(
diff --git a/phpBB/includes/notification/type/topic.php b/phpBB/includes/notification/type/topic.php
index 2549b29409..22436d3fb1 100644
--- a/phpBB/includes/notification/type/topic.php
+++ b/phpBB/includes/notification/type/topic.php
@@ -178,7 +178,7 @@ class phpbb_notification_type_topic extends phpbb_notification_type_base
}
else
{
- $username = $this->user_loader->get_username($this->get_data('poster_id'), 'no_profile');
+ $username = $this->user_loader->get_username($this->get_data('poster_id'), 'username');
}
return array(
From 6704a82bbea45ab53a05c7490c87e46e1c57dd00 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Sat, 9 Mar 2013 09:21:31 -0600
Subject: [PATCH 026/704] [ticket/11422] Increment assets when database_update
is complete
PHPBB3-11422
---
phpBB/install/database_update.php | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php
index 2ecddf49d4..867235e607 100644
--- a/phpBB/install/database_update.php
+++ b/phpBB/install/database_update.php
@@ -41,10 +41,12 @@ if (!function_exists('phpbb_require_updated'))
}
}
-function phpbb_end_update($cache)
+function phpbb_end_update($cache, $config)
{
$cache->purge();
+ $config->increment('assets_version', 1);
+
?>
@@ -232,7 +234,7 @@ while (!$migrator->finished())
{
echo $e->getLocalisedMessage($user);
- phpbb_end_update($cache);
+ phpbb_end_update($cache, $config);
}
$state = array_merge(array(
@@ -265,7 +267,7 @@ while (!$migrator->finished())
echo $user->lang['DATABASE_UPDATE_NOT_COMPLETED'] . ' ';
echo '' . $user->lang['DATABASE_UPDATE_CONTINUE'] . ' ';
- phpbb_end_update($cache);
+ phpbb_end_update($cache, $config);
}
}
@@ -276,4 +278,4 @@ if ($orig_version != $config['version'])
echo $user->lang['DATABASE_UPDATE_COMPLETE'];
-phpbb_end_update($cache);
+phpbb_end_update($cache, $config);
From 2ec0dc5b34e88c737e0737e73a46e1edd1573f10 Mon Sep 17 00:00:00 2001
From: Marc Alexander
Date: Mon, 11 Mar 2013 10:32:08 +0100
Subject: [PATCH 027/704] [ticket/11404] Convert manager_test to UNIX line
endings
PHPBB3-11404
---
tests/avatar/manager_test.php | 180 +++++++++++++++++-----------------
1 file changed, 90 insertions(+), 90 deletions(-)
diff --git a/tests/avatar/manager_test.php b/tests/avatar/manager_test.php
index f01ea47c25..7ea3cc6a0f 100644
--- a/tests/avatar/manager_test.php
+++ b/tests/avatar/manager_test.php
@@ -1,90 +1,90 @@
-phpbb_container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface');
- $this->phpbb_container->expects($this->any())
- ->method('get')
- ->with('avatar.driver.foobar')->will($this->returnValue('avatar.driver.foobar'));
-
- // Prepare dependencies for avatar manager and driver
- $config = new phpbb_config(array());
- $request = $this->getMock('phpbb_request');
- $cache = $this->getMock('phpbb_cache_driver_interface');
-
- $this->avatar_foobar = $this->getMock('phpbb_avatar_driver_foobar', array('get_name'), array($config, $phpbb_root_path, $phpEx, $cache));
- $this->avatar_foobar->expects($this->any())
- ->method('get_name')
- ->will($this->returnValue('avatar.driver.foobar'));
- $this->avatar_barfoo = $this->getMock('phpbb_avatar_driver_barfoo', array('get_name'));
- $this->avatar_barfoo->expects($this->any())
- ->method('get_name')
- ->will($this->returnValue('avatar.driver.barfoo'));
-
- $avatar_drivers = array($this->avatar_foobar, $this->avatar_barfoo);
-
- $config['allow_avatar_' . get_class($this->avatar_foobar)] = true;
- $config['allow_avatar_' . get_class($this->avatar_barfoo)] = false;
-
- // Set up avatar manager
- $this->manager = new phpbb_avatar_manager($config, $avatar_drivers, $this->phpbb_container);
- }
-
- public function test_get_driver()
- {
- $driver = $this->manager->get_driver('avatar.driver.foobar', false);
- $this->assertEquals('avatar.driver.foobar', $driver);
-
- $driver = $this->manager->get_driver('avatar.driver.foo_wrong', false);
- $this->assertNull($driver);
-
- $driver = $this->manager->get_driver('avatar.driver.foobar');
- $this->assertEquals('avatar.driver.foobar', $driver);
-
- $driver = $this->manager->get_driver('avatar.driver.foo_wrong');
- $this->assertNull($driver);
- }
-
- public function test_get_all_drivers()
- {
- $drivers = $this->manager->get_all_drivers();
- $this->assertArrayHasKey('avatar.driver.foobar', $drivers);
- $this->assertArrayHasKey('avatar.driver.barfoo', $drivers);
- $this->assertEquals('avatar.driver.foobar', $drivers['avatar.driver.foobar']);
- $this->assertEquals('avatar.driver.barfoo', $drivers['avatar.driver.barfoo']);
- }
-
- public function test_get_enabled_drivers()
- {
- $drivers = $this->manager->get_enabled_drivers();
- $this->assertArrayHasKey('avatar.driver.foobar', $drivers);
- $this->assertArrayNotHasKey('avatar.driver.barfoo', $drivers);
- $this->assertEquals('avatar.driver.foobar', $drivers['avatar.driver.foobar']);
- }
-
- public function test_get_avatar_settings()
- {
- $avatar_settings = $this->manager->get_avatar_settings($this->avatar_foobar);
-
- $expected_settings = array(
- 'allow_avatar_' . get_class($this->avatar_foobar) => array('lang' => 'ALLOW_' . strtoupper(get_class($this->avatar_foobar)), 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
- );
-
- $this->assertEquals($expected_settings, $avatar_settings);
- }
-}
+phpbb_container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface');
+ $this->phpbb_container->expects($this->any())
+ ->method('get')
+ ->with('avatar.driver.foobar')->will($this->returnValue('avatar.driver.foobar'));
+
+ // Prepare dependencies for avatar manager and driver
+ $config = new phpbb_config(array());
+ $request = $this->getMock('phpbb_request');
+ $cache = $this->getMock('phpbb_cache_driver_interface');
+
+ $this->avatar_foobar = $this->getMock('phpbb_avatar_driver_foobar', array('get_name'), array($config, $phpbb_root_path, $phpEx, $cache));
+ $this->avatar_foobar->expects($this->any())
+ ->method('get_name')
+ ->will($this->returnValue('avatar.driver.foobar'));
+ $this->avatar_barfoo = $this->getMock('phpbb_avatar_driver_barfoo', array('get_name'));
+ $this->avatar_barfoo->expects($this->any())
+ ->method('get_name')
+ ->will($this->returnValue('avatar.driver.barfoo'));
+
+ $avatar_drivers = array($this->avatar_foobar, $this->avatar_barfoo);
+
+ $config['allow_avatar_' . get_class($this->avatar_foobar)] = true;
+ $config['allow_avatar_' . get_class($this->avatar_barfoo)] = false;
+
+ // Set up avatar manager
+ $this->manager = new phpbb_avatar_manager($config, $avatar_drivers, $this->phpbb_container);
+ }
+
+ public function test_get_driver()
+ {
+ $driver = $this->manager->get_driver('avatar.driver.foobar', false);
+ $this->assertEquals('avatar.driver.foobar', $driver);
+
+ $driver = $this->manager->get_driver('avatar.driver.foo_wrong', false);
+ $this->assertNull($driver);
+
+ $driver = $this->manager->get_driver('avatar.driver.foobar');
+ $this->assertEquals('avatar.driver.foobar', $driver);
+
+ $driver = $this->manager->get_driver('avatar.driver.foo_wrong');
+ $this->assertNull($driver);
+ }
+
+ public function test_get_all_drivers()
+ {
+ $drivers = $this->manager->get_all_drivers();
+ $this->assertArrayHasKey('avatar.driver.foobar', $drivers);
+ $this->assertArrayHasKey('avatar.driver.barfoo', $drivers);
+ $this->assertEquals('avatar.driver.foobar', $drivers['avatar.driver.foobar']);
+ $this->assertEquals('avatar.driver.barfoo', $drivers['avatar.driver.barfoo']);
+ }
+
+ public function test_get_enabled_drivers()
+ {
+ $drivers = $this->manager->get_enabled_drivers();
+ $this->assertArrayHasKey('avatar.driver.foobar', $drivers);
+ $this->assertArrayNotHasKey('avatar.driver.barfoo', $drivers);
+ $this->assertEquals('avatar.driver.foobar', $drivers['avatar.driver.foobar']);
+ }
+
+ public function test_get_avatar_settings()
+ {
+ $avatar_settings = $this->manager->get_avatar_settings($this->avatar_foobar);
+
+ $expected_settings = array(
+ 'allow_avatar_' . get_class($this->avatar_foobar) => array('lang' => 'ALLOW_' . strtoupper(get_class($this->avatar_foobar)), 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
+ );
+
+ $this->assertEquals($expected_settings, $avatar_settings);
+ }
+}
From fb1984dadb2ef4ec679f3a66e1a98e75bbe38dec Mon Sep 17 00:00:00 2001
From: Marc Alexander
Date: Mon, 11 Mar 2013 10:33:16 +0100
Subject: [PATCH 028/704] [ticket/11404] Add tests for
phpbb_avatar_manager::clean_row()
PHPBB3-11404
---
tests/avatar/manager_test.php | 71 +++++++++++++++++++++++++++++++++++
1 file changed, 71 insertions(+)
diff --git a/tests/avatar/manager_test.php b/tests/avatar/manager_test.php
index 7ea3cc6a0f..ffcfe2ce11 100644
--- a/tests/avatar/manager_test.php
+++ b/tests/avatar/manager_test.php
@@ -87,4 +87,75 @@ class phpbb_avatar_manager_test extends PHPUnit_Framework_TestCase
$this->assertEquals($expected_settings, $avatar_settings);
}
+
+ public function database_row_data()
+ {
+ return array(
+ array(
+ array(
+ 'user_avatar' => '',
+ 'user_avatar_type' => '',
+ 'user_avatar_width' => '',
+ 'user_avatar_height' => '',
+ ),
+ array(
+ 'avatar' => '',
+ 'avatar_type' => '',
+ 'avatar_width' => '',
+ 'avatar_height' => '',
+ ),
+ ),
+ array(
+ array(
+ 'group_avatar' => '',
+ 'group_avatar_type' => '',
+ 'group_avatar_width' => '',
+ 'group_avatar_height' => '',
+ ),
+ array(
+ 'avatar' => '',
+ 'avatar_type' => '',
+ 'avatar_width' => '',
+ 'avatar_height' => '',
+ ),
+ ),
+ array(
+ array(),
+ array(
+ 'avatar' => '',
+ 'avatar_type' => '',
+ 'avatar_width' => '',
+ 'avatar_height' => '',
+ ),
+ ),
+ array(
+ array(
+ 'foobar_avatar' => '',
+ 'foobar_avatar_type' => '',
+ 'foobar_avatar_width' => '',
+ 'foobar_avatar_height' => '',
+ ),
+ array(
+ 'foobar_avatar' => '',
+ 'foobar_avatar_type' => '',
+ 'foobar_avatar_width' => '',
+ 'foobar_avatar_height' => '',
+ ),
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider database_row_data
+ */
+ public function test_clean_row(array $input, array $output)
+ {
+ $cleaned_row = array();
+
+ $cleaned_row = phpbb_avatar_manager::clean_row($input);
+ foreach ($output as $key => $null)
+ {
+ $this->assertArrayHasKey($key, $cleaned_row);
+ }
+ }
}
From 4ad8fcbd58aeb72b659db6ebc18ff38b0725f006 Mon Sep 17 00:00:00 2001
From: Marc Alexander
Date: Mon, 11 Mar 2013 10:35:18 +0100
Subject: [PATCH 029/704] [ticket/11404] Remove version ID from
manager_test.php file header
PHPBB3-11404
---
tests/avatar/manager_test.php | 1 -
1 file changed, 1 deletion(-)
diff --git a/tests/avatar/manager_test.php b/tests/avatar/manager_test.php
index ffcfe2ce11..cb895b521a 100644
--- a/tests/avatar/manager_test.php
+++ b/tests/avatar/manager_test.php
@@ -2,7 +2,6 @@
/**
*
* @package testing
-* @version $Id$
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
From df98de971ca9e8362f1bbf5ce59967db16268531 Mon Sep 17 00:00:00 2001
From: erangamapa
Date: Tue, 12 Mar 2013 10:19:29 +0530
Subject: [PATCH 030/704] [ticket/11106] Undefined index EDITED_TIME_TOTAL
notice.
When viewing a private message, when message edit count is 1
Undefined index EDITED_TIME_TOTAL php notice appears. Changed
the message formatting method to what is used in viewtopic.php.
PHPBB3-11106
---
phpBB/includes/ucp/ucp_pm_viewmessage.php | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/phpBB/includes/ucp/ucp_pm_viewmessage.php b/phpBB/includes/ucp/ucp_pm_viewmessage.php
index c85b05f144..e2b61f1b02 100644
--- a/phpBB/includes/ucp/ucp_pm_viewmessage.php
+++ b/phpBB/includes/ucp/ucp_pm_viewmessage.php
@@ -94,8 +94,7 @@ function view_message($id, $mode, $folder_id, $msg_id, $folder, $message_row)
// Editing information
if ($message_row['message_edit_count'] && $config['display_last_edited'])
{
- $l_edit_time_total = ($message_row['message_edit_count'] == 1) ? $user->lang['EDITED_TIME_TOTAL'] : $user->lang['EDITED_TIMES_TOTAL'];
- $l_edited_by = ' ' . sprintf($l_edit_time_total, (!$message_row['message_edit_user']) ? $message_row['username'] : $message_row['message_edit_user'], $user->format_date($message_row['message_edit_time'], false, true), $message_row['message_edit_count']);
+ $l_edited_by = $user->lang('EDITED_TIMES_TOTAL', (int) $message_row['message_edit_count'], (!$message_row['message_edit_user']) ? $message_row['username'] : $message_row['message_edit_user'], $user->format_date($message_row['message_edit_time'], false, true));
}
else
{
From d378f5ac32c3ea9c4774c5f6e94725822dcd4998 Mon Sep 17 00:00:00 2001
From: Marc Alexander
Date: Tue, 12 Mar 2013 15:15:21 +0100
Subject: [PATCH 031/704] [ticket/11433] Rename CSS class "jalert" to
"phpbb_alert"
This missing change caused the loading info to appear during ajax
requests. With this patch it will be properly hidden as it should.
PHPBB3-11433
---
phpBB/styles/prosilver/template/overall_footer.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/styles/prosilver/template/overall_footer.html b/phpBB/styles/prosilver/template/overall_footer.html
index c6e964113d..bf5ce30f37 100644
--- a/phpBB/styles/prosilver/template/overall_footer.html
+++ b/phpBB/styles/prosilver/template/overall_footer.html
@@ -31,7 +31,7 @@
-
{L_LOADING} {L_PLEASE_WAIT}
+
{L_LOADING} {L_PLEASE_WAIT}
From 5eef287646725292c6fa263bf04c85bd987f644a Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 12 Mar 2013 17:10:32 +0100
Subject: [PATCH 032/704] [ticket/11310] Add hashes to action links to prevent
CSRF attacks
PHPBB3-11310
---
phpBB/includes/acp/acp_styles.php | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/phpBB/includes/acp/acp_styles.php b/phpBB/includes/acp/acp_styles.php
index 266495972b..094d84de40 100644
--- a/phpBB/includes/acp/acp_styles.php
+++ b/phpBB/includes/acp/acp_styles.php
@@ -68,13 +68,20 @@ class acp_styles
$action = $this->request->variable('action', '');
$post_actions = array('install', 'activate', 'deactivate', 'uninstall');
+
+ if ($action && in_array($action, $post_actions) && !check_link_hash($request->variable('hash', ''), $action))
+ {
+ trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
+ }
+
foreach ($post_actions as $key)
{
- if (isset($_POST[$key]))
+ if ($this->request->is_set_post($key))
{
$action = $key;
}
}
+
if ($action != '')
{
$this->s_hidden_fields['action'] = $action;
@@ -921,21 +928,23 @@ class acp_styles
'L_ACTION' => $this->user->lang['DETAILS']
);
- // Activate
+ // Activate/Deactive
+ $action_name = ($style['style_active'] ? 'de' : '') . 'activate';
+
$actions[] = array(
- 'U_ACTION' => $this->u_action . '&action=' . ($style['style_active'] ? 'de' : '') . 'activate&id=' . $style['style_id'],
+ 'U_ACTION' => $this->u_action . '&action=' . $action_name . '&hash=' . generate_link_hash($action_name) . '&id=' . $style['style_id'],
'L_ACTION' => $this->user->lang['STYLE_' . ($style['style_active'] ? 'DE' : '') . 'ACTIVATE']
);
/* // Export
$actions[] = array(
- 'U_ACTION' => $this->u_action . '&action=export&id=' . $style['style_id'],
+ 'U_ACTION' => $this->u_action . '&action=export&hash=' . generate_link_hash('export') . '&id=' . $style['style_id'],
'L_ACTION' => $this->user->lang['EXPORT']
); */
// Uninstall
$actions[] = array(
- 'U_ACTION' => $this->u_action . '&action=uninstall&id=' . $style['style_id'],
+ 'U_ACTION' => $this->u_action . '&action=uninstall&hash=' . generate_link_hash('uninstall') . '&id=' . $style['style_id'],
'L_ACTION' => $this->user->lang['STYLE_UNINSTALL']
);
@@ -957,7 +966,7 @@ class acp_styles
else
{
$actions[] = array(
- 'U_ACTION' => $this->u_action . '&action=install&dir=' . urlencode($style['style_path']),
+ 'U_ACTION' => $this->u_action . '&action=install&hash=' . generate_link_hash('install') . '&dir=' . urlencode($style['style_path']),
'L_ACTION' => $this->user->lang['INSTALL_STYLE']
);
}
From 567eefb2bd2bf280391786ea171dad0bdb0b442d Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 12 Mar 2013 22:35:31 +0100
Subject: [PATCH 033/704] [ticket/11362] Correctly sanitise the directory path
We need to correctly remove ../ form the path if possible by removing the
previous folder aswell. Otherwise the finder is unable to locate /adm/style
directories in extensions as he is looking for /adm/../adm/style instead.
PHPBB3-11362
---
phpBB/includes/extension/finder.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/includes/extension/finder.php b/phpBB/includes/extension/finder.php
index f71e32bc8d..d9aacc38ff 100644
--- a/phpBB/includes/extension/finder.php
+++ b/phpBB/includes/extension/finder.php
@@ -227,7 +227,7 @@ class phpbb_extension_finder
*/
protected function sanitise_directory($directory)
{
- $directory = preg_replace('#(?:^|/)\./#', '/', $directory);
+ $directory = phpbb_clean_path($directory);
$dir_len = strlen($directory);
if ($dir_len > 1 && $directory[$dir_len - 1] === '/')
From 1fd5be859e3fe85e67fe7f5632e4630b96ca3634 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 12 Mar 2013 22:45:44 +0100
Subject: [PATCH 034/704] [ticket/11362] Add unit test for ../ in directory
paths
PHPBB3-11362
---
tests/extension/finder_test.php | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/tests/extension/finder_test.php b/tests/extension/finder_test.php
index c96b11a73c..3781591b19 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
{
@@ -142,6 +143,21 @@ 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
From a38a92424ddf00383c17a6dffffe522065e25c9f Mon Sep 17 00:00:00 2001
From: Matt Friedman
Date: Thu, 14 Mar 2013 10:45:17 -0700
Subject: [PATCH 035/704] [ticket/10155] Update jQuery to 1.8.3
Currently included jQuery is old by now, v1.6.2. We should update to
1.8.3. This allows us to take advantage of the latest form of jQuery
event delegation ($.on). I don't think it wise to update to jQuery
1.9.x yet, as many 3rd party scripts still need to be updated to cope
with its deprecated features ($.browser). Therefor, 1.8.3 is the latest
and most widely compatible stable version right now.
PHPBB3-10155
---
phpBB/assets/javascript/jquery.js | 20 ++------------------
phpBB/includes/db/migration/data/310/dev.php | 2 +-
phpBB/install/schemas/schema_data.sql | 2 +-
3 files changed, 4 insertions(+), 20 deletions(-)
diff --git a/phpBB/assets/javascript/jquery.js b/phpBB/assets/javascript/jquery.js
index 48590ecb96..83589daa70 100644
--- a/phpBB/assets/javascript/jquery.js
+++ b/phpBB/assets/javascript/jquery.js
@@ -1,18 +1,2 @@
-/*!
- * jQuery JavaScript Library v1.6.2
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Thu Jun 30 14:16:56 2011 -0400
- */
-(function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"":"")+""),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,x=function(a,b){return b.toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;ca ",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j =0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.
-shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c ",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML=" ",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="
";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/",""],legend:[1,""," "],thead:[1,""],tr:[2,""],td:[3,""],col:[2,""],area:[1,""," "],_default:[0,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1>$2>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j
-)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bi(a,d),e=bj(a),g=bj(d);for(h=0;e[h];++h)bi(e[h],g[h])}if(b){bh(a,d);if(c){e=bj(a),g=bj(d);for(h=0;e[h];++h)bh(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!ba.test(k))k=b.createTextNode(k);else{k=k.replace(Z,"<$1>$2>");var l=($.exec(k)||["",""])[1].toLowerCase(),m=bf[l]||bf._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=_.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Y.test(k)&&o.insertBefore(b.createTextNode(Y.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bo.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bn.test(g)?g.replace(bn,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bB=/%20/g,bC=/\[\]$/,bD=/\r?\n/g,bE=/#.*$/,bF=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bG=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bH=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bI=/^(?:GET|HEAD)$/,bJ=/^\/\//,bK=/\?/,bL=/
-
+
{L_FONT_COLOR}{L_COLON}
-
-
-
+
From 2387e7eb4122ebc7ecd87bd709d6d661535b2ae2 Mon Sep 17 00:00:00 2001
From: Vjacheslav Trushkin
Date: Fri, 12 Apr 2013 16:42:36 +0300
Subject: [PATCH 165/704] [ticket/11275] Do not use spacer.gif in color picker
PHPBB3-11275
---
phpBB/styles/prosilver/template/editor.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/phpBB/styles/prosilver/template/editor.js b/phpBB/styles/prosilver/template/editor.js
index 9e5665de99..0a749347ad 100644
--- a/phpBB/styles/prosilver/template/editor.js
+++ b/phpBB/styles/prosilver/template/editor.js
@@ -326,7 +326,7 @@ function colorPalette(dir, width, height) {
for (b = 0; b < 5; b++) {
color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]);
html += '';
- html += ' ';
+ html += ' ';
html += ' ';
}
@@ -346,7 +346,7 @@ function colorPalette(dir, width, height) {
(function($) {
$(document).ready(function() {
$('#color_palette_placeholder').each(function() {
- $(this).html(colorPalette('h', 15, 10));
+ $(this).html(colorPalette('h', 15, 12));
});
});
})(jQuery);
From 88072fd6c2c3ec6cc6d2a880bd76a9c601fd0767 Mon Sep 17 00:00:00 2001
From: Vjacheslav Trushkin
Date: Tue, 9 Apr 2013 18:38:59 +0300
Subject: [PATCH 166/704] [ticket/10741] Function to resize textarea elements
New function to automatically resize textarea elements
as user types text
PHPBB3-10741
---
phpBB/assets/javascript/core.js | 85 +++++++++++++++++++++++++++++++++
1 file changed, 85 insertions(+)
diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js
index 8bbea8b8c9..6fe71d141a 100644
--- a/phpBB/assets/javascript/core.js
+++ b/phpBB/assets/javascript/core.js
@@ -568,4 +568,89 @@ phpbb.addAjaxCallback('toggle_link', function() {
el.parent().attr('class', toggleClass);
});
+/**
+* Automatically resize textarea
+*
+* This function automatically resizes textarea elements when user
+* types text.
+*
+* @param jQuery item jQuery object to resize
+* @param object options Optional parameter that adjusts default
+* configuration. See configuration variable
+*/
+phpbb.resizeTextArea = function(items) {
+ // Configuration
+ var configuration = {
+ minWindowHeight: 500, // Minimum browser window height when textareas are resized
+ minHeight: 200, // Minimum height of textarea
+ maxHeight: 500, // Maximum height of textarea
+ heightDiff: 200, // Minimum difference between window and textarea height
+ // In following callbacks parameter "item" is jQuery object. "this" points to DOM object
+ resizeCallback: function(item) { }, // Function to call after resizing textarea.
+ resetCallback: function(item) { } // Function to call when resize has been canceled
+ }
+
+ if (arguments.length > 1)
+ {
+ configuration = $.extend(configuration, arguments[1]);
+ }
+
+ function resetAutoResize(item)
+ {
+ var $item = $(item);
+ if ($item.hasClass('auto-resized'))
+ {
+ $(item).css('height', '').removeClass('auto-resized');
+ configuration.resetCallback.call(item, $item);
+ }
+ };
+
+ function autoResize(item)
+ {
+ function setHeight(height)
+ {
+ $item.css('height', height + 'px').addClass('auto-resized');
+ configuration.resizeCallback.call(item, $item);
+ }
+
+ var windowHeight = $(window).height();
+
+ if (windowHeight < configuration.minWindowHeight)
+ {
+ resetAutoResize(item);
+ return;
+ }
+
+ var maxHeight = Math.min(Math.max(windowHeight - configuration.heightDiff, configuration.minHeight), configuration.maxHeight),
+ $item = $(item),
+ height = parseInt($item.height()),
+ scrollHeight = (item.scrollHeight) ? item.scrollHeight : 0;
+
+ if (height > maxHeight)
+ {
+ setHeight(maxHeight);
+ }
+ else if (scrollHeight > (height + 5))
+ {
+ setHeight(Math.min(maxHeight, scrollHeight));
+ }
+ };
+
+ items.bind('focus change keyup', function() {
+ $(this).each(function() {
+ autoResize(this);
+ });
+ }).css('resize', 'none').change();
+
+ $(window).resize(function() {
+ items.each(function() {
+ if ($(this).hasClass('auto-resized'))
+ {
+ autoResize(this);
+ }
+ });
+ });
+};
+
+
})(jQuery); // Avoid conflicts with other libraries
From 316efcbbbb72058bb9986be08af3d11173817386 Mon Sep 17 00:00:00 2001
From: Vjacheslav Trushkin
Date: Tue, 9 Apr 2013 18:39:47 +0300
Subject: [PATCH 167/704] [ticket/10741] Automatically resize textareas in
prosilver and ACP
Automatically resize textareas in prosilver and ACP.
PHPBB3-10741
---
phpBB/adm/style/ajax.js | 6 ++++++
phpBB/styles/prosilver/template/ajax.js | 9 +++++++++
2 files changed, 15 insertions(+)
diff --git a/phpBB/adm/style/ajax.js b/phpBB/adm/style/ajax.js
index 8f7c210e00..8211bdd014 100644
--- a/phpBB/adm/style/ajax.js
+++ b/phpBB/adm/style/ajax.js
@@ -148,6 +148,12 @@ $('[data-ajax]').each(function() {
}
});
+/**
+* Automatically resize textarea
+*/
+$(document).ready(function() {
+ phpbb.resizeTextArea($('textarea'), {minHeight: 75});
+});
})(jQuery); // Avoid conflicts with other libraries
diff --git a/phpBB/styles/prosilver/template/ajax.js b/phpBB/styles/prosilver/template/ajax.js
index 8dd1f58c97..e7dfe95009 100644
--- a/phpBB/styles/prosilver/template/ajax.js
+++ b/phpBB/styles/prosilver/template/ajax.js
@@ -225,4 +225,13 @@ $('#member_search').click(function () {
return false;
});
+/**
+* Automatically resize textarea
+*/
+$(document).ready(function() {
+ phpbb.resizeTextArea($('textarea:not(#message-box textarea)'), {minHeight: 75, maxHeight: 250});
+ phpbb.resizeTextArea($('#message-box textarea'));
+});
+
+
})(jQuery); // Avoid conflicts with other libraries
From 67f0e19128415210f0ece4a8cd3df12e4b35eaf6 Mon Sep 17 00:00:00 2001
From: Vjacheslav Trushkin
Date: Tue, 9 Apr 2013 18:47:08 +0300
Subject: [PATCH 168/704] [ticket/10741] Do not resize textarea.no-auto-resize
Do not auto-resize textareas with class .no-auto-resize
PHPBB3-10741
---
phpBB/adm/style/ajax.js | 2 +-
phpBB/styles/prosilver/template/ajax.js | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/phpBB/adm/style/ajax.js b/phpBB/adm/style/ajax.js
index 8211bdd014..6f21dfa6ac 100644
--- a/phpBB/adm/style/ajax.js
+++ b/phpBB/adm/style/ajax.js
@@ -152,7 +152,7 @@ $('[data-ajax]').each(function() {
* Automatically resize textarea
*/
$(document).ready(function() {
- phpbb.resizeTextArea($('textarea'), {minHeight: 75});
+ phpbb.resizeTextArea($('textarea:not(.no-auto-resize)'), {minHeight: 75});
});
diff --git a/phpBB/styles/prosilver/template/ajax.js b/phpBB/styles/prosilver/template/ajax.js
index e7dfe95009..2528b96ece 100644
--- a/phpBB/styles/prosilver/template/ajax.js
+++ b/phpBB/styles/prosilver/template/ajax.js
@@ -229,7 +229,7 @@ $('#member_search').click(function () {
* Automatically resize textarea
*/
$(document).ready(function() {
- phpbb.resizeTextArea($('textarea:not(#message-box textarea)'), {minHeight: 75, maxHeight: 250});
+ phpbb.resizeTextArea($('textarea:not(#message-box textarea, .no-auto-resize)'), {minHeight: 75, maxHeight: 250});
phpbb.resizeTextArea($('#message-box textarea'));
});
From cbb9f084fce0fd42ed1481233f417c79e8a0abfa Mon Sep 17 00:00:00 2001
From: Vjacheslav Trushkin
Date: Wed, 10 Apr 2013 09:08:25 +0300
Subject: [PATCH 169/704] [ticket/10741] Fix for browser-specific resizing of
textarea
Disable browser-specific resizing only after textarea has been resized
Enable browser-specific resizing after script resizing has been reset
PHPBB3-10741
---
phpBB/assets/javascript/core.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js
index 6fe71d141a..827ed2e34a 100644
--- a/phpBB/assets/javascript/core.js
+++ b/phpBB/assets/javascript/core.js
@@ -600,7 +600,7 @@ phpbb.resizeTextArea = function(items) {
var $item = $(item);
if ($item.hasClass('auto-resized'))
{
- $(item).css('height', '').removeClass('auto-resized');
+ $(item).css({height: '', resize: ''}).removeClass('auto-resized');
configuration.resetCallback.call(item, $item);
}
};
@@ -609,7 +609,7 @@ phpbb.resizeTextArea = function(items) {
{
function setHeight(height)
{
- $item.css('height', height + 'px').addClass('auto-resized');
+ $item.css({height: height + 'px', resize: 'none'}).addClass('auto-resized');
configuration.resizeCallback.call(item, $item);
}
@@ -640,7 +640,7 @@ phpbb.resizeTextArea = function(items) {
$(this).each(function() {
autoResize(this);
});
- }).css('resize', 'none').change();
+ }).change();
$(window).resize(function() {
items.each(function() {
From 6a3d77d76e9a6ee17acbd29da8486742f60a2514 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Mon, 1 Apr 2013 10:34:06 +0200
Subject: [PATCH 170/704] [ticket/10844] Add phpbb_root_path to
phpbb_style_extension_path_provider
The phpbb_root_path needs to be removed from the style path, before giving
the path to the finder, because the finder prepends it later again and is
therefor unable to find style files when the root path is not ./
PHPBB3-10844
---
phpBB/config/services.yml | 1 +
phpBB/includes/bbcode.php | 2 +-
phpBB/includes/functions_messenger.php | 2 +-
phpBB/includes/style/extension_path_provider.php | 15 ++++++++++++++-
4 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml
index b9c71844dc..6b7b3f2f2b 100644
--- a/phpBB/config/services.yml
+++ b/phpBB/config/services.yml
@@ -242,6 +242,7 @@ services:
arguments:
- @ext.manager
- @style.path_provider
+ - %core.root_path%
style.path_provider:
class: phpbb_style_path_provider
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/functions_messenger.php b/phpBB/includes/functions_messenger.php
index 821f0d970d..e580f6b675 100644
--- a/phpBB/includes/functions_messenger.php
+++ b/phpBB/includes/functions_messenger.php
@@ -209,7 +209,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/style/extension_path_provider.php b/phpBB/includes/style/extension_path_provider.php
index 6976a45ed0..e658abcb42 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,6 +96,14 @@ 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)
From bbaa3411b04c06c519e8dd215a0251c97263eac4 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Fri, 12 Apr 2013 21:19:09 +0200
Subject: [PATCH 171/704] [ticket/10844] Make sure ext_path has no trailing
slash
PHPBB3-10844
---
phpBB/includes/style/extension_path_provider.php | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/phpBB/includes/style/extension_path_provider.php b/phpBB/includes/style/extension_path_provider.php
index e658abcb42..ec1d85f821 100644
--- a/phpBB/includes/style/extension_path_provider.php
+++ b/phpBB/includes/style/extension_path_provider.php
@@ -108,6 +108,11 @@ class phpbb_style_extension_path_provider extends phpbb_extension_provider imple
->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;
}
}
From 06e32e36dff55dffcb60c19e768656db237ee836 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Fri, 12 Apr 2013 21:20:34 +0200
Subject: [PATCH 172/704] [ticket/10844] Add unit tests for different
root_paths
PHPBB3-10844
---
tests/extension/style_path_provider_test.php | 50 +++++++++++++++++++
.../subdir/style_path_provider_test.php | 18 +++++++
2 files changed, 68 insertions(+)
create mode 100644 tests/extension/style_path_provider_test.php
create mode 100644 tests/extension/subdir/style_path_provider_test.php
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 @@
+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 @@
+relative_root_path = '../';
+ $this->root_path = dirname(__FILE__) . '/../';
+ }
+}
From 474b4a60a527a4c0cd853872ce80ae50fdd2f374 Mon Sep 17 00:00:00 2001
From: OpenShift guest
Date: Sat, 13 Apr 2013 10:49:59 -0400
Subject: [PATCH 173/704] [ticket/11458] We still auto add language files from
the mods and acp folders in the language directory, so we revert some changes
here
PHPBB3-11458
---
phpBB/includes/functions_admin.php | 35 ++++++++++++++++++++++++++----
1 file changed, 31 insertions(+), 4 deletions(-)
diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php
index 5d71f55d1a..b5efa49159 100644
--- a/phpBB/includes/functions_admin.php
+++ b/phpBB/includes/functions_admin.php
@@ -3045,20 +3045,47 @@ function add_permission_language()
// First of all, our own file. We need to include it as the first file because it presets all relevant variables.
$user->add_lang('acp/permissions_phpbb');
- // add permission language files from extensions
+ $files_to_add = array();
+
+ // Now search in acp and mods folder for permissions_ files.
+ foreach (array('acp/', 'mods/') as $path)
+ {
+ $dh = @opendir($user->lang_path . $user->lang_name . '/' . $path);
+
+ if ($dh)
+ {
+ while (($file = readdir($dh)) !== false)
+ {
+ if ($file !== 'permissions_phpbb.' . $phpEx && strpos($file, 'permissions_') === 0 && substr($file, -(strlen($phpEx) + 1)) === '.' . $phpEx)
+ {
+ $files_to_add[] = $path . substr($file, 0, -(strlen($phpEx) + 1));
+ }
+ }
+ closedir($dh);
+ }
+ }
+
+ // find permission language files from extensions
$finder = $phpbb_extension_manager->get_finder();
- $lang_files = $finder
+ $ext_lang_files = $finder
->prefix('permissions_')
->suffix(".$phpEx")
->extension_directory('/language/' . $user->lang_name)
- ->core_path('language/' . $user->lang_name . '/mods')
->find();
- foreach ($lang_files as $lang_file => $ext_name)
+ foreach ($ext_lang_files as $lang_file => $ext_name)
{
$user->add_lang_ext($ext_name, $lang_file);
}
+
+ if (!sizeof($files_to_add))
+ {
+ return false;
+ }
+
+ $user->add_lang($files_to_add);
+ return true;
}
/**
From 84c815a12e7c2c816035e3b05e8ea7c88f0f4534 Mon Sep 17 00:00:00 2001
From: OpenShift guest
Date: Sat, 13 Apr 2013 11:24:47 -0400
Subject: [PATCH 174/704] [ticket/11458] Add functional test
Since there is no test method to include extension language files, a
functional test seems more appropriate.
We add a permission mask 'acl_u_foo' with translation found in extenion
'bar' and confirm that the permission language file 'permissions_foo.php'
from 'bar' was added by asserting that 'Can view foo' exists when viewing
user permissions in acp
PHPBB3-11458
---
.../extension_permission_lang_test.php | 59 +++++++++++++++++++
.../foo/bar/language/en/permissions_foo.php | 6 ++
2 files changed, 65 insertions(+)
create mode 100644 tests/functional/extension_permission_lang_test.php
create mode 100644 tests/functional/fixtures/ext/foo/bar/language/en/permissions_foo.php
diff --git a/tests/functional/extension_permission_lang_test.php b/tests/functional/extension_permission_lang_test.php
new file mode 100644
index 0000000000..c3d136de49
--- /dev/null
+++ b/tests/functional/extension_permission_lang_test.php
@@ -0,0 +1,59 @@
+phpbb_extension_manager = $this->get_extension_manager();
+
+ $this->purge_cache();
+
+ $this->login();
+ $this->admin_login();
+ $this->add_lang('acp/permissions');
+ }
+
+ public function test_auto_include_permission_lang_from_extensions()
+ {
+ $this->phpbb_extension_manager->enable('foo/bar');
+
+ // User permissions
+ $crawler = $this->request('GET', 'adm/index.php?i=acp_permissions&icat=16&mode=setting_user_global&sid=' . $this->sid);
+ $this->assert_response_success();
+ $this->assertContains('Can view foo', $this->client->getResponse()->getContent());
+ }
+
+ public function permissions_data()
+ {
+ return array(
+ // description
+ // permission type
+ // permission name
+ // mode
+ // object name
+ // object id
+ array(
+ 'user permission',
+ 'u_',
+ 'acl_u_foo',
+ 'setting_user_global',
+ 'user_id',
+ 2,
+ ),
+ );
+ }
+}
diff --git a/tests/functional/fixtures/ext/foo/bar/language/en/permissions_foo.php b/tests/functional/fixtures/ext/foo/bar/language/en/permissions_foo.php
new file mode 100644
index 0000000000..cd4b9a32d1
--- /dev/null
+++ b/tests/functional/fixtures/ext/foo/bar/language/en/permissions_foo.php
@@ -0,0 +1,6 @@
+ array('lang' => 'Can view foo', 'cat' => 'misc'),
+));
From cbfe866eba5b2a7bb9f141e5145292dbef135e78 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Sat, 13 Apr 2013 18:03:02 +0200
Subject: [PATCH 175/704] [ticket/11494] Use functions instead of repeating
PHPBB3-11494
---
tests/functional/memberlist_test.php | 48 +++++++++++++++++-----------
1 file changed, 29 insertions(+), 19 deletions(-)
diff --git a/tests/functional/memberlist_test.php b/tests/functional/memberlist_test.php
index 2e3d7907bf..0065147d11 100644
--- a/tests/functional/memberlist_test.php
+++ b/tests/functional/memberlist_test.php
@@ -41,25 +41,37 @@ class phpbb_functional_memberlist_test extends phpbb_functional_test_case
$this->assertContains('admin', $crawler->filter('h2')->text());
}
+ protected function get_memberlist_leaders_crawler()
+ {
+ $crawler = $this->request('GET', 'memberlist.php?mode=leaders&sid=' . $this->sid);
+ $this->assert_response_success();
+
+ return $crawler;
+ }
+
+ protected function get_crawler_table_text($crawler, $table)
+ {
+ return $crawler->filter('.forumbg-table')->eq($table)->text();
+ }
+
public function test_leaders()
{
$this->login();
$this->create_user('memberlist-test-moderator');
- $crawler = $this->request('GET', 'memberlist.php?mode=leaders&sid=' . $this->sid);
- $this->assert_response_success();
+ $crawler = $this->get_memberlist_leaders_crawler();
// Admin in admin group, but not in moderators
- $this->assertContains('admin', $crawler->filter('.forumbg-table')->eq(0)->text());
- $this->assertNotContains('admin', $crawler->filter('.forumbg-table')->eq(1)->text());
+ $this->assertContains('admin', $this->get_crawler_table_text($crawler, 0));
+ $this->assertNotContains('admin', $this->get_crawler_table_text($crawler, 1));
// memberlist-test-user in neither group
- $this->assertNotContains('memberlist-test-user', $crawler->filter('.forumbg-table')->eq(0)->text());
- $this->assertNotContains('memberlist-test-user', $crawler->filter('.forumbg-table')->eq(1)->text());
+ $this->assertNotContains('memberlist-test-user', $this->get_crawler_table_text($crawler, 0));
+ $this->assertNotContains('memberlist-test-user', $this->get_crawler_table_text($crawler, 1));
// memberlist-test-moderator in neither group
- $this->assertNotContains('memberlist-test-moderator', $crawler->filter('.forumbg-table')->eq(0)->text());
- $this->assertNotContains('memberlist-test-moderator', $crawler->filter('.forumbg-table')->eq(1)->text());
+ $this->assertNotContains('memberlist-test-moderator', $this->get_crawler_table_text($crawler, 0));
+ $this->assertNotContains('memberlist-test-moderator', $this->get_crawler_table_text($crawler, 1));
}
public function test_leaders_remove_users()
@@ -68,16 +80,15 @@ class phpbb_functional_memberlist_test extends phpbb_functional_test_case
// Remove admin from admins, but is now in moderators
$this->remove_user_group('ADMINISTRATORS', array('admin'));
- $crawler = $this->request('GET', 'memberlist.php?mode=leaders&sid=' . $this->sid);
- $this->assert_response_success();
- $this->assertNotContains('admin', $crawler->filter('.forumbg-table')->eq(0)->text());
- $this->assertContains('admin', $crawler->filter('.forumbg-table')->eq(1)->text());
+ $crawler = $this->get_memberlist_leaders_crawler();
+ $this->assertNotContains('admin', $this->get_crawler_table_text($crawler, 0));
+ $this->assertContains('admin', $this->get_crawler_table_text($crawler, 1));
// Remove admin from moderators, should not be visible anymore
$this->remove_user_group('GLOBAL_MODERATORS', array('admin'));
- $crawler = $this->request('GET', 'memberlist.php?mode=leaders&sid=' . $this->sid);
- $this->assertNotContains('admin', $crawler->filter('.forumbg-table')->eq(0)->text());
- $this->assertNotContains('admin', $crawler->filter('.forumbg-table')->eq(1)->text());
+ $crawler = $this->get_memberlist_leaders_crawler();
+ $this->assertNotContains('admin', $this->get_crawler_table_text($crawler, 0));
+ $this->assertNotContains('admin', $this->get_crawler_table_text($crawler, 1));
}
public function test_leaders_add_users()
@@ -86,9 +97,8 @@ class phpbb_functional_memberlist_test extends phpbb_functional_test_case
// Add memberlist-test-moderator to moderators
$this->add_user_group('GLOBAL_MODERATORS', array('memberlist-test-moderator'));
- $crawler = $this->request('GET', 'memberlist.php?mode=leaders&sid=' . $this->sid);
- $this->assert_response_success();
- $this->assertNotContains('memberlist-test-moderator', $crawler->filter('.forumbg-table')->eq(0)->text());
- $this->assertContains('memberlist-test-moderator', $crawler->filter('.forumbg-table')->eq(1)->text());
+ $crawler = $this->get_memberlist_leaders_crawler();
+ $this->assertNotContains('memberlist-test-moderator', $this->get_crawler_table_text($crawler, 0));
+ $this->assertContains('memberlist-test-moderator', $this->get_crawler_table_text($crawler, 1));
}
}
From 2c910999b090502cf6a3ac2add68de763ea897ca Mon Sep 17 00:00:00 2001
From: OpenShift guest
Date: Sat, 13 Apr 2013 13:56:02 -0400
Subject: [PATCH 176/704] [ticket/11458] Fix test
PHPBB-11458
---
tests/functional/extension_permission_lang_test.php | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/tests/functional/extension_permission_lang_test.php b/tests/functional/extension_permission_lang_test.php
index c3d136de49..1368a628d8 100644
--- a/tests/functional/extension_permission_lang_test.php
+++ b/tests/functional/extension_permission_lang_test.php
@@ -34,7 +34,14 @@ class phpbb_functional_extension_permission_lang_test extends phpbb_functional_t
// User permissions
$crawler = $this->request('GET', 'adm/index.php?i=acp_permissions&icat=16&mode=setting_user_global&sid=' . $this->sid);
$this->assert_response_success();
- $this->assertContains('Can view foo', $this->client->getResponse()->getContent());
+
+ // Select admin
+ $form = $crawler->selectButton($this->lang('SUBMIT'))->form();
+ $data = array('username[0]' => 'admin');
+ $form->setValues($data);
+ $crawler = $this->client->submit($form);
+ $this->assert_response_success();
+ $this->assertContains('Can view foo', $crawler->filter('body')->text());
}
public function permissions_data()
From 7240759e34d4e67fbce632c03ae6818aad36a07c Mon Sep 17 00:00:00 2001
From: Marc Alexander
Date: Sun, 14 Apr 2013 17:25:45 +0200
Subject: [PATCH 177/704] [ticket/11465] Check if class exists before including
info file
PHPBB3-11465
---
phpBB/includes/acp/acp_modules.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/includes/acp/acp_modules.php b/phpBB/includes/acp/acp_modules.php
index 62af12ad32..ab416fb406 100644
--- a/phpBB/includes/acp/acp_modules.php
+++ b/phpBB/includes/acp/acp_modules.php
@@ -579,7 +579,7 @@ class acp_modules
{
$info_class_file = str_replace("phpbb_{$module_class}_info_", '', $cur_module);
$info_class = $info_class_file . '_info';
- if (file_exists($directory . $info_class_file . '.' . $phpEx))
+ if (!class_exists($info_class) && file_exists($directory . $info_class_file . '.' . $phpEx))
{
include($directory . $info_class_file . '.' . $phpEx);
}
From 9e2acdab9aea7762761e81b3306a950ab627434d Mon Sep 17 00:00:00 2001
From: OpenShift guest
Date: Sun, 14 Apr 2013 17:53:38 -0400
Subject: [PATCH 178/704] [ticket/11458] Fix functional test again
Add 'u_foo' to phpbb_acl_options
Make sure extension and fixtures are added before running test
PHPBB3-11458
---
.../extension_permission_lang_test.php | 84 ++++++++++++++-----
1 file changed, 64 insertions(+), 20 deletions(-)
diff --git a/tests/functional/extension_permission_lang_test.php b/tests/functional/extension_permission_lang_test.php
index 1368a628d8..234cbbbaf2 100644
--- a/tests/functional/extension_permission_lang_test.php
+++ b/tests/functional/extension_permission_lang_test.php
@@ -14,9 +14,73 @@ class phpbb_functional_extension_permission_lang_test extends phpbb_functional_t
{
protected $phpbb_extension_manager;
+ static protected $fixtures = array(
+ 'foo/bar/language/en/permissions_foo.php',
+ );
+
+ /**
+ * This should only be called once before the tests are run.
+ * This is used to copy the fixtures to the phpBB install
+ */
+ static public function setUpBeforeClass()
+ {
+ global $phpbb_root_path;
+ parent::setUpBeforeClass();
+
+ $directories = array(
+ $phpbb_root_path . 'ext/foo/bar/',
+ $phpbb_root_path . 'ext/foo/bar/language/',
+ $phpbb_root_path . 'ext/foo/bar/language/en/',
+ );
+
+ foreach ($directories as $dir)
+ {
+ if (!is_dir($dir))
+ {
+ mkdir($dir, 0777, true);
+ }
+ }
+
+ foreach (self::$fixtures as $fixture)
+ {
+ copy(
+ "tests/functional/fixtures/ext/$fixture",
+ "{$phpbb_root_path}ext/$fixture");
+ }
+ }
+
+ /**
+ * This should only be called once after the tests are run.
+ * This is used to remove the fixtures from the phpBB install
+ */
+ static public function tearDownAfterClass()
+ {
+ global $phpbb_root_path;
+
+ foreach (self::$fixtures as $fixture)
+ {
+ unlink("{$phpbb_root_path}ext/$fixture");
+ }
+
+ rmdir("{$phpbb_root_path}ext/foo/bar/language/en");
+ rmdir("{$phpbb_root_path}ext/foo/bar/language");
+ rmdir("{$phpbb_root_path}ext/foo/bar");
+ rmdir("{$phpbb_root_path}ext/foo");
+ }
+
public function setUp()
{
parent::setUp();
+
+ $this->get_db();
+
+ $acl_ary = array(
+ 'auth_option' => 'u_foo',
+ 'is_global' => 1,
+ );
+
+ $sql = 'INSERT INTO phpbb_acl_options ' . $this->db->sql_build_array('INSERT', $acl_ary);
+ $this->db->sql_query($sql);
$this->phpbb_extension_manager = $this->get_extension_manager();
@@ -43,24 +107,4 @@ class phpbb_functional_extension_permission_lang_test extends phpbb_functional_t
$this->assert_response_success();
$this->assertContains('Can view foo', $crawler->filter('body')->text());
}
-
- public function permissions_data()
- {
- return array(
- // description
- // permission type
- // permission name
- // mode
- // object name
- // object id
- array(
- 'user permission',
- 'u_',
- 'acl_u_foo',
- 'setting_user_global',
- 'user_id',
- 2,
- ),
- );
- }
}
From 6bcc220df3499e2e58735c9f3a586521784c4edf Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Mon, 15 Apr 2013 03:30:07 +0200
Subject: [PATCH 179/704] [ticket/11494] Filter crawler in first place
PHPBB3-11494
---
tests/functional/memberlist_test.php | 41 ++++++++++++----------------
1 file changed, 18 insertions(+), 23 deletions(-)
diff --git a/tests/functional/memberlist_test.php b/tests/functional/memberlist_test.php
index 0065147d11..92ede8bd04 100644
--- a/tests/functional/memberlist_test.php
+++ b/tests/functional/memberlist_test.php
@@ -41,17 +41,12 @@ class phpbb_functional_memberlist_test extends phpbb_functional_test_case
$this->assertContains('admin', $crawler->filter('h2')->text());
}
- protected function get_memberlist_leaders_crawler()
+ protected function get_memberlist_leaders_table_crawler()
{
$crawler = $this->request('GET', 'memberlist.php?mode=leaders&sid=' . $this->sid);
$this->assert_response_success();
- return $crawler;
- }
-
- protected function get_crawler_table_text($crawler, $table)
- {
- return $crawler->filter('.forumbg-table')->eq($table)->text();
+ return $crawler->filter('.forumbg-table');
}
public function test_leaders()
@@ -59,19 +54,19 @@ class phpbb_functional_memberlist_test extends phpbb_functional_test_case
$this->login();
$this->create_user('memberlist-test-moderator');
- $crawler = $this->get_memberlist_leaders_crawler();
+ $crawler = $this->get_memberlist_leaders_table_crawler();
// Admin in admin group, but not in moderators
- $this->assertContains('admin', $this->get_crawler_table_text($crawler, 0));
- $this->assertNotContains('admin', $this->get_crawler_table_text($crawler, 1));
+ $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', $this->get_crawler_table_text($crawler, 0));
- $this->assertNotContains('memberlist-test-user', $this->get_crawler_table_text($crawler, 1));
+ $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', $this->get_crawler_table_text($crawler, 0));
- $this->assertNotContains('memberlist-test-moderator', $this->get_crawler_table_text($crawler, 1));
+ $this->assertNotContains('memberlist-test-moderator', $crawler->eq(0)->text());
+ $this->assertNotContains('memberlist-test-moderator', $crawler->eq(1)->text());
}
public function test_leaders_remove_users()
@@ -80,15 +75,15 @@ class phpbb_functional_memberlist_test extends phpbb_functional_test_case
// Remove admin from admins, but is now in moderators
$this->remove_user_group('ADMINISTRATORS', array('admin'));
- $crawler = $this->get_memberlist_leaders_crawler();
- $this->assertNotContains('admin', $this->get_crawler_table_text($crawler, 0));
- $this->assertContains('admin', $this->get_crawler_table_text($crawler, 1));
+ $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_crawler();
- $this->assertNotContains('admin', $this->get_crawler_table_text($crawler, 0));
- $this->assertNotContains('admin', $this->get_crawler_table_text($crawler, 1));
+ $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()
@@ -97,8 +92,8 @@ class phpbb_functional_memberlist_test extends phpbb_functional_test_case
// Add memberlist-test-moderator to moderators
$this->add_user_group('GLOBAL_MODERATORS', array('memberlist-test-moderator'));
- $crawler = $this->get_memberlist_leaders_crawler();
- $this->assertNotContains('memberlist-test-moderator', $this->get_crawler_table_text($crawler, 0));
- $this->assertContains('memberlist-test-moderator', $this->get_crawler_table_text($crawler, 1));
+ $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());
}
}
From c1dedabdfb688501dceade55f6f3e96e3495e5dd Mon Sep 17 00:00:00 2001
From: Marc Alexander
Date: Mon, 15 Apr 2013 12:50:21 +0200
Subject: [PATCH 180/704] [ticket/11488] Use correct base class in email
notification method
In ticket/11451 this was not correctly changed to reflect the new class
phpbb_notifcation_method_messenger_base. Additionally, an undefined
variable error has been fixed in messenger_base.php (change should be
confirmed by bantu though).
PHPBB3-11488
---
phpBB/includes/notification/method/email.php | 2 +-
phpBB/includes/notification/method/messenger_base.php | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
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/messenger_base.php b/phpBB/includes/notification/method/messenger_base.php
index ce1ecc09ce..2f9073e80b 100644
--- a/phpBB/includes/notification/method/messenger_base.php
+++ b/phpBB/includes/notification/method/messenger_base.php
@@ -78,7 +78,7 @@ 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']);
From 82a630cd648b193079cd147144ad5b035450d824 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Mon, 15 Apr 2013 20:41:05 +0530
Subject: [PATCH 181/704] [ticket/11493] add check for phpBB Debug in
functional tests
PHPBB3-11493
---
tests/test_framework/phpbb_functional_test_case.php | 1 +
1 file changed, 1 insertion(+)
diff --git a/tests/test_framework/phpbb_functional_test_case.php b/tests/test_framework/phpbb_functional_test_case.php
index 8ab6469e9a..c600cba5f8 100644
--- a/tests/test_framework/phpbb_functional_test_case.php
+++ b/tests/test_framework/phpbb_functional_test_case.php
@@ -349,5 +349,6 @@ 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('[phpBB Debug]', $content);
}
}
From 14071e6085d55f459728ade117ff93b3957045d2 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Mon, 15 Apr 2013 22:02:21 +0530
Subject: [PATCH 182/704] [ticket/11493] add checks for Notice and Warning
PHPBB3-11493
---
tests/test_framework/phpbb_functional_test_case.php | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tests/test_framework/phpbb_functional_test_case.php b/tests/test_framework/phpbb_functional_test_case.php
index c600cba5f8..83c931f924 100644
--- a/tests/test_framework/phpbb_functional_test_case.php
+++ b/tests/test_framework/phpbb_functional_test_case.php
@@ -349,6 +349,8 @@ 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);
}
}
From a1183a58894967bfec7da01c5004138e4daeb583 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 16 Apr 2013 23:07:48 +0200
Subject: [PATCH 183/704] [ticket/11495] Add basic interface with nestedset
operations
PHPBB3-11495
---
phpBB/includes/nestedset/interface.php | 131 ++++++++++++++++++++
phpBB/includes/nestedset/item/interface.php | 61 +++++++++
2 files changed, 192 insertions(+)
create mode 100644 phpBB/includes/nestedset/interface.php
create mode 100644 phpBB/includes/nestedset/item/interface.php
diff --git a/phpBB/includes/nestedset/interface.php b/phpBB/includes/nestedset/interface.php
new file mode 100644
index 0000000000..7ef6ff87bb
--- /dev/null
+++ b/phpBB/includes/nestedset/interface.php
@@ -0,0 +1,131 @@
+ down, > 0 => up
+ * @return bool True if the item was moved
+ */
+ public function move(phpbb_nestedset_item_interface $item, $delta);
+
+ /**
+ * Move an item down by 1
+ *
+ * @param phpbb_nestedset_item_interface $item The item to be moved
+ * @return bool True if the item was moved
+ */
+ public function move_down(phpbb_nestedset_item_interface $item);
+
+ /**
+ * Move an item up by 1
+ *
+ * @param phpbb_nestedset_item_interface $item The item to be moved
+ * @return bool True if the item was moved
+ */
+ public function move_up(phpbb_nestedset_item_interface $item);
+
+ /**
+ * Moves all children of one item to another item
+ *
+ * @param phpbb_nestedset_item_interface $current_parent The current parent item
+ * @param phpbb_nestedset_item_interface $new_parent The new parent item
+ * @return bool True if any items where moved
+ */
+ public function move_children(phpbb_nestedset_item_interface $current_parent, phpbb_nestedset_item_interface $new_parent);
+
+ /**
+ * Set the parent item
+ *
+ * @param phpbb_nestedset_item_interface $item The item to be moved
+ * @param phpbb_nestedset_item_interface $new_parent The new parent item
+ * @return bool True if the parent was set successfully
+ */
+ public function set_parent(phpbb_nestedset_item_interface $item, phpbb_nestedset_item_interface $new_parent);
+
+ /**
+ * Get branch of the item
+ *
+ * This method can return all parents, children or both of the given item
+ *
+ * @param phpbb_nestedset_item_interface $item The item to get the branch from
+ * @param string $type One of all|parent|children
+ * @param bool $order_desc Order the items descending (most outer parent first)
+ * @param bool $include_item Should the given item be included in the list aswell
+ * @return array Array of items (containing all columns from the item table)
+ * ID => Item data
+ */
+ public function get_branch_data(phpbb_nestedset_item_interface $item, $type, $order_desc, $include_item);
+
+ /**
+ * Get base information of parent items
+ *
+ * @param phpbb_nestedset_item_interface $item The item to get the parents from
+ * @return array Array of items (containing basic columns from the item table)
+ * ID => Item data
+ */
+ public function get_parent_data(phpbb_nestedset_item_interface $item);
+
+ /**
+ * Recalculate Nested Sets
+ *
+ * @param int $new_id First left_id to be used (should start with 1)
+ * @param int $parent_id parent_id of the current set (default = 0)
+ * @param bool $reset_ids Should we reset all left_id/right_id on the first call?
+ * @return int $new_id The next left_id/right_id that should be used
+ */
+ public function recalculate_nested_set($new_id, $parent_id = 0, $reset_ids = false);
+}
diff --git a/phpBB/includes/nestedset/item/interface.php b/phpBB/includes/nestedset/item/interface.php
new file mode 100644
index 0000000000..18206d752e
--- /dev/null
+++ b/phpBB/includes/nestedset/item/interface.php
@@ -0,0 +1,61 @@
+
Date: Tue, 16 Apr 2013 23:08:35 +0200
Subject: [PATCH 184/704] [ticket/11495] Add abstract implementation of the
interface
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 632 +++++++++++++++++++++++++
phpBB/includes/nestedset/item/base.php | 82 ++++
2 files changed, 714 insertions(+)
create mode 100644 phpBB/includes/nestedset/base.php
create mode 100644 phpBB/includes/nestedset/item/base.php
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
new file mode 100644
index 0000000000..7f4691b7e0
--- /dev/null
+++ b/phpBB/includes/nestedset/base.php
@@ -0,0 +1,632 @@
+ 'item_id',
+ 'left_id' => 'left_id',
+ 'right_id' => 'right_id',
+ 'parent_id' => 'parent_id',
+ 'item_parents' => 'item_parents',
+ );
+
+ /**
+ * Additional SQL restrictions
+ * Allows to have multiple nested sets in one table
+ * @var String
+ */
+ protected $sql_where = '';
+
+ /**
+ * List of item properties to be cached in $item_parents
+ * @var array
+ */
+ protected $item_basic_data = array('*');
+
+ /**
+ * Delete an item from the nested set (also deletes the rows form the table)
+ *
+ * Also deletes all subitems from the nested set
+ *
+ * @param string $operator SQL operator that needs to be prepended to sql_where,
+ * if it is not empty.
+ * @param string $column_prefix Prefix that needs to be prepended to column names
+ * @return bool True if the item was deleted
+ */
+ public function get_sql_where($operator = 'AND', $column_prefix = '')
+ {
+ return (!$this->sql_where) ? '' : $operator . ' ' . sprintf($this->sql_where, $column_prefix);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function insert(array $additional_data)
+ {
+ $item_data = array_merge($additional_data, array(
+ $this->table_columns['parent_id'] => 0,
+ $this->table_columns['left_id'] => 0,
+ $this->table_columns['right_id'] => 0,
+ $this->table_columns['item_parents'] => '',
+ ));
+
+ unset($item_data[$this->table_columns['item_id']]);
+
+ $sql = 'INSERT INTO ' . $this->table_name . ' ' . $this->db->sql_build_array('INSERT', $item_data);
+ $this->db->sql_query($sql);
+
+ $item_data[$this->table_columns['item_id']] = (int) $this->db->sql_nextid();
+
+ $item = new $this->item_class($item_data);
+
+ return array_merge($item_data, $this->add($item));
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function add(phpbb_nestedset_item_interface $item)
+ {
+ $sql = 'SELECT MAX(' . $this->table_columns['right_id'] . ') AS ' . $this->table_columns['right_id'] . '
+ FROM ' . $this->table_name . '
+ ' . $this->get_sql_where('WHERE');
+ $result = $this->db->sql_query($sql);
+ $current_max_right_id = (int) $this->db->sql_fetchfield($this->table_columns['right_id']);
+ $this->db->sql_freeresult($result);
+
+ $update_item_data = array(
+ $this->table_columns['parent_id'] => 0,
+ $this->table_columns['left_id'] => $current_max_right_id + 1,
+ $this->table_columns['right_id'] => $current_max_right_id + 2,
+ $this->table_columns['item_parents'] => '',
+ );
+
+ $sql = 'UPDATE ' . $this->table_name . '
+ SET ' . $this->db->sql_build_array('UPDATE', $update_item_data) . '
+ WHERE ' . $this->table_columns['item_id'] . ' = ' . $item->get_item_id();
+ $this->db->sql_query($sql);
+
+ return $update_item_data;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function remove(phpbb_nestedset_item_interface $item)
+ {
+ if ($item->has_children())
+ {
+ $items = array_keys($this->get_branch_data($item, 'children'));
+ }
+ else
+ {
+ $items = array($item->get_item_id());
+ }
+
+ $this->remove_subset($items, $item);
+
+ return $items;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function delete(phpbb_nestedset_item_interface $item)
+ {
+ $removed_items = $this->remove($item);
+
+ $sql = 'DELETE FROM ' . $this->table_name . '
+ WHERE ' . $this->db->sql_in_set($this->table_columns['item_id'], $removed_items) . '
+ ' . $this->get_sql_where('AND');
+ $this->db->sql_query($sql);
+
+ return $removed_items;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function move(phpbb_nestedset_item_interface $item, $delta)
+ {
+ if ($delta == 0)
+ {
+ return false;
+ }
+
+ $action = ($delta > 0) ? 'move_up' : 'move_down';
+ $delta = abs($delta);
+
+ /**
+ * Fetch all the siblings between the item's current spot
+ * and where we want to move it to. If there are less than $delta
+ * siblings between the current spot and the target then the
+ * item will move as far as possible
+ */
+ $sql = 'SELECT ' . implode(', ', $this->table_columns) . '
+ FROM ' . $this->table_name . '
+ WHERE ' . $this->table_columns['parent_id'] . ' = ' . $item->get_parent_id() . '
+ ' . $this->get_sql_where() . '
+ AND ';
+
+ if ($action == 'move_up')
+ {
+ $sql .= $this->table_columns['right_id'] . ' < ' . $item->get_right_id() . ' ORDER BY ' . $this->table_columns['right_id'] . ' DESC';
+ }
+ else
+ {
+ $sql .= $this->table_columns['left_id'] . ' > ' . $item->get_left_id() . ' ORDER BY ' . $this->table_columns['left_id'] . ' ASC';
+ }
+
+ $result = $this->db->sql_query_limit($sql, $delta);
+
+ $target = null;
+ while ($row = $this->db->sql_fetchrow($result))
+ {
+ $target = new $this->item_class($row);
+ }
+ $this->db->sql_freeresult($result);
+
+ if (is_null($target))
+ {
+ // The item is already on top or bottom
+ return false;
+ }
+
+ /**
+ * $left_id and $right_id define the scope of the items that are affected by the move.
+ * $diff_up and $diff_down are the values to substract or add to each item's left_id
+ * and right_id in order to move them up or down.
+ * $move_up_left and $move_up_right define the scope of the items that are moving
+ * up. Other items in the scope of ($left_id, $right_id) are considered to move down.
+ */
+ if ($action == 'move_up')
+ {
+ $left_id = $target->get_left_id();
+ $right_id = $item->get_right_id();
+
+ $diff_up = $item->get_left_id() - $target->get_left_id();
+ $diff_down = $item->get_right_id() + 1 - $item->get_left_id();
+
+ $move_up_left = $item->get_left_id();
+ $move_up_right = $item->get_right_id();
+ }
+ else
+ {
+ $left_id = $item->get_left_id();
+ $right_id = $target->get_right_id();
+
+ $diff_up = $item->get_right_id() + 1 - $item->get_left_id();
+ $diff_down = $target->get_right_id() - $item->get_right_id();
+
+ $move_up_left = $item->get_right_id() + 1;
+ $move_up_right = $target->get_right_id();
+ }
+
+ // Now do the dirty job
+ $sql = 'UPDATE ' . $this->table_name . '
+ SET ' . $this->table_columns['left_id'] . ' = ' . $this->table_columns['left_id'] . ' + CASE
+ WHEN ' . $this->table_columns['left_id'] . " BETWEEN {$move_up_left} AND {$move_up_right} THEN -{$diff_up}
+ ELSE {$diff_down}
+ END,
+ " . $this->table_columns['right_id'] . ' = ' . $this->table_columns['right_id'] . ' + CASE
+ WHEN ' . $this->table_columns['right_id'] . " BETWEEN {$move_up_left} AND {$move_up_right} THEN -{$diff_up}
+ ELSE {$diff_down}
+ END,
+ " . $this->table_columns['item_parents'] . " = ''
+ WHERE
+ " . $this->table_columns['left_id'] . " BETWEEN {$left_id} AND {$right_id}
+ AND " . $this->table_columns['right_id'] . " BETWEEN {$left_id} AND {$right_id}
+ " . $this->get_sql_where();
+ $this->db->sql_query($sql);
+
+ return true;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function move_down(phpbb_nestedset_item_interface $item)
+ {
+ return $this->move($item, -1);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function move_up(phpbb_nestedset_item_interface $item)
+ {
+ return $this->move($item, 1);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function move_children(phpbb_nestedset_item_interface $current_parent, phpbb_nestedset_item_interface $new_parent)
+ {
+ if (!$current_parent->has_children() || !$current_parent->get_item_id() || $current_parent->get_item_id() == $new_parent->get_item_id())
+ {
+ return false;
+ }
+
+ $move_items = array_keys($this->get_branch_data($current_parent, 'children', true, false));
+
+ if (in_array($new_parent->get_item_id(), $move_items))
+ {
+ throw new phpbb_nestedset_exception('INVALID_PARENT');
+ }
+
+ $diff = sizeof($move_items) * 2;
+ $sql_exclude_moved_items = $this->db->sql_in_set($this->table_columns['item_id'], $move_items, true);
+
+ $this->db->sql_transaction('begin');
+
+ $this->remove_subset($move_items, $current_parent, false);
+
+ if ($new_parent->get_item_id())
+ {
+ // Retrieve new-parent again, it may have been changed...
+ $sql = 'SELECT *
+ FROM ' . $this->table_name . '
+ WHERE ' . $this->table_columns['item_id'] . ' = ' . $new_parent->get_item_id();
+ $result = $this->db->sql_query($sql);
+ $parent_data = $this->db->sql_fetchrow($result);
+ $this->db->sql_freeresult($result);
+
+ if (!$parent_data)
+ {
+ $this->db->sql_transaction('rollback');
+ throw new phpbb_nestedset_exception('INVALID_PARENT');
+ }
+
+ $new_parent = new $this->item_class($parent_data);
+
+ $new_right_id = $this->prepare_adding_subset($move_items, $new_parent);
+
+ if ($new_right_id > $current_parent->get_right_id())
+ {
+ $diff = ' + ' . ($new_right_id - $current_parent->get_right_id());
+ }
+ else
+ {
+ $diff = ' - ' . abs($new_right_id - $current_parent->get_right_id());
+ }
+ }
+ else
+ {
+ $sql = 'SELECT MAX(' . $this->table_columns['right_id'] . ') AS ' . $this->table_columns['right_id'] . '
+ FROM ' . $this->table_name . '
+ WHERE ' . $sql_exclude_moved_items . '
+ ' . $this->get_sql_where('AND');
+ $result = $this->db->sql_query($sql);
+ $row = $this->db->sql_fetchrow($result);
+ $this->db->sql_freeresult($result);
+
+ $diff = ' + ' . ($row[$this->table_columns['right_id']] - $current_parent->get_left_id());
+ }
+
+ $sql = 'UPDATE ' . $this->table_name . '
+ SET ' . $this->table_columns['left_id'] . ' = ' . $this->table_columns['left_id'] . $diff . ',
+ ' . $this->table_columns['right_id'] . ' = ' . $this->table_columns['right_id'] . $diff . ',
+ ' . $this->table_columns['parent_id'] . ' = ' . $this->db->sql_case($this->table_columns['parent_id'] . ' = ' . $current_parent->get_item_id(), $new_parent->get_item_id(), $this->table_columns['parent_id']) . ',
+ ' . $this->table_columns['item_parents'] . " = ''
+ WHERE " . $this->db->sql_in_set($this->table_columns['item_id'], $move_items) . '
+ ' . $this->get_sql_where('AND');
+ $this->db->sql_query($sql);
+
+ $this->db->sql_transaction('commit');
+
+ return true;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function set_parent(phpbb_nestedset_item_interface $item, phpbb_nestedset_item_interface $new_parent)
+ {
+ $move_items = array_keys($this->get_branch_data($item, 'children'));
+
+ if (in_array($new_parent->get_item_id(), $move_items))
+ {
+ throw new phpbb_nestedset_exception('INVALID_PARENT');
+ }
+
+ $diff = sizeof($move_items) * 2;
+ $sql_exclude_moved_items = $this->db->sql_in_set($this->table_columns['item_id'], $move_items, true);
+
+ $this->db->sql_transaction('begin');
+
+ $this->remove_subset($move_items, $item, false);
+
+ if ($new_parent->get_item_id())
+ {
+ // Retrieve new-parent again, it may have been changed...
+ $sql = 'SELECT *
+ FROM ' . $this->table_name . '
+ WHERE ' . $this->table_columns['item_id'] . ' = ' . $new_parent->get_item_id();
+ $result = $this->db->sql_query($sql);
+ $parent_data = $this->db->sql_fetchrow($result);
+ $this->db->sql_freeresult($result);
+
+ if (!$parent_data)
+ {
+ $this->db->sql_transaction('rollback');
+ throw new phpbb_nestedset_exception('INVALID_PARENT');
+ }
+
+ $new_parent = new $this->item_class($parent_data);
+
+ $new_right_id = $this->prepare_adding_subset($move_items, $new_parent);
+
+ if ($new_right_id > $item->get_right_id())
+ {
+ $diff = ' + ' . ($new_right_id - $item->get_right_id() - 1);
+ }
+ else
+ {
+ $diff = ' - ' . abs($new_right_id - $item->get_right_id() - 1);
+ }
+ }
+ else
+ {
+ $sql = 'SELECT MAX(' . $this->table_columns['right_id'] . ') AS ' . $this->table_columns['right_id'] . '
+ FROM ' . $this->table_name . '
+ WHERE ' . $sql_exclude_moved_items . '
+ ' . $this->get_sql_where('AND');
+ $result = $this->db->sql_query($sql);
+ $row = $this->db->sql_fetchrow($result);
+ $this->db->sql_freeresult($result);
+
+ $diff = ' + ' . ($row[$this->table_columns['right_id']] - $item->get_left_id() + 1);
+ }
+
+ $sql = 'UPDATE ' . $this->table_name . '
+ SET ' . $this->table_columns['left_id'] . ' = ' . $this->table_columns['left_id'] . $diff . ',
+ ' . $this->table_columns['right_id'] . ' = ' . $this->table_columns['right_id'] . $diff . ',
+ ' . $this->table_columns['parent_id'] . ' = ' . $this->db->sql_case($this->table_columns['item_id'] . ' = ' . $item->get_item_id(), $new_parent->get_item_id(), $this->table_columns['parent_id']) . ',
+ ' . $this->table_columns['item_parents'] . " = ''
+ WHERE " . $this->db->sql_in_set($this->table_columns['item_id'], $move_items) . '
+ ' . $this->get_sql_where('AND');
+ $this->db->sql_query($sql);
+
+ $this->db->sql_transaction('commit');
+
+ return true;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function get_branch_data(phpbb_nestedset_item_interface $item, $type = 'all', $order_desc = true, $include_item = true)
+ {
+ switch ($type)
+ {
+ case 'parents':
+ $condition = 'i1.' . $this->table_columns['left_id'] . ' BETWEEN i2.' . $this->table_columns['left_id'] . ' AND i2.' . $this->table_columns['right_id'] . '';
+ break;
+
+ case 'children':
+ $condition = 'i2.' . $this->table_columns['left_id'] . ' BETWEEN i1.' . $this->table_columns['left_id'] . ' AND i1.' . $this->table_columns['right_id'] . '';
+ break;
+
+ default:
+ $condition = 'i2.' . $this->table_columns['left_id'] . ' BETWEEN i1.' . $this->table_columns['left_id'] . ' AND i1.' . $this->table_columns['right_id'] . '
+ OR i1.' . $this->table_columns['left_id'] . ' BETWEEN i2.' . $this->table_columns['left_id'] . ' AND i2.' . $this->table_columns['right_id'];
+ break;
+ }
+
+ $rows = array();
+
+ $sql = 'SELECT i2.*
+ FROM ' . $this->table_name . ' i1
+ LEFT JOIN ' . $this->table_name . " i2
+ ON (($condition) " . $this->get_sql_where('AND', 'i2.') . ')
+ WHERE i1.' . $this->table_columns['item_id'] . ' = ' . $item->get_item_id() . '
+ ' . $this->get_sql_where('AND', 'i1.') . '
+ ORDER BY i2.' . $this->table_columns['left_id'] . ' ' . ($order_desc ? 'ASC' : 'DESC');
+ $result = $this->db->sql_query($sql);
+
+ while ($row = $this->db->sql_fetchrow($result))
+ {
+ if (!$include_item && $item->get_item_id() === (int) $row[$this->table_columns['item_id']])
+ {
+ continue;
+ }
+
+ $rows[$row[$this->table_columns['item_id']]] = $row;
+ }
+ $this->db->sql_freeresult($result);
+
+ return $rows;
+ }
+
+ /**
+ * Get base information of parent items
+ *
+ * Data is cached in the item_parents column in the item table
+ *
+ * @inheritdoc
+ */
+ public function get_parent_data(phpbb_nestedset_item_interface $item)
+ {
+ $parents = array();
+ if ($item->get_parent_id())
+ {
+ if (!$item->get_item_parents_data())
+ {
+ $sql = 'SELECT ' . implode(', ', $this->item_basic_data) . '
+ FROM ' . $this->table_name . '
+ WHERE ' . $this->table_columns['left_id'] . ' < ' . $item->get_left_id() . '
+ AND ' . $this->table_columns['right_id'] . ' > ' . $item->get_right_id() . '
+ ' . $this->get_sql_where('AND') . '
+ ORDER BY ' . $this->table_columns['left_id'] . ' ASC';
+ $result = $this->db->sql_query($sql);
+
+ while ($row = $this->db->sql_fetchrow($result))
+ {
+ $parents[$row[$this->table_columns['item_id']]] = $row;
+ }
+ $this->db->sql_freeresult($result);
+
+ $item_parents = serialize($parents);
+
+ $sql = 'UPDATE ' . $this->table_name . '
+ SET ' . $this->table_columns['item_parents'] . " = '" . $this->db->sql_escape($item_parents) . "'
+ WHERE " . $this->table_columns['parent_id'] . ' = ' . $item->get_parent_id();
+ $this->db->sql_query($sql);
+ }
+ else
+ {
+ $parents = unserialize($item->get_item_parents_data());
+ }
+ }
+
+ return $parents;
+ }
+
+ /**
+ * Remove a subset from the nested set
+ *
+ * @param array $subset_items Subset of items to remove
+ * @param phpbb_nestedset_item_interface $bounding_item Item containing the right bound of the subset
+ * @param bool $set_subset_zero Should the parent, left and right id of the item be set to 0, or kept unchanged?
+ * @return null
+ */
+ protected function remove_subset(array $subset_items, phpbb_nestedset_item_interface $bounding_item, $set_subset_zero = true)
+ {
+ $diff = sizeof($subset_items) * 2;
+ $sql_subset_items = $this->db->sql_in_set($this->table_columns['item_id'], $subset_items);
+ $sql_not_subset_items = $this->db->sql_in_set($this->table_columns['item_id'], $subset_items, true);
+
+ $sql_is_parent = $this->table_columns['left_id'] . ' <= ' . $bounding_item->get_right_id() . '
+ AND ' . $this->table_columns['right_id'] . ' >= ' . $bounding_item->get_right_id();
+
+ $sql_is_right = $this->table_columns['left_id'] . ' > ' . $bounding_item->get_right_id();
+
+ $set_left_id = $this->db->sql_case($sql_is_right, $this->table_columns['left_id'] . ' - ' . $diff, $this->table_columns['left_id']);
+ $set_right_id = $this->db->sql_case($sql_is_parent . ' OR ' . $sql_is_right, $this->table_columns['right_id'] . ' - ' . $diff, $this->table_columns['right_id']);
+
+ if ($set_subset_zero)
+ {
+ $set_left_id = $this->db->sql_case($sql_subset_items, 0, $set_left_id);
+ $set_right_id = $this->db->sql_case($sql_subset_items, 0, $set_right_id);
+ }
+
+ $sql = 'UPDATE ' . $this->table_name . '
+ SET ' . $this->table_columns['left_id'] . ' = ' . $set_left_id . ',
+ ' . $this->table_columns['right_id'] . ' = ' . $set_right_id . ',
+ ' . (($set_subset_zero) ? $this->table_columns['parent_id'] . ' = ' . $this->db->sql_case($sql_subset_items, 0, $this->table_columns['parent_id']) . ',' : '') . '
+ ' . $this->table_columns['item_parents'] . " = ''
+ " . ((!$set_subset_zero) ? ' WHERE ' . $sql_not_subset_items . ' ' . $this->get_sql_where('AND') : $this->get_sql_where('WHERE'));
+ $this->db->sql_query($sql);
+ }
+
+ /**
+ * Add a subset to the nested set
+ *
+ * @param array $subset_items Subset of items to add
+ * @param phpbb_nestedset_item_interface $new_parent Item containing the right bound of the new parent
+ * @return int New right id of the parent item
+ */
+ protected function prepare_adding_subset(array $subset_items, phpbb_nestedset_item_interface $new_parent)
+ {
+ $diff = sizeof($subset_items) * 2;
+ $sql_not_subset_items = $this->db->sql_in_set($this->table_columns['item_id'], $subset_items, true);
+
+ $set_left_id = $this->db->sql_case($this->table_columns['left_id'] . ' > ' . $new_parent->get_right_id(), $this->table_columns['left_id'] . ' + ' . $diff, $this->table_columns['left_id']);
+ $set_right_id = $this->db->sql_case($this->table_columns['right_id'] . ' >= ' . $new_parent->get_right_id(), $this->table_columns['right_id'] . ' + ' . $diff, $this->table_columns['right_id']);
+
+ $sql = 'UPDATE ' . $this->table_name . '
+ SET ' . $this->table_columns['left_id'] . ' = ' . $set_left_id . ',
+ ' . $this->table_columns['right_id'] . ' = ' . $set_right_id . ',
+ ' . $this->table_columns['item_parents'] . " = ''
+ WHERE " . $sql_not_subset_items . '
+ ' . $this->get_sql_where('AND');
+ $this->db->sql_query($sql);
+
+ return $new_parent->get_right_id() + $diff;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function recalculate_nested_set($new_id, $parent_id = 0, $reset_ids = false)
+ {
+ if ($reset_ids)
+ {
+ $sql = 'UPDATE ' . $this->table_name . '
+ SET ' . $this->db->sql_build_array('UPDATE', array(
+ $this->table_columns['left_id'] => 0,
+ $this->table_columns['right_id'] => 0,
+ $this->table_columns['item_parents'] => '',
+ )) . '
+ ' . $this->get_sql_where('WHERE');
+ $this->db->sql_query($sql);
+ }
+
+ $sql = 'SELECT *
+ FROM ' . $this->table_name . '
+ WHERE ' . $this->table_columns['parent_id'] . ' = ' . (int) $parent_id . '
+ ' . $this->get_sql_where('AND') . '
+ ORDER BY ' . $this->table_columns['left_id'] . ', ' . $this->table_columns['item_id'] . ' ASC';
+ $result = $this->db->sql_query($sql);
+ while ($row = $this->db->sql_fetchrow($result))
+ {
+ // First we update the left_id for this module
+ if ($row[$this->table_columns['left_id']] != $new_id)
+ {
+ $sql = 'UPDATE ' . $this->table_name . '
+ SET ' . $this->db->sql_build_array('UPDATE', array(
+ $this->table_columns['left_id'] => $new_id,
+ $this->table_columns['item_parents'] => '',
+ )) . '
+ WHERE ' . $this->table_columns['item_id'] . ' = ' . $row[$this->table_columns['item_id']];
+ $this->db->sql_query($sql);
+ }
+ $new_id++;
+
+ // Then we go through any children and update their left/right id's
+ $new_id = $this->recalculate_nested_set($new_id, $row[$this->table_columns['item_id']]);
+
+ // Then we come back and update the right_id for this module
+ if ($row[$this->table_columns['right_id']] != $new_id)
+ {
+ $sql = 'UPDATE ' . $this->table_name . '
+ SET ' . $this->db->sql_build_array('UPDATE', array($this->table_columns['right_id'] => $new_id)) . '
+ WHERE ' . $this->table_columns['item_id'] . ' = ' . $row[$this->table_columns['item_id']];
+ $this->db->sql_query($sql);
+ }
+ $new_id++;
+ }
+ $this->db->sql_freeresult($result);
+
+ return $new_id;
+ }
+}
diff --git a/phpBB/includes/nestedset/item/base.php b/phpBB/includes/nestedset/item/base.php
new file mode 100644
index 0000000000..c3a7600827
--- /dev/null
+++ b/phpBB/includes/nestedset/item/base.php
@@ -0,0 +1,82 @@
+item_id;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function get_parent_id()
+ {
+ return (int) $this->parent_id;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function get_item_parents_data()
+ {
+ return (string) $this->item_parents_data;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function get_left_id()
+ {
+ return (int) $this->left_id;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function get_right_id()
+ {
+ return (int) $this->right_id;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function has_children()
+ {
+ return $this->right_id - $this->left_id > 1;
+ }
+}
From 57a05e7cf509f56309591aaf9344226a8f1a9a8e Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 16 Apr 2013 23:09:21 +0200
Subject: [PATCH 185/704] [ticket/11495] Add forum implementation of nestedset
PHPBB3-11495
---
phpBB/includes/nestedset/exception.php | 20 ++++
phpBB/includes/nestedset/forum.php | 121 ++++++++++++++++++++++++
phpBB/includes/nestedset/item/forum.php | 28 ++++++
3 files changed, 169 insertions(+)
create mode 100644 phpBB/includes/nestedset/exception.php
create mode 100644 phpBB/includes/nestedset/forum.php
create mode 100644 phpBB/includes/nestedset/item/forum.php
diff --git a/phpBB/includes/nestedset/exception.php b/phpBB/includes/nestedset/exception.php
new file mode 100644
index 0000000000..10937d0b29
--- /dev/null
+++ b/phpBB/includes/nestedset/exception.php
@@ -0,0 +1,20 @@
+ 'forum_id',
+ 'left_id' => 'left_id',
+ 'right_id' => 'right_id',
+ 'parent_id' => 'parent_id',
+ 'item_parents' => 'forum_parents',
+ );
+
+ /**
+ * Additional SQL restrictions
+ * Allows to have multiple nestedsets in one table
+ * Columns must be prefixed with %1$s
+ * @var String
+ */
+ protected $sql_where = '';
+
+ /**
+ * List of item properties to be cached in $item_parents
+ * @var array
+ */
+ protected $item_basic_data = array('forum_id', 'forum_name', 'forum_type');
+
+ /**
+ * Construct
+ *
+ * @param phpbb_db_driver $db Database connection
+ * @param phpbb_lock_db $lock Lock class used to lock the table when moving forums around
+ * @param string $table_name Table name
+ */
+ public function __construct(phpbb_db_driver $db, phpbb_lock_db $lock, $table_name)
+ {
+ $this->db = $db;
+ $this->lock = $lock;
+ $this->table_name = $table_name;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function move_children(phpbb_nestedset_item_interface $current_parent, phpbb_nestedset_item_interface $new_parent)
+ {
+ while (!$this->lock->acquire())
+ {
+ // Retry after 0.2 seconds
+ usleep(200 * 1000);
+ }
+
+ try
+ {
+ $return = parent::move_children($current_parent, $new_parent);
+ }
+ catch (phpbb_nestedset_exception $e)
+ {
+ $this->lock->release();
+ throw new phpbb_nestedset_exception('FORUM_NESTEDSET_' . $e->getMessage());
+ }
+ $this->lock->release();
+
+ return $return;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function set_parent(phpbb_nestedset_item_interface $item, phpbb_nestedset_item_interface $new_parent)
+ {
+ while (!$this->lock->acquire())
+ {
+ // Retry after 0.2 seconds
+ usleep(200 * 1000);
+ }
+
+ try
+ {
+ $return = parent::set_parent($item, $new_parent);
+ }
+ catch (phpbb_nestedset_exception $e)
+ {
+ $this->lock->release();
+ throw new phpbb_nestedset_exception('FORUM_NESTEDSET_' . $e->getMessage());
+ }
+ $this->lock->release();
+
+ return $return;
+ }
+}
diff --git a/phpBB/includes/nestedset/item/forum.php b/phpBB/includes/nestedset/item/forum.php
new file mode 100644
index 0000000000..9475517999
--- /dev/null
+++ b/phpBB/includes/nestedset/item/forum.php
@@ -0,0 +1,28 @@
+item_id = (int) $forum_row['forum_id'];
+ $this->parent_id = (int) $forum_row['parent_id'];
+ $this->left_id = (int) $forum_row['left_id'];
+ $this->right_id = (int) $forum_row['right_id'];
+ $this->item_parents_data = (string) $forum_row['forum_parents'];
+ }
+}
From dcee7961e80a0d188d887a13cc6409623bc1ff6e Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 16 Apr 2013 23:09:56 +0200
Subject: [PATCH 186/704] [ticket/11495] Add unit tests for the implemented
functions
PHPBB3-11495
---
tests/nestedset/fixtures/phpbb_forums.xml | 123 ++++
tests/nestedset/item_forum_test.php | 31 +
tests/nestedset/set_forum_add_remove_test.php | 195 ++++++
tests/nestedset/set_forum_base.php | 61 ++
tests/nestedset/set_forum_get_data_test.php | 96 +++
tests/nestedset/set_forum_move_test.php | 565 ++++++++++++++++++
.../nestedset/set_forum_recalculate_test.php | 72 +++
tests/nestedset/set_forum_test.php | 116 ++++
8 files changed, 1259 insertions(+)
create mode 100644 tests/nestedset/fixtures/phpbb_forums.xml
create mode 100644 tests/nestedset/item_forum_test.php
create mode 100644 tests/nestedset/set_forum_add_remove_test.php
create mode 100644 tests/nestedset/set_forum_base.php
create mode 100644 tests/nestedset/set_forum_get_data_test.php
create mode 100644 tests/nestedset/set_forum_move_test.php
create mode 100644 tests/nestedset/set_forum_recalculate_test.php
create mode 100644 tests/nestedset/set_forum_test.php
diff --git a/tests/nestedset/fixtures/phpbb_forums.xml b/tests/nestedset/fixtures/phpbb_forums.xml
new file mode 100644
index 0000000000..016c8ea7c5
--- /dev/null
+++ b/tests/nestedset/fixtures/phpbb_forums.xml
@@ -0,0 +1,123 @@
+
+
+
+ forum_id
+ parent_id
+ left_id
+ right_id
+ forum_parents
+ forum_name
+ forum_desc
+ forum_rules
+
+ 1
+ 0
+ 1
+ 6
+
+ Parent with two flat children
+
+
+
+
+ 2
+ 1
+ 2
+ 3
+
+ Flat child #1
+
+
+
+
+ 3
+ 1
+ 4
+ 5
+
+ Flat child #2
+
+
+
+
+ 4
+ 0
+ 7
+ 12
+
+ Parent with two nested children
+
+
+
+
+ 5
+ 4
+ 8
+ 11
+
+ Nested child #1
+
+
+
+
+ 6
+ 5
+ 9
+ 10
+
+ Nested child #2
+
+
+
+
+ 7
+ 0
+ 13
+ 22
+
+ Parent with flat and nested children
+
+
+
+
+ 8
+ 7
+ 14
+ 15
+
+ Mixed child #1
+
+
+
+
+ 9
+ 7
+ 16
+ 19
+
+ Mixed child #2
+
+
+
+
+ 10
+ 9
+ 17
+ 18
+
+ Nested child #1 of Mixed child #2
+
+
+
+
+ 11
+ 7
+ 20
+ 21
+
+ Mixed child #3
+
+
+
+
+
diff --git a/tests/nestedset/item_forum_test.php b/tests/nestedset/item_forum_test.php
new file mode 100644
index 0000000000..1ca89ebd2f
--- /dev/null
+++ b/tests/nestedset/item_forum_test.php
@@ -0,0 +1,31 @@
+ 1,
+ 'forum_id' => 5,
+ 'user_id' => 32,
+ 'left_id' => 2,
+ 'right_id' => 3,
+ 'forum_parents' => '',
+ );
+
+ $forum = new phpbb_nestedset_item_forum($forum_data);
+
+ $this->assertEquals($forum->get_item_id(), $forum_data['forum_id']);
+ $this->assertEquals($forum->get_left_id(), $forum_data['left_id']);
+ $this->assertEquals($forum->get_right_id(), $forum_data['right_id']);
+ $this->assertEquals($forum->get_parent_id(), $forum_data['parent_id']);
+ $this->assertEquals($forum->get_item_parents_data(), $forum_data['forum_parents']);
+ }
+}
diff --git a/tests/nestedset/set_forum_add_remove_test.php b/tests/nestedset/set_forum_add_remove_test.php
new file mode 100644
index 0000000000..f7d4980292
--- /dev/null
+++ b/tests/nestedset/set_forum_add_remove_test.php
@@ -0,0 +1,195 @@
+ 1, 'parent_id' => 0, 'left_id' => 0, 'right_id' => 0, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 0, 'left_id' => 0, 'right_id' => 0, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 0, 'left_id' => 0, 'right_id' => 0, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 16, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 13, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ ), array(
+ 1 => array('parent_id' => 0, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ 2 => array('parent_id' => 0, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => ''),
+ 3 => array('parent_id' => 0, 'left_id' => 21, 'right_id' => 22, 'forum_parents' => ''),
+ ), array(
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 16, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 13, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 0, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 0, 'left_id' => 21, 'right_id' => 22, 'forum_parents' => ''),
+ )),
+ array(2, array(2), array(
+ array('forum_id' => 2, 'parent_id' => 0, 'left_id' => 0, 'right_id' => 0, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 4, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 5, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 6, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => ''),
+ ), array(
+ 2 => array('parent_id' => 0, 'left_id' => 21, 'right_id' => 22, 'forum_parents' => '')
+ ), array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 4, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 5, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 6, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 0, 'left_id' => 21, 'right_id' => 22, 'forum_parents' => ''),
+ )),
+ );
+ }
+
+ /**
+ * @dataProvider remove_add_data
+ */
+ public function test_remove_add($forum_id, $expected_removed, $expected_remove_table, $expected_added, $expected_add_table)
+ {
+ $forum = new phpbb_nestedset_item_forum($this->forum_data[$forum_id]);
+
+ $removed_items = $this->set->remove($forum);
+
+ $this->assertEquals($expected_removed, $removed_items);
+
+ $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ FROM phpbb_forums
+ ORDER BY left_id, forum_id ASC");
+ $this->assertEquals($expected_remove_table, $this->db->sql_fetchrowset($result));
+
+ $added_items = array();
+ foreach ($removed_items as $item_id)
+ {
+ $forum = new phpbb_nestedset_item_forum($this->forum_data[$item_id]);
+ $added_items[$item_id] = $this->set->add($forum);
+ }
+ $this->assertEquals($expected_added, $added_items);
+
+ $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ FROM phpbb_forums
+ ORDER BY left_id, forum_id ASC");
+ $this->assertEquals($expected_add_table, $this->db->sql_fetchrowset($result));
+ }
+
+ public function delete_data()
+ {
+ return array(
+ array(1, array(1, 2, 3), array(
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 16, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 13, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ )),
+ array(2, array(2), array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 4, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 5, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 6, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => ''),
+ )),
+ );
+ }
+
+ /**
+ * @dataProvider delete_data
+ */
+ public function test_delete($forum_id, $expected_deleted, $expected)
+ {
+ $forum = new phpbb_nestedset_item_forum($this->forum_data[$forum_id]);
+
+ $this->assertEquals($expected_deleted, $this->set->delete($forum));
+
+ $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ FROM phpbb_forums
+ ORDER BY left_id, forum_id ASC");
+ $this->assertEquals($expected, $this->db->sql_fetchrowset($result));
+ }
+
+ public function insert_data()
+ {
+ return array(
+ array(array(
+ 'forum_desc' => '',
+ 'forum_rules' => '',
+ 'forum_id' => 12,
+ 'parent_id' => 0,
+ 'left_id' => 23,
+ 'right_id' => 24,
+ 'forum_parents' => '',
+ ), array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+
+ array('forum_id' => 12, 'parent_id' => 0, 'left_id' => 23, 'right_id' => 24, 'forum_parents' => ''),
+ )),
+ );
+ }
+
+ /**
+ * @dataProvider insert_data
+ */
+ public function test_insert($expected_data, $expected)
+ {
+ $this->assertEquals($expected_data, $this->set->insert(array(
+ 'forum_desc' => '',
+ 'forum_rules' => '',
+ )));
+
+ $result = $this->db->sql_query('SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ FROM phpbb_forums
+ ORDER BY left_id, forum_id ASC');
+ $this->assertEquals($expected, $this->db->sql_fetchrowset($result));
+ }
+}
diff --git a/tests/nestedset/set_forum_base.php b/tests/nestedset/set_forum_base.php
new file mode 100644
index 0000000000..4523f12897
--- /dev/null
+++ b/tests/nestedset/set_forum_base.php
@@ -0,0 +1,61 @@
+createXMLDataSet(dirname(__FILE__) . '/fixtures/phpbb_forums.xml');
+ }
+
+ protected $forum_data = array(
+ // \__/
+ 1 => array('forum_id' => 1, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ 2 => array('forum_id' => 2, 'parent_id' => 1, 'user_id' => 0, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ 3 => array('forum_id' => 3, 'parent_id' => 1, 'user_id' => 0, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+
+ // \ /
+ // \/
+ 4 => array('forum_id' => 4, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
+ 5 => array('forum_id' => 5, 'parent_id' => 4, 'user_id' => 0, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
+ 6 => array('forum_id' => 6, 'parent_id' => 5, 'user_id' => 0, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+
+ // \_ _/
+ // \/
+ 7 => array('forum_id' => 7, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ 8 => array('forum_id' => 8, 'parent_id' => 7, 'user_id' => 0, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ 9 => array('forum_id' => 9, 'parent_id' => 7, 'user_id' => 0, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ 10 => array('forum_id' => 10, 'parent_id' => 9, 'user_id' => 0, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ 11 => array('forum_id' => 11, 'parent_id' => 7, 'user_id' => 0, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+
+ // Unexisting forums
+ 0 => array('forum_id' => 0, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 0, 'right_id' => 0, 'forum_parents' => ''),
+ 200 => array('forum_id' => 200, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 0, 'right_id' => 0, 'forum_parents' => ''),
+ );
+
+ protected $set,
+ $config,
+ $lock,
+ $db;
+
+ public function setUp()
+ {
+ parent::setUp();
+
+ $this->db = $this->new_dbal();
+
+ global $config;
+
+ $config = $this->config = new phpbb_config(array('nestedset_forum_lock' => 0));
+ set_config(null, null, null, $this->config);
+
+ $this->lock = new phpbb_lock_db('nestedset_forum_lock', $this->config, $this->db);
+ $this->set = new phpbb_nestedset_forum($this->db, $this->lock, 'phpbb_forums');
+ }
+}
diff --git a/tests/nestedset/set_forum_get_data_test.php b/tests/nestedset/set_forum_get_data_test.php
new file mode 100644
index 0000000000..b7314efd15
--- /dev/null
+++ b/tests/nestedset/set_forum_get_data_test.php
@@ -0,0 +1,96 @@
+forum_data[$forum_id]);
+
+ $this->assertEquals($expected, array_keys($this->set->get_branch_data($forum, $type, $order_desc, $include_item)));
+ }
+
+ public function get_parent_data_data()
+ {
+ return array(
+ array(1, array(), array()),
+ array(1, array('forum_parents' => serialize(array())), array()),
+ array(2, array(), array(1)),
+ array(2, array('forum_parents' => serialize(array(1 => array()))), array(1)),
+ array(10, array(), array(7, 9)),
+ array(10, array('forum_parents' => serialize(array(7 => array(), 9 => array()))), array(7, 9)),
+ );
+ }
+
+ /**
+ * @dataProvider get_parent_data_data
+ */
+ public function test_get_parent_data($forum_id, $forum_data, $expected)
+ {
+ $data = array_merge($this->forum_data[$forum_id], $forum_data);
+ $forum = new phpbb_nestedset_item_forum($data);
+
+ $this->assertEquals($expected, array_keys($this->set->get_parent_data($forum)));
+ }
+}
diff --git a/tests/nestedset/set_forum_move_test.php b/tests/nestedset/set_forum_move_test.php
new file mode 100644
index 0000000000..7e1c03e60f
--- /dev/null
+++ b/tests/nestedset/set_forum_move_test.php
@@ -0,0 +1,565 @@
+ 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ array('Move last item down',
+ 7, -1, false, array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ array('Move first item down',
+ 1, -1, true, array(
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ array('Move second item up',
+ 4, 1, true, array(
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ array('Move last item up',
+ 7, 1, true, array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 16, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 13, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => ''),
+ )),
+ array('Move last item up by 2',
+ 7, 2, true, array(
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 4, 'right_id' => 7, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 5, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 16, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => ''),
+ )),
+ array('Move last item up by 100',
+ 7, 100, true, array(
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 4, 'right_id' => 7, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 5, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 16, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => ''),
+ )),
+ );
+ }
+
+ /**
+ * @dataProvider move_data
+ */
+ public function test_move($explain, $forum_id, $delta, $expected_moved, $expected)
+ {
+ $forum = new phpbb_nestedset_item_forum($this->forum_data[$forum_id]);
+
+ $this->assertEquals($expected_moved, $this->set->move($forum, $delta));
+
+ $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ FROM phpbb_forums
+ ORDER BY left_id, forum_id ASC");
+ $this->assertEquals($expected, $this->db->sql_fetchrowset($result));
+ }
+
+ public function move_down_data()
+ {
+ return array(
+ array('Move last item down',
+ 7, false, array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ array('Move first item down',
+ 1, true, array(
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ );
+ }
+
+ /**
+ * @dataProvider move_down_data
+ */
+ public function test_move_down($explain, $forum_id, $expected_moved, $expected)
+ {
+ $forum = new phpbb_nestedset_item_forum($this->forum_data[$forum_id]);
+
+ $this->assertEquals($expected_moved, $this->set->move_down($forum));
+
+ $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ FROM phpbb_forums
+ ORDER BY left_id, forum_id ASC");
+ $this->assertEquals($expected, $this->db->sql_fetchrowset($result));
+ }
+
+ public function move_up_data()
+ {
+ return array(
+ array('Move first item up',
+ 1, false, array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ array('Move second item up',
+ 4, true, array(
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ );
+ }
+
+ /**
+ * @dataProvider move_up_data
+ */
+ public function test_move_up($explain, $forum_id, $expected_moved, $expected)
+ {
+ $forum = new phpbb_nestedset_item_forum($this->forum_data[$forum_id]);
+
+ $this->assertEquals($expected_moved, $this->set->move_up($forum));
+
+ $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ FROM phpbb_forums
+ ORDER BY left_id, forum_id ASC");
+ $this->assertEquals($expected, $this->db->sql_fetchrowset($result));
+ }
+
+ public function move_children_data()
+ {
+ return array(
+ array('Item has no children',
+ 2, 1, false, array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ array('Move to same parent',
+ 4, 4, false, array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ array('Parent is 0',
+ 0, 1, false, array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ array('Move single child up',
+ 5, 1, true, array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 8, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 1, 'left_id' => 6, 'right_id' => 7, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ array('Move nested children up',
+ 4, 1, true, array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 1, 'left_id' => 6, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ array('Move single child down',
+ 5, 7, true, array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+
+ )),
+ array('Move nested children down',
+ 4, 7, true, array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 13, 'right_id' => 14, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 17, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => ''),
+ )),
+ array('Move single child to parent 0',
+ 5, 0, true, array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => ''),
+
+ array('forum_id' => 6, 'parent_id' => 0, 'left_id' => 21, 'right_id' => 22, 'forum_parents' => ''),
+ )),
+ array('Move nested children to parent 0',
+ 4, 0, true, array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 13, 'right_id' => 14, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 17, 'forum_parents' => ''),
+
+ array('forum_id' => 5, 'parent_id' => 0, 'left_id' => 19, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ );
+ }
+
+ /**
+ * @dataProvider move_children_data
+ */
+ public function test_move_children($explain, $forum_id, $target_id, $expected_moved, $expected)
+ {
+ $forum = new phpbb_nestedset_item_forum($this->forum_data[$forum_id]);
+ $target = new phpbb_nestedset_item_forum($this->forum_data[$target_id]);
+
+ $this->assertEquals($expected_moved, $this->set->move_children($forum, $target));
+
+ $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ FROM phpbb_forums
+ ORDER BY left_id, forum_id ASC");
+ $this->assertEquals($expected, $this->db->sql_fetchrowset($result));
+ }
+
+ public function move_children_throws_data()
+ {
+ return array(
+ array('New parent is child', 4, 5),
+ array('New parent is child 2', 7, 9),
+ array('New parent does not exist', 1, 200),
+ );
+ }
+
+ /**
+ * @dataProvider move_children_throws_data
+ *
+ * @expectedException phpbb_nestedset_exception
+ * @expectedExceptionMessage FORUM_NESTEDSET_INVALID_PARENT
+ */
+ public function test_move_children_throws($explain, $forum_id, $target_id)
+ {
+ $forum = new phpbb_nestedset_item_forum($this->forum_data[$forum_id]);
+ $target = new phpbb_nestedset_item_forum($this->forum_data[$target_id]);
+
+ $this->set->move_children($forum, $target);
+ }
+
+ public function set_parent_data()
+ {
+ return array(
+ array('Move single child up',
+ 6, 1, true, array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 8, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 1, 'left_id' => 6, 'right_id' => 7, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ array('Move nested children up',
+ 5, 1, true, array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 1, 'left_id' => 6, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ array('Move single child down',
+ 6, 7, true, array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ array('Move nested children down',
+ 5, 7, true, array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 13, 'right_id' => 14, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 17, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => ''),
+ )),
+ array('Move single child to parent 0',
+ 6, 0, true, array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => ''),
+
+ array('forum_id' => 6, 'parent_id' => 0, 'left_id' => 21, 'right_id' => 22, 'forum_parents' => ''),
+ )),
+ array('Move nested children to parent 0',
+ 5, 0, true, array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 13, 'right_id' => 14, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 17, 'forum_parents' => ''),
+
+ array('forum_id' => 5, 'parent_id' => 0, 'left_id' => 19, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ );
+ }
+
+ /**
+ * @dataProvider set_parent_data
+ */
+ public function test_set_parent($explain, $forum_id, $target_id, $expected_moved, $expected)
+ {
+ $forum = new phpbb_nestedset_item_forum($this->forum_data[$forum_id]);
+ $target = new phpbb_nestedset_item_forum($this->forum_data[$target_id]);
+
+ $this->assertEquals($expected_moved, $this->set->set_parent($forum, $target));
+
+ $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ FROM phpbb_forums
+ ORDER BY left_id, forum_id ASC");
+ $this->assertEquals($expected, $this->db->sql_fetchrowset($result));
+ }
+
+ public function set_parent_throws_data()
+ {
+ return array(
+ array('New parent is child', 4, 5),
+ array('New parent is child 2', 7, 9),
+ array('New parent does not exist', 1, 200),
+ );
+ }
+
+ /**
+ * @dataProvider set_parent_throws_data
+ *
+ * @expectedException phpbb_nestedset_exception
+ * @expectedExceptionMessage FORUM_NESTEDSET_INVALID_PARENT
+ */
+ public function test_set_parent_throws($explain, $forum_id, $target_id)
+ {
+ $forum = new phpbb_nestedset_item_forum($this->forum_data[$forum_id]);
+ $target = new phpbb_nestedset_item_forum($this->forum_data[$target_id]);
+
+ $this->set->set_parent($forum, $target);
+ }
+}
diff --git a/tests/nestedset/set_forum_recalculate_test.php b/tests/nestedset/set_forum_recalculate_test.php
new file mode 100644
index 0000000000..6ff7a372a4
--- /dev/null
+++ b/tests/nestedset/set_forum_recalculate_test.php
@@ -0,0 +1,72 @@
+ 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ );
+
+ public function recalculate_nested_set_data()
+ {
+ return array(
+ array('UPDATE phpbb_forums
+ SET left_id = 0,
+ right_id = 0', false),
+ array('UPDATE phpbb_forums
+ SET left_id = 28,
+ right_id = 28
+ WHERE left_id > 12', false),
+ array('UPDATE phpbb_forums
+ SET left_id = left_id * 2,
+ right_id = right_id * 2', false),
+ array('UPDATE phpbb_forums
+ SET left_id = left_id * 2,
+ right_id = right_id * 2
+ WHERE left_id > 12', false),
+ array('UPDATE phpbb_forums
+ SET left_id = left_id - 4,
+ right_id = right_id * 4
+ WHERE left_id > 4', false),
+ array('UPDATE phpbb_forums
+ SET left_id = 0,
+ right_id = 0
+ WHERE left_id > 12', true),
+ );
+ }
+
+ /**
+ * @dataProvider recalculate_nested_set_data
+ */
+ public function test_recalculate_nested_set($breaking_query, $reset_ids)
+ {
+ $result = $this->db->sql_query($breaking_query);
+
+ $this->assertEquals(23, $this->set->recalculate_nested_set(1, 0, $reset_ids));
+
+ $result = $this->db->sql_query('SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ FROM phpbb_forums
+ ORDER BY left_id, forum_id ASC');
+ $this->assertEquals($this->fixed_set, $this->db->sql_fetchrowset($result));
+ }
+}
diff --git a/tests/nestedset/set_forum_test.php b/tests/nestedset/set_forum_test.php
new file mode 100644
index 0000000000..ab4da1ff1e
--- /dev/null
+++ b/tests/nestedset/set_forum_test.php
@@ -0,0 +1,116 @@
+ 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ );
+ }
+
+ /**
+ * @dataProvider forum_constructor_data
+ */
+ public function test_forum_constructor($expected)
+ {
+ $result = $this->db->sql_query('SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ FROM phpbb_forums
+ ORDER BY left_id, forum_id ASC');
+ $this->assertEquals($expected, $this->db->sql_fetchrowset($result));
+ }
+
+ public function get_sql_where_data()
+ {
+ return array(
+ array('SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ FROM phpbb_forums
+ %s
+ ORDER BY left_id, forum_id ASC',
+ 'WHERE', '', array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ array('SELECT f.forum_id, f.parent_id, f.left_id, f.right_id, f.forum_parents
+ FROM phpbb_forums f
+ %s
+ ORDER BY f.left_id, f.forum_id ASC',
+ 'WHERE', 'f.', array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ )),
+ array('SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ FROM phpbb_forums
+ WHERE forum_id < 4 %s
+ ORDER BY left_id, forum_id ASC',
+ 'AND', '', array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ )),
+ array('SELECT f.forum_id, f.parent_id, f.left_id, f.right_id, f.forum_parents
+ FROM phpbb_forums f
+ WHERE f.forum_id < 4 %s
+ ORDER BY f.left_id, f.forum_id ASC',
+ 'AND', 'f.', array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ )),
+ );
+ }
+
+ /**
+ * @dataProvider get_sql_where_data
+ */
+ public function test_get_sql_where($sql_query, $operator, $column_prefix, $expected)
+ {
+ $result = $this->db->sql_query(sprintf($sql_query, $this->set->get_sql_where($operator, $column_prefix)));
+ $this->assertEquals($expected, $this->db->sql_fetchrowset($result));
+ }
+}
From 869e00a23b0400b9ad81c1130227cc4c29d6a38d Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Wed, 17 Apr 2013 17:45:49 +0200
Subject: [PATCH 187/704] [ticket/11362] Move phpbb_clean_path into a simple
filesystem service
PHPBB3-11362
---
phpBB/config/services.yml | 4 ++
phpBB/includes/filesystem.php | 52 +++++++++++++++++++
phpBB/includes/functions.php | 30 -----------
.../clean_path_test.php | 20 ++++---
4 files changed, 68 insertions(+), 38 deletions(-)
create mode 100644 phpBB/includes/filesystem.php
rename tests/{functions => filesystem}/clean_path_test.php (71%)
diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml
index b9c71844dc..5febe76c49 100644
--- a/phpBB/config/services.yml
+++ b/phpBB/config/services.yml
@@ -142,9 +142,13 @@ services:
- @ext.manager
- %core.root_path%
- @cache.driver
+ - @filesystem
- .%core.php_ext%
- _ext_finder
+ filesystem:
+ class: phpbb_filesystem
+
groupposition.legend:
class: phpbb_groupposition_legend
arguments:
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 @@
+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));
}
}
From 158bce02095b1fbff19955cbad19be3d1b1a3f80 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Wed, 17 Apr 2013 17:50:44 +0200
Subject: [PATCH 188/704] [ticket/11362] Use new filesystem class in finder
PHPBB3-11362
---
phpBB/includes/extension/finder.php | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/phpBB/includes/extension/finder.php b/phpBB/includes/extension/finder.php
index d9aacc38ff..02a9ebb8c3 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 = phpbb_clean_path($directory);
+ $directory = $this->filesystem->clean_path($directory);
$dir_len = strlen($directory);
if ($dir_len > 1 && $directory[$dir_len - 1] === '/')
From d7fb934a2f6fbce86563d692b9689eb5c76e31dd Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Wed, 17 Apr 2013 17:52:00 +0200
Subject: [PATCH 189/704] [ticket/11362] Replace other calls to
phpbb_clean_path
Need to instantiate the object manually here, as the container is not yet
set up.
PHPBB3-11362
---
phpBB/common.php | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/phpBB/common.php b/phpBB/common.php
index c33e2cbb1f..6dd65739fc 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;
From 423b310e2acbbc72814a4278a4cccf2900114f85 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Wed, 17 Apr 2013 18:43:19 +0200
Subject: [PATCH 190/704] [ticket/11362] Extension manager depends on
filesystem
PHPBB3-11362
---
phpBB/config/services.yml | 1 +
phpBB/includes/extension/manager.php | 6 ++++--
tests/dbal/migrator_test.php | 1 +
tests/extension/finder_test.php | 3 ++-
tests/extension/manager_test.php | 1 +
tests/extension/metadata_manager_test.php | 1 +
tests/mock/extension_manager.php | 1 +
tests/test_framework/phpbb_functional_test_case.php | 1 +
8 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml
index 5febe76c49..fb3e7aa964 100644
--- a/phpBB/config/services.yml
+++ b/phpBB/config/services.yml
@@ -131,6 +131,7 @@ services:
- @dbal.conn
- @config
- @migrator
+ - @filesystem
- %tables.ext%
- %core.root_path%
- .%core.php_ext%
diff --git a/phpBB/includes/extension/manager.php b/phpBB/includes/extension/manager.php
index 44a30c6280..de9a3937c3 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;
@@ -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/tests/dbal/migrator_test.php b/tests/dbal/migrator_test.php
index 89669b85ec..745d260b38 100644
--- a/tests/dbal/migrator_test.php
+++ b/tests/dbal/migrator_test.php
@@ -60,6 +60,7 @@ 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',
diff --git a/tests/extension/finder_test.php b/tests/extension/finder_test.php
index 3781591b19..73c07ef79a 100644
--- a/tests/extension/finder_test.php
+++ b/tests/extension/finder_test.php
@@ -164,7 +164,7 @@ class phpbb_extension_finder_test extends phpbb_test_case
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(
@@ -204,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..d6bcb97586 100644
--- a/tests/extension/manager_test.php
+++ b/tests/extension/manager_test.php
@@ -112,6 +112,7 @@ class phpbb_extension_manager_test extends phpbb_database_test_case
$db,
$config,
$migrator,
+ new phpbb_filesystem(),
'phpbb_ext',
dirname(__FILE__) . '/',
'.' . $php_ext,
diff --git a/tests/extension/metadata_manager_test.php b/tests/extension/metadata_manager_test.php
index 081a32e277..df7817b479 100644
--- a/tests/extension/metadata_manager_test.php
+++ b/tests/extension/metadata_manager_test.php
@@ -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/mock/extension_manager.php b/tests/mock/extension_manager.php
index fdda4cbadc..954f2bf1c4 100644
--- a/tests/mock/extension_manager.php
+++ b/tests/mock/extension_manager.php
@@ -14,5 +14,6 @@ class phpbb_mock_extension_manager extends phpbb_extension_manager
$this->phpbb_root_path = $phpbb_root_path;
$this->php_ext = '.php';
$this->extensions = $extensions;
+ $this->filesystem = new phpbb_filesystem();
}
}
diff --git a/tests/test_framework/phpbb_functional_test_case.php b/tests/test_framework/phpbb_functional_test_case.php
index 887dfea3b5..891fe237b3 100644
--- a/tests/test_framework/phpbb_functional_test_case.php
+++ b/tests/test_framework/phpbb_functional_test_case.php
@@ -153,6 +153,7 @@ class phpbb_functional_test_case extends phpbb_test_case
$db,
$config,
$migrator,
+ new phpbb_filesystem(),
self::$config['table_prefix'] . 'ext',
dirname(__FILE__) . '/',
'.' . $php_ext,
From ffe9f2a93e7bb91378e462b44a786252bddbd0be Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Wed, 17 Apr 2013 20:25:30 +0200
Subject: [PATCH 191/704] [ticket/11362] Fix service description of finder
PHPBB3-11362
---
phpBB/config/services.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml
index fb3e7aa964..19dfb3e23b 100644
--- a/phpBB/config/services.yml
+++ b/phpBB/config/services.yml
@@ -141,9 +141,9 @@ services:
class: phpbb_extension_finder
arguments:
- @ext.manager
+ - @filesystem
- %core.root_path%
- @cache.driver
- - @filesystem
- .%core.php_ext%
- _ext_finder
From e2875a7e170770a92fa02db3a75f1552cc33005a Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Wed, 17 Apr 2013 21:23:47 +0200
Subject: [PATCH 192/704] [ticket/10966] Introduce MySQL base class
PHPBB3-10966
---
phpBB/includes/db/driver/mysql.php | 124 +-------------------
phpBB/includes/db/driver/mysql_base.php | 145 ++++++++++++++++++++++++
phpBB/includes/db/driver/mysqli.php | 125 +-------------------
3 files changed, 148 insertions(+), 246 deletions(-)
create mode 100644 phpBB/includes/db/driver/mysql_base.php
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 = '';
@@ -135,14 +135,6 @@ class phpbb_db_driver_mysql extends phpbb_db_driver
return ($raw) ? $this->sql_server_version : 'MySQL ' . $this->sql_server_version;
}
- /**
- * {@inheritDoc}
- */
- public function sql_concatenate($expr1, $expr2)
- {
- return 'CONCAT(' . $expr1 . ', ' . $expr2 . ')';
- }
-
/**
* SQL Transaction
* @access private
@@ -226,25 +218,6 @@ class phpbb_db_driver_mysql extends phpbb_db_driver
return $this->query_result;
}
- /**
- * 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
*/
@@ -341,101 +314,6 @@ class phpbb_db_driver_mysql extends phpbb_db_driver
return @mysql_real_escape_string($msg, $this->db_connect_id);
}
- /**
- * 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 @@
+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
*/
@@ -127,14 +128,6 @@ class phpbb_db_driver_mysqli extends phpbb_db_driver
return ($raw) ? $this->sql_server_version : 'MySQL(i) ' . $this->sql_server_version;
}
- /**
- * {@inheritDoc}
- */
- public function sql_concatenate($expr1, $expr2)
- {
- return 'CONCAT(' . $expr1 . ', ' . $expr2 . ')';
- }
-
/**
* SQL Transaction
* @access private
@@ -217,25 +210,6 @@ class phpbb_db_driver_mysqli extends phpbb_db_driver
return $this->query_result;
}
- /**
- * 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
*/
@@ -327,101 +301,6 @@ class phpbb_db_driver_mysqli extends phpbb_db_driver
return @mysqli_real_escape_string($this->db_connect_id, $msg);
}
- /**
- * 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
From f831e3c66efe79841a0bcc01cf0b2d37e6d4e65c Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Wed, 17 Apr 2013 22:52:17 +0200
Subject: [PATCH 193/704] [ticket/11495] Use unique properties for the column
names
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 186 ++++++++++++++---------------
phpBB/includes/nestedset/forum.php | 11 +-
2 files changed, 95 insertions(+), 102 deletions(-)
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
index 7f4691b7e0..4dfe3e6203 100644
--- a/phpBB/includes/nestedset/base.php
+++ b/phpBB/includes/nestedset/base.php
@@ -28,15 +28,13 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
/**
* Column names in the table
- * @var array
+ * @var String
*/
- protected $table_columns = array(
- 'item_id' => 'item_id',
- 'left_id' => 'left_id',
- 'right_id' => 'right_id',
- 'parent_id' => 'parent_id',
- 'item_parents' => 'item_parents',
- );
+ protected $columns_item_id = 'item_id';
+ protected $columns_left_id = 'left_id';
+ protected $columns_right_id = 'right_id';
+ protected $columns_parent_id = 'parent_id';
+ protected $columns_item_parents = 'item_parents';
/**
* Additional SQL restrictions
@@ -72,18 +70,18 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
public function insert(array $additional_data)
{
$item_data = array_merge($additional_data, array(
- $this->table_columns['parent_id'] => 0,
- $this->table_columns['left_id'] => 0,
- $this->table_columns['right_id'] => 0,
- $this->table_columns['item_parents'] => '',
+ $this->column_parent_id => 0,
+ $this->column_left_id => 0,
+ $this->column_right_id => 0,
+ $this->column_item_parents => '',
));
- unset($item_data[$this->table_columns['item_id']]);
+ unset($item_data[$this->column_item_id]);
$sql = 'INSERT INTO ' . $this->table_name . ' ' . $this->db->sql_build_array('INSERT', $item_data);
$this->db->sql_query($sql);
- $item_data[$this->table_columns['item_id']] = (int) $this->db->sql_nextid();
+ $item_data[$this->column_item_id] = (int) $this->db->sql_nextid();
$item = new $this->item_class($item_data);
@@ -95,23 +93,23 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
*/
public function add(phpbb_nestedset_item_interface $item)
{
- $sql = 'SELECT MAX(' . $this->table_columns['right_id'] . ') AS ' . $this->table_columns['right_id'] . '
+ $sql = 'SELECT MAX(' . $this->column_right_id . ') AS ' . $this->column_right_id . '
FROM ' . $this->table_name . '
' . $this->get_sql_where('WHERE');
$result = $this->db->sql_query($sql);
- $current_max_right_id = (int) $this->db->sql_fetchfield($this->table_columns['right_id']);
+ $current_max_right_id = (int) $this->db->sql_fetchfield($this->column_right_id);
$this->db->sql_freeresult($result);
$update_item_data = array(
- $this->table_columns['parent_id'] => 0,
- $this->table_columns['left_id'] => $current_max_right_id + 1,
- $this->table_columns['right_id'] => $current_max_right_id + 2,
- $this->table_columns['item_parents'] => '',
+ $this->column_parent_id => 0,
+ $this->column_left_id => $current_max_right_id + 1,
+ $this->column_right_id => $current_max_right_id + 2,
+ $this->column_item_parents => '',
);
$sql = 'UPDATE ' . $this->table_name . '
SET ' . $this->db->sql_build_array('UPDATE', $update_item_data) . '
- WHERE ' . $this->table_columns['item_id'] . ' = ' . $item->get_item_id();
+ WHERE ' . $this->column_item_id . ' = ' . $item->get_item_id();
$this->db->sql_query($sql);
return $update_item_data;
@@ -144,7 +142,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$removed_items = $this->remove($item);
$sql = 'DELETE FROM ' . $this->table_name . '
- WHERE ' . $this->db->sql_in_set($this->table_columns['item_id'], $removed_items) . '
+ WHERE ' . $this->db->sql_in_set($this->column_item_id, $removed_items) . '
' . $this->get_sql_where('AND');
$this->db->sql_query($sql);
@@ -172,17 +170,17 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
*/
$sql = 'SELECT ' . implode(', ', $this->table_columns) . '
FROM ' . $this->table_name . '
- WHERE ' . $this->table_columns['parent_id'] . ' = ' . $item->get_parent_id() . '
+ WHERE ' . $this->column_parent_id . ' = ' . $item->get_parent_id() . '
' . $this->get_sql_where() . '
AND ';
if ($action == 'move_up')
{
- $sql .= $this->table_columns['right_id'] . ' < ' . $item->get_right_id() . ' ORDER BY ' . $this->table_columns['right_id'] . ' DESC';
+ $sql .= $this->column_right_id . ' < ' . $item->get_right_id() . ' ORDER BY ' . $this->column_right_id . ' DESC';
}
else
{
- $sql .= $this->table_columns['left_id'] . ' > ' . $item->get_left_id() . ' ORDER BY ' . $this->table_columns['left_id'] . ' ASC';
+ $sql .= $this->column_left_id . ' > ' . $item->get_left_id() . ' ORDER BY ' . $this->column_left_id . ' ASC';
}
$result = $this->db->sql_query_limit($sql, $delta);
@@ -232,18 +230,18 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
// Now do the dirty job
$sql = 'UPDATE ' . $this->table_name . '
- SET ' . $this->table_columns['left_id'] . ' = ' . $this->table_columns['left_id'] . ' + CASE
- WHEN ' . $this->table_columns['left_id'] . " BETWEEN {$move_up_left} AND {$move_up_right} THEN -{$diff_up}
+ SET ' . $this->column_left_id . ' = ' . $this->column_left_id . ' + CASE
+ WHEN ' . $this->column_left_id . " BETWEEN {$move_up_left} AND {$move_up_right} THEN -{$diff_up}
ELSE {$diff_down}
END,
- " . $this->table_columns['right_id'] . ' = ' . $this->table_columns['right_id'] . ' + CASE
- WHEN ' . $this->table_columns['right_id'] . " BETWEEN {$move_up_left} AND {$move_up_right} THEN -{$diff_up}
+ " . $this->column_right_id . ' = ' . $this->column_right_id . ' + CASE
+ WHEN ' . $this->column_right_id . " BETWEEN {$move_up_left} AND {$move_up_right} THEN -{$diff_up}
ELSE {$diff_down}
END,
- " . $this->table_columns['item_parents'] . " = ''
+ " . $this->column_item_parents . " = ''
WHERE
- " . $this->table_columns['left_id'] . " BETWEEN {$left_id} AND {$right_id}
- AND " . $this->table_columns['right_id'] . " BETWEEN {$left_id} AND {$right_id}
+ " . $this->column_left_id . " BETWEEN {$left_id} AND {$right_id}
+ AND " . $this->column_right_id . " BETWEEN {$left_id} AND {$right_id}
" . $this->get_sql_where();
$this->db->sql_query($sql);
@@ -284,7 +282,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
}
$diff = sizeof($move_items) * 2;
- $sql_exclude_moved_items = $this->db->sql_in_set($this->table_columns['item_id'], $move_items, true);
+ $sql_exclude_moved_items = $this->db->sql_in_set($this->column_item_id, $move_items, true);
$this->db->sql_transaction('begin');
@@ -295,7 +293,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
// Retrieve new-parent again, it may have been changed...
$sql = 'SELECT *
FROM ' . $this->table_name . '
- WHERE ' . $this->table_columns['item_id'] . ' = ' . $new_parent->get_item_id();
+ WHERE ' . $this->column_item_id . ' = ' . $new_parent->get_item_id();
$result = $this->db->sql_query($sql);
$parent_data = $this->db->sql_fetchrow($result);
$this->db->sql_freeresult($result);
@@ -321,7 +319,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
}
else
{
- $sql = 'SELECT MAX(' . $this->table_columns['right_id'] . ') AS ' . $this->table_columns['right_id'] . '
+ $sql = 'SELECT MAX(' . $this->column_right_id . ') AS ' . $this->column_right_id . '
FROM ' . $this->table_name . '
WHERE ' . $sql_exclude_moved_items . '
' . $this->get_sql_where('AND');
@@ -329,15 +327,15 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$row = $this->db->sql_fetchrow($result);
$this->db->sql_freeresult($result);
- $diff = ' + ' . ($row[$this->table_columns['right_id']] - $current_parent->get_left_id());
+ $diff = ' + ' . ($row[$this->column_right_id] - $current_parent->get_left_id());
}
$sql = 'UPDATE ' . $this->table_name . '
- SET ' . $this->table_columns['left_id'] . ' = ' . $this->table_columns['left_id'] . $diff . ',
- ' . $this->table_columns['right_id'] . ' = ' . $this->table_columns['right_id'] . $diff . ',
- ' . $this->table_columns['parent_id'] . ' = ' . $this->db->sql_case($this->table_columns['parent_id'] . ' = ' . $current_parent->get_item_id(), $new_parent->get_item_id(), $this->table_columns['parent_id']) . ',
- ' . $this->table_columns['item_parents'] . " = ''
- WHERE " . $this->db->sql_in_set($this->table_columns['item_id'], $move_items) . '
+ SET ' . $this->column_left_id . ' = ' . $this->column_left_id . $diff . ',
+ ' . $this->column_right_id . ' = ' . $this->column_right_id . $diff . ',
+ ' . $this->column_parent_id . ' = ' . $this->db->sql_case($this->column_parent_id . ' = ' . $current_parent->get_item_id(), $new_parent->get_item_id(), $this->column_parent_id) . ',
+ ' . $this->column_item_parents . " = ''
+ WHERE " . $this->db->sql_in_set($this->column_item_id, $move_items) . '
' . $this->get_sql_where('AND');
$this->db->sql_query($sql);
@@ -359,7 +357,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
}
$diff = sizeof($move_items) * 2;
- $sql_exclude_moved_items = $this->db->sql_in_set($this->table_columns['item_id'], $move_items, true);
+ $sql_exclude_moved_items = $this->db->sql_in_set($this->column_item_id, $move_items, true);
$this->db->sql_transaction('begin');
@@ -370,7 +368,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
// Retrieve new-parent again, it may have been changed...
$sql = 'SELECT *
FROM ' . $this->table_name . '
- WHERE ' . $this->table_columns['item_id'] . ' = ' . $new_parent->get_item_id();
+ WHERE ' . $this->column_item_id . ' = ' . $new_parent->get_item_id();
$result = $this->db->sql_query($sql);
$parent_data = $this->db->sql_fetchrow($result);
$this->db->sql_freeresult($result);
@@ -396,7 +394,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
}
else
{
- $sql = 'SELECT MAX(' . $this->table_columns['right_id'] . ') AS ' . $this->table_columns['right_id'] . '
+ $sql = 'SELECT MAX(' . $this->column_right_id . ') AS ' . $this->column_right_id . '
FROM ' . $this->table_name . '
WHERE ' . $sql_exclude_moved_items . '
' . $this->get_sql_where('AND');
@@ -404,15 +402,15 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$row = $this->db->sql_fetchrow($result);
$this->db->sql_freeresult($result);
- $diff = ' + ' . ($row[$this->table_columns['right_id']] - $item->get_left_id() + 1);
+ $diff = ' + ' . ($row[$this->column_right_id] - $item->get_left_id() + 1);
}
$sql = 'UPDATE ' . $this->table_name . '
- SET ' . $this->table_columns['left_id'] . ' = ' . $this->table_columns['left_id'] . $diff . ',
- ' . $this->table_columns['right_id'] . ' = ' . $this->table_columns['right_id'] . $diff . ',
- ' . $this->table_columns['parent_id'] . ' = ' . $this->db->sql_case($this->table_columns['item_id'] . ' = ' . $item->get_item_id(), $new_parent->get_item_id(), $this->table_columns['parent_id']) . ',
- ' . $this->table_columns['item_parents'] . " = ''
- WHERE " . $this->db->sql_in_set($this->table_columns['item_id'], $move_items) . '
+ SET ' . $this->column_left_id . ' = ' . $this->column_left_id . $diff . ',
+ ' . $this->column_right_id . ' = ' . $this->column_right_id . $diff . ',
+ ' . $this->column_parent_id . ' = ' . $this->db->sql_case($this->column_item_id . ' = ' . $item->get_item_id(), $new_parent->get_item_id(), $this->column_parent_id) . ',
+ ' . $this->column_item_parents . " = ''
+ WHERE " . $this->db->sql_in_set($this->column_item_id, $move_items) . '
' . $this->get_sql_where('AND');
$this->db->sql_query($sql);
@@ -429,16 +427,16 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
switch ($type)
{
case 'parents':
- $condition = 'i1.' . $this->table_columns['left_id'] . ' BETWEEN i2.' . $this->table_columns['left_id'] . ' AND i2.' . $this->table_columns['right_id'] . '';
+ $condition = 'i1.' . $this->column_left_id . ' BETWEEN i2.' . $this->column_left_id . ' AND i2.' . $this->column_right_id . '';
break;
case 'children':
- $condition = 'i2.' . $this->table_columns['left_id'] . ' BETWEEN i1.' . $this->table_columns['left_id'] . ' AND i1.' . $this->table_columns['right_id'] . '';
+ $condition = 'i2.' . $this->column_left_id . ' BETWEEN i1.' . $this->column_left_id . ' AND i1.' . $this->column_right_id . '';
break;
default:
- $condition = 'i2.' . $this->table_columns['left_id'] . ' BETWEEN i1.' . $this->table_columns['left_id'] . ' AND i1.' . $this->table_columns['right_id'] . '
- OR i1.' . $this->table_columns['left_id'] . ' BETWEEN i2.' . $this->table_columns['left_id'] . ' AND i2.' . $this->table_columns['right_id'];
+ $condition = 'i2.' . $this->column_left_id . ' BETWEEN i1.' . $this->column_left_id . ' AND i1.' . $this->column_right_id . '
+ OR i1.' . $this->column_left_id . ' BETWEEN i2.' . $this->column_left_id . ' AND i2.' . $this->column_right_id;
break;
}
@@ -448,19 +446,19 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
FROM ' . $this->table_name . ' i1
LEFT JOIN ' . $this->table_name . " i2
ON (($condition) " . $this->get_sql_where('AND', 'i2.') . ')
- WHERE i1.' . $this->table_columns['item_id'] . ' = ' . $item->get_item_id() . '
+ WHERE i1.' . $this->column_item_id . ' = ' . $item->get_item_id() . '
' . $this->get_sql_where('AND', 'i1.') . '
- ORDER BY i2.' . $this->table_columns['left_id'] . ' ' . ($order_desc ? 'ASC' : 'DESC');
+ ORDER BY i2.' . $this->column_left_id . ' ' . ($order_desc ? 'ASC' : 'DESC');
$result = $this->db->sql_query($sql);
while ($row = $this->db->sql_fetchrow($result))
{
- if (!$include_item && $item->get_item_id() === (int) $row[$this->table_columns['item_id']])
+ if (!$include_item && $item->get_item_id() === (int) $row[$this->column_item_id])
{
continue;
}
- $rows[$row[$this->table_columns['item_id']]] = $row;
+ $rows[$row[$this->column_item_id]] = $row;
}
$this->db->sql_freeresult($result);
@@ -483,23 +481,23 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
{
$sql = 'SELECT ' . implode(', ', $this->item_basic_data) . '
FROM ' . $this->table_name . '
- WHERE ' . $this->table_columns['left_id'] . ' < ' . $item->get_left_id() . '
- AND ' . $this->table_columns['right_id'] . ' > ' . $item->get_right_id() . '
+ WHERE ' . $this->column_left_id . ' < ' . $item->get_left_id() . '
+ AND ' . $this->column_right_id . ' > ' . $item->get_right_id() . '
' . $this->get_sql_where('AND') . '
- ORDER BY ' . $this->table_columns['left_id'] . ' ASC';
+ ORDER BY ' . $this->column_left_id . ' ASC';
$result = $this->db->sql_query($sql);
while ($row = $this->db->sql_fetchrow($result))
{
- $parents[$row[$this->table_columns['item_id']]] = $row;
+ $parents[$row[$this->column_item_id]] = $row;
}
$this->db->sql_freeresult($result);
$item_parents = serialize($parents);
$sql = 'UPDATE ' . $this->table_name . '
- SET ' . $this->table_columns['item_parents'] . " = '" . $this->db->sql_escape($item_parents) . "'
- WHERE " . $this->table_columns['parent_id'] . ' = ' . $item->get_parent_id();
+ SET ' . $this->column_item_parents . " = '" . $this->db->sql_escape($item_parents) . "'
+ WHERE " . $this->column_parent_id . ' = ' . $item->get_parent_id();
$this->db->sql_query($sql);
}
else
@@ -522,16 +520,16 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
protected function remove_subset(array $subset_items, phpbb_nestedset_item_interface $bounding_item, $set_subset_zero = true)
{
$diff = sizeof($subset_items) * 2;
- $sql_subset_items = $this->db->sql_in_set($this->table_columns['item_id'], $subset_items);
- $sql_not_subset_items = $this->db->sql_in_set($this->table_columns['item_id'], $subset_items, true);
+ $sql_subset_items = $this->db->sql_in_set($this->column_item_id, $subset_items);
+ $sql_not_subset_items = $this->db->sql_in_set($this->column_item_id, $subset_items, true);
- $sql_is_parent = $this->table_columns['left_id'] . ' <= ' . $bounding_item->get_right_id() . '
- AND ' . $this->table_columns['right_id'] . ' >= ' . $bounding_item->get_right_id();
+ $sql_is_parent = $this->column_left_id . ' <= ' . $bounding_item->get_right_id() . '
+ AND ' . $this->column_right_id . ' >= ' . $bounding_item->get_right_id();
- $sql_is_right = $this->table_columns['left_id'] . ' > ' . $bounding_item->get_right_id();
+ $sql_is_right = $this->column_left_id . ' > ' . $bounding_item->get_right_id();
- $set_left_id = $this->db->sql_case($sql_is_right, $this->table_columns['left_id'] . ' - ' . $diff, $this->table_columns['left_id']);
- $set_right_id = $this->db->sql_case($sql_is_parent . ' OR ' . $sql_is_right, $this->table_columns['right_id'] . ' - ' . $diff, $this->table_columns['right_id']);
+ $set_left_id = $this->db->sql_case($sql_is_right, $this->column_left_id . ' - ' . $diff, $this->column_left_id);
+ $set_right_id = $this->db->sql_case($sql_is_parent . ' OR ' . $sql_is_right, $this->column_right_id . ' - ' . $diff, $this->column_right_id);
if ($set_subset_zero)
{
@@ -540,10 +538,10 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
}
$sql = 'UPDATE ' . $this->table_name . '
- SET ' . $this->table_columns['left_id'] . ' = ' . $set_left_id . ',
- ' . $this->table_columns['right_id'] . ' = ' . $set_right_id . ',
- ' . (($set_subset_zero) ? $this->table_columns['parent_id'] . ' = ' . $this->db->sql_case($sql_subset_items, 0, $this->table_columns['parent_id']) . ',' : '') . '
- ' . $this->table_columns['item_parents'] . " = ''
+ SET ' . $this->column_left_id . ' = ' . $set_left_id . ',
+ ' . $this->column_right_id . ' = ' . $set_right_id . ',
+ ' . (($set_subset_zero) ? $this->column_parent_id . ' = ' . $this->db->sql_case($sql_subset_items, 0, $this->column_parent_id) . ',' : '') . '
+ ' . $this->column_item_parents . " = ''
" . ((!$set_subset_zero) ? ' WHERE ' . $sql_not_subset_items . ' ' . $this->get_sql_where('AND') : $this->get_sql_where('WHERE'));
$this->db->sql_query($sql);
}
@@ -558,15 +556,15 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
protected function prepare_adding_subset(array $subset_items, phpbb_nestedset_item_interface $new_parent)
{
$diff = sizeof($subset_items) * 2;
- $sql_not_subset_items = $this->db->sql_in_set($this->table_columns['item_id'], $subset_items, true);
+ $sql_not_subset_items = $this->db->sql_in_set($this->column_item_id, $subset_items, true);
- $set_left_id = $this->db->sql_case($this->table_columns['left_id'] . ' > ' . $new_parent->get_right_id(), $this->table_columns['left_id'] . ' + ' . $diff, $this->table_columns['left_id']);
- $set_right_id = $this->db->sql_case($this->table_columns['right_id'] . ' >= ' . $new_parent->get_right_id(), $this->table_columns['right_id'] . ' + ' . $diff, $this->table_columns['right_id']);
+ $set_left_id = $this->db->sql_case($this->column_left_id . ' > ' . $new_parent->get_right_id(), $this->column_left_id . ' + ' . $diff, $this->column_left_id);
+ $set_right_id = $this->db->sql_case($this->column_right_id . ' >= ' . $new_parent->get_right_id(), $this->column_right_id . ' + ' . $diff, $this->column_right_id);
$sql = 'UPDATE ' . $this->table_name . '
- SET ' . $this->table_columns['left_id'] . ' = ' . $set_left_id . ',
- ' . $this->table_columns['right_id'] . ' = ' . $set_right_id . ',
- ' . $this->table_columns['item_parents'] . " = ''
+ SET ' . $this->column_left_id . ' = ' . $set_left_id . ',
+ ' . $this->column_right_id . ' = ' . $set_right_id . ',
+ ' . $this->column_item_parents . " = ''
WHERE " . $sql_not_subset_items . '
' . $this->get_sql_where('AND');
$this->db->sql_query($sql);
@@ -583,9 +581,9 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
{
$sql = 'UPDATE ' . $this->table_name . '
SET ' . $this->db->sql_build_array('UPDATE', array(
- $this->table_columns['left_id'] => 0,
- $this->table_columns['right_id'] => 0,
- $this->table_columns['item_parents'] => '',
+ $this->column_left_id => 0,
+ $this->column_right_id => 0,
+ $this->column_item_parents => '',
)) . '
' . $this->get_sql_where('WHERE');
$this->db->sql_query($sql);
@@ -593,34 +591,34 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$sql = 'SELECT *
FROM ' . $this->table_name . '
- WHERE ' . $this->table_columns['parent_id'] . ' = ' . (int) $parent_id . '
+ WHERE ' . $this->column_parent_id . ' = ' . (int) $parent_id . '
' . $this->get_sql_where('AND') . '
- ORDER BY ' . $this->table_columns['left_id'] . ', ' . $this->table_columns['item_id'] . ' ASC';
+ ORDER BY ' . $this->column_left_id . ', ' . $this->column_item_id . ' ASC';
$result = $this->db->sql_query($sql);
while ($row = $this->db->sql_fetchrow($result))
{
// First we update the left_id for this module
- if ($row[$this->table_columns['left_id']] != $new_id)
+ if ($row[$this->column_left_id] != $new_id)
{
$sql = 'UPDATE ' . $this->table_name . '
SET ' . $this->db->sql_build_array('UPDATE', array(
- $this->table_columns['left_id'] => $new_id,
- $this->table_columns['item_parents'] => '',
+ $this->column_left_id => $new_id,
+ $this->column_item_parents => '',
)) . '
- WHERE ' . $this->table_columns['item_id'] . ' = ' . $row[$this->table_columns['item_id']];
+ WHERE ' . $this->column_item_id . ' = ' . $row[$this->column_item_id];
$this->db->sql_query($sql);
}
$new_id++;
// Then we go through any children and update their left/right id's
- $new_id = $this->recalculate_nested_set($new_id, $row[$this->table_columns['item_id']]);
+ $new_id = $this->recalculate_nested_set($new_id, $row[$this->column_item_id]);
// Then we come back and update the right_id for this module
- if ($row[$this->table_columns['right_id']] != $new_id)
+ if ($row[$this->column_right_id] != $new_id)
{
$sql = 'UPDATE ' . $this->table_name . '
- SET ' . $this->db->sql_build_array('UPDATE', array($this->table_columns['right_id'] => $new_id)) . '
- WHERE ' . $this->table_columns['item_id'] . ' = ' . $row[$this->table_columns['item_id']];
+ SET ' . $this->db->sql_build_array('UPDATE', array($this->column_right_id => $new_id)) . '
+ WHERE ' . $this->column_item_id . ' = ' . $row[$this->column_item_id];
$this->db->sql_query($sql);
}
$new_id++;
diff --git a/phpBB/includes/nestedset/forum.php b/phpBB/includes/nestedset/forum.php
index 7ad4d2c85e..b1df3c7e45 100644
--- a/phpBB/includes/nestedset/forum.php
+++ b/phpBB/includes/nestedset/forum.php
@@ -31,15 +31,10 @@ class phpbb_nestedset_forum extends phpbb_nestedset_base
/**
* Column names in the table
- * @var array
+ * @var String
*/
- protected $table_columns = array(
- 'item_id' => 'forum_id',
- 'left_id' => 'left_id',
- 'right_id' => 'right_id',
- 'parent_id' => 'parent_id',
- 'item_parents' => 'forum_parents',
- );
+ protected $columns_item_id = 'forum_id';
+ protected $columns_item_parents = 'forum_parents';
/**
* Additional SQL restrictions
From 5c379db085bab4ff0f807a9e7dfe6edb52ef25ab Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Wed, 17 Apr 2013 22:56:12 +0200
Subject: [PATCH 194/704] [ticket/11495] Fix description of get_sql_where
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
index 4dfe3e6203..ae6a77dc8d 100644
--- a/phpBB/includes/nestedset/base.php
+++ b/phpBB/includes/nestedset/base.php
@@ -50,9 +50,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
protected $item_basic_data = array('*');
/**
- * Delete an item from the nested set (also deletes the rows form the table)
- *
- * Also deletes all subitems from the nested set
+ * Returns additional sql where restrictions
*
* @param string $operator SQL operator that needs to be prepended to sql_where,
* if it is not empty.
From 8c3443ba996c57a0420e4559022c97c2547404c0 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 18 Apr 2013 00:13:19 +0200
Subject: [PATCH 195/704] [ticket/11495] Use array directly instead of
phpbb_nestedset_item_interface
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 150 ++++++++++++-------------
phpBB/includes/nestedset/forum.php | 4 +-
phpBB/includes/nestedset/interface.php | 46 ++++----
3 files changed, 97 insertions(+), 103 deletions(-)
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
index ae6a77dc8d..56422f52a5 100644
--- a/phpBB/includes/nestedset/base.php
+++ b/phpBB/includes/nestedset/base.php
@@ -81,15 +81,13 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$item_data[$this->column_item_id] = (int) $this->db->sql_nextid();
- $item = new $this->item_class($item_data);
-
- return array_merge($item_data, $this->add($item));
+ return array_merge($item_data, $this->add($item_data));
}
/**
* @inheritdoc
*/
- public function add(phpbb_nestedset_item_interface $item)
+ public function add(array $item)
{
$sql = 'SELECT MAX(' . $this->column_right_id . ') AS ' . $this->column_right_id . '
FROM ' . $this->table_name . '
@@ -107,7 +105,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$sql = 'UPDATE ' . $this->table_name . '
SET ' . $this->db->sql_build_array('UPDATE', $update_item_data) . '
- WHERE ' . $this->column_item_id . ' = ' . $item->get_item_id();
+ WHERE ' . $this->column_item_id . ' = ' . (int) $item[$this->column_item_id];
$this->db->sql_query($sql);
return $update_item_data;
@@ -116,15 +114,15 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
/**
* @inheritdoc
*/
- public function remove(phpbb_nestedset_item_interface $item)
+ public function remove(array $item)
{
- if ($item->has_children())
+ if ($item[$this->column_right_id] - $item[$this->column_left_id] > 1)
{
$items = array_keys($this->get_branch_data($item, 'children'));
}
else
{
- $items = array($item->get_item_id());
+ $items = array((int) $item[$this->column_item_id]);
}
$this->remove_subset($items, $item);
@@ -135,7 +133,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
/**
* @inheritdoc
*/
- public function delete(phpbb_nestedset_item_interface $item)
+ public function delete(array $item)
{
$removed_items = $this->remove($item);
@@ -150,7 +148,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
/**
* @inheritdoc
*/
- public function move(phpbb_nestedset_item_interface $item, $delta)
+ public function move(array $item, $delta)
{
if ($delta == 0)
{
@@ -168,17 +166,17 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
*/
$sql = 'SELECT ' . implode(', ', $this->table_columns) . '
FROM ' . $this->table_name . '
- WHERE ' . $this->column_parent_id . ' = ' . $item->get_parent_id() . '
+ WHERE ' . $this->column_parent_id . ' = ' . (int) $item[$this->column_parent_id] . '
' . $this->get_sql_where() . '
AND ';
if ($action == 'move_up')
{
- $sql .= $this->column_right_id . ' < ' . $item->get_right_id() . ' ORDER BY ' . $this->column_right_id . ' DESC';
+ $sql .= $this->column_right_id . ' < ' . (int) $item[$this->column_right_id] . ' ORDER BY ' . $this->column_right_id . ' DESC';
}
else
{
- $sql .= $this->column_left_id . ' > ' . $item->get_left_id() . ' ORDER BY ' . $this->column_left_id . ' ASC';
+ $sql .= $this->column_left_id . ' > ' . (int) $item[$this->column_left_id] . ' ORDER BY ' . $this->column_left_id . ' ASC';
}
$result = $this->db->sql_query_limit($sql, $delta);
@@ -186,7 +184,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$target = null;
while ($row = $this->db->sql_fetchrow($result))
{
- $target = new $this->item_class($row);
+ $target = $row;
}
$this->db->sql_freeresult($result);
@@ -205,25 +203,25 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
*/
if ($action == 'move_up')
{
- $left_id = $target->get_left_id();
- $right_id = $item->get_right_id();
+ $left_id = $target[$this->column_left_id];
+ $right_id = (int) $item[$this->column_right_id];
- $diff_up = $item->get_left_id() - $target->get_left_id();
- $diff_down = $item->get_right_id() + 1 - $item->get_left_id();
+ $diff_up = (int) $item[$this->column_left_id] - $target[$this->column_left_id];
+ $diff_down = (int) $item[$this->column_right_id] + 1 - (int) $item[$this->column_left_id];
- $move_up_left = $item->get_left_id();
- $move_up_right = $item->get_right_id();
+ $move_up_left = (int) $item[$this->column_left_id];
+ $move_up_right = (int) $item[$this->column_right_id];
}
else
{
- $left_id = $item->get_left_id();
- $right_id = $target->get_right_id();
+ $left_id = (int) $item[$this->column_left_id];
+ $right_id = $target[$this->column_right_id];
- $diff_up = $item->get_right_id() + 1 - $item->get_left_id();
- $diff_down = $target->get_right_id() - $item->get_right_id();
+ $diff_up = (int) $item[$this->column_right_id] + 1 - (int) $item[$this->column_left_id];
+ $diff_down = $target[$this->column_right_id] - (int) $item[$this->column_right_id];
- $move_up_left = $item->get_right_id() + 1;
- $move_up_right = $target->get_right_id();
+ $move_up_left = (int) $item[$this->column_right_id] + 1;
+ $move_up_right = $target[$this->column_right_id];
}
// Now do the dirty job
@@ -249,7 +247,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
/**
* @inheritdoc
*/
- public function move_down(phpbb_nestedset_item_interface $item)
+ public function move_down(array $item)
{
return $this->move($item, -1);
}
@@ -257,7 +255,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
/**
* @inheritdoc
*/
- public function move_up(phpbb_nestedset_item_interface $item)
+ public function move_up(array $item)
{
return $this->move($item, 1);
}
@@ -265,16 +263,16 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
/**
* @inheritdoc
*/
- public function move_children(phpbb_nestedset_item_interface $current_parent, phpbb_nestedset_item_interface $new_parent)
+ public function move_children(array $current_parent, array $new_parent)
{
- if (!$current_parent->has_children() || !$current_parent->get_item_id() || $current_parent->get_item_id() == $new_parent->get_item_id())
+ if (($current_parent[$this->column_right_id] - $current_parent[$this->column_left_id]) <= 1 || !$current_parent[$this->column_item_id] || $current_parent[$this->column_item_id] == $new_parent[$this->column_item_id])
{
return false;
}
$move_items = array_keys($this->get_branch_data($current_parent, 'children', true, false));
- if (in_array($new_parent->get_item_id(), $move_items))
+ if (in_array($new_parent[$this->column_item_id], $move_items))
{
throw new phpbb_nestedset_exception('INVALID_PARENT');
}
@@ -286,33 +284,31 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$this->remove_subset($move_items, $current_parent, false);
- if ($new_parent->get_item_id())
+ if ($new_parent[$this->column_item_id])
{
// Retrieve new-parent again, it may have been changed...
$sql = 'SELECT *
FROM ' . $this->table_name . '
- WHERE ' . $this->column_item_id . ' = ' . $new_parent->get_item_id();
+ WHERE ' . $this->column_item_id . ' = ' . (int) $new_parent[$this->column_item_id];
$result = $this->db->sql_query($sql);
- $parent_data = $this->db->sql_fetchrow($result);
+ $new_parent = $this->db->sql_fetchrow($result);
$this->db->sql_freeresult($result);
- if (!$parent_data)
+ if (!$new_parent)
{
$this->db->sql_transaction('rollback');
throw new phpbb_nestedset_exception('INVALID_PARENT');
}
- $new_parent = new $this->item_class($parent_data);
-
$new_right_id = $this->prepare_adding_subset($move_items, $new_parent);
- if ($new_right_id > $current_parent->get_right_id())
+ if ($new_right_id > $current_parent[$this->column_right_id])
{
- $diff = ' + ' . ($new_right_id - $current_parent->get_right_id());
+ $diff = ' + ' . ($new_right_id - $current_parent[$this->column_right_id]);
}
else
{
- $diff = ' - ' . abs($new_right_id - $current_parent->get_right_id());
+ $diff = ' - ' . abs($new_right_id - $current_parent[$this->column_right_id]);
}
}
else
@@ -325,13 +321,13 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$row = $this->db->sql_fetchrow($result);
$this->db->sql_freeresult($result);
- $diff = ' + ' . ($row[$this->column_right_id] - $current_parent->get_left_id());
+ $diff = ' + ' . ($row[$this->column_right_id] - $current_parent[$this->column_left_id]);
}
$sql = 'UPDATE ' . $this->table_name . '
SET ' . $this->column_left_id . ' = ' . $this->column_left_id . $diff . ',
' . $this->column_right_id . ' = ' . $this->column_right_id . $diff . ',
- ' . $this->column_parent_id . ' = ' . $this->db->sql_case($this->column_parent_id . ' = ' . $current_parent->get_item_id(), $new_parent->get_item_id(), $this->column_parent_id) . ',
+ ' . $this->column_parent_id . ' = ' . $this->db->sql_case($this->column_parent_id . ' = ' . (int) $current_parent[$this->column_item_id], (int) $new_parent[$this->column_item_id], $this->column_parent_id) . ',
' . $this->column_item_parents . " = ''
WHERE " . $this->db->sql_in_set($this->column_item_id, $move_items) . '
' . $this->get_sql_where('AND');
@@ -345,11 +341,11 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
/**
* @inheritdoc
*/
- public function set_parent(phpbb_nestedset_item_interface $item, phpbb_nestedset_item_interface $new_parent)
+ public function set_parent(array $item, array $new_parent)
{
$move_items = array_keys($this->get_branch_data($item, 'children'));
- if (in_array($new_parent->get_item_id(), $move_items))
+ if (in_array($new_parent[$this->column_item_id], $move_items))
{
throw new phpbb_nestedset_exception('INVALID_PARENT');
}
@@ -361,33 +357,31 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$this->remove_subset($move_items, $item, false);
- if ($new_parent->get_item_id())
+ if ($new_parent[$this->column_item_id])
{
// Retrieve new-parent again, it may have been changed...
$sql = 'SELECT *
FROM ' . $this->table_name . '
- WHERE ' . $this->column_item_id . ' = ' . $new_parent->get_item_id();
+ WHERE ' . $this->column_item_id . ' = ' . (int) $new_parent[$this->column_item_id];
$result = $this->db->sql_query($sql);
- $parent_data = $this->db->sql_fetchrow($result);
+ $new_parent = $this->db->sql_fetchrow($result);
$this->db->sql_freeresult($result);
- if (!$parent_data)
+ if (!$new_parent)
{
$this->db->sql_transaction('rollback');
throw new phpbb_nestedset_exception('INVALID_PARENT');
}
- $new_parent = new $this->item_class($parent_data);
-
$new_right_id = $this->prepare_adding_subset($move_items, $new_parent);
- if ($new_right_id > $item->get_right_id())
+ if ($new_right_id > (int) $item[$this->column_right_id])
{
- $diff = ' + ' . ($new_right_id - $item->get_right_id() - 1);
+ $diff = ' + ' . ($new_right_id - (int) $item[$this->column_right_id] - 1);
}
else
{
- $diff = ' - ' . abs($new_right_id - $item->get_right_id() - 1);
+ $diff = ' - ' . abs($new_right_id - (int) $item[$this->column_right_id] - 1);
}
}
else
@@ -400,13 +394,13 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$row = $this->db->sql_fetchrow($result);
$this->db->sql_freeresult($result);
- $diff = ' + ' . ($row[$this->column_right_id] - $item->get_left_id() + 1);
+ $diff = ' + ' . ($row[$this->column_right_id] - (int) $item[$this->column_left_id] + 1);
}
$sql = 'UPDATE ' . $this->table_name . '
SET ' . $this->column_left_id . ' = ' . $this->column_left_id . $diff . ',
' . $this->column_right_id . ' = ' . $this->column_right_id . $diff . ',
- ' . $this->column_parent_id . ' = ' . $this->db->sql_case($this->column_item_id . ' = ' . $item->get_item_id(), $new_parent->get_item_id(), $this->column_parent_id) . ',
+ ' . $this->column_parent_id . ' = ' . $this->db->sql_case($this->column_item_id . ' = ' . (int) $item[$this->column_item_id], $new_parent[$this->column_item_id], $this->column_parent_id) . ',
' . $this->column_item_parents . " = ''
WHERE " . $this->db->sql_in_set($this->column_item_id, $move_items) . '
' . $this->get_sql_where('AND');
@@ -420,7 +414,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
/**
* @inheritdoc
*/
- public function get_branch_data(phpbb_nestedset_item_interface $item, $type = 'all', $order_desc = true, $include_item = true)
+ public function get_branch_data(array $item, $type = 'all', $order_desc = true, $include_item = true)
{
switch ($type)
{
@@ -444,19 +438,19 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
FROM ' . $this->table_name . ' i1
LEFT JOIN ' . $this->table_name . " i2
ON (($condition) " . $this->get_sql_where('AND', 'i2.') . ')
- WHERE i1.' . $this->column_item_id . ' = ' . $item->get_item_id() . '
+ WHERE i1.' . $this->column_item_id . ' = ' . (int) $item[$this->column_item_id] . '
' . $this->get_sql_where('AND', 'i1.') . '
ORDER BY i2.' . $this->column_left_id . ' ' . ($order_desc ? 'ASC' : 'DESC');
$result = $this->db->sql_query($sql);
while ($row = $this->db->sql_fetchrow($result))
{
- if (!$include_item && $item->get_item_id() === (int) $row[$this->column_item_id])
+ if (!$include_item && $item[$this->column_item_id] == $row[$this->column_item_id])
{
continue;
}
- $rows[$row[$this->column_item_id]] = $row;
+ $rows[(int) $row[$this->column_item_id]] = $row;
}
$this->db->sql_freeresult($result);
@@ -470,17 +464,17 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
*
* @inheritdoc
*/
- public function get_parent_data(phpbb_nestedset_item_interface $item)
+ public function get_parent_data(array $item)
{
$parents = array();
- if ($item->get_parent_id())
+ if ((int) $item[$this->column_parent_id])
{
- if (!$item->get_item_parents_data())
+ if (!$item[$this->column_item_parents])
{
$sql = 'SELECT ' . implode(', ', $this->item_basic_data) . '
FROM ' . $this->table_name . '
- WHERE ' . $this->column_left_id . ' < ' . $item->get_left_id() . '
- AND ' . $this->column_right_id . ' > ' . $item->get_right_id() . '
+ WHERE ' . $this->column_left_id . ' < ' . (int) $item[$this->column_left_id] . '
+ AND ' . $this->column_right_id . ' > ' . (int) $item[$this->column_right_id] . '
' . $this->get_sql_where('AND') . '
ORDER BY ' . $this->column_left_id . ' ASC';
$result = $this->db->sql_query($sql);
@@ -495,12 +489,12 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$sql = 'UPDATE ' . $this->table_name . '
SET ' . $this->column_item_parents . " = '" . $this->db->sql_escape($item_parents) . "'
- WHERE " . $this->column_parent_id . ' = ' . $item->get_parent_id();
+ WHERE " . $this->column_parent_id . ' = ' . (int) $item[$this->column_parent_id];
$this->db->sql_query($sql);
}
else
{
- $parents = unserialize($item->get_item_parents_data());
+ $parents = unserialize($item[$this->column_item_parents]);
}
}
@@ -511,20 +505,20 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
* Remove a subset from the nested set
*
* @param array $subset_items Subset of items to remove
- * @param phpbb_nestedset_item_interface $bounding_item Item containing the right bound of the subset
+ * @param array $bounding_item Item containing the right bound of the subset
* @param bool $set_subset_zero Should the parent, left and right id of the item be set to 0, or kept unchanged?
* @return null
*/
- protected function remove_subset(array $subset_items, phpbb_nestedset_item_interface $bounding_item, $set_subset_zero = true)
+ protected function remove_subset(array $subset_items, array $bounding_item, $set_subset_zero = true)
{
$diff = sizeof($subset_items) * 2;
$sql_subset_items = $this->db->sql_in_set($this->column_item_id, $subset_items);
$sql_not_subset_items = $this->db->sql_in_set($this->column_item_id, $subset_items, true);
- $sql_is_parent = $this->column_left_id . ' <= ' . $bounding_item->get_right_id() . '
- AND ' . $this->column_right_id . ' >= ' . $bounding_item->get_right_id();
+ $sql_is_parent = $this->column_left_id . ' <= ' . (int) $bounding_item[$this->column_right_id] . '
+ AND ' . $this->column_right_id . ' >= ' . (int) $bounding_item[$this->column_right_id];
- $sql_is_right = $this->column_left_id . ' > ' . $bounding_item->get_right_id();
+ $sql_is_right = $this->column_left_id . ' > ' . (int) $bounding_item[$this->column_right_id];
$set_left_id = $this->db->sql_case($sql_is_right, $this->column_left_id . ' - ' . $diff, $this->column_left_id);
$set_right_id = $this->db->sql_case($sql_is_parent . ' OR ' . $sql_is_right, $this->column_right_id . ' - ' . $diff, $this->column_right_id);
@@ -548,16 +542,16 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
* Add a subset to the nested set
*
* @param array $subset_items Subset of items to add
- * @param phpbb_nestedset_item_interface $new_parent Item containing the right bound of the new parent
+ * @param array $new_parent Item containing the right bound of the new parent
* @return int New right id of the parent item
*/
- protected function prepare_adding_subset(array $subset_items, phpbb_nestedset_item_interface $new_parent)
+ protected function prepare_adding_subset(array $subset_items, array $new_parent)
{
$diff = sizeof($subset_items) * 2;
$sql_not_subset_items = $this->db->sql_in_set($this->column_item_id, $subset_items, true);
- $set_left_id = $this->db->sql_case($this->column_left_id . ' > ' . $new_parent->get_right_id(), $this->column_left_id . ' + ' . $diff, $this->column_left_id);
- $set_right_id = $this->db->sql_case($this->column_right_id . ' >= ' . $new_parent->get_right_id(), $this->column_right_id . ' + ' . $diff, $this->column_right_id);
+ $set_left_id = $this->db->sql_case($this->column_left_id . ' > ' . (int) $new_parent[$this->column_right_id], $this->column_left_id . ' + ' . $diff, $this->column_left_id);
+ $set_right_id = $this->db->sql_case($this->column_right_id . ' >= ' . (int) $new_parent[$this->column_right_id], $this->column_right_id . ' + ' . $diff, $this->column_right_id);
$sql = 'UPDATE ' . $this->table_name . '
SET ' . $this->column_left_id . ' = ' . $set_left_id . ',
@@ -567,7 +561,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
' . $this->get_sql_where('AND');
$this->db->sql_query($sql);
- return $new_parent->get_right_id() + $diff;
+ return $new_parent[$this->column_right_id] + $diff;
}
/**
@@ -603,7 +597,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$this->column_left_id => $new_id,
$this->column_item_parents => '',
)) . '
- WHERE ' . $this->column_item_id . ' = ' . $row[$this->column_item_id];
+ WHERE ' . $this->column_item_id . ' = ' . (int) $row[$this->column_item_id];
$this->db->sql_query($sql);
}
$new_id++;
@@ -616,7 +610,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
{
$sql = 'UPDATE ' . $this->table_name . '
SET ' . $this->db->sql_build_array('UPDATE', array($this->column_right_id => $new_id)) . '
- WHERE ' . $this->column_item_id . ' = ' . $row[$this->column_item_id];
+ WHERE ' . $this->column_item_id . ' = ' . (int) $row[$this->column_item_id];
$this->db->sql_query($sql);
}
$new_id++;
diff --git a/phpBB/includes/nestedset/forum.php b/phpBB/includes/nestedset/forum.php
index b1df3c7e45..e00754eb68 100644
--- a/phpBB/includes/nestedset/forum.php
+++ b/phpBB/includes/nestedset/forum.php
@@ -67,7 +67,7 @@ class phpbb_nestedset_forum extends phpbb_nestedset_base
/**
* @inheritdoc
*/
- public function move_children(phpbb_nestedset_item_interface $current_parent, phpbb_nestedset_item_interface $new_parent)
+ public function move_children(array $current_parent, array $new_parent)
{
while (!$this->lock->acquire())
{
@@ -92,7 +92,7 @@ class phpbb_nestedset_forum extends phpbb_nestedset_base
/**
* @inheritdoc
*/
- public function set_parent(phpbb_nestedset_item_interface $item, phpbb_nestedset_item_interface $new_parent)
+ public function set_parent(array $item, array $new_parent)
{
while (!$this->lock->acquire())
{
diff --git a/phpBB/includes/nestedset/interface.php b/phpBB/includes/nestedset/interface.php
index 7ef6ff87bb..2d353544dd 100644
--- a/phpBB/includes/nestedset/interface.php
+++ b/phpBB/includes/nestedset/interface.php
@@ -20,7 +20,7 @@ interface phpbb_nestedset_interface
/**
* Insert an item into the nested set (also insert the rows into the table)
*
- * @param phpbb_nestedset_item_interface $item The item to be added
+ * @param array $item The item to be added
* @return array Array with item data as set in the database
*/
public function insert(array $additional_data);
@@ -28,96 +28,96 @@ interface phpbb_nestedset_interface
/**
* Add an item at the end of the nested set
*
- * @param phpbb_nestedset_item_interface $item The item to be added
+ * @param array $item The item to be added
* @return bool True if the item was added
*/
- public function add(phpbb_nestedset_item_interface $item);
+ public function add(array $item);
/**
* Remove an item from the nested set
*
* Also removes all subitems from the nested set
*
- * @param phpbb_nestedset_item_interface $item The item to be removed
+ * @param array $item The item to be removed
* @return array Items that have been removed
*/
- public function remove(phpbb_nestedset_item_interface $item);
+ public function remove(array $item);
/**
* Delete an item from the nested set (also deletes the rows form the table)
*
* Also deletes all subitems from the nested set
*
- * @param phpbb_nestedset_item_interface $item The item to be deleted
+ * @param array $item The item to be deleted
* @return array Items that have been deleted
*/
- public function delete(phpbb_nestedset_item_interface $item);
+ public function delete(array $item);
/**
* Move an item by a given delta
*
- * @param phpbb_nestedset_item_interface $item The item to be moved
+ * @param array $item The item to be moved
* @param int $delta Number of steps to move this item, < 0 => down, > 0 => up
* @return bool True if the item was moved
*/
- public function move(phpbb_nestedset_item_interface $item, $delta);
+ public function move(array $item, $delta);
/**
* Move an item down by 1
*
- * @param phpbb_nestedset_item_interface $item The item to be moved
+ * @param array $item The item to be moved
* @return bool True if the item was moved
*/
- public function move_down(phpbb_nestedset_item_interface $item);
+ public function move_down(array $item);
/**
* Move an item up by 1
*
- * @param phpbb_nestedset_item_interface $item The item to be moved
+ * @param array $item The item to be moved
* @return bool True if the item was moved
*/
- public function move_up(phpbb_nestedset_item_interface $item);
+ public function move_up(array $item);
/**
* Moves all children of one item to another item
*
- * @param phpbb_nestedset_item_interface $current_parent The current parent item
- * @param phpbb_nestedset_item_interface $new_parent The new parent item
+ * @param array $current_parent The current parent item
+ * @param array $new_parent The new parent item
* @return bool True if any items where moved
*/
- public function move_children(phpbb_nestedset_item_interface $current_parent, phpbb_nestedset_item_interface $new_parent);
+ public function move_children(array $current_parent, array $new_parent);
/**
* Set the parent item
*
- * @param phpbb_nestedset_item_interface $item The item to be moved
- * @param phpbb_nestedset_item_interface $new_parent The new parent item
+ * @param array $item The item to be moved
+ * @param array $new_parent The new parent item
* @return bool True if the parent was set successfully
*/
- public function set_parent(phpbb_nestedset_item_interface $item, phpbb_nestedset_item_interface $new_parent);
+ public function set_parent(array $item, array $new_parent);
/**
* Get branch of the item
*
* This method can return all parents, children or both of the given item
*
- * @param phpbb_nestedset_item_interface $item The item to get the branch from
+ * @param array $item The item to get the branch from
* @param string $type One of all|parent|children
* @param bool $order_desc Order the items descending (most outer parent first)
* @param bool $include_item Should the given item be included in the list aswell
* @return array Array of items (containing all columns from the item table)
* ID => Item data
*/
- public function get_branch_data(phpbb_nestedset_item_interface $item, $type, $order_desc, $include_item);
+ public function get_branch_data(array $item, $type, $order_desc, $include_item);
/**
* Get base information of parent items
*
- * @param phpbb_nestedset_item_interface $item The item to get the parents from
+ * @param array $item The item to get the parents from
* @return array Array of items (containing basic columns from the item table)
* ID => Item data
*/
- public function get_parent_data(phpbb_nestedset_item_interface $item);
+ public function get_parent_data(array $item);
/**
* Recalculate Nested Sets
From 86937e03ec4af92b6467427d9ee69467139f8119 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 18 Apr 2013 00:15:02 +0200
Subject: [PATCH 196/704] [ticket/11495] Remove item classes
PHPBB3-11495
---
phpBB/includes/nestedset/item/base.php | 82 ---------------------
phpBB/includes/nestedset/item/forum.php | 28 -------
phpBB/includes/nestedset/item/interface.php | 61 ---------------
3 files changed, 171 deletions(-)
delete mode 100644 phpBB/includes/nestedset/item/base.php
delete mode 100644 phpBB/includes/nestedset/item/forum.php
delete mode 100644 phpBB/includes/nestedset/item/interface.php
diff --git a/phpBB/includes/nestedset/item/base.php b/phpBB/includes/nestedset/item/base.php
deleted file mode 100644
index c3a7600827..0000000000
--- a/phpBB/includes/nestedset/item/base.php
+++ /dev/null
@@ -1,82 +0,0 @@
-item_id;
- }
-
- /**
- * @inheritdoc
- */
- public function get_parent_id()
- {
- return (int) $this->parent_id;
- }
-
- /**
- * @inheritdoc
- */
- public function get_item_parents_data()
- {
- return (string) $this->item_parents_data;
- }
-
- /**
- * @inheritdoc
- */
- public function get_left_id()
- {
- return (int) $this->left_id;
- }
-
- /**
- * @inheritdoc
- */
- public function get_right_id()
- {
- return (int) $this->right_id;
- }
-
- /**
- * @inheritdoc
- */
- public function has_children()
- {
- return $this->right_id - $this->left_id > 1;
- }
-}
diff --git a/phpBB/includes/nestedset/item/forum.php b/phpBB/includes/nestedset/item/forum.php
deleted file mode 100644
index 9475517999..0000000000
--- a/phpBB/includes/nestedset/item/forum.php
+++ /dev/null
@@ -1,28 +0,0 @@
-item_id = (int) $forum_row['forum_id'];
- $this->parent_id = (int) $forum_row['parent_id'];
- $this->left_id = (int) $forum_row['left_id'];
- $this->right_id = (int) $forum_row['right_id'];
- $this->item_parents_data = (string) $forum_row['forum_parents'];
- }
-}
diff --git a/phpBB/includes/nestedset/item/interface.php b/phpBB/includes/nestedset/item/interface.php
deleted file mode 100644
index 18206d752e..0000000000
--- a/phpBB/includes/nestedset/item/interface.php
+++ /dev/null
@@ -1,61 +0,0 @@
-
Date: Thu, 18 Apr 2013 00:33:48 +0200
Subject: [PATCH 197/704] [ticket/11495] Remove item class from unit tests
PHPBB3-11495
---
tests/nestedset/item_forum_test.php | 31 ------------------
tests/nestedset/set_forum_add_remove_test.php | 17 +++++-----
tests/nestedset/set_forum_get_data_test.php | 9 ++----
tests/nestedset/set_forum_move_test.php | 32 ++++---------------
4 files changed, 18 insertions(+), 71 deletions(-)
delete mode 100644 tests/nestedset/item_forum_test.php
diff --git a/tests/nestedset/item_forum_test.php b/tests/nestedset/item_forum_test.php
deleted file mode 100644
index 1ca89ebd2f..0000000000
--- a/tests/nestedset/item_forum_test.php
+++ /dev/null
@@ -1,31 +0,0 @@
- 1,
- 'forum_id' => 5,
- 'user_id' => 32,
- 'left_id' => 2,
- 'right_id' => 3,
- 'forum_parents' => '',
- );
-
- $forum = new phpbb_nestedset_item_forum($forum_data);
-
- $this->assertEquals($forum->get_item_id(), $forum_data['forum_id']);
- $this->assertEquals($forum->get_left_id(), $forum_data['left_id']);
- $this->assertEquals($forum->get_right_id(), $forum_data['right_id']);
- $this->assertEquals($forum->get_parent_id(), $forum_data['parent_id']);
- $this->assertEquals($forum->get_item_parents_data(), $forum_data['forum_parents']);
- }
-}
diff --git a/tests/nestedset/set_forum_add_remove_test.php b/tests/nestedset/set_forum_add_remove_test.php
index f7d4980292..53fc23594a 100644
--- a/tests/nestedset/set_forum_add_remove_test.php
+++ b/tests/nestedset/set_forum_add_remove_test.php
@@ -78,9 +78,7 @@ class phpbb_tests_nestedset_set_forum_add_remove_test extends phpbb_tests_nested
*/
public function test_remove_add($forum_id, $expected_removed, $expected_remove_table, $expected_added, $expected_add_table)
{
- $forum = new phpbb_nestedset_item_forum($this->forum_data[$forum_id]);
-
- $removed_items = $this->set->remove($forum);
+ $removed_items = $this->set->remove($this->forum_data[$forum_id]);
$this->assertEquals($expected_removed, $removed_items);
@@ -92,8 +90,13 @@ class phpbb_tests_nestedset_set_forum_add_remove_test extends phpbb_tests_nested
$added_items = array();
foreach ($removed_items as $item_id)
{
- $forum = new phpbb_nestedset_item_forum($this->forum_data[$item_id]);
- $added_items[$item_id] = $this->set->add($forum);
+ $added_items[$item_id] = $this->set->add(array_merge($this->forum_data[$item_id], array(
+ 'forum_rules' => '',
+ 'forum_desc' => '',
+ 'parent_id' => 0,
+ 'left_id' => 0,
+ 'right_id' => 0,
+ )));
}
$this->assertEquals($expected_added, $added_items);
@@ -136,9 +139,7 @@ class phpbb_tests_nestedset_set_forum_add_remove_test extends phpbb_tests_nested
*/
public function test_delete($forum_id, $expected_deleted, $expected)
{
- $forum = new phpbb_nestedset_item_forum($this->forum_data[$forum_id]);
-
- $this->assertEquals($expected_deleted, $this->set->delete($forum));
+ $this->assertEquals($expected_deleted, $this->set->delete($this->forum_data[$forum_id]));
$result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
FROM phpbb_forums
diff --git a/tests/nestedset/set_forum_get_data_test.php b/tests/nestedset/set_forum_get_data_test.php
index b7314efd15..b537d0a062 100644
--- a/tests/nestedset/set_forum_get_data_test.php
+++ b/tests/nestedset/set_forum_get_data_test.php
@@ -66,9 +66,7 @@ class phpbb_tests_nestedset_set_forum_get_data_test extends phpbb_tests_nestedse
*/
public function test_get_branch_data($forum_id, $type, $order_desc, $include_item, $expected)
{
- $forum = new phpbb_nestedset_item_forum($this->forum_data[$forum_id]);
-
- $this->assertEquals($expected, array_keys($this->set->get_branch_data($forum, $type, $order_desc, $include_item)));
+ $this->assertEquals($expected, array_keys($this->set->get_branch_data($this->forum_data[$forum_id], $type, $order_desc, $include_item)));
}
public function get_parent_data_data()
@@ -88,9 +86,6 @@ class phpbb_tests_nestedset_set_forum_get_data_test extends phpbb_tests_nestedse
*/
public function test_get_parent_data($forum_id, $forum_data, $expected)
{
- $data = array_merge($this->forum_data[$forum_id], $forum_data);
- $forum = new phpbb_nestedset_item_forum($data);
-
- $this->assertEquals($expected, array_keys($this->set->get_parent_data($forum)));
+ $this->assertEquals($expected, array_keys($this->set->get_parent_data(array_merge($this->forum_data[$forum_id], $forum_data))));
}
}
diff --git a/tests/nestedset/set_forum_move_test.php b/tests/nestedset/set_forum_move_test.php
index 7e1c03e60f..b90eaa12ad 100644
--- a/tests/nestedset/set_forum_move_test.php
+++ b/tests/nestedset/set_forum_move_test.php
@@ -120,9 +120,7 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
*/
public function test_move($explain, $forum_id, $delta, $expected_moved, $expected)
{
- $forum = new phpbb_nestedset_item_forum($this->forum_data[$forum_id]);
-
- $this->assertEquals($expected_moved, $this->set->move($forum, $delta));
+ $this->assertEquals($expected_moved, $this->set->move($this->forum_data[$forum_id], $delta));
$result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
FROM phpbb_forums
@@ -169,9 +167,7 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
*/
public function test_move_down($explain, $forum_id, $expected_moved, $expected)
{
- $forum = new phpbb_nestedset_item_forum($this->forum_data[$forum_id]);
-
- $this->assertEquals($expected_moved, $this->set->move_down($forum));
+ $this->assertEquals($expected_moved, $this->set->move_down($this->forum_data[$forum_id]));
$result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
FROM phpbb_forums
@@ -218,9 +214,7 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
*/
public function test_move_up($explain, $forum_id, $expected_moved, $expected)
{
- $forum = new phpbb_nestedset_item_forum($this->forum_data[$forum_id]);
-
- $this->assertEquals($expected_moved, $this->set->move_up($forum));
+ $this->assertEquals($expected_moved, $this->set->move_up($this->forum_data[$forum_id]));
$result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
FROM phpbb_forums
@@ -386,10 +380,7 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
*/
public function test_move_children($explain, $forum_id, $target_id, $expected_moved, $expected)
{
- $forum = new phpbb_nestedset_item_forum($this->forum_data[$forum_id]);
- $target = new phpbb_nestedset_item_forum($this->forum_data[$target_id]);
-
- $this->assertEquals($expected_moved, $this->set->move_children($forum, $target));
+ $this->assertEquals($expected_moved, $this->set->move_children($this->forum_data[$forum_id], $this->forum_data[$target_id]));
$result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
FROM phpbb_forums
@@ -414,10 +405,7 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
*/
public function test_move_children_throws($explain, $forum_id, $target_id)
{
- $forum = new phpbb_nestedset_item_forum($this->forum_data[$forum_id]);
- $target = new phpbb_nestedset_item_forum($this->forum_data[$target_id]);
-
- $this->set->move_children($forum, $target);
+ $this->set->move_children($this->forum_data[$forum_id], $this->forum_data[$target_id]);
}
public function set_parent_data()
@@ -529,10 +517,7 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
*/
public function test_set_parent($explain, $forum_id, $target_id, $expected_moved, $expected)
{
- $forum = new phpbb_nestedset_item_forum($this->forum_data[$forum_id]);
- $target = new phpbb_nestedset_item_forum($this->forum_data[$target_id]);
-
- $this->assertEquals($expected_moved, $this->set->set_parent($forum, $target));
+ $this->assertEquals($expected_moved, $this->set->set_parent($this->forum_data[$forum_id], $this->forum_data[$target_id]));
$result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
FROM phpbb_forums
@@ -557,9 +542,6 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
*/
public function test_set_parent_throws($explain, $forum_id, $target_id)
{
- $forum = new phpbb_nestedset_item_forum($this->forum_data[$forum_id]);
- $target = new phpbb_nestedset_item_forum($this->forum_data[$target_id]);
-
- $this->set->set_parent($forum, $target);
+ $this->set->set_parent($this->forum_data[$forum_id], $this->forum_data[$target_id]);
}
}
From e0393a3062c6bde9314ad061db781d8823cf5b97 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 18 Apr 2013 00:34:09 +0200
Subject: [PATCH 198/704] [ticket/11495] Fix column variable names
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 10 +++++-----
phpBB/includes/nestedset/forum.php | 4 ++--
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
index 56422f52a5..630512d713 100644
--- a/phpBB/includes/nestedset/base.php
+++ b/phpBB/includes/nestedset/base.php
@@ -30,11 +30,11 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
* Column names in the table
* @var String
*/
- protected $columns_item_id = 'item_id';
- protected $columns_left_id = 'left_id';
- protected $columns_right_id = 'right_id';
- protected $columns_parent_id = 'parent_id';
- protected $columns_item_parents = 'item_parents';
+ protected $column_item_id = 'item_id';
+ protected $column_left_id = 'left_id';
+ protected $column_right_id = 'right_id';
+ protected $column_parent_id = 'parent_id';
+ protected $column_item_parents = 'item_parents';
/**
* Additional SQL restrictions
diff --git a/phpBB/includes/nestedset/forum.php b/phpBB/includes/nestedset/forum.php
index e00754eb68..18936c1c55 100644
--- a/phpBB/includes/nestedset/forum.php
+++ b/phpBB/includes/nestedset/forum.php
@@ -33,8 +33,8 @@ class phpbb_nestedset_forum extends phpbb_nestedset_base
* Column names in the table
* @var String
*/
- protected $columns_item_id = 'forum_id';
- protected $columns_item_parents = 'forum_parents';
+ protected $column_item_id = 'forum_id';
+ protected $column_item_parents = 'forum_parents';
/**
* Additional SQL restrictions
From 514bcb2fac1a11a53e20c789ea95be6207c38e80 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 18 Apr 2013 00:50:30 +0200
Subject: [PATCH 199/704] [ticket/11495] Move nestedset default values to new
method
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 29 +++++++++++++++++++++--------
1 file changed, 21 insertions(+), 8 deletions(-)
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
index 630512d713..5673a913fc 100644
--- a/phpBB/includes/nestedset/base.php
+++ b/phpBB/includes/nestedset/base.php
@@ -67,14 +67,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
*/
public function insert(array $additional_data)
{
- $item_data = array_merge($additional_data, array(
- $this->column_parent_id => 0,
- $this->column_left_id => 0,
- $this->column_right_id => 0,
- $this->column_item_parents => '',
- ));
-
- unset($item_data[$this->column_item_id]);
+ $item_data = $this->reset_nestedset_values($additional_data);
$sql = 'INSERT INTO ' . $this->table_name . ' ' . $this->db->sql_build_array('INSERT', $item_data);
$this->db->sql_query($sql);
@@ -564,6 +557,26 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
return $new_parent[$this->column_right_id] + $diff;
}
+ /**
+ * Resets values required for the nested set system
+ *
+ * @param array $item Original item data
+ * @return array Original item data + nested set defaults
+ */
+ protected function reset_nestedset_values(array $item)
+ {
+ $item_data = array_merge($item, array(
+ $this->column_parent_id => 0,
+ $this->column_left_id => 0,
+ $this->column_right_id => 0,
+ $this->column_item_parents => '',
+ ));
+
+ unset($item_data[$this->column_item_id]);
+
+ return $item_data;
+ }
+
/**
* @inheritdoc
*/
From a183fc1118b5ec3b1654ab4fda9c56fa1144e4ce Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 18 Apr 2013 00:54:26 +0200
Subject: [PATCH 200/704] [ticket/11495] Manually specify the table columns
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
index 5673a913fc..7c1e7f631e 100644
--- a/phpBB/includes/nestedset/base.php
+++ b/phpBB/includes/nestedset/base.php
@@ -157,8 +157,8 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
* siblings between the current spot and the target then the
* item will move as far as possible
*/
- $sql = 'SELECT ' . implode(', ', $this->table_columns) . '
- FROM ' . $this->table_name . '
+ $sql = "SELECT {$this->column_item_id}, {$this->column_parent_id}, {$this->column_left_id}, {$this->column_right_id}, {$this->column_item_parents}
+ FROM " . $this->table_name . '
WHERE ' . $this->column_parent_id . ' = ' . (int) $item[$this->column_parent_id] . '
' . $this->get_sql_where() . '
AND ';
From ccd4a725da5269189cdb73a3d7048359a5d2cd4d Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 18 Apr 2013 09:53:02 +0200
Subject: [PATCH 201/704] [ticket/11362] Add compatibility function
phpbb_clean_path() again
The function first depends on the container, but also works without it and
without autoload. The reason for this is, it might be used before that
stuff is set up, like it has been in our common.php
PHPBB3-11362
---
phpBB/includes/functions.php | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php
index 39a8dbc880..998c52b7c6 100644
--- a/phpBB/includes/functions.php
+++ b/phpBB/includes/functions.php
@@ -1046,6 +1046,38 @@ 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)
+{
+ global $phpbb_container;
+
+ if ($phpbb_container)
+ {
+ $phpbb_filesystem = new phpbb_filesystem();
+ }
+ else
+ {
+ // The container is not yet loaded, use a new instance
+ if (!class_exists('phpbb_filesystem'))
+ {
+ global $phpbb_root_path, $phpEx;
+ require($phpbb_root_path . 'includes/filesystem.' . $phpEx);
+ }
+ $phpbb_filesystem = new phpbb_filesystem();
+ }
+
+ return $phpbb_filesystem->clean_path($path);
+}
+
// functions used for building option fields
/**
From 153b29c6c9dad621e03bf2296a93306c30ea23f0 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 18 Apr 2013 19:31:08 +0200
Subject: [PATCH 202/704] [ticket/11495] Remove item class as its no longer
required
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 3 ---
phpBB/includes/nestedset/forum.php | 3 ---
2 files changed, 6 deletions(-)
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
index 7c1e7f631e..d16e33a6db 100644
--- a/phpBB/includes/nestedset/base.php
+++ b/phpBB/includes/nestedset/base.php
@@ -23,9 +23,6 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
/** @var String */
protected $table_name;
- /** @var String */
- protected $item_class = 'phpbb_nestedset_item_base';
-
/**
* Column names in the table
* @var String
diff --git a/phpBB/includes/nestedset/forum.php b/phpBB/includes/nestedset/forum.php
index 18936c1c55..e723e3bf18 100644
--- a/phpBB/includes/nestedset/forum.php
+++ b/phpBB/includes/nestedset/forum.php
@@ -26,9 +26,6 @@ class phpbb_nestedset_forum extends phpbb_nestedset_base
/** @var String */
protected $table_name;
- /** @var String */
- protected $item_class = 'phpbb_nestedset_item_forum';
-
/**
* Column names in the table
* @var String
From b28180be1d911364e5c00e3e97e8dac9be6f3d6f Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 18 Apr 2013 22:16:14 +0200
Subject: [PATCH 203/704] [ticket/11495] Acquire locks for operations that
manipulate the tree
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 75 +++++++++++++++++++++++++++----
1 file changed, 66 insertions(+), 9 deletions(-)
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
index d16e33a6db..e36f45e689 100644
--- a/phpBB/includes/nestedset/base.php
+++ b/phpBB/includes/nestedset/base.php
@@ -20,9 +20,18 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
/** @var phpbb_db_driver*/
protected $db;
+ /** @var phpbb_lock_db */
+ protected $lock;
+
/** @var String */
protected $table_name;
+ /**
+ * Prefix for the language keys returned by exceptions
+ * @var String
+ */
+ protected $message_prefix = '';
+
/**
* Column names in the table
* @var String
@@ -145,6 +154,11 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
return false;
}
+ if (!$this->lock->acquire())
+ {
+ throw new phpbb_nestedset_exception($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
+ }
+
$action = ($delta > 0) ? 'move_up' : 'move_down';
$delta = abs($delta);
@@ -180,6 +194,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
if (is_null($target))
{
+ $this->lock->release();
// The item is already on top or bottom
return false;
}
@@ -231,6 +246,8 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
" . $this->get_sql_where();
$this->db->sql_query($sql);
+ $this->lock->release();
+
return true;
}
@@ -260,11 +277,17 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
return false;
}
+ if (!$this->lock->acquire())
+ {
+ throw new phpbb_nestedset_exception($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
+ }
+
$move_items = array_keys($this->get_branch_data($current_parent, 'children', true, false));
if (in_array($new_parent[$this->column_item_id], $move_items))
{
- throw new phpbb_nestedset_exception('INVALID_PARENT');
+ $this->lock->release();
+ throw new phpbb_nestedset_exception($this->message_prefix . 'INVALID_PARENT');
}
$diff = sizeof($move_items) * 2;
@@ -272,7 +295,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$this->db->sql_transaction('begin');
- $this->remove_subset($move_items, $current_parent, false);
+ $this->remove_subset($move_items, $current_parent, false, true);
if ($new_parent[$this->column_item_id])
{
@@ -287,10 +310,11 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
if (!$new_parent)
{
$this->db->sql_transaction('rollback');
- throw new phpbb_nestedset_exception('INVALID_PARENT');
+ $this->lock->release();
+ throw new phpbb_nestedset_exception($this->message_prefix . 'INVALID_PARENT');
}
- $new_right_id = $this->prepare_adding_subset($move_items, $new_parent);
+ $new_right_id = $this->prepare_adding_subset($move_items, $new_parent, true);
if ($new_right_id > $current_parent[$this->column_right_id])
{
@@ -324,6 +348,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$this->db->sql_query($sql);
$this->db->sql_transaction('commit');
+ $this->lock->release();
return true;
}
@@ -333,11 +358,17 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
*/
public function set_parent(array $item, array $new_parent)
{
+ if (!$this->lock->acquire())
+ {
+ throw new phpbb_nestedset_exception($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
+ }
+
$move_items = array_keys($this->get_branch_data($item, 'children'));
if (in_array($new_parent[$this->column_item_id], $move_items))
{
- throw new phpbb_nestedset_exception('INVALID_PARENT');
+ $this->lock->release();
+ throw new phpbb_nestedset_exception($this->message_prefix . 'INVALID_PARENT');
}
$diff = sizeof($move_items) * 2;
@@ -345,7 +376,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$this->db->sql_transaction('begin');
- $this->remove_subset($move_items, $item, false);
+ $this->remove_subset($move_items, $item, false, true);
if ($new_parent[$this->column_item_id])
{
@@ -360,10 +391,11 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
if (!$new_parent)
{
$this->db->sql_transaction('rollback');
- throw new phpbb_nestedset_exception('INVALID_PARENT');
+ $this->lock->release();
+ throw new phpbb_nestedset_exception($this->message_prefix . 'INVALID_PARENT');
}
- $new_right_id = $this->prepare_adding_subset($move_items, $new_parent);
+ $new_right_id = $this->prepare_adding_subset($move_items, $new_parent, true);
if ($new_right_id > (int) $item[$this->column_right_id])
{
@@ -397,6 +429,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$this->db->sql_query($sql);
$this->db->sql_transaction('commit');
+ $this->lock->release();
return true;
}
@@ -497,10 +530,16 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
* @param array $subset_items Subset of items to remove
* @param array $bounding_item Item containing the right bound of the subset
* @param bool $set_subset_zero Should the parent, left and right id of the item be set to 0, or kept unchanged?
+ * @param bool $table_already_locked Is the table already locked, or should we acquire a new lock?
* @return null
*/
- protected function remove_subset(array $subset_items, array $bounding_item, $set_subset_zero = true)
+ protected function remove_subset(array $subset_items, array $bounding_item, $set_subset_zero = true, $table_already_locked = false)
{
+ if (!$table_already_locked && !$this->lock->acquire())
+ {
+ throw new phpbb_nestedset_exception($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
+ }
+
$diff = sizeof($subset_items) * 2;
$sql_subset_items = $this->db->sql_in_set($this->column_item_id, $subset_items);
$sql_not_subset_items = $this->db->sql_in_set($this->column_item_id, $subset_items, true);
@@ -526,6 +565,11 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
' . $this->column_item_parents . " = ''
" . ((!$set_subset_zero) ? ' WHERE ' . $sql_not_subset_items . ' ' . $this->get_sql_where('AND') : $this->get_sql_where('WHERE'));
$this->db->sql_query($sql);
+
+ if (!$table_already_locked)
+ {
+ $this->lock->release();
+ }
}
/**
@@ -581,6 +625,12 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
{
if ($reset_ids)
{
+ if (!$this->lock->acquire())
+ {
+ throw new phpbb_nestedset_exception($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
+ }
+ $this->db->sql_transaction('begin');
+
$sql = 'UPDATE ' . $this->table_name . '
SET ' . $this->db->sql_build_array('UPDATE', array(
$this->column_left_id => 0,
@@ -627,6 +677,13 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
}
$this->db->sql_freeresult($result);
+
+ if ($reset_ids)
+ {
+ $this->db->sql_transaction('commit');
+ $this->lock->release();
+ }
+
return $new_id;
}
}
From 5cb7342dd3b7abd2366abbdb7c0ba11d3d27f922 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 18 Apr 2013 22:17:05 +0200
Subject: [PATCH 204/704] [ticket/11495] Remove acquire locks from forum
implementation
PHPBB3-11495
---
phpBB/includes/nestedset/forum.php | 65 +-----------------------------
1 file changed, 2 insertions(+), 63 deletions(-)
diff --git a/phpBB/includes/nestedset/forum.php b/phpBB/includes/nestedset/forum.php
index e723e3bf18..54a26772d5 100644
--- a/phpBB/includes/nestedset/forum.php
+++ b/phpBB/includes/nestedset/forum.php
@@ -17,15 +17,6 @@ if (!defined('IN_PHPBB'))
class phpbb_nestedset_forum extends phpbb_nestedset_base
{
- /** @var phpbb_db_driver */
- protected $db;
-
- /** @var phpbb_lock_db */
- protected $lock;
-
- /** @var String */
- protected $table_name;
-
/**
* Column names in the table
* @var String
@@ -34,12 +25,10 @@ class phpbb_nestedset_forum extends phpbb_nestedset_base
protected $column_item_parents = 'forum_parents';
/**
- * Additional SQL restrictions
- * Allows to have multiple nestedsets in one table
- * Columns must be prefixed with %1$s
+ * Prefix for the language keys returned by exceptions
* @var String
*/
- protected $sql_where = '';
+ protected $message_prefix = 'FORUM_NESTEDSET_';
/**
* List of item properties to be cached in $item_parents
@@ -60,54 +49,4 @@ class phpbb_nestedset_forum extends phpbb_nestedset_base
$this->lock = $lock;
$this->table_name = $table_name;
}
-
- /**
- * @inheritdoc
- */
- public function move_children(array $current_parent, array $new_parent)
- {
- while (!$this->lock->acquire())
- {
- // Retry after 0.2 seconds
- usleep(200 * 1000);
- }
-
- try
- {
- $return = parent::move_children($current_parent, $new_parent);
- }
- catch (phpbb_nestedset_exception $e)
- {
- $this->lock->release();
- throw new phpbb_nestedset_exception('FORUM_NESTEDSET_' . $e->getMessage());
- }
- $this->lock->release();
-
- return $return;
- }
-
- /**
- * @inheritdoc
- */
- public function set_parent(array $item, array $new_parent)
- {
- while (!$this->lock->acquire())
- {
- // Retry after 0.2 seconds
- usleep(200 * 1000);
- }
-
- try
- {
- $return = parent::set_parent($item, $new_parent);
- }
- catch (phpbb_nestedset_exception $e)
- {
- $this->lock->release();
- throw new phpbb_nestedset_exception('FORUM_NESTEDSET_' . $e->getMessage());
- }
- $this->lock->release();
-
- return $return;
- }
}
From f3ff8b36be01bf6414268d9dca0500b6c7d4f47f Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Fri, 19 Apr 2013 01:14:38 +0200
Subject: [PATCH 205/704] [ticket/11495] Fix Spacing and lowercase on docs
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 10 +++++-----
phpBB/includes/nestedset/forum.php | 4 ++--
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
index e36f45e689..3383fd90c4 100644
--- a/phpBB/includes/nestedset/base.php
+++ b/phpBB/includes/nestedset/base.php
@@ -17,24 +17,24 @@ if (!defined('IN_PHPBB'))
abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
{
- /** @var phpbb_db_driver*/
+ /** @var phpbb_db_driver */
protected $db;
/** @var phpbb_lock_db */
protected $lock;
- /** @var String */
+ /** @var string */
protected $table_name;
/**
* Prefix for the language keys returned by exceptions
- * @var String
+ * @var string
*/
protected $message_prefix = '';
/**
* Column names in the table
- * @var String
+ * @var string
*/
protected $column_item_id = 'item_id';
protected $column_left_id = 'left_id';
@@ -45,7 +45,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
/**
* Additional SQL restrictions
* Allows to have multiple nested sets in one table
- * @var String
+ * @var string
*/
protected $sql_where = '';
diff --git a/phpBB/includes/nestedset/forum.php b/phpBB/includes/nestedset/forum.php
index 54a26772d5..dbf0e70202 100644
--- a/phpBB/includes/nestedset/forum.php
+++ b/phpBB/includes/nestedset/forum.php
@@ -19,14 +19,14 @@ class phpbb_nestedset_forum extends phpbb_nestedset_base
{
/**
* Column names in the table
- * @var String
+ * @var string
*/
protected $column_item_id = 'forum_id';
protected $column_item_parents = 'forum_parents';
/**
* Prefix for the language keys returned by exceptions
- * @var String
+ * @var string
*/
protected $message_prefix = 'FORUM_NESTEDSET_';
From 845832820ba89a0f33e264a34639a05045783397 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Fri, 19 Apr 2013 01:48:31 +0200
Subject: [PATCH 206/704] [ticket/11501] Assert the variables instead of fail()
with the condition
PHPBB3-11501
---
tests/dbal/migrator_test.php | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
diff --git a/tests/dbal/migrator_test.php b/tests/dbal/migrator_test.php
index 89669b85ec..0d7fc2f839 100644
--- a/tests/dbal/migrator_test.php
+++ b/tests/dbal/migrator_test.php
@@ -144,15 +144,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()
From 1431a027563b717183937751970f52cc0a4c94fe Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Fri, 19 Apr 2013 01:49:35 +0200
Subject: [PATCH 207/704] [ticket/11501] Remove test_ prefix from data provider
methods
PHPBB3-11501
---
tests/log/function_add_log_test.php | 4 ++--
tests/log/function_view_log_test.php | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
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 = '')
{
From d24ff2329fe145864712cb37ec19183bd4e21a42 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Fri, 19 Apr 2013 16:18:03 +0200
Subject: [PATCH 208/704] [ticket/11495] Use item_id only as parameter for
get_branch_data()
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 19 ++++++-------------
phpBB/includes/nestedset/interface.php | 6 +++---
tests/nestedset/set_forum_get_data_test.php | 2 +-
3 files changed, 10 insertions(+), 17 deletions(-)
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
index 3383fd90c4..a3c878a47e 100644
--- a/phpBB/includes/nestedset/base.php
+++ b/phpBB/includes/nestedset/base.php
@@ -115,14 +115,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
*/
public function remove(array $item)
{
- if ($item[$this->column_right_id] - $item[$this->column_left_id] > 1)
- {
- $items = array_keys($this->get_branch_data($item, 'children'));
- }
- else
- {
- $items = array((int) $item[$this->column_item_id]);
- }
+ $items = array_keys($this->get_branch_data($item[$this->column_item_id], 'children'));
$this->remove_subset($items, $item);
@@ -282,7 +275,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
throw new phpbb_nestedset_exception($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
}
- $move_items = array_keys($this->get_branch_data($current_parent, 'children', true, false));
+ $move_items = array_keys($this->get_branch_data((int) $current_parent[$this->column_item_id], 'children', true, false));
if (in_array($new_parent[$this->column_item_id], $move_items))
{
@@ -363,7 +356,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
throw new phpbb_nestedset_exception($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
}
- $move_items = array_keys($this->get_branch_data($item, 'children'));
+ $move_items = array_keys($this->get_branch_data((int) $item[$this->column_item_id], 'children'));
if (in_array($new_parent[$this->column_item_id], $move_items))
{
@@ -437,7 +430,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
/**
* @inheritdoc
*/
- public function get_branch_data(array $item, $type = 'all', $order_desc = true, $include_item = true)
+ public function get_branch_data($item_id, $type = 'all', $order_desc = true, $include_item = true)
{
switch ($type)
{
@@ -461,14 +454,14 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
FROM ' . $this->table_name . ' i1
LEFT JOIN ' . $this->table_name . " i2
ON (($condition) " . $this->get_sql_where('AND', 'i2.') . ')
- WHERE i1.' . $this->column_item_id . ' = ' . (int) $item[$this->column_item_id] . '
+ WHERE i1.' . $this->column_item_id . ' = ' . (int) $item_id . '
' . $this->get_sql_where('AND', 'i1.') . '
ORDER BY i2.' . $this->column_left_id . ' ' . ($order_desc ? 'ASC' : 'DESC');
$result = $this->db->sql_query($sql);
while ($row = $this->db->sql_fetchrow($result))
{
- if (!$include_item && $item[$this->column_item_id] == $row[$this->column_item_id])
+ if (!$include_item && $item_id == $row[$this->column_item_id])
{
continue;
}
diff --git a/phpBB/includes/nestedset/interface.php b/phpBB/includes/nestedset/interface.php
index 2d353544dd..c632c09dbf 100644
--- a/phpBB/includes/nestedset/interface.php
+++ b/phpBB/includes/nestedset/interface.php
@@ -101,19 +101,19 @@ interface phpbb_nestedset_interface
*
* This method can return all parents, children or both of the given item
*
- * @param array $item The item to get the branch from
+ * @param int $item_id The item id to get the parents from
* @param string $type One of all|parent|children
* @param bool $order_desc Order the items descending (most outer parent first)
* @param bool $include_item Should the given item be included in the list aswell
* @return array Array of items (containing all columns from the item table)
* ID => Item data
*/
- public function get_branch_data(array $item, $type, $order_desc, $include_item);
+ public function get_branch_data($item_id, $type, $order_desc, $include_item);
/**
* Get base information of parent items
*
- * @param array $item The item to get the parents from
+ * @param array $item The item to get the branch from
* @return array Array of items (containing basic columns from the item table)
* ID => Item data
*/
diff --git a/tests/nestedset/set_forum_get_data_test.php b/tests/nestedset/set_forum_get_data_test.php
index b537d0a062..2c8889d1a5 100644
--- a/tests/nestedset/set_forum_get_data_test.php
+++ b/tests/nestedset/set_forum_get_data_test.php
@@ -66,7 +66,7 @@ class phpbb_tests_nestedset_set_forum_get_data_test extends phpbb_tests_nestedse
*/
public function test_get_branch_data($forum_id, $type, $order_desc, $include_item, $expected)
{
- $this->assertEquals($expected, array_keys($this->set->get_branch_data($this->forum_data[$forum_id], $type, $order_desc, $include_item)));
+ $this->assertEquals($expected, array_keys($this->set->get_branch_data($forum_id, $type, $order_desc, $include_item)));
}
public function get_parent_data_data()
From 3d54a81ed9394f13aff4c40d524ed7cff0546604 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Fri, 19 Apr 2013 16:19:01 +0200
Subject: [PATCH 209/704] [ticket/11495] Use item_id only as parameter for
delete() and remove()
The data is acquired again anyway
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 13 +++++++------
phpBB/includes/nestedset/interface.php | 12 ++++++------
tests/nestedset/set_forum_add_remove_test.php | 4 ++--
3 files changed, 15 insertions(+), 14 deletions(-)
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
index a3c878a47e..c1feb48534 100644
--- a/phpBB/includes/nestedset/base.php
+++ b/phpBB/includes/nestedset/base.php
@@ -113,21 +113,22 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
/**
* @inheritdoc
*/
- public function remove(array $item)
+ public function remove($item_id)
{
- $items = array_keys($this->get_branch_data($item[$this->column_item_id], 'children'));
+ $items = $this->get_branch_data($item_id, 'children');
+ $item_ids = array_keys($items);
- $this->remove_subset($items, $item);
+ $this->remove_subset($item_ids, $items[$item_id]);
- return $items;
+ return $item_ids;
}
/**
* @inheritdoc
*/
- public function delete(array $item)
+ public function delete($item_id)
{
- $removed_items = $this->remove($item);
+ $removed_items = $this->remove($item_id);
$sql = 'DELETE FROM ' . $this->table_name . '
WHERE ' . $this->db->sql_in_set($this->column_item_id, $removed_items) . '
diff --git a/phpBB/includes/nestedset/interface.php b/phpBB/includes/nestedset/interface.php
index c632c09dbf..1a6b09f975 100644
--- a/phpBB/includes/nestedset/interface.php
+++ b/phpBB/includes/nestedset/interface.php
@@ -38,20 +38,20 @@ interface phpbb_nestedset_interface
*
* Also removes all subitems from the nested set
*
- * @param array $item The item to be removed
- * @return array Items that have been removed
+ * @param int $item_id The item to be deleted
+ * @return array Item ids that have been removed
*/
- public function remove(array $item);
+ public function remove($item);
/**
* Delete an item from the nested set (also deletes the rows form the table)
*
* Also deletes all subitems from the nested set
*
- * @param array $item The item to be deleted
- * @return array Items that have been deleted
+ * @param int $item_id The item to be deleted
+ * @return array Item ids that have been deleted
*/
- public function delete(array $item);
+ public function delete($item);
/**
* Move an item by a given delta
diff --git a/tests/nestedset/set_forum_add_remove_test.php b/tests/nestedset/set_forum_add_remove_test.php
index 53fc23594a..97b6348d67 100644
--- a/tests/nestedset/set_forum_add_remove_test.php
+++ b/tests/nestedset/set_forum_add_remove_test.php
@@ -78,7 +78,7 @@ class phpbb_tests_nestedset_set_forum_add_remove_test extends phpbb_tests_nested
*/
public function test_remove_add($forum_id, $expected_removed, $expected_remove_table, $expected_added, $expected_add_table)
{
- $removed_items = $this->set->remove($this->forum_data[$forum_id]);
+ $removed_items = $this->set->remove($forum_id);
$this->assertEquals($expected_removed, $removed_items);
@@ -139,7 +139,7 @@ class phpbb_tests_nestedset_set_forum_add_remove_test extends phpbb_tests_nested
*/
public function test_delete($forum_id, $expected_deleted, $expected)
{
- $this->assertEquals($expected_deleted, $this->set->delete($this->forum_data[$forum_id]));
+ $this->assertEquals($expected_deleted, $this->set->delete($forum_id));
$result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
FROM phpbb_forums
From f66b5323a75db084686d9a16c7090b15c5c13e54 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Fri, 19 Apr 2013 19:09:22 +0200
Subject: [PATCH 210/704] [ticket/11495] Cast some values to int
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
index c1feb48534..bb7acca0fb 100644
--- a/phpBB/includes/nestedset/base.php
+++ b/phpBB/includes/nestedset/base.php
@@ -202,10 +202,10 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
*/
if ($action == 'move_up')
{
- $left_id = $target[$this->column_left_id];
+ $left_id = (int) $target[$this->column_left_id];
$right_id = (int) $item[$this->column_right_id];
- $diff_up = (int) $item[$this->column_left_id] - $target[$this->column_left_id];
+ $diff_up = (int) $item[$this->column_left_id] - (int) $target[$this->column_left_id];
$diff_down = (int) $item[$this->column_right_id] + 1 - (int) $item[$this->column_left_id];
$move_up_left = (int) $item[$this->column_left_id];
@@ -214,13 +214,13 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
else
{
$left_id = (int) $item[$this->column_left_id];
- $right_id = $target[$this->column_right_id];
+ $right_id = (int) $target[$this->column_right_id];
$diff_up = (int) $item[$this->column_right_id] + 1 - (int) $item[$this->column_left_id];
- $diff_down = $target[$this->column_right_id] - (int) $item[$this->column_right_id];
+ $diff_down = (int) $target[$this->column_right_id] - (int) $item[$this->column_right_id];
$move_up_left = (int) $item[$this->column_right_id] + 1;
- $move_up_right = $target[$this->column_right_id];
+ $move_up_right = (int) $target[$this->column_right_id];
}
// Now do the dirty job
From db5df5b6ac025f360cdc97182678536d88c0dccb Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Fri, 19 Apr 2013 10:15:03 +0200
Subject: [PATCH 211/704] [ticket/10966] Introduce MSSQL base class for native
and ODBC
PHPBB3-10966
---
phpBB/includes/db/driver/mssql_base.php | 65 ++++++++++++++++++++++++
phpBB/includes/db/driver/mssql_odbc.php | 44 +---------------
phpBB/includes/db/driver/mssqlnative.php | 44 +---------------
3 files changed, 67 insertions(+), 86 deletions(-)
create mode 100644 phpBB/includes/db/driver/mssql_base.php
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 @@
+sql_server_version) ? 'MSSQL (ODBC) ' . $this->sql_server_version : 'MSSQL (ODBC)';
}
- /**
- * {@inheritDoc}
- */
- public function sql_concatenate($expr1, $expr2)
- {
- return $expr1 . ' + ' . $expr2;
- }
-
/**
* SQL Transaction
* @access private
@@ -325,40 +317,6 @@ class phpbb_db_driver_mssql_odbc extends phpbb_db_driver
return false;
}
- /**
- * 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 = '';
@@ -256,14 +256,6 @@ class phpbb_db_driver_mssqlnative extends phpbb_db_driver
return ($this->sql_server_version) ? 'MSSQL ' . $this->sql_server_version : 'MSSQL';
}
- /**
- * {@inheritDoc}
- */
- public function sql_concatenate($expr1, $expr2)
- {
- return $expr1 . ' + ' . $expr2;
- }
-
/**
* {@inheritDoc}
*/
@@ -490,31 +482,6 @@ class phpbb_db_driver_mssqlnative extends phpbb_db_driver
return false;
}
- /**
- * 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
@@ -560,15 +527,6 @@ class phpbb_db_driver_mssqlnative extends phpbb_db_driver
return $error;
}
- /**
- * Build db-specific query data
- * @access private
- */
- function _sql_custom_build($stage, $data)
- {
- return $data;
- }
-
/**
* Close sql connection
* @access private
From 87dc3b1e55bcfcade98eedfaa07e77c454dd7d4f Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Fri, 19 Apr 2013 21:07:42 +0200
Subject: [PATCH 212/704] [ticket/11495] Use item ids instead of requiring all
data
The data is grabbed again in most cases anyway, so it just makes the system
easier to use.
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 95 ++++++++++++++++++++-----
phpBB/includes/nestedset/interface.php | 26 +++----
tests/nestedset/set_forum_move_test.php | 80 +++++++++++++--------
3 files changed, 141 insertions(+), 60 deletions(-)
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
index bb7acca0fb..f3bdfe1c7d 100644
--- a/phpBB/includes/nestedset/base.php
+++ b/phpBB/includes/nestedset/base.php
@@ -141,7 +141,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
/**
* @inheritdoc
*/
- public function move(array $item, $delta)
+ public function move($item_id, $delta)
{
if ($delta == 0)
{
@@ -156,6 +156,21 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$action = ($delta > 0) ? 'move_up' : 'move_down';
$delta = abs($delta);
+ // Keep $this->get_sql_where() here, to ensure we are in the right tree.
+ $sql = 'SELECT *
+ FROM ' . $this->table_name . '
+ WHERE ' . $this->column_item_id . ' = ' . (int) $item_id . '
+ ' . $this->get_sql_where();
+ $result = $this->db->sql_query_limit($sql, $delta);
+ $item = $this->db->sql_fetchrow($result);
+ $this->db->sql_freeresult($result);
+
+ if (!$item)
+ {
+ $this->lock->release();
+ throw new phpbb_nestedset_exception($this->message_prefix . 'INVALID_ITEM');
+ }
+
/**
* Fetch all the siblings between the item's current spot
* and where we want to move it to. If there are less than $delta
@@ -248,37 +263,60 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
/**
* @inheritdoc
*/
- public function move_down(array $item)
+ public function move_down($item_id)
{
- return $this->move($item, -1);
+ return $this->move($item_id, -1);
}
/**
* @inheritdoc
*/
- public function move_up(array $item)
+ public function move_up($item_id)
{
- return $this->move($item, 1);
+ return $this->move($item_id, 1);
}
/**
* @inheritdoc
*/
- public function move_children(array $current_parent, array $new_parent)
+ public function move_children($current_parent_id, $new_parent_id)
{
- if (($current_parent[$this->column_right_id] - $current_parent[$this->column_left_id]) <= 1 || !$current_parent[$this->column_item_id] || $current_parent[$this->column_item_id] == $new_parent[$this->column_item_id])
+ $current_parent_id = (int) $current_parent_id;
+ $new_parent_id = (int) $new_parent_id;
+
+ if ($current_parent_id == $new_parent_id)
{
return false;
}
+ if (!$current_parent_id)
+ {
+ throw new phpbb_nestedset_exception($this->message_prefix . 'INVALID_ITEM');
+ }
+
if (!$this->lock->acquire())
{
throw new phpbb_nestedset_exception($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
}
- $move_items = array_keys($this->get_branch_data((int) $current_parent[$this->column_item_id], 'children', true, false));
+ $item_data = $this->get_branch_data($current_parent_id, 'children');
+ if (!isset($item_data[$current_parent_id]))
+ {
+ $this->lock->release();
+ throw new phpbb_nestedset_exception($this->message_prefix . 'INVALID_ITEM');
+ }
- if (in_array($new_parent[$this->column_item_id], $move_items))
+ $current_parent = $item_data[$current_parent_id];
+ unset($item_data[$current_parent_id]);
+ $move_items = array_keys($item_data);
+
+ if (($current_parent[$this->column_right_id] - $current_parent[$this->column_left_id]) <= 1)
+ {
+ $this->lock->release();
+ return false;
+ }
+
+ if (in_array($new_parent_id, $move_items))
{
$this->lock->release();
throw new phpbb_nestedset_exception($this->message_prefix . 'INVALID_PARENT');
@@ -291,12 +329,12 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$this->remove_subset($move_items, $current_parent, false, true);
- if ($new_parent[$this->column_item_id])
+ if ($new_parent_id)
{
// Retrieve new-parent again, it may have been changed...
$sql = 'SELECT *
FROM ' . $this->table_name . '
- WHERE ' . $this->column_item_id . ' = ' . (int) $new_parent[$this->column_item_id];
+ WHERE ' . $this->column_item_id . ' = ' . $new_parent_id;
$result = $this->db->sql_query($sql);
$new_parent = $this->db->sql_fetchrow($result);
$this->db->sql_freeresult($result);
@@ -335,7 +373,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$sql = 'UPDATE ' . $this->table_name . '
SET ' . $this->column_left_id . ' = ' . $this->column_left_id . $diff . ',
' . $this->column_right_id . ' = ' . $this->column_right_id . $diff . ',
- ' . $this->column_parent_id . ' = ' . $this->db->sql_case($this->column_parent_id . ' = ' . (int) $current_parent[$this->column_item_id], (int) $new_parent[$this->column_item_id], $this->column_parent_id) . ',
+ ' . $this->column_parent_id . ' = ' . $this->db->sql_case($this->column_parent_id . ' = ' . $current_parent_id, $new_parent_id, $this->column_parent_id) . ',
' . $this->column_item_parents . " = ''
WHERE " . $this->db->sql_in_set($this->column_item_id, $move_items) . '
' . $this->get_sql_where('AND');
@@ -350,16 +388,37 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
/**
* @inheritdoc
*/
- public function set_parent(array $item, array $new_parent)
+ public function set_parent($item_id, $new_parent_id)
{
+ $item_id = (int) $item_id;
+ $new_parent_id = (int) $new_parent_id;
+
+ if ($item_id == $new_parent_id)
+ {
+ return false;
+ }
+
+ if (!$item_id)
+ {
+ throw new phpbb_nestedset_exception($this->message_prefix . 'INVALID_ITEM');
+ }
+
if (!$this->lock->acquire())
{
throw new phpbb_nestedset_exception($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
}
- $move_items = array_keys($this->get_branch_data((int) $item[$this->column_item_id], 'children'));
+ $item_data = $this->get_branch_data($item_id, 'children');
+ if (!isset($item_data[$item_id]))
+ {
+ $this->lock->release();
+ throw new phpbb_nestedset_exception($this->message_prefix . 'INVALID_ITEM');
+ }
- if (in_array($new_parent[$this->column_item_id], $move_items))
+ $item = $item_data[$item_id];
+ $move_items = array_keys($item_data);
+
+ if (in_array($new_parent_id, $move_items))
{
$this->lock->release();
throw new phpbb_nestedset_exception($this->message_prefix . 'INVALID_PARENT');
@@ -372,12 +431,12 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$this->remove_subset($move_items, $item, false, true);
- if ($new_parent[$this->column_item_id])
+ if ($new_parent_id)
{
// Retrieve new-parent again, it may have been changed...
$sql = 'SELECT *
FROM ' . $this->table_name . '
- WHERE ' . $this->column_item_id . ' = ' . (int) $new_parent[$this->column_item_id];
+ WHERE ' . $this->column_item_id . ' = ' . $new_parent_id;
$result = $this->db->sql_query($sql);
$new_parent = $this->db->sql_fetchrow($result);
$this->db->sql_freeresult($result);
@@ -416,7 +475,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$sql = 'UPDATE ' . $this->table_name . '
SET ' . $this->column_left_id . ' = ' . $this->column_left_id . $diff . ',
' . $this->column_right_id . ' = ' . $this->column_right_id . $diff . ',
- ' . $this->column_parent_id . ' = ' . $this->db->sql_case($this->column_item_id . ' = ' . (int) $item[$this->column_item_id], $new_parent[$this->column_item_id], $this->column_parent_id) . ',
+ ' . $this->column_parent_id . ' = ' . $this->db->sql_case($this->column_item_id . ' = ' . $item_id, $new_parent_id, $this->column_parent_id) . ',
' . $this->column_item_parents . " = ''
WHERE " . $this->db->sql_in_set($this->column_item_id, $move_items) . '
' . $this->get_sql_where('AND');
diff --git a/phpBB/includes/nestedset/interface.php b/phpBB/includes/nestedset/interface.php
index 1a6b09f975..aedd57821a 100644
--- a/phpBB/includes/nestedset/interface.php
+++ b/phpBB/includes/nestedset/interface.php
@@ -56,45 +56,45 @@ interface phpbb_nestedset_interface
/**
* Move an item by a given delta
*
- * @param array $item The item to be moved
- * @param int $delta Number of steps to move this item, < 0 => down, > 0 => up
+ * @param int $item_id The item to be moved
+ * @param int $delta Number of steps to move this item, < 0 => down, > 0 => up
* @return bool True if the item was moved
*/
- public function move(array $item, $delta);
+ public function move($item_id, $delta);
/**
* Move an item down by 1
*
- * @param array $item The item to be moved
+ * @param int $item_id The item to be moved
* @return bool True if the item was moved
*/
- public function move_down(array $item);
+ public function move_down($item_id);
/**
* Move an item up by 1
*
- * @param array $item The item to be moved
+ * @param int $item_id The item to be moved
* @return bool True if the item was moved
*/
- public function move_up(array $item);
+ public function move_up($item_id);
/**
* Moves all children of one item to another item
*
- * @param array $current_parent The current parent item
- * @param array $new_parent The new parent item
+ * @param int $current_parent_id The current parent item
+ * @param int $new_parent_id The new parent item
* @return bool True if any items where moved
*/
- public function move_children(array $current_parent, array $new_parent);
+ public function move_children($current_parent_id, $new_parent_id);
/**
* Set the parent item
*
- * @param array $item The item to be moved
- * @param array $new_parent The new parent item
+ * @param int $item_id The item to be moved
+ * @param int $new_parent_id The new parent item
* @return bool True if the parent was set successfully
*/
- public function set_parent(array $item, array $new_parent);
+ public function set_parent($item, $new_parent_id);
/**
* Get branch of the item
diff --git a/tests/nestedset/set_forum_move_test.php b/tests/nestedset/set_forum_move_test.php
index b90eaa12ad..9a19d18476 100644
--- a/tests/nestedset/set_forum_move_test.php
+++ b/tests/nestedset/set_forum_move_test.php
@@ -120,7 +120,7 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
*/
public function test_move($explain, $forum_id, $delta, $expected_moved, $expected)
{
- $this->assertEquals($expected_moved, $this->set->move($this->forum_data[$forum_id], $delta));
+ $this->assertEquals($expected_moved, $this->set->move($forum_id, $delta));
$result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
FROM phpbb_forums
@@ -167,7 +167,7 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
*/
public function test_move_down($explain, $forum_id, $expected_moved, $expected)
{
- $this->assertEquals($expected_moved, $this->set->move_down($this->forum_data[$forum_id]));
+ $this->assertEquals($expected_moved, $this->set->move_down($forum_id));
$result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
FROM phpbb_forums
@@ -214,7 +214,7 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
*/
public function test_move_up($explain, $forum_id, $expected_moved, $expected)
{
- $this->assertEquals($expected_moved, $this->set->move_up($this->forum_data[$forum_id]));
+ $this->assertEquals($expected_moved, $this->set->move_up($forum_id));
$result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
FROM phpbb_forums
@@ -257,22 +257,6 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
)),
- array('Parent is 0',
- 0, 1, false, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
-
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
-
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
- )),
array('Move single child up',
5, 1, true, array(
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 8, 'forum_parents' => ''),
@@ -380,7 +364,7 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
*/
public function test_move_children($explain, $forum_id, $target_id, $expected_moved, $expected)
{
- $this->assertEquals($expected_moved, $this->set->move_children($this->forum_data[$forum_id], $this->forum_data[$target_id]));
+ $this->assertEquals($expected_moved, $this->set->move_children($forum_id, $target_id));
$result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
FROM phpbb_forums
@@ -388,7 +372,26 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
$this->assertEquals($expected, $this->db->sql_fetchrowset($result));
}
- public function move_children_throws_data()
+ public function move_children_throws_item_data()
+ {
+ return array(
+ array('Item 0 does not exist', 0, 5),
+ array('Item does not exist', 200, 5),
+ );
+ }
+
+ /**
+ * @dataProvider move_children_throws_item_data
+ *
+ * @expectedException phpbb_nestedset_exception
+ * @expectedExceptionMessage FORUM_NESTEDSET_INVALID_ITEM
+ */
+ public function test_move_children_throws_item($explain, $forum_id, $target_id)
+ {
+ $this->set->move_children($forum_id, $target_id);
+ }
+
+ public function move_children_throws_parent_data()
{
return array(
array('New parent is child', 4, 5),
@@ -398,14 +401,14 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
}
/**
- * @dataProvider move_children_throws_data
+ * @dataProvider move_children_throws_parent_data
*
* @expectedException phpbb_nestedset_exception
* @expectedExceptionMessage FORUM_NESTEDSET_INVALID_PARENT
*/
- public function test_move_children_throws($explain, $forum_id, $target_id)
+ public function test_move_children_throws_parent($explain, $forum_id, $target_id)
{
- $this->set->move_children($this->forum_data[$forum_id], $this->forum_data[$target_id]);
+ $this->set->move_children($forum_id, $target_id);
}
public function set_parent_data()
@@ -517,7 +520,7 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
*/
public function test_set_parent($explain, $forum_id, $target_id, $expected_moved, $expected)
{
- $this->assertEquals($expected_moved, $this->set->set_parent($this->forum_data[$forum_id], $this->forum_data[$target_id]));
+ $this->assertEquals($expected_moved, $this->set->set_parent($forum_id, $target_id));
$result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
FROM phpbb_forums
@@ -525,7 +528,26 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
$this->assertEquals($expected, $this->db->sql_fetchrowset($result));
}
- public function set_parent_throws_data()
+ public function set_parent_throws_item_data()
+ {
+ return array(
+ array('Item 0 does not exist', 0, 5),
+ array('Item does not exist', 200, 5),
+ );
+ }
+
+ /**
+ * @dataProvider set_parent_throws_item_data
+ *
+ * @expectedException phpbb_nestedset_exception
+ * @expectedExceptionMessage FORUM_NESTEDSET_INVALID_ITEM
+ */
+ public function test_set_parent_throws_item($explain, $forum_id, $target_id)
+ {
+ $this->set->set_parent($forum_id, $target_id);
+ }
+
+ public function set_parent_throws_parent_data()
{
return array(
array('New parent is child', 4, 5),
@@ -535,13 +557,13 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
}
/**
- * @dataProvider set_parent_throws_data
+ * @dataProvider set_parent_throws_parent_data
*
* @expectedException phpbb_nestedset_exception
* @expectedExceptionMessage FORUM_NESTEDSET_INVALID_PARENT
*/
- public function test_set_parent_throws($explain, $forum_id, $target_id)
+ public function test_set_parent_throws_parent($explain, $forum_id, $target_id)
{
- $this->set->set_parent($this->forum_data[$forum_id], $this->forum_data[$target_id]);
+ $this->set->set_parent($forum_id, $target_id);
}
}
From 802fbbb444a580698b130fa54754d26c12321c00 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ga=C3=ABtan=20Muller?=
Date: Sun, 21 Apr 2013 16:14:33 +0200
Subject: [PATCH 213/704] [ticket/9975] Translate missing style error message
The error message about missing style data was not
translated
PHPBB3-9975
---
phpBB/includes/session.php | 2 +-
phpBB/language/en/common.php | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php
index b93f2ff65e..fe5357f32e 100644
--- a/phpBB/includes/session.php
+++ b/phpBB/includes/session.php
@@ -1661,7 +1661,7 @@ class user extends session
if (!$this->theme)
{
- 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/language/en/common.php b/phpBB/language/en/common.php
index 6dd390ed24..baf398b146 100644
--- a/phpBB/language/en/common.php
+++ b/phpBB/language/en/common.php
@@ -391,6 +391,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.',
From 12c432c5230db49b659498ea4fc3ff8766a0e87f Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Mon, 22 Apr 2013 00:23:49 +0200
Subject: [PATCH 214/704] [ticket/10844] Add extension template file to locate
PHPBB3-10844
---
.../extension/ext/bar/styles/prosilver/template/foobar_body.html | 1 +
1 file changed, 1 insertion(+)
create mode 100644 tests/extension/ext/bar/styles/prosilver/template/foobar_body.html
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!
From 10781ce9ae74efd4f04063c78235f4be031b414a Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Mon, 22 Apr 2013 00:24:30 +0200
Subject: [PATCH 215/704] [ticket/10844] Increase prefix to not match template/
in finder test
PHPBB3-10844
---
tests/extension/finder_test.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/extension/finder_test.php b/tests/extension/finder_test.php
index c96b11a73c..c2ac88a76a 100644
--- a/tests/extension/finder_test.php
+++ b/tests/extension/finder_test.php
@@ -66,7 +66,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);
From 16e70fa08610227d96e149eba2019803ad37c85f Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Mon, 22 Apr 2013 00:49:41 +0200
Subject: [PATCH 216/704] [ticket/11362] Use container when available instead
of creating a new instance
PHPBB3-11362
---
phpBB/includes/functions.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php
index 998c52b7c6..231825525f 100644
--- a/phpBB/includes/functions.php
+++ b/phpBB/includes/functions.php
@@ -1062,7 +1062,7 @@ function phpbb_clean_path($path)
if ($phpbb_container)
{
- $phpbb_filesystem = new phpbb_filesystem();
+ $phpbb_filesystem = $phpbb_container->get('filesystem');
}
else
{
From 9f545a7f6ba7ddd54fae083563b5b582e05f5c1c Mon Sep 17 00:00:00 2001
From: asperous
Date: Tue, 23 Apr 2013 09:55:36 -0700
Subject: [PATCH 217/704] [ticket/9975] Moved a few E_USER_ERROR errors to
/language
There were a few error messages that a user could experience that would, previously, be without any the ability to be localized. There are some more E_USER_ERRORs that I did not change to a constant, for example the error message that is displayed if there aren't any folders in /language.
PHPBB3-9975
---
phpBB/includes/captcha/plugins/phpbb_recaptcha_plugin.php | 2 +-
phpBB/includes/functions.php | 6 +++---
phpBB/includes/user.php | 2 +-
phpBB/language/en/captcha_recaptcha.php | 1 +
phpBB/language/en/common.php | 2 ++
phpBB/language/en/mcp.php | 2 ++
phpBB/mcp.php | 2 +-
tests/security/redirect_test.php | 6 +++---
8 files changed, 14 insertions(+), 9 deletions(-)
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/functions.php b/phpBB/includes/functions.php
index 58d2ad4760..6b5d7bd1df 100644
--- a/phpBB/includes/functions.php
+++ b/phpBB/includes/functions.php
@@ -2731,7 +2731,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 +2740,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 +4182,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/user.php b/phpBB/includes/user.php
index 9ddd806b27..4477c98097 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('STYLE_NOT_FOUND', E_USER_ERROR);
}
// Now parse the cfg file and cache it
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 www.google.com/recaptcha .',
'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..c2db496437 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' => '%s possibly an invalid email address?',
@@ -638,6 +639,7 @@ $lang = array_merge($lang, array(
'STATISTICS' => 'Statistics',
'START_WATCHING_FORUM' => 'Subscribe forum',
'START_WATCHING_TOPIC' => 'Subscribe topic',
+ 'STYLE_NOT_FOUND' => 'Could not get style data',
'STOP_WATCHING_FORUM' => 'Unsubscribe forum',
'STOP_WATCHING_TOPIC' => 'Unsubscribe topic',
'SUBFORUM' => 'Subforum',
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/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),
);
}
From 51a869b13abbe3a93d91e5cc7e14a71bbede1b0e Mon Sep 17 00:00:00 2001
From: asperous
Date: Tue, 23 Apr 2013 11:27:36 -0700
Subject: [PATCH 218/704] [ticket/11129] Added headers to empty subscription
state
"You are not subscribed to any forums".
While correct, could lead to confusion. What's missing is a header right above the message that says "Watched Topics" to match the "Watched Forums" header above. This will assert the idea that there are two separate watchable sections.
As is, it looks like that message is talking about the "Watched Forums" section, since it's listed under that header.
PHPBB3-11129
---
.../template/ucp_main_subscribed.html | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/phpBB/styles/prosilver/template/ucp_main_subscribed.html b/phpBB/styles/prosilver/template/ucp_main_subscribed.html
index 11957aa90d..84d1d897d4 100644
--- a/phpBB/styles/prosilver/template/ucp_main_subscribed.html
+++ b/phpBB/styles/prosilver/template/ucp_main_subscribed.html
@@ -34,6 +34,13 @@
+
{L_NO_WATCHED_FORUMS}
@@ -83,14 +90,21 @@
+
{L_NO_WATCHED_TOPICS}
From 0f41cc34dd83228429824547005e488f0076d0de Mon Sep 17 00:00:00 2001
From: asperous
Date: Tue, 23 Apr 2013 15:00:27 -0700
Subject: [PATCH 219/704] [ticket/11129] Added headers to empty subscription
state
Added a newline to better seperate the two headers.
PHPBB3-11129
---
phpBB/styles/prosilver/template/ucp_main_subscribed.html | 1 +
1 file changed, 1 insertion(+)
mode change 100644 => 100755 phpBB/styles/prosilver/template/ucp_main_subscribed.html
diff --git a/phpBB/styles/prosilver/template/ucp_main_subscribed.html b/phpBB/styles/prosilver/template/ucp_main_subscribed.html
old mode 100644
new mode 100755
index 84d1d897d4..d5097a2191
--- a/phpBB/styles/prosilver/template/ucp_main_subscribed.html
+++ b/phpBB/styles/prosilver/template/ucp_main_subscribed.html
@@ -43,6 +43,7 @@
{L_NO_WATCHED_FORUMS}
+
From 212971a3a6c7d2b336408f6432218ced55ac36a0 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Wed, 24 Apr 2013 10:37:53 -0500
Subject: [PATCH 220/704] [ticket/11454] Correct jabber global available check
Copied from msg_jabber()
PBPBB3-11454
---
phpBB/includes/notification/method/jabber.php | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
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()
From cc902ddee09c3d516a27c26fbf19af8f772814e6 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Wed, 24 Apr 2013 11:26:13 -0500
Subject: [PATCH 221/704] [ticket/11479] Fix install/update (rebuild container)
Code copied from fix in 11305
PHPBB3-11479
---
phpBB/install/install_update.php | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/phpBB/install/install_update.php b/phpBB/install/install_update.php
index bfceed6b17..cf800aefd4 100644
--- a/phpBB/install/install_update.php
+++ b/phpBB/install/install_update.php
@@ -72,7 +72,24 @@ 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_dumped_container_unless_debug(
+ array(
+ new phpbb_di_extension_config($phpbb_root_path . 'config.' . $phpEx),
+ new phpbb_di_extension_core($phpbb_root_path),
+ ),
+ array(
+ new phpbb_di_pass_collection_pass(),
+ new phpbb_di_pass_kernel_pass(),
+ ),
+ $phpbb_root_path,
+ $phpEx
+ );
+
+ // Writes into global $cache
+ $cache = $phpbb_container->get('cache');
$this->tpl_name = 'install_update';
$this->page_title = 'UPDATE_INSTALLATION';
From 1f6f2435d0d4c18bd0b7586a32534f030710c929 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ga=C3=ABtan=20Muller?=
Date: Mon, 22 Apr 2013 20:57:19 +0200
Subject: [PATCH 222/704] [ticket/11471] Unrelated text in e-mail templates
Some e-mail templates contain text unrelated
with the subject of the e-mail
PHPBB3-11471
---
phpBB/language/en/email/post_approved.txt | 1 -
phpBB/language/en/email/post_disapproved.txt | 1 -
phpBB/language/en/email/post_in_queue.txt | 6 +-----
phpBB/language/en/email/report_closed.txt | 3 +--
phpBB/language/en/email/report_deleted.txt | 3 +--
phpBB/language/en/email/report_pm.txt | 6 +-----
phpBB/language/en/email/report_post.txt | 6 +-----
phpBB/language/en/email/short/post_approved.txt | 1 -
phpBB/language/en/email/short/post_disapproved.txt | 1 -
phpBB/language/en/email/short/post_in_queue.txt | 6 +-----
phpBB/language/en/email/short/report_pm.txt | 6 +-----
phpBB/language/en/email/short/report_post.txt | 6 +-----
phpBB/language/en/email/short/topic_approved.txt | 1 -
phpBB/language/en/email/short/topic_disapproved.txt | 1 -
phpBB/language/en/email/short/topic_in_queue.txt | 6 +-----
phpBB/language/en/email/topic_approved.txt | 1 -
phpBB/language/en/email/topic_disapproved.txt | 1 -
phpBB/language/en/email/topic_in_queue.txt | 6 +-----
phpBB/language/en/email/user_reactivate_account.txt | 1 -
phpBB/language/en/email/user_resend_inactive.txt | 1 -
20 files changed, 10 insertions(+), 54 deletions(-)
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
From 4becf85f5274bbe861da05917ab466eb072ea600 Mon Sep 17 00:00:00 2001
From: Nathan Guse
Date: Wed, 24 Apr 2013 14:58:27 -0500
Subject: [PATCH 223/704] [ticket/11479] Use phpbb_create_default_container
PHPBB3-11479
---
phpBB/install/install_update.php | 13 +------------
1 file changed, 1 insertion(+), 12 deletions(-)
diff --git a/phpBB/install/install_update.php b/phpBB/install/install_update.php
index cf800aefd4..aa1bd0fa35 100644
--- a/phpBB/install/install_update.php
+++ b/phpBB/install/install_update.php
@@ -75,18 +75,7 @@ class install_update extends module
global $request, $phpbb_admin_path, $phpbb_adm_relative_path, $phpbb_container;
// Create a normal container now
- $phpbb_container = phpbb_create_dumped_container_unless_debug(
- array(
- new phpbb_di_extension_config($phpbb_root_path . 'config.' . $phpEx),
- new phpbb_di_extension_core($phpbb_root_path),
- ),
- array(
- new phpbb_di_pass_collection_pass(),
- new phpbb_di_pass_kernel_pass(),
- ),
- $phpbb_root_path,
- $phpEx
- );
+ $phpbb_container = phpbb_create_default_container($phpbb_root_path, $phpEx);
// Writes into global $cache
$cache = $phpbb_container->get('cache');
From ebb5169a463db9a2e7c552abf87eaf1ac8d086a2 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Wed, 24 Apr 2013 10:38:57 -0500
Subject: [PATCH 224/704] [ticket/11454] Add messenger function set_addresses
Automatically fills to/im from a user row
Send messenger the Jabber address if using Jabber notifications
PHPBB3-11454
---
phpBB/includes/functions_messenger.php | 18 ++++++++++++++++++
.../notification/method/messenger_base.php | 2 +-
2 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/phpBB/includes/functions_messenger.php b/phpBB/includes/functions_messenger.php
index 821f0d970d..5c0c182f4f 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 ($user['user_email'])
+ {
+ $this->to($user['user_email'], ($user['username']) ?: '');
+ }
+
+ if ($user['user_jabber'])
+ {
+ $this->im($user['user_jabber'], ($user['username']) ?: '');
+ }
+ }
/**
* Sets an email address to send to
diff --git a/phpBB/includes/notification/method/messenger_base.php b/phpBB/includes/notification/method/messenger_base.php
index 2f9073e80b..4966aa94bc 100644
--- a/phpBB/includes/notification/method/messenger_base.php
+++ b/phpBB/includes/notification/method/messenger_base.php
@@ -80,7 +80,7 @@ abstract class phpbb_notification_method_messenger_base extends phpbb_notificati
$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'],
From fcdfe748b89426ed9d29c9e589fc5b98ed53a797 Mon Sep 17 00:00:00 2001
From: Nathan Guse
Date: Wed, 24 Apr 2013 15:34:12 -0500
Subject: [PATCH 225/704] [ticket/11454] Use set_addresses in other applicable
areas
This should fix some other bugs that may not have yet been recognized--some
areas only set to(), but sent according to user_notify_type, which is not
necessarily email.
PHPBB3-11454
---
phpBB/includes/acp/acp_inactive.php | 5 ++---
phpBB/includes/acp/acp_users.php | 4 ++--
phpBB/includes/functions_user.php | 3 +--
phpBB/includes/ucp/ucp_activate.php | 2 +-
phpBB/includes/ucp/ucp_groups.php | 3 +--
phpBB/includes/ucp/ucp_profile.php | 3 +--
phpBB/includes/ucp/ucp_register.php | 3 +--
phpBB/includes/ucp/ucp_remind.php | 3 +--
phpBB/includes/ucp/ucp_resend.php | 5 ++---
phpBB/memberlist.php | 2 +-
10 files changed, 13 insertions(+), 20 deletions(-)
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/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/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/memberlist.php b/phpBB/memberlist.php
index e6045b151a..7ecf332720 100644
--- a/phpBB/memberlist.php
+++ b/phpBB/memberlist.php
@@ -376,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'],
From e870c04067772d227c4254533826f01252608f26 Mon Sep 17 00:00:00 2001
From: Nathan Guse
Date: Wed, 24 Apr 2013 17:07:30 -0500
Subject: [PATCH 226/704] [ticket/11335] (class loader) Make php_ext 'php' not
'.php'
PHPBB3-11335
---
phpBB/config/services.yml | 4 ++--
phpBB/includes/class_loader.php | 8 ++++----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml
index 3b60f0e83e..502a3c418f 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]]
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;
}
/**
From 6ef363547abf98445d20db61ffa5bac66b260603 Mon Sep 17 00:00:00 2001
From: Nathan Guse
Date: Wed, 24 Apr 2013 17:10:17 -0500
Subject: [PATCH 227/704] [ticket/11335] (controller/helper.php) Make php_ext
'php' not '.php'
PHPBB3-11335
---
phpBB/config/services.yml | 2 +-
phpBB/includes/controller/helper.php | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml
index 502a3c418f..949f89b946 100644
--- a/phpBB/config/services.yml
+++ b/phpBB/config/services.yml
@@ -70,7 +70,7 @@ services:
- @template
- @user
- %core.root_path%
- - .%core.php_ext%
+ - %core.php_ext%
controller.resolver:
class: phpbb_controller_resolver
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);
}
/**
From ce230f8dea4afb585e7aca5a1763c547b2c39e81 Mon Sep 17 00:00:00 2001
From: Nathan Guse
Date: Wed, 24 Apr 2013 17:15:28 -0500
Subject: [PATCH 228/704] [ticket/11335] (extension manager/finder) Make
php_ext 'php' not '.php'
PHPBB3-11335
---
phpBB/config/services.yml | 4 ++--
phpBB/includes/extension/finder.php | 8 ++++----
phpBB/includes/extension/manager.php | 4 ++--
phpBB/includes/extension/metadata_manager.php | 2 +-
4 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml
index 949f89b946..8f58d23fd9 100644
--- a/phpBB/config/services.yml
+++ b/phpBB/config/services.yml
@@ -134,7 +134,7 @@ services:
- @filesystem
- %tables.ext%
- %core.root_path%
- - .%core.php_ext%
+ - %core.php_ext%
- @cache.driver
ext.finder:
@@ -144,7 +144,7 @@ services:
- @filesystem
- %core.root_path%
- @cache.driver
- - .%core.php_ext%
+ - %core.php_ext%
- _ext_finder
filesystem:
diff --git a/phpBB/includes/extension/finder.php b/phpBB/includes/extension/finder.php
index 02a9ebb8c3..766b9e9b63 100644
--- a/phpBB/includes/extension/finder.php
+++ b/phpBB/includes/extension/finder.php
@@ -62,7 +62,7 @@ class phpbb_extension_finder
* @param string $cache_name The name of the cache variable, defaults to
* _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')
+ 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;
@@ -256,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);
@@ -277,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 de9a3937c3..a1022762b8 100644
--- a/phpBB/includes/extension/manager.php
+++ b/phpBB/includes/extension/manager.php
@@ -51,7 +51,7 @@ class phpbb_extension_manager
* @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, phpbb_filesystem $filesystem, $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;
@@ -412,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();
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;
From fe89e566869e91a582129b1174c1831b8ee2f865 Mon Sep 17 00:00:00 2001
From: Nathan Guse
Date: Wed, 24 Apr 2013 17:17:53 -0500
Subject: [PATCH 229/704] [ticket/11335] (hook finder) Make php_ext 'php' not
'.php'
PHPBB3-11335
---
phpBB/config/services.yml | 2 +-
phpBB/includes/hook/finder.php | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml
index 8f58d23fd9..dc293c83a2 100644
--- a/phpBB/config/services.yml
+++ b/phpBB/config/services.yml
@@ -173,7 +173,7 @@ services:
class: phpbb_hook_finder
arguments:
- %core.root_path%
- - .%core.php_ext%
+ - %core.php_ext%
- @cache.driver
kernel_request_subscriber:
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));
}
From df70b6ebe6590f3b8de32f6f4c6dbdcce1e2db34 Mon Sep 17 00:00:00 2001
From: Nathan Guse
Date: Wed, 24 Apr 2013 17:19:48 -0500
Subject: [PATCH 230/704] [ticket/11335] (kernel request subscriber) Make
php_ext 'php' not '.php'
PHPBB3-11335
---
phpBB/config/services.yml | 2 +-
phpBB/includes/functions_url_matcher.php | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml
index dc293c83a2..7923c94a3f 100644
--- a/phpBB/config/services.yml
+++ b/phpBB/config/services.yml
@@ -181,7 +181,7 @@ services:
arguments:
- @ext.finder
- %core.root_path%
- - .%core.php_ext%
+ - %core.php_ext%
tags:
- { name: kernel.event_subscriber }
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);
}
From 14f1340903ce76fd4d72dfaf041a0e03b4272f1a Mon Sep 17 00:00:00 2001
From: Nathan Guse
Date: Wed, 24 Apr 2013 17:22:58 -0500
Subject: [PATCH 231/704] [ticket/11335] (avatars) Make php_ext 'php' not
'.php'
PHPBB3-11335
---
phpBB/config/avatars.yml | 8 ++++----
phpBB/includes/avatar/driver/gravatar.php | 2 +-
phpBB/includes/avatar/driver/remote.php | 4 ++--
phpBB/includes/avatar/driver/upload.php | 4 ++--
4 files changed, 9 insertions(+), 9 deletions(-)
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/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));
From df518ac131bb022aa14c207e0c1408751dd9e1ef Mon Sep 17 00:00:00 2001
From: Nathan Guse
Date: Wed, 24 Apr 2013 17:27:24 -0500
Subject: [PATCH 232/704] [ticket/11335] (tests) Make php_ext 'php' not '.php'
PHPBB3-11335
---
tests/class_loader/class_loader_test.php | 4 ++--
tests/controller/helper_url_test.php | 2 +-
tests/dbal/migrator_test.php | 2 +-
tests/extension/finder_test.php | 2 +-
tests/extension/metadata_manager_test.php | 2 +-
tests/mock/extension_manager.php | 2 +-
6 files changed, 7 insertions(+), 7 deletions(-)
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 ae4099e6f8..6390d6a715 100644
--- a/tests/dbal/migrator_test.php
+++ b/tests/dbal/migrator_test.php
@@ -63,7 +63,7 @@ class phpbb_dbal_migrator_test extends phpbb_database_test_case
new phpbb_filesystem(),
'phpbb_ext',
dirname(__FILE__) . '/../../phpBB/',
- '.php',
+ 'php',
null
);
}
diff --git a/tests/extension/finder_test.php b/tests/extension/finder_test.php
index 4c99ba6343..dc3e26be02 100644
--- a/tests/extension/finder_test.php
+++ b/tests/extension/finder_test.php
@@ -164,7 +164,7 @@ class phpbb_extension_finder_test extends phpbb_test_case
public function test_get_classes_create_cache()
{
$cache = new phpbb_mock_cache;
- $finder = new phpbb_extension_finder($this->extension_manager, new phpbb_filesystem(), 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(
diff --git a/tests/extension/metadata_manager_test.php b/tests/extension/metadata_manager_test.php
index df7817b479..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_';
diff --git a/tests/mock/extension_manager.php b/tests/mock/extension_manager.php
index 954f2bf1c4..10b3595206 100644
--- a/tests/mock/extension_manager.php
+++ b/tests/mock/extension_manager.php
@@ -12,7 +12,7 @@ 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();
}
From e5d032ca2112ba2c6156718b3fe42128e444a6fd Mon Sep 17 00:00:00 2001
From: Nathan Guse
Date: Wed, 24 Apr 2013 17:37:05 -0500
Subject: [PATCH 233/704] [ticket/11335] (more class loader) Make php_ext 'php'
not '.php'
PHPBB3-11335
---
phpBB/common.php | 4 ++--
phpBB/download/file.php | 4 ++--
phpBB/install/database_update.php | 2 +-
phpBB/install/index.php | 4 ++--
tests/bootstrap.php | 6 +++---
5 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/phpBB/common.php b/phpBB/common.php
index 6dd65739fc..3708b63bf9 100644
--- a/phpBB/common.php
+++ b/phpBB/common.php
@@ -85,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/download/file.php b/phpBB/download/file.php
index 91c05586a5..ac37737184 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/install/database_update.php b/phpBB/install/database_update.php
index 867235e607..c2b31b4ecd 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..4009db4794 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/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';
From c870b9f43be073a766e4380857415e011b5ed7ef Mon Sep 17 00:00:00 2001
From: Nathan Guse
Date: Wed, 24 Apr 2013 17:37:25 -0500
Subject: [PATCH 234/704] [ticket/11335] (more tests) Make php_ext 'php' not
'.php'
PHPBB3-11335
---
tests/notification/submit_post_base.php | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
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));
}
}
From f49993766e2bcf4efe346e29972f3721b1b1438a Mon Sep 17 00:00:00 2001
From: Nathan Guse
Date: Wed, 24 Apr 2013 17:41:27 -0500
Subject: [PATCH 235/704] [ticket/11335] (more) Make php_ext 'php' not '.php'
PHPBB3-11335
---
phpBB/includes/acp/acp_extensions.php | 2 +-
tests/extension/manager_test.php | 2 +-
tests/test_framework/phpbb_functional_test_case.php | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php
index e4f8059b45..9b5a8da3aa 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
{
diff --git a/tests/extension/manager_test.php b/tests/extension/manager_test.php
index d6bcb97586..106f078691 100644
--- a/tests/extension/manager_test.php
+++ b/tests/extension/manager_test.php
@@ -115,7 +115,7 @@ class phpbb_extension_manager_test extends phpbb_database_test_case
new phpbb_filesystem(),
'phpbb_ext',
dirname(__FILE__) . '/',
- '.' . $php_ext,
+ $php_ext,
($with_cache) ? new phpbb_mock_cache() : null
);
}
diff --git a/tests/test_framework/phpbb_functional_test_case.php b/tests/test_framework/phpbb_functional_test_case.php
index b9647e4742..5534de89c9 100644
--- a/tests/test_framework/phpbb_functional_test_case.php
+++ b/tests/test_framework/phpbb_functional_test_case.php
@@ -156,7 +156,7 @@ class phpbb_functional_test_case extends phpbb_test_case
new phpbb_filesystem(),
self::$config['table_prefix'] . 'ext',
dirname(__FILE__) . '/',
- '.' . $php_ext,
+ $php_ext,
$this->get_cache_driver()
);
From 0d2d72e8ee5cca9e6bc9048cfa1c3ad81ef51949 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Wed, 24 Apr 2013 20:28:35 -0500
Subject: [PATCH 236/704] [ticket/11454] Check if the fields are set
PHPBB3-11454
---
phpBB/includes/functions_messenger.php | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/phpBB/includes/functions_messenger.php b/phpBB/includes/functions_messenger.php
index 5c0c182f4f..f24a4c1eac 100644
--- a/phpBB/includes/functions_messenger.php
+++ b/phpBB/includes/functions_messenger.php
@@ -63,14 +63,14 @@ class messenger
*/
function set_addresses($user)
{
- if ($user['user_email'])
+ if (isset($user['user_email']) && $user['user_email'])
{
- $this->to($user['user_email'], ($user['username']) ?: '');
+ $this->to($user['user_email'], (isset($user['username']) ? $user['username'] : ''));
}
- if ($user['user_jabber'])
+ if (isset($user['user_jabber']) && $user['user_jabber'])
{
- $this->im($user['user_jabber'], ($user['username']) ?: '');
+ $this->im($user['user_jabber'], (isset($user['username']) ? $user['username'] : ''));
}
}
From 9c4553c41f0e0f2c28fb95b5e56886f77cb759ba Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Wed, 24 Apr 2013 20:39:24 -0500
Subject: [PATCH 237/704] [ticket/11335] Replace "$phpEx" with $phpEx
PHPBB3-11335
---
phpBB/common.php | 4 ++--
phpBB/download/file.php | 4 ++--
phpBB/includes/acp/acp_extensions.php | 2 +-
phpBB/install/database_update.php | 2 +-
phpBB/install/index.php | 4 ++--
5 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/phpBB/common.php b/phpBB/common.php
index 3708b63bf9..f6f109c3de 100644
--- a/phpBB/common.php
+++ b/phpBB/common.php
@@ -85,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/download/file.php b/phpBB/download/file.php
index ac37737184..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 9b5a8da3aa..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
{
diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php
index c2b31b4ecd..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 4009db4794..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
From e8b192fa32a4e7bba6d772075eb430424d0c4750 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 25 Apr 2013 12:57:21 +0200
Subject: [PATCH 238/704] [ticket/11495] Do not compare to null anymore (left
over from item class)
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
index f3bdfe1c7d..9f83bd757c 100644
--- a/phpBB/includes/nestedset/base.php
+++ b/phpBB/includes/nestedset/base.php
@@ -194,14 +194,14 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$result = $this->db->sql_query_limit($sql, $delta);
- $target = null;
+ $target = false;
while ($row = $this->db->sql_fetchrow($result))
{
$target = $row;
}
$this->db->sql_freeresult($result);
- if (is_null($target))
+ if (!$target)
{
$this->lock->release();
// The item is already on top or bottom
From 61e72d3a1000c48146466305c6693595324f5282 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 25 Apr 2013 13:09:00 +0200
Subject: [PATCH 239/704] [ticket/11495] Explain move() more
An item is only moved up/down within the same parent. If the delta is larger
then the number of children, the item is moved to the top/bottom of the list
of children within this parent.
PHPBB3-11495
---
phpBB/includes/nestedset/interface.php | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/phpBB/includes/nestedset/interface.php b/phpBB/includes/nestedset/interface.php
index aedd57821a..b8a2e4b239 100644
--- a/phpBB/includes/nestedset/interface.php
+++ b/phpBB/includes/nestedset/interface.php
@@ -56,6 +56,10 @@ interface phpbb_nestedset_interface
/**
* Move an item by a given delta
*
+ * An item is only moved up/down within the same parent. If the delta is
+ * larger then the number of children, the item is moved to the top/bottom
+ * of the list of children within this parent.
+ *
* @param int $item_id The item to be moved
* @param int $delta Number of steps to move this item, < 0 => down, > 0 => up
* @return bool True if the item was moved
From 4bff28a0eeaf44eae9e99725ead6ff2cf770b857 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 25 Apr 2013 13:40:25 +0200
Subject: [PATCH 240/704] [ticket/11495] Rename fix function to
regenerate_left_right_ids()
This method regenerates the left/right ids for the nested set based on the
parent/child relations. This function executes three queries per item, so
it should only be called, when the set has one of the following problems:
- The set has a duplicated value inside the left/right id chain
- The set has a missing value inside the left/right id chain
- The set has items that do not have a left/right is set
When regenerating the items, the items are sorted by parent id and their
current left id, so the current child/parent relationships are kept and
running the function on a working set will not change any orders.
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 4 ++--
phpBB/includes/nestedset/interface.php | 16 ++++++++++++++--
...te_test.php => set_forum_regenerate_test.php} | 10 +++++-----
3 files changed, 21 insertions(+), 9 deletions(-)
rename tests/nestedset/{set_forum_recalculate_test.php => set_forum_regenerate_test.php} (86%)
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
index 9f83bd757c..1a6b578e79 100644
--- a/phpBB/includes/nestedset/base.php
+++ b/phpBB/includes/nestedset/base.php
@@ -674,7 +674,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
/**
* @inheritdoc
*/
- public function recalculate_nested_set($new_id, $parent_id = 0, $reset_ids = false)
+ public function regenerate_left_right_ids($new_id, $parent_id = 0, $reset_ids = false)
{
if ($reset_ids)
{
@@ -716,7 +716,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
$new_id++;
// Then we go through any children and update their left/right id's
- $new_id = $this->recalculate_nested_set($new_id, $row[$this->column_item_id]);
+ $new_id = $this->regenerate_left_right_ids($new_id, $row[$this->column_item_id]);
// Then we come back and update the right_id for this module
if ($row[$this->column_right_id] != $new_id)
diff --git a/phpBB/includes/nestedset/interface.php b/phpBB/includes/nestedset/interface.php
index b8a2e4b239..9948ccf019 100644
--- a/phpBB/includes/nestedset/interface.php
+++ b/phpBB/includes/nestedset/interface.php
@@ -124,12 +124,24 @@ interface phpbb_nestedset_interface
public function get_parent_data(array $item);
/**
- * Recalculate Nested Sets
+ * Regenerate left/right ids from parent/child relationship
+ *
+ * This method regenerates the left/right ids for the nested set based on
+ * the parent/child relations. This function executes three queries per
+ * item, so it should only be called, when the set has one of the following
+ * problems:
+ * - The set has a duplicated value inside the left/right id chain
+ * - The set has a missing value inside the left/right id chain
+ * - The set has items that do not have a left/right is set
+ *
+ * When regenerating the items, the items are sorted by parent id and their
+ * current left id, so the current child/parent relationships are kept
+ * and running the function on a working set will not change any orders.
*
* @param int $new_id First left_id to be used (should start with 1)
* @param int $parent_id parent_id of the current set (default = 0)
* @param bool $reset_ids Should we reset all left_id/right_id on the first call?
* @return int $new_id The next left_id/right_id that should be used
*/
- public function recalculate_nested_set($new_id, $parent_id = 0, $reset_ids = false);
+ public function regenerate_left_right_ids($new_id, $parent_id = 0, $reset_ids = false);
}
diff --git a/tests/nestedset/set_forum_recalculate_test.php b/tests/nestedset/set_forum_regenerate_test.php
similarity index 86%
rename from tests/nestedset/set_forum_recalculate_test.php
rename to tests/nestedset/set_forum_regenerate_test.php
index 6ff7a372a4..0e3a2123a0 100644
--- a/tests/nestedset/set_forum_recalculate_test.php
+++ b/tests/nestedset/set_forum_regenerate_test.php
@@ -9,7 +9,7 @@
require_once dirname(__FILE__) . '/set_forum_base.php';
-class phpbb_tests_nestedset_set_forum_recalculate_test extends phpbb_tests_nestedset_set_forum_base
+class phpbb_tests_nestedset_set_forum_regenerate_test extends phpbb_tests_nestedset_set_forum_base
{
protected $fixed_set = array(
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
@@ -27,7 +27,7 @@ class phpbb_tests_nestedset_set_forum_recalculate_test extends phpbb_tests_neste
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
);
- public function recalculate_nested_set_data()
+ public function regenerate_left_right_ids_data()
{
return array(
array('UPDATE phpbb_forums
@@ -56,13 +56,13 @@ class phpbb_tests_nestedset_set_forum_recalculate_test extends phpbb_tests_neste
}
/**
- * @dataProvider recalculate_nested_set_data
+ * @dataProvider regenerate_left_right_ids_data
*/
- public function test_recalculate_nested_set($breaking_query, $reset_ids)
+ public function test_regenerate_left_right_ids($breaking_query, $reset_ids)
{
$result = $this->db->sql_query($breaking_query);
- $this->assertEquals(23, $this->set->recalculate_nested_set(1, 0, $reset_ids));
+ $this->assertEquals(23, $this->set->regenerate_left_right_ids(1, 0, $reset_ids));
$result = $this->db->sql_query('SELECT forum_id, parent_id, left_id, right_id, forum_parents
FROM phpbb_forums
From 3efae6d8af6dfe22c0790d3004fdbf20eb16a292 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 25 Apr 2013 13:44:52 +0200
Subject: [PATCH 241/704] [ticket/11495] Explain whether move_children
prepends/appends/overwrittes
PHPBB3-11495
---
phpBB/includes/nestedset/interface.php | 3 +++
1 file changed, 3 insertions(+)
diff --git a/phpBB/includes/nestedset/interface.php b/phpBB/includes/nestedset/interface.php
index 9948ccf019..9a8f9c4eea 100644
--- a/phpBB/includes/nestedset/interface.php
+++ b/phpBB/includes/nestedset/interface.php
@@ -85,6 +85,9 @@ interface phpbb_nestedset_interface
/**
* Moves all children of one item to another item
*
+ * If the new parent already has children, the new children are appended
+ * to the list.
+ *
* @param int $current_parent_id The current parent item
* @param int $new_parent_id The new parent item
* @return bool True if any items where moved
From ab7054445fbf397ae5bf4c13eb44a2019d71cc2d Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 25 Apr 2013 13:48:19 +0200
Subject: [PATCH 242/704] [ticket/11495] Rename set_parent to change_parent()
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 2 +-
phpBB/includes/nestedset/interface.php | 6 ++++--
tests/nestedset/set_forum_move_test.php | 24 ++++++++++++------------
3 files changed, 17 insertions(+), 15 deletions(-)
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
index 1a6b578e79..3817a6d217 100644
--- a/phpBB/includes/nestedset/base.php
+++ b/phpBB/includes/nestedset/base.php
@@ -388,7 +388,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
/**
* @inheritdoc
*/
- public function set_parent($item_id, $new_parent_id)
+ public function change_parent($item_id, $new_parent_id)
{
$item_id = (int) $item_id;
$new_parent_id = (int) $new_parent_id;
diff --git a/phpBB/includes/nestedset/interface.php b/phpBB/includes/nestedset/interface.php
index 9a8f9c4eea..a2dbc55c7d 100644
--- a/phpBB/includes/nestedset/interface.php
+++ b/phpBB/includes/nestedset/interface.php
@@ -95,13 +95,15 @@ interface phpbb_nestedset_interface
public function move_children($current_parent_id, $new_parent_id);
/**
- * Set the parent item
+ * Change parent item
+ *
+ * Moves the item to the bottom of the new parent's list of children
*
* @param int $item_id The item to be moved
* @param int $new_parent_id The new parent item
* @return bool True if the parent was set successfully
*/
- public function set_parent($item, $new_parent_id);
+ public function change_parent($item, $new_parent_id);
/**
* Get branch of the item
diff --git a/tests/nestedset/set_forum_move_test.php b/tests/nestedset/set_forum_move_test.php
index 9a19d18476..166fe666f2 100644
--- a/tests/nestedset/set_forum_move_test.php
+++ b/tests/nestedset/set_forum_move_test.php
@@ -411,7 +411,7 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
$this->set->move_children($forum_id, $target_id);
}
- public function set_parent_data()
+ public function change_parent_data()
{
return array(
array('Move single child up',
@@ -516,11 +516,11 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
}
/**
- * @dataProvider set_parent_data
+ * @dataProvider change_parent_data
*/
- public function test_set_parent($explain, $forum_id, $target_id, $expected_moved, $expected)
+ public function test_change_parent($explain, $forum_id, $target_id, $expected_moved, $expected)
{
- $this->assertEquals($expected_moved, $this->set->set_parent($forum_id, $target_id));
+ $this->assertEquals($expected_moved, $this->set->change_parent($forum_id, $target_id));
$result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
FROM phpbb_forums
@@ -528,7 +528,7 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
$this->assertEquals($expected, $this->db->sql_fetchrowset($result));
}
- public function set_parent_throws_item_data()
+ public function change_parent_throws_item_data()
{
return array(
array('Item 0 does not exist', 0, 5),
@@ -537,17 +537,17 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
}
/**
- * @dataProvider set_parent_throws_item_data
+ * @dataProvider change_parent_throws_item_data
*
* @expectedException phpbb_nestedset_exception
* @expectedExceptionMessage FORUM_NESTEDSET_INVALID_ITEM
*/
- public function test_set_parent_throws_item($explain, $forum_id, $target_id)
+ public function test_change_parent_throws_item($explain, $forum_id, $target_id)
{
- $this->set->set_parent($forum_id, $target_id);
+ $this->set->change_parent($forum_id, $target_id);
}
- public function set_parent_throws_parent_data()
+ public function change_parent_throws_parent_data()
{
return array(
array('New parent is child', 4, 5),
@@ -557,13 +557,13 @@ class phpbb_tests_nestedset_set_forum_move_test extends phpbb_tests_nestedset_se
}
/**
- * @dataProvider set_parent_throws_parent_data
+ * @dataProvider change_parent_throws_parent_data
*
* @expectedException phpbb_nestedset_exception
* @expectedExceptionMessage FORUM_NESTEDSET_INVALID_PARENT
*/
- public function test_set_parent_throws_parent($explain, $forum_id, $target_id)
+ public function test_change_parent_throws_parent($explain, $forum_id, $target_id)
{
- $this->set->set_parent($forum_id, $target_id);
+ $this->set->change_parent($forum_id, $target_id);
}
}
From fe97915fc91e4fbfb211e3eb6038dd1b482553dd Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 25 Apr 2013 14:05:41 +0200
Subject: [PATCH 243/704] [ticket/11495] Split get_branch_data into multiple
methods
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 56 +++++++---
phpBB/includes/nestedset/interface.php | 31 ++++-
tests/nestedset/set_forum_get_data_test.php | 118 ++++++++++++--------
3 files changed, 136 insertions(+), 69 deletions(-)
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
index 3817a6d217..fe6318304d 100644
--- a/phpBB/includes/nestedset/base.php
+++ b/phpBB/includes/nestedset/base.php
@@ -115,7 +115,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
*/
public function remove($item_id)
{
- $items = $this->get_branch_data($item_id, 'children');
+ $items = $this->get_children_branch_data($item_id);
$item_ids = array_keys($items);
$this->remove_subset($item_ids, $items[$item_id]);
@@ -299,7 +299,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
throw new phpbb_nestedset_exception($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
}
- $item_data = $this->get_branch_data($current_parent_id, 'children');
+ $item_data = $this->get_children_branch_data($current_parent_id);
if (!isset($item_data[$current_parent_id]))
{
$this->lock->release();
@@ -408,7 +408,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
throw new phpbb_nestedset_exception($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
}
- $item_data = $this->get_branch_data($item_id, 'children');
+ $item_data = $this->get_children_branch_data($item_id);
if (!isset($item_data[$item_id]))
{
$this->lock->release();
@@ -490,24 +490,46 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
/**
* @inheritdoc
*/
- public function get_branch_data($item_id, $type = 'all', $order_desc = true, $include_item = true)
+ public function get_full_branch_data($item_id, $order_desc = true, $include_item = true)
{
- switch ($type)
- {
- case 'parents':
- $condition = 'i1.' . $this->column_left_id . ' BETWEEN i2.' . $this->column_left_id . ' AND i2.' . $this->column_right_id . '';
- break;
+ $condition = 'i2.' . $this->column_left_id . ' BETWEEN i1.' . $this->column_left_id . ' AND i1.' . $this->column_right_id . '
+ OR i1.' . $this->column_left_id . ' BETWEEN i2.' . $this->column_left_id . ' AND i2.' . $this->column_right_id;
- case 'children':
- $condition = 'i2.' . $this->column_left_id . ' BETWEEN i1.' . $this->column_left_id . ' AND i1.' . $this->column_right_id . '';
- break;
+ return $this->get_branch_data($item_id, $condition, $order_desc, $include_item);
+ }
- default:
- $condition = 'i2.' . $this->column_left_id . ' BETWEEN i1.' . $this->column_left_id . ' AND i1.' . $this->column_right_id . '
- OR i1.' . $this->column_left_id . ' BETWEEN i2.' . $this->column_left_id . ' AND i2.' . $this->column_right_id;
- break;
- }
+ /**
+ * @inheritdoc
+ */
+ public function get_parent_branch_data($item_id, $order_desc = true, $include_item = true)
+ {
+ $condition = 'i1.' . $this->column_left_id . ' BETWEEN i2.' . $this->column_left_id . ' AND i2.' . $this->column_right_id . '';
+ return $this->get_branch_data($item_id, $condition, $order_desc, $include_item);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function get_children_branch_data($item_id, $order_desc = true, $include_item = true)
+ {
+ $condition = 'i2.' . $this->column_left_id . ' BETWEEN i1.' . $this->column_left_id . ' AND i1.' . $this->column_right_id . '';
+
+ return $this->get_branch_data($item_id, $condition, $order_desc, $include_item);
+ }
+
+ /**
+ * Get children and parent branch of the item
+ *
+ * @param int $item_id The item id to get the parents/children from
+ * @param string $condition Query string restricting the item list
+ * @param bool $order_desc Order the items descending (most outer parent first)
+ * @param bool $include_item Should the given item be included in the list aswell
+ * @return array Array of items (containing all columns from the item table)
+ * ID => Item data
+ */
+ protected function get_branch_data($item_id, $condition, $order_desc = true, $include_item = true)
+ {
$rows = array();
$sql = 'SELECT i2.*
diff --git a/phpBB/includes/nestedset/interface.php b/phpBB/includes/nestedset/interface.php
index a2dbc55c7d..ee78016425 100644
--- a/phpBB/includes/nestedset/interface.php
+++ b/phpBB/includes/nestedset/interface.php
@@ -106,18 +106,37 @@ interface phpbb_nestedset_interface
public function change_parent($item, $new_parent_id);
/**
- * Get branch of the item
+ * Get children and parent branch of the item
*
- * This method can return all parents, children or both of the given item
- *
- * @param int $item_id The item id to get the parents from
- * @param string $type One of all|parent|children
+ * @param int $item_id The item id to get the parents/children from
* @param bool $order_desc Order the items descending (most outer parent first)
* @param bool $include_item Should the given item be included in the list aswell
* @return array Array of items (containing all columns from the item table)
* ID => Item data
*/
- public function get_branch_data($item_id, $type, $order_desc, $include_item);
+ public function get_full_branch_data($item_id, $order_desc, $include_item);
+
+ /**
+ * Get parent branch of the item
+ *
+ * @param int $item_id The item id to get the parents from
+ * @param bool $order_desc Order the items descending (most outer parent first)
+ * @param bool $include_item Should the given item be included in the list aswell
+ * @return array Array of items (containing all columns from the item table)
+ * ID => Item data
+ */
+ public function get_parent_branch_data($item_id, $order_desc, $include_item);
+
+ /**
+ * Get children branch of the item
+ *
+ * @param int $item_id The item id to get the children from
+ * @param bool $order_desc Order the items descending (most outer parent first)
+ * @param bool $include_item Should the given item be included in the list aswell
+ * @return array Array of items (containing all columns from the item table)
+ * ID => Item data
+ */
+ public function get_children_branch_data($item_id, $order_desc, $include_item);
/**
* Get base information of parent items
diff --git a/tests/nestedset/set_forum_get_data_test.php b/tests/nestedset/set_forum_get_data_test.php
index 2c8889d1a5..a0e255b9b8 100644
--- a/tests/nestedset/set_forum_get_data_test.php
+++ b/tests/nestedset/set_forum_get_data_test.php
@@ -11,62 +11,88 @@ require_once dirname(__FILE__) . '/set_forum_base.php';
class phpbb_tests_nestedset_set_forum_get_data_test extends phpbb_tests_nestedset_set_forum_base
{
- public function get_branch_data_data()
+ public function get_full_branch_data_data()
{
return array(
- array(1, 'all', true, true, array(1, 2, 3)),
- array(1, 'all', true, false, array(2, 3)),
- array(1, 'all', false, true, array(3, 2, 1)),
- array(1, 'all', false, false, array(3, 2)),
+ array(1, true, true, array(1, 2, 3)),
+ array(1, true, false, array(2, 3)),
+ array(1, false, true, array(3, 2, 1)),
+ array(1, false, false, array(3, 2)),
- array(1, 'parents', true, true, array(1)),
- array(1, 'parents', true, false, array()),
- array(1, 'parents', false, true, array(1)),
- array(1, 'parents', false, false, array()),
+ array(2, true, true, array(1, 2)),
+ array(2, true, false, array(1)),
+ array(2, false, true, array(2, 1)),
+ array(2, false, false, array(1)),
- array(1, 'children', true, true, array(1, 2, 3)),
- array(1, 'children', true, false, array(2, 3)),
- array(1, 'children', false, true, array(3, 2, 1)),
- array(1, 'children', false, false, array(3, 2)),
-
- array(2, 'all', true, true, array(1, 2)),
- array(2, 'all', true, false, array(1)),
- array(2, 'all', false, true, array(2, 1)),
- array(2, 'all', false, false, array(1)),
-
- array(2, 'parents', true, true, array(1, 2)),
- array(2, 'parents', true, false, array(1)),
- array(2, 'parents', false, true, array(2, 1)),
- array(2, 'parents', false, false, array(1)),
-
- array(2, 'children', true, true, array(2)),
- array(2, 'children', true, false, array()),
- array(2, 'children', false, true, array(2)),
- array(2, 'children', false, false, array()),
-
- array(5, 'all', true, true, array(4, 5, 6)),
- array(5, 'all', true, false, array(4, 6)),
- array(5, 'all', false, true, array(6, 5, 4)),
- array(5, 'all', false, false, array(6, 4)),
-
- array(5, 'parents', true, true, array(4, 5)),
- array(5, 'parents', true, false, array(4)),
- array(5, 'parents', false, true, array(5, 4)),
- array(5, 'parents', false, false, array(4)),
-
- array(5, 'children', true, true, array(5, 6)),
- array(5, 'children', true, false, array(6)),
- array(5, 'children', false, true, array(6, 5)),
- array(5, 'children', false, false, array(6)),
+ array(5, true, true, array(4, 5, 6)),
+ array(5, true, false, array(4, 6)),
+ array(5, false, true, array(6, 5, 4)),
+ array(5, false, false, array(6, 4)),
);
}
/**
- * @dataProvider get_branch_data_data
+ * @dataProvider get_full_branch_data_data
*/
- public function test_get_branch_data($forum_id, $type, $order_desc, $include_item, $expected)
+ public function test_get_full_branch_data($forum_id, $order_desc, $include_item, $expected)
{
- $this->assertEquals($expected, array_keys($this->set->get_branch_data($forum_id, $type, $order_desc, $include_item)));
+ $this->assertEquals($expected, array_keys($this->set->get_full_branch_data($forum_id, $order_desc, $include_item)));
+ }
+
+ public function get_parent_branch_data_data()
+ {
+ return array(
+ array(1, true, true, array(1)),
+ array(1, true, false, array()),
+ array(1, false, true, array(1)),
+ array(1, false, false, array()),
+
+ array(2, true, true, array(1, 2)),
+ array(2, true, false, array(1)),
+ array(2, false, true, array(2, 1)),
+ array(2, false, false, array(1)),
+
+ array(5, true, true, array(4, 5)),
+ array(5, true, false, array(4)),
+ array(5, false, true, array(5, 4)),
+ array(5, false, false, array(4)),
+ );
+ }
+
+ /**
+ * @dataProvider get_parent_branch_data_data
+ */
+ public function test_get_parent_branch_data($forum_id, $order_desc, $include_item, $expected)
+ {
+ $this->assertEquals($expected, array_keys($this->set->get_parent_branch_data($forum_id, $order_desc, $include_item)));
+ }
+
+ public function get_children_branch_data_data()
+ {
+ return array(
+ array(1, true, true, array(1, 2, 3)),
+ array(1, true, false, array(2, 3)),
+ array(1, false, true, array(3, 2, 1)),
+ array(1, false, false, array(3, 2)),
+
+ array(2, true, true, array(2)),
+ array(2, true, false, array()),
+ array(2, false, true, array(2)),
+ array(2, false, false, array()),
+
+ array(5, true, true, array(5, 6)),
+ array(5, true, false, array(6)),
+ array(5, false, true, array(6, 5)),
+ array(5, false, false, array(6)),
+ );
+ }
+
+ /**
+ * @dataProvider get_children_branch_data_data
+ */
+ public function test_get_children_branch_data($forum_id, $order_desc, $include_item, $expected)
+ {
+ $this->assertEquals($expected, array_keys($this->set->get_children_branch_data($forum_id, $order_desc, $include_item)));
}
public function get_parent_data_data()
From 9d7d962c0db3425e9448eb07649c6709664a56bd Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 25 Apr 2013 14:08:06 +0200
Subject: [PATCH 244/704] [ticket/11495] Explain what "given item" means
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 2 +-
phpBB/includes/nestedset/interface.php | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
index fe6318304d..328621a68d 100644
--- a/phpBB/includes/nestedset/base.php
+++ b/phpBB/includes/nestedset/base.php
@@ -524,7 +524,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
* @param int $item_id The item id to get the parents/children from
* @param string $condition Query string restricting the item list
* @param bool $order_desc Order the items descending (most outer parent first)
- * @param bool $include_item Should the given item be included in the list aswell
+ * @param bool $include_item Should the item (matching the given item id) be included in the list aswell
* @return array Array of items (containing all columns from the item table)
* ID => Item data
*/
diff --git a/phpBB/includes/nestedset/interface.php b/phpBB/includes/nestedset/interface.php
index ee78016425..eadc9083b1 100644
--- a/phpBB/includes/nestedset/interface.php
+++ b/phpBB/includes/nestedset/interface.php
@@ -110,7 +110,7 @@ interface phpbb_nestedset_interface
*
* @param int $item_id The item id to get the parents/children from
* @param bool $order_desc Order the items descending (most outer parent first)
- * @param bool $include_item Should the given item be included in the list aswell
+ * @param bool $include_item Should the item (matching the given item id) be included in the list aswell
* @return array Array of items (containing all columns from the item table)
* ID => Item data
*/
@@ -121,7 +121,7 @@ interface phpbb_nestedset_interface
*
* @param int $item_id The item id to get the parents from
* @param bool $order_desc Order the items descending (most outer parent first)
- * @param bool $include_item Should the given item be included in the list aswell
+ * @param bool $include_item Should the item (matching the given item id) be included in the list aswell
* @return array Array of items (containing all columns from the item table)
* ID => Item data
*/
@@ -132,7 +132,7 @@ interface phpbb_nestedset_interface
*
* @param int $item_id The item id to get the children from
* @param bool $order_desc Order the items descending (most outer parent first)
- * @param bool $include_item Should the given item be included in the list aswell
+ * @param bool $include_item Should the item (matching the given item id) be included in the list aswell
* @return array Array of items (containing all columns from the item table)
* ID => Item data
*/
From 804f139be0534691fc1c8f6ddaf7ebc68a7d0a1c Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 25 Apr 2013 16:17:58 +0200
Subject: [PATCH 245/704] [ticket/11495] Use default exceptions
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 28 ++++++++++++-------------
phpBB/includes/nestedset/exception.php | 20 ------------------
tests/nestedset/set_forum_move_test.php | 8 +++----
3 files changed, 18 insertions(+), 38 deletions(-)
delete mode 100644 phpBB/includes/nestedset/exception.php
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
index 328621a68d..da6c056313 100644
--- a/phpBB/includes/nestedset/base.php
+++ b/phpBB/includes/nestedset/base.php
@@ -150,7 +150,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
if (!$this->lock->acquire())
{
- throw new phpbb_nestedset_exception($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
+ throw new RuntimeException($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
}
$action = ($delta > 0) ? 'move_up' : 'move_down';
@@ -168,7 +168,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
if (!$item)
{
$this->lock->release();
- throw new phpbb_nestedset_exception($this->message_prefix . 'INVALID_ITEM');
+ throw new OutOfBoundsException($this->message_prefix . 'INVALID_ITEM');
}
/**
@@ -291,19 +291,19 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
if (!$current_parent_id)
{
- throw new phpbb_nestedset_exception($this->message_prefix . 'INVALID_ITEM');
+ throw new OutOfBoundsException($this->message_prefix . 'INVALID_ITEM');
}
if (!$this->lock->acquire())
{
- throw new phpbb_nestedset_exception($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
+ throw new RuntimeException($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
}
$item_data = $this->get_children_branch_data($current_parent_id);
if (!isset($item_data[$current_parent_id]))
{
$this->lock->release();
- throw new phpbb_nestedset_exception($this->message_prefix . 'INVALID_ITEM');
+ throw new OutOfBoundsException($this->message_prefix . 'INVALID_ITEM');
}
$current_parent = $item_data[$current_parent_id];
@@ -319,7 +319,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
if (in_array($new_parent_id, $move_items))
{
$this->lock->release();
- throw new phpbb_nestedset_exception($this->message_prefix . 'INVALID_PARENT');
+ throw new OutOfBoundsException($this->message_prefix . 'INVALID_PARENT');
}
$diff = sizeof($move_items) * 2;
@@ -343,7 +343,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
{
$this->db->sql_transaction('rollback');
$this->lock->release();
- throw new phpbb_nestedset_exception($this->message_prefix . 'INVALID_PARENT');
+ throw new OutOfBoundsException($this->message_prefix . 'INVALID_PARENT');
}
$new_right_id = $this->prepare_adding_subset($move_items, $new_parent, true);
@@ -400,19 +400,19 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
if (!$item_id)
{
- throw new phpbb_nestedset_exception($this->message_prefix . 'INVALID_ITEM');
+ throw new OutOfBoundsException($this->message_prefix . 'INVALID_ITEM');
}
if (!$this->lock->acquire())
{
- throw new phpbb_nestedset_exception($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
+ throw new RuntimeException($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
}
$item_data = $this->get_children_branch_data($item_id);
if (!isset($item_data[$item_id]))
{
$this->lock->release();
- throw new phpbb_nestedset_exception($this->message_prefix . 'INVALID_ITEM');
+ throw new OutOfBoundsException($this->message_prefix . 'INVALID_ITEM');
}
$item = $item_data[$item_id];
@@ -421,7 +421,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
if (in_array($new_parent_id, $move_items))
{
$this->lock->release();
- throw new phpbb_nestedset_exception($this->message_prefix . 'INVALID_PARENT');
+ throw new OutOfBoundsException($this->message_prefix . 'INVALID_PARENT');
}
$diff = sizeof($move_items) * 2;
@@ -445,7 +445,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
{
$this->db->sql_transaction('rollback');
$this->lock->release();
- throw new phpbb_nestedset_exception($this->message_prefix . 'INVALID_PARENT');
+ throw new OutOfBoundsException($this->message_prefix . 'INVALID_PARENT');
}
$new_right_id = $this->prepare_adding_subset($move_items, $new_parent, true);
@@ -612,7 +612,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
{
if (!$table_already_locked && !$this->lock->acquire())
{
- throw new phpbb_nestedset_exception($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
+ throw new RuntimeException($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
}
$diff = sizeof($subset_items) * 2;
@@ -702,7 +702,7 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
{
if (!$this->lock->acquire())
{
- throw new phpbb_nestedset_exception($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
+ throw new RuntimeException($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
}
$this->db->sql_transaction('begin');
diff --git a/phpBB/includes/nestedset/exception.php b/phpBB/includes/nestedset/exception.php
deleted file mode 100644
index 10937d0b29..0000000000
--- a/phpBB/includes/nestedset/exception.php
+++ /dev/null
@@ -1,20 +0,0 @@
-
Date: Thu, 25 Apr 2013 16:23:47 +0200
Subject: [PATCH 246/704] [ticket/11495] Explain use of set_subset_zero on
remove_subset()
PHPBB3-11495
---
phpBB/includes/nestedset/base.php | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/phpBB/includes/nestedset/base.php b/phpBB/includes/nestedset/base.php
index da6c056313..cb06a0dabe 100644
--- a/phpBB/includes/nestedset/base.php
+++ b/phpBB/includes/nestedset/base.php
@@ -603,8 +603,10 @@ abstract class phpbb_nestedset_base implements phpbb_nestedset_interface
* Remove a subset from the nested set
*
* @param array $subset_items Subset of items to remove
- * @param array $bounding_item Item containing the right bound of the subset
- * @param bool $set_subset_zero Should the parent, left and right id of the item be set to 0, or kept unchanged?
+ * @param array $bounding_item Item containing the right bound of the subset
+ * @param bool $set_subset_zero Should the parent, left and right id of the items be set to 0, or kept unchanged?
+ * In case of removing an item from the tree, we should the values to 0
+ * In case of moving an item, we shouldkeep the original values, in order to allow "+ diff" later
* @param bool $table_already_locked Is the table already locked, or should we acquire a new lock?
* @return null
*/
From 94dee77647a7ae1a263632a156b5afc14722ad6a Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 25 Apr 2013 16:50:11 +0200
Subject: [PATCH 247/704] [ticket/11495] Replace fixtures content with manual
calls
Should be easier to maintain
PHPBB3-11495
---
tests/nestedset/fixtures/phpbb_forums.xml | 110 ----------------------
tests/nestedset/set_forum_base.php | 25 +++++
2 files changed, 25 insertions(+), 110 deletions(-)
diff --git a/tests/nestedset/fixtures/phpbb_forums.xml b/tests/nestedset/fixtures/phpbb_forums.xml
index 016c8ea7c5..8f133078a9 100644
--- a/tests/nestedset/fixtures/phpbb_forums.xml
+++ b/tests/nestedset/fixtures/phpbb_forums.xml
@@ -9,115 +9,5 @@
forum_name
forum_desc
forum_rules
-
- 1
- 0
- 1
- 6
-
- Parent with two flat children
-
-
-
-
- 2
- 1
- 2
- 3
-
- Flat child #1
-
-
-
-
- 3
- 1
- 4
- 5
-
- Flat child #2
-
-
-
-
- 4
- 0
- 7
- 12
-
- Parent with two nested children
-
-
-
-
- 5
- 4
- 8
- 11
-
- Nested child #1
-
-
-
-
- 6
- 5
- 9
- 10
-
- Nested child #2
-
-
-
-
- 7
- 0
- 13
- 22
-
- Parent with flat and nested children
-
-
-
-
- 8
- 7
- 14
- 15
-
- Mixed child #1
-
-
-
-
- 9
- 7
- 16
- 19
-
- Mixed child #2
-
-
-
-
- 10
- 9
- 17
- 18
-
- Nested child #1 of Mixed child #2
-
-
-
-
- 11
- 7
- 20
- 21
-
- Mixed child #3
-
-
-
diff --git a/tests/nestedset/set_forum_base.php b/tests/nestedset/set_forum_base.php
index 4523f12897..93d4dc3522 100644
--- a/tests/nestedset/set_forum_base.php
+++ b/tests/nestedset/set_forum_base.php
@@ -57,5 +57,30 @@ class phpbb_tests_nestedset_set_forum_base extends phpbb_database_test_case
$this->lock = new phpbb_lock_db('nestedset_forum_lock', $this->config, $this->db);
$this->set = new phpbb_nestedset_forum($this->db, $this->lock, 'phpbb_forums');
+
+ $this->set_up_forums();
+ }
+
+ protected function set_up_forums()
+ {
+ $this->create_forum('Parent with two flat children');
+ $this->create_forum('Flat child #1', 1);
+ $this->create_forum('Flat child #2', 1);
+
+ $this->create_forum('Parent with two nested children');
+ $this->create_forum('Nested child #1', 4);
+ $this->create_forum('Nested child #2', 5);
+
+ $this->create_forum('Parent with flat and nested children');
+ $this->create_forum('Mixed child #1', 7);
+ $this->create_forum('Mixed child #2', 7);
+ $this->create_forum('Nested child #1 of Mixed child #2', 9);
+ $this->create_forum('Mixed child #3', 7);
+ }
+
+ protected function create_forum($name, $parent_id = 0)
+ {
+ $forum = $this->set->insert(array('forum_name' => $name, 'forum_desc' => '', 'forum_rules' => ''));
+ $this->set->change_parent($forum['forum_id'], $parent_id);
}
}
From b334a2ce0fe3ae196da9686028667c430eb411d1 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 25 Apr 2013 17:04:37 +0200
Subject: [PATCH 248/704] [ticket/11495] Move classes to tree/ as they all
implement a tree
PHPBB3-11495
---
phpBB/includes/{nestedset => tree}/interface.php | 4 ++--
phpBB/includes/{nestedset/base.php => tree/nestedset.php} | 4 ++--
.../{nestedset/forum.php => tree/nestedset_forum.php} | 4 ++--
tests/nestedset/set_forum_base.php | 2 +-
4 files changed, 7 insertions(+), 7 deletions(-)
rename phpBB/includes/{nestedset => tree}/interface.php (98%)
rename phpBB/includes/{nestedset/base.php => tree/nestedset.php} (99%)
rename phpBB/includes/{nestedset/forum.php => tree/nestedset_forum.php} (91%)
diff --git a/phpBB/includes/nestedset/interface.php b/phpBB/includes/tree/interface.php
similarity index 98%
rename from phpBB/includes/nestedset/interface.php
rename to phpBB/includes/tree/interface.php
index eadc9083b1..fd10bd357f 100644
--- a/phpBB/includes/nestedset/interface.php
+++ b/phpBB/includes/tree/interface.php
@@ -1,7 +1,7 @@
config);
$this->lock = new phpbb_lock_db('nestedset_forum_lock', $this->config, $this->db);
- $this->set = new phpbb_nestedset_forum($this->db, $this->lock, 'phpbb_forums');
+ $this->set = new phpbb_tree_nestedset_forum($this->db, $this->lock, 'phpbb_forums');
$this->set_up_forums();
}
From 5de14b940e71941853d3bb279779631ae75b9b6f Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Sat, 26 Jan 2013 00:22:56 +0530
Subject: [PATCH 249/704] [ticket/10325] add allow forgot password option in
acp
PHPBB3-10325
---
phpBB/includes/acp/acp_board.php | 1 +
phpBB/language/en/acp/board.php | 2 ++
2 files changed, 3 insertions(+)
diff --git a/phpBB/includes/acp/acp_board.php b/phpBB/includes/acp/acp_board.php
index bacf0d6e57..1956ade31a 100644
--- a/phpBB/includes/acp/acp_board.php
+++ b/phpBB/includes/acp/acp_board.php
@@ -398,6 +398,7 @@ class acp_board
'vars' => array(
'legend1' => 'ACP_SECURITY_SETTINGS',
'allow_autologin' => array('lang' => 'ALLOW_AUTOLOGIN', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
+ 'allow_forgot_password' => array('lang' => 'ALLOW_FORGOT_PASSWORD', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'max_autologin_time' => array('lang' => 'AUTOLOGIN_LENGTH', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
'ip_check' => array('lang' => 'IP_VALID', 'validate' => 'int', 'type' => 'custom', 'method' => 'select_ip_check', 'explain' => true),
'browser_check' => array('lang' => 'BROWSER_VALID', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
diff --git a/phpBB/language/en/acp/board.php b/phpBB/language/en/acp/board.php
index f387158a0b..4b2020b894 100644
--- a/phpBB/language/en/acp/board.php
+++ b/phpBB/language/en/acp/board.php
@@ -454,6 +454,8 @@ $lang = array_merge($lang, array(
'ALL' => 'All',
'ALLOW_AUTOLOGIN' => 'Allow "Remember Me" logins',
'ALLOW_AUTOLOGIN_EXPLAIN' => 'Determines whether users are given "Remember Me" option when they visit the board.',
+ 'ALLOW_FORGOT_PASSWORD' => 'Allow "forgot password"',
+ 'ALLOW_FORGOT_PASSWORD_EXPLAIN' => 'Determines whether users can use the "forgot password" option to recover their account',
'AUTOLOGIN_LENGTH' => '"Remember Me" login key expiration length (in days)',
'AUTOLOGIN_LENGTH_EXPLAIN' => 'Number of days after which "Remember Me" login keys are removed or zero to disable.',
'BROWSER_VALID' => 'Validate browser',
From c6e9bd13a75441e9b35a1bfa5d2a08cc38ff1fa5 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Sat, 26 Jan 2013 01:01:57 +0530
Subject: [PATCH 250/704] [ticket/10325] trigger error if forgot password
option disabled
PHPBB3-10325
---
phpBB/includes/ucp/ucp_remind.php | 5 +++++
phpBB/language/en/ucp.php | 1 +
2 files changed, 6 insertions(+)
diff --git a/phpBB/includes/ucp/ucp_remind.php b/phpBB/includes/ucp/ucp_remind.php
index 8a7ba5d0ca..dd95c29def 100644
--- a/phpBB/includes/ucp/ucp_remind.php
+++ b/phpBB/includes/ucp/ucp_remind.php
@@ -29,6 +29,11 @@ class ucp_remind
global $config, $phpbb_root_path, $phpEx;
global $db, $user, $auth, $template;
+ if (!$config['allow_forgot_password'])
+ {
+ trigger_error('UCP_FORGOT_PASSWORD_DISABLE');
+ }
+
$username = request_var('username', '', true);
$email = strtolower(request_var('email', ''));
$submit = (isset($_POST['submit'])) ? true : false;
diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php
index 3e090a8aec..a98dc6f11e 100644
--- a/phpBB/language/en/ucp.php
+++ b/phpBB/language/en/ucp.php
@@ -521,6 +521,7 @@ $lang = array_merge($lang, array(
'UCP_USERGROUPS_MEMBER' => 'Edit memberships',
'UCP_USERGROUPS_MANAGE' => 'Manage groups',
+ 'UCP_FORGOT_PASSWORD_DISABLE' => 'Function has been disabled.',
'UCP_REGISTER_DISABLE' => 'Creating a new account is currently not possible.',
'UCP_REMIND' => 'Send password',
'UCP_RESEND' => 'Send activation email',
From 499dd3a833912d07fe677ae721e99678708bddcd Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 25 Apr 2013 17:13:21 +0200
Subject: [PATCH 251/704] [ticket/11495] Move tests to tree/ directory
PHPBB3-11495
---
tests/{nestedset => tree}/fixtures/phpbb_forums.xml | 0
.../nestedset_forum_add_remove_test.php} | 4 ++--
.../set_forum_base.php => tree/nestedset_forum_base.php} | 4 ++--
.../nestedset_forum_get_data_test.php} | 4 ++--
.../nestedset_forum_move_test.php} | 4 ++--
.../nestedset_forum_regenerate_test.php} | 4 ++--
.../set_forum_test.php => tree/nestedset_forum_test.php} | 4 ++--
7 files changed, 12 insertions(+), 12 deletions(-)
rename tests/{nestedset => tree}/fixtures/phpbb_forums.xml (100%)
rename tests/{nestedset/set_forum_add_remove_test.php => tree/nestedset_forum_add_remove_test.php} (98%)
rename tests/{nestedset/set_forum_base.php => tree/nestedset_forum_base.php} (96%)
rename tests/{nestedset/set_forum_get_data_test.php => tree/nestedset_forum_get_data_test.php} (96%)
rename tests/{nestedset/set_forum_move_test.php => tree/nestedset_forum_move_test.php} (99%)
rename tests/{nestedset/set_forum_regenerate_test.php => tree/nestedset_forum_regenerate_test.php} (95%)
rename tests/{nestedset/set_forum_test.php => tree/nestedset_forum_test.php} (97%)
diff --git a/tests/nestedset/fixtures/phpbb_forums.xml b/tests/tree/fixtures/phpbb_forums.xml
similarity index 100%
rename from tests/nestedset/fixtures/phpbb_forums.xml
rename to tests/tree/fixtures/phpbb_forums.xml
diff --git a/tests/nestedset/set_forum_add_remove_test.php b/tests/tree/nestedset_forum_add_remove_test.php
similarity index 98%
rename from tests/nestedset/set_forum_add_remove_test.php
rename to tests/tree/nestedset_forum_add_remove_test.php
index 97b6348d67..623cb2bbf3 100644
--- a/tests/nestedset/set_forum_add_remove_test.php
+++ b/tests/tree/nestedset_forum_add_remove_test.php
@@ -1,7 +1,7 @@
1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
diff --git a/tests/nestedset/set_forum_test.php b/tests/tree/nestedset_forum_test.php
similarity index 97%
rename from tests/nestedset/set_forum_test.php
rename to tests/tree/nestedset_forum_test.php
index ab4da1ff1e..ac02886e95 100644
--- a/tests/nestedset/set_forum_test.php
+++ b/tests/tree/nestedset_forum_test.php
@@ -1,7 +1,7 @@
Date: Thu, 25 Apr 2013 17:19:21 +0200
Subject: [PATCH 252/704] [ticket/11495] Remove tests for add/remove we make
them protected later
PHPBB3-11495
---
.../tree/nestedset_forum_add_remove_test.php | 196 ------------------
.../nestedset_forum_insert_delete_test.php | 101 +++++++++
2 files changed, 101 insertions(+), 196 deletions(-)
delete mode 100644 tests/tree/nestedset_forum_add_remove_test.php
create mode 100644 tests/tree/nestedset_forum_insert_delete_test.php
diff --git a/tests/tree/nestedset_forum_add_remove_test.php b/tests/tree/nestedset_forum_add_remove_test.php
deleted file mode 100644
index 623cb2bbf3..0000000000
--- a/tests/tree/nestedset_forum_add_remove_test.php
+++ /dev/null
@@ -1,196 +0,0 @@
- 1, 'parent_id' => 0, 'left_id' => 0, 'right_id' => 0, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 0, 'left_id' => 0, 'right_id' => 0, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 0, 'left_id' => 0, 'right_id' => 0, 'forum_parents' => ''),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => ''),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 16, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 13, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- ), array(
- 1 => array('parent_id' => 0, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- 2 => array('parent_id' => 0, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => ''),
- 3 => array('parent_id' => 0, 'left_id' => 21, 'right_id' => 22, 'forum_parents' => ''),
- ), array(
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => ''),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 16, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 13, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 0, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 0, 'left_id' => 21, 'right_id' => 22, 'forum_parents' => ''),
- )),
- array(2, array(2), array(
- array('forum_id' => 2, 'parent_id' => 0, 'left_id' => 0, 'right_id' => 0, 'forum_parents' => ''),
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 4, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 5, 'right_id' => 10, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 6, 'right_id' => 9, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => ''),
- ), array(
- 2 => array('parent_id' => 0, 'left_id' => 21, 'right_id' => 22, 'forum_parents' => '')
- ), array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 4, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 5, 'right_id' => 10, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 6, 'right_id' => 9, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 0, 'left_id' => 21, 'right_id' => 22, 'forum_parents' => ''),
- )),
- );
- }
-
- /**
- * @dataProvider remove_add_data
- */
- public function test_remove_add($forum_id, $expected_removed, $expected_remove_table, $expected_added, $expected_add_table)
- {
- $removed_items = $this->set->remove($forum_id);
-
- $this->assertEquals($expected_removed, $removed_items);
-
- $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
- FROM phpbb_forums
- ORDER BY left_id, forum_id ASC");
- $this->assertEquals($expected_remove_table, $this->db->sql_fetchrowset($result));
-
- $added_items = array();
- foreach ($removed_items as $item_id)
- {
- $added_items[$item_id] = $this->set->add(array_merge($this->forum_data[$item_id], array(
- 'forum_rules' => '',
- 'forum_desc' => '',
- 'parent_id' => 0,
- 'left_id' => 0,
- 'right_id' => 0,
- )));
- }
- $this->assertEquals($expected_added, $added_items);
-
- $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
- FROM phpbb_forums
- ORDER BY left_id, forum_id ASC");
- $this->assertEquals($expected_add_table, $this->db->sql_fetchrowset($result));
- }
-
- public function delete_data()
- {
- return array(
- array(1, array(1, 2, 3), array(
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => ''),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 16, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 13, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- )),
- array(2, array(2), array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 4, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 5, 'right_id' => 10, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 6, 'right_id' => 9, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => ''),
- )),
- );
- }
-
- /**
- * @dataProvider delete_data
- */
- public function test_delete($forum_id, $expected_deleted, $expected)
- {
- $this->assertEquals($expected_deleted, $this->set->delete($forum_id));
-
- $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
- FROM phpbb_forums
- ORDER BY left_id, forum_id ASC");
- $this->assertEquals($expected, $this->db->sql_fetchrowset($result));
- }
-
- public function insert_data()
- {
- return array(
- array(array(
- 'forum_desc' => '',
- 'forum_rules' => '',
- 'forum_id' => 12,
- 'parent_id' => 0,
- 'left_id' => 23,
- 'right_id' => 24,
- 'forum_parents' => '',
- ), array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
-
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
-
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
-
- array('forum_id' => 12, 'parent_id' => 0, 'left_id' => 23, 'right_id' => 24, 'forum_parents' => ''),
- )),
- );
- }
-
- /**
- * @dataProvider insert_data
- */
- public function test_insert($expected_data, $expected)
- {
- $this->assertEquals($expected_data, $this->set->insert(array(
- 'forum_desc' => '',
- 'forum_rules' => '',
- )));
-
- $result = $this->db->sql_query('SELECT forum_id, parent_id, left_id, right_id, forum_parents
- FROM phpbb_forums
- ORDER BY left_id, forum_id ASC');
- $this->assertEquals($expected, $this->db->sql_fetchrowset($result));
- }
-}
diff --git a/tests/tree/nestedset_forum_insert_delete_test.php b/tests/tree/nestedset_forum_insert_delete_test.php
new file mode 100644
index 0000000000..02259f9091
--- /dev/null
+++ b/tests/tree/nestedset_forum_insert_delete_test.php
@@ -0,0 +1,101 @@
+ 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 16, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 13, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ )),
+ array(2, array(2), array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 4, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 5, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 6, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => ''),
+ )),
+ );
+ }
+
+ /**
+ * @dataProvider delete_data
+ */
+ public function test_delete($forum_id, $expected_deleted, $expected)
+ {
+ $this->assertEquals($expected_deleted, $this->set->delete($forum_id));
+
+ $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ FROM phpbb_forums
+ ORDER BY left_id, forum_id ASC");
+ $this->assertEquals($expected, $this->db->sql_fetchrowset($result));
+ }
+
+ public function insert_data()
+ {
+ return array(
+ array(array(
+ 'forum_desc' => '',
+ 'forum_rules' => '',
+ 'forum_id' => 12,
+ 'parent_id' => 0,
+ 'left_id' => 23,
+ 'right_id' => 24,
+ 'forum_parents' => '',
+ ), array(
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+
+ array('forum_id' => 12, 'parent_id' => 0, 'left_id' => 23, 'right_id' => 24, 'forum_parents' => ''),
+ )),
+ );
+ }
+
+ /**
+ * @dataProvider insert_data
+ */
+ public function test_insert($expected_data, $expected)
+ {
+ $this->assertEquals($expected_data, $this->set->insert(array(
+ 'forum_desc' => '',
+ 'forum_rules' => '',
+ )));
+
+ $result = $this->db->sql_query('SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ FROM phpbb_forums
+ ORDER BY left_id, forum_id ASC');
+ $this->assertEquals($expected, $this->db->sql_fetchrowset($result));
+ }
+}
From 73d873548400f18b02167ef49195a50a11970c24 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 25 Apr 2013 17:19:52 +0200
Subject: [PATCH 253/704] [ticket/11495] Remove fixing function from tree
interface
The fixing function is implementation dependent.
PHPBB3-11495
---
phpBB/includes/tree/interface.php | 34 ++++++-------------------------
phpBB/includes/tree/nestedset.php | 19 ++++++++++++++++-
2 files changed, 24 insertions(+), 29 deletions(-)
diff --git a/phpBB/includes/tree/interface.php b/phpBB/includes/tree/interface.php
index fd10bd357f..babd0ad03d 100644
--- a/phpBB/includes/tree/interface.php
+++ b/phpBB/includes/tree/interface.php
@@ -18,7 +18,7 @@ if (!defined('IN_PHPBB'))
interface phpbb_tree_interface
{
/**
- * Insert an item into the nested set (also insert the rows into the table)
+ * Insert an item into the tree (also insert the rows into the table)
*
* @param array $item The item to be added
* @return array Array with item data as set in the database
@@ -26,7 +26,7 @@ interface phpbb_tree_interface
public function insert(array $additional_data);
/**
- * Add an item at the end of the nested set
+ * Add an item at the end of the tree
*
* @param array $item The item to be added
* @return bool True if the item was added
@@ -34,9 +34,9 @@ interface phpbb_tree_interface
public function add(array $item);
/**
- * Remove an item from the nested set
+ * Remove an item from the tree
*
- * Also removes all subitems from the nested set
+ * Also removes all subitems from the tree
*
* @param int $item_id The item to be deleted
* @return array Item ids that have been removed
@@ -44,9 +44,9 @@ interface phpbb_tree_interface
public function remove($item);
/**
- * Delete an item from the nested set (also deletes the rows form the table)
+ * Delete an item from the tree
*
- * Also deletes all subitems from the nested set
+ * Also deletes all subitems from the tree
*
* @param int $item_id The item to be deleted
* @return array Item ids that have been deleted
@@ -146,26 +146,4 @@ interface phpbb_tree_interface
* ID => Item data
*/
public function get_parent_data(array $item);
-
- /**
- * Regenerate left/right ids from parent/child relationship
- *
- * This method regenerates the left/right ids for the nested set based on
- * the parent/child relations. This function executes three queries per
- * item, so it should only be called, when the set has one of the following
- * problems:
- * - The set has a duplicated value inside the left/right id chain
- * - The set has a missing value inside the left/right id chain
- * - The set has items that do not have a left/right is set
- *
- * When regenerating the items, the items are sorted by parent id and their
- * current left id, so the current child/parent relationships are kept
- * and running the function on a working set will not change any orders.
- *
- * @param int $new_id First left_id to be used (should start with 1)
- * @param int $parent_id parent_id of the current set (default = 0)
- * @param bool $reset_ids Should we reset all left_id/right_id on the first call?
- * @return int $new_id The next left_id/right_id that should be used
- */
- public function regenerate_left_right_ids($new_id, $parent_id = 0, $reset_ids = false);
}
diff --git a/phpBB/includes/tree/nestedset.php b/phpBB/includes/tree/nestedset.php
index 2110e1a6d2..72e3aa4d71 100644
--- a/phpBB/includes/tree/nestedset.php
+++ b/phpBB/includes/tree/nestedset.php
@@ -696,7 +696,24 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
}
/**
- * @inheritdoc
+ * Regenerate left/right ids from parent/child relationship
+ *
+ * This method regenerates the left/right ids for the tree based on
+ * the parent/child relations. This function executes three queries per
+ * item, so it should only be called, when the set has one of the following
+ * problems:
+ * - The set has a duplicated value inside the left/right id chain
+ * - The set has a missing value inside the left/right id chain
+ * - The set has items that do not have a left/right is set
+ *
+ * When regenerating the items, the items are sorted by parent id and their
+ * current left id, so the current child/parent relationships are kept
+ * and running the function on a working set will not change any orders.
+ *
+ * @param int $new_id First left_id to be used (should start with 1)
+ * @param int $parent_id parent_id of the current set (default = 0)
+ * @param bool $reset_ids Should we reset all left_id/right_id on the first call?
+ * @return int $new_id The next left_id/right_id that should be used
*/
public function regenerate_left_right_ids($new_id, $parent_id = 0, $reset_ids = false)
{
From abfb7bc51fa254edd6274e39625eb8a4edec32be Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 25 Apr 2013 17:24:18 +0200
Subject: [PATCH 254/704] [ticket/11495] Remove add/remove from the interface
PHPBB3-11495
---
phpBB/includes/tree/interface.php | 20 +-------------------
phpBB/includes/tree/nestedset.php | 16 ++++++++++++----
2 files changed, 13 insertions(+), 23 deletions(-)
diff --git a/phpBB/includes/tree/interface.php b/phpBB/includes/tree/interface.php
index babd0ad03d..3f03363151 100644
--- a/phpBB/includes/tree/interface.php
+++ b/phpBB/includes/tree/interface.php
@@ -18,31 +18,13 @@ if (!defined('IN_PHPBB'))
interface phpbb_tree_interface
{
/**
- * Insert an item into the tree (also insert the rows into the table)
+ * Insert an item into the tree
*
* @param array $item The item to be added
* @return array Array with item data as set in the database
*/
public function insert(array $additional_data);
- /**
- * Add an item at the end of the tree
- *
- * @param array $item The item to be added
- * @return bool True if the item was added
- */
- public function add(array $item);
-
- /**
- * Remove an item from the tree
- *
- * Also removes all subitems from the tree
- *
- * @param int $item_id The item to be deleted
- * @return array Item ids that have been removed
- */
- public function remove($item);
-
/**
* Delete an item from the tree
*
diff --git a/phpBB/includes/tree/nestedset.php b/phpBB/includes/tree/nestedset.php
index 72e3aa4d71..8f73b9181e 100644
--- a/phpBB/includes/tree/nestedset.php
+++ b/phpBB/includes/tree/nestedset.php
@@ -84,9 +84,12 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
}
/**
- * @inheritdoc
+ * Add an existing item at the end of the tree
+ *
+ * @param array $item The item to be added
+ * @return bool True if the item was added
*/
- public function add(array $item)
+ protected function add(array $item)
{
$sql = 'SELECT MAX(' . $this->column_right_id . ') AS ' . $this->column_right_id . '
FROM ' . $this->table_name . '
@@ -111,9 +114,14 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
}
/**
- * @inheritdoc
+ * Remove an item from the tree WITHOUT removing the items from the table
+ *
+ * Also removes all subitems from the tree
+ *
+ * @param int $item_id The item to be deleted
+ * @return array Item ids that have been removed
*/
- public function remove($item_id)
+ protected function remove($item_id)
{
$items = $this->get_children_branch_data($item_id);
$item_ids = array_keys($items);
From ce07b2776577d1ed3987b38e231a367cfef21db6 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 25 Apr 2013 17:27:33 +0200
Subject: [PATCH 255/704] [ticket/11495] Fix failing unit tests
PHPBB3-11495
---
tests/tree/nestedset_forum_get_data_test.php | 2 +-
tests/tree/nestedset_forum_insert_delete_test.php | 2 +-
tests/tree/nestedset_forum_move_test.php | 2 +-
tests/tree/nestedset_forum_regenerate_test.php | 2 +-
tests/tree/nestedset_forum_test.php | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/tests/tree/nestedset_forum_get_data_test.php b/tests/tree/nestedset_forum_get_data_test.php
index 4ce679f05d..24ada93409 100644
--- a/tests/tree/nestedset_forum_get_data_test.php
+++ b/tests/tree/nestedset_forum_get_data_test.php
@@ -7,7 +7,7 @@
*
*/
-require_once dirname(__FILE__) . '/set_forum_base.php';
+require_once dirname(__FILE__) . '/nestedset_forum_base.php';
class phpbb_tests_tree_nestedset_forum_get_data_test extends phpbb_tests_tree_nestedset_forum_base
{
diff --git a/tests/tree/nestedset_forum_insert_delete_test.php b/tests/tree/nestedset_forum_insert_delete_test.php
index 02259f9091..67692d2b7e 100644
--- a/tests/tree/nestedset_forum_insert_delete_test.php
+++ b/tests/tree/nestedset_forum_insert_delete_test.php
@@ -7,7 +7,7 @@
*
*/
-require_once dirname(__FILE__) . '/set_forum_base.php';
+require_once dirname(__FILE__) . '/nestedset_forum_base.php';
class phpbb_tests_tree_nestedset_forum_add_remove_test extends phpbb_tests_tree_nestedset_forum_base
{
diff --git a/tests/tree/nestedset_forum_move_test.php b/tests/tree/nestedset_forum_move_test.php
index 29af693374..9561089378 100644
--- a/tests/tree/nestedset_forum_move_test.php
+++ b/tests/tree/nestedset_forum_move_test.php
@@ -7,7 +7,7 @@
*
*/
-require_once dirname(__FILE__) . '/set_forum_base.php';
+require_once dirname(__FILE__) . '/nestedset_forum_base.php';
class phpbb_tests_tree_nestedset_forum_move_test extends phpbb_tests_tree_nestedset_forum_base
{
diff --git a/tests/tree/nestedset_forum_regenerate_test.php b/tests/tree/nestedset_forum_regenerate_test.php
index 3bd272370a..6b1759d1cc 100644
--- a/tests/tree/nestedset_forum_regenerate_test.php
+++ b/tests/tree/nestedset_forum_regenerate_test.php
@@ -7,7 +7,7 @@
*
*/
-require_once dirname(__FILE__) . '/set_forum_base.php';
+require_once dirname(__FILE__) . '/nestedset_forum_base.php';
class phpbb_tests_tree_nestedset_forum_regenerate_test extends phpbb_tests_tree_nestedset_forum_base
{
diff --git a/tests/tree/nestedset_forum_test.php b/tests/tree/nestedset_forum_test.php
index ac02886e95..5e6d912596 100644
--- a/tests/tree/nestedset_forum_test.php
+++ b/tests/tree/nestedset_forum_test.php
@@ -7,7 +7,7 @@
*
*/
-require_once dirname(__FILE__) . '/set_forum_base.php';
+require_once dirname(__FILE__) . '/nestedset_forum_base.php';
class pphpbb_tests_tree_nestedset_forum_test extends phpbb_tests_tree_nestedset_forum_base
{
From 2dbe3b3c975d61b84310f7da27b8d525a22d1723 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Sat, 26 Jan 2013 01:09:30 +0530
Subject: [PATCH 256/704] [ticket/10325] add new config value to database
PHPBB3-10325
---
phpBB/includes/db/migration/data/310/dev.php | 2 ++
phpBB/install/schemas/schema_data.sql | 1 +
2 files changed, 3 insertions(+)
diff --git a/phpBB/includes/db/migration/data/310/dev.php b/phpBB/includes/db/migration/data/310/dev.php
index 13b36bbf30..d3f3a341b2 100644
--- a/phpBB/includes/db/migration/data/310/dev.php
+++ b/phpBB/includes/db/migration/data/310/dev.php
@@ -84,6 +84,8 @@ class phpbb_db_migration_data_310_dev extends phpbb_db_migration
return array(
array('config.update', array('search_type', 'phpbb_search_' . $this->config['search_type'])),
+ array('config.add', array('allow_forgot_password', 1)),
+
array('config.add', array('fulltext_postgres_ts_name', 'simple')),
array('config.add', array('fulltext_postgres_min_word_len', 4)),
array('config.add', array('fulltext_postgres_max_word_len', 254)),
diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql
index 8a8740a220..d9ba09ff4d 100644
--- a/phpBB/install/schemas/schema_data.sql
+++ b/phpBB/install/schemas/schema_data.sql
@@ -18,6 +18,7 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_bbcode', '1'
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_birthdays', '1');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_bookmarks', '1');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_emailreuse', '0');
+INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_forgot_password', '1');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_forum_notify', '1');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_mass_pm', '1');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_name_chars', 'USERNAME_CHARS_ANY');
From f8012cc239d8b442e78bbbb8a5cc5856d2a714a0 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Sat, 26 Jan 2013 11:10:17 +0530
Subject: [PATCH 257/704] [ticket/10325] fix language
PHPBB3-10325
---
phpBB/includes/ucp/ucp_remind.php | 2 +-
phpBB/language/en/ucp.php | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/phpBB/includes/ucp/ucp_remind.php b/phpBB/includes/ucp/ucp_remind.php
index dd95c29def..a25d7da91a 100644
--- a/phpBB/includes/ucp/ucp_remind.php
+++ b/phpBB/includes/ucp/ucp_remind.php
@@ -31,7 +31,7 @@ class ucp_remind
if (!$config['allow_forgot_password'])
{
- trigger_error('UCP_FORGOT_PASSWORD_DISABLE');
+ trigger_error($user->lang('UCP_FORGOT_PASSWORD_DISABLE', '', ' '));
}
$username = request_var('username', '', true);
diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php
index a98dc6f11e..ce93c7bcf8 100644
--- a/phpBB/language/en/ucp.php
+++ b/phpBB/language/en/ucp.php
@@ -521,7 +521,7 @@ $lang = array_merge($lang, array(
'UCP_USERGROUPS_MEMBER' => 'Edit memberships',
'UCP_USERGROUPS_MANAGE' => 'Manage groups',
- 'UCP_FORGOT_PASSWORD_DISABLE' => 'Function has been disabled.',
+ 'UCP_FORGOT_PASSWORD_DISABLE' => 'The administrator has disabled the password reset ability. If you need help accessing your account, please contact the %sBoard Administrator%s',
'UCP_REGISTER_DISABLE' => 'Creating a new account is currently not possible.',
'UCP_REMIND' => 'Send password',
'UCP_RESEND' => 'Send activation email',
From 1a51abcca293b0e2bd836af0dcb9d77054c1d401 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Sun, 27 Jan 2013 03:07:52 +0530
Subject: [PATCH 258/704] [ticket/10325] change language var
PHPBB3-10325
---
phpBB/includes/acp/acp_board.php | 2 +-
phpBB/includes/db/migration/data/310/dev.php | 2 +-
phpBB/includes/ucp/ucp_remind.php | 2 +-
phpBB/install/schemas/schema_data.sql | 2 +-
phpBB/language/en/acp/board.php | 4 ++--
5 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/phpBB/includes/acp/acp_board.php b/phpBB/includes/acp/acp_board.php
index 1956ade31a..ab44920f0a 100644
--- a/phpBB/includes/acp/acp_board.php
+++ b/phpBB/includes/acp/acp_board.php
@@ -398,7 +398,7 @@ class acp_board
'vars' => array(
'legend1' => 'ACP_SECURITY_SETTINGS',
'allow_autologin' => array('lang' => 'ALLOW_AUTOLOGIN', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
- 'allow_forgot_password' => array('lang' => 'ALLOW_FORGOT_PASSWORD', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
+ 'allow_password_reset' => array('lang' => 'ALLOW_PASSWORD_RESET', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'max_autologin_time' => array('lang' => 'AUTOLOGIN_LENGTH', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
'ip_check' => array('lang' => 'IP_VALID', 'validate' => 'int', 'type' => 'custom', 'method' => 'select_ip_check', 'explain' => true),
'browser_check' => array('lang' => 'BROWSER_VALID', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
diff --git a/phpBB/includes/db/migration/data/310/dev.php b/phpBB/includes/db/migration/data/310/dev.php
index d3f3a341b2..0794567f1b 100644
--- a/phpBB/includes/db/migration/data/310/dev.php
+++ b/phpBB/includes/db/migration/data/310/dev.php
@@ -84,7 +84,7 @@ class phpbb_db_migration_data_310_dev extends phpbb_db_migration
return array(
array('config.update', array('search_type', 'phpbb_search_' . $this->config['search_type'])),
- array('config.add', array('allow_forgot_password', 1)),
+ array('config.add', array('allow_password_reset', 1)),
array('config.add', array('fulltext_postgres_ts_name', 'simple')),
array('config.add', array('fulltext_postgres_min_word_len', 4)),
diff --git a/phpBB/includes/ucp/ucp_remind.php b/phpBB/includes/ucp/ucp_remind.php
index a25d7da91a..4a2d06e99a 100644
--- a/phpBB/includes/ucp/ucp_remind.php
+++ b/phpBB/includes/ucp/ucp_remind.php
@@ -29,7 +29,7 @@ class ucp_remind
global $config, $phpbb_root_path, $phpEx;
global $db, $user, $auth, $template;
- if (!$config['allow_forgot_password'])
+ if (!$config['allow_password_reset'])
{
trigger_error($user->lang('UCP_FORGOT_PASSWORD_DISABLE', '', ' '));
}
diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql
index d9ba09ff4d..9690ec14b8 100644
--- a/phpBB/install/schemas/schema_data.sql
+++ b/phpBB/install/schemas/schema_data.sql
@@ -18,7 +18,7 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_bbcode', '1'
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_birthdays', '1');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_bookmarks', '1');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_emailreuse', '0');
-INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_forgot_password', '1');
+INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_password_reset', '1');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_forum_notify', '1');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_mass_pm', '1');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_name_chars', 'USERNAME_CHARS_ANY');
diff --git a/phpBB/language/en/acp/board.php b/phpBB/language/en/acp/board.php
index 4b2020b894..c0f6153788 100644
--- a/phpBB/language/en/acp/board.php
+++ b/phpBB/language/en/acp/board.php
@@ -454,8 +454,8 @@ $lang = array_merge($lang, array(
'ALL' => 'All',
'ALLOW_AUTOLOGIN' => 'Allow "Remember Me" logins',
'ALLOW_AUTOLOGIN_EXPLAIN' => 'Determines whether users are given "Remember Me" option when they visit the board.',
- 'ALLOW_FORGOT_PASSWORD' => 'Allow "forgot password"',
- 'ALLOW_FORGOT_PASSWORD_EXPLAIN' => 'Determines whether users can use the "forgot password" option to recover their account',
+ 'ALLOW_PASSWORD_RESET' => 'Allow "forgot password"',
+ 'ALLOW_PASSWORD_RESET_EXPLAIN' => 'Determines whether users can use the "forgot password" option to recover their account',
'AUTOLOGIN_LENGTH' => '"Remember Me" login key expiration length (in days)',
'AUTOLOGIN_LENGTH_EXPLAIN' => 'Number of days after which "Remember Me" login keys are removed or zero to disable.',
'BROWSER_VALID' => 'Validate browser',
From f1e615c4297a509325b764e1966118fe171ebbb5 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Sun, 27 Jan 2013 03:09:52 +0530
Subject: [PATCH 259/704] [ticket/10325] fix language variable
PHPBB3-10325
---
phpBB/includes/ucp/ucp_remind.php | 2 +-
phpBB/language/en/ucp.php | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/phpBB/includes/ucp/ucp_remind.php b/phpBB/includes/ucp/ucp_remind.php
index 4a2d06e99a..cd4d13c8a7 100644
--- a/phpBB/includes/ucp/ucp_remind.php
+++ b/phpBB/includes/ucp/ucp_remind.php
@@ -31,7 +31,7 @@ class ucp_remind
if (!$config['allow_password_reset'])
{
- trigger_error($user->lang('UCP_FORGOT_PASSWORD_DISABLE', '', ' '));
+ trigger_error($user->lang('UCP_FORGOT_PASSWORD_DISABLED', '', ' '));
}
$username = request_var('username', '', true);
diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php
index ce93c7bcf8..3864414af0 100644
--- a/phpBB/language/en/ucp.php
+++ b/phpBB/language/en/ucp.php
@@ -521,7 +521,7 @@ $lang = array_merge($lang, array(
'UCP_USERGROUPS_MEMBER' => 'Edit memberships',
'UCP_USERGROUPS_MANAGE' => 'Manage groups',
- 'UCP_FORGOT_PASSWORD_DISABLE' => 'The administrator has disabled the password reset ability. If you need help accessing your account, please contact the %sBoard Administrator%s',
+ 'UCP_FORGOT_PASSWORD_DISABLED' => 'The administrator has disabled the password reset ability. If you need help accessing your account, please contact the %sBoard Administrator%s',
'UCP_REGISTER_DISABLE' => 'Creating a new account is currently not possible.',
'UCP_REMIND' => 'Send password',
'UCP_RESEND' => 'Send activation email',
From c048067bbd45b51595cc243cc4edde1d84eda405 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Sun, 27 Jan 2013 11:27:28 +0530
Subject: [PATCH 260/704] [ticket/10325] fix language key
PHPBB3-10325
---
phpBB/includes/ucp/ucp_remind.php | 2 +-
phpBB/language/en/ucp.php | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/phpBB/includes/ucp/ucp_remind.php b/phpBB/includes/ucp/ucp_remind.php
index cd4d13c8a7..ff7ab53736 100644
--- a/phpBB/includes/ucp/ucp_remind.php
+++ b/phpBB/includes/ucp/ucp_remind.php
@@ -31,7 +31,7 @@ class ucp_remind
if (!$config['allow_password_reset'])
{
- trigger_error($user->lang('UCP_FORGOT_PASSWORD_DISABLED', '', ' '));
+ trigger_error($user->lang('UCP_PASSWORD_RESET_DISABLED', '', ' '));
}
$username = request_var('username', '', true);
diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php
index 3864414af0..920dfaf176 100644
--- a/phpBB/language/en/ucp.php
+++ b/phpBB/language/en/ucp.php
@@ -521,7 +521,7 @@ $lang = array_merge($lang, array(
'UCP_USERGROUPS_MEMBER' => 'Edit memberships',
'UCP_USERGROUPS_MANAGE' => 'Manage groups',
- 'UCP_FORGOT_PASSWORD_DISABLED' => 'The administrator has disabled the password reset ability. If you need help accessing your account, please contact the %sBoard Administrator%s',
+ 'UCP_PASSWORD_RESET_DISABLED' => 'The administrator has disabled the password reset ability. If you need help accessing your account, please contact the %sBoard Administrator%s',
'UCP_REGISTER_DISABLE' => 'Creating a new account is currently not possible.',
'UCP_REMIND' => 'Send password',
'UCP_RESEND' => 'Send activation email',
From 419aaa402f025d16e8b823586e32917d1d036599 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Mon, 28 Jan 2013 01:05:04 +0530
Subject: [PATCH 261/704] [ticket/10325] improve acp option language
PHPBB3-10325
---
phpBB/language/en/acp/board.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/language/en/acp/board.php b/phpBB/language/en/acp/board.php
index c0f6153788..c084779a26 100644
--- a/phpBB/language/en/acp/board.php
+++ b/phpBB/language/en/acp/board.php
@@ -455,7 +455,7 @@ $lang = array_merge($lang, array(
'ALLOW_AUTOLOGIN' => 'Allow "Remember Me" logins',
'ALLOW_AUTOLOGIN_EXPLAIN' => 'Determines whether users are given "Remember Me" option when they visit the board.',
'ALLOW_PASSWORD_RESET' => 'Allow "forgot password"',
- 'ALLOW_PASSWORD_RESET_EXPLAIN' => 'Determines whether users can use the "forgot password" option to recover their account',
+ 'ALLOW_PASSWORD_RESET_EXPLAIN' => 'Determines whether or not users are able to use the "I forgot my password" link on the login page to recover their account. This feature can be disabled when using an external authentication plugin.',
'AUTOLOGIN_LENGTH' => '"Remember Me" login key expiration length (in days)',
'AUTOLOGIN_LENGTH_EXPLAIN' => 'Number of days after which "Remember Me" login keys are removed or zero to disable.',
'BROWSER_VALID' => 'Validate browser',
From d242b7a1a5c9b6ecc8bc21027a33bc344501a0ce Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Thu, 25 Apr 2013 21:05:02 +0530
Subject: [PATCH 262/704] [ticket/10325] fix language in acp and ucp
PHPBB3-10325
---
phpBB/language/en/acp/board.php | 2 +-
phpBB/language/en/ucp.php | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/phpBB/language/en/acp/board.php b/phpBB/language/en/acp/board.php
index c084779a26..39ad5b78bb 100644
--- a/phpBB/language/en/acp/board.php
+++ b/phpBB/language/en/acp/board.php
@@ -455,7 +455,7 @@ $lang = array_merge($lang, array(
'ALLOW_AUTOLOGIN' => 'Allow "Remember Me" logins',
'ALLOW_AUTOLOGIN_EXPLAIN' => 'Determines whether users are given "Remember Me" option when they visit the board.',
'ALLOW_PASSWORD_RESET' => 'Allow "forgot password"',
- 'ALLOW_PASSWORD_RESET_EXPLAIN' => 'Determines whether or not users are able to use the "I forgot my password" link on the login page to recover their account. This feature can be disabled when using an external authentication plugin.',
+ 'ALLOW_PASSWORD_RESET_EXPLAIN' => 'Determines whether or not users are able to use the "I forgot my password" link on the login page to recover their account. If you use an external authentication mechanism you may wish to disable this feature.',
'AUTOLOGIN_LENGTH' => '"Remember Me" login key expiration length (in days)',
'AUTOLOGIN_LENGTH_EXPLAIN' => 'Number of days after which "Remember Me" login keys are removed or zero to disable.',
'BROWSER_VALID' => 'Validate browser',
diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php
index 920dfaf176..372e44a94d 100644
--- a/phpBB/language/en/ucp.php
+++ b/phpBB/language/en/ucp.php
@@ -521,7 +521,7 @@ $lang = array_merge($lang, array(
'UCP_USERGROUPS_MEMBER' => 'Edit memberships',
'UCP_USERGROUPS_MANAGE' => 'Manage groups',
- 'UCP_PASSWORD_RESET_DISABLED' => 'The administrator has disabled the password reset ability. If you need help accessing your account, please contact the %sBoard Administrator%s',
+ 'UCP_PASSWORD_RESET_DISABLED' => 'The administrator has disabled the password reset functionality. If you need help accessing your account, please contact the %sBoard Administrator%s',
'UCP_REGISTER_DISABLE' => 'Creating a new account is currently not possible.',
'UCP_REMIND' => 'Send password',
'UCP_RESEND' => 'Send activation email',
From 42cfb7264dec3a1e8f141ff40b17b841e5c998cc Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Thu, 25 Apr 2013 10:58:48 -0500
Subject: [PATCH 263/704] [ticket/11237] Fix PHP error in acp_prune.php
Also making the code a bit more efficient (removing one SQL query)
PHPBB3-11237
---
phpBB/includes/acp/acp_prune.php | 36 +++++++++++++-------------------
1 file changed, 15 insertions(+), 21 deletions(-)
diff --git a/phpBB/includes/acp/acp_prune.php b/phpBB/includes/acp/acp_prune.php
index a5dc02849a..54ffe24594 100644
--- a/phpBB/includes/acp/acp_prune.php
+++ b/phpBB/includes/acp/acp_prune.php
@@ -491,11 +491,12 @@ class acp_prune
if ($group_id)
{
- $sql = 'SELECT user_id
- FROM ' . USER_GROUP_TABLE . '
- WHERE group_id = ' . (int) $group_id . '
- AND user_pending = 0
- AND ' . $db->sql_in_set('user_id', $user_ids, false, true);
+ $sql = 'SELECT u.user_id, u.username
+ FROM ' . USER_GROUP_TABLE . ' ug, ' . USERS_TABLE . ' u
+ WHERE ug.group_id = ' . (int) $group_id . '
+ AND ug.user_pending = 0
+ AND ' . $db->sql_in_set('ug.user_id', $user_ids, false, true) . '
+ AND u.user_id = ug.user_id';
$result = $db->sql_query($sql);
// we're performing an intersection operation, so all the relevant users
@@ -504,24 +505,19 @@ class acp_prune
$user_ids = $usernames = array();
while ($row = $db->sql_fetchrow($result))
{
- $user_ids[] = $row['poster_id'];
+ $user_ids[] = $row['user_id'];
+ $usernames[$row['user_id']] = $row['username'];
}
$db->sql_freeresult($result);
-
- // only get usernames if they are needed (not part of some later query)
- if (!$posts_on_queue)
- {
- // this is an additional query aginst the users table
- user_get_id_name($user_ids, $usernames);
- }
}
if ($posts_on_queue)
{
- $sql = 'SELECT poster_id, COUNT(post_id) AS queue_posts
- FROM ' . POSTS_TABLE . '
- WHERE ' . $db->sql_in_set('poster_id', $user_ids, false, true) . '
- GROUP BY poster_id
+ $sql = 'SELECT u.user_id, u.username, COUNT(p.post_id) AS queue_posts
+ FROM ' . POSTS_TABLE . ' p, ' . USERS_TABLE . ' u
+ WHERE ' . $db->sql_in_set('p.poster_id', $user_ids, false, true) . '
+ AND u.user_id = p.poster_id
+ GROUP BY p.poster_id
HAVING queue_posts ' . $key_match[$queue_select] . ' ' . $posts_on_queue;
$result = $db->sql_query($result);
@@ -529,12 +525,10 @@ class acp_prune
$user_ids = $usernames = array();
while ($row = $db->sql_fetchrow($result))
{
- $user_ids[] = $row['poster_id'];
+ $user_ids[] = $row['user_id'];
+ $usernames[$row['user_id']] = $row['username'];
}
$db->sql_freeresult($result);
-
- // do an additional query to get the correct set of usernames
- user_get_id_name($user_ids, $usernames);
}
}
}
From 0def8b7d9cb06cd2abf462f18f1404fc119861bd Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 25 Apr 2013 18:09:21 +0200
Subject: [PATCH 264/704] [ticket/11495] Use constructor arguments over
properties in implementation
PHPBB3-11495
---
phpBB/includes/tree/nestedset.php | 31 ++++++++++++++++++++
phpBB/includes/tree/nestedset_forum.php | 38 +++++++++++--------------
2 files changed, 47 insertions(+), 22 deletions(-)
diff --git a/phpBB/includes/tree/nestedset.php b/phpBB/includes/tree/nestedset.php
index 8f73b9181e..245a8165ef 100644
--- a/phpBB/includes/tree/nestedset.php
+++ b/phpBB/includes/tree/nestedset.php
@@ -55,6 +55,37 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
*/
protected $item_basic_data = array('*');
+ /**
+ * Construct
+ *
+ * @param phpbb_db_driver $db Database connection
+ * @param phpbb_lock_db $lock Lock class used to lock the table when moving forums around
+ * @param string $table_name Table name
+ * @param string $message_prefix Prefix for the messages thrown by exceptions
+ * @param string $sql_where Additional SQL restrictions for the queries
+ * @param array $item_basic_data Array with basic item data that is stored in item_parents
+ * @param array $columns Array with column names to overwrite
+ */
+ public function __construct(phpbb_db_driver $db, phpbb_lock_db $lock, $table_name, $message_prefix = '', $sql_where = '', $item_basic_data = array(), $columns = array())
+ {
+ $this->db = $db;
+ $this->lock = $lock;
+
+ $this->table_name = $table_name;
+ $this->message_prefix = $message_prefix;
+ $this->sql_where = $sql_where;
+ $this->item_basic_data = (!empty($item_basic_data)) ? $item_basic_data : array('*');
+
+ if (!empty($columns))
+ {
+ foreach ($columns as $column => $name)
+ {
+ $column_name = 'column_' . $column;
+ $this->$column_name = $name;
+ }
+ }
+ }
+
/**
* Returns additional sql where restrictions
*
diff --git a/phpBB/includes/tree/nestedset_forum.php b/phpBB/includes/tree/nestedset_forum.php
index 0a66e68915..7dcb12331c 100644
--- a/phpBB/includes/tree/nestedset_forum.php
+++ b/phpBB/includes/tree/nestedset_forum.php
@@ -17,25 +17,6 @@ if (!defined('IN_PHPBB'))
class phpbb_tree_nestedset_forum extends phpbb_tree_nestedset
{
- /**
- * Column names in the table
- * @var string
- */
- protected $column_item_id = 'forum_id';
- protected $column_item_parents = 'forum_parents';
-
- /**
- * Prefix for the language keys returned by exceptions
- * @var string
- */
- protected $message_prefix = 'FORUM_NESTEDSET_';
-
- /**
- * List of item properties to be cached in $item_parents
- * @var array
- */
- protected $item_basic_data = array('forum_id', 'forum_name', 'forum_type');
-
/**
* Construct
*
@@ -45,8 +26,21 @@ class phpbb_tree_nestedset_forum extends phpbb_tree_nestedset
*/
public function __construct(phpbb_db_driver $db, phpbb_lock_db $lock, $table_name)
{
- $this->db = $db;
- $this->lock = $lock;
- $this->table_name = $table_name;
+ parent::__construct(
+ $db,
+ $lock,
+ $table_name,
+ 'FORUM_NESTEDSET_',
+ '',
+ array(
+ 'forum_id',
+ 'forum_name',
+ 'forum_type',
+ ),
+ array(
+ 'item_id' => 'forum_id',
+ 'item_parents' => 'forum_parents',
+ )
+ );
}
}
From ee457e584c66938cc521eecf0ec303a81c536896 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Thu, 25 Apr 2013 11:16:00 -0500
Subject: [PATCH 265/704] [ticket/11236] Correct HTML
PHPBB3-11236
---
phpBB/includes/acp/acp_prune.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/includes/acp/acp_prune.php b/phpBB/includes/acp/acp_prune.php
index a5dc02849a..e43f1558b1 100644
--- a/phpBB/includes/acp/acp_prune.php
+++ b/phpBB/includes/acp/acp_prune.php
@@ -340,7 +340,7 @@ class acp_prune
while ($row = $db->sql_fetchrow($result))
{
- $s_group_list .= '' . $row['group_name'] . '';
+ $s_group_list .= ' ' . $row['group_name'] . ' ';
}
$db->sql_freeresult($result);
From 1a16ee4cb270f81ebeb8697e4bffaaa305010116 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Thu, 25 Apr 2013 11:20:13 -0500
Subject: [PATCH 266/704] [ticket/11236] Do not require group selection in
prune users
PHPBB3-11236
---
phpBB/includes/acp/acp_prune.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/includes/acp/acp_prune.php b/phpBB/includes/acp/acp_prune.php
index e43f1558b1..dc0f9a345f 100644
--- a/phpBB/includes/acp/acp_prune.php
+++ b/phpBB/includes/acp/acp_prune.php
@@ -331,7 +331,7 @@ class acp_prune
$s_find_active_time .= '' . $value . ' ';
}
- $s_group_list = '';
+ $s_group_list = ' ';
$sql = 'SELECT group_id, group_name
FROM ' . GROUPS_TABLE . '
WHERE group_type <> ' . GROUP_SPECIAL . '
From e7cb0f687df93120b003ad205fc6cb3315379c80 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Thu, 25 Apr 2013 11:23:09 -0500
Subject: [PATCH 267/704] [ticket/11236] Change PRUNE_USERS_GROUP_EXPLAIN
language
PHPBB3-11236
---
phpBB/language/en/acp/prune.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/language/en/acp/prune.php b/phpBB/language/en/acp/prune.php
index fcc085205b..3e890182c0 100644
--- a/phpBB/language/en/acp/prune.php
+++ b/phpBB/language/en/acp/prune.php
@@ -51,7 +51,7 @@ $lang = array_merge($lang, array(
'LAST_ACTIVE_EXPLAIN' => 'Enter a date in YYYY-MM-DD format. Enter 0000-00-00 to prune users who never logged in, Before and After conditions will be ignored.',
'POSTS_ON_QUEUE' => 'Posts Awaiting Approval',
- 'PRUNE_USERS_GROUP_EXPLAIN' => 'Selects all members of the group for pruning.',
+ 'PRUNE_USERS_GROUP_EXPLAIN' => 'Limit to users within the selected group.',
'PRUNE_USERS_LIST' => 'Users to be pruned',
'PRUNE_USERS_LIST_DELETE' => 'With the selected critera for pruning users the following accounts will be removed. You can remove individual users from the deletion list by unchecking the box next to their username.',
'PRUNE_USERS_LIST_DEACTIVATE' => 'With the selected critera for pruning users the following accounts will be deactivated. You can remove individual users from the deactivation list by unchecking the box next to their username.',
From 2fa5f9591e06e82ca76e7ac7e653d8ad4494eb67 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Thu, 25 Apr 2013 22:52:40 +0530
Subject: [PATCH 268/704] [ticket/10325] add logout function in
functional_test_case
PHPBB3-10325
---
tests/test_framework/phpbb_functional_test_case.php | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/tests/test_framework/phpbb_functional_test_case.php b/tests/test_framework/phpbb_functional_test_case.php
index 5534de89c9..dae37f336d 100644
--- a/tests/test_framework/phpbb_functional_test_case.php
+++ b/tests/test_framework/phpbb_functional_test_case.php
@@ -425,6 +425,17 @@ class phpbb_functional_test_case extends phpbb_test_case
}
}
+ protected function logout()
+ {
+ $this->add_lang('ucp');
+
+ $crawler = $this->request('GET', 'ucp.php?sid=' . $this->sid . '&mode=logout');
+ $this->assert_response_success();
+ $this->assertContains($this->lang('LOGOUT_REDIRECT'), $crawler->filter('#message')->text());
+ unset($this->sid);
+
+ }
+
/**
* Login to the ACP
* You must run login() before calling this.
From 27aa5e7b713b58eb0afb8d92e684a6868eb080ce Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Thu, 25 Apr 2013 22:58:03 +0530
Subject: [PATCH 269/704] [ticket/10325] functional tests for forgot password
functionality
PHPBB3-10325
---
tests/functional/forgot_password_test.php | 45 +++++++++++++++++++++++
1 file changed, 45 insertions(+)
create mode 100644 tests/functional/forgot_password_test.php
diff --git a/tests/functional/forgot_password_test.php b/tests/functional/forgot_password_test.php
new file mode 100644
index 0000000000..3ae74ed1e9
--- /dev/null
+++ b/tests/functional/forgot_password_test.php
@@ -0,0 +1,45 @@
+add_lang('ucp');
+ $crawler = $this->request('GET', 'ucp.php?mode=sendpassword');
+ $this->assertEquals($this->lang('SEND_PASSWORD'), $crawler->filter('h2')->text());
+ }
+
+ public function test_forgot_password_disabled()
+ {
+ $this->login();
+ $this->admin_login();
+ $this->add_lang('ucp');
+ $crawler = $this->request('GET', 'adm/index.php?sid=' . $this->sid . '&i=acp_board&mode=security');
+
+ $form = $crawler->selectButton('Submit')->form();
+ $values = $form->getValues();
+
+ $values["config[allow_password_reset]"] = 0;
+ $form->setValues($values);
+ $crawler = $this->client->submit($form);
+
+ $this->logout();
+
+ $crawler = $this->request('GET', 'ucp.php?mode=sendpassword');
+
+ $this->assertContains($this->lang('UCP_PASSWORD_RESET_DISABLED', '', ''), $crawler->text());
+
+ }
+
+}
From 6801e36defcd9628a7feeebd01c6f34366b70542 Mon Sep 17 00:00:00 2001
From: Nathan Guse
Date: Thu, 25 Apr 2013 14:13:21 -0500
Subject: [PATCH 270/704] [ticket/11435] Fix comments in events test
PHPBB3-11435
---
tests/template/template_events_test.php | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/tests/template/template_events_test.php b/tests/template/template_events_test.php
index 6cea9b92e3..0ac50c7f2b 100644
--- a/tests/template/template_events_test.php
+++ b/tests/template/template_events_test.php
@@ -16,9 +16,10 @@ class phpbb_template_template_events_test extends phpbb_template_template_test_c
return array(
/*
array(
- '', // file
+ '', // Description
'', // dataset
array(), // style names
+ '', // file
array(), // vars
array(), // block vars
array(), // destroy
From ab87fe7982b185e9c08a3fd7248214004b23a58b Mon Sep 17 00:00:00 2001
From: Nathan Guse
Date: Thu, 25 Apr 2013 14:15:04 -0500
Subject: [PATCH 271/704] [ticket/11435] Create test to make sure
template/event output is equal
PHPBB3-11435
---
.../styles/all/template/variable_spacing.html | 6 ++
.../silver/template/variable_spacing.html | 1 +
tests/template/template_spacing_test.php | 87 +++++++++++++++++++
.../template/templates/variable_spacing.html | 6 ++
4 files changed, 100 insertions(+)
create mode 100644 tests/template/datasets/ext_trivial/ext/trivial/styles/all/template/variable_spacing.html
create mode 100644 tests/template/datasets/ext_trivial/styles/silver/template/variable_spacing.html
create mode 100644 tests/template/template_spacing_test.php
create mode 100644 tests/template/templates/variable_spacing.html
diff --git a/tests/template/datasets/ext_trivial/ext/trivial/styles/all/template/variable_spacing.html b/tests/template/datasets/ext_trivial/ext/trivial/styles/all/template/variable_spacing.html
new file mode 100644
index 0000000000..2909e1c136
--- /dev/null
+++ b/tests/template/datasets/ext_trivial/ext/trivial/styles/all/template/variable_spacing.html
@@ -0,0 +1,6 @@
+|{VARIABLE}|
+{VARIABLE}|{VARIABLE}|
+
+|{VARIABLE}
+
+test
\ No newline at end of file
diff --git a/tests/template/datasets/ext_trivial/styles/silver/template/variable_spacing.html b/tests/template/datasets/ext_trivial/styles/silver/template/variable_spacing.html
new file mode 100644
index 0000000000..c11ae9cb40
--- /dev/null
+++ b/tests/template/datasets/ext_trivial/styles/silver/template/variable_spacing.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/tests/template/template_spacing_test.php b/tests/template/template_spacing_test.php
new file mode 100644
index 0000000000..83f8711b38
--- /dev/null
+++ b/tests/template/template_spacing_test.php
@@ -0,0 +1,87 @@
+ '{}',
+ ),
+ array(),
+ array(),
+ '|{}|
+{}|{}|
+|{}
+test
',
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider template_data
+ */
+ public function test_template($desc, $dataset, $style_names, $file, array $vars, array $block_vars, array $destroy, $expected)
+ {
+ // Run test
+ $cache_file = $this->template->cachepath . str_replace('/', '.', $file) . '.php';
+ $this->run_template($file, $vars, $block_vars, $destroy, $expected, $cache_file);
+ }
+
+ /**
+ * @dataProvider template_data
+ */
+ public function test_event($desc, $dataset, $style_names, $file, array $vars, array $block_vars, array $destroy, $expected)
+ {
+ // Reset the engine state
+ $this->setup_engine_for_events($dataset, $style_names);
+
+ // Run test
+ $cache_file = $this->template->cachepath . str_replace('/', '.', $file) . '.php';
+ $this->run_template($file, $vars, $block_vars, $destroy, $expected, $cache_file);
+ }
+
+ protected function setup_engine_for_events($dataset, $style_names, array $new_config = array())
+ {
+ global $phpbb_root_path, $phpEx, $user;
+
+ $defaults = $this->config_defaults();
+ $config = new phpbb_config(array_merge($defaults, $new_config));
+
+ $this->template_path = dirname(__FILE__) . "/datasets/$dataset/styles/silver/template";
+ $this->style_resource_locator = new phpbb_style_resource_locator();
+ $this->extension_manager = new phpbb_mock_filesystem_extension_manager(
+ dirname(__FILE__) . "/datasets/$dataset/"
+ );
+ $this->template = new phpbb_template($phpbb_root_path, $phpEx, $config, $user, $this->style_resource_locator, new phpbb_template_context, $this->extension_manager);
+ $this->style_provider = new phpbb_style_path_provider();
+ $this->style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $this->style_resource_locator, $this->style_provider, $this->template);
+ $this->style->set_custom_style('silver', array($this->template_path), $style_names, '');
+ }
+}
diff --git a/tests/template/templates/variable_spacing.html b/tests/template/templates/variable_spacing.html
new file mode 100644
index 0000000000..2909e1c136
--- /dev/null
+++ b/tests/template/templates/variable_spacing.html
@@ -0,0 +1,6 @@
+|{VARIABLE}|
+{VARIABLE}|{VARIABLE}|
+
+|{VARIABLE}
+
+test
\ No newline at end of file
From baff4287e5a7142b7af41e56c29b064bb56fd7fb Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 25 Apr 2013 22:39:24 +0200
Subject: [PATCH 272/704] [ticket/11495] Fix comments and package docs
PHPBB3-11495
---
phpBB/includes/tree/interface.php | 6 +++---
phpBB/includes/tree/nestedset.php | 2 +-
phpBB/includes/tree/nestedset_forum.php | 2 +-
tests/tree/nestedset_forum_base.php | 2 +-
tests/tree/nestedset_forum_get_data_test.php | 2 +-
tests/tree/nestedset_forum_insert_delete_test.php | 2 +-
tests/tree/nestedset_forum_move_test.php | 2 +-
tests/tree/nestedset_forum_regenerate_test.php | 2 +-
tests/tree/nestedset_forum_test.php | 2 +-
9 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/phpBB/includes/tree/interface.php b/phpBB/includes/tree/interface.php
index 3f03363151..4e22e322f3 100644
--- a/phpBB/includes/tree/interface.php
+++ b/phpBB/includes/tree/interface.php
@@ -1,7 +1,7 @@
Date: Fri, 26 Apr 2013 00:04:58 +0200
Subject: [PATCH 273/704] [ticket/11495] Make method names for add/remove more
descriptive
PHPBB3-11495
---
phpBB/includes/tree/nestedset.php | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/phpBB/includes/tree/nestedset.php b/phpBB/includes/tree/nestedset.php
index ffe8687e54..ab6a9d6bb4 100644
--- a/phpBB/includes/tree/nestedset.php
+++ b/phpBB/includes/tree/nestedset.php
@@ -111,7 +111,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
$item_data[$this->column_item_id] = (int) $this->db->sql_nextid();
- return array_merge($item_data, $this->add($item_data));
+ return array_merge($item_data, $this->add_item_to_nestedset($item_data));
}
/**
@@ -120,7 +120,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
* @param array $item The item to be added
* @return bool True if the item was added
*/
- protected function add(array $item)
+ protected function add_item_to_nestedset(array $item)
{
$sql = 'SELECT MAX(' . $this->column_right_id . ') AS ' . $this->column_right_id . '
FROM ' . $this->table_name . '
@@ -152,7 +152,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
* @param int $item_id The item to be deleted
* @return array Item ids that have been removed
*/
- protected function remove($item_id)
+ protected function remove_item_from_nestedset($item_id)
{
$items = $this->get_children_branch_data($item_id);
$item_ids = array_keys($items);
@@ -167,7 +167,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
*/
public function delete($item_id)
{
- $removed_items = $this->remove($item_id);
+ $removed_items = $this->remove_item_from_nestedset($item_id);
$sql = 'DELETE FROM ' . $this->table_name . '
WHERE ' . $this->db->sql_in_set($this->column_item_id, $removed_items) . '
From 2afa6730232cc2e92ae6543852d031a29c8a361f Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Fri, 26 Apr 2013 08:42:44 +0200
Subject: [PATCH 274/704] [ticket/11495] Fix doc blocks once more
PHPBB3-11495
---
phpBB/includes/tree/interface.php | 6 +++---
phpBB/includes/tree/nestedset.php | 6 +++---
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/phpBB/includes/tree/interface.php b/phpBB/includes/tree/interface.php
index 4e22e322f3..ed0ccca3f1 100644
--- a/phpBB/includes/tree/interface.php
+++ b/phpBB/includes/tree/interface.php
@@ -18,7 +18,7 @@ if (!defined('IN_PHPBB'))
interface phpbb_tree_interface
{
/**
- * Insert an item into the tree (also insert the rows into the table)
+ * Inserts an item into the database table and into the tree.
*
* @param array $item The item to be added
* @return array Array with item data as set in the database
@@ -26,9 +26,9 @@ interface phpbb_tree_interface
public function insert(array $additional_data);
/**
- * Delete an item from the tree (also deletes the rows form the table)
+ * Delete an item from the tree and from the database table
*
- * Also deletes all subitems from the tree
+ * Also deletes all subitems from the tree and from the database table
*
* @param int $item_id The item to be deleted
* @return array Item ids that have been deleted
diff --git a/phpBB/includes/tree/nestedset.php b/phpBB/includes/tree/nestedset.php
index ab6a9d6bb4..9655a08aa5 100644
--- a/phpBB/includes/tree/nestedset.php
+++ b/phpBB/includes/tree/nestedset.php
@@ -115,7 +115,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
}
/**
- * Add an existing item at the end of the tree
+ * Add an item which already has a database row at the end of the tree
*
* @param array $item The item to be added
* @return bool True if the item was added
@@ -145,9 +145,9 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
}
/**
- * Remove an item from the tree WITHOUT removing the items from the table
+ * Remove an item from the tree without deleting it from the database
*
- * Also removes all subitems from the tree
+ * Also removes all subitems from the tree without deleting them from the database either
*
* @param int $item_id The item to be deleted
* @return array Item ids that have been removed
From bef96b97929414af47311afd30fc7e8972df3192 Mon Sep 17 00:00:00 2001
From: riadhchtara
Date: Sat, 21 Apr 2012 17:43:13 +0200
Subject: [PATCH 275/704] [ticket/10820] Image downloader recognize new version
of ie When a user download image attachement using ie8, the file is
displayed. However, when he uses ie version greater than 8, the image is
download. A changes are made to phpbb/download/file.php to solve the problem.
We check now if the ie version is greater or equal to 8 and not only equal to
8
PHPBB3-10820
---
phpBB/download/file.php | 23 ++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/phpBB/download/file.php b/phpBB/download/file.php
index bf277c69fa..d9118f70de 100644
--- a/phpBB/download/file.php
+++ b/phpBB/download/file.php
@@ -285,7 +285,7 @@ else if (($display_cat == ATTACHMENT_CATEGORY_NONE/* || $display_cat == ATTACHME
$db->sql_query($sql);
}
-if ($display_cat == ATTACHMENT_CATEGORY_IMAGE && $mode === 'view' && (strpos($attachment['mimetype'], 'image') === 0) && ((strpos(strtolower($user->browser), 'msie') !== false) && (strpos(strtolower($user->browser), 'msie 8.0') === false)))
+if ($display_cat == ATTACHMENT_CATEGORY_IMAGE && $mode === 'view' && (strpos($attachment['mimetype'], 'image') === 0) && !is_greater_ie7($user->browser))
{
wrap_img_in_html(append_sid($phpbb_root_path . 'download/file.' . $phpEx, 'id=' . $attachment['attach_id']), $attachment['real_filename']);
file_gc();
@@ -343,8 +343,8 @@ function send_avatar_to_browser($file, $browser)
$image_data = @getimagesize($file_path);
header('Content-Type: ' . image_type_to_mime_type($image_data[2]));
-
- if (strpos(strtolower($browser), 'msie') !== false && strpos(strtolower($browser), 'msie 8.0') === false)
+
+ if (strpos(strtolower($browser), 'msie') !== false && !is_greater_ie7($user->browser))
{
header('Content-Disposition: attachment; ' . header_filename($file));
@@ -477,10 +477,9 @@ function send_file_to_browser($attachment, $upload_dir, $category)
*/
// Send out the Headers. Do not set Content-Disposition to inline please, it is a security measure for users using the Internet Explorer.
- $is_ie8 = (strpos(strtolower($user->browser), 'msie 8.0') !== false);
header('Content-Type: ' . $attachment['mimetype']);
-
- if ($is_ie8)
+
+ if (is_greater_ie7($user->browser))
{
header('X-Content-Type-Options: nosniff');
}
@@ -492,7 +491,7 @@ function send_file_to_browser($attachment, $upload_dir, $category)
}
else
{
- if (empty($user->browser) || (!$is_ie8 && (strpos(strtolower($user->browser), 'msie') !== false)))
+ if (empty($user->browser) || (!is_greater_ie7($user->browser) && (strpos(strtolower($user->browser), 'msie') !== false)))
{
header('Content-Disposition: attachment; ' . header_filename(htmlspecialchars_decode($attachment['real_filename'])));
if (empty($user->browser) || (strpos(strtolower($user->browser), 'msie 6.0') !== false))
@@ -503,7 +502,7 @@ function send_file_to_browser($attachment, $upload_dir, $category)
else
{
header('Content-Disposition: ' . ((strpos($attachment['mimetype'], 'image') === 0) ? 'inline' : 'attachment') . '; ' . header_filename(htmlspecialchars_decode($attachment['real_filename'])));
- if ($is_ie8 && (strpos($attachment['mimetype'], 'image') !== 0))
+ if (is_greater_ie7($user->browser) && (strpos($attachment['mimetype'], 'image') !== 0))
{
header('X-Download-Options: noopen');
}
@@ -680,7 +679,8 @@ function set_modified_headers($stamp, $browser)
{
// let's see if we have to send the file at all
$last_load = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? strtotime(trim($_SERVER['HTTP_IF_MODIFIED_SINCE'])) : false;
- if ((strpos(strtolower($browser), 'msie 6.0') === false) && (strpos(strtolower($browser), 'msie 8.0') === false))
+
+ if ((strpos(strtolower($browser), 'msie 6.0') === false) && (!is_greater_ie7($user->browser)))
{
if ($last_load !== false && $last_load >= $stamp)
{
@@ -709,4 +709,9 @@ function file_gc()
exit;
}
+function is_greater_ie7($browser)
+{
+ return preg_match('/msie (\d{2,3}|[89]+).[0-9.]*;/', strtolower($browser));
+}
+
?>
\ No newline at end of file
From ac56363351f5e6951e5554d30c7977507e616f4f Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Thu, 7 Feb 2013 23:59:46 +0530
Subject: [PATCH 276/704] [ticket/10820] proper usage of global and local
variable browser
PHPBB3-10820
---
phpBB/download/file.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/phpBB/download/file.php b/phpBB/download/file.php
index d9118f70de..9983fe3ec6 100644
--- a/phpBB/download/file.php
+++ b/phpBB/download/file.php
@@ -344,7 +344,7 @@ function send_avatar_to_browser($file, $browser)
$image_data = @getimagesize($file_path);
header('Content-Type: ' . image_type_to_mime_type($image_data[2]));
- if (strpos(strtolower($browser), 'msie') !== false && !is_greater_ie7($user->browser))
+ if (strpos(strtolower($browser), 'msie') !== false && !is_greater_ie7($browser))
{
header('Content-Disposition: attachment; ' . header_filename($file));
@@ -680,7 +680,7 @@ function set_modified_headers($stamp, $browser)
// let's see if we have to send the file at all
$last_load = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? strtotime(trim($_SERVER['HTTP_IF_MODIFIED_SINCE'])) : false;
- if ((strpos(strtolower($browser), 'msie 6.0') === false) && (!is_greater_ie7($user->browser)))
+ if ((strpos(strtolower($browser), 'msie 6.0') === false) && (!is_greater_ie7($browser)))
{
if ($last_load !== false && $last_load >= $stamp)
{
From 095ac054e034ad696e5da540690078cacfda1e6d Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Fri, 8 Feb 2013 00:05:06 +0530
Subject: [PATCH 277/704] [ticket/10820] fix IE check function
Add phpbb_ prefix to function name and return boolean value.
PHPBB3-10820
---
phpBB/download/file.php | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/phpBB/download/file.php b/phpBB/download/file.php
index 9983fe3ec6..83bcb5aacc 100644
--- a/phpBB/download/file.php
+++ b/phpBB/download/file.php
@@ -285,7 +285,7 @@ else if (($display_cat == ATTACHMENT_CATEGORY_NONE/* || $display_cat == ATTACHME
$db->sql_query($sql);
}
-if ($display_cat == ATTACHMENT_CATEGORY_IMAGE && $mode === 'view' && (strpos($attachment['mimetype'], 'image') === 0) && !is_greater_ie7($user->browser))
+if ($display_cat == ATTACHMENT_CATEGORY_IMAGE && $mode === 'view' && (strpos($attachment['mimetype'], 'image') === 0) && !phpbb_is_greater_ie7($user->browser))
{
wrap_img_in_html(append_sid($phpbb_root_path . 'download/file.' . $phpEx, 'id=' . $attachment['attach_id']), $attachment['real_filename']);
file_gc();
@@ -344,7 +344,7 @@ function send_avatar_to_browser($file, $browser)
$image_data = @getimagesize($file_path);
header('Content-Type: ' . image_type_to_mime_type($image_data[2]));
- if (strpos(strtolower($browser), 'msie') !== false && !is_greater_ie7($browser))
+ if (strpos(strtolower($browser), 'msie') !== false && !phpbb_is_greater_ie7($browser))
{
header('Content-Disposition: attachment; ' . header_filename($file));
@@ -479,7 +479,7 @@ function send_file_to_browser($attachment, $upload_dir, $category)
// Send out the Headers. Do not set Content-Disposition to inline please, it is a security measure for users using the Internet Explorer.
header('Content-Type: ' . $attachment['mimetype']);
- if (is_greater_ie7($user->browser))
+ if (phpbb_is_greater_ie7($user->browser))
{
header('X-Content-Type-Options: nosniff');
}
@@ -491,7 +491,7 @@ function send_file_to_browser($attachment, $upload_dir, $category)
}
else
{
- if (empty($user->browser) || (!is_greater_ie7($user->browser) && (strpos(strtolower($user->browser), 'msie') !== false)))
+ if (empty($user->browser) || (!phpbb_is_greater_ie7($user->browser) && (strpos(strtolower($user->browser), 'msie') !== false)))
{
header('Content-Disposition: attachment; ' . header_filename(htmlspecialchars_decode($attachment['real_filename'])));
if (empty($user->browser) || (strpos(strtolower($user->browser), 'msie 6.0') !== false))
@@ -502,7 +502,7 @@ function send_file_to_browser($attachment, $upload_dir, $category)
else
{
header('Content-Disposition: ' . ((strpos($attachment['mimetype'], 'image') === 0) ? 'inline' : 'attachment') . '; ' . header_filename(htmlspecialchars_decode($attachment['real_filename'])));
- if (is_greater_ie7($user->browser) && (strpos($attachment['mimetype'], 'image') !== 0))
+ if (phpbb_is_greater_ie7($user->browser) && (strpos($attachment['mimetype'], 'image') !== 0))
{
header('X-Download-Options: noopen');
}
@@ -680,7 +680,7 @@ function set_modified_headers($stamp, $browser)
// let's see if we have to send the file at all
$last_load = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? strtotime(trim($_SERVER['HTTP_IF_MODIFIED_SINCE'])) : false;
- if ((strpos(strtolower($browser), 'msie 6.0') === false) && (!is_greater_ie7($browser)))
+ if ((strpos(strtolower($browser), 'msie 6.0') === false) && (!phpbb_is_greater_ie7($browser)))
{
if ($last_load !== false && $last_load >= $stamp)
{
@@ -709,9 +709,9 @@ function file_gc()
exit;
}
-function is_greater_ie7($browser)
+function phpbb_is_greater_ie7($browser)
{
- return preg_match('/msie (\d{2,3}|[89]+).[0-9.]*;/', strtolower($browser));
+ return (bool) preg_match('/msie (\d{2,3}|[89]+).[0-9.]*;/', strtolower($browser));
}
?>
\ No newline at end of file
From adb2441f2207b3092537e96475353a2e0475a961 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Fri, 8 Feb 2013 13:58:41 +0530
Subject: [PATCH 278/704] [ticket/10820] add function docblock
PHPBB3-10820
---
phpBB/download/file.php | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/phpBB/download/file.php b/phpBB/download/file.php
index 83bcb5aacc..c6a89656af 100644
--- a/phpBB/download/file.php
+++ b/phpBB/download/file.php
@@ -709,6 +709,10 @@ function file_gc()
exit;
}
+/**
+* Check if the browser is internet explorer version 7+
+* @returns true if ie7+
+*/
function phpbb_is_greater_ie7($browser)
{
return (bool) preg_match('/msie (\d{2,3}|[89]+).[0-9.]*;/', strtolower($browser));
From 79a740bb80c92a5374e065278b786a83847b4007 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Mon, 4 Mar 2013 22:44:19 +0530
Subject: [PATCH 279/704] [ticket/10820] remove unnecessary condition checks
PHPBB3-10820
---
phpBB/download/file.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/phpBB/download/file.php b/phpBB/download/file.php
index c6a89656af..52e669f2cc 100644
--- a/phpBB/download/file.php
+++ b/phpBB/download/file.php
@@ -344,7 +344,7 @@ function send_avatar_to_browser($file, $browser)
$image_data = @getimagesize($file_path);
header('Content-Type: ' . image_type_to_mime_type($image_data[2]));
- if (strpos(strtolower($browser), 'msie') !== false && !phpbb_is_greater_ie7($browser))
+ if (!phpbb_is_greater_ie7($browser))
{
header('Content-Disposition: attachment; ' . header_filename($file));
@@ -491,7 +491,7 @@ function send_file_to_browser($attachment, $upload_dir, $category)
}
else
{
- if (empty($user->browser) || (!phpbb_is_greater_ie7($user->browser) && (strpos(strtolower($user->browser), 'msie') !== false)))
+ if (empty($user->browser) || !phpbb_is_greater_ie7($user->browser))
{
header('Content-Disposition: attachment; ' . header_filename(htmlspecialchars_decode($attachment['real_filename'])));
if (empty($user->browser) || (strpos(strtolower($user->browser), 'msie 6.0') !== false))
From 0ad48d7ea10316d7ae3b897e6fa8cbdda3f7eebc Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Sat, 13 Apr 2013 22:48:09 +0530
Subject: [PATCH 280/704] [ticket/10820] Use singular return
PHPBB3-10820
---
phpBB/download/file.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/download/file.php b/phpBB/download/file.php
index 52e669f2cc..d22885c303 100644
--- a/phpBB/download/file.php
+++ b/phpBB/download/file.php
@@ -711,7 +711,7 @@ function file_gc()
/**
* Check if the browser is internet explorer version 7+
-* @returns true if ie7+
+* @return true if ie7+
*/
function phpbb_is_greater_ie7($browser)
{
From 8d1bbc1e7f3bc8366ed127bd129c239f1b62b5c1 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Sat, 13 Apr 2013 22:50:37 +0530
Subject: [PATCH 281/704] [ticket/10820] simplify regex and escape dot
PHPBB3-10820
---
phpBB/download/file.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/download/file.php b/phpBB/download/file.php
index d22885c303..4b2f34f94d 100644
--- a/phpBB/download/file.php
+++ b/phpBB/download/file.php
@@ -715,7 +715,7 @@ function file_gc()
*/
function phpbb_is_greater_ie7($browser)
{
- return (bool) preg_match('/msie (\d{2,3}|[89]+).[0-9.]*;/', strtolower($browser));
+ return (bool) preg_match('/msie [^67]+\\.*;/', strtolower($browser));
}
?>
\ No newline at end of file
From f0f28f261c243ae57e13349ebc386a83c689a568 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Sat, 27 Apr 2013 20:57:51 +0530
Subject: [PATCH 282/704] [ticket/10820] add param and return to function
Add param and return in function docblock. Rename function
parameter to $user_agent.
PHPBB3-10820
---
phpBB/download/file.php | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/phpBB/download/file.php b/phpBB/download/file.php
index 4b2f34f94d..378c6e64b1 100644
--- a/phpBB/download/file.php
+++ b/phpBB/download/file.php
@@ -711,11 +711,14 @@ function file_gc()
/**
* Check if the browser is internet explorer version 7+
-* @return true if ie7+
+*
+* @param string $user_agent User agent HTTP header
+*
+* @return bool true if ie7+
*/
-function phpbb_is_greater_ie7($browser)
+function phpbb_is_greater_ie7($user_agent)
{
- return (bool) preg_match('/msie [^67]+\\.*;/', strtolower($browser));
+ return (bool) preg_match('/msie [^67]+\\.*;/', strtolower($user_agent));
}
?>
\ No newline at end of file
From 8c9786c504216fae68b1558a4386a207ea036962 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Sat, 27 Apr 2013 21:33:30 +0530
Subject: [PATCH 283/704] [ticket/10820] fix docblock
PHPBB3-10820
---
phpBB/download/file.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/download/file.php b/phpBB/download/file.php
index 378c6e64b1..bd87f609e9 100644
--- a/phpBB/download/file.php
+++ b/phpBB/download/file.php
@@ -714,7 +714,7 @@ function file_gc()
*
* @param string $user_agent User agent HTTP header
*
-* @return bool true if ie7+
+* @return bool true if internet explorer version is greater than 7
*/
function phpbb_is_greater_ie7($user_agent)
{
From b39e6e01b291f7a20a143ae3aea1a9582b0c4cad Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Sat, 27 Apr 2013 23:24:22 +0530
Subject: [PATCH 284/704] [ticket/10820] remove unnecessary parentheses
PHPBB3-10820
---
phpBB/download/file.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/download/file.php b/phpBB/download/file.php
index bd87f609e9..2568455e53 100644
--- a/phpBB/download/file.php
+++ b/phpBB/download/file.php
@@ -680,7 +680,7 @@ function set_modified_headers($stamp, $browser)
// let's see if we have to send the file at all
$last_load = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? strtotime(trim($_SERVER['HTTP_IF_MODIFIED_SINCE'])) : false;
- if ((strpos(strtolower($browser), 'msie 6.0') === false) && (!phpbb_is_greater_ie7($browser)))
+ if (strpos(strtolower($browser), 'msie 6.0') === false && !phpbb_is_greater_ie7($browser))
{
if ($last_load !== false && $last_load >= $stamp)
{
From cb13add269b78e1a9ac84a80c78557bb7695df09 Mon Sep 17 00:00:00 2001
From: marc1706
Date: Sun, 28 Apr 2013 22:54:48 +0200
Subject: [PATCH 285/704] [ticket/11442] Use correct button class for ajaxified
confirm_box
In commit 001572f the HTML code for the ajaxified confirm_box was moved
from overall_footer.html to confirm_body.html. While copying, the CSS
class of the "Yes" button was changed from button1 to button2. Due to the
fact that the phpbb.confirm() method uses the class button1 to check if
"Yes" was clicked, this broke the ajaxified confirm box in the ACP. With
this small patch the confirm boxes in the ACP should work properly again.
PHPBB3-11442
---
phpBB/adm/style/confirm_body.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/adm/style/confirm_body.html b/phpBB/adm/style/confirm_body.html
index d0360d1b3a..fa3f1e6c64 100644
--- a/phpBB/adm/style/confirm_body.html
+++ b/phpBB/adm/style/confirm_body.html
@@ -4,7 +4,7 @@
{MESSAGE_TEXT}
-
+
From 679183385fc070269ea2356722eff0f3b6defdfc Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Mon, 29 Apr 2013 02:25:22 +0530
Subject: [PATCH 286/704] [ticket/10820] add unit tests for
phpbb_is_greater_ie7
PHPBB3-10820
---
tests/download/http_user_agent_test.php | 65 +++++++++++++++++++++++++
1 file changed, 65 insertions(+)
create mode 100644 tests/download/http_user_agent_test.php
diff --git a/tests/download/http_user_agent_test.php b/tests/download/http_user_agent_test.php
new file mode 100644
index 0000000000..601561f44e
--- /dev/null
+++ b/tests/download/http_user_agent_test.php
@@ -0,0 +1,65 @@
+assertEquals($expected, phpbb_is_greater_ie7($user_agent));
+ }
+}
From 198b992dcef0a0a7099eb3db6185d567b58b6e5a Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Sun, 28 Apr 2013 22:53:05 -0500
Subject: [PATCH 287/704] [ticket/11413] Schema changes and migration file
Notifications tables are dropped because phpBB currently does not have
any way to make the necessary changes to the DB schema (and no release
has yet been made with these changes).
This will fix the following bugs:
PHPBB3-11411
PHPBB3-11413
PHPBB3-11414
PHPBB3-11416
PHPBB3-11420
PHPBB3-11413
---
phpBB/develop/create_schema_files.php | 26 ++-
.../db/migration/data/310/notifications.php | 64 ------
.../db/migration/data/310/notifications2.php | 206 ++++++++++++++++++
phpBB/install/schemas/firebird_schema.sql | 23 +-
phpBB/install/schemas/mssql_schema.sql | 15 +-
phpBB/install/schemas/mysql_40_schema.sql | 14 +-
phpBB/install/schemas/mysql_41_schema.sql | 14 +-
phpBB/install/schemas/oracle_schema.sql | 30 ++-
phpBB/install/schemas/postgres_schema.sql | 14 +-
phpBB/install/schemas/sqlite_schema.sql | 13 +-
10 files changed, 304 insertions(+), 115 deletions(-)
create mode 100644 phpBB/includes/db/migration/data/310/notifications2.php
diff --git a/phpBB/develop/create_schema_files.php b/phpBB/develop/create_schema_files.php
index b454fb2c16..3121db391d 100644
--- a/phpBB/develop/create_schema_files.php
+++ b/phpBB/develop/create_schema_files.php
@@ -1317,16 +1317,20 @@ function get_schema_struct()
$schema_data['phpbb_notification_types'] = array(
'COLUMNS' => array(
- 'notification_type' => array('VCHAR:255', ''),
+ 'notification_type_id' => array('USINT', NULL, 'auto_increment'),
+ 'notification_type_name' => array('VCHAR:255', ''),
'notification_type_enabled' => array('BOOL', 1),
),
- 'PRIMARY_KEY' => array('notification_type', 'notification_type_enabled'),
+ 'PRIMARY_KEY' => array('notification_type_id'),
+ 'KEYS' => array(
+ 'type' => array('UNIQUE', array('notification_type_name')),
+ ),
);
$schema_data['phpbb_notifications'] = array(
'COLUMNS' => array(
- 'notification_id' => array('UINT', NULL, 'auto_increment'),
- 'item_type' => array('VCHAR:255', ''),
+ 'notification_id' => array('UINT:10', NULL, 'auto_increment'),
+ 'notification_type_id' => array('USINT', 0),
'item_id' => array('UINT', 0),
'item_parent_id' => array('UINT', 0),
'user_id' => array('UINT', 0),
@@ -1336,7 +1340,7 @@ function get_schema_struct()
),
'PRIMARY_KEY' => 'notification_id',
'KEYS' => array(
- 'item_ident' => array('INDEX', array('item_type', 'item_id')),
+ 'item_ident' => array('INDEX', array('notification_type_id', 'item_id')),
'user' => array('INDEX', array('user_id', 'notification_read')),
),
);
@@ -1814,12 +1818,12 @@ function get_schema_struct()
);
$schema_data['phpbb_user_notifications'] = array(
- 'COLUMNS' => array(
- 'item_type' => array('VCHAR:255', ''),
- 'item_id' => array('UINT', 0),
- 'user_id' => array('UINT', 0),
- 'method' => array('VCHAR:255', ''),
- 'notify' => array('BOOL', 1),
+ 'COLUMNS' => array(
+ 'notification_type_id' => array('USINT', 0),
+ 'item_id' => array('UINT', 0),
+ 'user_id' => array('UINT', 0),
+ 'method' => array('VCHAR:255', ''),
+ 'notify' => array('BOOL', 1),
),
);
diff --git a/phpBB/includes/db/migration/data/310/notifications.php b/phpBB/includes/db/migration/data/310/notifications.php
index 82bfd4cb2d..17c939d95a 100644
--- a/phpBB/includes/db/migration/data/310/notifications.php
+++ b/phpBB/includes/db/migration/data/310/notifications.php
@@ -91,70 +91,6 @@ class phpbb_db_migration_data_310_notifications extends phpbb_db_migration
),
)),
array('config.add', array('load_notifications', 1)),
- array('custom', array(array($this, 'convert_notifications'))),
);
}
-
- public function convert_notifications()
- {
- $convert_notifications = array(
- array(
- 'check' => ($this->config['allow_topic_notify']),
- 'item_type' => 'post',
- ),
- array(
- 'check' => ($this->config['allow_forum_notify']),
- 'item_type' => 'topic',
- ),
- array(
- 'check' => ($this->config['allow_bookmarks']),
- 'item_type' => 'bookmark',
- ),
- array(
- 'check' => ($this->config['allow_privmsg']),
- 'item_type' => 'pm',
- ),
- );
-
- foreach ($convert_notifications as $convert_data)
- {
- if ($convert_data['check'])
- {
- $sql = 'SELECT user_id, user_notify_type
- FROM ' . USERS_TABLE . '
- WHERE user_notify = 1';
- $result = $this->db->sql_query($sql);
- while ($row = $this->db->sql_fetchrow($result))
- {
- $this->sql_query('INSERT INTO ' . $this->table_prefix . 'user_notifications ' . $this->db->sql_build_array('INSERT', array(
- 'item_type' => $convert_data['item_type'],
- 'item_id' => 0,
- 'user_id' => $row['user_id'],
- 'method' => '',
- )));
-
- if ($row['user_notify_type'] == NOTIFY_EMAIL || $row['user_notify_type'] == NOTIFY_BOTH)
- {
- $this->sql_query('INSERT INTO ' . $this->table_prefix . 'user_notifications ' . $this->db->sql_build_array('INSERT', array(
- 'item_type' => $convert_data['item_type'],
- 'item_id' => 0,
- 'user_id' => $row['user_id'],
- 'method' => 'email',
- )));
- }
-
- if ($row['user_notify_type'] == NOTIFY_IM || $row['user_notify_type'] == NOTIFY_BOTH)
- {
- $this->sql_query('INSERT INTO ' . $this->table_prefix . 'user_notifications ' . $this->db->sql_build_array('INSERT', array(
- 'item_type' => $convert_data['item_type'],
- 'item_id' => 0,
- 'user_id' => $row['user_id'],
- 'method' => 'jabber',
- )));
- }
- }
- $this->db->sql_freeresult($result);
- }
- }
- }
}
diff --git a/phpBB/includes/db/migration/data/310/notifications2.php b/phpBB/includes/db/migration/data/310/notifications2.php
new file mode 100644
index 0000000000..a3f29b073a
--- /dev/null
+++ b/phpBB/includes/db/migration/data/310/notifications2.php
@@ -0,0 +1,206 @@
+ array(
+ $this->table_prefix . 'notification_types',
+ $this->table_prefix . 'notifications',
+ $this->table_prefix . 'user_notifications',
+ ),
+ 'add_tables' => array(
+ $this->table_prefix . 'notification_types' => array(
+ 'COLUMNS' => array(
+ 'notification_type_id' => array('USINT', NULL, 'auto_increment'),
+ 'notification_type_name' => array('VCHAR:255', ''),
+ 'notification_type_enabled' => array('BOOL', 1),
+ ),
+ 'PRIMARY_KEY' => array('notification_type_id'),
+ 'KEYS' => array(
+ 'type' => array('UNIQUE', array('notification_type_name')),
+ ),
+ ),
+ $this->table_prefix . 'notifications' => array(
+ 'COLUMNS' => array(
+ 'notification_id' => array('UINT:10', NULL, 'auto_increment'),
+ 'notification_type_id' => array('USINT', 0),
+ 'item_id' => array('UINT', 0),
+ 'item_parent_id' => array('UINT', 0),
+ 'user_id' => array('UINT', 0),
+ 'notification_read' => array('BOOL', 0),
+ 'notification_time' => array('TIMESTAMP', 1),
+ 'notification_data' => array('TEXT_UNI', ''),
+ ),
+ 'PRIMARY_KEY' => 'notification_id',
+ 'KEYS' => array(
+ 'item_ident' => array('INDEX', array('notification_type_id', 'item_id')),
+ 'user' => array('INDEX', array('user_id', 'notification_read')),
+ ),
+ ),
+ $this->table_prefix . 'user_notifications' => array(
+ 'COLUMNS' => array(
+ 'notification_type_id' => array('USINT', 0),
+ 'item_id' => array('UINT', 0),
+ 'user_id' => array('UINT', 0),
+ 'method' => array('VCHAR:255', ''),
+ 'notify' => array('BOOL', 1),
+ ),
+ 'PRIMARY_KEY' => array(
+ 'notification_type_id',
+ 'item_id',
+ 'user_id',
+ ),
+ ),
+ ),
+ );
+ }
+
+ public function revert_schema()
+ {
+ return array(
+ 'drop_tables' => array(
+ $this->table_prefix . 'notification_types',
+ $this->table_prefix . 'notifications',
+ $this->table_prefix . 'user_notifications',
+ ),
+ 'add_tables' => array(
+ $this->table_prefix . 'notification_types' => array(
+ 'COLUMNS' => array(
+ 'notification_type' => array('VCHAR:255', ''),
+ 'notification_type_enabled' => array('BOOL', 1),
+ ),
+ 'PRIMARY_KEY' => array('notification_type', 'notification_type_enabled'),
+ ),
+ $this->table_prefix . 'notifications' => array(
+ 'COLUMNS' => array(
+ 'notification_id' => array('UINT', NULL, 'auto_increment'),
+ 'item_type' => array('VCHAR:255', ''),
+ 'item_id' => array('UINT', 0),
+ 'item_parent_id' => array('UINT', 0),
+ 'user_id' => array('UINT', 0),
+ 'notification_read' => array('BOOL', 0),
+ 'notification_time' => array('TIMESTAMP', 1),
+ 'notification_data' => array('TEXT_UNI', ''),
+ ),
+ 'PRIMARY_KEY' => 'notification_id',
+ 'KEYS' => array(
+ 'item_ident' => array('INDEX', array('item_type', 'item_id')),
+ 'user' => array('INDEX', array('user_id', 'notification_read')),
+ ),
+ ),
+ $this->table_prefix . 'user_notifications' => array(
+ 'COLUMNS' => array(
+ 'item_type' => array('VCHAR:255', ''),
+ 'item_id' => array('UINT', 0),
+ 'user_id' => array('UINT', 0),
+ 'method' => array('VCHAR:255', ''),
+ 'notify' => array('BOOL', 1),
+ ),
+ ),
+ ),
+ );
+ }
+
+ public function update_data()
+ {
+ return array(
+ array('custom', array(array($this, 'convert_notifications'))),
+ );
+ }
+
+ public function convert_notifications()
+ {
+ $insert_table = $this->table_prefix . 'user_notifications';
+
+ $sql = 'SELECT user_id, user_notify_type, user_notify_pm
+ FROM ' . USERS_TABLE;
+ $result = $this->db->sql_query($sql);
+
+ $sql_insert_data = array();
+ while ($row = $this->db->sql_fetchrow($result))
+ {
+ $notification_methods = array();
+
+ // In-board notification
+ $notification_methods[] = '';
+
+ if ($row['user_notify_type'] == NOTIFY_EMAIL || $row['user_notify_type'] == NOTIFY_BOTH)
+ {
+ $notification_methods[] = 'email';
+ }
+
+ if ($row['user_notify_type'] == NOTIFY_IM || $row['user_notify_type'] == NOTIFY_BOTH)
+ {
+ $notification_methods[] = 'jabber';
+ }
+
+ // Notifications for posts
+ foreach (array('post', 'topic') as $item_type)
+ {
+ $sql_insert_data = $this->add_method_rows(
+ $sql_insert_data,
+ $item_type,
+ 0,
+ $row['user_id'],
+ $notification_methods
+ );
+ }
+
+ if ($row['user_notify_pm'])
+ {
+ // Notifications for private messages
+ // User either gets all methods or no method
+ $sql_insert_data = $this->add_method_rows(
+ $sql_insert_data,
+ 'pm',
+ 0,
+ $row['user_id'],
+ $notification_methods
+ );
+ }
+
+ if (sizeof($sql_insert_data) > 500)
+ {
+ $this->db->sql_multi_insert($insert_table, $sql_insert_data);
+ $sql_insert_data = array();
+ }
+ }
+ $this->db->sql_freeresult($result);
+
+ if (!empty($sql_insert_data))
+ {
+ $this->db->sql_multi_insert($insert_table, $sql_insert_data);
+ }
+ }
+
+ protected function add_method_rows(array $sql_insert_data, $item_type, $item_id, $user_id, array $methods)
+ {
+ $row_base = array(
+ 'item_type' => $item_type,
+ 'item_id' => (int) $item_id,
+ 'user_id' => (int) $user_id,
+ );
+
+ foreach ($methods as $method)
+ {
+ $row_base['method'] = $method;
+ $sql_insert_data[] = $row_base;
+ }
+
+ return $sql_insert_data;
+ }
+}
diff --git a/phpBB/install/schemas/firebird_schema.sql b/phpBB/install/schemas/firebird_schema.sql
index 18ca184c65..92227eb38c 100644
--- a/phpBB/install/schemas/firebird_schema.sql
+++ b/phpBB/install/schemas/firebird_schema.sql
@@ -642,17 +642,30 @@ END;;
# Table: 'phpbb_notification_types'
CREATE TABLE phpbb_notification_types (
- notification_type VARCHAR(255) CHARACTER SET NONE DEFAULT '' NOT NULL,
+ notification_type_id INTEGER NOT NULL,
+ notification_type_name VARCHAR(255) CHARACTER SET NONE DEFAULT '' NOT NULL,
notification_type_enabled INTEGER DEFAULT 1 NOT NULL
);;
-ALTER TABLE phpbb_notification_types ADD PRIMARY KEY (notification_type, notification_type_enabled);;
+ALTER TABLE phpbb_notification_types ADD PRIMARY KEY (notification_type_id);;
+
+CREATE UNIQUE INDEX phpbb_notification_types_type ON phpbb_notification_types(notification_type_name);;
+
+CREATE GENERATOR phpbb_notification_types_gen;;
+SET GENERATOR phpbb_notification_types_gen TO 0;;
+
+CREATE TRIGGER t_phpbb_notification_types FOR phpbb_notification_types
+BEFORE INSERT
+AS
+BEGIN
+ NEW.notification_type_id = GEN_ID(phpbb_notification_types_gen, 1);
+END;;
# Table: 'phpbb_notifications'
CREATE TABLE phpbb_notifications (
notification_id INTEGER NOT NULL,
- item_type VARCHAR(255) CHARACTER SET NONE DEFAULT '' NOT NULL,
+ notification_type_id INTEGER DEFAULT 0 NOT NULL,
item_id INTEGER DEFAULT 0 NOT NULL,
item_parent_id INTEGER DEFAULT 0 NOT NULL,
user_id INTEGER DEFAULT 0 NOT NULL,
@@ -663,7 +676,7 @@ CREATE TABLE phpbb_notifications (
ALTER TABLE phpbb_notifications ADD PRIMARY KEY (notification_id);;
-CREATE INDEX phpbb_notifications_item_ident ON phpbb_notifications(item_type, item_id);;
+CREATE INDEX phpbb_notifications_item_ident ON phpbb_notifications(notification_type_id, item_id);;
CREATE INDEX phpbb_notifications_user ON phpbb_notifications(user_id, notification_read);;
CREATE GENERATOR phpbb_notifications_gen;;
@@ -1290,7 +1303,7 @@ CREATE INDEX phpbb_topics_watch_notify_stat ON phpbb_topics_watch(notify_status)
# Table: 'phpbb_user_notifications'
CREATE TABLE phpbb_user_notifications (
- item_type VARCHAR(255) CHARACTER SET NONE DEFAULT '' NOT NULL,
+ notification_type_id INTEGER DEFAULT 0 NOT NULL,
item_id INTEGER DEFAULT 0 NOT NULL,
user_id INTEGER DEFAULT 0 NOT NULL,
method VARCHAR(255) CHARACTER SET NONE DEFAULT '' NOT NULL,
diff --git a/phpBB/install/schemas/mssql_schema.sql b/phpBB/install/schemas/mssql_schema.sql
index 3530f9cd25..e869cbd1b5 100644
--- a/phpBB/install/schemas/mssql_schema.sql
+++ b/phpBB/install/schemas/mssql_schema.sql
@@ -793,7 +793,8 @@ GO
Table: 'phpbb_notification_types'
*/
CREATE TABLE [phpbb_notification_types] (
- [notification_type] [varchar] (255) DEFAULT ('') NOT NULL ,
+ [notification_type_id] [int] IDENTITY (1, 1) NOT NULL ,
+ [notification_type_name] [varchar] (255) DEFAULT ('') NOT NULL ,
[notification_type_enabled] [int] DEFAULT (1) NOT NULL
) ON [PRIMARY]
GO
@@ -801,18 +802,20 @@ GO
ALTER TABLE [phpbb_notification_types] WITH NOCHECK ADD
CONSTRAINT [PK_phpbb_notification_types] PRIMARY KEY CLUSTERED
(
- [notification_type],
- [notification_type_enabled]
+ [notification_type_id]
) ON [PRIMARY]
GO
+CREATE UNIQUE INDEX [type] ON [phpbb_notification_types]([notification_type_name]) ON [PRIMARY]
+GO
+
/*
Table: 'phpbb_notifications'
*/
CREATE TABLE [phpbb_notifications] (
[notification_id] [int] IDENTITY (1, 1) NOT NULL ,
- [item_type] [varchar] (255) DEFAULT ('') NOT NULL ,
+ [notification_type_id] [int] DEFAULT (0) NOT NULL ,
[item_id] [int] DEFAULT (0) NOT NULL ,
[item_parent_id] [int] DEFAULT (0) NOT NULL ,
[user_id] [int] DEFAULT (0) NOT NULL ,
@@ -829,7 +832,7 @@ ALTER TABLE [phpbb_notifications] WITH NOCHECK ADD
) ON [PRIMARY]
GO
-CREATE INDEX [item_ident] ON [phpbb_notifications]([item_type], [item_id]) ON [PRIMARY]
+CREATE INDEX [item_ident] ON [phpbb_notifications]([notification_type_id], [item_id]) ON [PRIMARY]
GO
CREATE INDEX [user] ON [phpbb_notifications]([user_id], [notification_read]) ON [PRIMARY]
@@ -1588,7 +1591,7 @@ GO
Table: 'phpbb_user_notifications'
*/
CREATE TABLE [phpbb_user_notifications] (
- [item_type] [varchar] (255) DEFAULT ('') NOT NULL ,
+ [notification_type_id] [int] DEFAULT (0) NOT NULL ,
[item_id] [int] DEFAULT (0) NOT NULL ,
[user_id] [int] DEFAULT (0) NOT NULL ,
[method] [varchar] (255) DEFAULT ('') NOT NULL ,
diff --git a/phpBB/install/schemas/mysql_40_schema.sql b/phpBB/install/schemas/mysql_40_schema.sql
index 8c405677a8..70048ea6bd 100644
--- a/phpBB/install/schemas/mysql_40_schema.sql
+++ b/phpBB/install/schemas/mysql_40_schema.sql
@@ -452,16 +452,18 @@ CREATE TABLE phpbb_modules (
# Table: 'phpbb_notification_types'
CREATE TABLE phpbb_notification_types (
- notification_type varbinary(255) DEFAULT '' NOT NULL,
+ notification_type_id smallint(4) UNSIGNED NOT NULL auto_increment,
+ notification_type_name varbinary(255) DEFAULT '' NOT NULL,
notification_type_enabled tinyint(1) UNSIGNED DEFAULT '1' NOT NULL,
- PRIMARY KEY (notification_type, notification_type_enabled)
+ PRIMARY KEY (notification_type_id),
+ UNIQUE type (notification_type_name)
);
# Table: 'phpbb_notifications'
CREATE TABLE phpbb_notifications (
- notification_id mediumint(8) UNSIGNED NOT NULL auto_increment,
- item_type varbinary(255) DEFAULT '' NOT NULL,
+ notification_id int(10) UNSIGNED NOT NULL auto_increment,
+ notification_type_id smallint(4) UNSIGNED DEFAULT '0' NOT NULL,
item_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
item_parent_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
user_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
@@ -469,7 +471,7 @@ CREATE TABLE phpbb_notifications (
notification_time int(11) UNSIGNED DEFAULT '1' NOT NULL,
notification_data blob NOT NULL,
PRIMARY KEY (notification_id),
- KEY item_ident (item_type, item_id),
+ KEY item_ident (notification_type_id, item_id),
KEY user (user_id, notification_read)
);
@@ -911,7 +913,7 @@ CREATE TABLE phpbb_topics_watch (
# Table: 'phpbb_user_notifications'
CREATE TABLE phpbb_user_notifications (
- item_type varbinary(255) DEFAULT '' NOT NULL,
+ notification_type_id smallint(4) UNSIGNED DEFAULT '0' NOT NULL,
item_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
user_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
method varbinary(255) DEFAULT '' NOT NULL,
diff --git a/phpBB/install/schemas/mysql_41_schema.sql b/phpBB/install/schemas/mysql_41_schema.sql
index cb259aa57d..e5ab9ceafa 100644
--- a/phpBB/install/schemas/mysql_41_schema.sql
+++ b/phpBB/install/schemas/mysql_41_schema.sql
@@ -452,16 +452,18 @@ CREATE TABLE phpbb_modules (
# Table: 'phpbb_notification_types'
CREATE TABLE phpbb_notification_types (
- notification_type varchar(255) DEFAULT '' NOT NULL,
+ notification_type_id smallint(4) UNSIGNED NOT NULL auto_increment,
+ notification_type_name varchar(255) DEFAULT '' NOT NULL,
notification_type_enabled tinyint(1) UNSIGNED DEFAULT '1' NOT NULL,
- PRIMARY KEY (notification_type, notification_type_enabled)
+ PRIMARY KEY (notification_type_id),
+ UNIQUE type (notification_type_name)
) CHARACTER SET `utf8` COLLATE `utf8_bin`;
# Table: 'phpbb_notifications'
CREATE TABLE phpbb_notifications (
- notification_id mediumint(8) UNSIGNED NOT NULL auto_increment,
- item_type varchar(255) DEFAULT '' NOT NULL,
+ notification_id int(10) UNSIGNED NOT NULL auto_increment,
+ notification_type_id smallint(4) UNSIGNED DEFAULT '0' NOT NULL,
item_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
item_parent_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
user_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
@@ -469,7 +471,7 @@ CREATE TABLE phpbb_notifications (
notification_time int(11) UNSIGNED DEFAULT '1' NOT NULL,
notification_data text NOT NULL,
PRIMARY KEY (notification_id),
- KEY item_ident (item_type, item_id),
+ KEY item_ident (notification_type_id, item_id),
KEY user (user_id, notification_read)
) CHARACTER SET `utf8` COLLATE `utf8_bin`;
@@ -911,7 +913,7 @@ CREATE TABLE phpbb_topics_watch (
# Table: 'phpbb_user_notifications'
CREATE TABLE phpbb_user_notifications (
- item_type varchar(255) DEFAULT '' NOT NULL,
+ notification_type_id smallint(4) UNSIGNED DEFAULT '0' NOT NULL,
item_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
user_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
method varchar(255) DEFAULT '' NOT NULL,
diff --git a/phpBB/install/schemas/oracle_schema.sql b/phpBB/install/schemas/oracle_schema.sql
index 35f05e34cd..b2e7409c7a 100644
--- a/phpBB/install/schemas/oracle_schema.sql
+++ b/phpBB/install/schemas/oracle_schema.sql
@@ -870,19 +870,37 @@ END;
Table: 'phpbb_notification_types'
*/
CREATE TABLE phpbb_notification_types (
- notification_type varchar2(255) DEFAULT '' ,
+ notification_type_id number(4) NOT NULL,
+ notification_type_name varchar2(255) DEFAULT '' ,
notification_type_enabled number(1) DEFAULT '1' NOT NULL,
- CONSTRAINT pk_phpbb_notification_types PRIMARY KEY (notification_type, notification_type_enabled)
+ CONSTRAINT pk_phpbb_notification_types PRIMARY KEY (notification_type_id),
+ CONSTRAINT u_phpbb_type UNIQUE (notification_type_name)
)
/
+CREATE SEQUENCE phpbb_notification_types_seq
+/
+
+CREATE OR REPLACE TRIGGER t_phpbb_notification_types
+BEFORE INSERT ON phpbb_notification_types
+FOR EACH ROW WHEN (
+ new.notification_type_id IS NULL OR new.notification_type_id = 0
+)
+BEGIN
+ SELECT phpbb_notification_types_seq.nextval
+ INTO :new.notification_type_id
+ FROM dual;
+END;
+/
+
+
/*
Table: 'phpbb_notifications'
*/
CREATE TABLE phpbb_notifications (
- notification_id number(8) NOT NULL,
- item_type varchar2(255) DEFAULT '' ,
+ notification_id number(10) NOT NULL,
+ notification_type_id number(4) DEFAULT '0' NOT NULL,
item_id number(8) DEFAULT '0' NOT NULL,
item_parent_id number(8) DEFAULT '0' NOT NULL,
user_id number(8) DEFAULT '0' NOT NULL,
@@ -893,7 +911,7 @@ CREATE TABLE phpbb_notifications (
)
/
-CREATE INDEX phpbb_notifications_item_ident ON phpbb_notifications (item_type, item_id)
+CREATE INDEX phpbb_notifications_item_ident ON phpbb_notifications (notification_type_id, item_id)
/
CREATE INDEX phpbb_notifications_user ON phpbb_notifications (user_id, notification_read)
/
@@ -1702,7 +1720,7 @@ CREATE INDEX phpbb_topics_watch_notify_stat ON phpbb_topics_watch (notify_status
Table: 'phpbb_user_notifications'
*/
CREATE TABLE phpbb_user_notifications (
- item_type varchar2(255) DEFAULT '' ,
+ notification_type_id number(4) DEFAULT '0' NOT NULL,
item_id number(8) DEFAULT '0' NOT NULL,
user_id number(8) DEFAULT '0' NOT NULL,
method varchar2(255) DEFAULT '' ,
diff --git a/phpBB/install/schemas/postgres_schema.sql b/phpBB/install/schemas/postgres_schema.sql
index 6dc507b46d..cd6de434b5 100644
--- a/phpBB/install/schemas/postgres_schema.sql
+++ b/phpBB/install/schemas/postgres_schema.sql
@@ -623,12 +623,16 @@ CREATE INDEX phpbb_modules_class_left_id ON phpbb_modules (module_class, left_id
/*
Table: 'phpbb_notification_types'
*/
+CREATE SEQUENCE phpbb_notification_types_seq;
+
CREATE TABLE phpbb_notification_types (
- notification_type varchar(255) DEFAULT '' NOT NULL,
+ notification_type_id INT2 DEFAULT nextval('phpbb_notification_types_seq'),
+ notification_type_name varchar(255) DEFAULT '' NOT NULL,
notification_type_enabled INT2 DEFAULT '1' NOT NULL CHECK (notification_type_enabled >= 0),
- PRIMARY KEY (notification_type, notification_type_enabled)
+ PRIMARY KEY (notification_type_id)
);
+CREATE UNIQUE INDEX phpbb_notification_types_type ON phpbb_notification_types (notification_type_name);
/*
Table: 'phpbb_notifications'
@@ -637,7 +641,7 @@ CREATE SEQUENCE phpbb_notifications_seq;
CREATE TABLE phpbb_notifications (
notification_id INT4 DEFAULT nextval('phpbb_notifications_seq'),
- item_type varchar(255) DEFAULT '' NOT NULL,
+ notification_type_id INT2 DEFAULT '0' NOT NULL CHECK (notification_type_id >= 0),
item_id INT4 DEFAULT '0' NOT NULL CHECK (item_id >= 0),
item_parent_id INT4 DEFAULT '0' NOT NULL CHECK (item_parent_id >= 0),
user_id INT4 DEFAULT '0' NOT NULL CHECK (user_id >= 0),
@@ -647,7 +651,7 @@ CREATE TABLE phpbb_notifications (
PRIMARY KEY (notification_id)
);
-CREATE INDEX phpbb_notifications_item_ident ON phpbb_notifications (item_type, item_id);
+CREATE INDEX phpbb_notifications_item_ident ON phpbb_notifications (notification_type_id, item_id);
CREATE INDEX phpbb_notifications_user ON phpbb_notifications (user_id, notification_read);
/*
@@ -1171,7 +1175,7 @@ CREATE INDEX phpbb_topics_watch_notify_stat ON phpbb_topics_watch (notify_status
Table: 'phpbb_user_notifications'
*/
CREATE TABLE phpbb_user_notifications (
- item_type varchar(255) DEFAULT '' NOT NULL,
+ notification_type_id INT2 DEFAULT '0' NOT NULL CHECK (notification_type_id >= 0),
item_id INT4 DEFAULT '0' NOT NULL CHECK (item_id >= 0),
user_id INT4 DEFAULT '0' NOT NULL CHECK (user_id >= 0),
method varchar(255) DEFAULT '' NOT NULL,
diff --git a/phpBB/install/schemas/sqlite_schema.sql b/phpBB/install/schemas/sqlite_schema.sql
index ccb67ad46f..e12bb624b6 100644
--- a/phpBB/install/schemas/sqlite_schema.sql
+++ b/phpBB/install/schemas/sqlite_schema.sql
@@ -439,16 +439,17 @@ CREATE INDEX phpbb_modules_class_left_id ON phpbb_modules (module_class, left_id
# Table: 'phpbb_notification_types'
CREATE TABLE phpbb_notification_types (
- notification_type varchar(255) NOT NULL DEFAULT '',
- notification_type_enabled INTEGER UNSIGNED NOT NULL DEFAULT '1',
- PRIMARY KEY (notification_type, notification_type_enabled)
+ notification_type_id INTEGER PRIMARY KEY NOT NULL ,
+ notification_type_name varchar(255) NOT NULL DEFAULT '',
+ notification_type_enabled INTEGER UNSIGNED NOT NULL DEFAULT '1'
);
+CREATE UNIQUE INDEX phpbb_notification_types_type ON phpbb_notification_types (notification_type_name);
# Table: 'phpbb_notifications'
CREATE TABLE phpbb_notifications (
notification_id INTEGER PRIMARY KEY NOT NULL ,
- item_type varchar(255) NOT NULL DEFAULT '',
+ notification_type_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
item_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
item_parent_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
user_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
@@ -457,7 +458,7 @@ CREATE TABLE phpbb_notifications (
notification_data text(65535) NOT NULL DEFAULT ''
);
-CREATE INDEX phpbb_notifications_item_ident ON phpbb_notifications (item_type, item_id);
+CREATE INDEX phpbb_notifications_item_ident ON phpbb_notifications (notification_type_id, item_id);
CREATE INDEX phpbb_notifications_user ON phpbb_notifications (user_id, notification_read);
# Table: 'phpbb_poll_options'
@@ -883,7 +884,7 @@ CREATE INDEX phpbb_topics_watch_notify_stat ON phpbb_topics_watch (notify_status
# Table: 'phpbb_user_notifications'
CREATE TABLE phpbb_user_notifications (
- item_type varchar(255) NOT NULL DEFAULT '',
+ notification_type_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
item_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
user_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
method varchar(255) NOT NULL DEFAULT '',
From 4c5e51e379f770d9bd3610e7235dafcb985494e1 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Sun, 28 Apr 2013 23:40:48 -0500
Subject: [PATCH 288/704] [ticket/11413] Rename columns in
notification/manager.php
PHPBB3-11413
---
phpBB/config/services.yml | 1 +
phpBB/includes/notification/manager.php | 276 ++++++++++++++----------
2 files changed, 166 insertions(+), 111 deletions(-)
diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml
index 7923c94a3f..3142b8faab 100644
--- a/phpBB/config/services.yml
+++ b/phpBB/config/services.yml
@@ -218,6 +218,7 @@ services:
- @service_container
- @user_loader
- @dbal.conn
+ - @cache
- @user
- %core.root_path%
- %core.php_ext%
diff --git a/phpBB/includes/notification/manager.php b/phpBB/includes/notification/manager.php
index 9eceeb753a..8ea4cdc121 100644
--- a/phpBB/includes/notification/manager.php
+++ b/phpBB/includes/notification/manager.php
@@ -36,6 +36,9 @@ class phpbb_notification_manager
/** @var phpbb_db_driver */
protected $db;
+ /** @var phpbb_cache_service */
+ protected $cache;
+
/** @var phpbb_user */
protected $user;
@@ -70,7 +73,7 @@ class phpbb_notification_manager
* @param string $user_notifications_table
* @return phpbb_notification_manager
*/
- public function __construct($notification_types, $notification_methods, $phpbb_container, phpbb_user_loader $user_loader, phpbb_db_driver $db, $user, $phpbb_root_path, $php_ext, $notification_types_table, $notifications_table, $user_notifications_table)
+ public function __construct($notification_types, $notification_methods, $phpbb_container, phpbb_user_loader $user_loader, phpbb_db_driver $db, phpbb_cache_service $cache, $user, $phpbb_root_path, $php_ext, $notification_types_table, $notifications_table, $user_notifications_table)
{
$this->notification_types = $notification_types;
$this->notification_methods = $notification_methods;
@@ -78,6 +81,7 @@ class phpbb_notification_manager
$this->user_loader = $user_loader;
$this->db = $db;
+ $this->cache = $cache;
$this->user = $user;
$this->phpbb_root_path = $phpbb_root_path;
@@ -145,7 +149,7 @@ class phpbb_notification_manager
FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . ' nt
WHERE n.user_id = ' . (int) $options['user_id'] . '
AND n.notification_read = 0
- AND nt.notification_type = n.item_type
+ AND nt.notification_type_id = n.notification_type_id
AND nt.notification_type_enabled = 1';
$result = $this->db->sql_query($sql);
$unread_count = (int) $this->db->sql_fetchfield('unread_count', $result);
@@ -158,7 +162,7 @@ class phpbb_notification_manager
$sql = 'SELECT COUNT(n.notification_id) AS total_count
FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . ' nt
WHERE n.user_id = ' . (int) $options['user_id'] . '
- AND nt.notification_type = n.item_type
+ AND nt.notification_type_id = n.notification_type_id
AND nt.notification_type_enabled = 1';
$result = $this->db->sql_query($sql);
$total_count = (int) $this->db->sql_fetchfield('total_count', $result);
@@ -170,11 +174,11 @@ class phpbb_notification_manager
$rowset = array();
// Get the main notifications
- $sql = 'SELECT n.*
+ $sql = 'SELECT n.*, nt.notification_type_name
FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . ' nt
WHERE n.user_id = ' . (int) $options['user_id'] .
(($options['notification_id']) ? ((is_array($options['notification_id'])) ? ' AND ' . $this->db->sql_in_set('n.notification_id', $options['notification_id']) : ' AND n.notification_id = ' . (int) $options['notification_id']) : '') . '
- AND nt.notification_type = n.item_type
+ AND nt.notification_type_id = n.notification_type_id
AND nt.notification_type_enabled = 1
ORDER BY n.' . $this->db->sql_escape($options['order_by']) . ' ' . $this->db->sql_escape($options['order_dir']);
$result = $this->db->sql_query_limit($sql, $options['limit'], $options['start']);
@@ -188,12 +192,12 @@ class phpbb_notification_manager
// Get all unread notifications
if ($unread_count && $options['all_unread'] && !empty($rowset))
{
- $sql = 'SELECT n.*
+ $sql = 'SELECT n.*, nt.notification_type_name
FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . ' nt
WHERE n.user_id = ' . (int) $options['user_id'] . '
AND n.notification_read = 0
AND ' . $this->db->sql_in_set('n.notification_id', array_keys($rowset), true) . '
- AND nt.notification_type = n.item_type
+ AND nt.notification_type_id = n.notification_type_id
AND nt.notification_type_enabled = 1
ORDER BY n.' . $this->db->sql_escape($options['order_by']) . ' ' . $this->db->sql_escape($options['order_dir']);
$result = $this->db->sql_query_limit($sql, $options['limit'], $options['start']);
@@ -207,17 +211,17 @@ class phpbb_notification_manager
foreach ($rowset as $row)
{
- $notification = $this->get_item_type_class($row['item_type'], $row);
+ $notification = $this->get_item_type_class($row['notification_type_name'], $row);
// Array of user_ids to query all at once
$user_ids = array_merge($user_ids, $notification->users_to_query());
// Some notification types also require querying additional tables themselves
- if (!isset($load_special[$row['item_type']]))
+ if (!isset($load_special[$row['notification_type_name']]))
{
- $load_special[$row['item_type']] = array();
+ $load_special[$row['notification_type_name']] = array();
}
- $load_special[$row['item_type']] = array_merge($load_special[$row['item_type']], $notification->get_load_special());
+ $load_special[$row['notification_type_name']] = array_merge($load_special[$row['notification_type_name']], $notification->get_load_special());
$notifications[$row['notification_id']] = $notification;
}
@@ -243,19 +247,21 @@ class phpbb_notification_manager
/**
* Mark notifications read
*
- * @param bool|string|array $item_type Type identifier or array of item types (only acceptable if the $data is identical for the specified types). False to mark read for all item types
+ * @param bool|string|array $notification_type_name Type identifier or array of item types (only acceptable if the $data is identical for the specified types). False to mark read for all item types
* @param bool|int|array $item_id Item id or array of item ids. False to mark read for all item ids
* @param bool|int|array $user_id User id or array of user ids. False to mark read for all user ids
* @param bool|int $time Time at which to mark all notifications prior to as read. False to mark all as read. (Default: False)
*/
- public function mark_notifications_read($item_type, $item_id, $user_id, $time = false)
+ public function mark_notifications_read($notification_type_name, $item_id, $user_id, $time = false)
{
$time = ($time !== false) ? $time : time();
$sql = 'UPDATE ' . $this->notifications_table . "
SET notification_read = 1
WHERE notification_time <= " . (int) $time .
- (($item_type !== false) ? ' AND ' . (is_array($item_type) ? $this->db->sql_in_set('item_type', $item_type) : " item_type = '" . $this->db->sql_escape($item_type) . "'") : '') .
+ (($notification_type_name !== false) ? ' AND ' .
+ (is_array($notification_type_name) ? $this->db->sql_in_set('notification_type_id', $this->get_notification_type_ids($notification_type_name)) : 'notification_type_id = ' . $this->get_notification_type_id($notification_type_name))
+ : '') .
(($user_id !== false) ? ' AND ' . (is_array($user_id) ? $this->db->sql_in_set('user_id', $user_id) : 'user_id = ' . (int) $user_id) : '') .
(($item_id !== false) ? ' AND ' . (is_array($item_id) ? $this->db->sql_in_set('item_id', $item_id) : 'item_id = ' . (int) $item_id) : '');
$this->db->sql_query($sql);
@@ -264,29 +270,21 @@ class phpbb_notification_manager
/**
* Mark notifications read from a parent identifier
*
- * @param string|array $item_type Type identifier or array of item types (only acceptable if the $data is identical for the specified types)
+ * @param string|array $notification_type_name Type identifier or array of item types (only acceptable if the $data is identical for the specified types)
* @param bool|int|array $item_parent_id Item parent id or array of item parent ids. False to mark read for all item parent ids
* @param bool|int|array $user_id User id or array of user ids. False to mark read for all user ids
* @param bool|int $time Time at which to mark all notifications prior to as read. False to mark all as read. (Default: False)
*/
- public function mark_notifications_read_by_parent($item_type, $item_parent_id, $user_id, $time = false)
+ public function mark_notifications_read_by_parent($notification_type_name, $item_parent_id, $user_id, $time = false)
{
- if (is_array($item_type))
- {
- foreach ($item_type as $type)
- {
- $this->mark_notifications_read_by_parent($type, $item_parent_id, $user_id, $time);
- }
-
- return;
- }
-
$time = ($time !== false) ? $time : time();
$sql = 'UPDATE ' . $this->notifications_table . "
SET notification_read = 1
- WHERE item_type = '" . $this->db->sql_escape($item_type) . "'
- AND notification_time <= " . (int) $time .
+ WHERE notification_time <= " . (int) $time .
+ (($notification_type_name !== false) ? ' AND ' .
+ (is_array($notification_type_name) ? $this->db->sql_in_set('notification_type_id', $this->get_notification_type_ids($notification_type_name)) : 'notification_type_id = ' . $this->get_notification_type_id($notification_type_name))
+ : '') .
(($item_parent_id !== false) ? ' AND ' . (is_array($item_parent_id) ? $this->db->sql_in_set('item_parent_id', $item_parent_id) : 'item_parent_id = ' . (int) $item_parent_id) : '') .
(($user_id !== false) ? ' AND ' . (is_array($user_id) ? $this->db->sql_in_set('user_id', $user_id) : 'user_id = ' . (int) $user_id) : '');
$this->db->sql_query($sql);
@@ -312,7 +310,7 @@ class phpbb_notification_manager
/**
* Add a notification
*
- * @param string|array $item_type Type identifier or array of item types (only acceptable if the $data is identical for the specified types)
+ * @param string|array $notification_type_name Type identifier or array of item types (only acceptable if the $data is identical for the specified types)
* Note: If you send an array of types, any user who could receive multiple notifications from this single item will only receive
* a single notification. If they MUST receive multiple notifications, call this function multiple times instead of sending an array
* @param array $data Data specific for this type that will be inserted
@@ -320,18 +318,18 @@ class phpbb_notification_manager
* ignore_users array of data to specify which users should not receive certain types of notifications
* @return array Information about what users were notified and how they were notified
*/
- public function add_notifications($item_type, $data, array $options = array())
+ public function add_notifications($notification_type_name, $data, array $options = array())
{
$options = array_merge(array(
'ignore_users' => array(),
), $options);
- if (is_array($item_type))
+ if (is_array($notification_type_name))
{
$notified_users = array();
$temp_options = $options;
- foreach ($item_type as $type)
+ foreach ($notification_type_name as $type)
{
$temp_options['ignore_users'] = $options['ignore_users'] + $notified_users;
$notified_users += $this->add_notifications($type, $data, $temp_options);
@@ -340,12 +338,12 @@ class phpbb_notification_manager
return $notified_users;
}
- $item_id = $this->get_item_type_class($item_type)->get_item_id($data);
+ $item_id = $this->get_item_type_class($notification_type_name)->get_item_id($data);
// find out which users want to receive this type of notification
- $notify_users = $this->get_item_type_class($item_type)->find_users_for_notification($data, $options);
+ $notify_users = $this->get_item_type_class($notification_type_name)->find_users_for_notification($data, $options);
- $this->add_notifications_for_users($item_type, $data, $notify_users);
+ $this->add_notifications_for_users($notification_type_name, $data, $notify_users);
return $notify_users;
}
@@ -353,15 +351,15 @@ class phpbb_notification_manager
/**
* Add a notification for specific users
*
- * @param string|array $item_type Type identifier or array of item types (only acceptable if the $data is identical for the specified types)
+ * @param string|array $notification_type_name Type identifier or array of item types (only acceptable if the $data is identical for the specified types)
* @param array $data Data specific for this type that will be inserted
* @param array $notify_users User list to notify
*/
- public function add_notifications_for_users($item_type, $data, $notify_users)
+ public function add_notifications_for_users($notification_type_name, $data, $notify_users)
{
- if (is_array($item_type))
+ if (is_array($notification_type_name))
{
- foreach ($item_type as $type)
+ foreach ($notification_type_name as $type)
{
$this->add_notifications_for_users($type, $data, $notify_users);
}
@@ -369,24 +367,9 @@ class phpbb_notification_manager
return;
}
- $sql = 'SELECT notification_type
- FROM ' . $this->notification_types_table . "
- WHERE notification_type = '" . $this->db->sql_escape($item_type) . "'";
- $result = $this->db->sql_query($sql);
+ $notification_type_id = $this->get_notification_type_id($notification_type_name);
- if ($this->db->sql_fetchrow($result) === false)
- {
- // Does not exist in the database, must add the item type
- $sql = 'INSERT INTO ' . $this->notification_types_table . ' ' . $this->db->sql_build_array('INSERT', array(
- 'notification_type' => $item_type,
- 'notification_type_enabled' => 1,
- ));
- $this->db->sql_query($sql);
- }
-
- $this->db->sql_freeresult($result);
-
- $item_id = $this->get_item_type_class($item_type)->get_item_id($data);
+ $item_id = $this->get_item_type_class($notification_type_name)->get_item_id($data);
$user_ids = array();
$notification_objects = $notification_methods = array();
@@ -397,10 +380,10 @@ class phpbb_notification_manager
// Make sure not to send new notifications to users who've already been notified about this item
// This may happen when an item was added, but now new users are able to see the item
$sql = 'SELECT n.user_id
- FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . " nt
- WHERE n.item_type = '" . $this->db->sql_escape($item_type) . "'
- AND n.item_id = " . (int) $item_id . '
- AND nt.notification_type = n.item_type
+ FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . ' nt
+ WHERE n.notification_type_id = ' . (int) $notification_type_id . '
+ AND n.item_id = ' . (int) $item_id . '
+ AND nt.notification_type_id = n.notification_type_id
AND nt.notification_type_enabled = 1';
$result = $this->db->sql_query($sql);
while ($row = $this->db->sql_fetchrow($result))
@@ -415,7 +398,7 @@ class phpbb_notification_manager
}
// Allow notifications to perform actions before creating the insert array (such as run a query to cache some data needed for all notifications)
- $notification = $this->get_item_type_class($item_type);
+ $notification = $this->get_item_type_class($notification_type_name);
$pre_create_data = $notification->pre_create_insert_array($data, $notify_users);
unset($notification);
@@ -424,7 +407,7 @@ class phpbb_notification_manager
// Go through each user so we can insert a row in the DB and then notify them by their desired means
foreach ($notify_users as $user => $methods)
{
- $notification = $this->get_item_type_class($item_type);
+ $notification = $this->get_item_type_class($notification_type_name);
$notification->user_id = (int) $user;
@@ -464,14 +447,14 @@ class phpbb_notification_manager
/**
* Update a notification
*
- * @param string|array $item_type Type identifier or array of item types (only acceptable if the $data is identical for the specified types)
+ * @param string|array $notification_type_name Type identifier or array of item types (only acceptable if the $data is identical for the specified types)
* @param array $data Data specific for this type that will be updated
*/
- public function update_notifications($item_type, $data)
+ public function update_notifications($notification_type_name, $data)
{
- if (is_array($item_type))
+ if (is_array($notification_type_name))
{
- foreach ($item_type as $type)
+ foreach ($notification_type_name as $type)
{
$this->update_notifications($type, $data);
}
@@ -479,7 +462,7 @@ class phpbb_notification_manager
return;
}
- $notification = $this->get_item_type_class($item_type);
+ $notification = $this->get_item_type_class($notification_type_name);
// Allow the notifications class to over-ride the update_notifications functionality
if (method_exists($notification, 'update_notifications'))
@@ -491,28 +474,29 @@ class phpbb_notification_manager
}
}
+ $notification_type_id = $this->get_notification_type_id($notification_type_name);
$item_id = $notification->get_item_id($data);
$update_array = $notification->create_update_array($data);
$sql = 'UPDATE ' . $this->notifications_table . '
- SET ' . $this->db->sql_build_array('UPDATE', $update_array) . "
- WHERE item_type = '" . $this->db->sql_escape($item_type) . "'
- AND item_id = " . (int) $item_id;
+ SET ' . $this->db->sql_build_array('UPDATE', $update_array) . '
+ WHERE notification_type_id = ' . (int) $notification_type_id . '
+ AND item_id = ' . (int) $item_id;
$this->db->sql_query($sql);
}
/**
* Delete a notification
*
- * @param string|array $item_type Type identifier or array of item types (only acceptable if the $item_id is identical for the specified types)
+ * @param string|array $notification_type_name Type identifier or array of item types (only acceptable if the $item_id is identical for the specified types)
* @param int|array $item_id Identifier within the type (or array of ids)
* @param array $data Data specific for this type that will be updated
*/
- public function delete_notifications($item_type, $item_id)
+ public function delete_notifications($notification_type_name, $item_id)
{
- if (is_array($item_type))
+ if (is_array($notification_type_name))
{
- foreach ($item_type as $type)
+ foreach ($notification_type_name as $type)
{
$this->delete_notifications($type, $item_id);
}
@@ -520,9 +504,11 @@ class phpbb_notification_manager
return;
}
- $sql = 'DELETE FROM ' . $this->notifications_table . "
- WHERE item_type = '" . $this->db->sql_escape($item_type) . "'
- AND " . (is_array($item_id) ? $this->db->sql_in_set('item_id', $item_id) : 'item_id = ' . (int) $item_id);
+ $notification_type_id = $this->get_notification_type_id($notification_type_name);
+
+ $sql = 'DELETE FROM ' . $this->notifications_table . '
+ WHERE notification_type_id = ' . (int) $notification_type_id . '
+ AND ' . (is_array($item_id) ? $this->db->sql_in_set('item_id', $item_id) : 'item_id = ' . (int) $item_id);
$this->db->sql_query($sql);
}
@@ -646,24 +632,25 @@ class phpbb_notification_manager
/**
* Add a subscription
*
- * @param string $item_type Type identifier of the subscription
+ * @param string $notification_type_name Type identifier of the subscription
* @param int $item_id The id of the item
* @param string $method The method of the notification e.g. '', 'email', or 'jabber'
* @param bool|int $user_id The user_id to add the subscription for (bool false for current user)
*/
- public function add_subscription($item_type, $item_id = 0, $method = '', $user_id = false)
+ public function add_subscription($notification_type_name, $item_id = 0, $method = '', $user_id = false)
{
if ($method !== '')
{
- $this->add_subscription($item_type, $item_type, '', $user_id);
+ $this->add_subscription($notification_type_name, $item_id, '', $user_id);
}
+ $notification_type_id = $this->get_notification_type_id($notification_type_name);
$user_id = ($user_id === false) ? $this->user->data['user_id'] : $user_id;
$sql = 'SELECT notify
- FROM ' . $this->user_notifications_table . "
- WHERE item_type = '" . $this->db->sql_escape($item_type) . "'
- AND item_id = " . (int) $item_id . '
+ FROM ' . $this->user_notifications_table . '
+ WHERE notification_type_id = ' . (int) $notification_type_name . '
+ AND item_id = ' . (int) $item_id . '
AND user_id = ' .(int) $user_id . "
AND method = '" . $this->db->sql_escape($method) . "'";
$this->db->sql_query($sql);
@@ -674,7 +661,7 @@ class phpbb_notification_manager
{
$sql = 'INSERT INTO ' . $this->user_notifications_table . ' ' .
$this->db->sql_build_array('INSERT', array(
- 'item_type' => $item_type,
+ 'notification_type_id' => $notification_type_id,
'item_id' => (int) $item_id,
'user_id' => (int) $user_id,
'method' => $method,
@@ -684,10 +671,10 @@ class phpbb_notification_manager
}
else if (!$current)
{
- $sql = 'UPDATE ' . $this->user_notifications_table . "
+ $sql = 'UPDATE ' . $this->user_notifications_table . '
SET notify = 1
- WHERE item_type = '" . $this->db->sql_escape($item_type) . "'
- AND item_id = " . (int) $item_id . '
+ WHERE notification_type_id = ' . (int) $notification_type_id . '
+ AND item_id = ' . (int) $item_id . '
AND user_id = ' .(int) $user_id . "
AND method = '" . $this->db->sql_escape($method) . "'";
$this->db->sql_query($sql);
@@ -697,22 +684,23 @@ class phpbb_notification_manager
/**
* Delete a subscription
*
- * @param string $item_type Type identifier of the subscription
+ * @param string $notification_type_name Type identifier of the subscription
* @param int $item_id The id of the item
* @param string $method The method of the notification e.g. '', 'email', or 'jabber'
* @param bool|int $user_id The user_id to add the subscription for (bool false for current user)
*/
- public function delete_subscription($item_type, $item_id = 0, $method = '', $user_id = false)
+ public function delete_subscription($notification_type_name, $item_id = 0, $method = '', $user_id = false)
{
+ $notification_type_id = $this->get_notification_type_id($notification_type_name);
$user_id = ($user_id === false) ? $this->user->data['user_id'] : $user_id;
// If no method, make sure that no other notification methods for this item are selected before deleting
if ($method === '')
{
$sql = 'SELECT COUNT(*) as num_notifications
- FROM ' . $this->user_notifications_table . "
- WHERE item_type = '" . $this->db->sql_escape($item_type) . "'
- AND item_id = " . (int) $item_id . '
+ FROM ' . $this->user_notifications_table . '
+ WHERE notification_type_id = ' . (int) $notification_type_id . '
+ AND item_id = ' . (int) $item_id . '
AND user_id = ' .(int) $user_id . "
AND method <> ''
AND notify = 1";
@@ -726,10 +714,10 @@ class phpbb_notification_manager
}
}
- $sql = 'UPDATE ' . $this->user_notifications_table . "
+ $sql = 'UPDATE ' . $this->user_notifications_table . '
SET notify = 0
- WHERE item_type = '" . $this->db->sql_escape($item_type) . "'
- AND item_id = " . (int) $item_id . '
+ WHERE notification_type_id = ' . (int) $notification_type_id . '
+ AND item_id = '. (int) $item_id . '
AND user_id = ' .(int) $user_id . "
AND method = '" . $this->db->sql_escape($method) . "'";
$this->db->sql_query($sql);
@@ -738,7 +726,7 @@ class phpbb_notification_manager
{
$sql = 'INSERT INTO ' . $this->user_notifications_table . ' ' .
$this->db->sql_build_array('INSERT', array(
- 'item_type' => $item_type,
+ 'notification_type_id' => (int) $notification_type_id,
'item_id' => (int) $item_id,
'user_id' => (int) $user_id,
'method' => $method,
@@ -755,13 +743,13 @@ class phpbb_notification_manager
* is disabled so that all those notifications are hidden and do not
* cause errors
*
- * @param string $item_type Type identifier of the subscription
+ * @param string $notification_type_name Type identifier of the subscription
*/
- public function disable_notifications($item_type)
+ public function disable_notifications($notification_type_name)
{
$sql = 'UPDATE ' . $this->notification_types_table . "
SET notification_type_enabled = 0
- WHERE notification_type = '" . $this->db->sql_escape($item_type) . "'";
+ WHERE notification_type_name = '" . $this->db->sql_escape($notification_type_name) . "'";
$this->db->sql_query($sql);
}
@@ -771,17 +759,21 @@ class phpbb_notification_manager
* This should be called when an extension which has notification types
* is purged so that all those notifications are removed
*
- * @param string $item_type Type identifier of the subscription
+ * @param string $notification_type_name Type identifier of the subscription
*/
- public function purge_notifications($item_type)
+ public function purge_notifications($notification_type_name)
{
- $sql = 'DELETE FROM ' . $this->notifications_table . "
- WHERE item_type = '" . $this->db->sql_escape($item_type) . "'";
+ $notification_type_id = $this->get_notification_type_id($notification_type_name);
+
+ $sql = 'DELETE FROM ' . $this->notifications_table . '
+ WHERE notification_type_id = ' . (int) $notification_type_id;
$this->db->sql_query($sql);
- $sql = 'DELETE FROM ' . $this->notification_types_table . "
- WHERE notification_type = '" . $this->db->sql_escape($item_type) . "'";
+ $sql = 'DELETE FROM ' . $this->notification_types_table . '
+ WHERE notification_type_id = ' . (int) $notification_type_id;
$this->db->sql_query($sql);
+
+ $this->cache->destroy('notification_type_ids');
}
/**
@@ -791,13 +783,13 @@ class phpbb_notification_manager
* that was disabled is re-enabled so that all those notifications that
* were hidden are shown again
*
- * @param string $item_type Type identifier of the subscription
+ * @param string $notification_type_name Type identifier of the subscription
*/
- public function enable_notifications($item_type)
+ public function enable_notifications($notification_type_name)
{
$sql = 'UPDATE ' . $this->notification_types_table . "
SET notification_type_enabled = 1
- WHERE notification_type = '" . $this->db->sql_escape($item_type) . "'";
+ WHERE notification_type_name = '" . $this->db->sql_escape($notification_type_name) . "'";
$this->db->sql_query($sql);
}
@@ -816,11 +808,11 @@ class phpbb_notification_manager
/**
* Helper to get the notifications item type class and set it up
*/
- public function get_item_type_class($item_type, $data = array())
+ public function get_item_type_class($notification_type_name, $data = array())
{
- $item_type = (strpos($item_type, 'notification.type.') === 0) ? $item_type : 'notification.type.' . $item_type;
+ $notification_type_name = (strpos($notification_type_name, 'notification.type.') === 0) ? $notification_type_name : 'notification.type.' . $notification_type_name;
- $item = $this->load_object($item_type);
+ $item = $this->load_object($notification_type_name);
$item->set_initial_data($data);
@@ -851,4 +843,66 @@ class phpbb_notification_manager
return $object;
}
+
+ /**
+ * Get the notification type id from the name
+ *
+ * @param string $notification_type_name The name
+ * @return int the notification_type_id
+ */
+ public function get_notification_type_id($notification_type_name)
+ {
+ $notification_type_ids = $this->cache->get('notification_type_ids');
+
+ if ($notification_type_ids === false)
+ {
+ $notification_type_ids = array();
+
+ $sql = 'SELECT notification_type_id, notification_type_name
+ FROM ' . $this->notification_types_table;
+ $result = $this->db->sql_query($sql);
+ while ($row = $this->db->sql_fetchrow($result))
+ {
+ $notification_type_ids[$row['notification_type_name']] = (int) $row['notification_type_id'];
+ }
+ $this->db->sql_freeresult($result);
+
+ $this->cache->put('notification_type_ids', $notification_type_ids);
+ }
+
+ if (!isset($notification_type_ids[$notification_type_name]))
+ {
+ $notification_type = $this->get_item_type_class($notification_type_name);
+
+ $sql = 'INSERT INTO ' . $this->notification_types_table . ' ' . $this->db->sql_build_array('INSERT', array(
+ 'notification_type_name' => $notification_type_name,
+ 'notification_type_enabled' => 1,
+ ));
+ $this->db->sql_query($sql);
+
+ $notification_type_ids[$notification_type_name] = (int) $this->db->sql_nextid();
+
+ $this->cache->put('notification_type_ids', $notification_type_ids);
+ }
+
+ return $notification_type_ids[$notification_type_name];
+ }
+
+ /**
+ * Get notification type ids (as an array)
+ *
+ * @param array $notification_type_names Array of strings
+ * @return array Array of integers
+ */
+ public function get_notification_type_ids(array $notification_type_names)
+ {
+ $notification_type_ids = array();
+
+ foreach ($notification_type_names as $name)
+ {
+ $notification_type_ids[$name] = $this->get_notification_type_id($name);
+ }
+
+ return $notification_type_ids;
+ }
}
From 33287a73609a99f33f3d0718fceaf72e39d5283e Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Mon, 29 Apr 2013 21:22:07 -0500
Subject: [PATCH 289/704] [ticket/11413] Undo editing the user_notifications
table
item_type is not equivalent to notification_type_name, it can be a generic
string (typically used to be able to subscribe to multiple notification
types while only subscribing to one item
PHPBB3-11413
---
phpBB/develop/create_schema_files.php | 10 ++---
.../db/migration/data/310/notifications2.php | 28 ++-----------
phpBB/includes/notification/manager.php | 41 +++++++++----------
phpBB/includes/notification/type/base.php | 20 ++++++---
phpBB/includes/notification/type/bookmark.php | 8 ++--
phpBB/includes/notification/type/post.php | 8 ++--
phpBB/includes/notification/type/quote.php | 22 +++++-----
phpBB/install/schemas/firebird_schema.sql | 2 +-
phpBB/install/schemas/mssql_schema.sql | 2 +-
phpBB/install/schemas/mysql_40_schema.sql | 2 +-
phpBB/install/schemas/mysql_41_schema.sql | 2 +-
phpBB/install/schemas/oracle_schema.sql | 2 +-
phpBB/install/schemas/postgres_schema.sql | 2 +-
phpBB/install/schemas/sqlite_schema.sql | 2 +-
14 files changed, 69 insertions(+), 82 deletions(-)
diff --git a/phpBB/develop/create_schema_files.php b/phpBB/develop/create_schema_files.php
index 3121db391d..0fd1a722ca 100644
--- a/phpBB/develop/create_schema_files.php
+++ b/phpBB/develop/create_schema_files.php
@@ -1819,11 +1819,11 @@ function get_schema_struct()
$schema_data['phpbb_user_notifications'] = array(
'COLUMNS' => array(
- 'notification_type_id' => array('USINT', 0),
- 'item_id' => array('UINT', 0),
- 'user_id' => array('UINT', 0),
- 'method' => array('VCHAR:255', ''),
- 'notify' => array('BOOL', 1),
+ 'item_type' => array('VCHAR:255', ''),
+ 'item_id' => array('UINT', 0),
+ 'user_id' => array('UINT', 0),
+ 'method' => array('VCHAR:255', ''),
+ 'notify' => array('BOOL', 1),
),
);
diff --git a/phpBB/includes/db/migration/data/310/notifications2.php b/phpBB/includes/db/migration/data/310/notifications2.php
index a3f29b073a..cd078f8f60 100644
--- a/phpBB/includes/db/migration/data/310/notifications2.php
+++ b/phpBB/includes/db/migration/data/310/notifications2.php
@@ -20,7 +20,6 @@ class phpbb_db_migration_data_310_notifications2 extends phpbb_db_migration
'drop_tables' => array(
$this->table_prefix . 'notification_types',
$this->table_prefix . 'notifications',
- $this->table_prefix . 'user_notifications',
),
'add_tables' => array(
$this->table_prefix . 'notification_types' => array(
@@ -51,20 +50,6 @@ class phpbb_db_migration_data_310_notifications2 extends phpbb_db_migration
'user' => array('INDEX', array('user_id', 'notification_read')),
),
),
- $this->table_prefix . 'user_notifications' => array(
- 'COLUMNS' => array(
- 'notification_type_id' => array('USINT', 0),
- 'item_id' => array('UINT', 0),
- 'user_id' => array('UINT', 0),
- 'method' => array('VCHAR:255', ''),
- 'notify' => array('BOOL', 1),
- ),
- 'PRIMARY_KEY' => array(
- 'notification_type_id',
- 'item_id',
- 'user_id',
- ),
- ),
),
);
}
@@ -75,7 +60,6 @@ class phpbb_db_migration_data_310_notifications2 extends phpbb_db_migration
'drop_tables' => array(
$this->table_prefix . 'notification_types',
$this->table_prefix . 'notifications',
- $this->table_prefix . 'user_notifications',
),
'add_tables' => array(
$this->table_prefix . 'notification_types' => array(
@@ -102,15 +86,6 @@ class phpbb_db_migration_data_310_notifications2 extends phpbb_db_migration
'user' => array('INDEX', array('user_id', 'notification_read')),
),
),
- $this->table_prefix . 'user_notifications' => array(
- 'COLUMNS' => array(
- 'item_type' => array('VCHAR:255', ''),
- 'item_id' => array('UINT', 0),
- 'user_id' => array('UINT', 0),
- 'method' => array('VCHAR:255', ''),
- 'notify' => array('BOOL', 1),
- ),
- ),
),
);
}
@@ -126,6 +101,9 @@ class phpbb_db_migration_data_310_notifications2 extends phpbb_db_migration
{
$insert_table = $this->table_prefix . 'user_notifications';
+ $sql = 'DELETE FROM ' . $insert_table;
+ $this->db->sql_query($sql);
+
$sql = 'SELECT user_id, user_notify_type, user_notify_pm
FROM ' . USERS_TABLE;
$result = $this->db->sql_query($sql);
diff --git a/phpBB/includes/notification/manager.php b/phpBB/includes/notification/manager.php
index 8ea4cdc121..e7d6af71b8 100644
--- a/phpBB/includes/notification/manager.php
+++ b/phpBB/includes/notification/manager.php
@@ -632,25 +632,25 @@ class phpbb_notification_manager
/**
* Add a subscription
*
- * @param string $notification_type_name Type identifier of the subscription
+ * @param string $item_type Type identifier of the subscription
* @param int $item_id The id of the item
* @param string $method The method of the notification e.g. '', 'email', or 'jabber'
* @param bool|int $user_id The user_id to add the subscription for (bool false for current user)
*/
- public function add_subscription($notification_type_name, $item_id = 0, $method = '', $user_id = false)
+ public function add_subscription($item_type, $item_id = 0, $method = '', $user_id = false)
{
if ($method !== '')
{
- $this->add_subscription($notification_type_name, $item_id, '', $user_id);
+ // Make sure to subscribe them to the base subscription
+ $this->add_subscription($item_type, $item_id, '', $user_id);
}
- $notification_type_id = $this->get_notification_type_id($notification_type_name);
$user_id = ($user_id === false) ? $this->user->data['user_id'] : $user_id;
$sql = 'SELECT notify
- FROM ' . $this->user_notifications_table . '
- WHERE notification_type_id = ' . (int) $notification_type_name . '
- AND item_id = ' . (int) $item_id . '
+ FROM ' . $this->user_notifications_table . "
+ WHERE item_type = '" . $this->db->sql_escape($item_type) . "'
+ AND item_id = " . (int) $item_id . '
AND user_id = ' .(int) $user_id . "
AND method = '" . $this->db->sql_escape($method) . "'";
$this->db->sql_query($sql);
@@ -661,7 +661,7 @@ class phpbb_notification_manager
{
$sql = 'INSERT INTO ' . $this->user_notifications_table . ' ' .
$this->db->sql_build_array('INSERT', array(
- 'notification_type_id' => $notification_type_id,
+ 'item_type' => $item_type,
'item_id' => (int) $item_id,
'user_id' => (int) $user_id,
'method' => $method,
@@ -671,10 +671,10 @@ class phpbb_notification_manager
}
else if (!$current)
{
- $sql = 'UPDATE ' . $this->user_notifications_table . '
+ $sql = 'UPDATE ' . $this->user_notifications_table . "
SET notify = 1
- WHERE notification_type_id = ' . (int) $notification_type_id . '
- AND item_id = ' . (int) $item_id . '
+ WHERE item_type = '" . $this->db->sql_escape($item_type) . "'
+ AND item_id = " . (int) $item_id . '
AND user_id = ' .(int) $user_id . "
AND method = '" . $this->db->sql_escape($method) . "'";
$this->db->sql_query($sql);
@@ -684,23 +684,22 @@ class phpbb_notification_manager
/**
* Delete a subscription
*
- * @param string $notification_type_name Type identifier of the subscription
+ * @param string $item_type Type identifier of the subscription
* @param int $item_id The id of the item
* @param string $method The method of the notification e.g. '', 'email', or 'jabber'
* @param bool|int $user_id The user_id to add the subscription for (bool false for current user)
*/
- public function delete_subscription($notification_type_name, $item_id = 0, $method = '', $user_id = false)
+ public function delete_subscription($item_type, $item_id = 0, $method = '', $user_id = false)
{
- $notification_type_id = $this->get_notification_type_id($notification_type_name);
$user_id = ($user_id === false) ? $this->user->data['user_id'] : $user_id;
// If no method, make sure that no other notification methods for this item are selected before deleting
if ($method === '')
{
$sql = 'SELECT COUNT(*) as num_notifications
- FROM ' . $this->user_notifications_table . '
- WHERE notification_type_id = ' . (int) $notification_type_id . '
- AND item_id = ' . (int) $item_id . '
+ FROM ' . $this->user_notifications_table . "
+ WHERE item_type = '" . $this->db->sql_escape($item_type) . "'
+ AND item_id = " . (int) $item_id . '
AND user_id = ' .(int) $user_id . "
AND method <> ''
AND notify = 1";
@@ -714,10 +713,10 @@ class phpbb_notification_manager
}
}
- $sql = 'UPDATE ' . $this->user_notifications_table . '
+ $sql = 'UPDATE ' . $this->user_notifications_table . "
SET notify = 0
- WHERE notification_type_id = ' . (int) $notification_type_id . '
- AND item_id = '. (int) $item_id . '
+ WHERE item_type = '" . $this->db->sql_escape($item_type) . "'
+ AND item_id = " . (int) $item_id . '
AND user_id = ' .(int) $user_id . "
AND method = '" . $this->db->sql_escape($method) . "'";
$this->db->sql_query($sql);
@@ -726,7 +725,7 @@ class phpbb_notification_manager
{
$sql = 'INSERT INTO ' . $this->user_notifications_table . ' ' .
$this->db->sql_build_array('INSERT', array(
- 'notification_type_id' => (int) $notification_type_id,
+ 'item_type' => $item_type,
'item_id' => (int) $item_id,
'user_id' => (int) $user_id,
'method' => $method,
diff --git a/phpBB/includes/notification/type/base.php b/phpBB/includes/notification/type/base.php
index 600ef7c965..f56956d16a 100644
--- a/phpBB/includes/notification/type/base.php
+++ b/phpBB/includes/notification/type/base.php
@@ -68,11 +68,19 @@ abstract class phpbb_notification_type_base implements phpbb_notification_type_i
*/
public static $notification_option = false;
+ /**
+ * The notification_type_id, set upon creation of the class
+ * This is the notification_type_id from the notification_types table
+ *
+ * @var int
+ */
+ protected $notification_type_id;
+
/**
* Indentification data
- * item_type - Type of the item (translates to the notification type)
- * item_id - ID of the item (e.g. post_id, msg_id)
- * item_parent_id - Parent item id (ex: for topic => forum_id, for post => topic_id, etc)
+ * notification_type_id - ID of the item type (auto generated, from notification types table)
+ * item_id - ID of the item (e.g. post_id, msg_id)
+ * item_parent_id - Parent item id (ex: for topic => forum_id, for post => topic_id, etc)
* user_id
* notification_read
* notification_time
@@ -124,6 +132,8 @@ abstract class phpbb_notification_type_base implements phpbb_notification_type_i
public function set_notification_manager(phpbb_notification_manager $notification_manager)
{
$this->notification_manager = $notification_manager;
+
+ $this->notification_type_id = $this->notification_manager->get_notification_type_id($this->get_type());
}
/**
@@ -211,7 +221,7 @@ abstract class phpbb_notification_type_base implements phpbb_notification_type_i
// Defaults
$this->data = array_merge(array(
'item_id' => static::get_item_id($type_data),
- 'item_type' => $this->get_type(),
+ 'notification_type_id' => $this->notification_type_id,
'item_parent_id' => static::get_item_parent_id($type_data),
'notification_time' => time(),
@@ -460,7 +470,7 @@ abstract class phpbb_notification_type_base implements phpbb_notification_type_i
$this->notification_read = (bool) !$unread;
$where = array(
- "item_type = '" . $this->db->sql_escape($this->item_type) . "'",
+ 'notification_type_id = ' . (int) $this->notification_type_id,
'item_id = ' . (int) $this->item_id,
'user_id = ' . (int) $this->user_id,
);
diff --git a/phpBB/includes/notification/type/bookmark.php b/phpBB/includes/notification/type/bookmark.php
index 946cb9b4ed..ae2e75d3eb 100644
--- a/phpBB/includes/notification/type/bookmark.php
+++ b/phpBB/includes/notification/type/bookmark.php
@@ -103,11 +103,11 @@ class phpbb_notification_type_bookmark extends phpbb_notification_type_post
// Try to find the users who already have been notified about replies and have not read the topic since and just update their notifications
$update_notifications = array();
$sql = 'SELECT n.*
- FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . " nt
- WHERE n.item_type = '" . $this->get_type() . "'
- AND n.item_parent_id = " . (int) self::get_item_parent_id($post) . '
+ FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . ' nt
+ WHERE n.notification_type_id = ' . (int) $this->notification_type_id . '
+ AND n.item_parent_id = ' . (int) self::get_item_parent_id($post) . '
AND n.notification_read = 0
- AND nt.notification_type = n.item_type
+ AND nt.notification_type_id = n.notification_type_id
AND nt.notification_type_enabled = 1';
$result = $this->db->sql_query($sql);
while ($row = $this->db->sql_fetchrow($result))
diff --git a/phpBB/includes/notification/type/post.php b/phpBB/includes/notification/type/post.php
index 626c13b7fd..9207fd866e 100644
--- a/phpBB/includes/notification/type/post.php
+++ b/phpBB/includes/notification/type/post.php
@@ -138,11 +138,11 @@ class phpbb_notification_type_post extends phpbb_notification_type_base
// Try to find the users who already have been notified about replies and have not read the topic since and just update their notifications
$update_notifications = array();
$sql = 'SELECT n.*
- FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . " nt
- WHERE n.item_type = '" . $this->get_type() . "'
- AND n.item_parent_id = " . (int) self::get_item_parent_id($post) . '
+ FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . ' nt
+ WHERE n.notification_type_id = ' . (int) $this->notification_type_id . '
+ AND n.item_parent_id = ' . (int) self::get_item_parent_id($post) . '
AND n.notification_read = 0
- AND nt.notification_type = n.item_type
+ AND nt.notification_type_id = n.notification_type_id
AND nt.notification_type_enabled = 1';
$result = $this->db->sql_query($sql);
while ($row = $this->db->sql_fetchrow($result))
diff --git a/phpBB/includes/notification/type/quote.php b/phpBB/includes/notification/type/quote.php
index e9eb7bea21..0ed13f36fb 100644
--- a/phpBB/includes/notification/type/quote.php
+++ b/phpBB/includes/notification/type/quote.php
@@ -122,11 +122,11 @@ class phpbb_notification_type_quote extends phpbb_notification_type_post
// Try to find the users who already have been notified about replies and have not read the topic since and just update their notifications
$update_notifications = array();
$sql = 'SELECT n.*
- FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . " nt
- WHERE n.item_type = '" . $this->get_type() . "'
- AND n.item_parent_id = " . (int) self::get_item_parent_id($post) . '
+ FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . ' nt
+ WHERE n.notification_type_id = ' . (int) $this->notification_type_id . '
+ AND n.item_parent_id = ' . (int) self::get_item_parent_id($post) . '
AND n.notification_read = 0
- AND nt.notification_type = n.item_type
+ AND nt.notification_type_id = n.notification_type_id
AND nt.notification_type_enabled = 1';
$result = $this->db->sql_query($sql);
while ($row = $this->db->sql_fetchrow($result))
@@ -154,10 +154,10 @@ class phpbb_notification_type_quote extends phpbb_notification_type_post
{
$old_notifications = array();
$sql = 'SELECT n.user_id
- FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . " nt
- WHERE n.item_type = '" . $this->get_type() . "'
- AND n.item_id = " . self::get_item_id($post) . '
- AND nt.notification_type = n.item_type
+ FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . ' nt
+ WHERE n.notification_type_id = ' . (int) $this->notification_type_id . '
+ AND n.item_id = ' . self::get_item_id($post) . '
+ AND nt.notification_type_id = n.notification_type_id
AND nt.notification_type_enabled = 1';
$result = $this->db->sql_query($sql);
while ($row = $this->db->sql_fetchrow($result))
@@ -185,9 +185,9 @@ class phpbb_notification_type_quote extends phpbb_notification_type_post
// Remove the necessary notifications
if (!empty($remove_notifications))
{
- $sql = 'DELETE FROM ' . $this->notifications_table . "
- WHERE item_type = '" . $this->get_type() . "'
- AND item_id = " . self::get_item_id($post) . '
+ $sql = 'DELETE FROM ' . $this->notifications_table . '
+ WHERE notification_type_id = ' . (int) $this->notification_type_id . '
+ AND item_id = ' . self::get_item_id($post) . '
AND ' . $this->db->sql_in_set('user_id', $remove_notifications);
$this->db->sql_query($sql);
}
diff --git a/phpBB/install/schemas/firebird_schema.sql b/phpBB/install/schemas/firebird_schema.sql
index 92227eb38c..a64b8eeffc 100644
--- a/phpBB/install/schemas/firebird_schema.sql
+++ b/phpBB/install/schemas/firebird_schema.sql
@@ -1303,7 +1303,7 @@ CREATE INDEX phpbb_topics_watch_notify_stat ON phpbb_topics_watch(notify_status)
# Table: 'phpbb_user_notifications'
CREATE TABLE phpbb_user_notifications (
- notification_type_id INTEGER DEFAULT 0 NOT NULL,
+ item_type VARCHAR(255) CHARACTER SET NONE DEFAULT '' NOT NULL,
item_id INTEGER DEFAULT 0 NOT NULL,
user_id INTEGER DEFAULT 0 NOT NULL,
method VARCHAR(255) CHARACTER SET NONE DEFAULT '' NOT NULL,
diff --git a/phpBB/install/schemas/mssql_schema.sql b/phpBB/install/schemas/mssql_schema.sql
index e869cbd1b5..8465dc4d72 100644
--- a/phpBB/install/schemas/mssql_schema.sql
+++ b/phpBB/install/schemas/mssql_schema.sql
@@ -1591,7 +1591,7 @@ GO
Table: 'phpbb_user_notifications'
*/
CREATE TABLE [phpbb_user_notifications] (
- [notification_type_id] [int] DEFAULT (0) NOT NULL ,
+ [item_type] [varchar] (255) DEFAULT ('') NOT NULL ,
[item_id] [int] DEFAULT (0) NOT NULL ,
[user_id] [int] DEFAULT (0) NOT NULL ,
[method] [varchar] (255) DEFAULT ('') NOT NULL ,
diff --git a/phpBB/install/schemas/mysql_40_schema.sql b/phpBB/install/schemas/mysql_40_schema.sql
index 70048ea6bd..37e4e66ad7 100644
--- a/phpBB/install/schemas/mysql_40_schema.sql
+++ b/phpBB/install/schemas/mysql_40_schema.sql
@@ -913,7 +913,7 @@ CREATE TABLE phpbb_topics_watch (
# Table: 'phpbb_user_notifications'
CREATE TABLE phpbb_user_notifications (
- notification_type_id smallint(4) UNSIGNED DEFAULT '0' NOT NULL,
+ item_type varbinary(255) DEFAULT '' NOT NULL,
item_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
user_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
method varbinary(255) DEFAULT '' NOT NULL,
diff --git a/phpBB/install/schemas/mysql_41_schema.sql b/phpBB/install/schemas/mysql_41_schema.sql
index e5ab9ceafa..ff0f315f93 100644
--- a/phpBB/install/schemas/mysql_41_schema.sql
+++ b/phpBB/install/schemas/mysql_41_schema.sql
@@ -913,7 +913,7 @@ CREATE TABLE phpbb_topics_watch (
# Table: 'phpbb_user_notifications'
CREATE TABLE phpbb_user_notifications (
- notification_type_id smallint(4) UNSIGNED DEFAULT '0' NOT NULL,
+ item_type varchar(255) DEFAULT '' NOT NULL,
item_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
user_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
method varchar(255) DEFAULT '' NOT NULL,
diff --git a/phpBB/install/schemas/oracle_schema.sql b/phpBB/install/schemas/oracle_schema.sql
index b2e7409c7a..11f245869d 100644
--- a/phpBB/install/schemas/oracle_schema.sql
+++ b/phpBB/install/schemas/oracle_schema.sql
@@ -1720,7 +1720,7 @@ CREATE INDEX phpbb_topics_watch_notify_stat ON phpbb_topics_watch (notify_status
Table: 'phpbb_user_notifications'
*/
CREATE TABLE phpbb_user_notifications (
- notification_type_id number(4) DEFAULT '0' NOT NULL,
+ item_type varchar2(255) DEFAULT '' ,
item_id number(8) DEFAULT '0' NOT NULL,
user_id number(8) DEFAULT '0' NOT NULL,
method varchar2(255) DEFAULT '' ,
diff --git a/phpBB/install/schemas/postgres_schema.sql b/phpBB/install/schemas/postgres_schema.sql
index cd6de434b5..fea5700167 100644
--- a/phpBB/install/schemas/postgres_schema.sql
+++ b/phpBB/install/schemas/postgres_schema.sql
@@ -1175,7 +1175,7 @@ CREATE INDEX phpbb_topics_watch_notify_stat ON phpbb_topics_watch (notify_status
Table: 'phpbb_user_notifications'
*/
CREATE TABLE phpbb_user_notifications (
- notification_type_id INT2 DEFAULT '0' NOT NULL CHECK (notification_type_id >= 0),
+ item_type varchar(255) DEFAULT '' NOT NULL,
item_id INT4 DEFAULT '0' NOT NULL CHECK (item_id >= 0),
user_id INT4 DEFAULT '0' NOT NULL CHECK (user_id >= 0),
method varchar(255) DEFAULT '' NOT NULL,
diff --git a/phpBB/install/schemas/sqlite_schema.sql b/phpBB/install/schemas/sqlite_schema.sql
index e12bb624b6..02ffb9a857 100644
--- a/phpBB/install/schemas/sqlite_schema.sql
+++ b/phpBB/install/schemas/sqlite_schema.sql
@@ -884,7 +884,7 @@ CREATE INDEX phpbb_topics_watch_notify_stat ON phpbb_topics_watch (notify_status
# Table: 'phpbb_user_notifications'
CREATE TABLE phpbb_user_notifications (
- notification_type_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
+ item_type varchar(255) NOT NULL DEFAULT '',
item_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
user_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
method varchar(255) NOT NULL DEFAULT '',
From 7bda5a016a726711855fb7a749f9f3638e63d1e3 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Mon, 29 Apr 2013 21:42:14 -0500
Subject: [PATCH 290/704] [ticket/11413] Prevent recursive function calls
PHPBB3-11413
---
phpBB/includes/notification/manager.php | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/phpBB/includes/notification/manager.php b/phpBB/includes/notification/manager.php
index e7d6af71b8..a9eb503fb8 100644
--- a/phpBB/includes/notification/manager.php
+++ b/phpBB/includes/notification/manager.php
@@ -871,7 +871,10 @@ class phpbb_notification_manager
if (!isset($notification_type_ids[$notification_type_name]))
{
- $notification_type = $this->get_item_type_class($notification_type_name);
+ if (!isset($this->notification_types[$notification_type_name]) && !isset($this->notification_types['notification.type.' . $notification_type_name]))
+ {
+ throw new phpbb_notification_exception('Notification type ' . $notification_type_name . ' does not exist');
+ }
$sql = 'INSERT INTO ' . $this->notification_types_table . ' ' . $this->db->sql_build_array('INSERT', array(
'notification_type_name' => $notification_type_name,
From 4cd0914f8976913de0ec46cc78c8ac5731415838 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Mon, 29 Apr 2013 22:16:46 -0500
Subject: [PATCH 291/704] [ticket/11413] Fix notification tests
Send types/methods the cache service, not the driver (not sure why the
driver was sent before)
PHPBB3-11413
---
phpBB/config/notifications.yml | 34 +++++++-------
phpBB/includes/notification/exception.php | 29 ++++++++++++
phpBB/includes/notification/method/base.php | 4 +-
phpBB/includes/notification/type/base.php | 4 +-
.../manager_helper.php} | 2 +-
tests/notification/notification_test.php | 47 ++++++++++++++-----
6 files changed, 86 insertions(+), 34 deletions(-)
create mode 100644 phpBB/includes/notification/exception.php
rename tests/{mock/notifications_notification_manager.php => notification/manager_helper.php} (95%)
diff --git a/phpBB/config/notifications.yml b/phpBB/config/notifications.yml
index 60aa63a854..c66527941e 100644
--- a/phpBB/config/notifications.yml
+++ b/phpBB/config/notifications.yml
@@ -19,7 +19,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache.driver
+ - @cache
- @user
- @auth
- @config
@@ -37,7 +37,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache.driver
+ - @cache
- @user
- @auth
- @config
@@ -55,7 +55,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache.driver
+ - @cache
- @user
- @auth
- @config
@@ -73,7 +73,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache.driver
+ - @cache
- @user
- @auth
- @config
@@ -91,7 +91,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache.driver
+ - @cache
- @user
- @auth
- @config
@@ -109,7 +109,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache.driver
+ - @cache
- @user
- @auth
- @config
@@ -127,7 +127,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache.driver
+ - @cache
- @user
- @auth
- @config
@@ -145,7 +145,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache.driver
+ - @cache
- @user
- @auth
- @config
@@ -163,7 +163,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache.driver
+ - @cache
- @user
- @auth
- @config
@@ -181,7 +181,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache.driver
+ - @cache
- @user
- @auth
- @config
@@ -199,7 +199,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache.driver
+ - @cache
- @user
- @auth
- @config
@@ -217,7 +217,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache.driver
+ - @cache
- @user
- @auth
- @config
@@ -235,7 +235,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache.driver
+ - @cache
- @user
- @auth
- @config
@@ -253,7 +253,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache.driver
+ - @cache
- @user
- @auth
- @config
@@ -271,7 +271,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache.driver
+ - @cache
- @user
- @auth
- @config
@@ -289,7 +289,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache.driver
+ - @cache
- @user
- @auth
- @config
@@ -304,7 +304,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache.driver
+ - @cache
- @user
- @auth
- @config
diff --git a/phpBB/includes/notification/exception.php b/phpBB/includes/notification/exception.php
new file mode 100644
index 0000000000..a52d6fdc57
--- /dev/null
+++ b/phpBB/includes/notification/exception.php
@@ -0,0 +1,29 @@
+getMessage();
+ }
+}
diff --git a/phpBB/includes/notification/method/base.php b/phpBB/includes/notification/method/base.php
index 22418c9be8..bae85310b2 100644
--- a/phpBB/includes/notification/method/base.php
+++ b/phpBB/includes/notification/method/base.php
@@ -66,7 +66,7 @@ abstract class phpbb_notification_method_base implements phpbb_notification_meth
*
* @param phpbb_user_loader $user_loader
* @param phpbb_db_driver $db
- * @param phpbb_cache_driver_interface $cache
+ * @param phpbb_cache_service $cache
* @param phpbb_user $user
* @param phpbb_auth $auth
* @param phpbb_config $config
@@ -74,7 +74,7 @@ abstract class phpbb_notification_method_base implements phpbb_notification_meth
* @param string $php_ext
* @return phpbb_notification_method_base
*/
- public function __construct(phpbb_user_loader $user_loader, phpbb_db_driver $db, phpbb_cache_driver_interface $cache, $user, phpbb_auth $auth, phpbb_config $config, $phpbb_root_path, $php_ext)
+ public function __construct(phpbb_user_loader $user_loader, phpbb_db_driver $db, phpbb_cache_service $cache, $user, phpbb_auth $auth, phpbb_config $config, $phpbb_root_path, $php_ext)
{
$this->user_loader = $user_loader;
$this->db = $db;
diff --git a/phpBB/includes/notification/type/base.php b/phpBB/includes/notification/type/base.php
index f56956d16a..983383ce2a 100644
--- a/phpBB/includes/notification/type/base.php
+++ b/phpBB/includes/notification/type/base.php
@@ -96,7 +96,7 @@ abstract class phpbb_notification_type_base implements phpbb_notification_type_i
*
* @param phpbb_user_loader $user_loader
* @param phpbb_db_driver $db
- * @param phpbb_cache_driver_interface $cache
+ * @param phpbb_cache_service $cache
* @param phpbb_user $user
* @param phpbb_auth $auth
* @param phpbb_config $config
@@ -107,7 +107,7 @@ abstract class phpbb_notification_type_base implements phpbb_notification_type_i
* @param string $user_notifications_table
* @return phpbb_notification_type_base
*/
- public function __construct(phpbb_user_loader $user_loader, phpbb_db_driver $db, phpbb_cache_driver_interface $cache, $user, phpbb_auth $auth, phpbb_config $config, $phpbb_root_path, $php_ext, $notification_types_table, $notifications_table, $user_notifications_table)
+ public function __construct(phpbb_user_loader $user_loader, phpbb_db_driver $db, phpbb_cache_service $cache, $user, phpbb_auth $auth, phpbb_config $config, $phpbb_root_path, $php_ext, $notification_types_table, $notifications_table, $user_notifications_table)
{
$this->user_loader = $user_loader;
$this->db = $db;
diff --git a/tests/mock/notifications_notification_manager.php b/tests/notification/manager_helper.php
similarity index 95%
rename from tests/mock/notifications_notification_manager.php
rename to tests/notification/manager_helper.php
index c995afb9ab..8d2ce5e002 100644
--- a/tests/mock/notifications_notification_manager.php
+++ b/tests/notification/manager_helper.php
@@ -19,7 +19,7 @@ if (!defined('IN_PHPBB'))
* Notifications service class
* @package notifications
*/
-class phpbb_mock_notifications_notification_manager extends phpbb_notification_manager
+class phpbb_notification_manager_helper extends phpbb_notification_manager
{
public function set_var($name, $value)
{
diff --git a/tests/notification/notification_test.php b/tests/notification/notification_test.php
index beccf55371..5746d0090e 100644
--- a/tests/notification/notification_test.php
+++ b/tests/notification/notification_test.php
@@ -7,6 +7,8 @@
*
*/
+require_once dirname(__FILE__) . '/manager_helper.php';
+
class phpbb_notification_test extends phpbb_database_test_case
{
protected $notifications, $db, $container, $user, $config, $auth, $cache;
@@ -34,16 +36,23 @@ class phpbb_notification_test extends phpbb_database_test_case
$this->user = new phpbb_mock_user();
$this->user_loader = new phpbb_user_loader($this->db, $phpbb_root_path, $phpEx, 'phpbb_users');
$this->auth = new phpbb_mock_notifications_auth();
- $this->cache = new phpbb_mock_cache();
+ $this->cache = new phpbb_cache_service(
+ new phpbb_cache_driver_null(),
+ $this->config,
+ $this->db,
+ $phpbb_root_path,
+ $phpEx
+ );
$this->container = new phpbb_mock_container_builder();
- $this->notifications = new phpbb_mock_notifications_notification_manager(
+ $this->notifications = new phpbb_notification_manager_helper(
array(),
array(),
$this->container,
$this->user_loader,
$this->db,
+ $this->cache,
$this->user,
$phpbb_root_path,
$phpEx,
@@ -121,6 +130,20 @@ class phpbb_notification_test extends phpbb_database_test_case
public function test_notifications()
{
+ $this->db->sql_query('DELETE FROM phpbb_notification_types');
+
+ $types = array('quote', 'bookmark', 'post', 'test');
+ foreach ($types as $id => $type)
+ {
+ $this->db->sql_query('INSERT INTO phpbb_notification_types ' .
+ $this->db->sql_build_array('INSERT', array(
+ 'notification_type_id' => ($id + 1),
+ 'notification_type_name' => $type,
+ 'notification_type_enabled' => 1,
+ ))
+ );
+ }
+
// Used to test post notifications later
$this->db->sql_query('INSERT INTO ' . TOPICS_WATCH_TABLE . ' ' . $this->db->sql_build_array('INSERT', array(
'topic_id' => 2,
@@ -195,7 +218,7 @@ class phpbb_notification_test extends phpbb_database_test_case
$expected = array(
1 => array(
- 'item_type' => 'test',
+ 'notification_type_id' => 4,
'item_id' => 1,
'item_parent_id' => 1,
'user_id' => 0,
@@ -204,7 +227,7 @@ class phpbb_notification_test extends phpbb_database_test_case
'notification_data' => array(),
),
2 => array(
- 'item_type' => 'test',
+ 'notification_type_id' => 4,
'item_id' => 2,
'item_parent_id' => 2,
'user_id' => 0,
@@ -213,7 +236,7 @@ class phpbb_notification_test extends phpbb_database_test_case
'notification_data' => array(),
),
3 => array(
- 'item_type' => 'test',
+ 'notification_type_id' => 4,
'item_id' => 3,
'item_parent_id' => 2,
'user_id' => 0,
@@ -222,7 +245,7 @@ class phpbb_notification_test extends phpbb_database_test_case
'notification_data' => array(),
),
4 => array(
- 'item_type' => 'post',
+ 'notification_type_id' => 3,
'item_id' => 4,
'item_parent_id' => 2,
'user_id' => 0,
@@ -238,7 +261,7 @@ class phpbb_notification_test extends phpbb_database_test_case
),
),
5 => array(
- 'item_type' => 'bookmark',
+ 'notification_type_id' => 2,
'item_id' => 5,
'item_parent_id' => 2,
'user_id' => 0,
@@ -301,7 +324,7 @@ class phpbb_notification_test extends phpbb_database_test_case
$expected = array(
1 => array(
- 'item_type' => 'test',
+ 'notification_type_id' => 4,
'item_id' => 1,
'item_parent_id' => 2,
'user_id' => 0,
@@ -310,7 +333,7 @@ class phpbb_notification_test extends phpbb_database_test_case
'notification_data' => array(),
),
2 => array(
- 'item_type' => 'test',
+ 'notification_type_id' => 4,
'item_id' => 2,
'item_parent_id' => 2,
'user_id' => 0,
@@ -319,7 +342,7 @@ class phpbb_notification_test extends phpbb_database_test_case
'notification_data' => array(),
),
3 => array(
- 'item_type' => 'test',
+ 'notification_type_id' => 4,
'item_id' => 3,
'item_parent_id' => 2,
'user_id' => 0,
@@ -328,7 +351,7 @@ class phpbb_notification_test extends phpbb_database_test_case
'notification_data' => array(),
),
4 => array(
- 'item_type' => 'post',
+ 'notification_type_id' => 3,
'item_id' => 4,
'item_parent_id' => 2,
'user_id' => 0,
@@ -344,7 +367,7 @@ class phpbb_notification_test extends phpbb_database_test_case
),
),
5 => array(
- 'item_type' => 'bookmark',
+ 'notification_type_id' => 2,
'item_id' => 5,
'item_parent_id' => 2,
'user_id' => 0,
From 78c22248fa35dd01c0e30d1ea896379890cefe66 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Mon, 29 Apr 2013 22:41:08 -0500
Subject: [PATCH 292/704] [ticket/11413] Fix some more tests
PHPBB3-11413
---
tests/notification/submit_post_base.php | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/tests/notification/submit_post_base.php b/tests/notification/submit_post_base.php
index 953bedac80..5fbcfc8776 100644
--- a/tests/notification/submit_post_base.php
+++ b/tests/notification/submit_post_base.php
@@ -119,8 +119,9 @@ class phpbb_notification_submit_post_base extends phpbb_database_test_case
public function test_submit_post($additional_post_data, $expected_before, $expected_after)
{
$sql = 'SELECT user_id, item_id, item_parent_id
- FROM ' . NOTIFICATIONS_TABLE . "
- WHERE item_type = '" . $this->item_type . "'
+ FROM ' . NOTIFICATIONS_TABLE . ' n, ' . NOTIFICATIONS_TYPES_TABLE . " nt
+ WHERE nt.notification_type_name = '" . $this->item_type . "'
+ AND n.notification_type_id = nt.notification_type_id
ORDER BY user_id, item_id ASC";
$result = $this->db->sql_query($sql);
$this->assertEquals($expected_before, $this->db->sql_fetchrowset($result));
@@ -131,8 +132,9 @@ class phpbb_notification_submit_post_base extends phpbb_database_test_case
submit_post('reply', '', 'poster-name', POST_NORMAL, $poll_data, $post_data, false, false);
$sql = 'SELECT user_id, item_id, item_parent_id
- FROM ' . NOTIFICATIONS_TABLE . "
- WHERE item_type = '" . $this->item_type . "'
+ FROM ' . NOTIFICATIONS_TABLE . ' n, ' . NOTIFICATIONS_TYPES_TABLE . " nt
+ WHERE nt.notification_type_name = '" . $this->item_type . "'
+ AND n.notification_type_id = nt.notification_type_id
ORDER BY user_id ASC, item_id ASC";
$result = $this->db->sql_query($sql);
$this->assertEquals($expected_after, $this->db->sql_fetchrowset($result));
From 878df5f280878b465e6e42c8257ddbdb66327a92 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Mon, 29 Apr 2013 22:52:52 -0500
Subject: [PATCH 293/704] [ticket/11413] Fix test fixtures and tests
PHPBB3-11413
---
.../fixtures/submit_post_bookmark.xml | 8 ++--
.../fixtures/submit_post_post.xml | 10 +++--
.../fixtures/submit_post_post_in_queue.xml | 8 ++--
.../fixtures/submit_post_quote.xml | 8 ++--
tests/notification/submit_post_base.php | 40 ++++++++++++-------
5 files changed, 46 insertions(+), 28 deletions(-)
diff --git a/tests/notification/fixtures/submit_post_bookmark.xml b/tests/notification/fixtures/submit_post_bookmark.xml
index b669d4c1b6..d4bf8df73f 100644
--- a/tests/notification/fixtures/submit_post_bookmark.xml
+++ b/tests/notification/fixtures/submit_post_bookmark.xml
@@ -29,14 +29,14 @@
- item_type
+ notification_type_id
user_id
item_id
item_parent_id
notification_read
notification_data
- bookmark
+ 1
5
1
1
@@ -45,9 +45,11 @@
- notification_type
+ notification_type_id
+ notification_type_name
notification_type_enabled
+ 1
bookmark
1
diff --git a/tests/notification/fixtures/submit_post_post.xml b/tests/notification/fixtures/submit_post_post.xml
index cead4f7c26..b0ffa042c5 100644
--- a/tests/notification/fixtures/submit_post_post.xml
+++ b/tests/notification/fixtures/submit_post_post.xml
@@ -21,14 +21,14 @@
- item_type
+ notification_type_id
user_id
item_id
item_parent_id
notification_read
notification_data
- post
+ 1
5
1
1
@@ -36,7 +36,7 @@
- post
+ 1
8
1
1
@@ -45,9 +45,11 @@
- notification_type
+ notification_type_id
+ notification_type_name
notification_type_enabled
+ 1
post
1
diff --git a/tests/notification/fixtures/submit_post_post_in_queue.xml b/tests/notification/fixtures/submit_post_post_in_queue.xml
index eedcebf71d..090e90ea49 100644
--- a/tests/notification/fixtures/submit_post_post_in_queue.xml
+++ b/tests/notification/fixtures/submit_post_post_in_queue.xml
@@ -1,14 +1,14 @@
- item_type
+ notification_type_id
user_id
item_id
item_parent_id
notification_read
notification_data
- post_in_queue
+ 1
6
1
1
@@ -17,9 +17,11 @@
- notification_type
+ notification_type_id
+ notification_type_name
notification_type_enabled
+ 1
post_in_queue
1
diff --git a/tests/notification/fixtures/submit_post_quote.xml b/tests/notification/fixtures/submit_post_quote.xml
index 884a84af4a..f22ed97d91 100644
--- a/tests/notification/fixtures/submit_post_quote.xml
+++ b/tests/notification/fixtures/submit_post_quote.xml
@@ -1,14 +1,14 @@
- item_type
+ notification_type_id
user_id
item_id
item_parent_id
notification_read
notification_data
- quote
+ 1
5
1
1
@@ -17,9 +17,11 @@
- notification_type
+ notification_type_id
+ notification_type_name
notification_type_enabled
+ 1
quote
1
diff --git a/tests/notification/submit_post_base.php b/tests/notification/submit_post_base.php
index 5fbcfc8776..c3dbfc2535 100644
--- a/tests/notification/submit_post_base.php
+++ b/tests/notification/submit_post_base.php
@@ -52,9 +52,6 @@ class phpbb_notification_submit_post_base extends phpbb_database_test_case
$this->db = $this->new_dbal();
$db = $this->db;
- // Cache
- $cache = new phpbb_mock_cache();
-
// Auth
$auth = $this->getMock('phpbb_auth');
$auth->expects($this->any())
@@ -72,6 +69,14 @@ class phpbb_notification_submit_post_base extends phpbb_database_test_case
set_config(null, null, null, $config);
set_config_count(null, null, null, $config);
+ $cache = new phpbb_cache_service(
+ new phpbb_cache_driver_null(),
+ $config,
+ $db,
+ $phpbb_root_path,
+ $phpEx
+ );
+
// Event dispatcher
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
@@ -94,23 +99,28 @@ class phpbb_notification_submit_post_base extends phpbb_database_test_case
$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,
- NOTIFICATION_TYPES_TABLE, NOTIFICATIONS_TABLE, USER_NOTIFICATIONS_TABLE);
- $phpbb_container->set('notification_manager', $phpbb_notifications);
-
// Notification Types
- $notification_types = array('quote', 'bookmark', 'post', 'post_in_queue');
+ $notification_types = array('quote', 'bookmark', 'post', 'post_in_queue', 'topic', 'approve_topic', 'approve_post');
+ $notification_types_array = array();
foreach ($notification_types as $type)
{
$class_name = 'phpbb_notification_type_' . $type;
- $phpbb_container->set('notification.type.' . $type, new $class_name(
+ $class = new $class_name(
$user_loader, $db, $cache, $user, $auth, $config,
$phpbb_root_path, $phpEx,
- NOTIFICATION_TYPES_TABLE, NOTIFICATIONS_TABLE, USER_NOTIFICATIONS_TABLE));
+ NOTIFICATION_TYPES_TABLE, NOTIFICATIONS_TABLE, USER_NOTIFICATIONS_TABLE);
+
+ $phpbb_container->set('notification.type.' . $type, $class);
+
+ $notification_types_array['notification.type.' . $type] = $class;
}
+
+ // Notification Manager
+ $phpbb_notifications = new phpbb_notification_manager($notification_types_array, array(),
+ $phpbb_container, $user_loader, $db, $cache, $user,
+ $phpbb_root_path, $phpEx,
+ NOTIFICATION_TYPES_TABLE, NOTIFICATIONS_TABLE, USER_NOTIFICATIONS_TABLE);
+ $phpbb_container->set('notification_manager', $phpbb_notifications);
}
/**
@@ -119,7 +129,7 @@ class phpbb_notification_submit_post_base extends phpbb_database_test_case
public function test_submit_post($additional_post_data, $expected_before, $expected_after)
{
$sql = 'SELECT user_id, item_id, item_parent_id
- FROM ' . NOTIFICATIONS_TABLE . ' n, ' . NOTIFICATIONS_TYPES_TABLE . " nt
+ FROM ' . NOTIFICATIONS_TABLE . ' n, ' . NOTIFICATION_TYPES_TABLE . " nt
WHERE nt.notification_type_name = '" . $this->item_type . "'
AND n.notification_type_id = nt.notification_type_id
ORDER BY user_id, item_id ASC";
@@ -132,7 +142,7 @@ class phpbb_notification_submit_post_base extends phpbb_database_test_case
submit_post('reply', '', 'poster-name', POST_NORMAL, $poll_data, $post_data, false, false);
$sql = 'SELECT user_id, item_id, item_parent_id
- FROM ' . NOTIFICATIONS_TABLE . ' n, ' . NOTIFICATIONS_TYPES_TABLE . " nt
+ FROM ' . NOTIFICATIONS_TABLE . ' n, ' . NOTIFICATION_TYPES_TABLE . " nt
WHERE nt.notification_type_name = '" . $this->item_type . "'
AND n.notification_type_id = nt.notification_type_id
ORDER BY user_id ASC, item_id ASC";
From 947550df8f5e2ba624adc26ddd22c7fe74e4f602 Mon Sep 17 00:00:00 2001
From: Vjacheslav Trushkin
Date: Tue, 30 Apr 2013 11:27:43 +0300
Subject: [PATCH 294/704] [ticket/10741] Docblock for phpbb.resizeTextArea
Better description of phpBB.resizeTextArea with detailed
explanation of all optional parameters.
Removed unnecessary semicolons
PHPBB3-10741
---
phpBB/assets/javascript/core.js | 41 +++++++++++++++++++++------------
1 file changed, 26 insertions(+), 15 deletions(-)
diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js
index 827ed2e34a..bb1fef253e 100644
--- a/phpBB/assets/javascript/core.js
+++ b/phpBB/assets/javascript/core.js
@@ -571,28 +571,39 @@ phpbb.addAjaxCallback('toggle_link', function() {
/**
* Automatically resize textarea
*
-* This function automatically resizes textarea elements when user
+* This function automatically resizes textarea elements when user
* types text.
*
-* @param jQuery item jQuery object to resize
-* @param object options Optional parameter that adjusts default
+* @param {jQuery} items jQuery object(s) to resize
+* @param {object} options Optional parameter that adjusts default
* configuration. See configuration variable
+*
+* Optional parameters:
+* minWindowHeight {number} Minimum browser window height when textareas are resized. Default = 500
+* minHeight {number} Minimum height of textarea. Default = 200
+* maxHeight {number} Maximum height of textarea. Default = 500
+* heightDiff {number} Minimum difference between window and textarea height. Default = 200
+* resizeCallback {function} Function to call after resizing textarea
+* resetCallback {function} Function to call when resize has been canceled
+
+* Callback function format: function(item) {}
+* this points to DOM object
+* item is a jQuery object, same as this
*/
-phpbb.resizeTextArea = function(items) {
+phpbb.resizeTextArea = function(items, options) {
// Configuration
var configuration = {
- minWindowHeight: 500, // Minimum browser window height when textareas are resized
- minHeight: 200, // Minimum height of textarea
- maxHeight: 500, // Maximum height of textarea
- heightDiff: 200, // Minimum difference between window and textarea height
- // In following callbacks parameter "item" is jQuery object. "this" points to DOM object
- resizeCallback: function(item) { }, // Function to call after resizing textarea.
- resetCallback: function(item) { } // Function to call when resize has been canceled
- }
+ minWindowHeight: 500,
+ minHeight: 200,
+ maxHeight: 500,
+ heightDiff: 200,
+ resizeCallback: function(item) { },
+ resetCallback: function(item) { }
+ };
if (arguments.length > 1)
{
- configuration = $.extend(configuration, arguments[1]);
+ configuration = $.extend(configuration, options);
}
function resetAutoResize(item)
@@ -603,7 +614,7 @@ phpbb.resizeTextArea = function(items) {
$(item).css({height: '', resize: ''}).removeClass('auto-resized');
configuration.resetCallback.call(item, $item);
}
- };
+ }
function autoResize(item)
{
@@ -634,7 +645,7 @@ phpbb.resizeTextArea = function(items) {
{
setHeight(Math.min(maxHeight, scrollHeight));
}
- };
+ }
items.bind('focus change keyup', function() {
$(this).each(function() {
From 8a4260703fa76bb92f144b527b3d55289568db74 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 30 Apr 2013 10:32:01 +0200
Subject: [PATCH 295/704] [ticket/11495] Fix some docs and replace branch with
other terms
PHPBB3-11495
---
phpBB/includes/tree/interface.php | 20 ++++++++--------
phpBB/includes/tree/nestedset.php | 24 ++++++++++----------
tests/tree/nestedset_forum_get_data_test.php | 24 ++++++++++----------
3 files changed, 34 insertions(+), 34 deletions(-)
diff --git a/phpBB/includes/tree/interface.php b/phpBB/includes/tree/interface.php
index ed0ccca3f1..1b462768a0 100644
--- a/phpBB/includes/tree/interface.php
+++ b/phpBB/includes/tree/interface.php
@@ -28,12 +28,12 @@ interface phpbb_tree_interface
/**
* Delete an item from the tree and from the database table
*
- * Also deletes all subitems from the tree and from the database table
+ * Also deletes the subtree from the tree and from the database table
*
* @param int $item_id The item to be deleted
* @return array Item ids that have been deleted
*/
- public function delete($item);
+ public function delete($item_id);
/**
* Move an item by a given delta
@@ -79,16 +79,16 @@ interface phpbb_tree_interface
/**
* Change parent item
*
- * Moves the item to the bottom of the new parent's list of children
+ * Moves the item to the bottom of the new parent's subtree
*
* @param int $item_id The item to be moved
* @param int $new_parent_id The new parent item
* @return bool True if the parent was set successfully
*/
- public function change_parent($item, $new_parent_id);
+ public function change_parent($item_id, $new_parent_id);
/**
- * Get children and parent branch of the item
+ * Get all items that are either a parent or part of the subtree of the item
*
* @param int $item_id The item id to get the parents/children from
* @param bool $order_desc Order the items descending (most outer parent first)
@@ -96,10 +96,10 @@ interface phpbb_tree_interface
* @return array Array of items (containing all columns from the item table)
* ID => Item data
*/
- public function get_full_branch_data($item_id, $order_desc, $include_item);
+ public function get_path_and_subtree_data($item_id, $order_desc, $include_item);
/**
- * Get parent branch of the item
+ * Get all parent items of the item
*
* @param int $item_id The item id to get the parents from
* @param bool $order_desc Order the items descending (most outer parent first)
@@ -107,10 +107,10 @@ interface phpbb_tree_interface
* @return array Array of items (containing all columns from the item table)
* ID => Item data
*/
- public function get_parent_branch_data($item_id, $order_desc, $include_item);
+ public function get_path_data($item_id, $order_desc, $include_item);
/**
- * Get children branch of the item
+ * Get all items of the item's subtree
*
* @param int $item_id The item id to get the children from
* @param bool $order_desc Order the items descending (most outer parent first)
@@ -118,7 +118,7 @@ interface phpbb_tree_interface
* @return array Array of items (containing all columns from the item table)
* ID => Item data
*/
- public function get_children_branch_data($item_id, $order_desc, $include_item);
+ public function get_subtree_data($item_id, $order_desc, $include_item);
/**
* Get base information of parent items
diff --git a/phpBB/includes/tree/nestedset.php b/phpBB/includes/tree/nestedset.php
index 9655a08aa5..10ab6a86e3 100644
--- a/phpBB/includes/tree/nestedset.php
+++ b/phpBB/includes/tree/nestedset.php
@@ -154,7 +154,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
*/
protected function remove_item_from_nestedset($item_id)
{
- $items = $this->get_children_branch_data($item_id);
+ $items = $this->get_subtree_data($item_id);
$item_ids = array_keys($items);
$this->remove_subset($item_ids, $items[$item_id]);
@@ -338,7 +338,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
throw new RuntimeException($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
}
- $item_data = $this->get_children_branch_data($current_parent_id);
+ $item_data = $this->get_subtree_data($current_parent_id);
if (!isset($item_data[$current_parent_id]))
{
$this->lock->release();
@@ -447,7 +447,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
throw new RuntimeException($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
}
- $item_data = $this->get_children_branch_data($item_id);
+ $item_data = $this->get_subtree_data($item_id);
if (!isset($item_data[$item_id]))
{
$this->lock->release();
@@ -529,45 +529,45 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
/**
* @inheritdoc
*/
- public function get_full_branch_data($item_id, $order_desc = true, $include_item = true)
+ public function get_path_and_subtree_data($item_id, $order_desc = true, $include_item = true)
{
$condition = 'i2.' . $this->column_left_id . ' BETWEEN i1.' . $this->column_left_id . ' AND i1.' . $this->column_right_id . '
OR i1.' . $this->column_left_id . ' BETWEEN i2.' . $this->column_left_id . ' AND i2.' . $this->column_right_id;
- return $this->get_branch_data($item_id, $condition, $order_desc, $include_item);
+ return $this->get_set_of_nodes_data($item_id, $condition, $order_desc, $include_item);
}
/**
* @inheritdoc
*/
- public function get_parent_branch_data($item_id, $order_desc = true, $include_item = true)
+ public function get_path_data($item_id, $order_desc = true, $include_item = true)
{
$condition = 'i1.' . $this->column_left_id . ' BETWEEN i2.' . $this->column_left_id . ' AND i2.' . $this->column_right_id . '';
- return $this->get_branch_data($item_id, $condition, $order_desc, $include_item);
+ return $this->get_set_of_nodes_data($item_id, $condition, $order_desc, $include_item);
}
/**
* @inheritdoc
*/
- public function get_children_branch_data($item_id, $order_desc = true, $include_item = true)
+ public function get_subtree_data($item_id, $order_desc = true, $include_item = true)
{
$condition = 'i2.' . $this->column_left_id . ' BETWEEN i1.' . $this->column_left_id . ' AND i1.' . $this->column_right_id . '';
- return $this->get_branch_data($item_id, $condition, $order_desc, $include_item);
+ return $this->get_set_of_nodes_data($item_id, $condition, $order_desc, $include_item);
}
/**
- * Get children and parent branch of the item
+ * Get items that are related to the given item by the condition
*
- * @param int $item_id The item id to get the parents/children from
+ * @param int $item_id The item id to get the node set from
* @param string $condition Query string restricting the item list
* @param bool $order_desc Order the items descending (most outer parent first)
* @param bool $include_item Should the item (matching the given item id) be included in the list aswell
* @return array Array of items (containing all columns from the item table)
* ID => Item data
*/
- protected function get_branch_data($item_id, $condition, $order_desc = true, $include_item = true)
+ protected function get_set_of_nodes_data($item_id, $condition, $order_desc = true, $include_item = true)
{
$rows = array();
diff --git a/tests/tree/nestedset_forum_get_data_test.php b/tests/tree/nestedset_forum_get_data_test.php
index 71c1d8bf8a..300bbc6bfa 100644
--- a/tests/tree/nestedset_forum_get_data_test.php
+++ b/tests/tree/nestedset_forum_get_data_test.php
@@ -11,7 +11,7 @@ require_once dirname(__FILE__) . '/nestedset_forum_base.php';
class phpbb_tests_tree_nestedset_forum_get_data_test extends phpbb_tests_tree_nestedset_forum_base
{
- public function get_full_branch_data_data()
+ public function get_path_and_subtree_data_data()
{
return array(
array(1, true, true, array(1, 2, 3)),
@@ -32,14 +32,14 @@ class phpbb_tests_tree_nestedset_forum_get_data_test extends phpbb_tests_tree_ne
}
/**
- * @dataProvider get_full_branch_data_data
+ * @dataProvider get_path_and_subtree_data_data
*/
- public function test_get_full_branch_data($forum_id, $order_desc, $include_item, $expected)
+ public function test_get_path_and_subtree_data($forum_id, $order_desc, $include_item, $expected)
{
- $this->assertEquals($expected, array_keys($this->set->get_full_branch_data($forum_id, $order_desc, $include_item)));
+ $this->assertEquals($expected, array_keys($this->set->get_path_and_subtree_data($forum_id, $order_desc, $include_item)));
}
- public function get_parent_branch_data_data()
+ public function get_path_data_data()
{
return array(
array(1, true, true, array(1)),
@@ -60,14 +60,14 @@ class phpbb_tests_tree_nestedset_forum_get_data_test extends phpbb_tests_tree_ne
}
/**
- * @dataProvider get_parent_branch_data_data
+ * @dataProvider get_path_data_data
*/
- public function test_get_parent_branch_data($forum_id, $order_desc, $include_item, $expected)
+ public function test_get_path_data($forum_id, $order_desc, $include_item, $expected)
{
- $this->assertEquals($expected, array_keys($this->set->get_parent_branch_data($forum_id, $order_desc, $include_item)));
+ $this->assertEquals($expected, array_keys($this->set->get_path_data($forum_id, $order_desc, $include_item)));
}
- public function get_children_branch_data_data()
+ public function get_subtree_data_data()
{
return array(
array(1, true, true, array(1, 2, 3)),
@@ -88,11 +88,11 @@ class phpbb_tests_tree_nestedset_forum_get_data_test extends phpbb_tests_tree_ne
}
/**
- * @dataProvider get_children_branch_data_data
+ * @dataProvider get_subtree_data_data
*/
- public function test_get_children_branch_data($forum_id, $order_desc, $include_item, $expected)
+ public function test_get_subtree_data($forum_id, $order_desc, $include_item, $expected)
{
- $this->assertEquals($expected, array_keys($this->set->get_children_branch_data($forum_id, $order_desc, $include_item)));
+ $this->assertEquals($expected, array_keys($this->set->get_subtree_data($forum_id, $order_desc, $include_item)));
}
public function get_parent_data_data()
From 4810c61fd7b912ea2914b99f7db502b6f503068f Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 30 Apr 2013 10:37:59 +0200
Subject: [PATCH 296/704] [ticket/11495] Remove get_parent_data from interface
and rename it
The method is implementation specific and has no use, apart from cache, that is
not covered by get_path_data().
PHPBB3-11495
---
phpBB/includes/tree/interface.php | 9 ---------
phpBB/includes/tree/nestedset.php | 9 ++++++---
tests/tree/nestedset_forum_get_data_test.php | 8 ++++----
3 files changed, 10 insertions(+), 16 deletions(-)
diff --git a/phpBB/includes/tree/interface.php b/phpBB/includes/tree/interface.php
index 1b462768a0..bd8181beb2 100644
--- a/phpBB/includes/tree/interface.php
+++ b/phpBB/includes/tree/interface.php
@@ -119,13 +119,4 @@ interface phpbb_tree_interface
* ID => Item data
*/
public function get_subtree_data($item_id, $order_desc, $include_item);
-
- /**
- * Get base information of parent items
- *
- * @param array $item The item to get the branch from
- * @return array Array of items (containing basic columns from the item table)
- * ID => Item data
- */
- public function get_parent_data(array $item);
}
diff --git a/phpBB/includes/tree/nestedset.php b/phpBB/includes/tree/nestedset.php
index 10ab6a86e3..89a91ccb16 100644
--- a/phpBB/includes/tree/nestedset.php
+++ b/phpBB/includes/tree/nestedset.php
@@ -595,13 +595,16 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
}
/**
- * Get base information of parent items
+ * Get basic data of all parent items
*
+ * Basic data is defined in the $item_basic_data property.
* Data is cached in the item_parents column in the item table
*
- * @inheritdoc
+ * @param array $item The item to get the path from
+ * @return array Array of items (containing basic columns from the item table)
+ * ID => Item data
*/
- public function get_parent_data(array $item)
+ public function get_path_basic_data(array $item)
{
$parents = array();
if ((int) $item[$this->column_parent_id])
diff --git a/tests/tree/nestedset_forum_get_data_test.php b/tests/tree/nestedset_forum_get_data_test.php
index 300bbc6bfa..7a4fada880 100644
--- a/tests/tree/nestedset_forum_get_data_test.php
+++ b/tests/tree/nestedset_forum_get_data_test.php
@@ -95,7 +95,7 @@ class phpbb_tests_tree_nestedset_forum_get_data_test extends phpbb_tests_tree_ne
$this->assertEquals($expected, array_keys($this->set->get_subtree_data($forum_id, $order_desc, $include_item)));
}
- public function get_parent_data_data()
+ public function get_path_basic_data_data()
{
return array(
array(1, array(), array()),
@@ -108,10 +108,10 @@ class phpbb_tests_tree_nestedset_forum_get_data_test extends phpbb_tests_tree_ne
}
/**
- * @dataProvider get_parent_data_data
+ * @dataProvider get_path_basic_data_data
*/
- public function test_get_parent_data($forum_id, $forum_data, $expected)
+ public function test_get_path_basic_data($forum_id, $forum_data, $expected)
{
- $this->assertEquals($expected, array_keys($this->set->get_parent_data(array_merge($this->forum_data[$forum_id], $forum_data))));
+ $this->assertEquals($expected, array_keys($this->set->get_path_basic_data(array_merge($this->forum_data[$forum_id], $forum_data))));
}
}
From 67f2edae170576104e619ffb38672cabf44e20fa Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 30 Apr 2013 13:54:50 +0200
Subject: [PATCH 297/704] [ticket/11495] Use descendants and ancestors instead
of parents/children
PHPBB3-11495
---
phpBB/includes/tree/interface.php | 28 ++++++++++----------
phpBB/includes/tree/nestedset.php | 18 ++++++-------
tests/tree/nestedset_forum_get_data_test.php | 12 ++++-----
3 files changed, 29 insertions(+), 29 deletions(-)
diff --git a/phpBB/includes/tree/interface.php b/phpBB/includes/tree/interface.php
index bd8181beb2..e09fcea4fa 100644
--- a/phpBB/includes/tree/interface.php
+++ b/phpBB/includes/tree/interface.php
@@ -65,9 +65,9 @@ interface phpbb_tree_interface
public function move_up($item_id);
/**
- * Moves all children of one item to another item
+ * Moves all descendants of one item to another item
*
- * If the new parent already has children, the new children are appended
+ * If the new parent already has descendants, the new descendants are appended
* to the list.
*
* @param int $current_parent_id The current parent item
@@ -88,35 +88,35 @@ interface phpbb_tree_interface
public function change_parent($item_id, $new_parent_id);
/**
- * Get all items that are either a parent or part of the subtree of the item
+ * Get all items that are either an ancestors or descendants of the item
*
- * @param int $item_id The item id to get the parents/children from
- * @param bool $order_desc Order the items descending (most outer parent first)
+ * @param int $item_id The item to get the ancestors/descendants from
+ * @param bool $order_asc Order the items ascending (most outer ancestor first)
* @param bool $include_item Should the item (matching the given item id) be included in the list aswell
* @return array Array of items (containing all columns from the item table)
* ID => Item data
*/
- public function get_path_and_subtree_data($item_id, $order_desc, $include_item);
+ public function get_path_and_subtree_data($item_id, $order_asc, $include_item);
/**
- * Get all parent items of the item
+ * Get all ancestors items of the item
*
- * @param int $item_id The item id to get the parents from
- * @param bool $order_desc Order the items descending (most outer parent first)
+ * @param int $item_id The item id to get the ancestors from
+ * @param bool $order_asc Order the items ascending (most outer ancestor first)
* @param bool $include_item Should the item (matching the given item id) be included in the list aswell
* @return array Array of items (containing all columns from the item table)
* ID => Item data
*/
- public function get_path_data($item_id, $order_desc, $include_item);
+ public function get_path_data($item_id, $order_asc, $include_item);
/**
- * Get all items of the item's subtree
+ * Get all descendants of the item
*
- * @param int $item_id The item id to get the children from
- * @param bool $order_desc Order the items descending (most outer parent first)
+ * @param int $item_id The item id to get the descendants from
+ * @param bool $order_asc Order the items ascending
* @param bool $include_item Should the item (matching the given item id) be included in the list aswell
* @return array Array of items (containing all columns from the item table)
* ID => Item data
*/
- public function get_subtree_data($item_id, $order_desc, $include_item);
+ public function get_subtree_data($item_id, $order_asc, $include_item);
}
diff --git a/phpBB/includes/tree/nestedset.php b/phpBB/includes/tree/nestedset.php
index 89a91ccb16..7710895a25 100644
--- a/phpBB/includes/tree/nestedset.php
+++ b/phpBB/includes/tree/nestedset.php
@@ -529,32 +529,32 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
/**
* @inheritdoc
*/
- public function get_path_and_subtree_data($item_id, $order_desc = true, $include_item = true)
+ public function get_path_and_subtree_data($item_id, $order_asc = true, $include_item = true)
{
$condition = 'i2.' . $this->column_left_id . ' BETWEEN i1.' . $this->column_left_id . ' AND i1.' . $this->column_right_id . '
OR i1.' . $this->column_left_id . ' BETWEEN i2.' . $this->column_left_id . ' AND i2.' . $this->column_right_id;
- return $this->get_set_of_nodes_data($item_id, $condition, $order_desc, $include_item);
+ return $this->get_set_of_nodes_data($item_id, $condition, $order_asc, $include_item);
}
/**
* @inheritdoc
*/
- public function get_path_data($item_id, $order_desc = true, $include_item = true)
+ public function get_path_data($item_id, $order_asc = true, $include_item = true)
{
$condition = 'i1.' . $this->column_left_id . ' BETWEEN i2.' . $this->column_left_id . ' AND i2.' . $this->column_right_id . '';
- return $this->get_set_of_nodes_data($item_id, $condition, $order_desc, $include_item);
+ return $this->get_set_of_nodes_data($item_id, $condition, $order_asc, $include_item);
}
/**
* @inheritdoc
*/
- public function get_subtree_data($item_id, $order_desc = true, $include_item = true)
+ public function get_subtree_data($item_id, $order_asc = true, $include_item = true)
{
$condition = 'i2.' . $this->column_left_id . ' BETWEEN i1.' . $this->column_left_id . ' AND i1.' . $this->column_right_id . '';
- return $this->get_set_of_nodes_data($item_id, $condition, $order_desc, $include_item);
+ return $this->get_set_of_nodes_data($item_id, $condition, $order_asc, $include_item);
}
/**
@@ -562,12 +562,12 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
*
* @param int $item_id The item id to get the node set from
* @param string $condition Query string restricting the item list
- * @param bool $order_desc Order the items descending (most outer parent first)
+ * @param bool $order_asc Order the items ascending by their left_id
* @param bool $include_item Should the item (matching the given item id) be included in the list aswell
* @return array Array of items (containing all columns from the item table)
* ID => Item data
*/
- protected function get_set_of_nodes_data($item_id, $condition, $order_desc = true, $include_item = true)
+ protected function get_set_of_nodes_data($item_id, $condition, $order_asc = true, $include_item = true)
{
$rows = array();
@@ -577,7 +577,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
ON (($condition) " . $this->get_sql_where('AND', 'i2.') . ')
WHERE i1.' . $this->column_item_id . ' = ' . (int) $item_id . '
' . $this->get_sql_where('AND', 'i1.') . '
- ORDER BY i2.' . $this->column_left_id . ' ' . ($order_desc ? 'ASC' : 'DESC');
+ ORDER BY i2.' . $this->column_left_id . ' ' . ($order_asc ? 'ASC' : 'DESC');
$result = $this->db->sql_query($sql);
while ($row = $this->db->sql_fetchrow($result))
diff --git a/tests/tree/nestedset_forum_get_data_test.php b/tests/tree/nestedset_forum_get_data_test.php
index 7a4fada880..49586fbade 100644
--- a/tests/tree/nestedset_forum_get_data_test.php
+++ b/tests/tree/nestedset_forum_get_data_test.php
@@ -34,9 +34,9 @@ class phpbb_tests_tree_nestedset_forum_get_data_test extends phpbb_tests_tree_ne
/**
* @dataProvider get_path_and_subtree_data_data
*/
- public function test_get_path_and_subtree_data($forum_id, $order_desc, $include_item, $expected)
+ public function test_get_path_and_subtree_data($forum_id, $order_asc, $include_item, $expected)
{
- $this->assertEquals($expected, array_keys($this->set->get_path_and_subtree_data($forum_id, $order_desc, $include_item)));
+ $this->assertEquals($expected, array_keys($this->set->get_path_and_subtree_data($forum_id, $order_asc, $include_item)));
}
public function get_path_data_data()
@@ -62,9 +62,9 @@ class phpbb_tests_tree_nestedset_forum_get_data_test extends phpbb_tests_tree_ne
/**
* @dataProvider get_path_data_data
*/
- public function test_get_path_data($forum_id, $order_desc, $include_item, $expected)
+ public function test_get_path_data($forum_id, $order_asc, $include_item, $expected)
{
- $this->assertEquals($expected, array_keys($this->set->get_path_data($forum_id, $order_desc, $include_item)));
+ $this->assertEquals($expected, array_keys($this->set->get_path_data($forum_id, $order_asc, $include_item)));
}
public function get_subtree_data_data()
@@ -90,9 +90,9 @@ class phpbb_tests_tree_nestedset_forum_get_data_test extends phpbb_tests_tree_ne
/**
* @dataProvider get_subtree_data_data
*/
- public function test_get_subtree_data($forum_id, $order_desc, $include_item, $expected)
+ public function test_get_subtree_data($forum_id, $order_asc, $include_item, $expected)
{
- $this->assertEquals($expected, array_keys($this->set->get_subtree_data($forum_id, $order_desc, $include_item)));
+ $this->assertEquals($expected, array_keys($this->set->get_subtree_data($forum_id, $order_asc, $include_item)));
}
public function get_path_basic_data_data()
From 87e8e60d3c09c96a4495dda748673fb8b9078a3e Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 30 Apr 2013 14:12:45 +0200
Subject: [PATCH 298/704] [ticket/11495] Correctly distinguish between children
and descendants
PHPBB3-11495
---
phpBB/includes/tree/interface.php | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/phpBB/includes/tree/interface.php b/phpBB/includes/tree/interface.php
index e09fcea4fa..5e43478e22 100644
--- a/phpBB/includes/tree/interface.php
+++ b/phpBB/includes/tree/interface.php
@@ -65,9 +65,9 @@ interface phpbb_tree_interface
public function move_up($item_id);
/**
- * Moves all descendants of one item to another item
+ * Moves all children of one item to another item
*
- * If the new parent already has descendants, the new descendants are appended
+ * If the new parent already has children, the new children are appended
* to the list.
*
* @param int $current_parent_id The current parent item
@@ -79,7 +79,7 @@ interface phpbb_tree_interface
/**
* Change parent item
*
- * Moves the item to the bottom of the new parent's subtree
+ * Moves the item to the bottom of the new parent's list of children
*
* @param int $item_id The item to be moved
* @param int $new_parent_id The new parent item
@@ -88,7 +88,7 @@ interface phpbb_tree_interface
public function change_parent($item_id, $new_parent_id);
/**
- * Get all items that are either an ancestors or descendants of the item
+ * Get all items that are either ancestors or descendants of the item
*
* @param int $item_id The item to get the ancestors/descendants from
* @param bool $order_asc Order the items ascending (most outer ancestor first)
From 863d0c7687cc926dfda0ddd20b34e7942748fb2e Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 30 Apr 2013 14:36:26 +0200
Subject: [PATCH 299/704] [ticket/11495] Fix some more comments and the package
tag
PHPBB3-11495
---
phpBB/includes/tree/interface.php | 2 +-
phpBB/includes/tree/nestedset.php | 8 ++++----
phpBB/includes/tree/nestedset_forum.php | 2 +-
tests/tree/nestedset_forum_base.php | 2 +-
tests/tree/nestedset_forum_get_data_test.php | 2 +-
tests/tree/nestedset_forum_insert_delete_test.php | 2 +-
tests/tree/nestedset_forum_move_test.php | 2 +-
tests/tree/nestedset_forum_regenerate_test.php | 2 +-
tests/tree/nestedset_forum_test.php | 2 +-
9 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/phpBB/includes/tree/interface.php b/phpBB/includes/tree/interface.php
index 5e43478e22..9bd633a5eb 100644
--- a/phpBB/includes/tree/interface.php
+++ b/phpBB/includes/tree/interface.php
@@ -99,7 +99,7 @@ interface phpbb_tree_interface
public function get_path_and_subtree_data($item_id, $order_asc, $include_item);
/**
- * Get all ancestors items of the item
+ * Get all ancestors of the item
*
* @param int $item_id The item id to get the ancestors from
* @param bool $order_asc Order the items ascending (most outer ancestor first)
diff --git a/phpBB/includes/tree/nestedset.php b/phpBB/includes/tree/nestedset.php
index 7710895a25..ae9805aa45 100644
--- a/phpBB/includes/tree/nestedset.php
+++ b/phpBB/includes/tree/nestedset.php
@@ -1,7 +1,7 @@
Date: Tue, 30 Apr 2013 14:45:22 +0200
Subject: [PATCH 300/704] [ticket/11495] Fix docs of add_item_to_nestedset()
and take id as argument
PHPBB3-11495
---
phpBB/includes/tree/nestedset.php | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/phpBB/includes/tree/nestedset.php b/phpBB/includes/tree/nestedset.php
index ae9805aa45..934eb933e0 100644
--- a/phpBB/includes/tree/nestedset.php
+++ b/phpBB/includes/tree/nestedset.php
@@ -111,16 +111,17 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
$item_data[$this->column_item_id] = (int) $this->db->sql_nextid();
- return array_merge($item_data, $this->add_item_to_nestedset($item_data));
+ return array_merge($item_data, $this->add_item_to_nestedset($item_data[$this->column_item_id]));
}
/**
* Add an item which already has a database row at the end of the tree
*
- * @param array $item The item to be added
- * @return bool True if the item was added
+ * @param int $item_id The item to be added
+ * @return array Array with updated data, if the item was added successfully
+ * Empty array otherwise
*/
- protected function add_item_to_nestedset(array $item)
+ protected function add_item_to_nestedset($item_id)
{
$sql = 'SELECT MAX(' . $this->column_right_id . ') AS ' . $this->column_right_id . '
FROM ' . $this->table_name . '
@@ -138,10 +139,13 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
$sql = 'UPDATE ' . $this->table_name . '
SET ' . $this->db->sql_build_array('UPDATE', $update_item_data) . '
- WHERE ' . $this->column_item_id . ' = ' . (int) $item[$this->column_item_id];
+ WHERE ' . $this->column_item_id . ' = ' . (int) $item_id . '
+ AND ' . $this->column_parent_id . ' = 0
+ AND ' . $this->column_left_id . ' = 0
+ AND ' . $this->column_right_id . ' = 0';
$this->db->sql_query($sql);
- return $update_item_data;
+ return ($this->db->sql_affectedrows() == 1) ? $update_item_data : array();
}
/**
From 529e4c00fbb78ba513afbbacfb3d5465efbd82ef Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 30 Apr 2013 15:07:56 +0200
Subject: [PATCH 301/704] [ticket/11495] Move lock code into two methods to
allow easier handling
This also allows to simply remove the lock handling by overwriting the two
methods acquire_lock() and release_lock().
PHPBB3-11495
---
phpBB/includes/tree/nestedset.php | 113 +++++++++++++++++++-----------
1 file changed, 72 insertions(+), 41 deletions(-)
diff --git a/phpBB/includes/tree/nestedset.php b/phpBB/includes/tree/nestedset.php
index 934eb933e0..85e04cd1cf 100644
--- a/phpBB/includes/tree/nestedset.php
+++ b/phpBB/includes/tree/nestedset.php
@@ -55,6 +55,12 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
*/
protected $item_basic_data = array('*');
+ /**
+ * Does the class currently have a lock on the item table?
+ * @var bool
+ */
+ protected $lock_acquired = false;
+
/**
* Construct
*
@@ -99,6 +105,46 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
return (!$this->sql_where) ? '' : $operator . ' ' . sprintf($this->sql_where, $column_prefix);
}
+ /**
+ * Acquires a lock on the item table
+ *
+ * @return bool True if the lock was acquired, false if it has been acquired previously
+ *
+ * @throws RuntimeException If the lock could not be acquired
+ */
+ protected function acquire_lock()
+ {
+ if ($this->lock_acquired)
+ {
+ return false;
+ }
+
+ if (!$this->lock->acquire())
+ {
+ throw new RuntimeException($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
+ }
+
+ $this->lock_acquired = true;
+ return true;
+ }
+
+ /**
+ * Releases the lock on the item table
+ *
+ * @return bool False, if there was no lock to release, true otherwise
+ */
+ protected function release_lock()
+ {
+ if (!$this->lock_acquired)
+ {
+ return false;
+ }
+
+ $this->lock->release();
+ $this->lock_acquired = false;
+ return true;
+ }
+
/**
* @inheritdoc
*/
@@ -191,10 +237,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
return false;
}
- if (!$this->lock->acquire())
- {
- throw new RuntimeException($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
- }
+ $this->acquire_lock();
$action = ($delta > 0) ? 'move_up' : 'move_down';
$delta = abs($delta);
@@ -210,7 +253,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
if (!$item)
{
- $this->lock->release();
+ $this->release_lock();
throw new OutOfBoundsException($this->message_prefix . 'INVALID_ITEM');
}
@@ -246,7 +289,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
if (!$target)
{
- $this->lock->release();
+ $this->release_lock();
// The item is already on top or bottom
return false;
}
@@ -298,7 +341,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
" . $this->get_sql_where();
$this->db->sql_query($sql);
- $this->lock->release();
+ $this->release_lock();
return true;
}
@@ -337,15 +380,12 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
throw new OutOfBoundsException($this->message_prefix . 'INVALID_ITEM');
}
- if (!$this->lock->acquire())
- {
- throw new RuntimeException($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
- }
+ $this->acquire_lock();
$item_data = $this->get_subtree_data($current_parent_id);
if (!isset($item_data[$current_parent_id]))
{
- $this->lock->release();
+ $this->release_lock();
throw new OutOfBoundsException($this->message_prefix . 'INVALID_ITEM');
}
@@ -355,13 +395,13 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
if (($current_parent[$this->column_right_id] - $current_parent[$this->column_left_id]) <= 1)
{
- $this->lock->release();
+ $this->release_lock();
return false;
}
if (in_array($new_parent_id, $move_items))
{
- $this->lock->release();
+ $this->release_lock();
throw new OutOfBoundsException($this->message_prefix . 'INVALID_PARENT');
}
@@ -385,7 +425,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
if (!$new_parent)
{
$this->db->sql_transaction('rollback');
- $this->lock->release();
+ $this->release_lock();
throw new OutOfBoundsException($this->message_prefix . 'INVALID_PARENT');
}
@@ -423,7 +463,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
$this->db->sql_query($sql);
$this->db->sql_transaction('commit');
- $this->lock->release();
+ $this->release_lock();
return true;
}
@@ -446,15 +486,12 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
throw new OutOfBoundsException($this->message_prefix . 'INVALID_ITEM');
}
- if (!$this->lock->acquire())
- {
- throw new RuntimeException($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
- }
+ $this->acquire_lock();
$item_data = $this->get_subtree_data($item_id);
if (!isset($item_data[$item_id]))
{
- $this->lock->release();
+ $this->release_lock();
throw new OutOfBoundsException($this->message_prefix . 'INVALID_ITEM');
}
@@ -463,7 +500,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
if (in_array($new_parent_id, $move_items))
{
- $this->lock->release();
+ $this->release_lock();
throw new OutOfBoundsException($this->message_prefix . 'INVALID_PARENT');
}
@@ -487,7 +524,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
if (!$new_parent)
{
$this->db->sql_transaction('rollback');
- $this->lock->release();
+ $this->release_lock();
throw new OutOfBoundsException($this->message_prefix . 'INVALID_PARENT');
}
@@ -525,7 +562,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
$this->db->sql_query($sql);
$this->db->sql_transaction('commit');
- $this->lock->release();
+ $this->release_lock();
return true;
}
@@ -653,15 +690,11 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
* @param bool $set_subset_zero Should the parent, left and right id of the items be set to 0, or kept unchanged?
* In case of removing an item from the tree, we should the values to 0
* In case of moving an item, we shouldkeep the original values, in order to allow "+ diff" later
- * @param bool $table_already_locked Is the table already locked, or should we acquire a new lock?
* @return null
*/
- protected function remove_subset(array $subset_items, array $bounding_item, $set_subset_zero = true, $table_already_locked = false)
+ protected function remove_subset(array $subset_items, array $bounding_item, $set_subset_zero = true)
{
- if (!$table_already_locked && !$this->lock->acquire())
- {
- throw new RuntimeException($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
- }
+ $acquired_new_lock = $this->acquire_lock();
$diff = sizeof($subset_items) * 2;
$sql_subset_items = $this->db->sql_in_set($this->column_item_id, $subset_items);
@@ -689,9 +722,9 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
" . ((!$set_subset_zero) ? ' WHERE ' . $sql_not_subset_items . ' ' . $this->get_sql_where('AND') : $this->get_sql_where('WHERE'));
$this->db->sql_query($sql);
- if (!$table_already_locked)
+ if ($acquired_new_lock)
{
- $this->lock->release();
+ $this->release_lock();
}
}
@@ -763,14 +796,13 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
*/
public function regenerate_left_right_ids($new_id, $parent_id = 0, $reset_ids = false)
{
+ if ($acquired_new_lock = $this->acquire_lock())
+ {
+ $this->db->sql_transaction('begin');
+ }
+
if ($reset_ids)
{
- if (!$this->lock->acquire())
- {
- throw new RuntimeException($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
- }
- $this->db->sql_transaction('begin');
-
$sql = 'UPDATE ' . $this->table_name . '
SET ' . $this->db->sql_build_array('UPDATE', array(
$this->column_left_id => 0,
@@ -817,11 +849,10 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
}
$this->db->sql_freeresult($result);
-
- if ($reset_ids)
+ if ($acquired_new_lock)
{
$this->db->sql_transaction('commit');
- $this->lock->release();
+ $this->release_lock();
}
return $new_id;
From 055ee41065fb0b7c08c66daff196eb2d3460b0cc Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 30 Apr 2013 15:16:41 +0200
Subject: [PATCH 302/704] [ticket/11495] Remove useless cast
PHPBB3-11495
---
phpBB/includes/tree/nestedset.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/includes/tree/nestedset.php b/phpBB/includes/tree/nestedset.php
index 85e04cd1cf..6819f9791b 100644
--- a/phpBB/includes/tree/nestedset.php
+++ b/phpBB/includes/tree/nestedset.php
@@ -648,7 +648,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
public function get_path_basic_data(array $item)
{
$parents = array();
- if ((int) $item[$this->column_parent_id])
+ if ($item[$this->column_parent_id])
{
if (!$item[$this->column_item_parents])
{
From 714092ab4e52dc039536a05846b50f4d4d488799 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 30 Apr 2013 15:48:29 +0200
Subject: [PATCH 303/704] [ticket/11495] Add owns_lock() method to lock classes
PHPBB3-11495
---
phpBB/includes/lock/db.php | 11 +++++++++++
phpBB/includes/lock/flock.php | 11 +++++++++++
tests/lock/db_test.php | 14 ++++++++++++++
tests/lock/flock_test.php | 11 +++++++++++
4 files changed, 47 insertions(+)
diff --git a/phpBB/includes/lock/db.php b/phpBB/includes/lock/db.php
index ccdaed0b28..5cc0821aa0 100644
--- a/phpBB/includes/lock/db.php
+++ b/phpBB/includes/lock/db.php
@@ -116,6 +116,17 @@ class phpbb_lock_db
return $this->locked;
}
+ /**
+ * Does this process own the lock?
+ *
+ * @return bool true if lock is owned
+ * false otherwise
+ */
+ public function owns_lock()
+ {
+ return (bool) $this->locked;
+ }
+
/**
* Releases the lock.
*
diff --git a/phpBB/includes/lock/flock.php b/phpBB/includes/lock/flock.php
index 97bc7dd2b9..17de0847c0 100644
--- a/phpBB/includes/lock/flock.php
+++ b/phpBB/includes/lock/flock.php
@@ -110,6 +110,17 @@ class phpbb_lock_flock
return (bool) $this->lock_fp;
}
+ /**
+ * Does this process own the lock?
+ *
+ * @return bool true if lock is owned
+ * false otherwise
+ */
+ public function owns_lock()
+ {
+ return (bool) $this->lock_fp;
+ }
+
/**
* Releases the lock.
*
diff --git a/tests/lock/db_test.php b/tests/lock/db_test.php
index f7b1557a0c..de7a23fd05 100644
--- a/tests/lock/db_test.php
+++ b/tests/lock/db_test.php
@@ -32,13 +32,18 @@ class phpbb_lock_db_test extends phpbb_database_test_case
public function test_new_lock()
{
+ $this->assertFalse($this->lock->owns_lock());
+
$this->assertTrue($this->lock->acquire());
+ $this->assertTrue($this->lock->owns_lock());
$this->assertTrue(isset($this->config['test_lock']), 'Lock was created');
$lock2 = new phpbb_lock_db('test_lock', $this->config, $this->db);
$this->assertFalse($lock2->acquire());
+ $this->assertFalse($lock2->owns_lock());
$this->lock->release();
+ $this->assertFalse($this->lock->owns_lock());
$this->assertEquals('0', $this->config['test_lock'], 'Lock was released');
}
@@ -50,31 +55,40 @@ class phpbb_lock_db_test extends phpbb_database_test_case
public function test_double_lock()
{
+ $this->assertFalse($this->lock->owns_lock());
+
$this->assertTrue($this->lock->acquire());
+ $this->assertTrue($this->lock->owns_lock());
$this->assertTrue(isset($this->config['test_lock']), 'Lock was created');
$value = $this->config['test_lock'];
$this->assertFalse($this->lock->acquire());
+ $this->assertTrue($this->lock->owns_lock());
$this->assertEquals($value, $this->config['test_lock'], 'Second lock failed');
$this->lock->release();
+ $this->assertFalse($this->lock->owns_lock());
$this->assertEquals('0', $this->config['test_lock'], 'Lock was released');
}
public function test_double_unlock()
{
$this->assertTrue($this->lock->acquire());
+ $this->assertTrue($this->lock->owns_lock());
$this->assertFalse(empty($this->config['test_lock']), 'First lock is acquired');
$this->lock->release();
+ $this->assertFalse($this->lock->owns_lock());
$this->assertEquals('0', $this->config['test_lock'], 'First lock is released');
$lock2 = new phpbb_lock_db('test_lock', $this->config, $this->db);
$this->assertTrue($lock2->acquire());
+ $this->assertTrue($lock2->owns_lock());
$this->assertFalse(empty($this->config['test_lock']), 'Second lock is acquired');
$this->lock->release();
+ $this->assertTrue($lock2->owns_lock());
$this->assertFalse(empty($this->config['test_lock']), 'Double release of first lock is ignored');
$lock2->release();
diff --git a/tests/lock/flock_test.php b/tests/lock/flock_test.php
index 1edc96b3a4..8f0b866ab3 100644
--- a/tests/lock/flock_test.php
+++ b/tests/lock/flock_test.php
@@ -26,15 +26,21 @@ class phpbb_lock_flock_test extends phpbb_test_case
$lock = new phpbb_lock_flock($path);
$ok = $lock->acquire();
$this->assertTrue($ok);
+ $this->assertTrue($lock->owns_lock());
$lock->release();
+ $this->assertFalse($lock->owns_lock());
$ok = $lock->acquire();
$this->assertTrue($ok);
+ $this->assertTrue($lock->owns_lock());
$lock->release();
+ $this->assertFalse($lock->owns_lock());
$ok = $lock->acquire();
$this->assertTrue($ok);
+ $this->assertTrue($lock->owns_lock());
$lock->release();
+ $this->assertFalse($lock->owns_lock());
}
/* This hangs the process.
@@ -77,15 +83,18 @@ class phpbb_lock_flock_test extends phpbb_test_case
$ok = $lock->acquire();
$delta = time() - $start;
$this->assertTrue($ok);
+ $this->assertTrue($lock->owns_lock());
$this->assertGreaterThan(0.5, $delta, 'First lock acquired too soon');
$lock->release();
+ $this->assertFalse($lock->owns_lock());
// acquire again, this should be instantaneous
$start = time();
$ok = $lock->acquire();
$delta = time() - $start;
$this->assertTrue($ok);
+ $this->assertTrue($lock->owns_lock());
$this->assertLessThan(0.1, $delta, 'Second lock not acquired instantaneously');
// reap the child
@@ -99,8 +108,10 @@ class phpbb_lock_flock_test extends phpbb_test_case
$lock = new phpbb_lock_flock($path);
$ok = $lock->acquire();
$this->assertTrue($ok);
+ $this->assertTrue($lock->owns_lock());
sleep(2);
$lock->release();
+ $this->assertFalse($lock->owns_lock());
// and go away silently
pcntl_exec('/usr/bin/env', array('true'));
From 78b0d3e723ab57c2e32b95a66159861fe461d77f Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 30 Apr 2013 15:50:14 +0200
Subject: [PATCH 304/704] [ticket/11495] Use $lock->owns_lock() instead of own
property
PHPBB3-11495
---
phpBB/includes/tree/nestedset.php | 18 ++----------------
1 file changed, 2 insertions(+), 16 deletions(-)
diff --git a/phpBB/includes/tree/nestedset.php b/phpBB/includes/tree/nestedset.php
index 6819f9791b..26152e6c10 100644
--- a/phpBB/includes/tree/nestedset.php
+++ b/phpBB/includes/tree/nestedset.php
@@ -55,12 +55,6 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
*/
protected $item_basic_data = array('*');
- /**
- * Does the class currently have a lock on the item table?
- * @var bool
- */
- protected $lock_acquired = false;
-
/**
* Construct
*
@@ -114,7 +108,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
*/
protected function acquire_lock()
{
- if ($this->lock_acquired)
+ if ($this->lock->owns_lock())
{
return false;
}
@@ -124,25 +118,17 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
throw new RuntimeException($this->message_prefix . 'LOCK_FAILED_ACQUIRE');
}
- $this->lock_acquired = true;
return true;
}
/**
* Releases the lock on the item table
*
- * @return bool False, if there was no lock to release, true otherwise
+ * @return null
*/
protected function release_lock()
{
- if (!$this->lock_acquired)
- {
- return false;
- }
-
$this->lock->release();
- $this->lock_acquired = false;
- return true;
}
/**
From 6055a3cc7ed76cfe458ea524bfad66f475f35ce8 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 30 Apr 2013 16:19:25 +0200
Subject: [PATCH 305/704] [ticket/11495] Remove useless release_lock() method
PHPBB3-11495
---
phpBB/includes/tree/nestedset.php | 38 ++++++++++++-------------------
1 file changed, 14 insertions(+), 24 deletions(-)
diff --git a/phpBB/includes/tree/nestedset.php b/phpBB/includes/tree/nestedset.php
index 26152e6c10..f92606a4c4 100644
--- a/phpBB/includes/tree/nestedset.php
+++ b/phpBB/includes/tree/nestedset.php
@@ -121,16 +121,6 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
return true;
}
- /**
- * Releases the lock on the item table
- *
- * @return null
- */
- protected function release_lock()
- {
- $this->lock->release();
- }
-
/**
* @inheritdoc
*/
@@ -239,7 +229,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
if (!$item)
{
- $this->release_lock();
+ $this->lock->release();
throw new OutOfBoundsException($this->message_prefix . 'INVALID_ITEM');
}
@@ -275,7 +265,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
if (!$target)
{
- $this->release_lock();
+ $this->lock->release();
// The item is already on top or bottom
return false;
}
@@ -327,7 +317,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
" . $this->get_sql_where();
$this->db->sql_query($sql);
- $this->release_lock();
+ $this->lock->release();
return true;
}
@@ -371,7 +361,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
$item_data = $this->get_subtree_data($current_parent_id);
if (!isset($item_data[$current_parent_id]))
{
- $this->release_lock();
+ $this->lock->release();
throw new OutOfBoundsException($this->message_prefix . 'INVALID_ITEM');
}
@@ -381,13 +371,13 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
if (($current_parent[$this->column_right_id] - $current_parent[$this->column_left_id]) <= 1)
{
- $this->release_lock();
+ $this->lock->release();
return false;
}
if (in_array($new_parent_id, $move_items))
{
- $this->release_lock();
+ $this->lock->release();
throw new OutOfBoundsException($this->message_prefix . 'INVALID_PARENT');
}
@@ -411,7 +401,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
if (!$new_parent)
{
$this->db->sql_transaction('rollback');
- $this->release_lock();
+ $this->lock->release();
throw new OutOfBoundsException($this->message_prefix . 'INVALID_PARENT');
}
@@ -449,7 +439,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
$this->db->sql_query($sql);
$this->db->sql_transaction('commit');
- $this->release_lock();
+ $this->lock->release();
return true;
}
@@ -477,7 +467,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
$item_data = $this->get_subtree_data($item_id);
if (!isset($item_data[$item_id]))
{
- $this->release_lock();
+ $this->lock->release();
throw new OutOfBoundsException($this->message_prefix . 'INVALID_ITEM');
}
@@ -486,7 +476,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
if (in_array($new_parent_id, $move_items))
{
- $this->release_lock();
+ $this->lock->release();
throw new OutOfBoundsException($this->message_prefix . 'INVALID_PARENT');
}
@@ -510,7 +500,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
if (!$new_parent)
{
$this->db->sql_transaction('rollback');
- $this->release_lock();
+ $this->lock->release();
throw new OutOfBoundsException($this->message_prefix . 'INVALID_PARENT');
}
@@ -548,7 +538,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
$this->db->sql_query($sql);
$this->db->sql_transaction('commit');
- $this->release_lock();
+ $this->lock->release();
return true;
}
@@ -710,7 +700,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
if ($acquired_new_lock)
{
- $this->release_lock();
+ $this->lock->release();
}
}
@@ -838,7 +828,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
if ($acquired_new_lock)
{
$this->db->sql_transaction('commit');
- $this->release_lock();
+ $this->lock->release();
}
return $new_id;
From f3f7be4cd1a0495cf44787c713480d5aceb1bae1 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 30 Apr 2013 17:11:55 +0200
Subject: [PATCH 306/704] [ticket/11495] Fix @return doc of get_sql_where()
PHPBB3-11495
---
phpBB/includes/tree/nestedset.php | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/phpBB/includes/tree/nestedset.php b/phpBB/includes/tree/nestedset.php
index f92606a4c4..5a12afdfe9 100644
--- a/phpBB/includes/tree/nestedset.php
+++ b/phpBB/includes/tree/nestedset.php
@@ -92,7 +92,8 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
* @param string $operator SQL operator that needs to be prepended to sql_where,
* if it is not empty.
* @param string $column_prefix Prefix that needs to be prepended to column names
- * @return bool True if the item was deleted
+ * @return string Returns additional where statements to narrow down the tree,
+ * prefixed with operator and prepended column_prefix to column names
*/
public function get_sql_where($operator = 'AND', $column_prefix = '')
{
From 39ff3ed15fc77215153a47a870e8cde5436674ae Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 30 Apr 2013 18:05:44 +0200
Subject: [PATCH 307/704] [ticket/11495] Add proper testing of item_parent to
tests
PHPBB3-11495
---
tests/tree/nestedset_forum_base.php | 30 +-
tests/tree/nestedset_forum_get_data_test.php | 18 +-
.../nestedset_forum_insert_delete_test.php | 58 +-
tests/tree/nestedset_forum_move_test.php | 514 +++++++++---------
tests/tree/nestedset_forum_test.php | 78 +--
5 files changed, 352 insertions(+), 346 deletions(-)
diff --git a/tests/tree/nestedset_forum_base.php b/tests/tree/nestedset_forum_base.php
index 2b617fcc53..b9d42fb51d 100644
--- a/tests/tree/nestedset_forum_base.php
+++ b/tests/tree/nestedset_forum_base.php
@@ -16,27 +16,27 @@ class phpbb_tests_tree_nestedset_forum_base extends phpbb_database_test_case
protected $forum_data = array(
// \__/
- 1 => array('forum_id' => 1, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- 2 => array('forum_id' => 2, 'parent_id' => 1, 'user_id' => 0, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- 3 => array('forum_id' => 3, 'parent_id' => 1, 'user_id' => 0, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ 1 => array('forum_id' => 1, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ 2 => array('forum_id' => 2, 'parent_id' => 1, 'user_id' => 0, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ 3 => array('forum_id' => 3, 'parent_id' => 1, 'user_id' => 0, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
// \ /
// \/
- 4 => array('forum_id' => 4, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
- 5 => array('forum_id' => 5, 'parent_id' => 4, 'user_id' => 0, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
- 6 => array('forum_id' => 6, 'parent_id' => 5, 'user_id' => 0, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+ 4 => array('forum_id' => 4, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
+ 5 => array('forum_id' => 5, 'parent_id' => 4, 'user_id' => 0, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
+ 6 => array('forum_id' => 6, 'parent_id' => 5, 'user_id' => 0, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
// \_ _/
// \/
- 7 => array('forum_id' => 7, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- 8 => array('forum_id' => 8, 'parent_id' => 7, 'user_id' => 0, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- 9 => array('forum_id' => 9, 'parent_id' => 7, 'user_id' => 0, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- 10 => array('forum_id' => 10, 'parent_id' => 9, 'user_id' => 0, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- 11 => array('forum_id' => 11, 'parent_id' => 7, 'user_id' => 0, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ 7 => array('forum_id' => 7, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ 8 => array('forum_id' => 8, 'parent_id' => 7, 'user_id' => 0, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ 9 => array('forum_id' => 9, 'parent_id' => 7, 'user_id' => 0, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
+ 10 => array('forum_id' => 10, 'parent_id' => 9, 'user_id' => 0, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ 11 => array('forum_id' => 11, 'parent_id' => 7, 'user_id' => 0, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
// Unexisting forums
- 0 => array('forum_id' => 0, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 0, 'right_id' => 0, 'forum_parents' => ''),
- 200 => array('forum_id' => 200, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 0, 'right_id' => 0, 'forum_parents' => ''),
+ 0 => array('forum_id' => 0, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 0, 'right_id' => 0, 'forum_parents' => 'a:0:{}'),
+ 200 => array('forum_id' => 200, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 0, 'right_id' => 0, 'forum_parents' => 'a:0:{}'),
);
protected $set,
@@ -59,6 +59,10 @@ class phpbb_tests_tree_nestedset_forum_base extends phpbb_database_test_case
$this->set = new phpbb_tree_nestedset_forum($this->db, $this->lock, 'phpbb_forums');
$this->set_up_forums();
+
+ $sql = "UPDATE phpbb_forums
+ SET forum_parents = 'a:0:{}'";
+ $this->db->sql_query($sql);
}
protected function set_up_forums()
diff --git a/tests/tree/nestedset_forum_get_data_test.php b/tests/tree/nestedset_forum_get_data_test.php
index 76c99650aa..ca1863e55e 100644
--- a/tests/tree/nestedset_forum_get_data_test.php
+++ b/tests/tree/nestedset_forum_get_data_test.php
@@ -98,20 +98,22 @@ class phpbb_tests_tree_nestedset_forum_get_data_test extends phpbb_tests_tree_ne
public function get_path_basic_data_data()
{
return array(
- array(1, array(), array()),
- array(1, array('forum_parents' => serialize(array())), array()),
- array(2, array(), array(1)),
- array(2, array('forum_parents' => serialize(array(1 => array()))), array(1)),
- array(10, array(), array(7, 9)),
- array(10, array('forum_parents' => serialize(array(7 => array(), 9 => array()))), array(7, 9)),
+ array(1, '', array()),
+ array(1, serialize(array()), array()),
+ array(2, '', array(1)),
+ array(2, serialize(array(1 => array())), array(1)),
+ array(10, '', array(7, 9)),
+ array(10, serialize(array(7 => array(), 9 => array())), array(7, 9)),
);
}
/**
* @dataProvider get_path_basic_data_data
*/
- public function test_get_path_basic_data($forum_id, $forum_data, $expected)
+ public function test_get_path_basic_data($forum_id, $forum_parents, $expected)
{
- $this->assertEquals($expected, array_keys($this->set->get_path_basic_data(array_merge($this->forum_data[$forum_id], $forum_data))));
+ $forum_data = $this->forum_data[$forum_id];
+ $forum_data['forum_parents'] = $forum_parents;
+ $this->assertEquals($expected, array_keys($this->set->get_path_basic_data($forum_data)));
}
}
diff --git a/tests/tree/nestedset_forum_insert_delete_test.php b/tests/tree/nestedset_forum_insert_delete_test.php
index d11180ca78..34aac19270 100644
--- a/tests/tree/nestedset_forum_insert_delete_test.php
+++ b/tests/tree/nestedset_forum_insert_delete_test.php
@@ -15,26 +15,26 @@ class phpbb_tests_tree_nestedset_forum_add_remove_test extends phpbb_tests_tree_
{
return array(
array(1, array(1, 2, 3), array(
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => ''),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 16, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 13, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
)),
array(2, array(2), array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 4, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 5, 'right_id' => 10, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 6, 'right_id' => 9, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 4, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 5, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 6, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
)),
);
}
@@ -64,19 +64,19 @@ class phpbb_tests_tree_nestedset_forum_add_remove_test extends phpbb_tests_tree_
'right_id' => 24,
'forum_parents' => '',
), array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
array('forum_id' => 12, 'parent_id' => 0, 'left_id' => 23, 'right_id' => 24, 'forum_parents' => ''),
)),
diff --git a/tests/tree/nestedset_forum_move_test.php b/tests/tree/nestedset_forum_move_test.php
index 2407a43ab6..0901082926 100644
--- a/tests/tree/nestedset_forum_move_test.php
+++ b/tests/tree/nestedset_forum_move_test.php
@@ -16,101 +16,101 @@ class phpbb_tests_tree_nestedset_forum_move_test extends phpbb_tests_tree_nested
return array(
array('Move first item up',
1, 1, false, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
)),
array('Move last item down',
7, -1, false, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
)),
array('Move first item down',
1, -1, true, array(
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => ''),
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => ''),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
)),
array('Move second item up',
4, 1, true, array(
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => ''),
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => ''),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
)),
array('Move last item up',
7, 1, true, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 16, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 13, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => 'a:0:{}'),
)),
array('Move last item up by 2',
7, 2, true, array(
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 4, 'right_id' => 7, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 5, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 16, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 4, 'right_id' => 7, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 5, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => 'a:0:{}'),
)),
array('Move last item up by 100',
7, 100, true, array(
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 4, 'right_id' => 7, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 5, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 16, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 4, 'right_id' => 7, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 5, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => 'a:0:{}'),
)),
);
}
@@ -133,31 +133,31 @@ class phpbb_tests_tree_nestedset_forum_move_test extends phpbb_tests_tree_nested
return array(
array('Move last item down',
7, false, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
)),
array('Move first item down',
1, true, array(
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => ''),
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => ''),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
)),
);
}
@@ -180,31 +180,31 @@ class phpbb_tests_tree_nestedset_forum_move_test extends phpbb_tests_tree_nested
return array(
array('Move first item up',
1, false, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
)),
array('Move second item up',
4, true, array(
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => ''),
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => ''),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
)),
);
}
@@ -227,131 +227,131 @@ class phpbb_tests_tree_nestedset_forum_move_test extends phpbb_tests_tree_nested
return array(
array('Item has no children',
2, 1, false, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
)),
array('Move to same parent',
4, 4, false, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
)),
array('Move single child up',
5, 1, true, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 8, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 8, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
array('forum_id' => 6, 'parent_id' => 1, 'left_id' => 6, 'right_id' => 7, 'forum_parents' => ''),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
)),
array('Move nested children up',
4, 1, true, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
array('forum_id' => 5, 'parent_id' => 1, 'left_id' => 6, 'right_id' => 9, 'forum_parents' => ''),
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
)),
array('Move single child down',
5, 7, true, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 10, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
array('forum_id' => 6, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
)),
array('Move nested children down',
4, 7, true, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 13, 'right_id' => 14, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 17, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 13, 'right_id' => 14, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
array('forum_id' => 5, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 21, 'forum_parents' => ''),
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => ''),
)),
array('Move single child to parent 0',
5, 0, true, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 10, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
array('forum_id' => 6, 'parent_id' => 0, 'left_id' => 21, 'right_id' => 22, 'forum_parents' => ''),
)),
array('Move nested children to parent 0',
4, 0, true, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 13, 'right_id' => 14, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 17, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 13, 'right_id' => 14, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
array('forum_id' => 5, 'parent_id' => 0, 'left_id' => 19, 'right_id' => 22, 'forum_parents' => ''),
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
@@ -416,98 +416,98 @@ class phpbb_tests_tree_nestedset_forum_move_test extends phpbb_tests_tree_nested
return array(
array('Move single child up',
6, 1, true, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 8, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 8, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
array('forum_id' => 6, 'parent_id' => 1, 'left_id' => 6, 'right_id' => 7, 'forum_parents' => ''),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
)),
array('Move nested children up',
5, 1, true, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
array('forum_id' => 5, 'parent_id' => 1, 'left_id' => 6, 'right_id' => 9, 'forum_parents' => ''),
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
)),
array('Move single child down',
6, 7, true, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 10, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
array('forum_id' => 6, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
)),
array('Move nested children down',
5, 7, true, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 13, 'right_id' => 14, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 17, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 13, 'right_id' => 14, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
array('forum_id' => 5, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 21, 'forum_parents' => ''),
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => ''),
)),
array('Move single child to parent 0',
6, 0, true, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 10, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
array('forum_id' => 6, 'parent_id' => 0, 'left_id' => 21, 'right_id' => 22, 'forum_parents' => ''),
)),
array('Move nested children to parent 0',
5, 0, true, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 13, 'right_id' => 14, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 17, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 13, 'right_id' => 14, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
array('forum_id' => 5, 'parent_id' => 0, 'left_id' => 19, 'right_id' => 22, 'forum_parents' => ''),
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
diff --git a/tests/tree/nestedset_forum_test.php b/tests/tree/nestedset_forum_test.php
index 4e335f9d35..631ec2c4bc 100644
--- a/tests/tree/nestedset_forum_test.php
+++ b/tests/tree/nestedset_forum_test.php
@@ -15,19 +15,19 @@ class pphpbb_tests_tree_nestedset_forum_test extends phpbb_tests_tree_nestedset_
{
return array(
array(array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
)),
);
}
@@ -51,56 +51,56 @@ class pphpbb_tests_tree_nestedset_forum_test extends phpbb_tests_tree_nestedset_
%s
ORDER BY left_id, forum_id ASC',
'WHERE', '', array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
)),
array('SELECT f.forum_id, f.parent_id, f.left_id, f.right_id, f.forum_parents
FROM phpbb_forums f
%s
ORDER BY f.left_id, f.forum_id ASC',
'WHERE', 'f.', array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
)),
array('SELECT forum_id, parent_id, left_id, right_id, forum_parents
FROM phpbb_forums
WHERE forum_id < 4 %s
ORDER BY left_id, forum_id ASC',
'AND', '', array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
)),
array('SELECT f.forum_id, f.parent_id, f.left_id, f.right_id, f.forum_parents
FROM phpbb_forums f
WHERE f.forum_id < 4 %s
ORDER BY f.left_id, f.forum_id ASC',
'AND', 'f.', array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
)),
);
}
From 5c4d69581afb9fd9b00d6b7b13cec257a97e875c Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 30 Apr 2013 18:06:29 +0200
Subject: [PATCH 308/704] [ticket/11495] Do not reset item_parent if not
required
PHPBB3-11495
---
phpBB/includes/tree/nestedset.php | 32 ++++++++++++++++---------------
1 file changed, 17 insertions(+), 15 deletions(-)
diff --git a/phpBB/includes/tree/nestedset.php b/phpBB/includes/tree/nestedset.php
index 5a12afdfe9..1f414164df 100644
--- a/phpBB/includes/tree/nestedset.php
+++ b/phpBB/includes/tree/nestedset.php
@@ -310,8 +310,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
" . $this->column_right_id . ' = ' . $this->column_right_id . ' + CASE
WHEN ' . $this->column_right_id . " BETWEEN {$move_up_left} AND {$move_up_right} THEN -{$diff_up}
ELSE {$diff_down}
- END,
- " . $this->column_item_parents . " = ''
+ END
WHERE
" . $this->column_left_id . " BETWEEN {$left_id} AND {$right_id}
AND " . $this->column_right_id . " BETWEEN {$left_id} AND {$right_id}
@@ -692,11 +691,10 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
}
$sql = 'UPDATE ' . $this->table_name . '
- SET ' . $this->column_left_id . ' = ' . $set_left_id . ',
- ' . $this->column_right_id . ' = ' . $set_right_id . ',
- ' . (($set_subset_zero) ? $this->column_parent_id . ' = ' . $this->db->sql_case($sql_subset_items, 0, $this->column_parent_id) . ',' : '') . '
- ' . $this->column_item_parents . " = ''
- " . ((!$set_subset_zero) ? ' WHERE ' . $sql_not_subset_items . ' ' . $this->get_sql_where('AND') : $this->get_sql_where('WHERE'));
+ SET ' . (($set_subset_zero) ? $this->column_parent_id . ' = ' . $this->db->sql_case($sql_subset_items, 0, $this->column_parent_id) . ',' : '') . '
+ ' . $this->column_left_id . ' = ' . $set_left_id . ',
+ ' . $this->column_right_id . ' = ' . $set_right_id . '
+ ' . ((!$set_subset_zero) ? ' WHERE ' . $sql_not_subset_items . ' ' . $this->get_sql_where('AND') : $this->get_sql_where('WHERE'));
$this->db->sql_query($sql);
if ($acquired_new_lock)
@@ -706,7 +704,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
}
/**
- * Add a subset to the nested set
+ * Prepare adding a subset to the nested set
*
* @param array $subset_items Subset of items to add
* @param array $new_parent Item containing the right bound of the new parent
@@ -722,9 +720,8 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
$sql = 'UPDATE ' . $this->table_name . '
SET ' . $this->column_left_id . ' = ' . $set_left_id . ',
- ' . $this->column_right_id . ' = ' . $set_right_id . ',
- ' . $this->column_item_parents . " = ''
- WHERE " . $sql_not_subset_items . '
+ ' . $this->column_right_id . ' = ' . $set_right_id . '
+ WHERE ' . $sql_not_subset_items . '
' . $this->get_sql_where('AND');
$this->db->sql_query($sql);
@@ -776,6 +773,14 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
if ($acquired_new_lock = $this->acquire_lock())
{
$this->db->sql_transaction('begin');
+
+ if (!$reset_ids)
+ {
+ $sql = 'UPDATE ' . $this->table_name . '
+ SET ' . $this->column_item_parents . " = ''
+ " . $this->get_sql_where('WHERE');
+ $this->db->sql_query($sql);
+ }
}
if ($reset_ids)
@@ -802,10 +807,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
if ($row[$this->column_left_id] != $new_id)
{
$sql = 'UPDATE ' . $this->table_name . '
- SET ' . $this->db->sql_build_array('UPDATE', array(
- $this->column_left_id => $new_id,
- $this->column_item_parents => '',
- )) . '
+ SET ' . $this->db->sql_build_array('UPDATE', array($this->column_left_id => $new_id)) . '
WHERE ' . $this->column_item_id . ' = ' . (int) $row[$this->column_item_id];
$this->db->sql_query($sql);
}
From fe02218a2d2f5634e22e494f7b85f9701fa57623 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 30 Apr 2013 18:11:24 +0200
Subject: [PATCH 309/704] [ticket/11495] Remove forum_parents from tests where
it is not required
PHPBB3-11495
---
.../nestedset_forum_insert_delete_test.php | 64 ++---
tests/tree/nestedset_forum_move_test.php | 248 +++++++++---------
tests/tree/nestedset_forum_test.php | 88 +++----
3 files changed, 200 insertions(+), 200 deletions(-)
diff --git a/tests/tree/nestedset_forum_insert_delete_test.php b/tests/tree/nestedset_forum_insert_delete_test.php
index 34aac19270..1f901c7422 100644
--- a/tests/tree/nestedset_forum_insert_delete_test.php
+++ b/tests/tree/nestedset_forum_insert_delete_test.php
@@ -15,26 +15,26 @@ class phpbb_tests_tree_nestedset_forum_add_remove_test extends phpbb_tests_tree_
{
return array(
array(1, array(1, 2, 3), array(
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 16),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 13),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 11, 'right_id' => 12),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
)),
array(2, array(2), array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 4, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 5, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 6, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 4),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 5, 'right_id' => 10),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 6, 'right_id' => 9),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 7, 'right_id' => 8),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19),
)),
);
}
@@ -46,7 +46,7 @@ class phpbb_tests_tree_nestedset_forum_add_remove_test extends phpbb_tests_tree_
{
$this->assertEquals($expected_deleted, $this->set->delete($forum_id));
- $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id
FROM phpbb_forums
ORDER BY left_id, forum_id ASC");
$this->assertEquals($expected, $this->db->sql_fetchrowset($result));
@@ -64,21 +64,21 @@ class phpbb_tests_tree_nestedset_forum_add_remove_test extends phpbb_tests_tree_
'right_id' => 24,
'forum_parents' => '',
), array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
- array('forum_id' => 12, 'parent_id' => 0, 'left_id' => 23, 'right_id' => 24, 'forum_parents' => ''),
+ array('forum_id' => 12, 'parent_id' => 0, 'left_id' => 23, 'right_id' => 24),
)),
);
}
@@ -93,7 +93,7 @@ class phpbb_tests_tree_nestedset_forum_add_remove_test extends phpbb_tests_tree_
'forum_rules' => '',
)));
- $result = $this->db->sql_query('SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ $result = $this->db->sql_query('SELECT forum_id, parent_id, left_id, right_id
FROM phpbb_forums
ORDER BY left_id, forum_id ASC');
$this->assertEquals($expected, $this->db->sql_fetchrowset($result));
diff --git a/tests/tree/nestedset_forum_move_test.php b/tests/tree/nestedset_forum_move_test.php
index 0901082926..fe506c8278 100644
--- a/tests/tree/nestedset_forum_move_test.php
+++ b/tests/tree/nestedset_forum_move_test.php
@@ -16,101 +16,101 @@ class phpbb_tests_tree_nestedset_forum_move_test extends phpbb_tests_tree_nested
return array(
array('Move first item up',
1, 1, false, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
)),
array('Move last item down',
7, -1, false, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
)),
array('Move first item down',
1, -1, true, array(
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
)),
array('Move second item up',
4, 1, true, array(
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
)),
array('Move last item up',
7, 1, true, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 16),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 13),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 11, 'right_id' => 12),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20),
)),
array('Move last item up by 2',
7, 2, true, array(
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 4, 'right_id' => 7, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 5, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 2, 'right_id' => 3),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 4, 'right_id' => 7),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 5, 'right_id' => 6),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 16),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 12, 'right_id' => 13),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 14, 'right_id' => 15),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20),
)),
array('Move last item up by 100',
7, 100, true, array(
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 4, 'right_id' => 7, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 5, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 2, 'right_id' => 3),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 4, 'right_id' => 7),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 5, 'right_id' => 6),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 16),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 12, 'right_id' => 13),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 14, 'right_id' => 15),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20),
)),
);
}
@@ -122,7 +122,7 @@ class phpbb_tests_tree_nestedset_forum_move_test extends phpbb_tests_tree_nested
{
$this->assertEquals($expected_moved, $this->set->move($forum_id, $delta));
- $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id
FROM phpbb_forums
ORDER BY left_id, forum_id ASC");
$this->assertEquals($expected, $this->db->sql_fetchrowset($result));
@@ -133,31 +133,31 @@ class phpbb_tests_tree_nestedset_forum_move_test extends phpbb_tests_tree_nested
return array(
array('Move last item down',
7, false, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
)),
array('Move first item down',
1, true, array(
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
)),
);
}
@@ -169,7 +169,7 @@ class phpbb_tests_tree_nestedset_forum_move_test extends phpbb_tests_tree_nested
{
$this->assertEquals($expected_moved, $this->set->move_down($forum_id));
- $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id
FROM phpbb_forums
ORDER BY left_id, forum_id ASC");
$this->assertEquals($expected, $this->db->sql_fetchrowset($result));
@@ -180,31 +180,31 @@ class phpbb_tests_tree_nestedset_forum_move_test extends phpbb_tests_tree_nested
return array(
array('Move first item up',
1, false, array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
)),
array('Move second item up',
4, true, array(
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
)),
);
}
@@ -216,7 +216,7 @@ class phpbb_tests_tree_nestedset_forum_move_test extends phpbb_tests_tree_nested
{
$this->assertEquals($expected_moved, $this->set->move_up($forum_id));
- $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id
FROM phpbb_forums
ORDER BY left_id, forum_id ASC");
$this->assertEquals($expected, $this->db->sql_fetchrowset($result));
diff --git a/tests/tree/nestedset_forum_test.php b/tests/tree/nestedset_forum_test.php
index 631ec2c4bc..28c6b048b0 100644
--- a/tests/tree/nestedset_forum_test.php
+++ b/tests/tree/nestedset_forum_test.php
@@ -15,19 +15,19 @@ class pphpbb_tests_tree_nestedset_forum_test extends phpbb_tests_tree_nestedset_
{
return array(
array(array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
)),
);
}
@@ -37,7 +37,7 @@ class pphpbb_tests_tree_nestedset_forum_test extends phpbb_tests_tree_nestedset_
*/
public function test_forum_constructor($expected)
{
- $result = $this->db->sql_query('SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ $result = $this->db->sql_query('SELECT forum_id, parent_id, left_id, right_id
FROM phpbb_forums
ORDER BY left_id, forum_id ASC');
$this->assertEquals($expected, $this->db->sql_fetchrowset($result));
@@ -46,61 +46,61 @@ class pphpbb_tests_tree_nestedset_forum_test extends phpbb_tests_tree_nestedset_
public function get_sql_where_data()
{
return array(
- array('SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ array('SELECT forum_id, parent_id, left_id, right_id
FROM phpbb_forums
%s
ORDER BY left_id, forum_id ASC',
'WHERE', '', array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
)),
- array('SELECT f.forum_id, f.parent_id, f.left_id, f.right_id, f.forum_parents
+ array('SELECT f.forum_id, f.parent_id, f.left_id, f.right_id
FROM phpbb_forums f
%s
ORDER BY f.left_id, f.forum_id ASC',
'WHERE', 'f.', array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
+ array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11),
+ array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
+ array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
+ array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
+ array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
+ array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
)),
- array('SELECT forum_id, parent_id, left_id, right_id, forum_parents
+ array('SELECT forum_id, parent_id, left_id, right_id
FROM phpbb_forums
WHERE forum_id < 4 %s
ORDER BY left_id, forum_id ASC',
'AND', '', array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
)),
- array('SELECT f.forum_id, f.parent_id, f.left_id, f.right_id, f.forum_parents
+ array('SELECT f.forum_id, f.parent_id, f.left_id, f.right_id
FROM phpbb_forums f
WHERE f.forum_id < 4 %s
ORDER BY f.left_id, f.forum_id ASC',
'AND', 'f.', array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
+ array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
+ array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
+ array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
)),
);
}
From 98e6207c35910bf9761433e62ca5fe5af3459873 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 30 Apr 2013 18:13:32 +0200
Subject: [PATCH 310/704] [ticket/11495] Fix "as well" typo and remove brackets
PHPBB3-11495
---
phpBB/includes/tree/interface.php | 6 +++---
phpBB/includes/tree/nestedset.php | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/phpBB/includes/tree/interface.php b/phpBB/includes/tree/interface.php
index 9bd633a5eb..546e00ed06 100644
--- a/phpBB/includes/tree/interface.php
+++ b/phpBB/includes/tree/interface.php
@@ -92,7 +92,7 @@ interface phpbb_tree_interface
*
* @param int $item_id The item to get the ancestors/descendants from
* @param bool $order_asc Order the items ascending (most outer ancestor first)
- * @param bool $include_item Should the item (matching the given item id) be included in the list aswell
+ * @param bool $include_item Should the item matching the given item id be included in the list as well
* @return array Array of items (containing all columns from the item table)
* ID => Item data
*/
@@ -103,7 +103,7 @@ interface phpbb_tree_interface
*
* @param int $item_id The item id to get the ancestors from
* @param bool $order_asc Order the items ascending (most outer ancestor first)
- * @param bool $include_item Should the item (matching the given item id) be included in the list aswell
+ * @param bool $include_item Should the item matching the given item id be included in the list as well
* @return array Array of items (containing all columns from the item table)
* ID => Item data
*/
@@ -114,7 +114,7 @@ interface phpbb_tree_interface
*
* @param int $item_id The item id to get the descendants from
* @param bool $order_asc Order the items ascending
- * @param bool $include_item Should the item (matching the given item id) be included in the list aswell
+ * @param bool $include_item Should the item matching the given item id be included in the list as well
* @return array Array of items (containing all columns from the item table)
* ID => Item data
*/
diff --git a/phpBB/includes/tree/nestedset.php b/phpBB/includes/tree/nestedset.php
index 1f414164df..2a639d8907 100644
--- a/phpBB/includes/tree/nestedset.php
+++ b/phpBB/includes/tree/nestedset.php
@@ -580,7 +580,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
* @param int $item_id The item id to get the node set from
* @param string $condition Query string restricting the item list
* @param bool $order_asc Order the items ascending by their left_id
- * @param bool $include_item Should the item (matching the given item id) be included in the list aswell
+ * @param bool $include_item Should the item matching the given item id be included in the list as well
* @return array Array of items (containing all columns from the item table)
* ID => Item data
*/
From 2f54a63b0fb998c84730e21a3af4150281c22cab Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 30 Apr 2013 18:24:54 +0200
Subject: [PATCH 311/704] [ticket/11495] Fix more grammar issues in doc blocks
PHPBB3-11495
---
phpBB/includes/tree/interface.php | 16 ++++++++--------
tests/tree/nestedset_forum_base.php | 2 +-
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/phpBB/includes/tree/interface.php b/phpBB/includes/tree/interface.php
index 546e00ed06..2eb40b066c 100644
--- a/phpBB/includes/tree/interface.php
+++ b/phpBB/includes/tree/interface.php
@@ -90,8 +90,8 @@ interface phpbb_tree_interface
/**
* Get all items that are either ancestors or descendants of the item
*
- * @param int $item_id The item to get the ancestors/descendants from
- * @param bool $order_asc Order the items ascending (most outer ancestor first)
+ * @param int $item_id The item id the ancestors/descendants should be retrieved from
+ * @param bool $order_asc Order the items ascendingly (most outer ancestor first)
* @param bool $include_item Should the item matching the given item id be included in the list as well
* @return array Array of items (containing all columns from the item table)
* ID => Item data
@@ -99,10 +99,10 @@ interface phpbb_tree_interface
public function get_path_and_subtree_data($item_id, $order_asc, $include_item);
/**
- * Get all ancestors of the item
+ * Get all of the item's ancestors
*
- * @param int $item_id The item id to get the ancestors from
- * @param bool $order_asc Order the items ascending (most outer ancestor first)
+ * @param int $item_id The item id the ancestors should be retrieved from
+ * @param bool $order_asc Order the items ascendingly (most outer ancestor first)
* @param bool $include_item Should the item matching the given item id be included in the list as well
* @return array Array of items (containing all columns from the item table)
* ID => Item data
@@ -110,10 +110,10 @@ interface phpbb_tree_interface
public function get_path_data($item_id, $order_asc, $include_item);
/**
- * Get all descendants of the item
+ * Get all of the item's descendants
*
- * @param int $item_id The item id to get the descendants from
- * @param bool $order_asc Order the items ascending
+ * @param int $item_id The item id the descendants should be retrieved from
+ * @param bool $order_asc Order the items ascendingly
* @param bool $include_item Should the item matching the given item id be included in the list as well
* @return array Array of items (containing all columns from the item table)
* ID => Item data
diff --git a/tests/tree/nestedset_forum_base.php b/tests/tree/nestedset_forum_base.php
index b9d42fb51d..776e822280 100644
--- a/tests/tree/nestedset_forum_base.php
+++ b/tests/tree/nestedset_forum_base.php
@@ -34,7 +34,7 @@ class phpbb_tests_tree_nestedset_forum_base extends phpbb_database_test_case
10 => array('forum_id' => 10, 'parent_id' => 9, 'user_id' => 0, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
11 => array('forum_id' => 11, 'parent_id' => 7, 'user_id' => 0, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
- // Unexisting forums
+ // Non-existent forums
0 => array('forum_id' => 0, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 0, 'right_id' => 0, 'forum_parents' => 'a:0:{}'),
200 => array('forum_id' => 200, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 0, 'right_id' => 0, 'forum_parents' => 'a:0:{}'),
);
From d1d59dc5cc3ca779c5e7a971659c8aca5e28215d Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 30 Apr 2013 18:33:28 +0200
Subject: [PATCH 312/704] [ticket/11495] Remove unneccessary values from tests
PHPBB3-11495
---
tests/tree/nestedset_forum_test.php | 72 ++++++++++++++---------------
1 file changed, 36 insertions(+), 36 deletions(-)
diff --git a/tests/tree/nestedset_forum_test.php b/tests/tree/nestedset_forum_test.php
index 28c6b048b0..516c794ffc 100644
--- a/tests/tree/nestedset_forum_test.php
+++ b/tests/tree/nestedset_forum_test.php
@@ -46,61 +46,61 @@ class pphpbb_tests_tree_nestedset_forum_test extends phpbb_tests_tree_nestedset_
public function get_sql_where_data()
{
return array(
- array('SELECT forum_id, parent_id, left_id, right_id
+ array('SELECT forum_id
FROM phpbb_forums
%s
- ORDER BY left_id, forum_id ASC',
+ ORDER BY forum_id ASC',
'WHERE', '', array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
+ array('forum_id' => 1),
+ array('forum_id' => 2),
+ array('forum_id' => 3),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10),
+ array('forum_id' => 4),
+ array('forum_id' => 5),
+ array('forum_id' => 6),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
+ array('forum_id' => 7),
+ array('forum_id' => 8),
+ array('forum_id' => 9),
+ array('forum_id' => 10),
+ array('forum_id' => 11),
)),
- array('SELECT f.forum_id, f.parent_id, f.left_id, f.right_id
+ array('SELECT f.forum_id
FROM phpbb_forums f
%s
- ORDER BY f.left_id, f.forum_id ASC',
+ ORDER BY f.forum_id ASC',
'WHERE', 'f.', array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
+ array('forum_id' => 1),
+ array('forum_id' => 2),
+ array('forum_id' => 3),
- array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
- array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11),
- array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10),
+ array('forum_id' => 4),
+ array('forum_id' => 5),
+ array('forum_id' => 6),
- array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
- array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
- array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
- array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
- array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
+ array('forum_id' => 7),
+ array('forum_id' => 8),
+ array('forum_id' => 9),
+ array('forum_id' => 10),
+ array('forum_id' => 11),
)),
- array('SELECT forum_id, parent_id, left_id, right_id
+ array('SELECT forum_id
FROM phpbb_forums
WHERE forum_id < 4 %s
- ORDER BY left_id, forum_id ASC',
+ ORDER BY forum_id ASC',
'AND', '', array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
+ array('forum_id' => 1),
+ array('forum_id' => 2),
+ array('forum_id' => 3),
)),
- array('SELECT f.forum_id, f.parent_id, f.left_id, f.right_id
+ array('SELECT f.forum_id
FROM phpbb_forums f
WHERE f.forum_id < 4 %s
- ORDER BY f.left_id, f.forum_id ASC',
+ ORDER BY f.forum_id ASC',
'AND', 'f.', array(
- array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
- array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
- array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
+ array('forum_id' => 1),
+ array('forum_id' => 2),
+ array('forum_id' => 3),
)),
);
}
From 6a7378ecbdeea1ad356cbde8a085aa7510c61788 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 30 Apr 2013 18:39:22 +0200
Subject: [PATCH 313/704] [ticket/11495] Some more doc changes
PHPBB3-11495
---
phpBB/includes/tree/interface.php | 6 +++---
phpBB/includes/tree/nestedset.php | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/phpBB/includes/tree/interface.php b/phpBB/includes/tree/interface.php
index 2eb40b066c..cc8aab2115 100644
--- a/phpBB/includes/tree/interface.php
+++ b/phpBB/includes/tree/interface.php
@@ -90,7 +90,7 @@ interface phpbb_tree_interface
/**
* Get all items that are either ancestors or descendants of the item
*
- * @param int $item_id The item id the ancestors/descendants should be retrieved from
+ * @param int $item_id Id of the item to retrieve the ancestors/descendants from
* @param bool $order_asc Order the items ascendingly (most outer ancestor first)
* @param bool $include_item Should the item matching the given item id be included in the list as well
* @return array Array of items (containing all columns from the item table)
@@ -101,7 +101,7 @@ interface phpbb_tree_interface
/**
* Get all of the item's ancestors
*
- * @param int $item_id The item id the ancestors should be retrieved from
+ * @param int $item_id Id of the item to retrieve the ancestors from
* @param bool $order_asc Order the items ascendingly (most outer ancestor first)
* @param bool $include_item Should the item matching the given item id be included in the list as well
* @return array Array of items (containing all columns from the item table)
@@ -112,7 +112,7 @@ interface phpbb_tree_interface
/**
* Get all of the item's descendants
*
- * @param int $item_id The item id the descendants should be retrieved from
+ * @param int $item_id Id of the item to retrieve the descendants from
* @param bool $order_asc Order the items ascendingly
* @param bool $include_item Should the item matching the given item id be included in the list as well
* @return array Array of items (containing all columns from the item table)
diff --git a/phpBB/includes/tree/nestedset.php b/phpBB/includes/tree/nestedset.php
index 2a639d8907..2f17ebab02 100644
--- a/phpBB/includes/tree/nestedset.php
+++ b/phpBB/includes/tree/nestedset.php
@@ -577,7 +577,7 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
/**
* Get items that are related to the given item by the condition
*
- * @param int $item_id The item id to get the node set from
+ * @param int $item_id Id of the item to retrieve the node set from
* @param string $condition Query string restricting the item list
* @param bool $order_asc Order the items ascending by their left_id
* @param bool $include_item Should the item matching the given item id be included in the list as well
From a5b5e4b31da6f91e73b09b3c2a50d1a79e8c108d Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Tue, 30 Apr 2013 22:29:20 +0530
Subject: [PATCH 314/704] [ticket/10325] add assert_response_success in test
PHPBB3-10325
---
tests/functional/forgot_password_test.php | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/tests/functional/forgot_password_test.php b/tests/functional/forgot_password_test.php
index 3ae74ed1e9..14dfae3d7c 100644
--- a/tests/functional/forgot_password_test.php
+++ b/tests/functional/forgot_password_test.php
@@ -17,6 +17,7 @@ class phpbb_functional_forgot_password_test extends phpbb_functional_test_case
global $config;
$this->add_lang('ucp');
$crawler = $this->request('GET', 'ucp.php?mode=sendpassword');
+ $this->assert_response_success();
$this->assertEquals($this->lang('SEND_PASSWORD'), $crawler->filter('h2')->text());
}
@@ -26,6 +27,7 @@ class phpbb_functional_forgot_password_test extends phpbb_functional_test_case
$this->admin_login();
$this->add_lang('ucp');
$crawler = $this->request('GET', 'adm/index.php?sid=' . $this->sid . '&i=acp_board&mode=security');
+ //$this->assert_response_success();
$form = $crawler->selectButton('Submit')->form();
$values = $form->getValues();
@@ -37,7 +39,7 @@ class phpbb_functional_forgot_password_test extends phpbb_functional_test_case
$this->logout();
$crawler = $this->request('GET', 'ucp.php?mode=sendpassword');
-
+ $this->assert_response_success();
$this->assertContains($this->lang('UCP_PASSWORD_RESET_DISABLED', '', ''), $crawler->text());
}
From a90a0b087ca3b1e29561a08019ca8ba2fa21c19d Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Tue, 30 Apr 2013 22:59:32 +0530
Subject: [PATCH 315/704] [ticket/10325] fix language in acp and ucp
PHPBB3-10325
---
phpBB/language/en/acp/board.php | 2 +-
phpBB/language/en/ucp.php | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/phpBB/language/en/acp/board.php b/phpBB/language/en/acp/board.php
index 39ad5b78bb..1bc8d1cf46 100644
--- a/phpBB/language/en/acp/board.php
+++ b/phpBB/language/en/acp/board.php
@@ -454,7 +454,7 @@ $lang = array_merge($lang, array(
'ALL' => 'All',
'ALLOW_AUTOLOGIN' => 'Allow "Remember Me" logins',
'ALLOW_AUTOLOGIN_EXPLAIN' => 'Determines whether users are given "Remember Me" option when they visit the board.',
- 'ALLOW_PASSWORD_RESET' => 'Allow "forgot password"',
+ 'ALLOW_PASSWORD_RESET' => 'Allow "Forgot Password"',
'ALLOW_PASSWORD_RESET_EXPLAIN' => 'Determines whether or not users are able to use the "I forgot my password" link on the login page to recover their account. If you use an external authentication mechanism you may wish to disable this feature.',
'AUTOLOGIN_LENGTH' => '"Remember Me" login key expiration length (in days)',
'AUTOLOGIN_LENGTH_EXPLAIN' => 'Number of days after which "Remember Me" login keys are removed or zero to disable.',
diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php
index 372e44a94d..a91b6b84d5 100644
--- a/phpBB/language/en/ucp.php
+++ b/phpBB/language/en/ucp.php
@@ -521,7 +521,7 @@ $lang = array_merge($lang, array(
'UCP_USERGROUPS_MEMBER' => 'Edit memberships',
'UCP_USERGROUPS_MANAGE' => 'Manage groups',
- 'UCP_PASSWORD_RESET_DISABLED' => 'The administrator has disabled the password reset functionality. If you need help accessing your account, please contact the %sBoard Administrator%s',
+ 'UCP_PASSWORD_RESET_DISABLED' => 'The password reset functionality has been disabled. If you need help accessing your account, please contact the %sBoard Administrator%s',
'UCP_REGISTER_DISABLE' => 'Creating a new account is currently not possible.',
'UCP_REMIND' => 'Send password',
'UCP_RESEND' => 'Send activation email',
From 1d0c8a1fe86b65174ae27c2353d52b69fda2a16d Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Tue, 30 Apr 2013 23:09:28 +0530
Subject: [PATCH 316/704] [ticket/10325] use assert_response_success parts
PHPBB3-10325
---
tests/functional/forgot_password_test.php | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/tests/functional/forgot_password_test.php b/tests/functional/forgot_password_test.php
index 14dfae3d7c..bfb4616d64 100644
--- a/tests/functional/forgot_password_test.php
+++ b/tests/functional/forgot_password_test.php
@@ -27,7 +27,11 @@ class phpbb_functional_forgot_password_test extends phpbb_functional_test_case
$this->admin_login();
$this->add_lang('ucp');
$crawler = $this->request('GET', 'adm/index.php?sid=' . $this->sid . '&i=acp_board&mode=security');
- //$this->assert_response_success();
+ $this->assertEquals(200, $this->client->getResponse()->getStatus());
+ $content = $this->client->getResponse()->getContent();
+ $this->assertNotContains('Fatal error:', $content);
+ $this->assertNotContains('Notice:', $content);
+ $this->assertNotContains('[phpBB Debug]', $content);
$form = $crawler->selectButton('Submit')->form();
$values = $form->getValues();
From d7787682df0474b7bb78434339f8edde3727c580 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Tue, 30 Apr 2013 22:19:35 +0200
Subject: [PATCH 317/704] [ticket/11495] Throw exception when item that should
be deleted does not exist
PHPBB3-11495
---
phpBB/includes/tree/nestedset.php | 11 +++++++++++
.../nestedset_forum_insert_delete_test.php | 19 +++++++++++++++++++
2 files changed, 30 insertions(+)
diff --git a/phpBB/includes/tree/nestedset.php b/phpBB/includes/tree/nestedset.php
index 2f17ebab02..4d851a87a8 100644
--- a/phpBB/includes/tree/nestedset.php
+++ b/phpBB/includes/tree/nestedset.php
@@ -181,9 +181,20 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
*/
protected function remove_item_from_nestedset($item_id)
{
+ $item_id = (int) $item_id;
+ if (!$item_id)
+ {
+ throw new OutOfBoundsException($this->message_prefix . 'INVALID_ITEM');
+ }
+
$items = $this->get_subtree_data($item_id);
$item_ids = array_keys($items);
+ if (empty($items) || !isset($items[$item_id]))
+ {
+ throw new OutOfBoundsException($this->message_prefix . 'INVALID_ITEM');
+ }
+
$this->remove_subset($item_ids, $items[$item_id]);
return $item_ids;
diff --git a/tests/tree/nestedset_forum_insert_delete_test.php b/tests/tree/nestedset_forum_insert_delete_test.php
index 1f901c7422..d0e9e02c2e 100644
--- a/tests/tree/nestedset_forum_insert_delete_test.php
+++ b/tests/tree/nestedset_forum_insert_delete_test.php
@@ -52,6 +52,25 @@ class phpbb_tests_tree_nestedset_forum_add_remove_test extends phpbb_tests_tree_
$this->assertEquals($expected, $this->db->sql_fetchrowset($result));
}
+ public function delete_throws_data()
+ {
+ return array(
+ array('Not an item', 0),
+ array('Item does not exist', 200),
+ );
+ }
+
+ /**
+ * @dataProvider delete_throws_data
+ *
+ * @expectedException OutOfBoundsException
+ * @expectedExceptionMessage FORUM_NESTEDSET_INVALID_ITEM
+ */
+ public function test_delete_throws($explain, $forum_id)
+ {
+ $this->set->delete($forum_id);
+ }
+
public function insert_data()
{
return array(
From 00ea297b614a10ad045075cad6f69f2c431c2757 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Tue, 30 Apr 2013 20:54:01 -0500
Subject: [PATCH 318/704] [ticket/11413] Create test for notification
conversion
PHPBB3-11413
---
tests/notification/convert_test.php | 114 ++++++++++++++++++++++++
tests/notification/fixtures/convert.xml | 52 +++++++++++
2 files changed, 166 insertions(+)
create mode 100644 tests/notification/convert_test.php
create mode 100644 tests/notification/fixtures/convert.xml
diff --git a/tests/notification/convert_test.php b/tests/notification/convert_test.php
new file mode 100644
index 0000000000..9fa7fc6a42
--- /dev/null
+++ b/tests/notification/convert_test.php
@@ -0,0 +1,114 @@
+createXMLDataSet(dirname(__FILE__) . '/fixtures/convert.xml');
+ }
+
+ protected function setUp()
+ {
+ parent::setUp();
+
+ global $phpbb_root_path, $phpEx;
+
+ $this->db = $this->new_dbal();
+
+ $this->migration = new phpbb_db_migration_data_310_notifications2(
+ new phpbb_config(array()),
+ $this->db,
+ new phpbb_db_tools($this->db),
+ $phpbb_root_path,
+ $phpEx,
+ 'phpbb_'
+ );
+ }
+
+ public function test_convert()
+ {
+ $this->migration->convert_notifications();
+
+ $expected = array_merge(
+ $this->create_expected('post', 1, 'email'),
+ $this->create_expected('topic', 1, 'email'),
+
+ $this->create_expected('pm', 2, 'email'),
+ $this->create_expected('post', 2, 'email'),
+ $this->create_expected('topic', 2, 'email'),
+
+ $this->create_expected('post', 3, 'jabber'),
+ $this->create_expected('topic', 3, 'jabber'),
+
+ $this->create_expected('pm', 4, 'jabber'),
+ $this->create_expected('post', 4, 'jabber'),
+ $this->create_expected('topic', 4, 'jabber'),
+
+ $this->create_expected('post', 5, 'both'),
+ $this->create_expected('topic', 5, 'both'),
+
+ $this->create_expected('pm', 6, 'both'),
+ $this->create_expected('post', 6, 'both'),
+ $this->create_expected('topic', 6, 'both')
+ );
+
+ $sql = 'SELECT * FROM phpbb_user_notifications
+ ORDER BY user_id ASC, item_type ASC';
+ $result = $this->db->sql_query($sql);
+ $rowset = $this->db->sql_fetchrowset($result);
+ $this->db->sql_freeresult($result);
+
+ $this->assertEquals($expected, $rowset);
+ }
+
+ protected function create_expected($type, $user_id, $method = '')
+ {
+ $return = array();
+
+ if ($method != '')
+ {
+ $return[] = array(
+ 'item_type' => $type,
+ 'item_id' => '0',
+ 'user_id' => (string) $user_id,
+ 'method' => '',
+ 'notify' => '1',
+ );
+ }
+
+ if ($method == 'email' || $method == 'both')
+ {
+ $return[] = array(
+ 'item_type' => $type,
+ 'item_id' => '0',
+ 'user_id' => (string) $user_id,
+ 'method' => 'email',
+ 'notify' => '1',
+ );
+ }
+
+ if ($method == 'jabber' || $method == 'both')
+ {
+ $return[] = array(
+ 'item_type' => $type,
+ 'item_id' => '0',
+ 'user_id' => (string) $user_id,
+ 'method' => 'jabber',
+ 'notify' => '1',
+ );
+ }
+
+ return $return;
+ }
+}
diff --git a/tests/notification/fixtures/convert.xml b/tests/notification/fixtures/convert.xml
new file mode 100644
index 0000000000..a244070a95
--- /dev/null
+++ b/tests/notification/fixtures/convert.xml
@@ -0,0 +1,52 @@
+
+
+
+ user_id
+ username
+ username_clean
+ user_notify_type
+ user_notify_pm
+
+ 1
+ 1
+ 1
+ 0
+ 0
+
+
+ 2
+ 2
+ 2
+ 0
+ 1
+
+
+ 3
+ 3
+ 3
+ 1
+ 0
+
+
+ 4
+ 4
+ 4
+ 1
+ 1
+
+
+ 5
+ 5
+ 5
+ 2
+ 0
+
+
+ 6
+ 6
+ 6
+ 2
+ 1
+
+
+
From 81b2ad158c272cd306ea35a9b44875a5c11e7135 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Tue, 30 Apr 2013 21:01:46 -0500
Subject: [PATCH 319/704] [ticket/11413] Use sql_insert_buffer
PHPBB3-11413
---
.../db/migration/data/310/notifications2.php | 27 ++++++-------------
1 file changed, 8 insertions(+), 19 deletions(-)
diff --git a/phpBB/includes/db/migration/data/310/notifications2.php b/phpBB/includes/db/migration/data/310/notifications2.php
index cd078f8f60..44b3f8fd49 100644
--- a/phpBB/includes/db/migration/data/310/notifications2.php
+++ b/phpBB/includes/db/migration/data/310/notifications2.php
@@ -108,7 +108,7 @@ class phpbb_db_migration_data_310_notifications2 extends phpbb_db_migration
FROM ' . USERS_TABLE;
$result = $this->db->sql_query($sql);
- $sql_insert_data = array();
+ $insert_buffer = new phpbb_db_sql_insert_buffer($this->db, $insert_table);
while ($row = $this->db->sql_fetchrow($result))
{
$notification_methods = array();
@@ -129,8 +129,8 @@ class phpbb_db_migration_data_310_notifications2 extends phpbb_db_migration
// Notifications for posts
foreach (array('post', 'topic') as $item_type)
{
- $sql_insert_data = $this->add_method_rows(
- $sql_insert_data,
+ $this->add_method_rows(
+ $insert_buffer,
$item_type,
0,
$row['user_id'],
@@ -142,30 +142,21 @@ class phpbb_db_migration_data_310_notifications2 extends phpbb_db_migration
{
// Notifications for private messages
// User either gets all methods or no method
- $sql_insert_data = $this->add_method_rows(
- $sql_insert_data,
+ $this->add_method_rows(
+ $insert_buffer,
'pm',
0,
$row['user_id'],
$notification_methods
);
}
-
- if (sizeof($sql_insert_data) > 500)
- {
- $this->db->sql_multi_insert($insert_table, $sql_insert_data);
- $sql_insert_data = array();
- }
}
$this->db->sql_freeresult($result);
- if (!empty($sql_insert_data))
- {
- $this->db->sql_multi_insert($insert_table, $sql_insert_data);
- }
+ $insert_buffer->flush();
}
- protected function add_method_rows(array $sql_insert_data, $item_type, $item_id, $user_id, array $methods)
+ protected function add_method_rows(phpbb_db_sql_insert_buffer $insert_buffer, $item_type, $item_id, $user_id, array $methods)
{
$row_base = array(
'item_type' => $item_type,
@@ -176,9 +167,7 @@ class phpbb_db_migration_data_310_notifications2 extends phpbb_db_migration
foreach ($methods as $method)
{
$row_base['method'] = $method;
- $sql_insert_data[] = $row_base;
+ $insert_buffer->insert($row_base);
}
-
- return $sql_insert_data;
}
}
From f2e618a05de5f406477363cb9236aca46569afe1 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Tue, 30 Apr 2013 21:10:04 -0500
Subject: [PATCH 320/704] [ticket/11413] Test get_notification_type_id and _ids
functions
PHPBB3-11413
---
tests/notification/notification_test.php | 29 ++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/tests/notification/notification_test.php b/tests/notification/notification_test.php
index 5746d0090e..4ffd3587f1 100644
--- a/tests/notification/notification_test.php
+++ b/tests/notification/notification_test.php
@@ -99,6 +99,35 @@ class phpbb_notification_test extends phpbb_database_test_case
return new $type($this->user_loader, $this->db, $this->cache, $this->user, $this->auth, $this->config, $phpbb_root_path, $phpEx, 'phpbb_notification_types', 'phpbb_notifications', 'phpbb_user_notifications');
}
+ public function test_get_notification_type_id()
+ {
+ // They should be inserted the first time
+ $this->assertEquals(1, $this->notifications->get_notification_type_id('post'));
+ $this->assertEquals(2, $this->notifications->get_notification_type_id('quote'));
+ $this->assertEquals(3, $this->notifications->get_notification_type_id('test'));
+
+ $this->assertEquals(array(
+ 'test' => 3,
+ 'quote' => 2,
+ 'post' => 1,
+ ),
+ $this->notifications->get_notification_type_ids(array(
+ 'test',
+ 'quote',
+ 'post',
+ )
+ ));
+ $this->assertEquals(2, $this->notifications->get_notification_type_id('quote'));
+
+ try
+ {
+ $this->assertEquals(3, $this->notifications->get_notification_type_id('fail'));
+
+ $this->fail('Non-existant type should throw exception');
+ }
+ catch (Exception $e) {}
+ }
+
public function test_get_subscription_types()
{
$subscription_types = $this->notifications->get_subscription_types();
From 2f2feaa4e8ad9a18fd9ddcb7d65ae958c544dbcb Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Tue, 30 Apr 2013 21:38:40 -0500
Subject: [PATCH 321/704] [ticket/11413] Don't use the database for the convert
test
Different databases seem to work slightly differently here and are causing
errors
PHPBB3-11413
---
.../db/migration/data/310/notifications2.php | 11 +++++-
tests/notification/convert_test.php | 37 ++++++++-----------
2 files changed, 26 insertions(+), 22 deletions(-)
diff --git a/phpBB/includes/db/migration/data/310/notifications2.php b/phpBB/includes/db/migration/data/310/notifications2.php
index 44b3f8fd49..c90944dcc9 100644
--- a/phpBB/includes/db/migration/data/310/notifications2.php
+++ b/phpBB/includes/db/migration/data/310/notifications2.php
@@ -100,7 +100,16 @@ class phpbb_db_migration_data_310_notifications2 extends phpbb_db_migration
public function convert_notifications()
{
$insert_table = $this->table_prefix . 'user_notifications';
+ $insert_buffer = new phpbb_db_sql_insert_buffer($this->db, $insert_table);
+ $this->perform_conversion($insert_buffer, $insert_table);
+ }
+
+ /**
+ * Perform the conversion (separate for testability)
+ */
+ public function perform_conversion($insert_buffer, $insert_table)
+ {
$sql = 'DELETE FROM ' . $insert_table;
$this->db->sql_query($sql);
@@ -108,7 +117,6 @@ class phpbb_db_migration_data_310_notifications2 extends phpbb_db_migration
FROM ' . USERS_TABLE;
$result = $this->db->sql_query($sql);
- $insert_buffer = new phpbb_db_sql_insert_buffer($this->db, $insert_table);
while ($row = $this->db->sql_fetchrow($result))
{
$notification_methods = array();
@@ -162,6 +170,7 @@ class phpbb_db_migration_data_310_notifications2 extends phpbb_db_migration
'item_type' => $item_type,
'item_id' => (int) $item_id,
'user_id' => (int) $user_id,
+ 'notify' => 1
);
foreach ($methods as $method)
diff --git a/tests/notification/convert_test.php b/tests/notification/convert_test.php
index 9fa7fc6a42..529b2935e1 100644
--- a/tests/notification/convert_test.php
+++ b/tests/notification/convert_test.php
@@ -38,38 +38,33 @@ class phpbb_notification_convert_test extends phpbb_database_test_case
public function test_convert()
{
- $this->migration->convert_notifications();
+ $buffer = new phpbb_mock_sql_insert_buffer($this->db, 'phpbb_user_notifications');
+ $this->migration->perform_conversion($buffer, 'phpbb_user_notifications');
$expected = array_merge(
$this->create_expected('post', 1, 'email'),
$this->create_expected('topic', 1, 'email'),
- $this->create_expected('pm', 2, 'email'),
$this->create_expected('post', 2, 'email'),
$this->create_expected('topic', 2, 'email'),
+ $this->create_expected('pm', 2, 'email'),
$this->create_expected('post', 3, 'jabber'),
$this->create_expected('topic', 3, 'jabber'),
- $this->create_expected('pm', 4, 'jabber'),
$this->create_expected('post', 4, 'jabber'),
$this->create_expected('topic', 4, 'jabber'),
+ $this->create_expected('pm', 4, 'jabber'),
$this->create_expected('post', 5, 'both'),
$this->create_expected('topic', 5, 'both'),
- $this->create_expected('pm', 6, 'both'),
$this->create_expected('post', 6, 'both'),
- $this->create_expected('topic', 6, 'both')
+ $this->create_expected('topic', 6, 'both'),
+ $this->create_expected('pm', 6, 'both')
);
- $sql = 'SELECT * FROM phpbb_user_notifications
- ORDER BY user_id ASC, item_type ASC';
- $result = $this->db->sql_query($sql);
- $rowset = $this->db->sql_fetchrowset($result);
- $this->db->sql_freeresult($result);
-
- $this->assertEquals($expected, $rowset);
+ $this->assertEquals($expected, $buffer->get_buffer());
}
protected function create_expected($type, $user_id, $method = '')
@@ -80,10 +75,10 @@ class phpbb_notification_convert_test extends phpbb_database_test_case
{
$return[] = array(
'item_type' => $type,
- 'item_id' => '0',
- 'user_id' => (string) $user_id,
+ 'item_id' => 0,
+ 'user_id' => $user_id,
'method' => '',
- 'notify' => '1',
+ 'notify' => 1,
);
}
@@ -91,10 +86,10 @@ class phpbb_notification_convert_test extends phpbb_database_test_case
{
$return[] = array(
'item_type' => $type,
- 'item_id' => '0',
- 'user_id' => (string) $user_id,
+ 'item_id' => 0,
+ 'user_id' => $user_id,
'method' => 'email',
- 'notify' => '1',
+ 'notify' => 1,
);
}
@@ -102,10 +97,10 @@ class phpbb_notification_convert_test extends phpbb_database_test_case
{
$return[] = array(
'item_type' => $type,
- 'item_id' => '0',
- 'user_id' => (string) $user_id,
+ 'item_id' => 0,
+ 'user_id' => $user_id,
'method' => 'jabber',
- 'notify' => '1',
+ 'notify' => 1,
);
}
From 900467681077b7c4cd48529b53f083c8ea0334f6 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Tue, 30 Apr 2013 21:53:16 -0500
Subject: [PATCH 322/704] [ticket/11413] Include mock class
PHPBB3-11413
---
tests/mock/sql_insert_buffer.php | 21 +++++++++++++++++++++
tests/notification/convert_test.php | 1 +
2 files changed, 22 insertions(+)
create mode 100644 tests/mock/sql_insert_buffer.php
diff --git a/tests/mock/sql_insert_buffer.php b/tests/mock/sql_insert_buffer.php
new file mode 100644
index 0000000000..ba09aa8d7f
--- /dev/null
+++ b/tests/mock/sql_insert_buffer.php
@@ -0,0 +1,21 @@
+buffer)) ? true : false;
+ }
+
+ public function get_buffer()
+ {
+ return $this->buffer;
+ }
+}
diff --git a/tests/notification/convert_test.php b/tests/notification/convert_test.php
index 529b2935e1..ba586b681d 100644
--- a/tests/notification/convert_test.php
+++ b/tests/notification/convert_test.php
@@ -8,6 +8,7 @@
*/
require_once dirname(__FILE__) . '/../../phpBB/includes/db/db_tools.php';
+require_once dirname(__FILE__) . '/../mock/sql_insert_buffer.php';
class phpbb_notification_convert_test extends phpbb_database_test_case
{
From 356bc00a293300a777304a3c2d442868d4491344 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Tue, 30 Apr 2013 23:21:50 -0500
Subject: [PATCH 323/704] [ticket/11435] Mark extension spacing test as
incomplete
This test fails until 11435 is fixed
Add newlines at EOF
PHPBB3-11435
---
.../ext/trivial/styles/all/template/variable_spacing.html | 2 +-
.../ext_trivial/styles/silver/template/variable_spacing.html | 2 +-
tests/template/template_spacing_test.php | 4 ++++
tests/template/templates/variable_spacing.html | 2 +-
4 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/tests/template/datasets/ext_trivial/ext/trivial/styles/all/template/variable_spacing.html b/tests/template/datasets/ext_trivial/ext/trivial/styles/all/template/variable_spacing.html
index 2909e1c136..028f8aa0d1 100644
--- a/tests/template/datasets/ext_trivial/ext/trivial/styles/all/template/variable_spacing.html
+++ b/tests/template/datasets/ext_trivial/ext/trivial/styles/all/template/variable_spacing.html
@@ -3,4 +3,4 @@
|{VARIABLE}
-test
\ No newline at end of file
+test
diff --git a/tests/template/datasets/ext_trivial/styles/silver/template/variable_spacing.html b/tests/template/datasets/ext_trivial/styles/silver/template/variable_spacing.html
index c11ae9cb40..ad05e6f661 100644
--- a/tests/template/datasets/ext_trivial/styles/silver/template/variable_spacing.html
+++ b/tests/template/datasets/ext_trivial/styles/silver/template/variable_spacing.html
@@ -1 +1 @@
-
\ No newline at end of file
+
diff --git a/tests/template/template_spacing_test.php b/tests/template/template_spacing_test.php
index 83f8711b38..fb4161066a 100644
--- a/tests/template/template_spacing_test.php
+++ b/tests/template/template_spacing_test.php
@@ -59,6 +59,10 @@ class phpbb_template_template_spacing_test extends phpbb_template_template_test_
*/
public function test_event($desc, $dataset, $style_names, $file, array $vars, array $block_vars, array $destroy, $expected)
{
+ $this->markTestIncomplete(
+ 'This test will fail until PHPBB3-11435 is fixed'
+ );
+
// Reset the engine state
$this->setup_engine_for_events($dataset, $style_names);
diff --git a/tests/template/templates/variable_spacing.html b/tests/template/templates/variable_spacing.html
index 2909e1c136..028f8aa0d1 100644
--- a/tests/template/templates/variable_spacing.html
+++ b/tests/template/templates/variable_spacing.html
@@ -3,4 +3,4 @@
|{VARIABLE}
-test
\ No newline at end of file
+test
From 9db4e856db426c68d0e3055dbcad9754ce65779d Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Wed, 1 May 2013 13:00:43 -0500
Subject: [PATCH 324/704] [ticket/11415] Move while loop from ext manager to
acp_extensions.php
Now enable_step works as it's supposed to (do one step at a time) and
less refreshes are required for the user.
PHPBB3-11415
---
phpBB/includes/acp/acp_extensions.php | 34 ++++++++++++++++++++-------
phpBB/includes/extension/manager.php | 21 +++--------------
2 files changed, 28 insertions(+), 27 deletions(-)
diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php
index e4defa0400..7fdeb1ff8b 100644
--- a/phpBB/includes/acp/acp_extensions.php
+++ b/phpBB/includes/acp/acp_extensions.php
@@ -44,6 +44,10 @@ class acp_extensions
$action = $request->variable('action', 'list');
$ext_name = $request->variable('ext_name', '');
+ // What is a safe limit of execution time? Half the max execution time should be safe.
+ $safe_time_limit = (ini_get('max_execution_time') / 2);
+ $start_time = time();
+
// Cancel action
if ($request->is_set_post('cancel'))
{
@@ -105,11 +109,15 @@ class acp_extensions
try
{
- if ($phpbb_extension_manager->enable_step($ext_name))
+ while ($phpbb_extension_manager->enable_step($ext_name))
{
- $template->assign_var('S_NEXT_STEP', true);
+ // Are we approaching the time limit? If so we want to pause the update and continue after refreshing
+ if ((time() - $start_time) >= $safe_time_limit)
+ {
+ $template->assign_var('S_NEXT_STEP', true);
- meta_refresh(0, $this->u_action . '&action=enable&ext_name=' . urlencode($ext_name));
+ meta_refresh(0, $this->u_action . '&action=enable&ext_name=' . urlencode($ext_name));
+ }
}
}
catch (phpbb_db_migration_exception $e)
@@ -139,11 +147,15 @@ class acp_extensions
break;
case 'disable':
- if ($phpbb_extension_manager->disable_step($ext_name))
+ while ($phpbb_extension_manager->disable_step($ext_name))
{
- $template->assign_var('S_NEXT_STEP', true);
+ // Are we approaching the time limit? If so we want to pause the update and continue after refreshing
+ if ((time() - $start_time) >= $safe_time_limit)
+ {
+ $template->assign_var('S_NEXT_STEP', true);
- meta_refresh(0, $this->u_action . '&action=disable&ext_name=' . urlencode($ext_name));
+ meta_refresh(0, $this->u_action . '&action=disable&ext_name=' . urlencode($ext_name));
+ }
}
$this->tpl_name = 'acp_ext_disable';
@@ -165,11 +177,15 @@ class acp_extensions
case 'purge':
try
{
- if ($phpbb_extension_manager->purge_step($ext_name))
+ while ($phpbb_extension_manager->purge_step($ext_name))
{
- $template->assign_var('S_NEXT_STEP', true);
+ // Are we approaching the time limit? If so we want to pause the update and continue after refreshing
+ if ((time() - $start_time) >= $safe_time_limit)
+ {
+ $template->assign_var('S_NEXT_STEP', true);
- meta_refresh(0, $this->u_action . '&action=purge&ext_name=' . urlencode($ext_name));
+ meta_refresh(0, $this->u_action . '&action=purge&ext_name=' . urlencode($ext_name));
+ }
}
}
catch (phpbb_db_migration_exception $e)
diff --git a/phpBB/includes/extension/manager.php b/phpBB/includes/extension/manager.php
index a1022762b8..d3e9d56501 100644
--- a/phpBB/includes/extension/manager.php
+++ b/phpBB/includes/extension/manager.php
@@ -546,22 +546,11 @@ class phpbb_extension_manager
$migrations = $finder->get_classes_from_files($migrations);
$this->migrator->set_migrations($migrations);
- // What is a safe limit of execution time? Half the max execution time should be safe.
- $safe_time_limit = (ini_get('max_execution_time') / 2);
- $start_time = time();
-
if ($mode == 'enable')
{
- while (!$this->migrator->finished())
- {
- $this->migrator->update();
+ $this->migrator->update();
- // Are we approaching the time limit? If so we want to pause the update and continue after refreshing
- if ((time() - $start_time) >= $safe_time_limit)
- {
- return false;
- }
- }
+ return $this->migrator->finished();
}
else if ($mode == 'purge')
{
@@ -571,11 +560,7 @@ class phpbb_extension_manager
{
$this->migrator->revert($migration);
- // Are we approaching the time limit? If so we want to pause the update and continue after refreshing
- if ((time() - $start_time) >= $safe_time_limit)
- {
- return false;
- }
+ return false;
}
}
}
From 7ed21cc6f2b7eee305d0c7c00821ef1ce680b77e Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Wed, 1 May 2013 14:02:13 -0500
Subject: [PATCH 325/704] [ticket/11415] Move migrator to base extension class
from ext.manager
PHPBB3-11415
---
phpBB/includes/extension/base.php | 75 ++++++++++++++++++++++--
phpBB/includes/extension/manager.php | 86 +++++-----------------------
2 files changed, 86 insertions(+), 75 deletions(-)
diff --git a/phpBB/includes/extension/base.php b/phpBB/includes/extension/base.php
index d51589d719..dc6d771672 100644
--- a/phpBB/includes/extension/base.php
+++ b/phpBB/includes/extension/base.php
@@ -27,25 +27,42 @@ class phpbb_extension_base implements phpbb_extension_interface
/** @var ContainerInterface */
protected $container;
+ /** @var string */
+ protected $extension_name;
+
+ /** @var string */
+ protected $extension_path;
+
/**
* Constructor
*
* @param ContainerInterface $container Container object
+ * @param string $extension_name Name of this extension (from ext.manager)
+ * @param string $extension_path Relative path to this extension
*/
- public function __construct(ContainerInterface $container)
+ public function __construct(ContainerInterface $container, $extension_name, $extension_path)
{
$this->container = $container;
+
+ $this->extension_name = $extension_name;
+ $this->extension_path = $extension_path;
}
/**
- * Single enable step that does nothing
+ * Single enable step that installs any included migrations
*
* @param mixed $old_state State returned by previous call of this method
* @return false Indicates no further steps are required
*/
public function enable_step($old_state)
{
- return false;
+ $migrations = $this->get_migration_file_list();
+ $migrator = $this->container->get('migrator');
+ $migrator->set_migrations($migrations);
+
+ $migrator->update();
+
+ return !$migrator->finished();
}
/**
@@ -60,13 +77,63 @@ class phpbb_extension_base implements phpbb_extension_interface
}
/**
- * Single purge step that does nothing
+ * Single purge step that reverts any included and installed migrations
*
* @param mixed $old_state State returned by previous call of this method
* @return false Indicates no further steps are required
*/
public function purge_step($old_state)
{
+ $migrations = $this->get_migration_file_list();
+ $migrator = $this->container->get('migrator');
+ $migrator->set_migrations($migrations);
+
+ foreach ($migrations as $migration)
+ {
+ while ($migrator->migration_state($migration) !== false)
+ {
+ $migrator->revert($migration);
+
+ return true;
+ }
+ }
+
return false;
}
+
+ /**
+ * Get the list of migration files from this extension
+ *
+ * @return array
+ */
+ protected function get_migration_file_list()
+ {
+ static $migrations = false;
+
+ if ($migrations !== false)
+ {
+ return $migrations;
+ }
+
+ // Only have the finder search in this extension path directory
+ $extensions = array(
+ $this->extension_name => $this->extension_path,
+ );
+
+ $extension_manager = $this->container->get('ext.manager');
+ $finder = $extension_manager->get_finder();
+ $migrations = array();
+ $file_list = $finder
+ ->extension_directory('/migrations')
+ ->find_from_paths($extensions);
+
+ foreach ($file_list as $file)
+ {
+ $migrations[$file['named_path']] = $file['ext_name'];
+ }
+
+ $migrations = $finder->get_classes_from_files($migrations);
+
+ return $migrations;
+ }
}
diff --git a/phpBB/includes/extension/manager.php b/phpBB/includes/extension/manager.php
index d3e9d56501..8b8a69f14c 100644
--- a/phpBB/includes/extension/manager.php
+++ b/phpBB/includes/extension/manager.php
@@ -138,11 +138,11 @@ class phpbb_extension_manager
if (class_exists($extension_class_name))
{
- return new $extension_class_name($this->container);
+ return new $extension_class_name($this->container, $name, $this->get_extension_path($name, true));
}
else
{
- return new phpbb_extension_base($this->container);
+ return new phpbb_extension_base($this->container, $name, $this->get_extension_path($name, true));
}
}
@@ -178,12 +178,6 @@ class phpbb_extension_manager
$old_state = (isset($this->extensions[$name]['ext_state'])) ? unserialize($this->extensions[$name]['ext_state']) : false;
- // Returns false if not completed
- if (!$this->handle_migrations($name, 'enable'))
- {
- return true;
- }
-
$extension = $this->get_extension($name);
$state = $extension->enable_step($old_state);
@@ -199,12 +193,21 @@ class phpbb_extension_manager
$this->extensions[$name]['ext_path'] = $this->get_extension_path($extension_data['ext_name']);
ksort($this->extensions);
- $sql = 'UPDATE ' . $this->extension_table . '
- SET ' . $this->db->sql_build_array('UPDATE', $extension_data) . "
+ $sql = 'SELECT COUNT(ext_name) as row_count
+ FROM ' . $this->extension_table . "
WHERE ext_name = '" . $this->db->sql_escape($name) . "'";
- $this->db->sql_query($sql);
+ $result = $this->db->sql_query($sql);
+ $count = $this->db->sql_fetchfield('row_count');
+ $this->db->sql_freeresult($result);
- if (!$this->db->sql_affectedrows())
+ if ($count)
+ {
+ $sql = 'UPDATE ' . $this->extension_table . '
+ SET ' . $this->db->sql_build_array('UPDATE', $extension_data) . "
+ WHERE ext_name = '" . $this->db->sql_escape($name) . "'";
+ $this->db->sql_query($sql);
+ }
+ else
{
$sql = 'INSERT INTO ' . $this->extension_table . '
' . $this->db->sql_build_array('INSERT', $extension_data);
@@ -335,12 +338,6 @@ class phpbb_extension_manager
$old_state = unserialize($this->extensions[$name]['ext_state']);
- // Returns false if not completed
- if (!$this->handle_migrations($name, 'purge'))
- {
- return true;
- }
-
$extension = $this->get_extension($name);
$state = $extension->purge_step($old_state);
@@ -514,57 +511,4 @@ class phpbb_extension_manager
{
return new phpbb_extension_finder($this, $this->filesystem, $this->phpbb_root_path, $this->cache, $this->php_ext, $this->cache_name . '_finder');
}
-
- /**
- * Handle installing/reverting migrations
- *
- * @param string $extension_name Name of the extension
- * @param string $mode enable or purge
- * @return bool True if completed, False if not completed
- */
- protected function handle_migrations($extension_name, $mode)
- {
- $extensions = array(
- $extension_name => $this->phpbb_root_path . $this->get_extension_path($extension_name),
- );
-
- $finder = $this->get_finder();
- $migrations = array();
- $file_list = $finder
- ->extension_directory('/migrations')
- ->find_from_paths($extensions);
-
- if (empty($file_list))
- {
- return true;
- }
-
- foreach ($file_list as $file)
- {
- $migrations[$file['named_path']] = $file['ext_name'];
- }
- $migrations = $finder->get_classes_from_files($migrations);
- $this->migrator->set_migrations($migrations);
-
- if ($mode == 'enable')
- {
- $this->migrator->update();
-
- return $this->migrator->finished();
- }
- else if ($mode == 'purge')
- {
- foreach ($migrations as $migration)
- {
- while ($this->migrator->migration_state($migration) !== false)
- {
- $this->migrator->revert($migration);
-
- return false;
- }
- }
- }
-
- return true;
- }
}
From 60e32728393d4258f92f7893f8275889278a995f Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Wed, 1 May 2013 14:09:08 -0500
Subject: [PATCH 326/704] [ticket/11415] Remove migrator dependency from
extension manager
PHPBB3-11415
---
phpBB/config/services.yml | 1 -
phpBB/includes/extension/manager.php | 5 +----
tests/dbal/migrator_test.php | 6 +++++-
tests/extension/manager_test.php | 6 ++++--
tests/extension/metadata_manager_test.php | 5 ++++-
tests/test_framework/phpbb_functional_test_case.php | 5 ++++-
6 files changed, 18 insertions(+), 10 deletions(-)
diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml
index 7923c94a3f..306dc2dc77 100644
--- a/phpBB/config/services.yml
+++ b/phpBB/config/services.yml
@@ -130,7 +130,6 @@ services:
- @service_container
- @dbal.conn
- @config
- - @migrator
- @filesystem
- %tables.ext%
- %core.root_path%
diff --git a/phpBB/includes/extension/manager.php b/phpBB/includes/extension/manager.php
index 8b8a69f14c..b42043748f 100644
--- a/phpBB/includes/extension/manager.php
+++ b/phpBB/includes/extension/manager.php
@@ -29,7 +29,6 @@ class phpbb_extension_manager
protected $db;
protected $config;
- protected $migrator;
protected $cache;
protected $php_ext;
protected $extensions;
@@ -43,7 +42,6 @@ class phpbb_extension_manager
* @param ContainerInterface $container A container
* @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.
@@ -51,13 +49,12 @@ class phpbb_extension_manager
* @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, phpbb_filesystem $filesystem, $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_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;
$this->db = $db;
$this->config = $config;
- $this->migrator = $migrator;
$this->cache = $cache;
$this->filesystem = $filesystem;
$this->php_ext = $php_ext;
diff --git a/tests/dbal/migrator_test.php b/tests/dbal/migrator_test.php
index 6390d6a715..5fc05f2119 100644
--- a/tests/dbal/migrator_test.php
+++ b/tests/dbal/migrator_test.php
@@ -55,8 +55,12 @@ class phpbb_dbal_migrator_test extends phpbb_database_test_case
'phpbb_',
$tools
);
+
+ $container = new phpbb_mock_container_builder();
+ $container->set('migrator', $migrator);
+
$this->extension_manager = new phpbb_extension_manager(
- new phpbb_mock_container_builder(),
+ $container,
$this->db,
$this->config,
$this->migrator,
diff --git a/tests/extension/manager_test.php b/tests/extension/manager_test.php
index 106f078691..43b7410654 100644
--- a/tests/extension/manager_test.php
+++ b/tests/extension/manager_test.php
@@ -107,11 +107,13 @@ class phpbb_extension_manager_test extends phpbb_database_test_case
$table_prefix,
array()
);
+ $container = new phpbb_mock_container_builder();
+ $container->set('migrator', $migrator);
+
return new phpbb_extension_manager(
- new phpbb_mock_container_builder(),
+ $container,
$db,
$config,
- $migrator,
new phpbb_filesystem(),
'phpbb_ext',
dirname(__FILE__) . '/',
diff --git a/tests/extension/metadata_manager_test.php b/tests/extension/metadata_manager_test.php
index 05d1cbccc3..92a0ff126c 100644
--- a/tests/extension/metadata_manager_test.php
+++ b/tests/extension/metadata_manager_test.php
@@ -59,8 +59,11 @@ class metadata_manager_test extends phpbb_database_test_case
$this->table_prefix,
array()
);
+ $container = new phpbb_mock_container_builder();
+ $container->set('migrator', $migrator);
+
$this->extension_manager = new phpbb_extension_manager(
- new phpbb_mock_container_builder(),
+ $container,
$this->db,
$this->config,
$this->migrator,
diff --git a/tests/test_framework/phpbb_functional_test_case.php b/tests/test_framework/phpbb_functional_test_case.php
index 5534de89c9..a11c0f72ca 100644
--- a/tests/test_framework/phpbb_functional_test_case.php
+++ b/tests/test_framework/phpbb_functional_test_case.php
@@ -148,8 +148,11 @@ class phpbb_functional_test_case extends phpbb_test_case
self::$config['table_prefix'],
array()
);
+ $container = new phpbb_mock_container_builder();
+ $container->set('migrator', $migrator);
+
$extension_manager = new phpbb_extension_manager(
- new phpbb_mock_container_builder(),
+ $container,
$db,
$config,
$migrator,
From 87b01fc854b22e3839776505486d5a564e671f5f Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Wed, 1 May 2013 15:18:53 -0500
Subject: [PATCH 327/704] [ticket/11415] Make migrator/ext.manager dependencies
of the base ext class
PHPBB3-11415
---
phpBB/includes/extension/base.php | 30 ++++++++++++++++++----------
phpBB/includes/extension/manager.php | 6 ++++--
2 files changed, 23 insertions(+), 13 deletions(-)
diff --git a/phpBB/includes/extension/base.php b/phpBB/includes/extension/base.php
index dc6d771672..2d22658ff1 100644
--- a/phpBB/includes/extension/base.php
+++ b/phpBB/includes/extension/base.php
@@ -27,6 +27,12 @@ class phpbb_extension_base implements phpbb_extension_interface
/** @var ContainerInterface */
protected $container;
+ /** @var phpbb_extension_manager */
+ protected $extension_manager;
+
+ /** @var phpbb_db_migrator */
+ protected $migrator;
+
/** @var string */
protected $extension_name;
@@ -37,12 +43,15 @@ class phpbb_extension_base implements phpbb_extension_interface
* Constructor
*
* @param ContainerInterface $container Container object
+ * @param phpbb_extension_manager $extension_manager
* @param string $extension_name Name of this extension (from ext.manager)
* @param string $extension_path Relative path to this extension
*/
- public function __construct(ContainerInterface $container, $extension_name, $extension_path)
+ public function __construct(ContainerInterface $container, phpbb_extension_manager $extension_manager, phpbb_db_migrator $migrator, $extension_name, $extension_path)
{
$this->container = $container;
+ $this->extension_manager = $extension_manager;
+ $this->migrator = $migrator;
$this->extension_name = $extension_name;
$this->extension_path = $extension_path;
@@ -57,12 +66,12 @@ class phpbb_extension_base implements phpbb_extension_interface
public function enable_step($old_state)
{
$migrations = $this->get_migration_file_list();
- $migrator = $this->container->get('migrator');
- $migrator->set_migrations($migrations);
- $migrator->update();
+ $this->migrator->set_migrations($migrations);
- return !$migrator->finished();
+ $this->migrator->update();
+
+ return !$this->migrator->finished();
}
/**
@@ -85,14 +94,14 @@ class phpbb_extension_base implements phpbb_extension_interface
public function purge_step($old_state)
{
$migrations = $this->get_migration_file_list();
- $migrator = $this->container->get('migrator');
- $migrator->set_migrations($migrations);
+
+ $this->migrator->set_migrations($migrations);
foreach ($migrations as $migration)
{
- while ($migrator->migration_state($migration) !== false)
+ while ($this->migrator->migration_state($migration) !== false)
{
- $migrator->revert($migration);
+ $this->migrator->revert($migration);
return true;
}
@@ -120,8 +129,7 @@ class phpbb_extension_base implements phpbb_extension_interface
$this->extension_name => $this->extension_path,
);
- $extension_manager = $this->container->get('ext.manager');
- $finder = $extension_manager->get_finder();
+ $finder = $this->extension_manager->get_finder();
$migrations = array();
$file_list = $finder
->extension_directory('/migrations')
diff --git a/phpBB/includes/extension/manager.php b/phpBB/includes/extension/manager.php
index b42043748f..799c8b2418 100644
--- a/phpBB/includes/extension/manager.php
+++ b/phpBB/includes/extension/manager.php
@@ -133,13 +133,15 @@ class phpbb_extension_manager
{
$extension_class_name = 'phpbb_ext_' . str_replace('/', '_', $name) . '_ext';
+ $migrator = $this->container->get('migrator');
+
if (class_exists($extension_class_name))
{
- return new $extension_class_name($this->container, $name, $this->get_extension_path($name, true));
+ return new $extension_class_name($this->container, $this, $migrator, $name, $this->get_extension_path($name, true));
}
else
{
- return new phpbb_extension_base($this->container, $name, $this->get_extension_path($name, true));
+ return new phpbb_extension_base($this->container, $this, $migrator, $name, $this->get_extension_path($name, true));
}
}
From 32f247ed603a2b57ba0b30f4ce0d2429df33ab7e Mon Sep 17 00:00:00 2001
From: Oleg Pudeyev
Date: Wed, 1 May 2013 17:14:36 -0400
Subject: [PATCH 328/704] [ticket/11435] Fit comment into 80 columns and link
to php manual.
PHPBB3-11435
---
phpBB/includes/template/filter.php | 38 +++++++++++++++++-------------
1 file changed, 22 insertions(+), 16 deletions(-)
diff --git a/phpBB/includes/template/filter.php b/phpBB/includes/template/filter.php
index 9e8ad2fef0..c2c100e93e 100644
--- a/phpBB/includes/template/filter.php
+++ b/phpBB/includes/template/filter.php
@@ -224,28 +224,34 @@ class phpbb_template_filter extends php_user_filter
}
/*
- Preserve whitespace.
- PHP removes a newline after the closing tag (if it's there). This is by design.
+
+ Preserve whitespace.
+ PHP removes a newline after the closing tag (if it's there).
+ This is by design:
+
+ http://www.php.net/manual/en/language.basic-syntax.phpmode.php
+ http://www.php.net/manual/en/language.basic-syntax.instruction-separation.php
- Consider the following template:
+ Consider the following template:
-
- some content
-
+
+ some content
+
- If we were to simply preserve all whitespace, we could simply replace all "?>" tags
- with "?>\n".
- Doing that, would add additional newlines to the compiled tempalte in place of the
- IF and ENDIF statements. These newlines are unwanted (and one is conditional).
- The IF and ENDIF are usually on their own line for ease of reading.
+ If we were to simply preserve all whitespace, we could simply
+ replace all "?>" tags with "?>\n".
+ Doing that, would add additional newlines to the compiled
+ template in place of the IF and ENDIF statements. These
+ newlines are unwanted (and one is conditional). The IF and
+ ENDIF are usually on their own line for ease of reading.
- This replacement preserves newlines only for statements that aren't the only statement on a line.
- It will NOT preserve newlines at the end of statements in the above examle.
- It will preserve newlines in situations like:
-
- inline content
+ This replacement preserves newlines only for statements that
+ are not the only statement on a line. It will NOT preserve
+ newlines at the end of statements in the above example.
+ It will preserve newlines in situations like:
+ inline content
*/
From 6d4a75b3cb9a403d37fe3ac7b3eda5e9c65ad9e0 Mon Sep 17 00:00:00 2001
From: hjpotter92
Date: Thu, 2 May 2013 06:29:32 +0530
Subject: [PATCH 329/704] [ticket/11517] Fix list numbering
PHPBB3-11517
---
phpBB/docs/coding-guidelines.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/docs/coding-guidelines.html b/phpBB/docs/coding-guidelines.html
index cd113a7226..54b8526cdf 100644
--- a/phpBB/docs/coding-guidelines.html
+++ b/phpBB/docs/coding-guidelines.html
@@ -2314,7 +2314,7 @@ if (utf8_case_fold_nfc($string1) == utf8_case_fold_nfc($string2))
-8. Copyright and disclaimer
+7. Copyright and disclaimer
From 07c972f5d71f7aa56d6623774e977ea7958a906e Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Thu, 2 May 2013 15:39:26 -0500
Subject: [PATCH 330/704] [ticket/11413] Remove changes for ticket 11420 from
this branch
PHPBB3-11413
---
.../db/migration/data/310/notifications.php | 64 ++++++++++
tests/notification/convert_test.php | 110 ------------------
tests/notification/fixtures/convert.xml | 52 ---------
3 files changed, 64 insertions(+), 162 deletions(-)
delete mode 100644 tests/notification/convert_test.php
delete mode 100644 tests/notification/fixtures/convert.xml
diff --git a/phpBB/includes/db/migration/data/310/notifications.php b/phpBB/includes/db/migration/data/310/notifications.php
index 17c939d95a..82bfd4cb2d 100644
--- a/phpBB/includes/db/migration/data/310/notifications.php
+++ b/phpBB/includes/db/migration/data/310/notifications.php
@@ -91,6 +91,70 @@ class phpbb_db_migration_data_310_notifications extends phpbb_db_migration
),
)),
array('config.add', array('load_notifications', 1)),
+ array('custom', array(array($this, 'convert_notifications'))),
);
}
+
+ public function convert_notifications()
+ {
+ $convert_notifications = array(
+ array(
+ 'check' => ($this->config['allow_topic_notify']),
+ 'item_type' => 'post',
+ ),
+ array(
+ 'check' => ($this->config['allow_forum_notify']),
+ 'item_type' => 'topic',
+ ),
+ array(
+ 'check' => ($this->config['allow_bookmarks']),
+ 'item_type' => 'bookmark',
+ ),
+ array(
+ 'check' => ($this->config['allow_privmsg']),
+ 'item_type' => 'pm',
+ ),
+ );
+
+ foreach ($convert_notifications as $convert_data)
+ {
+ if ($convert_data['check'])
+ {
+ $sql = 'SELECT user_id, user_notify_type
+ FROM ' . USERS_TABLE . '
+ WHERE user_notify = 1';
+ $result = $this->db->sql_query($sql);
+ while ($row = $this->db->sql_fetchrow($result))
+ {
+ $this->sql_query('INSERT INTO ' . $this->table_prefix . 'user_notifications ' . $this->db->sql_build_array('INSERT', array(
+ 'item_type' => $convert_data['item_type'],
+ 'item_id' => 0,
+ 'user_id' => $row['user_id'],
+ 'method' => '',
+ )));
+
+ if ($row['user_notify_type'] == NOTIFY_EMAIL || $row['user_notify_type'] == NOTIFY_BOTH)
+ {
+ $this->sql_query('INSERT INTO ' . $this->table_prefix . 'user_notifications ' . $this->db->sql_build_array('INSERT', array(
+ 'item_type' => $convert_data['item_type'],
+ 'item_id' => 0,
+ 'user_id' => $row['user_id'],
+ 'method' => 'email',
+ )));
+ }
+
+ if ($row['user_notify_type'] == NOTIFY_IM || $row['user_notify_type'] == NOTIFY_BOTH)
+ {
+ $this->sql_query('INSERT INTO ' . $this->table_prefix . 'user_notifications ' . $this->db->sql_build_array('INSERT', array(
+ 'item_type' => $convert_data['item_type'],
+ 'item_id' => 0,
+ 'user_id' => $row['user_id'],
+ 'method' => 'jabber',
+ )));
+ }
+ }
+ $this->db->sql_freeresult($result);
+ }
+ }
+ }
}
diff --git a/tests/notification/convert_test.php b/tests/notification/convert_test.php
deleted file mode 100644
index ba586b681d..0000000000
--- a/tests/notification/convert_test.php
+++ /dev/null
@@ -1,110 +0,0 @@
-createXMLDataSet(dirname(__FILE__) . '/fixtures/convert.xml');
- }
-
- protected function setUp()
- {
- parent::setUp();
-
- global $phpbb_root_path, $phpEx;
-
- $this->db = $this->new_dbal();
-
- $this->migration = new phpbb_db_migration_data_310_notifications2(
- new phpbb_config(array()),
- $this->db,
- new phpbb_db_tools($this->db),
- $phpbb_root_path,
- $phpEx,
- 'phpbb_'
- );
- }
-
- public function test_convert()
- {
- $buffer = new phpbb_mock_sql_insert_buffer($this->db, 'phpbb_user_notifications');
- $this->migration->perform_conversion($buffer, 'phpbb_user_notifications');
-
- $expected = array_merge(
- $this->create_expected('post', 1, 'email'),
- $this->create_expected('topic', 1, 'email'),
-
- $this->create_expected('post', 2, 'email'),
- $this->create_expected('topic', 2, 'email'),
- $this->create_expected('pm', 2, 'email'),
-
- $this->create_expected('post', 3, 'jabber'),
- $this->create_expected('topic', 3, 'jabber'),
-
- $this->create_expected('post', 4, 'jabber'),
- $this->create_expected('topic', 4, 'jabber'),
- $this->create_expected('pm', 4, 'jabber'),
-
- $this->create_expected('post', 5, 'both'),
- $this->create_expected('topic', 5, 'both'),
-
- $this->create_expected('post', 6, 'both'),
- $this->create_expected('topic', 6, 'both'),
- $this->create_expected('pm', 6, 'both')
- );
-
- $this->assertEquals($expected, $buffer->get_buffer());
- }
-
- protected function create_expected($type, $user_id, $method = '')
- {
- $return = array();
-
- if ($method != '')
- {
- $return[] = array(
- 'item_type' => $type,
- 'item_id' => 0,
- 'user_id' => $user_id,
- 'method' => '',
- 'notify' => 1,
- );
- }
-
- if ($method == 'email' || $method == 'both')
- {
- $return[] = array(
- 'item_type' => $type,
- 'item_id' => 0,
- 'user_id' => $user_id,
- 'method' => 'email',
- 'notify' => 1,
- );
- }
-
- if ($method == 'jabber' || $method == 'both')
- {
- $return[] = array(
- 'item_type' => $type,
- 'item_id' => 0,
- 'user_id' => $user_id,
- 'method' => 'jabber',
- 'notify' => 1,
- );
- }
-
- return $return;
- }
-}
diff --git a/tests/notification/fixtures/convert.xml b/tests/notification/fixtures/convert.xml
deleted file mode 100644
index a244070a95..0000000000
--- a/tests/notification/fixtures/convert.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
- user_id
- username
- username_clean
- user_notify_type
- user_notify_pm
-
- 1
- 1
- 1
- 0
- 0
-
-
- 2
- 2
- 2
- 0
- 1
-
-
- 3
- 3
- 3
- 1
- 0
-
-
- 4
- 4
- 4
- 1
- 1
-
-
- 5
- 5
- 5
- 2
- 0
-
-
- 6
- 6
- 6
- 2
- 1
-
-
-
From bc9b6c3b6c4081b1671224d69f973c923e105675 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Thu, 2 May 2013 15:49:17 -0500
Subject: [PATCH 331/704] [ticket/11413] Correct copyright year
PHPBB3-11413
---
phpBB/includes/db/migration/data/310/notifications2.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/includes/db/migration/data/310/notifications2.php b/phpBB/includes/db/migration/data/310/notifications2.php
index c90944dcc9..f655c6734b 100644
--- a/phpBB/includes/db/migration/data/310/notifications2.php
+++ b/phpBB/includes/db/migration/data/310/notifications2.php
@@ -2,7 +2,7 @@
/**
*
* @package migration
-* @copyright (c) 2012 phpBB Group
+* @copyright (c) 2013 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License v2
*
*/
From 5edae8af1f7d8d94141596b6391c8f967d9694db Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Thu, 2 May 2013 15:52:20 -0500
Subject: [PATCH 332/704] [ticket/11413] Remove conversion of
user_notifications
PHPBB3-11413
---
.../db/migration/data/310/notifications2.php | 90 -------------------
1 file changed, 90 deletions(-)
diff --git a/phpBB/includes/db/migration/data/310/notifications2.php b/phpBB/includes/db/migration/data/310/notifications2.php
index f655c6734b..ce8343089f 100644
--- a/phpBB/includes/db/migration/data/310/notifications2.php
+++ b/phpBB/includes/db/migration/data/310/notifications2.php
@@ -89,94 +89,4 @@ class phpbb_db_migration_data_310_notifications2 extends phpbb_db_migration
),
);
}
-
- public function update_data()
- {
- return array(
- array('custom', array(array($this, 'convert_notifications'))),
- );
- }
-
- public function convert_notifications()
- {
- $insert_table = $this->table_prefix . 'user_notifications';
- $insert_buffer = new phpbb_db_sql_insert_buffer($this->db, $insert_table);
-
- $this->perform_conversion($insert_buffer, $insert_table);
- }
-
- /**
- * Perform the conversion (separate for testability)
- */
- public function perform_conversion($insert_buffer, $insert_table)
- {
- $sql = 'DELETE FROM ' . $insert_table;
- $this->db->sql_query($sql);
-
- $sql = 'SELECT user_id, user_notify_type, user_notify_pm
- FROM ' . USERS_TABLE;
- $result = $this->db->sql_query($sql);
-
- while ($row = $this->db->sql_fetchrow($result))
- {
- $notification_methods = array();
-
- // In-board notification
- $notification_methods[] = '';
-
- if ($row['user_notify_type'] == NOTIFY_EMAIL || $row['user_notify_type'] == NOTIFY_BOTH)
- {
- $notification_methods[] = 'email';
- }
-
- if ($row['user_notify_type'] == NOTIFY_IM || $row['user_notify_type'] == NOTIFY_BOTH)
- {
- $notification_methods[] = 'jabber';
- }
-
- // Notifications for posts
- foreach (array('post', 'topic') as $item_type)
- {
- $this->add_method_rows(
- $insert_buffer,
- $item_type,
- 0,
- $row['user_id'],
- $notification_methods
- );
- }
-
- if ($row['user_notify_pm'])
- {
- // Notifications for private messages
- // User either gets all methods or no method
- $this->add_method_rows(
- $insert_buffer,
- 'pm',
- 0,
- $row['user_id'],
- $notification_methods
- );
- }
- }
- $this->db->sql_freeresult($result);
-
- $insert_buffer->flush();
- }
-
- protected function add_method_rows(phpbb_db_sql_insert_buffer $insert_buffer, $item_type, $item_id, $user_id, array $methods)
- {
- $row_base = array(
- 'item_type' => $item_type,
- 'item_id' => (int) $item_id,
- 'user_id' => (int) $user_id,
- 'notify' => 1
- );
-
- foreach ($methods as $method)
- {
- $row_base['method'] = $method;
- $insert_buffer->insert($row_base);
- }
- }
}
From 77147b53c119706f5fb6ea6036056aed554adf8c Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Fri, 3 May 2013 08:38:00 -0500
Subject: [PATCH 333/704] [ticket/11413] Remove mock sql_insert_buffer.php (not
relevant to PR)
PHPBB3-11413
---
tests/mock/sql_insert_buffer.php | 21 ---------------------
1 file changed, 21 deletions(-)
delete mode 100644 tests/mock/sql_insert_buffer.php
diff --git a/tests/mock/sql_insert_buffer.php b/tests/mock/sql_insert_buffer.php
deleted file mode 100644
index ba09aa8d7f..0000000000
--- a/tests/mock/sql_insert_buffer.php
+++ /dev/null
@@ -1,21 +0,0 @@
-buffer)) ? true : false;
- }
-
- public function get_buffer()
- {
- return $this->buffer;
- }
-}
From 3c76cdeb6701a4aded7a7c39b8c9b44c00b5848a Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Fri, 3 May 2013 08:50:27 -0500
Subject: [PATCH 334/704] [ticket/11413] Remove remaining irrelevant code to
this PR
PHPBB3-11413
---
phpBB/config/notifications.yml | 34 +++++++++++------------
phpBB/includes/notification/type/base.php | 6 ++--
tests/notification/manager_helper.php | 8 ++----
tests/notification/notification_test.php | 4 +--
tests/notification/submit_post_base.php | 2 +-
5 files changed, 26 insertions(+), 28 deletions(-)
diff --git a/phpBB/config/notifications.yml b/phpBB/config/notifications.yml
index c66527941e..60aa63a854 100644
--- a/phpBB/config/notifications.yml
+++ b/phpBB/config/notifications.yml
@@ -19,7 +19,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache
+ - @cache.driver
- @user
- @auth
- @config
@@ -37,7 +37,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache
+ - @cache.driver
- @user
- @auth
- @config
@@ -55,7 +55,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache
+ - @cache.driver
- @user
- @auth
- @config
@@ -73,7 +73,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache
+ - @cache.driver
- @user
- @auth
- @config
@@ -91,7 +91,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache
+ - @cache.driver
- @user
- @auth
- @config
@@ -109,7 +109,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache
+ - @cache.driver
- @user
- @auth
- @config
@@ -127,7 +127,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache
+ - @cache.driver
- @user
- @auth
- @config
@@ -145,7 +145,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache
+ - @cache.driver
- @user
- @auth
- @config
@@ -163,7 +163,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache
+ - @cache.driver
- @user
- @auth
- @config
@@ -181,7 +181,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache
+ - @cache.driver
- @user
- @auth
- @config
@@ -199,7 +199,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache
+ - @cache.driver
- @user
- @auth
- @config
@@ -217,7 +217,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache
+ - @cache.driver
- @user
- @auth
- @config
@@ -235,7 +235,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache
+ - @cache.driver
- @user
- @auth
- @config
@@ -253,7 +253,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache
+ - @cache.driver
- @user
- @auth
- @config
@@ -271,7 +271,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache
+ - @cache.driver
- @user
- @auth
- @config
@@ -289,7 +289,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache
+ - @cache.driver
- @user
- @auth
- @config
@@ -304,7 +304,7 @@ services:
arguments:
- @user_loader
- @dbal.conn
- - @cache
+ - @cache.driver
- @user
- @auth
- @config
diff --git a/phpBB/includes/notification/type/base.php b/phpBB/includes/notification/type/base.php
index 983383ce2a..46517f1c9b 100644
--- a/phpBB/includes/notification/type/base.php
+++ b/phpBB/includes/notification/type/base.php
@@ -30,7 +30,7 @@ abstract class phpbb_notification_type_base implements phpbb_notification_type_i
/** @var phpbb_db_driver */
protected $db;
- /** @var phpbb_cache_service */
+ /** @var phpbb_cache_driver_interface */
protected $cache;
/** @var phpbb_template */
@@ -96,7 +96,7 @@ abstract class phpbb_notification_type_base implements phpbb_notification_type_i
*
* @param phpbb_user_loader $user_loader
* @param phpbb_db_driver $db
- * @param phpbb_cache_service $cache
+ * @param phpbb_cache_driver_interface $cache
* @param phpbb_user $user
* @param phpbb_auth $auth
* @param phpbb_config $config
@@ -107,7 +107,7 @@ abstract class phpbb_notification_type_base implements phpbb_notification_type_i
* @param string $user_notifications_table
* @return phpbb_notification_type_base
*/
- public function __construct(phpbb_user_loader $user_loader, phpbb_db_driver $db, phpbb_cache_service $cache, $user, phpbb_auth $auth, phpbb_config $config, $phpbb_root_path, $php_ext, $notification_types_table, $notifications_table, $user_notifications_table)
+ public function __construct(phpbb_user_loader $user_loader, phpbb_db_driver $db, phpbb_cache_driver_interface $cache, $user, phpbb_auth $auth, phpbb_config $config, $phpbb_root_path, $php_ext, $notification_types_table, $notifications_table, $user_notifications_table)
{
$this->user_loader = $user_loader;
$this->db = $db;
diff --git a/tests/notification/manager_helper.php b/tests/notification/manager_helper.php
index 8d2ce5e002..7a794f922f 100644
--- a/tests/notification/manager_helper.php
+++ b/tests/notification/manager_helper.php
@@ -28,12 +28,10 @@ class phpbb_notification_manager_helper extends phpbb_notification_manager
// Extra dependencies for get_*_class functions
protected $auth = null;
- protected $cache = null;
protected $config = null;
- public function setDependencies($auth, $cache, $config)
+ public function setDependencies($auth, $config)
{
$this->auth = $auth;
- $this->cache = $cache;
$this->config = $config;
}
@@ -44,7 +42,7 @@ class phpbb_notification_manager_helper extends phpbb_notification_manager
{
$item_type = 'phpbb_notification_type_' . $item_type;
- $item = new $item_type($this->user_loader, $this->db, $this->cache, $this->user, $this->auth, $this->config, $this->phpbb_root_path, $this->php_ext, $this->notification_types_table, $this->notifications_table, $this->user_notifications_table);
+ $item = new $item_type($this->user_loader, $this->db, $this->cache->get_driver(), $this->user, $this->auth, $this->config, $this->phpbb_root_path, $this->php_ext, $this->notification_types_table, $this->notifications_table, $this->user_notifications_table);
$item->set_notification_manager($this);
@@ -60,7 +58,7 @@ class phpbb_notification_manager_helper extends phpbb_notification_manager
{
$method_name = 'phpbb_notification_method_' . $method_name;
- $method = new $method_name($this->user_loader, $this->db, $this->cache, $this->user, $this->auth, $this->config, $this->phpbb_root_path, $this->php_ext, $this->notification_types_table, $this->notifications_table, $this->user_notifications_table);
+ $method = new $method_name($this->user_loader, $this->db, $this->cache->get_driver(), $this->user, $this->auth, $this->config, $this->phpbb_root_path, $this->php_ext, $this->notification_types_table, $this->notifications_table, $this->user_notifications_table);
$method->set_notification_manager($this);
diff --git a/tests/notification/notification_test.php b/tests/notification/notification_test.php
index 4ffd3587f1..c342b10a7f 100644
--- a/tests/notification/notification_test.php
+++ b/tests/notification/notification_test.php
@@ -61,7 +61,7 @@ class phpbb_notification_test extends phpbb_database_test_case
'phpbb_user_notifications'
);
- $this->notifications->setDependencies($this->auth, $this->cache, $this->config);
+ $this->notifications->setDependencies($this->auth, $this->config);
$types = array();
foreach (array(
@@ -123,7 +123,7 @@ class phpbb_notification_test extends phpbb_database_test_case
{
$this->assertEquals(3, $this->notifications->get_notification_type_id('fail'));
- $this->fail('Non-existant type should throw exception');
+ $this->fail('Non-existent type should throw an exception');
}
catch (Exception $e) {}
}
diff --git a/tests/notification/submit_post_base.php b/tests/notification/submit_post_base.php
index c3dbfc2535..59daf6c9cb 100644
--- a/tests/notification/submit_post_base.php
+++ b/tests/notification/submit_post_base.php
@@ -106,7 +106,7 @@ class phpbb_notification_submit_post_base extends phpbb_database_test_case
{
$class_name = 'phpbb_notification_type_' . $type;
$class = new $class_name(
- $user_loader, $db, $cache, $user, $auth, $config,
+ $user_loader, $db, $cache->get_driver(), $user, $auth, $config,
$phpbb_root_path, $phpEx,
NOTIFICATION_TYPES_TABLE, NOTIFICATIONS_TABLE, USER_NOTIFICATIONS_TABLE);
From 1b34ddb330d1a666185947ec2325732466f9ce4e Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Fri, 3 May 2013 09:02:50 -0500
Subject: [PATCH 335/704] [ticket/11415] Fix ext.manager constructor in tests
PHPBB3-11415
---
tests/dbal/migrator_test.php | 1 -
tests/extension/metadata_manager_test.php | 1 -
tests/test_framework/phpbb_functional_test_case.php | 1 -
3 files changed, 3 deletions(-)
diff --git a/tests/dbal/migrator_test.php b/tests/dbal/migrator_test.php
index 5fc05f2119..1e40c9c6d6 100644
--- a/tests/dbal/migrator_test.php
+++ b/tests/dbal/migrator_test.php
@@ -63,7 +63,6 @@ class phpbb_dbal_migrator_test extends phpbb_database_test_case
$container,
$this->db,
$this->config,
- $this->migrator,
new phpbb_filesystem(),
'phpbb_ext',
dirname(__FILE__) . '/../../phpBB/',
diff --git a/tests/extension/metadata_manager_test.php b/tests/extension/metadata_manager_test.php
index 92a0ff126c..059b7148da 100644
--- a/tests/extension/metadata_manager_test.php
+++ b/tests/extension/metadata_manager_test.php
@@ -66,7 +66,6 @@ class metadata_manager_test extends phpbb_database_test_case
$container,
$this->db,
$this->config,
- $this->migrator,
new phpbb_filesystem(),
'phpbb_ext',
$this->phpbb_root_path,
diff --git a/tests/test_framework/phpbb_functional_test_case.php b/tests/test_framework/phpbb_functional_test_case.php
index a11c0f72ca..0157706b12 100644
--- a/tests/test_framework/phpbb_functional_test_case.php
+++ b/tests/test_framework/phpbb_functional_test_case.php
@@ -155,7 +155,6 @@ class phpbb_functional_test_case extends phpbb_test_case
$container,
$db,
$config,
- $migrator,
new phpbb_filesystem(),
self::$config['table_prefix'] . 'ext',
dirname(__FILE__) . '/',
From 00d5cde04eb56b53179385c3ada075b1c207c3a3 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Sat, 4 May 2013 14:44:33 +0530
Subject: [PATCH 336/704] [ticket/10325] fix acp language
PHPBB3-10325
---
phpBB/language/en/acp/board.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/language/en/acp/board.php b/phpBB/language/en/acp/board.php
index 1bc8d1cf46..ce15dfefb4 100644
--- a/phpBB/language/en/acp/board.php
+++ b/phpBB/language/en/acp/board.php
@@ -454,7 +454,7 @@ $lang = array_merge($lang, array(
'ALL' => 'All',
'ALLOW_AUTOLOGIN' => 'Allow "Remember Me" logins',
'ALLOW_AUTOLOGIN_EXPLAIN' => 'Determines whether users are given "Remember Me" option when they visit the board.',
- 'ALLOW_PASSWORD_RESET' => 'Allow "Forgot Password"',
+ 'ALLOW_PASSWORD_RESET' => 'Allow password reset ("Forgot Password")',
'ALLOW_PASSWORD_RESET_EXPLAIN' => 'Determines whether or not users are able to use the "I forgot my password" link on the login page to recover their account. If you use an external authentication mechanism you may wish to disable this feature.',
'AUTOLOGIN_LENGTH' => '"Remember Me" login key expiration length (in days)',
'AUTOLOGIN_LENGTH_EXPLAIN' => 'Number of days after which "Remember Me" login keys are removed or zero to disable.',
From 3a30bd2753ab56dd5035ebba8cf42850e41c3728 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Sat, 4 May 2013 18:25:43 +0530
Subject: [PATCH 337/704] [ticket/11288] add search tests cases
PHPBB3-11288
---
tests/search/common_test_case.php | 98 +++++++++++++++++++++++++++++++
1 file changed, 98 insertions(+)
diff --git a/tests/search/common_test_case.php b/tests/search/common_test_case.php
index dd04f7048c..029637b00b 100644
--- a/tests/search/common_test_case.php
+++ b/tests/search/common_test_case.php
@@ -86,6 +86,104 @@ abstract class phpbb_search_common_test_case extends phpbb_search_test_case
array('-fooo', '-baar'),
array(),
),
+ array(
+ 'fooo -fooo',
+ 'all',
+ true,
+ array('fooo', '-fooo'),
+ array(),
+ ),
+ array(
+ 'fooo fooo-',
+ 'all',
+ true,
+ array('fooo', 'fooo'),
+ array(),
+ ),
+ array(
+ '-fooo fooo',
+ 'all',
+ true,
+ array('-fooo', 'fooo'),
+ array(),
+ ),
+ array(
+ 'fooo- fooo',
+ 'all',
+ true,
+ array('fooo', 'fooo'),
+ array(),
+ ),
+ array(
+ 'fooo-baar fooo',
+ 'all',
+ true,
+ array('fooo', 'baar', 'fooo'),
+ array(),
+ ),
+ array(
+ 'fooo-baar -fooo',
+ 'all',
+ true,
+ array('fooo', 'baar', '-fooo'),
+ array(),
+ ),
+ array(
+ 'fooo-baar fooo-',
+ 'all',
+ true,
+ array('fooo', 'baar', 'fooo'),
+ array(),
+ ),
+ array(
+ 'fooo-baar baar',
+ 'all',
+ true,
+ array('fooo', 'baar', 'baar'),
+ array(),
+ ),
+ array(
+ 'fooo-baar -baar',
+ 'all',
+ true,
+ array('fooo', 'baar', '-baar'),
+ array(),
+ ),
+ array(
+ 'fooo-baar baar-',
+ 'all',
+ true,
+ array('fooo', 'baar', 'baar'),
+ array(),
+ ),
+ array(
+ 'fooo-baar fooo-baar',
+ 'all',
+ true,
+ array('fooo', 'baar', 'fooo', 'baar'),
+ array(),
+ ),
+ array(
+ 'fooo-baar -fooo-baar',
+ 'all',
+ true,
+ array('fooo', 'baar', '-fooo', 'baar'),
+ array(),
+ ),
+ array(
+ 'fooo-baar fooo-baar-',
+ 'all',
+ true,
+ array('fooo', 'baar', 'fooo', 'baar'),
+ array(),
+ ),
+ array(
+ 'fooo-baar-baaz',
+ 'all',
+ true,
+ array('fooo', 'baar', 'baaz'),
+ array(),
+ ),
);
}
From bfdc6e19300da8fa62d8661fcbd92548a2d2cf97 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Sat, 4 May 2013 18:56:52 +0530
Subject: [PATCH 338/704] [ticket/11288] fix regex in postgres
Postgres search backend now uses updated regex being used by
mysql search backend.
PHPBB3-11288
---
phpBB/includes/search/fulltext_postgres.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/includes/search/fulltext_postgres.php b/phpBB/includes/search/fulltext_postgres.php
index eeb628b18f..5080587681 100644
--- a/phpBB/includes/search/fulltext_postgres.php
+++ b/phpBB/includes/search/fulltext_postgres.php
@@ -214,7 +214,7 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
{
if ($terms == 'all')
{
- $match = array('#\sand\s#iu', '#\sor\s#iu', '#\snot\s#iu', '#\+#', '#-#', '#\|#');
+ $match = array('#\sand\s#iu', '#\sor\s#iu', '#\snot\s#iu', '#(^|\s)\+#', '#(^|\s)-#', '#(^|\s)\|#');
$replace = array(' +', ' |', ' -', ' +', ' -', ' |');
$keywords = preg_replace($match, $replace, $keywords);
From 9608d9bf1e4ed23c36496612a6ffb63072c32371 Mon Sep 17 00:00:00 2001
From: Nathaniel Guse
Date: Sat, 4 May 2013 11:45:49 -0500
Subject: [PATCH 339/704] [ticket/11519] Rename test event template file
As requested by Oleg
https://github.com/phpbb/phpbb3/pull/1340#issuecomment-17306967
PHPBB3-11519
---
.../{variable_spacing.html => event_variable_spacing.html} | 0
.../ext_trivial/styles/silver/template/variable_spacing.html | 2 +-
2 files changed, 1 insertion(+), 1 deletion(-)
rename tests/template/datasets/ext_trivial/ext/trivial/styles/all/template/{variable_spacing.html => event_variable_spacing.html} (100%)
diff --git a/tests/template/datasets/ext_trivial/ext/trivial/styles/all/template/variable_spacing.html b/tests/template/datasets/ext_trivial/ext/trivial/styles/all/template/event_variable_spacing.html
similarity index 100%
rename from tests/template/datasets/ext_trivial/ext/trivial/styles/all/template/variable_spacing.html
rename to tests/template/datasets/ext_trivial/ext/trivial/styles/all/template/event_variable_spacing.html
diff --git a/tests/template/datasets/ext_trivial/styles/silver/template/variable_spacing.html b/tests/template/datasets/ext_trivial/styles/silver/template/variable_spacing.html
index ad05e6f661..49d8a6b873 100644
--- a/tests/template/datasets/ext_trivial/styles/silver/template/variable_spacing.html
+++ b/tests/template/datasets/ext_trivial/styles/silver/template/variable_spacing.html
@@ -1 +1 @@
-
+
From 153be855ca8fdee9549be9f51f940a385a0b4e03 Mon Sep 17 00:00:00 2001
From: Matt Friedman
Date: Mon, 6 May 2013 09:49:37 -0700
Subject: [PATCH 340/704] [ticket/10155] Update copyright in new migration file
to 2013
PHPBB3-10155
---
phpBB/includes/db/migration/data/310/jquery_update.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/phpBB/includes/db/migration/data/310/jquery_update.php b/phpBB/includes/db/migration/data/310/jquery_update.php
index bb0c48550a..dc49f74fcb 100644
--- a/phpBB/includes/db/migration/data/310/jquery_update.php
+++ b/phpBB/includes/db/migration/data/310/jquery_update.php
@@ -2,7 +2,7 @@
/**
*
* @package migration
-* @copyright (c) 2012 phpBB Group
+* @copyright (c) 2013 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License v2
*
*/
From 828d3b6b68acad606fe150cff7993c216ebc4474 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ga=C3=ABtan=20Muller?=
Date: Sun, 21 Apr 2013 14:22:45 +0200
Subject: [PATCH 341/704] [ticket/11144] Add missing {FORUM_NAME} variable
The template variable {FORUM_NAME} was missing from
the login page of a password protected forum
PHPBB3-11144
---
phpBB/docs/coding-guidelines.html | 2 +
phpBB/download/file.php | 2 +-
phpBB/includes/functions.php | 1 +
phpBB/includes/ucp/ucp_pm_compose.php | 11 ++---
phpBB/posting.php | 1 +
.../prosilver/template/login_forum.html | 43 +++++++++++--------
.../subsilver2/template/login_forum.html | 8 ++++
7 files changed, 41 insertions(+), 27 deletions(-)
diff --git a/phpBB/docs/coding-guidelines.html b/phpBB/docs/coding-guidelines.html
index cd113a7226..38f11534d2 100644
--- a/phpBB/docs/coding-guidelines.html
+++ b/phpBB/docs/coding-guidelines.html
@@ -956,6 +956,8 @@ $action_ary = request_var('action', array('' => 0));
Login checks/redirection:
To show a forum login box use login_forum_box($forum_data)
, else use the login_box()
function.
+ $forum_data
should contain at least the forum_id
and forum_password
fields. If the field forum_name
is available, then it is displayed on the forum login page.
+
The login_box()
function can have a redirect as the first parameter. As a thumb of rule, specify an empty string if you want to redirect to the users current location, else do not add the $SID
to the redirect string (for example within the ucp/login we redirect to the board index because else the user would be redirected to the login screen).
Sensitive Operations:
diff --git a/phpBB/download/file.php b/phpBB/download/file.php
index bf277c69fa..3ceb1ee0cc 100644
--- a/phpBB/download/file.php
+++ b/phpBB/download/file.php
@@ -170,7 +170,7 @@ else
if (!$attachment['in_message'])
{
//
- $sql = 'SELECT p.forum_id, f.forum_password, f.parent_id
+ $sql = 'SELECT p.forum_id, f.forum_name, f.forum_password, f.parent_id
FROM ' . POSTS_TABLE . ' p, ' . FORUMS_TABLE . ' f
WHERE p.post_id = ' . $attachment['post_msg_id'] . '
AND p.forum_id = f.forum_id';
diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php
index ccd2d3147c..98a1dab722 100644
--- a/phpBB/includes/functions.php
+++ b/phpBB/includes/functions.php
@@ -3272,6 +3272,7 @@ function login_forum_box($forum_data)
page_header($user->lang['LOGIN'], false);
$template->assign_vars(array(
+ 'FORUM_NAME' => isset($forum_data['forum_name']) ? $forum_data['forum_name'] : '',
'S_LOGIN_ACTION' => build_url(array('f')),
'S_HIDDEN_FIELDS' => build_hidden_fields(array('f' => $forum_data['forum_id'])))
);
diff --git a/phpBB/includes/ucp/ucp_pm_compose.php b/phpBB/includes/ucp/ucp_pm_compose.php
index 8e82188aff..d7509a1072 100644
--- a/phpBB/includes/ucp/ucp_pm_compose.php
+++ b/phpBB/includes/ucp/ucp_pm_compose.php
@@ -271,19 +271,16 @@ function compose_pm($id, $mode, $action, $user_folders = array())
// Passworded forum?
if ($post['forum_id'])
{
- $sql = 'SELECT forum_password
+ $sql = 'SELECT forum_id, forum_name, forum_password
FROM ' . FORUMS_TABLE . '
WHERE forum_id = ' . (int) $post['forum_id'];
$result = $db->sql_query($sql);
- $forum_password = (string) $db->sql_fetchfield('forum_password');
+ $forum_data = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
- if ($forum_password)
+ if (!empty($forum_data['forum_password']))
{
- login_forum_box(array(
- 'forum_id' => $post['forum_id'],
- 'forum_password' => $forum_password,
- ));
+ login_forum_box($forum_data);
}
}
}
diff --git a/phpBB/posting.php b/phpBB/posting.php
index e57f5420f5..b351f67218 100644
--- a/phpBB/posting.php
+++ b/phpBB/posting.php
@@ -196,6 +196,7 @@ if ($post_data['forum_password'])
{
login_forum_box(array(
'forum_id' => $forum_id,
+ 'forum_name' => $post_data['forum_name'],
'forum_password' => $post_data['forum_password'])
);
}
diff --git a/phpBB/styles/prosilver/template/login_forum.html b/phpBB/styles/prosilver/template/login_forum.html
index a342a9aa24..81a83b6340 100644
--- a/phpBB/styles/prosilver/template/login_forum.html
+++ b/phpBB/styles/prosilver/template/login_forum.html
@@ -1,31 +1,36 @@
-{L_LOGIN} {FORUM_NAME}
+
From 1834ceb614a1bf82aa0369a2b731475a82abfade Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Wed, 8 May 2013 00:08:35 +0200
Subject: [PATCH 344/704] [ticket/11442] Use button name as indicator instead
of css classes
This leaves it up to the style authors how to style any buttons, without
messing up any functionality.
PHPBB3-11442
---
phpBB/assets/javascript/core.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js
index 8bbea8b8c9..642d513cb6 100644
--- a/phpBB/assets/javascript/core.js
+++ b/phpBB/assets/javascript/core.js
@@ -136,7 +136,7 @@ phpbb.confirm = function(msg, callback, fadedark) {
});
var clickHandler = function(e) {
- var res = this.className === 'button1';
+ var res = this.name === 'confirm';
var fade = (typeof fadedark !== 'undefined' && !fadedark && res) ? div : dark;
fade.fadeOut(phpbb.alertTime, function() {
div.hide();
@@ -164,11 +164,11 @@ phpbb.confirm = function(msg, callback, fadedark) {
$(document).bind('keydown', function(e) {
if (e.keyCode === keymap.ENTER) {
- $('input[type="button"].button1').trigger('click');
+ $('input[name="confirm"]').trigger('click');
e.preventDefault();
e.stopPropagation();
} else if (e.keyCode === keymap.ESC) {
- $('input[type="button"].button2').trigger('click');
+ $('input[name="cancel"]').trigger('click');
e.preventDefault();
e.stopPropagation();
}
From b63a148e088572fd2b410705442aa575b8fe538f Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Mon, 18 Mar 2013 17:09:12 +0100
Subject: [PATCH 345/704] [ticket/11450] Remove unused $db and $phpEx from
metadata_manager construct()
PHPBB3-11450
---
phpBB/includes/extension/metadata_manager.php | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/phpBB/includes/extension/metadata_manager.php b/phpBB/includes/extension/metadata_manager.php
index 1637abd340..5f16a5bcd5 100644
--- a/phpBB/includes/extension/metadata_manager.php
+++ b/phpBB/includes/extension/metadata_manager.php
@@ -22,9 +22,7 @@ if (!defined('IN_PHPBB'))
*/
class phpbb_extension_metadata_manager
{
- protected $phpEx;
protected $extension_manager;
- protected $db;
protected $phpbb_root_path;
protected $template;
protected $ext_name;
@@ -34,17 +32,13 @@ class phpbb_extension_metadata_manager
/**
* Creates the metadata manager
*
- * @param phpbb_db_driver $db A database connection
* @param string $extension_manager An instance of the phpbb extension 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_extension_manager $extension_manager, $phpbb_root_path, phpbb_template $template, phpbb_config $config)
{
$this->phpbb_root_path = $phpbb_root_path;
- $this->db = $db;
$this->config = $config;
- $this->phpEx = $phpEx;
$this->template = $template;
$this->extension_manager = $extension_manager;
$this->ext_name = $ext_name;
From 5794b3d621b9d48b9bf7dcdcc7cc15585bddd021 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Mon, 18 Mar 2013 23:02:24 +0100
Subject: [PATCH 346/704] [ticket/11450] Sort parameters alphabetically
PHPBB3-11450
---
phpBB/includes/extension/metadata_manager.php | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/phpBB/includes/extension/metadata_manager.php b/phpBB/includes/extension/metadata_manager.php
index 5f16a5bcd5..030e1bdb9d 100644
--- a/phpBB/includes/extension/metadata_manager.php
+++ b/phpBB/includes/extension/metadata_manager.php
@@ -35,12 +35,13 @@ class phpbb_extension_metadata_manager
* @param string $extension_manager An instance of the phpbb extension manager
* @param string $phpbb_root_path Path to the phpbb includes directory.
*/
- public function __construct($ext_name, phpbb_extension_manager $extension_manager, $phpbb_root_path, phpbb_template $template, phpbb_config $config)
+ public function __construct($ext_name, phpbb_config $config, phpbb_extension_manager $extension_manager, phpbb_template $template, $phpbb_root_path)
{
- $this->phpbb_root_path = $phpbb_root_path;
$this->config = $config;
- $this->template = $template;
$this->extension_manager = $extension_manager;
+ $this->template = $template;
+ $this->phpbb_root_path = $phpbb_root_path;
+
$this->ext_name = $ext_name;
$this->metadata = array();
$this->metadata_file = '';
From 001e3ebe9e9534ba0f05dd3a391a2a163a77347a Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Mon, 18 Mar 2013 23:09:37 +0100
Subject: [PATCH 347/704] [ticket/11450] Fix doc blocks and add missing class
var $config
PHPBB3-11450
---
phpBB/includes/extension/metadata_manager.php | 44 +++++++++++++++++--
1 file changed, 41 insertions(+), 3 deletions(-)
diff --git a/phpBB/includes/extension/metadata_manager.php b/phpBB/includes/extension/metadata_manager.php
index 030e1bdb9d..14b77c085b 100644
--- a/phpBB/includes/extension/metadata_manager.php
+++ b/phpBB/includes/extension/metadata_manager.php
@@ -22,18 +22,56 @@ if (!defined('IN_PHPBB'))
*/
class phpbb_extension_metadata_manager
{
+ /**
+ * phpBB Config instance
+ * @var phpbb_config
+ */
+ protected $config;
+
+ /**
+ * phpBB Extension Manager
+ * @var phpbb_extension_manager
+ */
protected $extension_manager;
- protected $phpbb_root_path;
+
+ /**
+ * phpBB Template instance
+ * @var phpbb_template
+ */
protected $template;
+
+ /**
+ * phpBB root path
+ * @var string
+ */
+ protected $phpbb_root_path;
+
+ /**
+ * Name (including vendor) of the extension
+ * @var string
+ */
protected $ext_name;
+
+ /**
+ * Metadata from the composer.json file
+ * @var array
+ */
protected $metadata;
+
+ /**
+ * Link (including root path) to the metadata file
+ * @var string
+ */
protected $metadata_file;
/**
* Creates the metadata manager
*
- * @param string $extension_manager An instance of the phpbb extension manager
- * @param string $phpbb_root_path Path to the phpbb includes directory.
+ * @param string $ext_name Name (including vendor) of the extension
+ * @param phpbb_config $config phpBB Config instance
+ * @param phpbb_extension_manager $extension_manager An instance of the phpBBb extension manager
+ * @param phpbb_template $template phpBB Template instance
+ * @param string $phpbb_root_path Path to the phpbb includes directory.
*/
public function __construct($ext_name, phpbb_config $config, phpbb_extension_manager $extension_manager, phpbb_template $template, $phpbb_root_path)
{
From 62f35121d948bd177004628a4be2b4e8810a50bd Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Mon, 18 Mar 2013 23:15:27 +0100
Subject: [PATCH 348/704] [ticket/11450] Fix all instances of
phpbb_extension_metadata_manager
PHPBB3-11450
---
phpBB/includes/acp/acp_extensions.php | 2 +-
phpBB/includes/extension/manager.php | 2 +-
tests/extension/metadata_manager_test.php | 6 ++----
3 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php
index e4defa0400..c52e4e0473 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, $config, $phpbb_extension_manager, $template, $phpbb_root_path);
try
{
diff --git a/phpBB/includes/extension/manager.php b/phpBB/includes/extension/manager.php
index a1022762b8..653117adfa 100644
--- a/phpBB/includes/extension/manager.php
+++ b/phpBB/includes/extension/manager.php
@@ -155,7 +155,7 @@ class phpbb_extension_manager
*/
public function create_extension_metadata_manager($name, phpbb_template $template)
{
- return new phpbb_extension_metadata_manager($name, $this->db, $this, $this->phpbb_root_path, $this->php_ext, $template, $this->config);
+ return new phpbb_extension_metadata_manager($name, $this->config, $this, $template, $this->phpbb_root_path);
}
/**
diff --git a/tests/extension/metadata_manager_test.php b/tests/extension/metadata_manager_test.php
index 05d1cbccc3..8873d25c9c 100644
--- a/tests/extension/metadata_manager_test.php
+++ b/tests/extension/metadata_manager_test.php
@@ -422,12 +422,10 @@ class metadata_manager_test extends phpbb_database_test_case
{
return new phpbb_extension_metadata_manager_test(
$ext_name,
- $this->db,
+ $this->config,
$this->extension_manager,
- $this->phpbb_root_path,
- $this->phpEx,
$this->template,
- $this->config
+ $this->phpbb_root_path
);
}
}
From 269c2ce98de5b55a713e998aacdaa5500d32b617 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 21 Mar 2013 15:19:26 +0100
Subject: [PATCH 349/704] [ticket/11450] Test the extensions details page in
ACP Customise Tab
PHPBB3-11450
---
.../fixtures/ext/foo/bar/composer.json | 23 ++++
tests/functional/metadata_manager_test.php | 104 ++++++++++++++++++
2 files changed, 127 insertions(+)
create mode 100644 tests/functional/fixtures/ext/foo/bar/composer.json
create mode 100644 tests/functional/metadata_manager_test.php
diff --git a/tests/functional/fixtures/ext/foo/bar/composer.json b/tests/functional/fixtures/ext/foo/bar/composer.json
new file mode 100644
index 0000000000..50a8a7358a
--- /dev/null
+++ b/tests/functional/fixtures/ext/foo/bar/composer.json
@@ -0,0 +1,23 @@
+{
+ "name": "foo/bar",
+ "type": "phpbb3-extension",
+ "description": "Testing extensions",
+ "homepage": "",
+ "version": "1.0.0",
+ "time": "2013-03-21 01:01:01",
+ "licence": "GPL-2.0",
+ "authors": [{
+ "name": "Joas Schilling",
+ "username": "nickvergessen",
+ "email": "nickvergessen@phpbb.com",
+ "homepage": "http://www.phpbb.com",
+ "role": "Developer"
+ }],
+ "require": {
+ "php": ">=5.3",
+ "phpbb": ">=3.1.0-dev"
+ },
+ "extra": {
+ "display-name": "phpBB 3.1 Extension Testing"
+ }
+}
\ No newline at end of file
diff --git a/tests/functional/metadata_manager_test.php b/tests/functional/metadata_manager_test.php
new file mode 100644
index 0000000000..0f5b49f01e
--- /dev/null
+++ b/tests/functional/metadata_manager_test.php
@@ -0,0 +1,104 @@
+phpbb_extension_manager = $this->get_extension_manager();
+
+ $this->purge_cache();
+ $this->phpbb_extension_manager->enable('foo/bar');
+
+ $this->login();
+ $this->admin_login();
+ $this->add_lang('acp/extensions');
+ }
+
+ public function test_extensions_list()
+ {
+ $crawler = $this->request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid);
+ $this->assert_response_success();
+
+ $this->assertContains($this->lang('EXTENSIONS_EXPLAIN'), $this->client->getResponse()->getContent());
+ $this->assertContains('phpBB 3.1 Extension Testing', $this->client->getResponse()->getContent());
+ $this->assertContains('Details', $this->client->getResponse()->getContent());
+ }
+
+ public function test_permissions_tab()
+ {
+ $crawler = $this->request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=details&ext_name=foo%2Fbar&sid=' . $this->sid);
+ $this->assert_response_success();
+
+ // Test whether the details are displayed
+ $this->assertContains($this->lang('CLEAN_NAME'), $this->client->getResponse()->getContent());
+ $this->assertContains('foo/bar', $this->client->getResponse()->getContent());
+
+ // Details should be html escaped
+ $this->assertContains($this->lang('PHP_VERSION'), $this->client->getResponse()->getContent());
+ $this->assertContains('>=5.3', $this->client->getResponse()->getContent());
+ }
+}
From 0de153d9034720745eb3589b95953de9a185360d Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 21 Mar 2013 15:27:15 +0100
Subject: [PATCH 350/704] [ticket/11450] Add test for unexisting composer.json
PHPBB3-11450
---
tests/functional/metadata_manager_test.php | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/tests/functional/metadata_manager_test.php b/tests/functional/metadata_manager_test.php
index 0f5b49f01e..deb8af7707 100644
--- a/tests/functional/metadata_manager_test.php
+++ b/tests/functional/metadata_manager_test.php
@@ -88,7 +88,7 @@ class phpbb_functional_metadata_manager_test extends phpbb_functional_test_case
$this->assertContains('Details', $this->client->getResponse()->getContent());
}
- public function test_permissions_tab()
+ public function test_extensions_details()
{
$crawler = $this->request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=details&ext_name=foo%2Fbar&sid=' . $this->sid);
$this->assert_response_success();
@@ -101,4 +101,13 @@ class phpbb_functional_metadata_manager_test extends phpbb_functional_test_case
$this->assertContains($this->lang('PHP_VERSION'), $this->client->getResponse()->getContent());
$this->assertContains('>=5.3', $this->client->getResponse()->getContent());
}
+
+ public function test_extensions_details_notexists()
+ {
+ $crawler = $this->request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=details&ext_name=not%2Fexists&sid=' . $this->sid);
+ $this->assert_response_success();
+
+ // Error message because the files do not exist
+ $this->assertContains('The required file does not exist:', $this->client->getResponse()->getContent());
+ }
}
From a44a35926f9535c8d0d6afaeef6eeaf64a7f470e Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Mon, 1 Apr 2013 11:17:05 +0200
Subject: [PATCH 351/704] [ticket/11450] Require db_tools file to be included
PHPBB3-11450
---
tests/extension/metadata_manager_test.php | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tests/extension/metadata_manager_test.php b/tests/extension/metadata_manager_test.php
index 8873d25c9c..24b2861079 100644
--- a/tests/extension/metadata_manager_test.php
+++ b/tests/extension/metadata_manager_test.php
@@ -7,6 +7,8 @@
*
*/
+require_once dirname(__FILE__) . '/../../phpBB/includes/db/db_tools.php';
+
class metadata_manager_test extends phpbb_database_test_case
{
protected $class_loader;
From 74f3161b4b555f5ef5482c95a919aae468312142 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Mon, 1 Apr 2013 11:18:46 +0200
Subject: [PATCH 352/704] [ticket/11450] Fix tests class name
PHPBB3-11450
---
tests/extension/metadata_manager_test.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/extension/metadata_manager_test.php b/tests/extension/metadata_manager_test.php
index 24b2861079..7b51f2d50f 100644
--- a/tests/extension/metadata_manager_test.php
+++ b/tests/extension/metadata_manager_test.php
@@ -9,7 +9,7 @@
require_once dirname(__FILE__) . '/../../phpBB/includes/db/db_tools.php';
-class metadata_manager_test extends phpbb_database_test_case
+class phpbb_extension_metadata_manager_test extends phpbb_database_test_case
{
protected $class_loader;
protected $extension_manager;
From d75af4109ff4a2323e1561f3376b4ef0515977cc Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Mon, 1 Apr 2013 11:20:34 +0200
Subject: [PATCH 353/704] [ticket/11450] Add new line at end of file
PHPBB3-11450
---
tests/functional/fixtures/ext/foo/bar/composer.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/functional/fixtures/ext/foo/bar/composer.json b/tests/functional/fixtures/ext/foo/bar/composer.json
index 50a8a7358a..067a9d38eb 100644
--- a/tests/functional/fixtures/ext/foo/bar/composer.json
+++ b/tests/functional/fixtures/ext/foo/bar/composer.json
@@ -20,4 +20,4 @@
"extra": {
"display-name": "phpBB 3.1 Extension Testing"
}
-}
\ No newline at end of file
+}
From 65c407044e77568ddcd80648830b8caf8fb3dd4a Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Thu, 4 Apr 2013 21:36:32 +0200
Subject: [PATCH 354/704] [ticket/11450] Move mocked class into
mock/metadata_manager.php
PHPBB3-11450
---
tests/extension/metadata_manager_test.php | 17 ++---------------
tests/mock/metadata_manager.php | 21 +++++++++++++++++++++
2 files changed, 23 insertions(+), 15 deletions(-)
create mode 100644 tests/mock/metadata_manager.php
diff --git a/tests/extension/metadata_manager_test.php b/tests/extension/metadata_manager_test.php
index 7b51f2d50f..2f38a26217 100644
--- a/tests/extension/metadata_manager_test.php
+++ b/tests/extension/metadata_manager_test.php
@@ -418,11 +418,11 @@ class phpbb_extension_metadata_manager_test extends phpbb_database_test_case
* Get an instance of the metadata manager
*
* @param string $ext_name
- * @return phpbb_extension_metadata_manager_test
+ * @return phpbb_mock_metadata_manager
*/
private function get_metadata_manager($ext_name)
{
- return new phpbb_extension_metadata_manager_test(
+ return new phpbb_mock_metadata_manager(
$ext_name,
$this->config,
$this->extension_manager,
@@ -431,16 +431,3 @@ class phpbb_extension_metadata_manager_test extends phpbb_database_test_case
);
}
}
-
-class phpbb_extension_metadata_manager_test extends phpbb_extension_metadata_manager
-{
- public function set_metadata($metadata)
- {
- $this->metadata = $metadata;
- }
-
- public function merge_metadata($metadata)
- {
- $this->metadata = array_merge($this->metadata, $metadata);
- }
-}
\ No newline at end of file
diff --git a/tests/mock/metadata_manager.php b/tests/mock/metadata_manager.php
new file mode 100644
index 0000000000..a7fbf0681c
--- /dev/null
+++ b/tests/mock/metadata_manager.php
@@ -0,0 +1,21 @@
+metadata = $metadata;
+ }
+
+ public function merge_metadata($metadata)
+ {
+ $this->metadata = array_merge($this->metadata, $metadata);
+ }
+}
From 4c9c1d8c02142315d88bb7aaee2f64015c5033b7 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Fri, 12 Apr 2013 16:29:59 +0200
Subject: [PATCH 355/704] [ticket/11450] Use helpers to copy/remove files
PHPBB3-11450
---
tests/functional/metadata_manager_test.php | 44 +++++++++++-----------
1 file changed, 21 insertions(+), 23 deletions(-)
diff --git a/tests/functional/metadata_manager_test.php b/tests/functional/metadata_manager_test.php
index deb8af7707..c639cad809 100644
--- a/tests/functional/metadata_manager_test.php
+++ b/tests/functional/metadata_manager_test.php
@@ -7,6 +7,8 @@
*
*/
+require_once dirname(__FILE__) . '/../../phpBB/includes/db/db_tools.php';
+
/**
* @group functional
*/
@@ -14,8 +16,10 @@ class phpbb_functional_metadata_manager_test extends phpbb_functional_test_case
{
protected $phpbb_extension_manager;
+ static private $helpers;
+
static protected $fixtures = array(
- 'foo/bar/composer.json',
+ 'foo/bar/',
);
/**
@@ -27,23 +31,16 @@ class phpbb_functional_metadata_manager_test extends phpbb_functional_test_case
global $phpbb_root_path;
parent::setUpBeforeClass();
- $directories = array(
- $phpbb_root_path . 'ext/foo/bar/',
- );
+ self::$helpers = new phpbb_test_case_helpers(self);
- foreach ($directories as $dir)
+ if (!file_exists($phpbb_root_path . 'ext/foo/bar/'))
{
- if (!is_dir($dir))
- {
- mkdir($dir, 0777, true);
- }
+ self::$helpers->makedirs($phpbb_root_path . 'ext/foo/bar/');
}
foreach (self::$fixtures as $fixture)
{
- copy(
- "tests/functional/fixtures/ext/$fixture",
- "{$phpbb_root_path}ext/$fixture");
+ self::$helpers->copy_dir(dirname(__FILE__) . '/fixtures/ext/' . $fixture, $phpbb_root_path . 'ext/' . $fixture);
}
}
@@ -57,11 +54,9 @@ class phpbb_functional_metadata_manager_test extends phpbb_functional_test_case
foreach (self::$fixtures as $fixture)
{
- unlink("{$phpbb_root_path}ext/$fixture");
+ self::$helpers->empty_dir($phpbb_root_path . 'ext/' . $fixture);
}
-
- rmdir("{$phpbb_root_path}ext/foo/bar");
- rmdir("{$phpbb_root_path}ext/foo");
+ self::$helpers->empty_dir($phpbb_root_path . 'ext/foo/');
}
public function setUp()
@@ -83,9 +78,9 @@ class phpbb_functional_metadata_manager_test extends phpbb_functional_test_case
$crawler = $this->request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid);
$this->assert_response_success();
- $this->assertContains($this->lang('EXTENSIONS_EXPLAIN'), $this->client->getResponse()->getContent());
- $this->assertContains('phpBB 3.1 Extension Testing', $this->client->getResponse()->getContent());
- $this->assertContains('Details', $this->client->getResponse()->getContent());
+ $this->assertContains($this->lang('EXTENSIONS_EXPLAIN'), $crawler->filter('#page-body')->text());
+ $this->assertContains('phpBB 3.1 Extension Testing', $crawler->filter('#page-body')->text());
+ $this->assertContains('Details', $crawler->filter('#page-body')->text());
}
public function test_extensions_details()
@@ -94,11 +89,14 @@ class phpbb_functional_metadata_manager_test extends phpbb_functional_test_case
$this->assert_response_success();
// Test whether the details are displayed
- $this->assertContains($this->lang('CLEAN_NAME'), $this->client->getResponse()->getContent());
- $this->assertContains('foo/bar', $this->client->getResponse()->getContent());
+ $this->assertContains($this->lang('CLEAN_NAME'), $crawler->filter('#page-body')->text());
+ $this->assertContains('foo/bar', $crawler->filter('#page-body')->text());
// Details should be html escaped
- $this->assertContains($this->lang('PHP_VERSION'), $this->client->getResponse()->getContent());
+ $this->assertContains($this->lang('PHP_VERSION'), $crawler->filter('#page-body')->text());
+ // The Crawler parses the text, so we can not see whether it was escaped anymore
+ // To test this, we grab the content of the response directly
+ // $this->assertContains('>=5.3', $$crawler->filter('#page-body')->text());
$this->assertContains('>=5.3', $this->client->getResponse()->getContent());
}
@@ -108,6 +106,6 @@ class phpbb_functional_metadata_manager_test extends phpbb_functional_test_case
$this->assert_response_success();
// Error message because the files do not exist
- $this->assertContains('The required file does not exist:', $this->client->getResponse()->getContent());
+ $this->assertContains('The required file does not exist:', $crawler->filter('#page-body')->text());
}
}
From 54680b9709ab2288408cbb0ddc7737e93d41de18 Mon Sep 17 00:00:00 2001
From: Joas Schilling
Date: Fri, 3 May 2013 15:52:16 +0200
Subject: [PATCH 356/704] [ticket/11450] Limit scopes of filters and add better
docs
PHPBB3-11450
---
tests/functional/metadata_manager_test.php | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/tests/functional/metadata_manager_test.php b/tests/functional/metadata_manager_test.php
index c639cad809..0125886e04 100644
--- a/tests/functional/metadata_manager_test.php
+++ b/tests/functional/metadata_manager_test.php
@@ -78,9 +78,9 @@ class phpbb_functional_metadata_manager_test extends phpbb_functional_test_case
$crawler = $this->request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid);
$this->assert_response_success();
- $this->assertContains($this->lang('EXTENSIONS_EXPLAIN'), $crawler->filter('#page-body')->text());
- $this->assertContains('phpBB 3.1 Extension Testing', $crawler->filter('#page-body')->text());
- $this->assertContains('Details', $crawler->filter('#page-body')->text());
+ $this->assertContains($this->lang('EXTENSIONS_EXPLAIN'), $crawler->filter('#main')->text());
+ $this->assertContains('phpBB 3.1 Extension Testing', $crawler->filter('#main')->text());
+ $this->assertContains('Details', $crawler->filter('#main')->text());
}
public function test_extensions_details()
@@ -89,15 +89,15 @@ class phpbb_functional_metadata_manager_test extends phpbb_functional_test_case
$this->assert_response_success();
// Test whether the details are displayed
- $this->assertContains($this->lang('CLEAN_NAME'), $crawler->filter('#page-body')->text());
- $this->assertContains('foo/bar', $crawler->filter('#page-body')->text());
+ $this->assertContains($this->lang('CLEAN_NAME'), $crawler->filter('#main')->text());
+ $this->assertContains('foo/bar', $crawler->filter('#meta_name')->text());
+ $this->assertContains($this->lang('PHP_VERSION'), $crawler->filter('#main')->text());
+ $this->assertContains('>=5.3', $crawler->filter('#require_php')->text());
// Details should be html escaped
- $this->assertContains($this->lang('PHP_VERSION'), $crawler->filter('#page-body')->text());
- // The Crawler parses the text, so we can not see whether it was escaped anymore
- // To test this, we grab the content of the response directly
- // $this->assertContains('>=5.3', $$crawler->filter('#page-body')->text());
- $this->assertContains('>=5.3', $this->client->getResponse()->getContent());
+ // However, text() only returns the displayed text, so HTML Special Chars are decoded.
+ // So we test this directly on the content of the response.
+ $this->assertContains('>=5.3
', $this->client->getResponse()->getContent());
}
public function test_extensions_details_notexists()
@@ -106,6 +106,6 @@ class phpbb_functional_metadata_manager_test extends phpbb_functional_test_case
$this->assert_response_success();
// Error message because the files do not exist
- $this->assertContains('The required file does not exist:', $crawler->filter('#page-body')->text());
+ $this->assertContains('The required file does not exist:', $crawler->filter('#main')->text());
}
}
From 284011ebf256bffb9544493c7b82f90eeff4ae39 Mon Sep 17 00:00:00 2001
From: Dhruv
Date: Wed, 8 May 2013 17:04:03 +0530
Subject: [PATCH 357/704] [ticket/10325] move migration into a new file
PHPBB3-10325
---
phpBB/includes/db/migration/data/310/dev.php | 2 --
.../db/migration/data/310/forgot_password.php | 28 +++++++++++++++++++
2 files changed, 28 insertions(+), 2 deletions(-)
create mode 100644 phpBB/includes/db/migration/data/310/forgot_password.php
diff --git a/phpBB/includes/db/migration/data/310/dev.php b/phpBB/includes/db/migration/data/310/dev.php
index 0794567f1b..13b36bbf30 100644
--- a/phpBB/includes/db/migration/data/310/dev.php
+++ b/phpBB/includes/db/migration/data/310/dev.php
@@ -84,8 +84,6 @@ class phpbb_db_migration_data_310_dev extends phpbb_db_migration
return array(
array('config.update', array('search_type', 'phpbb_search_' . $this->config['search_type'])),
- array('config.add', array('allow_password_reset', 1)),
-
array('config.add', array('fulltext_postgres_ts_name', 'simple')),
array('config.add', array('fulltext_postgres_min_word_len', 4)),
array('config.add', array('fulltext_postgres_max_word_len', 254)),
diff --git a/phpBB/includes/db/migration/data/310/forgot_password.php b/phpBB/includes/db/migration/data/310/forgot_password.php
new file mode 100644
index 0000000000..a553e51f35
--- /dev/null
+++ b/phpBB/includes/db/migration/data/310/forgot_password.php
@@ -0,0 +1,28 @@
+config['allow_password_reset']);
+ }
+
+ static public function depends_on()
+ {
+ return array('phpbb_db_migration_data_30x_3_0_11');
+ }
+
+ public function update_data()
+ {
+ return array(
+ array('config.add', array('allow_password_reset', 1)),
+ );
+ }
+}
From 051c2ec25138da5e1c3369b961bc8d2652d115b4 Mon Sep 17 00:00:00 2001
From: Andreas Fischer
Date: Thu, 9 May 2013 02:38:27 +0200
Subject: [PATCH 358/704] [ticket/11527] Upgrade composer.phar to 1.0.0-alpha7.
PHPBB3-11527
---
composer.phar | Bin 634856 -> 799883 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/composer.phar b/composer.phar
index af7b8c1a67f6aebf54ce26b4a973a5ccb150cd8a..a035fdc91138d039ed9e006066c774bb270080e3 100755
GIT binary patch
delta 150230
zcmeFad0br8-9PTVvj7v8Vc*GxOqiJf17tCg1PIy5N>_$OHx$12Z@?WHE_EYh9}*
zUiH*!HCn5!Tar>mtxNQ&)f$($v}#?WtyZlu)>>QJ>i7LQ=iHfrpile!p6~asUtW1}
z?%cC~&SyWLbM7DCD!=rDngex;zFC=XUB3RLlS&l*US+cVm&!>et$E@6m6Q(8eXClp
zb>?f$E2`%P1L0t=uX%;1zo-8uyC_8I+LkMC)O*x&`%bfXN$K)8fB%+#gIbaQW0QDE
z>31KT7r7VB(!U~IQ8SC?40Lt*LZZz{vO1;t!HKu(?Y4aV5p$wr)j(i%N66nFnH%iu
z^9DL;03NGomeQwQxad?ppz*>J=J~zdfneAdSJqx8%2N7bVsf+op}DlIDb&&9-x6P}
zGF23#^w_4uR{fa?yh;5_HO)*A(Nj!K_DdY16r~rGG$iUx4pC~*WVa8iB9qczEPHQ~
zexs?zzPv)bq%`$6mmSti&81hG)9vr3i1(D5*8cXt@P4v=pHsY~bl)A-oitYcd~=5V
zyU8Mh($}y2!A)|)kG|ZJZr`6MGAMmZJMU9HXgS&bW`cN0
z>6<_OynuJ~TT6!h#x#*Z=~G>gOw?yvOZ9wfuKhW=K9nAP+e;auZi%j(cQ3F-E!vLi~9pZVFf`ig{;?Ypx?X-e;(e#=?B
z^!+G(y_`R#$=4nJME?lb(U>?+|0pw`k(^!~)U8mx*)4!|bG{WLolffvL}2d0Hc&U7*iSv}udF=LNS0dV}6h
zUx@JVn8ZU$59I2L_2-jLv9FRVOX)W6{6Rj623xv4%O++=>7L8_3B{-7`>VuDN?YzK
zX*MY2WPN2up{F^p#oO!eT;=NzhW(LXX#4za9lrjEKNz6y0~jBTlhU{KkG`+hR^;m~
z83~KAHsY^hkqHDZU0&VgVNAH+ppED3Mn&lLQ^Q@-5#3)jXX{A
z1xg=Ym^?ioo~NQE*quCDqd;Q2QwY|
zxv53@Kaxm{*b!=X%eH{ZKf8?8&XiocQck6r89QyOA6D7u_*4uwyD8^3d
zkE)-#hU4YNv{HM*IFUi=XWxH(C#p7!YHy~^wLc-rn$qQMw`b|K_C+Fhmwk@?lj))^
zrC$aX?d6m}tJs&3n%5lY3eqB+C6}7gt_Rlq8BI9!hI9wV{nDJ1PO5+UvjtaXxb?Tv
z6Z9L>lST7)r!No>e@mYy9%g4O6AybcmWqd?88XYAxmdi}nz@uWdkAc*tv2mVJ|IHX
z&oXoEFUf&W`sY12{+fdTndMEPh`-C*5s3kr#(lqJHk3{+O8pbZLYiD-R+fFC#4Jib
zHrH+DoN{(fqW)@DE+4@wmXl7Jv9Py|6ANV&XXoVmBxzFm+;h+TBeuqmX65N`=OpNx
zvkUF>C4;AQ+osHiIc?0&Nz)(B&fsnT9TO-$=b{~ac9dbx$rbY-pVMgnajsYtO80(s
zQjH$SX|mV2#Y;+`XutAB-JY7SQ`Pr#vh7bx+@Lgl_~=)Vsg!Bct8)|W$pxY&rODr!
zeHiQnl$u*)@0Nr}>Bb+P_De8hs+FkUm78X7l{2N(k$BGw9M+Wiac;i-Qio`g(!*c*
zKbM0c;H9xWlT1naio8TIq1L=6`_JXNQTpLoOO8Z4dL}Q;9+0et(xXjtS8#TKj;2f5
z8>%)QngbDE2+QoF#m$v%Qu>1jUn!2QL~VY4tq|KGs3U#gh`tcmVedevZ-KuTO;Gjm
zvO1-gu0Es2n4a6{th%Mg8!~=SjawwbPyOd51Ahk5Q<4jyLQ(p`&XhkSTQ?yZ#-p
z91i4@qtzDrBPZ0_Dm$ZeY4_S+j6FNigm+UfP0SZw;15W7vsA*A(xVgozvN;NFs+Do
zDj$}41Kw@{5u!K}5|r+IpuN~w)5>U_McpTi(+(n`N|esN|1uB9Ep+5q6%0n2di~yT
zi??Glx*!P7k)xvYPrij$bJb~MZdw*)UM?9grDr^R>$6;AB7AGkx7+7th;Ar-XX)-g
zkhTd-P0}yTA1Bc42l+E9=lAtTwvz%H33>g22(|j5TxLp7`cvVXuAX9bh&4@mAy>8_$DYk(GWIgRf{
zmvi!NyqEKj-QzR$H?;(Pf1xCcUlcAEZKM>iE{WnE%>;Fa}_GJqd1dSPluYMfA!{t`m^It){hiR
zad)hEt!QImiB~+_S+Y(%SjWq(_VFF!&9BCv#+!N(aD4Th^5279R_3(?gS`Z0tz0Y*
zr9b{Wmolf?AC@{ArGu6SeUOv+x`0ETX!A>Lp?H{Ix`a2L1sd7)`4fNVG(tt6EY0B=
ze!#NllOI$<`4fQoq|nN-=Kg7-XG(8V$P#2rdYuTuNDga}M1v|FV}rSzl2zxzzTc7nrxhC_^m
z(%-$hAr;77X@4tUyrlHT#7o}QlN>JlyOPi-{mqhpJ`PN;wcjNPiPEY|fBR>s<@x$`
zj(q$3l6zB{ur657Wyu?kV!J~&L+R%8e^G~KN_5x6O#6kBb5k0c@zEdkB@-tLIG;Ol
zu6THIVy$@i*TgFOucVlyH1(3bb2;TbTb`t^FHf`IAtei??eDzuTYX2lhcC$|pws_a
z{P|lPWY3m6M0GZUv>>@uRM1qb0_>vw21W#ybAg-2)tdsA`8hk7pdkdR(`%#3D0F>>jxulpcKF
zk^{j}XP+r?ozk?sSG}lvCwcS*lOzhBKB>vB$VH*_mA;Q{m{Fnr_@r$6La8cK`pWsI
zz5sivu!`Hz)r%s1y(g#wcCjm=u8WQKW|}GX+LmQn}h5uf@+e`o8s@6D?`~+xvp4pPc{T_w+YBh5C(?%kr*wMN!e8m*
zC$G)_P{NSX)%#xQGp2W%u1r~_zco2UjOO^{&ElbbN<=)oJY|#pUvg0?Z8-JGuP{9c
zg`ZDdWB+)GSP4q~ADz7oqpa7zo<2_BI4#+JgB%Q{OWOYA*LO}^YM&}Gj?!x`f8%cb
z^%+#dsu!M|X1_w#p!An*ksg^ju3$yfTD@J4hthXG|EgBM{^S<>!%_pFG$A49986mb
zW8QRWo1H%Wbo&>QCsO)$S>7r7Gqb2vzWozPWt28+%B{L<#sYgpiUms5$6l_|gDAbM
zE+v^TW}93D{iPWj1guUz-f&8NZLCQ3
zGH+;eCwv>RS5)hIX%ka=r91b}dT=(M*R)u%>ZbnwUVn#|d=kc6>7MvPf|^oy^IOMh
z)!asz5fGuiiXp3MT9n!Xw;de~h{fSp2SKjuPm=P1(ihX_=jisjdVTlI1YMh%n@vr9
z0+`nO3X=`8SqQS3N+rgxA?13JueV?5$X`l6Pw6k)-k7d0X%Li&vX0n@V-WX)ae(HE*X5ffC#UrGU8fxyG0XD#TYQ0t;kM;J2*{7ihA4eu+iUCf
zqhdj;M-*S<3-$Q}-iR++FCyzv`q!(@c_E76BkDn%!IBXEsc6-BA+hJ5XCC6~I-;6%
z)<$cjN@al33!3ZSBl?{r9nicGXZ;^Y!l884YcKhX>7SzSt)Hw1>TULq#tV$1v}s@C
z2l|8H?~RRG>FOR|Z!g)9hClgHDRe09IJD(jefGRrPF{!?CCJ?@7md<+-)*uP-OZ)$
z9P_vJhai`L_;3hy`?gVyGo&|?(%I+!>>NykcRwMn@WS5UCMtWABo#_EZQUb430~G6
zS2p%YHFijrL#gx02kk)FnN_hO)$6>y1HKWQW~KxyrQ?ph3r|BG@1wG*)7uXnq*|sU
zDuv~=DGgnHW*gWZuQbW1G$-6i_Nn|yBMV8|p!CJHf9gA-%EG|Fs48n^6-phKy?-O{
zoA**-^wPA6jK7XZTsQHW*Jq3K&I4ZYI>t1rjXIa(olM3!BtNfsIpeSY0gaj
zi-uAzZb*>)u6^AToP9Sox+jvY-{Ot*gqyJ#UO0ORn3u`6DE-%;f4>rhH&5?rEX?ng
z6iI36OY8%qlQVcHFE^G8(WT7ZBp$kFpJ_MC#iVrgYjZyb^{=rL5&%lch&$LTF|b3}t@&h6q2ZpX;WHfFtM&PZ1HlKF6cw?~pu$(#t=;|K1qTK*TenysLTz0%+Oz}pV<&CVW8jwufKO7M82b#&pt=amD0ZNwO1NLIGy-NU9@O5XFQTcjn$4r
zwnORMtHLjWWi7Vx9j#d;k?$Jg
z;h&3S_4UoN@Waj0C6T+>Y2PcsN@>9dMTz?I#Z&B$%fV3k^WnFi(DyE`wRg&rl%8?Z
zt&8**7FXGymP^mmzuoB5)0R}M{#>f9ls<4{Lv(`$O2bK;{DJBY=}L_ESB}5tyQdlp
z1G+zHY4hCq%U92zB8B_VWlP!>b+yKht+wP1nU{TEu|U}RJM?|aC)xW${w)xlnj;+X
zh9YbHY=tMur5{`V19oej$zJCRkm@ndw`rie+aKt58O8d1ZrcuKwMm1nK|g93f2qm-R;eL^xj{9M8~_UbE%DeRv^iQ}sreUN2v?uA=x
z+AxAJrWA;DxopnXiJsc7Wpk=0dM0;;+q8*cXQhoDoM$afv-SBqLcxf?&*zGS27K(M
zHxsimD{b*D+1xX2yM~@@>9P#kY#5#+92^LB&=k9Z{l0*!y?tKus`hq|bN%`re`lvJ
z;19q=_V~8>oRyk0+0x*|JcYvRpW)|0WSsuVPC{35UV@W#?lTYW)GdZ?nBkeSKZ65*pir+
z>K%ymh~K0Nv!*vp`K&*fXihZV>z{V!=#^&_NL*PA=k#Z%kC(qj=Up3ppRH?~O7-H_
zaq>-N>u!DhhM%Nj)#b|jTy7gXx>U{5k8jAaV!e&uL&rBvhz|0c>4`bI$6Fe0I7jz;
zJ#oJdde=pNQKwJaVqLILZ!r}n_`@7;*~(6}fL(D%V$RPx4k_belMb_$ubPTZnDz8%
zvo%+4N{IfTK1%c-_+0vJt?Ss^v#j~-(4C2HX1_AQ%8p%@SfSgO=OlOZdc$E&L<;CD
z*RN$S-j!IZ-?6?)Kem2{R_Y_)u*=b9I8xkLso0O1>}Xk1u6|)#zs=?da+ix%&zc@c
zm>mE6td}gggJnBhjkD@E>|7t%xqe&C47bZu(dc&3V}*NHS*6xB5a^(V)m#p^Y&v>;
zVYdc)h1y3H51fuGGX&8!OyvEiS9HiRlPaqOPuG#p*Tf&C6G>X_&QxqcJxAPk*BWC>A|A6hkX6L
z*w%76tB8ZO;}70Of&=|fFO0#t-R!6@aq`I$#AOr1Wm<x$KMx>CrKuLZ_swj^($rL@{Y4qiU)fi4{tQzt0;Y6A~r$))4Q6}8#q~SQ*TAcvlw(ZU~{ifS8m&ZY6(V8_a1m11`
zlVQR)yluOSmA;dhIT!;pHMv@}sf9s#!B7PHMhLw1tN~v*(%v=D3mx76KLAUZcenuc
z*M|J7L~|{$L;65P@2pib^dIW^g8~Q+L&@YaL#*eCIAIj>oC#Oge>kAIQj1*;?CA6I
z6$7FB*|~XYCc7_N8K1CA^Yw;(nts`~iRqLDw&e(t(tn}J3X?z$EnFCI>=T3AI@XpAh_MYrWG_Wmu!(RpZCwX7smdL
zRAoR=+u{q6Gv+_+9Qsa}eYez{o+2o%OE4f-)0UK*#mR0InAyGyld|=rN4;fWW)z-P
zR|k493XwrCXorBUFMY2d70lGJ)f<9p+YSAJ)qawYt@r(5S&EzymIA_GzyA+Q%$lcO
z(^KE8o~U`WmPIY?^H(e--i_Ih)CvSLvAu^ZIc#^(lwQEcDae)#3Q$ud*b(eS)9i?*
z7P7xSsAgJb+9ILt?1}p=6XrSl`A$CMgeMs4CRq`!;?bOS)zu^N7y(KaGHMsVxvBp(=lXhna+(q|+HidD`j>
z_jo5yJK5QW3`kLGV}$6RNDWUUu+l@Nw%G^0WMuPs@$FLwfD-SQJ$JvQaPU8zDF~6q
zAy)>?aZ;zwUB+0&8uKpPS}7D#J~kq6Lj!G&KrlhXLGL)(8_~AIfRa2EY6vtvNLG?!
zT)Mz9*VX0k(6Dr*3wHHxC;gS}eJ`Of4kfZ)O~|i^qQtlGPD0v&Q13OxYU$+FzTQr+
zZ*w)ls~0wC_1XUZONK!K-Tm%
z7B{=CODW2VpYrL!0WIM3b+Ti>Rr3d7f%o?MI=QG2x)(`qp_t1)qjG-~Vt!lShAJuq
zA+c7WnmR{`qhu%LaoU1{=-sJKBv2*{I@fad0VyRgi+qq}1agFi4sdr>rPk-&4z*EC
zUBg<@o{r`MPWbpJmkGn(<@Pw;Vlrc_xDPfBs(KAYM`)mg1M3Yz>I;Fx67_616c|2`
zGLp9KEvr_Xc6$4&`777Xhi1KC?b4-dS2dSuzQ7iLC>ZF2Vy12JhWz9Qp^237X_h(J
zkvcVtvyRyuPY^%#jglbdDv`<-d?vm~lVNJJJyjO>pj;=cJcu$X&4BLCIMmP@HNF^O
za5`GKI5}2500>t@i4TUI8bk?UI~9vBf-2Qpro@*7!3mhM=kK=^)CeIu0s-CVllTs`
zxi;Y2)(_nbsK!-PCrdvaCbYKDYGFIQmI;G$;pP%A6xQR^n%a20oh9W-!x~_Mki1-4
za@36*sw8N?h$yb)rbSs)U_wRg@^@=hRo&Q;@b=`#-cs0jetAa6E9zXz4<}zTg%h
zOJr8HF^Umbzjq4^OL=M8lDf?eABsOuOl
z=gez$dPpKB4x(?c7iO;O8#sv9OQHvGd*Y}#k8?t
z2t=0^i0
zrA4advIRaIJjV)2t;=JiP9iY$;z22zN~gAIaJvwVAS3c%R6$1hNLvH@1Z_ieGsb5?
zm*)KKois(epc#OF$6N9qjil68e{ZkW;|1Xjf(AR_@`SrN81Q*G?ZvkbxJF0c+(lz0
z-vUQ>A;dYh(|oA2%4h+AhkJRnjhL@i)u{;!uO5dH27DWd@tJ_yf$LPyBv?~U29H@7Fa1|66U`N1%s
z;3jTPcl7$a;FAJB;WX@S=Z->`a|g6vaA|BQ5zixxb2Zj!lV(*%IvZw1IyFx1^<`Vi
z8g^=vpg&B47jqK4n2mM3$WDiQ7uSVkk08uGuLfVHfQS$Q)Hs+F?-4#sa(CA&xk=GX
z)_8V8PRS_Hg#Fz(Pu1HgVZ&-3OUz~^^-AJkv>rfTRYk6>Dx8w&-5T^b6Nb4Nm@m2pVrCr?Pnp4^!0z}QK=)-$
zot;`_5KVLiiMqIG3vzn*!Pg3j0d5fD1WpWXW8IjIX!tjJ2=&?uaz2mASOw9_neMVV
z1|bk&!U3*Wf4)2}-vsXw
zB>bO(`vhpW;>~{w?vWz^w7a^-1UEbDVsnne8Ku23W<;pC)f;BD-3i*DwzbC(%$|-1;)a0`5*2H4)nqr
z5r!t#nmbFu$i?DgdE$WDQzb`!!i-SPImT?hk)@tB00+5Xs)CnFh9$Y_pl2!#L~v7L
z!C-t4fuJp4=h*WyX02@vhTzoa%gWhu1-Fd)u%)E+`-0F)Dz!}k@tLCO`!?g8>?hf5^*T$g
z{`Thk^d-MZwu;j~*lSsq;1#E;Xg@`Nt}kH%7=(O9*dx3j5`{G34D{(A@1Lqa^2ZE}
zAR)~oUy|@MDw1X5^Kv;u$SHXSTl36M^rX<1h&Y@FF-=
zz(9=V{iHAxaJeeS$&&*IebWRuK^u+Q4EVwsPZ>3_?xcmvo90_gPz%77g`AHTW135u
zINg|OYgLs1Z9Tx$rr{?BRbSl|4C05;RjX{dtxeziwU-6b6|4TQfkXoidghje`pzvS
zHn~V{Y?_v)DOqNK+RgeWCoi6keIZ&w0a`Ku-q9(X
z08VV!UAoQ5jwdPki{<#2iKA_#q|(t)tW;Hluz{Kc9?JqQY`T!PYW7zsA;21fXss{NRK>}ht=v@Fs0>eF1f8@fllo4Y#K%2T|BtW@`
z#UG4rFwNrI?5lme4^Rsl9*JNERmYFereCJd)bIK16g{+eqTYX1s--vB;qBEgyy}RB
zx1^tO^&I4B4lGue7X}_bq${<%ew-kq_4aMm=rEa!9ryvlJN|TqHL=h}>jD=!9pyt2
zmjPvX#n|4Pt$8fm(p$
zAVb)oQ^{q`>#X)c@O*G79@OFJ7f6Dik?q(h1#-Z|(L4N{1?NJ9&(
zLP#T0+`KTqA*&>PchLT>0Z@>BzrSNMioi!dh}$*D+bTQ242;IOtm0TqP>hX0+hG8j
zTY<*Nz7=#37rt$vMEIV`xPr$q<an%V4S)(UoDsZuPY
zV`Gh}EG8n^@$;>jLU!_}6~D9C*w>}j@ltkL*}jmu97428U$EK3F8h-uN#A~M*3gri
zzpD%_?fY6ujVfFuHo_#Y7UE$UL_ps_UsW_$7*miFu7LnV0y)_Y+J#ONW!OLjY6ePN
zua9Km(18OvivH!6w4wg~R}~u~F(630A^&vmSq}C|abjvZIr_=@3*a0~Lk)gn
zK2D=@xKi`M%=d-lbhdYl=nGaSOp*ZXL9|QAjH0%x7=-F6V#u`>^+i|_nJd`QfP0JN
z<*K<*)_f5!_EE^MOKqUM+cWgH@Yjld#kPqo{R#zcL3mAo`v`2|?nvS7iyHqzE^ueIn(_L)E$iI0O57xHLRgQOPxL3jO9=8j{SRCAsHly=pVSz-!Czxz=Qf#h
zu9;>{(Dkha?8r=uRlj}ftn6s>z!-_S&PrB#u{B5ka_in~u(?36MWQB(aBYmahfVHk
z&Vk~p(*{kbgL~{LI9A#*c)4mWIXKyq(-mh@G=uGZDq+$zr@SZyd#^?X&;jjmg4DPV
zS-u8;#U>efY&QAWR;SX)j$dfb8gg#8t8DigQ%Q;g2-oSSNHdD(X-ifLrvU9?JykXE
zl=#j%v6a!{^@qYP8EPg;hq4j+!qUz)fFDWSVfP!6ao{q~}Y|
zC2a+cs3^%4bp|xu=%&Bbrg=PyoXRp~R_n`?!G)WnJ
zYt%&~vI86EwEMnGZ{D?53Fx=(sxK)MR$Xk(W25(!x%tZKU+!`!fuZtq4yyXS+o~;&
z&c3P!cIwj}6D=xN|;^4$%d>~#b+p{-eBJ0-_w-Hb`lz#C!3iu5C)`*7d*sfo5
z$y=i(-Qx4DMHIbPqPJf!uJ~a4YD~FtqLGYAy{0dh?Ov*whu*k!h5|V#1R`5{p|we0
zci9xy&|u17zn@{rqzFCz;AL;B!4RuGf`Ifnm*?saA57HmzWm-a?-m5qkW3@#=5^}n
zuN0*&1<%o<8G6$dgK2~WRoL+7CfIUbESDFH7f-a`(7T;SmAdxa$M&tkpqJgIrmKM7
zTYDze|JRk{;|9UWNq_4~#6;;HQf1lNY^6Mf>#=m%
z5^OY=e(*1=C@W=zmdo~*C|SDW>bj)Z$lI=NP7yn8pq{EoLn&D4Z7ola#E5{{&WGFXV|`rs6`*
zFzF=^CUzKpyH$9jKmCImw~hB9GW`-yJ1N(O@FN&H(O2xBTg+vdob^OQW~tpurrcu9
z%B3p&)+qvnjFoZY483+;J4@PTp3Q#0&79c)vf+^=#Q9K+yJZbBHaG;xH?qCo*VgKw
z9CGXP2cqVck7u%vx0!8h`cJ_gX3w-(^zH)i{*?RpC6KCzRZ4M)NFiO70oUkx9KAWY!K(~mdlMFlhqDFuIwoE2|=stM)5iezxfQ#8XO*#6xgE@;3
zu?(1tKtO2V-`=6IcpUR~*?K{!F2`1XXQao?n)f6W-&KaO*Nzrr3p)$#7r~?q*&=OP;rxQMI&xDsd+koECUm2DcUiS0Dd-R(+H{wa
zt-rl9A&H0S5h}CW@3Pip(`W^Umt!GDr}ypiOz_3^V1P#up)470)o=P+CbLh*bzYS>
z7oBFDXKCdqyNz>aIRI`WHFuIq0tB+rCJ(fuQ4>MOMiVp$X61dyilpqVUV3m0S
ztX4A1e4WsTMU&DwA_d*ZhKDxXT$-qVb^Bz!;SPu1amQqPRC28o3OL)d*i<@5njwgt
zx6vNvzNt7NCyU1DBaEJD9^3*E(T`|=uXPkaT-ijMPT@M6#HlVOIAxoJ!?UWVaPJxq
zy&z6!w1L|GzW!bc+ahgeWdA_bEPc-{7X6{y6Nakq?6J;~Njh#JzGOKid*&}2Kz
zT<&Cp*$lM@Mn2+HA-~9#7xo6Q(c_Lkdt-tnr=R1si&0=qZ&23zd?L6P0HD=y1LbiZJ&)zyn;9sx)&`yjY?GnU(;F47@Q+arQ_y
zto8qkmiWJ8h-d!avBXWF8NK;+sCtiElgZdf6UN3o-=;^jU%$#4
zF0!T%9ekkN0_}O|1+WV?{A&3$STDW3q|F(pNw|}|sv+dv%HIlJ3>q=^
zqH1U!MbAvN3*wjORhIa+>wo{%gC;Nq{hlXIEpfnN_F{oYwaWVfkGt(j#~{K`)_ZWQ
z&h2ijCVGgqgdc+Rh5kz&$ru3nnhw(m3Z+mZA}tZ*L!GuFb~dJ`!brw086VB4j5%%O
z#^UF~i1!#u5TDhzG}mej4P)TG1~0{d!8rwgT_8vf$=Dci^dUMHPO)?-jJsNiG035h
zH8v>5u~ypH?#)(g_=)6Bw(4c)0{bdp=SgZ5_XGNxLU20DSub9^%c(+v%_l=
zGYa6FHNuU#93i(Vj}~_7XFWHCw?>-~ao7m_67hXeneEtw9UVldtz+lTQF1mQ7f57m
zbHvVG;(avQoxGqV1vðg$kmL+USO(LM+;SGK#HHhFvfXTyVxBQVzFx~pG*4*G2FGX2->Y{Vu9`OXaJh#T1C;JxJas~R
zMMtY&b-2ueA=}(++0(ckx&LrNxzXFV4?utBsmm-K2v+my1&3#k<4;w5bC`Z3G7LFY
z#6sw2lK8o$BOLcD66w|Nd}?A^T-7T1E;Ife%)u}~sBbu#ekL4V^WccZ%zuN~EXVl8}e8?+jlaxR}TKnP%Tctf349X;Lv
zE(xGM2FC^@Jage5TIzoT0V-{AVZ*#%!I{XJj7Frg%aP3xO)?AkuGsWD4m%aw(2Iwc
zC_^pJ{K?F|x;QCIU-80(42~kOM!Z|+(!o=>W7*1dC11bzg|uV`ygc1YNN#POsk0Y$
z4N@_zVNArtRg*qQk}oH`g=`T9gyg2i31mzJ_)U5-&LxN20|Su9{tg#3PHcSgJU5-N
zbqOW5-budicyUHGW4iukapc&sneFbfz_<2dqg9MoKj+1XwOmX@cR)8|4rC}I`q>YL
zxtY5ILXedF84{&Z(~rDZj!+f?0r3po`l53)9~7zzZrkVWcb&K_QftS21o;UxX%y$S
z;+P+KfhiA-8*GF)pqMzk>$87u$r=<;KxjHwp$+g6@x~woUxhI)oE&Kf596K~{?1?_
z2Ghf+Fm2jim1`-S3vyjcvDBhR+UkU|qyO~wRK4V-$%V22bb9OJd?WP2T
ziSVr$T#Q15OwY`5he^}V|9-K#5;vekkFgIm{_%80f9#%?Y$~-~DjH(8iA@D%sJ?TnzTWw8Akvx8X_`u^w?&F
zVh7mlkhzQ^4yLo+-!m1`PD|3zZO7MJ^rXL5N>sqA%%8-J1EQtpS?A5rEhm-Ub&OWSdih%-G7nTa#bIfc^#ECmH
z?oKF(F;RYh1YHNp_aiHDY<27dbWrZLZfegDL_tWZ%(p_L*|0J@^f
z(Y|{ADx4L;S(8xr7FqS5nLfWK$$!^
z2yqyQodd*}aom;6Mnlh`ptIp4in7m|Abl+VP29(DU!w9|B@G<_x1vYWS%FQd5IZ95
z;0`4-m1a|^mF-v`*oFIKrKS?@pUX1}y4
zcJb@rQH}l0ru3vmuQ`|lALl?ntMQ_Kl3mFf-ZV~m;XiR6eX6g%FP$w&Q;KSZA_9d8
z5SQGQ@2S&P20+A@#c<8RjWH0=_uW>orVNM2L}XC2*zV%zVRVO=YDFg9{y>X@_mysZ+K3o@`a)w
z{H&f`nXN2bU=-zEE}T#e5@sy)1;ibHF2oLY4)paK(TX5Wj)beg)bT9&bfv~tuCnF~
z&(Be=HjVJg4S$iZtg-4FHz)D9rszhk{>G)JvzA%bHEevTl6Y^a;;^Ph_sK~(@fam`
zx>M=Y?>U&BfGb?Ff#cKrA1q{h%9U~HOT`Ncx)FoWA9<*dF7O$C&8f61xg#2rwJ8W|
z&!r`}Tlsv^M96+qrk(9|EoU9a^
z02S6WEz!f0rzkm2uQ+_8efP<{&)kdVT$5oU(_n^u-{Eqy3$5v
z4N&|s6)PFrBjuf%%x%_Fg)YEo1J^IlACQ*
zjmy9k_f{*#!{bg-t~as87g$o+#v3e_)TmV88&K@5383ji_gKtqPrdS1l0jEtc4vc9
zk`f~{_{!P2AE@Km9p{)**aZzru9MT7^cKaDW2;m0HIe~X3|3gB6fsAm(wb<<4mQ}R
zv_RwrB5{Rb1-#X$HaV_kiN|PK-iWbMaPQaK;VIDEp$VPE3SG
zlfQ`H>&K_XpFs8Eu(x<06MNw5*!qm43pk15Ly*|lwMrp7ZJshwjr6dZBc^N{c(`0>
z_RD#Swuqn`8&=$gA9YU*-X9RBOrc!MeK|UdOi}^4up=o-nWXQ#^ME3(I~kF^_ckb5
z=`k7+!e}P@Te4Dg%>pHNG8ESl$R;rHL=250;Y@bvY|x`M!;&-XU#MKAmOFQBsBWAX
zc2%#(@y$lZE?^RO;+!=Q#4S?TV+wQzLvB{FSh5nv0{2B1n7h#klnDoFr=+D_jNv
z^lB@(PsamlagNx}F#6)Sh81V$USeI8JeT}!I3P+1yZvmnh&6t$B(YQ1D?h_&HF4P%
zF9HRf7n1tMh&;@_6tUu6b#^9{Y
zMaA}PO1pwkp&p!rA`I2o(RL+k(AT+^E=r*@nQK=qZC`}D@kkLRIs!FtqBd$kiHN^r
zMO;o1z3k8^cEeN&O;6toNw?jQx+j?TTZvAgvm)87(eqk@tP@X~W${v1l~L
zNKYuZ6{nlo?l+VvObaNML1T<@x-Bj~!H6lmf+L5d)M+*JkH3-o1MvVgAb@L@1PXEh
zF9-#3^Q4%;*dWGc4yPj
zQ!BNpHB+!GpptlG5V9|dDa2WhKCEPBL2Zy<8E{3x&a4}innVtAxHA!Apq88tq{KmR
zPB0_xOqmMH+6nRC<+qZ7or+s}xy{T2zmV6BQ{CXoJYK!2rCGxr&`|XJxc-?m+qYj;
zrm~-GRHmjx2jI4qm$T;|!=ZvCui{CHzGrjsvo8AcKSqz+?(!mXt9r4kg*%d(;v(|5u1ZedMr`p)bF+n60`JzZ&l|S@burvsygPY8>cWc54yb
zN3_Q!1wKa=3Qr)XlZbR-)%W3KSFDb*D+jf!L~Yt_`=;9BYRu!C%-O8wXAtQ}eqwg=
zn=jd+WvYGnV+DhV;DAiEC%gp~KYL&xp_pCaSH}%sc&1`fnd`rlli9p-
z+^F`}V@hTX)uf#iK_gO*#0!YgJ2Qu#$;y}S=8DZ4VvY#lBbLiPeN3qx&g@g(REp(#
zj$L;6`$3c$N0bhFUgg{3XH5^9aw|*r%#FYl(4~24O}#o;CKHv&q=c6C+`u
z7>*z~_WS@&pjZxWY&JVlE5y#)nxxSM)c^P;T1l9qhcSPc!RPr
zA%9H#>4AU}=rjHirD%Bnj}^BmfBrTou(zFnD!n{@k~p6~#DTEW%V
zInBjy?{<3(m4!Toq_zO;5GZW->q-tg#FV@gxV?fQZ)p2Ge+X>x*iV$QWO9WW@Azea
znKqaYboi{Uj;=F_@vme`d4Km>4V+Ve!WX(OH{aEGbuC|S0sbqjeESs-BwaW%y2R(P+0j>6$
z?cl;yElT={vu3+Hlq&YpdN|xGT9nL@1=8S0V_2-(SbPi`87#PRi--yOb5+pz?~mGWOA3N~=ZquKTBeYi+o7
z9B+*E-mR>((WdTtPxsmGM)u4BCHLR0m^%yinxP)Qfo(kvp_&WIYFF!qYU~@wQXC=P
zi8H%yx|I)oRU^D-%&yk6f;x2q+p=FdGhf`aHb(R8*nZ^}8?t4`?8E)aPvU+LUw=U9
zQ`joIDSLSww!rJdkG#@4kt1AgT~gqai>@<6WU4#$?(`m9
z2C)TmCyQPEGv&&WCdu_%O;cF@a!Uoy0sWxd$!X
z1MKK$76*I#k^~F$|6I8;P3ovdVb=7Hvc$~k@aZANF$kVnL6KzY>dm{&Qthl}%j5Wwhzh=mK@1
z#0dCFJEt@bZ2$PVvM|FV%f<%9zJ60F8~)Wj%C-cn*nb{wct~kd*hLR3Yq1r!+m8$K
zwKo+r+t;94bF`{0BpZcXz=IIM?D=y{S=EhohJ$#g@I1puQ^7As0X0=qxLh6mnJp=g
z-S&ur4}HZc!#r@TbxK>M2DV{bnkrr*YHp0TxNROhbr<`pQFXCR4=NhF;z4BwyXlZJ
zhfRM7tn1@L%K6jAlrrR5<(8C)03g&Mhm5$s9jnhSe^jYtwXZ7G?AQ@ykX;dinA`oB
zvNleWS#c&d{YNSqKpaD%{1$D7WYy)xe?6{DDU^d8t3?Kl>w@9!Pbf*LY{P3fF?aQE
z6h}+PR@^v6q!ICZd*}92?3RqEH7*$(k;$o(aBA+>PJ%G1Lm$Im{NQ|or9WZHDGrBw
zfM~57X17($ZrxDVR#Dfw0pUSy736hdpDrP93~e5h4|Y&QL}_phkc$imH_Anh#wZhq
zg~cs0{FXYL28gZyGUI$TV9Ibe2lE{UHa4~KCH3@#%H;Ubc71U4xR
z2-Y#PKWxeyw*FRON~XU%00p3P1-Ffe)o$%%x4f)GQbquk^Z-}7ges8{kpP?m2VPf7
zS=t;mft~+~@;ZCyW+lZY8Xw+3!fNPJBHUSr+h1u)@V2w3UQ;gO9XetiN>L@oC$_c;pXsA8
z`zELb<&ahg*N%mS?Qlg|j$3jXTphc*J;?riu=@wbUfhX
z6^TObZMD&yJ+CRbnJ03p$?VkE6m5h(FSym@Hhu{voB0pLcBaHF=|~Na>XKN2gCGG^
z79mJBC&B~yE-nuXl(a=x40ywvU4&vh6Z_9R2+#l@E)HX7U1cd|Pp`D36j6W%XK8>p
zQH;SwJ;svMAvhA>cKEjC@Hl6KGK?7+PgC01C$A|Te3=I0mMLzWFil3nRetdUUk5=2
zvFy<~#$Lr?0_0bWFB>kNcy_@#LWF(yb)_spqA-sWr`}KwnAmrY!l$(2EO<^o
zII2u%B}bIxYo1s7h>K^iNS!6`1bb_|5OO;oSI%RhI!l3tGqb2UCbLidmGVROx3r`z
z+Vn4Fp8aY{8iK3*{7fQ0V7Q$<)15S)O)fFR>2RrfD!bx7M6HfEkqSrfgyGZQReomb
zG|qV70{;+#qaC=5k~kp_KJK6mA$)!hznu7<3zjMx1+mlcp^JDp=MIQj;&2Y$3SGV7
z-sPu@DaG2c16vbISnvCo`Mw+Bc+TH$PGk1n<`mZPYg1+p-$oO$#AGbUT?BS+VN!k-
zsfPUMA{LO33{)ZfvofT^h~6NTk)727_P*$3Q{FQA8Ap?1CY7;MBy@;GoHlnyHDK@JXU@+IfkNC7o8v^KW#m*DBQe2&Aq2YzV9N18^2aL`qH
zs9cyMXaQ&>qx}S2hCh8zxm970Jday8jvX`=Ct@9;4tKV&Xm^bjXs=wA;;Amj9vRNyTaa0JtBei5g`cA1V&Ey~UhorjSc^pvRnD
zN)d(8T_p$aU{tN6?TLkKUxCHSF1ZKSW{)p3C$gFED|3fCKT_US*#1=}E34j)b6|Tu
zRvHpdMK}YUNM;8w2T+oZDKA*~wbAT%$COJjb-sItJBHZC4k$`zOiZ$|U7Jk_J*%QQ
z(R+7Y(Mt$o)ifRmkGLxE1Yw1eZNXQK^lZ9^8(TYK=ZQW%LN~9;Prp!@0KD{fy$vnx
zl24R>nyD#v`EfV{roE?RCC&8)f&sWhd)eL_t%Wuo^3FGzSkXRHo(lg?d#NQ`)Zz!l
z5A0W$vw|O)Z0yBPm6zF>e)Ca77MS+mb|PMEyf3Ms5W{w;*rK^7X&3P?UvEQ
zCluinh_50PR~WZ|M=$yYE1)~vB5S!QDBB@B+*Mc2Hhv9P!0dl1DZ^*|Q@Lmyn|YZj
zX?T31`h=Ms8^#wFTK)*+`#M>@fPJ(F>h$itz_?{8>bPrgxOpvj6ukM}-9Ch|lF{aZ
z$%NAmeZELfu#?U`AiNAWkiqi|We@ybgO775-MkdTIDYjCU9N@;TEyjlEHzclnIKM0
zY=s*;K+*Q|+t(uIseRu3mR0lT;-f|LunufTs_I}5q^i?!a7eMUeb-}=_jQ>IQVc?9
zq7yRghRfA5)_y67{DY5`5|;93Y%kt&samez+MdOcCVe#0xS&{=^VpNem1K%lge_^H
z^&B49#vZ)`mp;(>?rgc$KQfc_eGm;;WWaY
zf5=?PHogx>?eSFgOVug1ObGMoGBqd28op*p@xrVF9wDM?U#>cF*pZQTkKpDg@&C#KS|v=N|4j>sCHU2a
zT!kBkpJH4Rdu@rSgsnMCePVdaBK1Bid+~BLBas9ZDOAH1E7W@xmf4~fCrCnKzE3
zXUiW(ISQE^aeaThK#*m{0Ul_vpcA*g{BI@fA1&%N*<+Fs>&*a(V(F~IM^>sqOLUaA
zEOM&)B|nrb7mU8Z$A=NML_q4peW$4#l{{Hw(*W+NZjRD}%f_BLUCk|{fsjAQP~7R$
zl@tkt=wqn}UGp0?k3BbCT{avzL*1^_eN%g~A%P#*tqE+V5yiL1lyebk;9jrJaS-_#
z4IxedGVR3iGmL-f@V)ERGG(n%cJw4hbh;_NC31WI8#5cO*`StN*l;MRXmB)$97N{u
zr$f;~+$7(ZAyr%Ih4Sl!(K6_c)KEFnc-)|&%;sY;nvwSNtVVbnAv453cKlCJwQBZa
zr}!Bkw!WZr*oSZLP~SI=rtIM#cdK^@tQ`i{rkcjJdaJs)^8(yu_eG{s_P}DbX!w?h
zx-psWn+Ri3geq`FWgaP2rSHIa*SZrdgVF2u>3VY9B?>6_&FgYtv-okFMWzd!(qiu109?3;nG-bu@fVq6bc3-gp+LidKG(IlT_QV
z^IX+!i>aqAm#TH_hW+XkGM~m}tcs3ewY>J1TTsd_wlYC&5MrGNoFDqsQo`=;K!a<)
zr~X}Gr*F65$O7FDON#LDvddMs!rt1hjw=vY!+pamI{1C9NR_K=05NaLy;lm1B}^I
z*Q*|7COfbh2>bCTN@`0STi|9uNZht3zVxvURu8m&h+(d)QLF_VYS48hGKm`8#yC}e
zYK(2XAR(8XzuA-rw;>hhxqKP;%|72;lb;EfL`=iwX4{wV;)9OaYw%fyN`{r^;5VjR
z5I^Pb-VEW%V?HcD0{5i28g}D4#NNsd$HqA@P1a94x*QeIum`A+%EG@^G88BKQ?Rf-2pOJMoO$>38<}H@U0C=9Yu}0PLomBy4wnfhdUj+tkCh)(z)WRAJ`}PO*%i
zs4sJ&LqSr_%h$B8Za!l^-KS{+toZ99z{n^w*Pju#3Hhe+^*)ZU;IQ(
zOVnIq80=ptoy2nqz{BtVMD0}Bd$`WZB0RN=?@;f=8A}9(;Vwe5;%Pd~bJxO3AzYE?
zq+x+BU$e9w?~Tu52yeZ#s@I8IGf;JOG4yGihX+^eqL@0dorHr6>#;viFZ_eS05+5n
zC629lmy-_$gSFwK74Z7tVkG>CRjz8F<2d}C*!DoLqd#vk!UI{o0mF_Sj(`&a{ztc?
znt!iCw2%e)BRv_^mGBg>bAN5h=6hJf@86;RF`?{RokP63aP4S6SH~w9&Ytvp)U2$r
zYO>mU)XDM=lQ6sK6}T1-m78V_r~F)f$f7@=TFe%omz2hemRT~`(%M8s=WK_>TJiw4
zIuU|sXMqP)msK>(E_gsa#TCv*%EzGM
z-p5Rt>|Yx@PbY!Ly!$&fJ3(NNjXnPWB13L`#FE6$7&IsIyyfB&
zKBKM>N(Rb{V+$hahjza?AyjIUE43<$^ojF%7@6Wz_D6n%BN&ZOs+-t52TjX{Z^Dzx
zmVXyFF590|6WOhY;ik-f*p$AwMSht$CY|w#?J-3%(1Qb$+y~C~c2a`d+oh|HGFZ)S
zcz!;=5T5q~UqfU4w;;6aY1lDTyNy-vw&sGx^Dld{15c|3gZ%x7Pj&)>vB(I#iGHkG
zF1X=7B5H8Tk9cA?UF7m{WBAlGUXHa`Kv-_g!a0u)=!3^w{I#TcA>;}l0Y{Vx4Tc-Q
z_yZn>?NFi_Nc5;I#%|r@r`7e=*c4nDBikkIfL-#mIzH3rOxiXyGWN>TYE7b%!NxtK
zo@|c}N{)WG?-^AwEtia69!ZFP`BZv|OBk|WT6i_SLZ
zCCC=p%(Kk}?9i7`?bn}eu3@IfOu7702*NmVUE4Qy!VZ23ed#5mS_4T7QEgi)$^WLXR%9n;4t*i3+feY
z{#sa2n_t9!g!Uqwst@+y?%O}S0Les8Nm4O`G&;D`T*V&wqf$ETc}YFlY^&NtP6z@t
z`}7qxcdB5=QEwz}_yA)-d=oTtoGIe>$VRIeAYe;hQS(l1kG3S1Otd7bpbg-t#Nuyl
zJlaZp%*cAwQ{%m$C!UYm{@L;rJE|eoY(?%$iuK9cxO98LiANhlUj6gg3mV
zE{pwo?@e`Ds(@;gS5AFhT`Z$2SNsmKT$Qh>_Ea7pCq4v?F|eZ7)Iw}^#KJ}mU<_}3
zP3<;U#Z#p`x*(7s2AL@N&184ZGL;O!`7)pqJdX)t!&elyWy$V+N1c)6(bkZ|3L;~|yJ~YSDZ%{H
z!sNsf!8IVDz-Ick40mebQ&bV}W}J`Z8iS*gJ+d47UJpKD8E2(|f_83tS1lD|{Pnx4
zn}yy{bEb=d(&j?+)E(DYahDo&V)-4@6GzLA;BY3JJpuk-^Y2yMVDf+1d-M1zt7~uk
zbIx;~eKJAjfrQ~C1Wp2E0uc=m2mu5OBtUS0gb+vqk&uKWpb;?O(Dpi_sVwUR)S+6d
zfVG}_s}`$mwYCnRwY9fStsS&hy!W=X_gedY*V_Ae&U2Dr+xOo0kKgC>qZQ7x=V9%&
z*Ir}J+1A-Cd>Kar@i1u0`nCV=d6e*SFp-{_WEGcdF2GP(J80$EyhfnWy`B~3hAJqv
z6-|x)jjw=e%fU#Razk7imH!HA5E~|2=g_71A=v1r??d&r=7G4eS>jtkD-AHr8r1`W
zlJ*8FOUAY5GS^tjJUWeeni7{WR1Jf3j#$IOwMndg?F@fx5Gp>ekFNZ^d-!JoY*Ly~Kqsp7%Pn{w&S1O8DN4E6vjh6~q4KFzK4hieNKv%qc+o?C2j
zS+z@!h48T!0KYKU6&3G^MmUkkshwdR$DH}NTM)2Ol))qlPytokj@y1QLQYR*<#mqu
zi-9A;6i0(G7rSHB>)P}d4f^iQtV9UNP6_EWG@oV0(WoYlZLs)>;P&BgY5T`nw0MCp
zFB`DqY63*ZUrcx2?jJ*=Pl0vttw(|>blVmF?28&!cX#mQmvWR)sU|DUy9!M{X3?x|
z@2=LtkA&lboRTUI%%)YDU3CM!NLXH3-*Q|qp+YGO)jaM1hM+fCSzFq84RnVsqD!L-
zv0s9|))l5HEDo{1=}1E@wjOGN7h*f+ta?64xo
znH#q#T^MMPckO_A*A6M<$gJTG1*lQNpz3=mArVBn^(HO)s$_u7+!#zi$fbwyk{)wWtHeW)y*%|lKV
zSz$`Q(8`S}$*hgya?g!Z?Zs5=AO-6aDlltYAYM0MbPdr-CytrO58UG@Y)&zzr|t`_
zj7ruYZRj*oh7n3tLUCIlw8_z)G~GDo>{q_g6knz$(@VZUkj9_1Mn}$@VqL66|BN2m
z4#lJ&ms^idl6%_R;h<#nc6t-}Vvk%^Vg1riOCIv2mYCCsX?N^^gB;e(+NE7{vI82#
z%H4_A)4Fi0_iW>M=MuYdDAsrg$I%-iWzcGdqf(R#S}HPhu%JBjfoV^vaa?Aja-E8J=QDg6TbEdgbnC5l2!+Miu$C8d`ZKtQXJgX5cl9$IW=M}EK1
zTIS1)X@yUCh}&4W*lHiCW&|}?`o4N}iDj)QWTPsq&L#$P_$Prl&@uR47v?H`Ajltdx|Ya7c%0tc>Cn{1}XaY_!v1#qlN^n>rjQ
zUp`=EP9Fl4(N>0)=ZP@n2;5NJGV4)aD592IfArJe&H=rKcXkc|oW_6#kQ*3_BGf6k
zKJ?Mc(0w`nn2Jkuoqx6s(UQ%+*;Y3A$p{`}l3OXR-dajuMNAQkokTVN
z%9ow1NuX#M26_EO#}eQeUKnJr)mw|{!>#;zshvTkJ#j($VVpm0Obl<5(}Q8$5R&?cih#pkR^W@>x~UodbuY}`+8y9J6;KPxv0yp^OiZ#U==3=yrWG)5$dT8
zxG8?rXqBgU(glL(h6XE(64&8;|9-7C(?t!b4FI63bym(~iRffH3cC|B0P2?S$Kd
zl6P2>sk{*;zz5e^+q~_RWXCk2=g;-&V3ReAj;=-I)GHfMF=@SZIJ&0E;ocqH{4z2@
zMyPC~H4&EI*7RiWDz^7*qRM7#PQ1G;w6fU>(Y?)94ZY9^4V&a9+{A~PEyW%NY2Whz
z{=YRrLXq2KHMry4)npY?!+A(X@ifbfuAjCyTV>%eItfF4#_T448P}j1OdX7UWCJdK
zr;)^RsTI3UA*6v|nga!S@an3{=CD`S&eo19w&Q@gBDU%J4Oovrv-O}mwnv+B**ne3
zRP5x~X3g?%Xtq*m?RskhPa>X{Z?twWcxI(JUjD>*Q?4ueU?YyrTN|x&>8!%|r0KiX
zuLG!S8BbGb8HBH5XY5c~`bLeNZQUlTcrh@ut5PdsdMH=wcwfvm0Fbhtts9+HydV$h
zh*_|a!cEo*Uv%#&vDHd2zSFSn*^wEoR=UYw+-6OYqef3&0MNa*&HA!l9Q;a`jhnRD
z>W{XS90u@;8!!z>gcCZ3{&KE0Y6{;HQATRGySJyLoKL2_AmNOae>0KSixXtXvA6=a
zwMIFzLQp|~D)d5)5WIuie*|Mxv<)mLUEoaS<;xIo%{XKhh%MNbbGS4v!vKeI=fn3r
z4+^}=O_&_cQy@!^9Zt(RN27g^43RrGTUYyB7}Ge-TIR^y9`#FE|X=#JEe++MO-51(%RQo)XTG#;q&F!$B41)K}ULNVKKAbH;B|HFh
zS_xyK04ZW$R>2nI0GKRy12ZhzZKscq8Hjf2@{OAh&q7V8U?s!HzAPWgi7SQG$R!WsQ%(zrUv)Ka$%%0?p
z7nUW?xnU7HE^*oZG)&cFGd#mY#AJ`622OYrY9E~S^rw+u<|t|bBFK3g8%If
z%Z9Mu@$?&8l`l;_TDh_4a2}K`PZGAlg`3OE)It!2%=M)X2%5)>LaWY_#!KawrJ;
zYri#B->s5CPpuCWaEvV!VvB@AI`x{B5t(zTmF%-6HL`4%RpcAxX$JA&>h2C^#NiRB
z>)pKDD$#}M>D|^!^D}b~2(Fn6tn`)8Jirr8LRR9QG_2E@24TxnCxupvaY0cLyEBH>
zhC|N{X@R=;Sa$@t1*kLNGAOvrdNz3?v`wI#GI8Dd5Pr?04=%I5%v1_YqKv$NK0jbx
z5StWvW5D{FO-J7gX3?RmtOOVfH1u1!ndh|kIYI_A2tWiq^ez}{-~9xvyOO2;VAkdx
zI7mx24=G4T9tn<#lRUIST~`5_Kk^8a!e4sMXTz76Kb4+Y3Z}(>UuAtQ^6=-a2YhtJ
zx&B#n_>0yeYU;PL>lU{*BLr^ikajVZomwFUzqBF{%govA9WTV4B_d9r1U8h8#yF|8
zbdoMLiJtfb%0!Pm63hsiAxB4*5ZV0f4kb6t4zkfe8D=C
zp2S~4oiLle@kMJ!omm;wFxRT{Qpalr)_{1#0Yq9DLdDb?j28p25a#KfohBr$hFnN<
zjuiMOoXM4RH&M)PL{+*i&BHP}o6-pz6!OXq{BtXZnRj$;4wb;V5=1^oAb5g<9#3yk
zL)f#94NTc_bX{+@9^fS86@*Gk9EMmDe1mp^!?~vc59#QtC&{XtvGLMpBBXkBGiC9-
zTM8Vpt!7&bu6)=hSKiYchrJ0j?^^4J
zG`HW*#OrcgB>6fk*H6E1ic0}W2V0D-tq8qUdxN!x?z;t)(UUh=qv=0yu&!oHkIY04
zri&Oat6I1B(k(Yyt#op~l{S?la0s*8lg&HLvz+-dakehU#^BxD8s?OtEn0P}{q3C*Z<^;!+-;x(DTHU#
z9n5zDJHDesqHAK^01+IP2pVCWsV$<#TdFCB7Xs{5%(Jc+_aLrLKW@*NH(4)G;7#Ay
zfiOZ4!}iu;8p^mX#`8iO>Lb2UE5A=d)5|NSmz1AfQZW;|3=oB^fdSc2-3aB{+}Y2O
zuS-L#FpvVLJu{>N9@A#+Se12l`E?0P7^Y+1-tWsh5N8EKV8ilUu{mytRgP&Fvtwnn
z>Q_+vt2o=2Geh<#-&~u{20=V-+KD3nXnQor2kg|j)CvwjsbN)ZZ9SA4z_F_+EiVNv
z#|%ElMR>xHosVglZQe%e5d@n)0nFKRg`b`|@S{(LTn@(l@D_M4opIx*cPXMn-|~My
zbkqLG!`GRfDbTdDePc2ls5VQ(41V|`o$bp>b&L<)96IU`m5I>{}3F>Z{KQF
zjB_>wv%wwWhQ!q8klwk~s+|lB)7*l$H7oHL{9eyOFD9quq_DnM>)?Y|kDJ1P)EwH{
z357S{CNRAj1+8L>D~Y?_ypazDuBqm}!Mb0LE31IWy|;Z+$quGMOSiR5bO5u2SHA?U
z>L1(_5Ll$_HtQw-GT9pMjx$5SI}h9&Tt8aGES{&Bo?q|m$Y1ZU8vH9Epfv0z16UmF
z+skGu^d?{zM7h)nw(HFUWC<(b$Tw6b`vo!08o5qXN39;LsHnd^cGW3G87{d#x39h0
zaRb5w_4dLu<_rO26Y^K*8w?~kiTFK9u%Jz
zr^cny!K*-}-;`-*QeS&~3LOt9n>wyjqiI2s%Au44zLM$KNHY&TZy6%qlQ3^#3Asz-
zYBpg#-Zq2V_vX?Yhpf(t2~Nne!e}nfN5}pK%@VGp&mFc}=<*-?GD1_}7K>f2ih;4d
zd0Y-KkAc2;4m3oWZIiJl!9@QyO~H|qv^2iZxz63|7`HK)wXM6iZ03LV;HK`OeTS`5
z>GPZ^;)@HtdOF2Xkhf1v=X~Re)CiYNYdvqE$7H>NUI&YDiaRRtZ{Qq4?p9V1sLAT)2jJvG!ZOS=@ty^=Km6tq(A4w})AXa~~8+tImxz8%*zs3w>
zf$tj~D5m*Sti;It`>mCVUi&S$A<*hvoWUCgO4u>Q5E!G(qqu{M?}Rn~Lr3tcS~1$6
z898>;s1R))#MR!=OXD@RSnBmT!9MXBcDJlU7#buE(rp7FjP^X+`>(iLfQO)%Zyu
zaoCN0Kig$LFe%|Thh-ZTv$Y)n*DlX8e;ZjL-9mDpB
zqqNen20iZ(WsE}`2GmOk15d%y@ML%@2GR+M;U%fiVf<=CcrRQbT`w+L|sIIQmtL0>o`NTyRi!l{1ihhPK8KWpvJW*jiI*bGmx
z03CnUdTh){#oz)7-0U}>g?p_d&smkC`|ePAPLDIq!yd}{4lZEV&?REP_ID06>O$M8
zXlRpXA{nUD>ETR{NEimWOwT-F&L*ot=tkW6*PRcvIL5
z%74kK2x+`vZhP(I)-A)MWjSdU`vMRMulyu9n!fOUAXRBpM41t*Y9M;EIhZMWu{Fcq
z#9;q0B57=C#(B|K-bPQ(Mrdxi8QsXxMY`Eq#i@;J7K)5cZSbp|tbCAGHOO$Ia5}dQ
zC@+mD>CI_s+(Pj%0GW-$N2qIV$J5q4HoN&lv?Ame)<-g$g!u)Bf;wNE+2_!jthihV
zoVmtqD2avUFk@y1{CwkM>Qup#oJ%Q}14;|e@r_H<2Uw~AS!17O)2VsB>;X;zX$Yq>
z3}t2;oMKbqev6Z%`VTnA;z8L{0<~c;>Gm0NypMZ|fDXj4+{5Z=WWDK}t24XA(J6M`
z;?M==cz+TqvLK}W&+~w%GfzS*xr;iuA%{i$`P1Rst;{lhWVoudpH+#6jD>+>
zd=6bW2^>~Os2)cpC#;0XftRe0eDuNH!FXET0-n?J1WxUjPgobwnil^U7-cY5jc>;e
z`si-Ryl~OmH0E6^d+@}@96Iy{yx4924Fp}^{dZrH+x8a_D<)cR|Gz+C{GOB6Z2GV_
zkVwftMGJp=4bStP6A?Y*PbaM%KI;CyQt8qSQ?8!Msoz)W8QeV+NHIATZ(Czy#&=_)
zl@ZhN%56b2;BBv3SI{^AHEs;u_6w_*UV8#AZLkn=N{dqI@K=4)#S4d%aI{Qi(3YEh
z8C6E6iiqSQr{;$Y468tFGf5&ZbeBi06$hdWC9sVs|AsjDo=8*)=}ut}t;z~WIit
zBh&2x1F-rwJEPbrDJ&M}hgwgpr8mUtCNVki(!Mg&nmA6z#@Z@F2eWDi+^94qS-I!x
z@pBmlGzV9TDg+YY{tN0IO#0*b#mp}Wh0^Nez^kIxnvnM1zQmq3bp3K^UOA-qAADjZ
zh3d96_c#+0S2=JB!nd)LM%9LzR_lm)7Bhj#Zau
zqDic;Ud5iF2Di6l4Hzw}|GO;$(zk2dJQL_KlKlmnbKfm-lD=)sm1-_N%LF?scZoHyX
zCHU*tY4OR+M>trlBkEE8j2<5bh?p$1-p*M;xE&nHmF|(08&DssXd`^oqFfbc!?YY`Hi}9vCtnqZlSfoZ&BeF#*u|+@pSH>t;M7
z@dFoGd-pPMRUngH-NBYLJW^ATYa42Jq=Gm|D7a+~Y8VH`Lxx$w({QgXF3XL3ry^8n
zI$d|JFL65OI}Z~}ONT1+alWzAVlbCbmn6Fq4}RH~(8F5jZ>`
zq-hcyZY)Jng8t$No8HK$T(MXz2f@5^8==&7{xJih?a26T308}zZs-Xv2SQ>Zb6y#J
zfSeH}St;gqg#nHdih34J*DS|?Jym$=j7-
zHa)Bel`u(aAV{O3Xe+$704E1;Xd4LeXvWyK#>KW8Su(=Z`u31kF4C05-y>~kZ#P_5
z?VTGO9q*!2+K^<8G5$^g2~5ez*^0TEqiB_V_=5|moroHO{_hYz@}OCUv(yU&fcw?C
zSGhOS+>GG>t8^B0iR1>SBUR#c3%w5;o$1VdTTGG2%$|v~S$e2PG1X^G-L;=AHrg
z0yDh%)6j8z2MZbZ56s5f@#!X1?GBD772sLXycdHLvWL%D5D|Pe2h%f$(2yEM(aU44
zad@J^F&$PawqaeuJQ#b1ac?HVIivs`qdI5j4c7$?BGNtZ6`oNJW`s#N=&LB&lrkK+
zbZ#1JXXtpvC1x|}*jRshPAt{SFH|%OEHT*pO38=>Z?z62fiOs;sQx@?W;k?3+zJ=u
zhZAf#b}mWZpwEFrm;s~VkB9Ey$gr(Fv+3CTR^eEOS{q8`GY+PTxpEt6&=Oj{4U|0m
z=jy=i48aaGGLnm
z-}4e87>RHW!Omu@T0BZ74&kY~4e=FU%IGj59G;1zH^Qo;tC36qum`dlbYv4i=lz`c
zEaoyhw2m2|JG~e}DY}qYM3)lEcd8?;nAb@#(RnqiB|=FwWnq^I>L7TVw*in25~h;g
zD~KOG#=F`=m^;u()$C62&eZrsYP%zlJPFU>rO-?4aq>BErg$mpgy#`--wSJ{q9_rb
z=(!eX-}UhC)DB1NtZ$SxSk{(IU--PLp^xA3CA+68HOn#667~G$&7F|u^#It{eNl~H
zGo>lBo;xIxN!?mb>IAMq7nrCV~pMHBaSfr2Ki6=?=wJMdu2eBasx5n8E
zrQe<+=k>4@PWXCYFopGAGL?ns%_Oue4fpHEgI-8!l
zJ2-7{&z(VgF#xNRUTj6Mqq^H|dlqwx>KJLEmcFuMpg0W0C9S+!(p1_wv7JSzCHQOb
z<=fINW}v-22EyAXpZBG6sGhLUL_=G2#KLY@(kR93jXd{(hvg?K!R^oU~qB+Cyx=dhW8`}OYD-@LAC})E0
z^4DPIIG$MybuXsrvOM6U4Lqf?M>)*kZXPa`-yIAoy=jD4OXI`t<5NFr0nNNke488X
z16@G;5e_UCZjdXQVVNm=cWe>W3qT?~bM*4Fy;?t>qmd!dh>3Bc51s=yFt=f4Z&RG7
zFYgE^0by>m<}+BSXu<*qd+_i*nX8-);N2V6quZQ`b;ig8-p8t3D!|wCBS~aT5FcSbbQO-?5!lCF;Dx#fZFT0n>{q*W2IQgcWIG
z^)3mO%Wg^?T?Ht3YW!1%S$U?3skOD!p?+T|)zg|_JVXb$4zl$)r7}E(vd4A-3+zlN
zc9-FmUH9hPtxPdsCk;Et*;1sKk;v6ht?QWUo{g$BNWpy|xk{v{BSR^mSi)w5ePw7ZK7UFsV!
zVB}@;SP``32+)|oX8M`~`snwsGnLO;KHe|@&VYMm{3Dgbha7`jEStlyNk(X4__lGs
zyc4E{I(OY=u*@>$_py1Ipetv5&Jl{~go~SJw0WcK8LT)l9?zYTT4Uyg$pJipfONus
z8S;0?!(3X_K7lHP-UJeeRtG1*)z%EN%e*N-!eN9~!d6W)#c(psuw!5IMpmqGg!4di
zN9>&tzfPjuAwB3=0;8-5>d_76Pw|xEBK|qAcq04p2sczTOvnEkTsSiG7&fY8J_nv*
z(c7=s@&F6cxSv4O%&H>v-~R!Rq^vmteb795>0ZAY<Iy-P9Yj?4lD%q$MYzUix^5
zT^Ie*mlWXA^y>T8YW4#-Zm{seT>8V^!SS^Bk5-V{KSprv&8H9o3TkaRbi*kKtjhlg
z#hLTI4AD^QDa2jtz6GL4D$yCEsO@G1y4`dNg0{C#V0b(JVoiuMR>Qs246k8y>Oo6!
zk_fu!slQmE7y;IXQ_#nE1Z
z@fs^GviwbJdxD7TJ~u=`39{5!3rY{wJR}Emi7ia?JN@I5ybV&*J62Zmka~3NU*pEr
z487Ilzv{}FvcIV_1zT@*-&q