1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-09-23 14:31:32 +02:00

Compare commits

..

318 Commits

Author SHA1 Message Date
Joas Schilling
5f3dffa820 [prep-release-3.1.2] Add changelog for 3.1.2-RC1 2014-11-22 19:35:24 +01:00
Joas Schilling
18d5ca9ce5 [prep-release-3.1.2] Prepare Changelog 2014-11-22 19:32:36 +01:00
Joas Schilling
dcd0f200d6 [prep-release-3.1.2] Add migration for 3.1.2-RC1 2014-11-22 19:27:34 +01:00
Joas Schilling
a5b3393bb0 [prep-release-3.1.2] Update version to 3.1.2-RC1 2014-11-22 19:22:40 +01:00
Joas Schilling
5c3b6a8559 Merge pull request #10 from phpbb/ticket/security-171
[ticket/security-171] Use type cast helper for json data
2014-11-22 17:48:37 +01:00
Joas Schilling
a3b18d87dd Merge pull request #8 from phpbb/ticket/security-169
[ticket/security-169] Stop loop through referer dir in top directory
2014-11-22 15:51:48 +01:00
Marc Alexander
0f06b88ee7 [ticket/security-171] Remove duplicate semicolon from tests
SECURITY-171
2014-11-22 15:48:09 +01:00
Joas Schilling
fd993cbaf2 Merge pull request #3157 from marc1706/ticket/13358
[ticket/13358] Add class for retrieving remote file data
2014-11-22 15:42:37 +01:00
Marc Alexander
ab69c79d07 Merge branch 'ticket/13358' into ticket/security-171 2014-11-22 15:24:27 +01:00
Marc Alexander
f3ae5e4cb2 [ticket/13358] Correctly create version_helper in acp_extensions
The full namespace for the file_downloader is now also being used in
version_helper.

PHPBB3-13358
2014-11-22 15:23:26 +01:00
Joas Schilling
8b71103836 Merge pull request #3123 from Elsensee/ticket/13310
[ticket/13310] Add event core.acp_email_modify_sql
2014-11-22 12:21:24 +01:00
Joas Schilling
ea101f7932 Merge pull request #3160 from PayBas/ticket/13228
[ticket/13228] Fix codebox "select all" font-size in UCP and MCP
2014-11-22 12:18:00 +01:00
Joas Schilling
7700f31213 Merge pull request #3116 from rxu/ticket/13297
[ticket/13297] Add unicode modifier to url/email regular expression patterns
2014-11-22 12:13:39 +01:00
Joas Schilling
a83b952f63 Merge pull request #3158 from prototech/ticket/13354
[ticket/13354] Fix incorrect column name when deleting all topic logs.
2014-11-22 12:08:33 +01:00
Joas Schilling
e283611dc2 Merge pull request #3161 from Crizz0/ticket/12885
[ticket/12885] New if for Index-page - board-index-text switch
2014-11-22 11:35:51 +01:00
Joas Schilling
8489e0bdc2 Merge branch 'develop-olympus' into develop-ascraeus 2014-11-22 11:31:41 +01:00
Joas Schilling
a415b8e37b Merge pull request #3164 from Crizz0/ticket/10442
[ticket/10442] Adds <dd>&nbsp;</dd> to <dl> for xhtml correctness
2014-11-22 11:31:31 +01:00
PayBas
2c15388520 [ticket/13228] Gotta use !important after all. Too bad
PHPBB3-13228
2014-11-22 02:42:25 +01:00
Crizzo
867bfa3f9e [ticket/10442] Adds <dd>&nbsp;</dd> to <dl> for xhtml correctness
PHPBB3-10442
2014-11-22 01:08:14 +01:00
Crizzo
4cb930c2c1 [ticket/12885] New if for Index-page - board-index-text switch
PHPBB3-12885
2014-11-22 00:09:38 +01:00
Marc Alexander
70692dd522 Merge pull request #3094 from nickvergessen/ticket/10744
Ticket/10744 Prevent installing styles with reserved names
2014-11-22 00:00:22 +01:00
Joas Schilling
c174862b7e [ticket/10744] Fix some doc blocks
PHPBB3-10744
2014-11-21 23:59:29 +01:00
Joas Schilling
7c683608ab [ticket/10744] Type hint objects for IDE usages
PHPBB3-10744
2014-11-21 23:58:53 +01:00
Joas Schilling
7f8c4d877a [ticket/10744] Prevent installing styles with reserved names
PHPBB3-10744
2014-11-21 23:55:48 +01:00
Marc Alexander
f648fe88d5 [ticket/security-171] Modify tests for new file_downloader class
SECURITY-171
2014-11-21 23:49:54 +01:00
Marc Alexander
9649d78fa4 Merge branch 'ticket/13358' into ticket/security-171 2014-11-21 23:37:17 +01:00
PayBas
16c43b6a7d [ticket/13228] Fix codebox "select all" font-size in UCP and MCP
PHPBB3-13228
2014-11-21 23:35:33 +01:00
Joas Schilling
2e2ab7b485 Merge pull request #3127 from omniError/ticket/13323
[ticket/13323] empty auth option in posting.php
2014-11-21 23:33:45 +01:00
Marc Alexander
6d3ac29aee [ticket/13358] Use protected and public keywords where applicable
PHPBB3-13358
2014-11-21 23:30:47 +01:00
Marc Alexander
171837eefe [ticket/13358] Do not pass variables by reference
PHPBB3-13358
2014-11-21 23:16:22 +01:00
Joas Schilling
0017fad554 Merge pull request #3108 from Elsensee/ticket/13284
[ticket/13284] Message body not included in email
2014-11-21 23:10:00 +01:00
Joas Schilling
c98cceaf22 Merge pull request #3068 from marc1706/ticket/13204
[ticket/13204] Tell user that password was incorrect when exceeding attempts
2014-11-21 22:52:24 +01:00
Joas Schilling
dd7e09d092 Merge pull request #3064 from marc1706/ticket/13197
[ticket/13197] Also delete group avatar from users that have it set
2014-11-21 22:41:17 +01:00
Marc Alexander
4ee05b1c17 [ticket/security-171] Add tests for retrieved remote data in version_helper
SECURITY-171
2014-11-21 22:32:28 +01:00
Marc Alexander
34004612ac [ticket/security-171] Sanitize data from composer.json
SECURITY-171
2014-11-21 22:32:28 +01:00
Marc Alexander
da1888a7fa [ticket/security-171] Use type cast helper for json data
SECURITY-171
2014-11-21 22:32:28 +01:00
Joas Schilling
d7d4f681ca Merge pull request #3156 from prototech/ticket/13316
[ticket/13316] Ensure Recaptcha image uses https when necessary.
2014-11-21 22:29:02 +01:00
Cesar G
8d8c2930d2 [ticket/13354] Fix incorrect column name when deleting all topic logs.
PHPBB3-13354
2014-11-21 12:48:26 -08:00
Marc Alexander
352648f173 [ticket/13358] Fix tests and use exceptions instead of user object
PHPBB3-13358
2014-11-21 21:37:43 +01:00
Marc Alexander
f6e7a94bd5 [ticket/13358] Use file_downloader in get_remote_file()
get_remote_file() has been marked as deprecated.

PHPBB3-13358
2014-11-21 21:37:43 +01:00
Marc Alexander
2793f9c078 [ticket/13358] Add file_downloader to version_helper
PHPBB3-13358
2014-11-21 21:37:43 +01:00
Marc Alexander
a080173010 [ticket/13358] Add file_downloader as replacement for get_remote_file
PHPBB3-13358
2014-11-21 21:37:43 +01:00
Cesar G
f3373e1e32 [ticket/13316] Ensure Recaptcha image uses https when necessary.
PHPBB3-13316
2014-11-21 12:17:04 -08:00
Joas Schilling
f719803fdc Merge pull request #3144 from marc1706/ticket/13337
[ticket/13337] Do not use SQL IN comparison with empty array
2014-11-21 21:04:11 +01:00
Joas Schilling
d56da0d68f Merge pull request #3044 from Elsensee/ticket/13100
[ticket/13100] Display only confirmation buttons when deleting shadow topic
2014-11-21 20:59:22 +01:00
Joas Schilling
1689191f29 Merge pull request #3023 from Nicofuma/ticket/13133
[ticket/13133] Allow @vendor_name for includecss
2014-11-21 20:36:41 +01:00
Joas Schilling
973c2a9a3a Merge pull request #2765 from Elsensee/ticket/11863
[ticket/11863] Set require_activation to none if emails are disabled
2014-11-21 20:18:15 +01:00
Joas Schilling
707a85b6c1 Merge pull request #3043 from rxu/ticket/13182
[ticket/13182] Add posting.php core event to allow modifying the message text
2014-11-21 20:14:36 +01:00
Joas Schilling
71a015557f Merge pull request #3150 from omniError/ticket/13347
[ticket/13347] missing acp_forums template events

Conflicts:
	phpBB/docs/events.md
2014-11-21 20:09:13 +01:00
Joas Schilling
bc52a84998 Merge pull request #3131 from omniError/ticket/13328
[ticket/13328] add core.mcp_view_forum_modify_sql
2014-11-21 20:05:19 +01:00
Joas Schilling
d6e8cce44b Merge pull request #3130 from omniError/ticket/13326
[ticket/13326] add viewtopic_url to event
2014-11-21 19:58:43 +01:00
Joas Schilling
2d6734cb0a Merge pull request #3126 from VSEphpbb/ticket/13290
[ticket/13290] Add EVENT index_body_forumlist_body_after
2014-11-21 19:53:15 +01:00
Joas Schilling
7bc1917908 Merge pull request #3122 from Elsensee/ticket/13309
[ticket/13309] Add event acp_email_options_after
2014-11-21 19:42:14 +01:00
rxu
bb75cd40f5 [ticket/13182] Add posting.php core event to allow modifying the message text
posting.php core event to allow modifying the message before parsing
would be needed for some extensions, like for adding topic title to the
topic URL etc.
Also removed 'delete' var from core.posting_modify_template_vars and
core.modify_posting_parameters as it does not exist.

PHPBB3-13182
2014-11-22 01:33:12 +07:00
Joas Schilling
4bf3dcbebd Merge pull request #3114 from rxu/ticket/13294
[ticket/13294] Add function parse() core event for additional message checks
2014-11-21 19:28:07 +01:00
Joas Schilling
c31b53942d Merge pull request #3071 from rxu/ticket/13220
[ticket/13220] Add template events to memberlist_search.html
2014-11-21 19:23:10 +01:00
rxu
1e867ce52b [ticket/13294] Add function parse() core event for additional message checks
Add core event to the function parse() in includes/message_parser.php to allow
additional handling message before parsing (i.e. perform custom message
checks, cleanup etc.).

PHPBB3-13294
2014-11-20 00:47:51 +07:00
Tristan Darricau
acfe6dd37d Merge pull request #3149 from prototech/ticket/13342
[ticket/13342] Fix invalid resetting of CAPTCHA plugin when using Recaptcha

* prototech/ticket/13342:
  [ticket/13342] Fix invalid resetting of CAPTCHA plugin when using Recaptcha.
2014-11-18 16:28:59 +01:00
Tristan Darricau
0019039bc1 Merge pull request #3148 from prototech/ticket/13315
[ticket/13315] Fix loss of CAPTCHA plugin config value.

* prototech/ticket/13315:
  [ticket/13315] Check for the includes/captcha/plugins/ directory instead.
  [ticket/13315] Fix loss of CAPTCHA plugin config value.
2014-11-18 15:11:07 +01:00
Marc Alexander
ba3e4da853 Merge pull request #3154 from cyberalien/ticket/13349
[ticket/13349] Fix breadcrumb arrow entity
2014-11-18 15:00:45 +01:00
cyberalien
795fd75d60 [ticket/13349] Fix breadcrumb arrow entity
PHPBB3-13349
2014-11-18 14:13:07 +02:00
Marc Alexander
b84d151afa Merge pull request #3151 from nickvergessen/ticket/13298
[ticket/13298] Add missing $db->freeresult(); calls in functions_admin.php
2014-11-18 13:11:55 +01:00
Marc Alexander
17d76de7b8 Merge pull request #3152 from prototech/ticket/13277
[ticket/13277] Force IE to not cache AJAX requests.
2014-11-18 13:08:58 +01:00
Cesar G
052fdcc8d9 Merge remote-tracking branch 'Nicofuma/ticket/13023' into develop-ascraeus
* Nicofuma/ticket/13023:
  [ticket/13023] Add template event posting_editor_buttons_custom_tags_before
2014-11-18 01:30:06 -08:00
Cesar G
266755bd82 [ticket/13277] Force IE to not cache AJAX requests.
Caching causes problems, such as the inability to move a forum/CPF/module in the
same direction by more than one row.

PHPBB3-13277
2014-11-18 00:41:57 -08:00
Cesar G
7c68964153 [ticket/13315] Check for the includes/captcha/plugins/ directory instead.
PHPBB3-13315
2014-11-18 00:37:07 -08:00
Joas Schilling
31c59cad83 [ticket/13298] Add missing $db->freeresult(); calls in functions_admin.php
PHPBB3-13298
2014-11-17 23:56:33 +01:00
Joas Schilling
4f96688bf7 Merge pull request #3145 from bantu/ticket/13338
[ticket/13338] Make all tests run on their own. Avoid _test suffix for abstract test case classes.
2014-11-17 23:32:45 +01:00
omniError
c1a0d1bf3d [ticket/13347] update event docs
PHPBB3-13347
2014-11-17 16:25:56 -06:00
omniError
115bf63538 [ticket/13347] fix CS
PHPBB3-13347
2014-11-17 16:14:57 -06:00
omniError
bd0107a2ab [ticket/13347] missing acp_forums template events
PHPBB3-13347
2014-11-17 16:09:40 -06:00
Joas Schilling
f261c748b6 Merge branch 'develop-olympus' into develop-ascraeus 2014-11-17 22:47:46 +01:00
Joas Schilling
2b55476df0 Merge pull request #3147 from bantu/ticket/13341-ascraeus
[ticket/13341] Change coverage to whitelist to prevent errors with temp files
2014-11-17 22:47:41 +01:00
Joas Schilling
d4fd5e3365 Merge pull request #3146 from bantu/ticket/13341
[ticket/13341] Change coverage to whitelist to prevent errors with temp ...
2014-11-17 22:47:17 +01:00
Andreas Fischer
21c8985fe8 [ticket/13338] Add include statements for dependencies.
PHPBB3-13338
2014-11-17 21:54:02 +01:00
Andreas Fischer
765d72d194 [ticket/13338] Do not use the _test.php suffix for abstract test case classes.
PHPBB3-13338
2014-11-17 21:53:27 +01:00
Andreas Fischer
a918abe113 [ticket/13338] Move insert_config_array_test to functions_acp, add deps.
PHPBB3-13338
2014-11-17 21:53:27 +01:00
Cesar G
7b33018ade [ticket/13315] Fix loss of CAPTCHA plugin config value.
The plugins were moved to phpbb/captcha/plugins/ after this migration was
created, thus the check is no longer valid and ends up resetting the value
prematurely.

PHPBB3-13315
2014-11-16 17:01:38 -08:00
Cesar G
fb34cbf7cd [ticket/13342] Fix invalid resetting of CAPTCHA plugin when using Recaptcha.
The Recaptcha plugin class name does not follow the phpbb_captcha_ prefix
convention as all others. Instead it simply uses phpbb_, hence the check
for its existence under phpbb/captcha/plugins/ fails.

PHPBB3-13342
2014-11-16 17:01:03 -08:00
Nils Adermann
4ffdb12938 Merge remote-tracking branch 'github-nicofuma/ticket/13280' into develop-ascraeus
* github-nicofuma/ticket/13280:
  [ticket/13280] Output escaping for the symfony request object
  [ticket/13280] Add new tests
  [ticket/13280] Make the tests failing
  [ticket/13280] Revert "Merge pull request #3107 from marc1706/ticket/13280"
2014-11-16 16:50:15 +01:00
Tristan Darricau
0dfe1d0d8b [ticket/13280] Output escaping for the symfony request object
PHPBB3-13280
2014-11-16 16:45:19 +01:00
Tristan Darricau
e27b69f42a Merge pull request #3136 from marc1706/ticket/13332
[ticket/13332] Pass user row to passwords manager check method

* marc1706/ticket/13332:
  [ticket/13332] Fix auth provider tests
  [ticket/13332] Remove useless $result assignment
  [ticket/13332] Pass user row to passwords manager check method
2014-11-16 12:22:51 +01:00
Tristan Darricau
074b91497b [ticket/13023] Add template event posting_editor_buttons_custom_tags_before
PHPBB3-13023
2014-11-16 11:52:30 +01:00
Andreas Fischer
8297f700d0 Merge pull request #3146 from bantu/ticket/13341
[ticket/13341] Change coverage to whitelist to prevent errors with temp ...

* bantu/ticket/13341:
  [ticket/13341] Change coverage to whitelist to prevent errors with temp files.

Conflicts:
	phpunit.xml.dist
2014-11-14 17:27:15 +01:00
Andreas Fischer
c40d7f0896 [ticket/13341] Change coverage to whitelist to prevent errors with temp files.
b4f95deefc suggests that this can lead to issues
with classes having the same name. However, this does not seem to be a problem
with the current version of PHPUnit we are using.

Despite https://phpunit.de/manual/4.1/en/code-coverage-analysis.html saying
that addUncoveredFilesFromWhitelist="true" is optional, this seems to be on by
default in PHPUnit 4.1.0. As a result, all files are considered for code
coverage; which is what we want.

processUncoveredFilesFromWhitelist is however false (by default) and as such
even files that are considered for code coverage are not processed through PHP
when not used in actual tests. Since it is already impossible to test multiple
classes with the same name in the same test run (without process isolation),
because that would already lead to "cannot redeclare class" errors, it is also
impossible for "cannot redeclare class" errors to happen in test coverage.

PHPBB3-13341
2014-11-14 13:44:42 +01:00
Marc Alexander
556565d072 [ticket/13337] Allow empty array passed to sql_in_set()
is_array() will evaluate to true even if the array is just an empty array.
Make sure we also expect an empty array passed to sql_in_set().

PHPBB3-13337
2014-11-14 11:08:35 +01:00
Marc Alexander
c9db08873f Merge pull request #3141 from bantu/ticket/13325
[ticket/13325] Make installing composer dependencies in tests folder optional.
2014-11-13 17:11:48 +01:00
Marc Alexander
9f9ce10f2f Merge pull request #3125 from lavigor/ticket/13318
[ticket/13318] login_username needs to have the multibyte parameter set to true
2014-11-13 01:02:49 +01:00
Marc Alexander
2f54ab0a24 Merge pull request #3137 from prototech/ticket/13209
[ticket/13209] Fix loss of CPF language field values when switching steps
2014-11-13 00:14:54 +01:00
Joas Schilling
a520edb8fa Merge branch 'develop-olympus' into develop-ascraeus 2014-11-12 23:04:10 +01:00
Joas Schilling
12fd9a8827 Merge pull request #3143 from bantu/ticket/13331-ascraeus
[ticket/13331] Use docs target for this branch, add docs-all for all branches
2014-11-12 23:04:07 +01:00
Joas Schilling
b99fbd0be0 Merge pull request #3142 from bantu/ticket/13331
[ticket/13331] Use docs target for this branch, add docs-all for all branches
2014-11-12 22:55:30 +01:00
Andreas Fischer
968360fed6 [ticket/13331] Remove travis/sami.conf.php. Use build/sami-checkout.conf.php.
PHPBB3-13331
2014-11-12 21:45:03 +01:00
Andreas Fischer
0103478521 Merge pull request #3142 from bantu/ticket/13331
[ticket/13331] Use docs target for this branch, add docs-all for all branches

* bantu/ticket/13331:
  [ticket/13331] Use docs target for this branch, add docs-all for dev branches.

Conflicts:
	build/build.xml
	build/sami-checkout.conf.php
2014-11-12 21:43:56 +01:00
Andreas Fischer
b55d744e77 [ticket/13331] Use docs target for this branch, add docs-all for dev branches.
PHPBB3-13331
2014-11-12 21:40:26 +01:00
Andreas Fischer
1e4ff6105a [ticket/13325] Make installing composer dependencies in tests folder optional.
Make phpbb_ui_test_case available unconditionally. Nothing depends on 5.3.19
here. Remove __init__ include. Composer classmap autoloading ensures classes
can be loaded.

PHPBB3-13325
2014-11-12 20:34:36 +01:00
Andreas Fischer
8df63a4499 [ticket/13325] Remove whitespace at end of line.
PHPBB3-13325
2014-11-12 20:32:36 +01:00
Andreas Fischer
e1bf699ad4 [ticket/13325] Update / Fix composer.lock hash.
PHPBB3-13325
2014-11-12 20:31:41 +01:00
Tristan Darricau
526a97db7c [ticket/13280] Add new tests
PHPBB3-13280
2014-11-12 15:43:20 +01:00
Tristan Darricau
f142ed28e4 [ticket/13280] Make the tests failing
PHPBB3-13280
2014-11-12 15:43:12 +01:00
Tristan Darricau
6d533d2f86 [ticket/13280] Revert "Merge pull request #3107 from marc1706/ticket/13280"
This reverts commit a1b58d05d1, reversing
changes made to 0e772afb9d.

PHPBB3-13280
2014-11-12 15:42:23 +01:00
Marc Alexander
09ad1d529e Merge pull request #3139 from prototech/ticket/13239
[ticket/13239] Ensure "Add files" button position is correctly calculated.
2014-11-12 13:04:46 +01:00
Marc Alexander
63022f3c59 [ticket/13332] Fix auth provider tests
PHPBB3-13332
2014-11-12 11:42:08 +01:00
Cesar G
430c6aa32f [ticket/13239] Ensure "Add files" button position is correctly calculated.
PHPBB3-13239
2014-11-11 17:30:34 -08:00
Cesar G
ec220d6494 [ticket/13209] Gather language field values for boolean CPF's in all steps.
The user can move back and forth between all three steps and as such the lang
field data should be expected in all steps.

PHPBB3-13209
2014-11-11 16:32:04 -08:00
Cesar G
3108d0b060 [ticket/13209] Fix expected request value of CPF language fields.
Multiple languages can be edited, thus the expected value is an array.

PHPBB3-13209
2014-11-11 16:28:06 -08:00
Marc Alexander
91f7d53d8e [ticket/13332] Remove useless $result assignment
PHPBB3-13332
2014-11-11 19:02:20 +01:00
Marc Alexander
040fc6dd0f [ticket/13332] Pass user row to passwords manager check method
PHPBB3-13332
2014-11-11 19:02:01 +01:00
omniError
65f83b814c [ticket/13326] fix CS
https://tracker.phpbb.com/browse/PHPBB3-13326

PHPBB3-13326
2014-11-11 10:51:03 -06:00
omniError
b648d3eb4c [ticket/13328] fix CS
https://tracker.phpbb.com/browse/PHPBB3-13328

PHPBB3-13328
2014-11-11 10:47:39 -06:00
Tristan Darricau
cd6085ebdc Merge branch 'develop-olympus' into develop-ascraeus
* develop-olympus:
  [ticket/13324] Update sami/sami and fabpot/goutte for new zipball location.
2014-11-11 15:29:58 +01:00
Tristan Darricau
6949f64d28 Merge pull request #3133 from bantu/ticket/13324
[ticket/13324] Update sami/sami and fabpot/goutte for new zipball location

* bantu/ticket/13324:
  [ticket/13324] Update sami/sami and fabpot/goutte for new zipball location.
2014-11-11 15:27:53 +01:00
Andreas Fischer
9bd24e2efb [ticket/13324] Update sami/sami and fabpot/goutte for new zipball location.
PHPBB3-13324
2014-11-11 12:23:02 +01:00
Tristan Darricau
4dfd4e4cd3 Merge pull request #3112 from Elsensee/ticket/13083
[ticket/13083] Fix language string NO_ENTRIES for logs

* Elsensee/ticket/13083:
  [ticket/13083] Fix language string NO_ENTRIES for logs
2014-11-11 11:56:23 +01:00
omniError
71e0de5588 [ticket/13328] add core.mcp_view_forum_modify_sql
https://tracker.phpbb.com/browse/PHPBB3-13328

PHPBB3-13328
2014-11-10 22:57:54 -06:00
omniError
42b595e7e7 [ticket/13326] add viewtopic_url to event
https://tracker.phpbb.com/browse/PHPBB3-13326

PHPBB3-13326
2014-11-10 20:35:23 -06:00
omniError
2d0917c56e [ticket/13323] empty auth option in posting.php
https://tracker.phpbb.com/browse/PHPBB3-13323

PHPBB3-13323
2014-11-10 17:23:23 -06:00
Matt Friedman
971b30a76d [ticket/13290] Add EVENT index_body_forumlist_body_after
PHPBB3-13290
2014-11-10 13:56:52 -08:00
lavigor
8171087cfb [ticket/13318] login_username needs to have the multibyte parameter set to true
This is needed for usernames with UTF-8 characters.

PHPBB3-13318
2014-11-10 20:12:10 +03:00
Marc Alexander
9bb302b92c [ticket/security-169] Stop loop through referer dir in top directory
SECURITY-169
2014-11-09 23:00:39 +01:00
Marc Alexander
6a4cb42565 Merge pull request #3113 from prototech/ticket/13251
[ticket/13251] Escape container parameters defined from config.php.
2014-11-09 20:01:20 +01:00
Oliver Schramm
b6f0c789d5 [ticket/13310] Add event core.acp_email_modify_sql
PHPBB3-13310
2014-11-09 15:34:54 +01:00
rxu
483af1d036 [ticket/13297] Add unicode modifier to url/email regular expression patterns.
PHPBB3-13297
2014-11-09 20:59:14 +07:00
Joas Schilling
7ab774bc8d Merge pull request #3121 from Elsensee/ticket/13300
[ticket/13300] Don't show jabber in profile if jabber is disabled
2014-11-09 14:50:06 +01:00
Marc Alexander
f23634d580 [ticket/13197] Fix tabbing
PHPBB3-13197
2014-11-09 13:43:26 +01:00
Marc Alexander
8dd32c2bb5 [ticket/13197] Correctly format sql query
PHPBB3-13197
2014-11-09 13:07:38 +01:00
Marc Alexander
10b628a20a Merge pull request #3120 from Elsensee/ticket/13301
[ticket/13301] Fix called function in apche auth module
2014-11-09 10:42:30 +01:00
Marc Alexander
8e64652d80 Merge pull request #3119 from Elsensee/ticket/13243
[ticket/13243] Validate announcement entry for existence in version_helper
2014-11-09 10:38:48 +01:00
Oliver Schramm
054ab67771 [ticket/13310] Always use sql_build_query in acp_email.php
PHPBB3-13310
2014-11-09 02:46:50 +01:00
Oliver Schramm
98711450dd [ticket/13309] Add event acp_email_options_after
PHPBB3-13309
2014-11-09 02:31:20 +01:00
Oliver Schramm
ced316d88c [ticket/13300] Don't show jabber in profile if jabber is disabled
PHPBB3-13300
2014-11-09 02:22:39 +01:00
Oliver Schramm
c4628bd92a [ticket/13301] Fix called function in apche auth module
PHPBB3-13301
2014-11-09 01:37:28 +01:00
Oliver Schramm
3fba5e317a [ticket/13243] Validate announcement entry for existence in version_helper
PHPBB3-13243
2014-11-09 01:21:40 +01:00
Joas Schilling
101945acf9 Merge pull request #3110 from Elsensee/ticket/13242
[ticket/13242] Fix HTML validity
2014-11-09 00:39:19 +01:00
Cesar G
92c509bc48 Merge remote-tracking branch 'Elsensee/ticket/13265' into develop-ascraeus
* Elsensee/ticket/13265:
  [ticket/13265] Don't show link to edit own profile to those without permission
2014-11-08 13:53:11 -08:00
rxu
70641e701a [ticket/13220] Add template events to memberlist_search.html
PHPBB3-13220
2014-11-08 21:22:59 +07:00
Tristan Darricau
9aa8f44489 [ticket/13133] Rename $ok variable
PHPBB3-13133
2014-11-07 15:57:31 +01:00
Tristan Darricau
778e0e06f3 Merge pull request #3118 from prototech/ticket/13270
[ticket/13270] Make m_softdelete perm global for boards updated from 3.0.12.

* prototech/ticket/13270:
  [ticket/13270] Make m_softdelete perm global for boards updated from 3.0.12.
2014-11-07 15:19:35 +01:00
Tristan Darricau
8956ec0bd4 Merge pull request #3117 from prototech/ticket/13303
[ticket/13303] Speed up migration dependency calculation.

* prototech/ticket/13303:
  [ticket/13303] Speed up migration dependency calculation.
2014-11-07 11:38:40 +01:00
Cesar G
757e1eac7a [ticket/13270] Make m_softdelete perm global for boards updated from 3.0.12.
PHPBB3-13270
2014-11-07 02:31:11 -08:00
Cesar G
95140bb724 [ticket/13303] Speed up migration dependency calculation.
PHPBB3-13303
2014-11-07 02:30:44 -08:00
Cesar G
d60534d52c [ticket/13251] Escape container parameters defined from config.php.
PHPBB3-13251
2014-11-07 02:30:03 -08:00
Tristan Darricau
a1b58d05d1 Merge pull request #3107 from marc1706/ticket/13280
[ticket/13280] Properly format the current page and add sanitizer to tests

* marc1706/ticket/13280:
  [ticket/13280] Remove unneeded str_replace in build_url()
  [ticket/13280] Only run sanitizer for server superglobal and modify tests
  [ticket/13280] Seperate server sanitizer call and add comment
  [ticket/13280] Add additional sanitizer for ampersands in server superglobal
  [ticket/13280] Correctly format user page for build_url()
  [ticket/13280] Properly format the current page and add sanitizer to tests
2014-11-07 11:10:03 +01:00
Marc Alexander
f432193e07 [ticket/13280] Remove unneeded str_replace in build_url()
PHPBB3-13280
2014-11-06 13:45:09 +01:00
Oliver Schramm
25a7c6e829 [ticket/13083] Fix language string NO_ENTRIES for logs
The string was misleading because there does not
always have to be a period when viewing log entries.

PHPBB3-13083
2014-11-05 21:16:04 +01:00
Oliver Schramm
307fa831d6 [ticket/13265] Don't show link to edit own profile to those without permission
PHPBB3-13265
2014-11-05 21:06:32 +01:00
Oliver Schramm
85031a66cc [ticket/13242] Fix HTML validity
PHPBB3-13242
2014-11-05 20:59:38 +01:00
Oliver Schramm
32010de36e [ticket/13284] Set message body in topic form too, so it will be sent
PHPBB3-13284
2014-11-04 18:33:59 +01:00
Oliver Schramm
b32dc8c667 [ticket/13284] Fix request name so users can cc themselves
PHPBB3-13284
2014-11-04 18:22:46 +01:00
Marc Alexander
32881dbe31 [ticket/13280] Only run sanitizer for server superglobal and modify tests
PHPBB3-13280
2014-11-04 16:54:45 +01:00
Marc Alexander
3986470b3c [ticket/13280] Seperate server sanitizer call and add comment
PHPBB3-13280
2014-11-04 16:14:11 +01:00
Oliver Schramm
e502c8db86 [ticket/13100] Remove pointless variable
PHPBB3-13100
2014-11-04 00:46:06 +01:00
Marc Alexander
13b59af1ff [ticket/13280] Add additional sanitizer for ampersands in server superglobal
PHPBB3-13280
2014-11-03 17:27:01 +01:00
Marc Alexander
6fd092b5df [ticket/13280] Correctly format user page for build_url()
PHPBB3-13280
2014-11-03 16:24:09 +01:00
Marc Alexander
6cc7da0c9c [ticket/13280] Properly format the current page and add sanitizer to tests
PHPBB3-13280
2014-11-03 16:07:32 +01:00
Marc Alexander
0868831675 [ticket/13204] Tell user that password was incorrect when exceeding attempts
At the end of the login method, the captcha was entered correctly and only
the password was incorrect. Therefore, just tell the user that the password
was incorrect. He will see that he still needs to enter a captcha.

PHPBB3-13204
2014-11-02 11:18:08 +01:00
Nils Adermann
0e772afb9d Merge branch 'prep-release-3.1.1' into develop-ascraeus
* prep-release-3.1.1:
  [ticket/13271] Disable CC sender feature for anonymous users
  [prep-release-3.1.1] Add 3.1.1 CHANGELOG
  [prep-release-3.1.1] Add 3.1.1 migration file
  [ticket/13263] Make sure default style exists and clean up code
  [ticket/13263] Only install/set prosilver if no style available
  [ticket/13263] Use prosilver as default style if user's style doesn't exist
  [ticket/security-164] Correctly format page_name
  [ticket/security-164] Sanitize all global variables in symfony_request class
  [ticket/13248] Use functional framework login method in tests
  [ticket/13248] Correctly pass provider name
  [ticket/13248] Always use provider collection for getting provider
  [ticket/13248] Allow specifying different auth provider in provider collection
  [ticket/13248] Use auth provider collection for getting provider
  [ticket/13262] Mention htaccess file when updating from 3.0 to 3.1
  [ticket/13267] Update Automatic Update instructions to include vendor directory
  [ticket/13268] Properly append ternary result in get_existing_indexes()
  [prep-release-3.1.1] Update version number to 3.1.1

Conflicts:
	build/build.xml
	phpBB/includes/constants.php
	phpBB/install/schemas/schema_data.sql
2014-11-02 01:25:51 +01:00
Nils Adermann
b6a4f83c41 Merge remote-tracking branch 'github-security/ticket/security-164-alt' into prep-release-3.1.1
* github-security/ticket/security-164-alt:
  [ticket/security-164] Correctly format page_name
  [ticket/security-164] Sanitize all global variables in symfony_request class
2014-11-02 00:24:02 +01:00
Nils Adermann
c980402a4c Merge branch 'ticket/13271' into prep-release-3.1.1
* ticket/13271:
  [ticket/13271] Disable CC sender feature for anonymous users
2014-11-02 00:22:58 +01:00
Nils Adermann
27be69e3b3 [ticket/13271] Disable CC sender feature for anonymous users
PHPBB3-13271
2014-11-02 00:21:23 +01:00
Nils Adermann
aede89d408 [prep-release-3.1.1] Add 3.1.1 CHANGELOG 2014-11-02 00:20:44 +01:00
Nils Adermann
4ae9e8cf6e [prep-release-3.1.1] Add 3.1.1 migration file 2014-11-02 00:08:21 +01:00
Nils Adermann
0843fd4b77 Merge remote-tracking branch 'github-marc1706/ticket/13263' into prep-release-3.1.1
* github-marc1706/ticket/13263:
  [ticket/13263] Make sure default style exists and clean up code
  [ticket/13263] Only install/set prosilver if no style available
  [ticket/13263] Use prosilver as default style if user's style doesn't exist
2014-11-01 23:57:12 +01:00
Marc Alexander
7461536459 [ticket/13263] Make sure default style exists and clean up code
PHPBB3-13263
2014-11-01 23:53:58 +01:00
Marc Alexander
d1f85f0de3 [ticket/13263] Only install/set prosilver if no style available
Users that have a nonexistent style selectd will revert back to the default
style.

PHPBB3-13263
2014-11-01 23:53:53 +01:00
Marc Alexander
be8b5a41c8 [ticket/13263] Use prosilver as default style if user's style doesn't exist
If prosilver is not installed for whatever reason, it will be installed by
the newly added migration.

PHPBB3-13263
2014-11-01 23:53:48 +01:00
Marc Alexander
f534503a66 [ticket/security-164] Correctly format page_name
SECURITY-164
2014-11-01 22:43:28 +01:00
Marc Alexander
28ef238a5c [ticket/security-164] Sanitize all global variables in symfony_request class
SECURITY-164
2014-11-01 22:43:18 +01:00
Nils Adermann
dde1c7424f Merge pull request #3104 from marc1706/ticket/13248-alt
[ticket/13248] Login functions need to use provider collection for retrieving provider
2014-11-01 22:41:27 +01:00
Marc Alexander
8aec6b58e0 [ticket/13248] Use functional framework login method in tests
PHPBB3-13248
2014-11-01 21:54:34 +01:00
Marc Alexander
d9c868d0f5 [ticket/13248] Correctly pass provider name
PHPBB3-13248
2014-11-01 21:54:27 +01:00
Marc Alexander
a9249bce5e [ticket/13248] Always use provider collection for getting provider
PHPBB3-13248
2014-11-01 21:54:21 +01:00
Marc Alexander
c3f5dc75be [ticket/13248] Allow specifying different auth provider in provider collection
PHPBB3-13248
2014-11-01 21:54:14 +01:00
Marc Alexander
6b057e026c [ticket/13248] Use auth provider collection for getting provider
PHPBB3-13248
2014-11-01 21:54:06 +01:00
Nils Adermann
f3588c66ec Merge branch 'ticket/13262' into prep-release-3.1.1
* ticket/13262:
  [ticket/13262] Mention htaccess file when updating from 3.0 to 3.1
2014-11-01 19:14:11 +01:00
Matt Friedman
a269929f0e [ticket/13262] Mention htaccess file when updating from 3.0 to 3.1
PHPBB3-13262
2014-11-01 19:14:00 +01:00
Nils Adermann
45d054d295 Merge branch 'ticket/13267' into prep-release-3.1.1
* ticket/13267:
  [ticket/13267] Update Automatic Update instructions to include vendor directory
2014-11-01 19:13:21 +01:00
Patrick Webster
8bdbadabb2 [ticket/13267] Update Automatic Update instructions to include vendor directory
PHPBB3-13267
2014-11-01 19:13:09 +01:00
Nils Adermann
2cc9fe5267 Merge branch 'ticket/13268' into prep-release-3.1.1
* ticket/13268:
  [ticket/13268] Properly append ternary result in get_existing_indexes()
2014-11-01 19:12:43 +01:00
Patrick Webster
c3aca59cfb [ticket/13268] Properly append ternary result in get_existing_indexes()
PHPBB3-13268
2014-11-01 19:12:28 +01:00
Nils Adermann
3f3c8d74e8 [prep-release-3.1.1] Update version number to 3.1.1 2014-11-01 18:47:56 +01:00
Marc Alexander
a61299a940 Merge pull request #3098 from VSEphpbb/ticket/13262
[ticket/13262] Mention htaccess file when updating from 3.0 to 3.1
2014-11-01 09:10:34 +01:00
Marc Alexander
af77106a2f Merge pull request #3097 from prototech/ticket/13253
[ticket/13253] Fix MCP queue link in active topics search.
2014-11-01 09:08:11 +01:00
Matt Friedman
416577f3dc [ticket/13262] Mention htaccess file when updating from 3.0 to 3.1
PHPBB3-13262
2014-10-31 13:08:36 -07:00
Cesar G
65c3f2a8f1 [ticket/13253] Fix MCP queue link in active topics search.
PHPBB3-13253
2014-10-30 22:47:51 -07:00
Andreas Fischer
17928563a2 Merge pull request #3093 from nickvergessen/ticket/13241
[ticket/13241] Fix pagination of viewforum with global announcements

* nickvergessen/ticket/13241:
  [ticket/13241] Remove sleep() and change flood interval instead
  [ticket/13241] Remove sleep() since the method takes care of this now
  [ticket/13241] Sleep for 1 second when posting twice in the same second
  [ticket/13241] Fix pagination with global announcements
  [ticket/13241] Correctly ignore announcements from topics list
  [ticket/13241] Add a functional test for viewforum with global announcement
2014-10-29 15:10:39 +01:00
Andreas Fischer
bb4f65d743 Merge pull request #3076 from marc1706/ticket/12703
[ticket/12703] Only query database for subscription types once

* marc1706/ticket/12703:
  [ticket/12703] Only query database for subscription types once
2014-10-29 15:09:55 +01:00
Andreas Fischer
932b75c166 Merge pull request #3065 from dhruvgoel92/feature/phantom
[feature/phantom]

* dhruvgoel92/feature/phantom:
  [ticket/12962] Rename setup-phpbb-test
  [ticket/12962] Use phpVersion in phpunit.xml
  [ticket/12962] Functional tests run for php <5.3.19
  [ticket/12962] Clean up composer.json
  [ticket/12962] Fix Line Endings in bootstrap
  [ticket/12962] Load composer test dependencies for php >= 5.3.19
  [ticket/12962] bootstrap functional and ui test when php >5.3.19
  [ticket/12962] Install test dependencies on travis
  [ticket/12962] Add facebook/webdriver dependency
  [ticket/12962] Fix whitespace characters
  [ticket/12962] Run tests for all databases on Travis
  [ticket/12962] Force language=en for UI tests installation
  [ticket/12962] Dump server output to /dev/null
  [ticket/12962] Start phantomjs on travis in background
  [ticket/12962] Mark test skipped when phantom server not running
  [ticket/12962] Add setup-phantomjs-server.sh
  [ticket/12962] Run UI tests on Travis-mysql
  [ticket/12962] Add UI tests to phpunit.xml.dist
  [ticket/12962] Add quick-links JS test
  [ticket/12962] Add initial class for ui_testing
2014-10-29 15:09:22 +01:00
Joas Schilling
1787ccb585 [ticket/13241] Remove sleep() and change flood interval instead
PHPBB3-13241
2014-10-29 14:17:15 +01:00
Joas Schilling
b868886b25 [ticket/13241] Remove sleep() since the method takes care of this now
PHPBB3-13241
2014-10-29 13:42:44 +01:00
Joas Schilling
e42202e794 [ticket/13241] Sleep for 1 second when posting twice in the same second
PHPBB3-13241
2014-10-29 13:42:43 +01:00
Joas Schilling
9ee177573d [ticket/13241] Fix pagination with global announcements
PHPBB3-13241
2014-10-29 13:42:42 +01:00
Joas Schilling
ae6a3b03c4 [ticket/13241] Correctly ignore announcements from topics list
PHPBB3-13241
2014-10-29 13:42:41 +01:00
Joas Schilling
82aed75b3b [ticket/13241] Add a functional test for viewforum with global announcement
PHPBB3-13241
2014-10-29 13:42:41 +01:00
Joas Schilling
3a2ccd079e Merge branch 'prep-release-3.1.0' into develop-ascraeus 2014-10-28 13:35:27 +01:00
Joas Schilling
197fed16bd [prep-release-3.1.0] Update changelog with final changes 2014-10-28 13:08:52 +01:00
Joas Schilling
c57fbe9d0d Merge branch 'prep-release-3.1.0' into develop-ascraeus 2014-10-28 12:58:45 +01:00
Joas Schilling
12033bc499 Merge branch 'develop-olympus' into prep-release-3.1.0
Conflicts:
	phpBB/phpbb/session.php
2014-10-28 12:57:38 +01:00
Joas Schilling
71c19f6eb7 Merge pull request #3091 from Nicofuma/ticket/13234-2
Ticket/13234 2
2014-10-28 12:56:47 +01:00
Joas Schilling
d2cd24e875 Merge pull request #3090 from Nicofuma/ticket/13234
Ticket/13234
2014-10-28 12:56:15 +01:00
Tristan Darricau
9036edd935 [ticket/13234] Merge branch 'ticket/13234' into ticket/13234-2
* ticket/13234:
  [ticket/13234] Fix conditions and CS

Conflicts:
	phpBB/phpbb/session.php

PHPBB3-13234
2014-10-28 12:27:16 +01:00
Tristan Darricau
fcc320e385 [ticket/13234] Fix conditions and CS
PHPBB3-13234
2014-10-28 12:19:53 +01:00
Joas Schilling
0682e5719d Merge branch 'prep-release-3.1.0' into develop-ascraeus 2014-10-28 10:02:53 +01:00
Joas Schilling
679559ce18 Merge branch 'naderman-ticket/13232' into prep-release-3.1.0 2014-10-28 10:02:33 +01:00
Joas Schilling
2e814cc43f [ticket/13232] Fix spaces vs tabs
PHPBB3-13232
2014-10-28 10:01:28 +01:00
Nils Adermann
087a5363bb [ticket/13234-2] Correctly verify that user_id is set in user data array
PHPBB3-13234-2
2014-10-27 23:56:20 -07:00
Nils Adermann
3472b6c5bc [ticket/13234-2] Never allow autologin/remember me to modify the userid
Ascraeus version of 64d97d0787 commit

PHPBB3-13234
2014-10-27 19:58:32 -07:00
Nils Adermann
e1277c26ca Merge branch 'ticket/13234' into ticket/13234-2
* ticket/13234:
  [ticket/13234] Never allow autologin/remember me to modify the userid
2014-10-27 19:57:16 -07:00
Nils Adermann
64d97d0787 [ticket/13234] Never allow autologin/remember me to modify the userid
This prevents admin relogin with forced user id from overwriting
remember me cookies

PHPBB3-13234
2014-10-27 19:55:56 -07:00
Nils Adermann
b9c08cddd4 Merge branch 'prep-release-3.1.0' into develop-ascraeus
* prep-release-3.1.0:
  [ticket/13227] Properly handle curlwrapper headers in remote avatars
  [ticket/13231] Update the dependencies of the migration contact_admin_form
2014-10-27 19:04:01 -07:00
Nils Adermann
dccbd573e8 [ticket/13232] Ensure prune cron job always gets run in prune test
The cron scheduler might pick a different task but we don't want to go
through them all to find the one we need. So we just make sure cron is
run at all and then manually run the one we want.

PHPBB3-13232
2014-10-27 19:00:23 -07:00
Nils Adermann
efe3aaaf0b Merge pull request #3085 from naderman/ticket/13227
[ticket/13227] Properly handle curlwrapper headers in remote avatars
2014-10-27 18:58:11 -07:00
Nils Adermann
df1212ce27 Merge pull request #3083 from Nicofuma/ticket/13231
[ticket/13231] Update the dependencies of the migration contact_admin_form
2014-10-27 18:51:47 -07:00
Nils Adermann
4c75f013de Merge branch 'prep-release-3.1.0' into develop-ascraeus
* prep-release-3.1.0:
  [ticket/13229] Fix overloading memberlist with redundant SQL queries
2014-10-27 17:01:57 -07:00
Nils Adermann
1f31e8e243 Merge branch 'ticket/13229' into prep-release-3.1.0
* ticket/13229:
  [ticket/13229] Fix overloading memberlist with redundant SQL queries
2014-10-27 17:01:46 -07:00
rxu
16d78407db [ticket/13229] Fix overloading memberlist with redundant SQL queries
PHPBB3-13229
2014-10-27 17:01:29 -07:00
Nils Adermann
4e4c3de103 [ticket/13227] Properly handle curlwrapper headers in remote avatars
Read a bit of the file to ensure header values are populated and then
handle headers in the nested array structure too.

PHPBB3-13227
2014-10-27 16:49:30 -07:00
Nils Adermann
dbaee1a5da Merge pull request #4 from nickvergessen/naderman-ticket/13232
[ticket/13232] Fix more issues with TTL and global cache file
2014-10-27 16:36:39 -07:00
Joas Schilling
6380aea647 [ticket/13232] Fix more issues with TTL and global cache file
PHPBB3-13232
2014-10-28 00:34:51 +01:00
Tristan Darricau
47663a4ad3 [ticket/13231] Update the dependencies of the migration contact_admin_form
PHPBB3-13231
2014-10-27 23:45:24 +01:00
Nils Adermann
0cdd071230 [ticket/13232] Fix indentation
PHPBB3-13232
2014-10-27 15:45:24 -07:00
Nils Adermann
df5366a5ca [ticket/13232] Use a cache var with _ to force TTL and shuffle cron tasks
PHPBB3-13232
2014-10-27 15:42:26 -07:00
Joas Schilling
91a9d25a38 Merge branch 'prep-release-3.1.0' into develop-ascraeus 2014-10-27 23:40:04 +01:00
Joas Schilling
aa916fc43f Merge pull request #3077 from marc1706/ticket/13225
[ticket/13225] Use passwords manager instead of phpbb_hash in migration
2014-10-27 23:38:53 +01:00
Dhruv
505ee586ff [ticket/12962] Rename setup-phpbb-test
PHPBB3-12962
2014-10-27 18:36:33 -04:00
Marc Alexander
b295fa4f4f [ticket/13225] Prefix converted passwords with $CP$ in phpBB 3.0.5-RC1
PHPBB3-13225
2014-10-27 20:57:31 +01:00
Nils Adermann
b1d7386075 Merge branch 'prep-release-3.1.0' into develop-ascraeus
* prep-release-3.1.0:
  [ticket/13230] Add missing globals and missing request object for path helper
  [ticket/13226] Add functional test for group ranks
  [ticket/13226] Fix the usage of $rank_img
2014-10-27 12:25:41 -07:00
Nils Adermann
d693d91e26 Merge remote-tracking branch 'github-nicofuma/ticket/13226' into prep-release-3.1.0
* github-nicofuma/ticket/13226:
  [ticket/13226] Add functional test for group ranks
  [ticket/13226] Fix the usage of $rank_img
2014-10-27 12:25:18 -07:00
Nils Adermann
decabb62c0 Merge pull request #3079 from nickvergessen/ticket/13230
[ticket/13230] Add missing globals and missing request object for path helper
2014-10-27 12:16:12 -07:00
Dhruv
cc82f95c8f [ticket/12962] Use phpVersion in phpunit.xml
PHPBB3-12962
2014-10-27 08:13:41 -07:00
Joas Schilling
47759eb096 [ticket/13230] Add missing globals and missing request object for path helper
PHPBB3-13230
2014-10-27 14:54:17 +01:00
Tristan Darricau
2e5cc62071 [ticket/13226] Add functional test for group ranks
PHPBB3-13226
2014-10-27 14:37:51 +01:00
Tristan Darricau
9ccb87675d [ticket/13226] Fix the usage of $rank_img
PHPBB3-13226
2014-10-27 10:00:24 +01:00
Dhruv
c6cca9d0d2 [ticket/12962] Functional tests run for php <5.3.19
PHPBB3-12962
2014-10-26 21:30:31 -07:00
Dhruv
98554475be [ticket/12962] Clean up composer.json
PHPBB3-12962
2014-10-26 20:58:21 -07:00
Marc Alexander
6cc5160d60 [ticket/13225] Use passwords manager instead of phpbb_hash in migration
PHPBB3-13225
2014-10-26 17:14:34 -07:00
Marc Alexander
cb65cd363a [ticket/12703] Only query database for subscription types once
PHPBB3-12703
2014-10-26 13:56:34 -07:00
Nils Adermann
222bec0204 Merge branch 'prep-release-3.1.0' into develop-ascraeus
* prep-release-3.1.0:
  [prep-release-3.1.0] Update CHANGELOG with last minute changes
2014-10-26 12:54:02 -07:00
Nils Adermann
51251293ab [prep-release-3.1.0] Update CHANGELOG with last minute changes 2014-10-26 12:53:45 -07:00
Nils Adermann
78aa120089 Merge branch 'prep-release-3.1.0' into develop-ascraeus
* prep-release-3.1.0:
  [ticket/13223] Fix USERNAME email template variable in notification
2014-10-26 12:48:25 -07:00
Nils Adermann
d5022d87e7 Merge branch 'ticket/13223' into prep-release-3.1.0
* ticket/13223:
  [ticket/13223] Fix USERNAME email template variable in notification
2014-10-26 12:48:16 -07:00
rxu
5431aa6391 [ticket/13223] Fix USERNAME email template variable in notification
admin_activate_user.php notification type is assigning usernames to email
template variables using user_loader->get_username() in 'no_profile' mode,
which in its turn calls get_username_string() function in 'no_profile' mode.
This causes HTML markup in emails for username colour.

PHPBB3-13223
2014-10-26 12:47:57 -07:00
Nils Adermann
c19ab58420 Merge branch 'prep-release-3.1.0' into develop-ascraeus
* prep-release-3.1.0:
  [ticket/13221] Add bot_update as a dependency to gold
  [ticket/13221] Perform bot updates after user table changes
2014-10-26 12:43:17 -07:00
Marc Alexander
b0942fe31d [ticket/13197] Test that user's group avatar is deleted by group avatar delete
PHPBB3-13197
2014-10-26 12:42:47 -07:00
Nils Adermann
7f347a290c Merge pull request #3073 from nickvergessen/ticket/13221
[ticket/13221] Perform bot updates after user table changes
2014-10-26 12:42:28 -07:00
Joas Schilling
0d1d836a89 [ticket/13221] Add bot_update as a dependency to gold
PHPBB3-13221
2014-10-26 20:03:46 +01:00
Joas Schilling
79d782c1d5 [ticket/13221] Perform bot updates after user table changes
PHPBB3-13221
2014-10-26 19:57:08 +01:00
Andreas Fischer
69cf5782d4 Merge pull request #3054 from Senky/ticket/13193
[ticket/13193] Post count in PMs not a link

* Senky/ticket/13193:
  [ticket/13193] Swap ternary condition members
  [ticket/13193] Make template more readable
  [ticket/13193] Add load_search config check
  [ticket/13193] Add link to post count in PMs
2014-10-26 14:20:33 +01:00
Jakub Senko
79274e904c [ticket/13193] Swap ternary condition members
PHPBB3-13193
2014-10-26 08:44:21 +01:00
Nils Adermann
5441a4ea13 Merge pull request #3067 from marc1706/ticket/13216
[ticket/13216] Use gmdate() instead of date() in datetime tests
2014-10-25 21:26:38 -07:00
Nils Adermann
5c1ef45488 Merge remote-tracking branch 'github-marc1706/ticket/13207' into develop-ascraeus
* github-marc1706/ticket/13207:
  [ticket/13207] Use assert_checkbox_is_checked for registration test
2014-10-25 21:01:51 -07:00
Nils Adermann
7a4b404af7 [develop-ascraeus] Update version number to 3.1.1-RC1-dev 2014-10-25 20:28:46 -07:00
Marc Alexander
1046ada9fc [ticket/13216] Use gmdate() instead of date() in datetime tests
PHPBB3-13216
2014-10-25 20:25:57 -07:00
Marc Alexander
cafd3b79fd [ticket/13207] Use assert_checkbox_is_checked for registration test
PHPBB3-13207
2014-10-25 20:05:25 -07:00
Nils Adermann
a5830fe0d5 Merge branch 'prep-release-3.1.0' into develop-ascraeus
* prep-release-3.1.0:
  [prep-release-3.1.0] Add missing CHANGELOG entries for RC6
2014-10-25 18:11:03 -07:00
Nils Adermann
5cee745fc5 [prep-release-3.1.0] Add missing CHANGELOG entries for RC6 2014-10-25 18:10:30 -07:00
Dhruv
1c88a2cb25 [ticket/12962] Fix Line Endings in bootstrap
PHPBB3-12962
2014-10-25 17:33:47 -07:00
Nils Adermann
9c95831f35 Merge branch 'prep-release-3.1.0' into develop-ascraeus
* prep-release-3.1.0:
  [prep-release-3.1.0] Add CHANGELOG for 3.1.0
2014-10-25 17:12:34 -07:00
Nils Adermann
c789acc091 [prep-release-3.1.0] Add CHANGELOG for 3.1.0 2014-10-25 17:12:14 -07:00
Nils Adermann
8de93bee95 Merge branch 'prep-release-3.1.0' into develop-ascraeus
* prep-release-3.1.0:
  [prep-release-3.1.0] Add 3.1.0 gold release migration
2014-10-25 17:05:07 -07:00
Nils Adermann
f2e9c62a97 [prep-release-3.1.0] Add 3.1.0 gold release migration 2014-10-25 17:03:50 -07:00
Nils Adermann
26d4483d36 Merge branch 'prep-release-3.1.0' into develop-ascraeus
* prep-release-3.1.0:
  [ticket/13207] Add notification manager mock to user_add method in tests
  [ticket/13207] Move default user notifications settings to user_add()
  [ticket/13207] Add default subscription options for newly registered users
2014-10-25 16:56:05 -07:00
Nils Adermann
4859cec0c5 Merge remote-tracking branch 'github-marc1706/ticket/13207' into prep-release-3.1.0
* github-marc1706/ticket/13207:
  [ticket/13207] Add notification manager mock to user_add method in tests
  [ticket/13207] Move default user notifications settings to user_add()
  [ticket/13207] Add default subscription options for newly registered users
2014-10-25 16:55:29 -07:00
Marc Alexander
0dcb874c09 [ticket/13207] Add notification manager mock to user_add method in tests
PHPBB3-13207
2014-10-25 16:16:25 -07:00
Marc Alexander
1da1a70650 [ticket/13197] Also delete group avatar from users that have it set
PHPBB3-13197
2014-10-25 15:57:41 -07:00
Dhruv
e78210dc96 [ticket/12962] Load composer test dependencies for php >= 5.3.19
PHPBB3-12962
2014-10-25 15:34:39 -07:00
Marc Alexander
81ad381263 [ticket/13207] Move default user notifications settings to user_add()
PHPBB3-13207
2014-10-25 14:57:01 -07:00
Marc Alexander
18f24a2270 [ticket/13207] Add default subscription options for newly registered users
PHPBB3-13207
2014-10-25 14:50:01 -07:00
Nils Adermann
f22cd2d734 Merge branch 'prep-release-3.1.0' into develop-ascraeus
* prep-release-3.1.0:
  [ticket/13215] Update Symfony components to v2.3.21.
2014-10-25 14:01:54 -07:00
Nils Adermann
07e7cde560 Merge pull request #3062 from bantu/ticket/13215
[ticket/13215] Update Symfony components to v2.3.21.
2014-10-25 14:01:13 -07:00
Andreas Fischer
ad06f6dd71 [ticket/13215] Update Symfony components to v2.3.21.
PHPBB3-13215
2014-10-25 21:29:45 +02:00
Nils Adermann
9ea08aa4d7 Merge branch 'prep-release-3.1.0' into develop-ascraeus
* prep-release-3.1.0:
2014-10-25 12:09:55 -07:00
Nils Adermann
4e952ad443 Merge commit '078e0c1e440f7f906b670348e8da00141e245876' into prep-release-3.1.0
* commit '078e0c1e440f7f906b670348e8da00141e245876':
  [ticket/13211] Move console migrator output handler back to console folder
  [ticket/13211] Also use log wrapper output handler for console migrations
  [ticket/13211] Move console migrator output handler to db folder
  [ticket/13211] Add log wrapper for writing database updater to log file
  [ticket/13126] Add missing use statement
  [ticket/13126] Fix tests
  [ticket/13126] Change messages verbosity levels
  [ticket/13126] Move migrator_output_handler to an interface
  [ticket/13126] Extends migrator_output_handler instead of using a closure
  [ticket/13126] Improve the feedback when running the migrations
2014-10-25 12:09:20 -07:00
Nils Adermann
6308a442d1 Merge pull request #3060 from marc1706/ticket/13211
[ticket/13211] Add log wrapper for writing database updater to log file
2014-10-25 12:04:29 -07:00
Marc Alexander
078e0c1e44 [ticket/13211] Move console migrator output handler back to console folder
PHPBB3-13211
2014-10-25 12:03:13 -07:00
Marc Alexander
8443463006 [ticket/13211] Also use log wrapper output handler for console migrations
PHPBB3-13211
2014-10-25 11:55:15 -07:00
Andreas Fischer
d2e3198407 Merge branch 'prep-release-3.1.0' into develop-ascraeus
* prep-release-3.1.0:
  [ticket/13210] Use the correct config value
2014-10-25 19:50:26 +02:00
Andreas Fischer
a43879fe91 Merge pull request #3061 from Elsensee/ticket/13210
[ticket/13210] Use the correct config value

* Elsensee/ticket/13210:
  [ticket/13210] Use the correct config value
2014-10-25 19:48:33 +02:00
Andreas Fischer
103c929ff0 Merge branch 'prep-release-3.1.0' into develop-ascraeus
* prep-release-3.1.0:
  [ticket/13208] Add security issues to the final changelog
  [prep-release-3.1.0] Prepare Changelog
  [prep-release-3.1.0] Update version to 3.1.0
2014-10-25 19:39:50 +02:00
Oliver Schramm
a9a67b08a5 [ticket/13210] Use the correct config value
PHPBB3-13210
2014-10-25 14:28:56 +02:00
Marc Alexander
b27b9a6984 [ticket/13211] Move console migrator output handler to db folder
PHPBB3-13211
2014-10-24 13:33:26 -07:00
Marc Alexander
516bd9ea51 [ticket/13211] Add log wrapper for writing database updater to log file
PHPBB3-13211
2014-10-24 13:22:56 -07:00
Marc Alexander
14300a1475 Merge remote-tracking branch 'Nicofuma/ticket/13126' into ticket/13211 2014-10-24 13:22:39 -07:00
Marc Alexander
6217a51920 Merge pull request #3059 from nickvergessen/ticket/13208
[ticket/13208] Add security issues to the final changelog
2014-10-23 08:56:01 -04:00
Joas Schilling
c814483627 [ticket/13208] Add security issues to the final changelog
PHPBB3-13208
2014-10-23 12:36:27 +02:00
Joas Schilling
1cd09a03e6 [prep-release-3.1.0] Prepare Changelog 2014-10-23 12:25:52 +02:00
Joas Schilling
80a9c24b6b [prep-release-3.1.0] Update version to 3.1.0 2014-10-23 12:22:02 +02:00
Joas Schilling
08f365236a Merge branch 'prep-release-3.1.0-RC6' into develop-ascraeus 2014-10-23 02:44:45 +02:00
Joas Schilling
7a90184421 [prep-release-3.1.0-RC6] Update phpBB Version for RC7 development 2014-10-23 02:44:18 +02:00
Tristan Darricau
fdece6cdf3 [ticket/13126] Add missing use statement
PHPBB3-13126
2014-10-22 15:25:50 +02:00
Jakub Senko
5581a30f58 [ticket/13193] Make template more readable
PHPBB3-13193
2014-10-21 23:12:00 +02:00
Jakub Senko
0dcfcf5854 [ticket/13193] Add load_search config check
PHPBB3-13193
2014-10-21 22:53:59 +02:00
Jakub Senko
92f077a4e9 [ticket/13193] Add link to post count in PMs
PHPBB3-13193
2014-10-21 22:32:57 +02:00
Tristan Darricau
981d3005f3 [ticket/13126] Fix tests
PHPBB3-13126
2014-10-20 20:46:11 +02:00
Tristan Darricau
faf4b03c43 [ticket/13126] Change messages verbosity levels
PHPBB3-13126
2014-10-20 19:42:54 +02:00
Tristan Darricau
8f6fcd2744 [ticket/13126] Move migrator_output_handler to an interface
PHPBB3-13126
2014-10-20 19:41:32 +02:00
Oliver Schramm
30213816ae [ticket/13100] Display only confirmation buttons when deleting shadow topic
PHPBB3-13100
2014-10-20 00:24:16 +02:00
Oliver Schramm
0ba3bd9aed [ticket/11863] Add functional test
PHPBB3-11863
2014-10-17 23:33:28 +02:00
Oliver Schramm
f049fcd604 [ticket/11863] Display warning to user because of activation method
PHPBB3-11863
2014-10-17 15:42:11 +02:00
Oliver Schramm
01df1d3301 [ticket/11863] Grey out unavailable activation methods when emails disabled
Further fall back to USER_ACTIVATION_DISABLE when emails are disabled
but evaluate it at runtime.

PHPBB3-11863
2014-10-17 15:40:03 +02:00
Tristan Darricau
58075e25e8 [ticket/13126] Extends migrator_output_handler instead of using a closure
PHPBB3-13126
2014-10-16 01:34:23 +02:00
Tristan Darricau
56d7c2c6ed [ticket/13126] Improve the feedback when running the migrations
PHPBB3-13126
2014-10-14 17:58:29 +02:00
Tristan Darricau
d285363700 [ticket/13133] Add unit tests
PHPBB3-13133
2014-10-09 19:54:56 +02:00
Tristan Darricau
911831a9c5 [ticket/13133] Allow @vendor_name for includecss
PHPBB3-13133
2014-10-08 18:25:36 +02:00
Dhruv
29ffddee71 [ticket/12962] bootstrap functional and ui test when php >5.3.19
PHPBB3-12962
2014-09-21 15:54:52 +05:30
Dhruv
7fa596a991 [ticket/12962] Install test dependencies on travis
PHPBB3-12962
2014-09-21 14:24:36 +05:30
Dhruv
77d52982c8 [ticket/12962] Add facebook/webdriver dependency
Create a new composer.json for tests dir and add
facebook/webdriver dependency

PHPBB3-12962
2014-09-21 14:24:29 +05:30
Dhruv
a1dff65cd1 [ticket/12962] Fix whitespace characters
PHPBB3-12962
2014-09-21 13:53:28 +05:30
Dhruv
a2627e8790 [ticket/12962] Run tests for all databases on Travis
PHPBB3-12962
2014-09-21 13:53:26 +05:30
Dhruv
20dfb23dd4 [ticket/12962] Force language=en for UI tests installation
PHPBB3-12962
2014-09-21 13:53:24 +05:30
Dhruv
d1935b0b0b [ticket/12962] Dump server output to /dev/null
PHPBB3-12962
2014-09-21 13:53:23 +05:30
Dhruv
039b466bd0 [ticket/12962] Start phantomjs on travis in background
PHPBB3-12962
2014-09-21 13:53:20 +05:30
Dhruv
c371e86fa1 [ticket/12962] Mark test skipped when phantom server not running
PHPBB3-12962
2014-09-21 13:53:19 +05:30
Dhruv
8d0933ca4b [ticket/12962] Add setup-phantomjs-server.sh
PHPBB3-12962
2014-09-21 13:53:17 +05:30
Dhruv
6de352f7da [ticket/12962] Run UI tests on Travis-mysql
PHPBB3-12962
2014-09-21 13:53:15 +05:30
Dhruv
c0d3cf6a27 [ticket/12962] Add UI tests to phpunit.xml.dist
PHPBB3-12962
2014-09-21 13:53:14 +05:30
Dhruv
f21ef60175 [ticket/12962] Add quick-links JS test
PHPBB3-12962
2014-09-21 13:53:08 +05:30
Dhruv
77f8bb48fe [ticket/12962] Add initial class for ui_testing
PHPBB3-12962
2014-09-21 12:07:06 +05:30
178 changed files with 3342 additions and 842 deletions

1
.gitignore vendored
View File

@@ -22,3 +22,4 @@
/tests/phpbb_unit_tests.sqlite*
/tests/test_config*.php
/tests/tmp/*
/tests/vendor

View File

@@ -34,6 +34,7 @@ install:
before_script:
- travis/setup-database.sh $DB $TRAVIS_PHP_VERSION
- phantomjs --webdriver=8910 > /dev/null &
script:
- travis/phing-sniff.sh $DB $TRAVIS_PHP_VERSION

View File

@@ -2,9 +2,9 @@
<project name="phpBB" description="The phpBB forum software" default="all" basedir="../">
<!-- a few settings for the build -->
<property name="newversion" value="3.1.0-RC6" />
<property name="prevversion" value="3.1.0-RC5" />
<property name="olderversions" value="3.0.12, 3.1.0-a1, 3.1.0-a2, 3.1.0-a3, 3.1.0-b1, 3.1.0-b2, 3.1.0-b3, 3.1.0-b4, 3.1.0-RC1, 3.1.0-RC2, 3.1.0-RC3, 3.1.0-RC4" />
<property name="newversion" value="3.1.2-RC1" />
<property name="prevversion" value="3.1.1" />
<property name="olderversions" value="3.0.12, 3.1.0-a1, 3.1.0-a2, 3.1.0-a3, 3.1.0-b1, 3.1.0-b2, 3.1.0-b3, 3.1.0-b4, 3.1.0-RC1, 3.1.0-RC2, 3.1.0-RC3, 3.1.0-RC4, 3.1.0-RC5, 3.1.0-RC6, 3.1.0" />
<!-- no configuration should be needed beyond this point -->
<property name="oldversions" value="${olderversions}, ${prevversion}" />
@@ -117,9 +117,16 @@
</if>
</target>
<!-- Builds docs for current branch into build/api/output/master -->
<target name="docs">
<exec dir="."
command="phpBB/vendor/bin/sami.php update build/sami.conf.php"
command="phpBB/vendor/bin/sami.php update build/sami-checkout.conf.php"
passthru="true" />
</target>
<!-- Builds docs for multiple branches/tags into build/api/output/$branch -->
<target name="docs-all">
<exec dir="."
command="phpBB/vendor/bin/sami.php update build/sami-all.conf.php"
passthru="true" />
</target>

View File

@@ -20,7 +20,7 @@ if ($_SERVER['argc'] != 2)
$fixVersion = $_SERVER['argv'][1];
$query = 'project = PHPBB3
$query = 'project IN (PHPBB3, SECURITY)
AND resolution = Fixed
AND fixVersion = "' . $fixVersion . '"
AND status IN ("Unverified Fix", Closed)';

30
build/sami-all.conf.php Normal file
View File

@@ -0,0 +1,30 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
require __DIR__ . '/sami-checkout.conf.php';
$config['versions'] = Sami\Version\GitVersionCollection::create(__DIR__ . '/../')
/*
This would be nice, but currently causes various problems that need
debugging.
->addFromTags('release-3.0.*')
->add('develop-olympus', '3.0-next (olympus)')
->addFromTags('release-3.1.*')
->add('develop-ascraeus', '3.1-next (ascraeus)')
->add('develop')
*/
->add('develop-olympus')
->add('develop-ascraeus')
;
return new Sami\Sami($iterator, $config);

View File

@@ -31,23 +31,8 @@ $iterator = Symfony\Component\Finder\Finder::create()
->notPath('data')
;
$versions = Sami\Version\GitVersionCollection::create(__DIR__ . '/../')
/*
This would be nice, but currently causes various problems that need
debugging.
->addFromTags('release-3.0.*')
->add('develop-olympus', '3.0-next (olympus)')
->addFromTags('release-3.1.*')
->add('develop-ascraeus', '3.1-next (ascraeus)')
->add('develop')
*/
->add('develop-olympus')
->add('develop-ascraeus')
;
$config = array(
'theme' => 'enhanced',
'versions' => $versions,
'title' => 'phpBB API Documentation',
'build_dir' => __DIR__.'/api/output/%version%',
'cache_dir' => __DIR__.'/api/cache/%version%',

View File

@@ -47,6 +47,8 @@
<dd><input id="send" type="checkbox" class="radio" name="send_immediately" checked="checked" /></dd>
</dl>
<!-- EVENT acp_email_options_after -->
<p class="submit-buttons">
<input class="button1" type="submit" id="submit" name="submit" value="{L_SEND_EMAIL}" />&nbsp;
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />

View File

@@ -111,6 +111,7 @@
<fieldset>
<legend>{L_FORUM_SETTINGS}</legend>
<!-- EVENT acp_forums_main_settings_prepend -->
<dl>
<dt><label for="forum_type">{L_FORUM_TYPE}{L_COLON}</label></dt>
<dd><select id="forum_type" name="forum_type" onchange="display_options(this.options[this.selectedIndex].value);">{S_FORUM_TYPE_OPTIONS}</select></dd>
@@ -182,6 +183,7 @@
<dt><label for="forum_style">{L_FORUM_STYLE}{L_COLON}</label></dt>
<dd><select id="forum_style" name="forum_style"><option value="0">{L_DEFAULT_STYLE}</option>{S_STYLES_OPTIONS}</select></dd>
</dl>
<!-- EVENT acp_forums_main_settings_append -->
</fieldset>
<div id="forum_cat_options">
@@ -198,6 +200,7 @@
<div id="forum_post_options">
<fieldset>
<legend>{L_GENERAL_FORUM_SETTINGS}</legend>
<!-- EVENT acp_forums_normal_settings_prepend -->
<dl>
<dt><label for="forum_status">{L_FORUM_STATUS}{L_COLON}</label></dt>
<dd><select id="forum_status" name="forum_status">{S_STATUS_OPTIONS}</select></dd>
@@ -246,6 +249,7 @@
<fieldset>
<legend>{L_FORUM_PRUNE_SETTINGS}</legend>
<!-- EVENT acp_forums_prune_settings_prepend -->
<dl>
<dt><label for="enable_prune">{L_FORUM_AUTO_PRUNE}{L_COLON}</label><br /><span>{L_FORUM_AUTO_PRUNE_EXPLAIN}</span></dt>
<dd><label><input type="radio" class="radio" name="enable_prune" value="1"<!-- IF S_PRUNE_ENABLE --> id="enable_prune" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
@@ -291,6 +295,7 @@
<dt><label for="prune_shadow_days">{L_AUTO_PRUNE_SHADOW_DAYS}{L_COLON}</label><br /><span>{L_AUTO_PRUNE_SHADOW_DAYS_EXPLAIN}</span></dt>
<dd><input type="number" id="prune_shadow_days" name="prune_shadow_days" value="{PRUNE_SHADOW_DAYS}" maxlength="4" size="4" min="0" max="9999" /> {L_DAYS}</dd>
</dl>
<!-- EVENT acp_forums_prune_settings_append -->
</fieldset>
</div>
@@ -317,6 +322,7 @@
<div id="forum_rules_options">
<fieldset>
<legend>{L_FORUM_RULES}</legend>
<!-- EVENT acp_forums_rules_settings_prepend -->
<dl>
<dt><label for="forum_rules_link">{L_FORUM_RULES_LINK}{L_COLON}</label><br /><span>{L_FORUM_RULES_LINK_EXPLAIN}</span></dt>
<dd><input class="text medium" type="text" id="forum_rules_link" name="forum_rules_link" value="{FORUM_RULES_LINK}" maxlength="255" /></dd>
@@ -334,6 +340,7 @@
<label><input type="checkbox" class="radio" name="rules_parse_smilies"<!-- IF S_SMILIES_CHECKED --> checked="checked"<!-- ENDIF --> /> {L_PARSE_SMILIES}</label>
<label><input type="checkbox" class="radio" name="rules_parse_urls"<!-- IF S_URLS_CHECKED --> checked="checked"<!-- ENDIF --> /> {L_PARSE_URLS}</label></dd>
</dl>
<!-- EVENT acp_forums_rules_settings_append -->
</fieldset>
</div>

View File

@@ -386,7 +386,8 @@ phpbb.ajaxify = function(options) {
type: method,
data: data,
success: returnHandler,
error: errorHandler
error: errorHandler,
cache: false
});
request.always(function() {
$loadingIndicator.fadeOut(phpbb.alertTime);

View File

@@ -34,6 +34,14 @@ phpbb.plupload.initialize = function() {
if (uploader.features.dragdrop) {
$('#drag-n-drop-message').show();
}
// Ensure "Add files" button position is correctly calculated.
if ($('#attach-panel-multi').is(':visible')) {
uploader.refresh();
}
$('[data-subpanel="attach-panel"]').one('click', function() {
uploader.refresh();
});
});
};

191
phpBB/composer.lock generated
View File

@@ -108,17 +108,17 @@
},
{
"name": "symfony/config",
"version": "v2.3.19",
"version": "v2.3.21",
"target-dir": "Symfony/Component/Config",
"source": {
"type": "git",
"url": "https://github.com/symfony/Config.git",
"reference": "b34d2b32a92938476f0689486e7a11ea1aeb079e"
"reference": "f9fac999dbc2c6aabd749c034d938b5f9aa5fb7d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/Config/zipball/b34d2b32a92938476f0689486e7a11ea1aeb079e",
"reference": "b34d2b32a92938476f0689486e7a11ea1aeb079e",
"url": "https://api.github.com/repos/symfony/Config/zipball/f9fac999dbc2c6aabd749c034d938b5f9aa5fb7d",
"reference": "f9fac999dbc2c6aabd749c034d938b5f9aa5fb7d",
"shasum": ""
},
"require": {
@@ -152,21 +152,21 @@
],
"description": "Symfony Config Component",
"homepage": "http://symfony.com",
"time": "2014-08-02 07:53:48"
"time": "2014-09-23 05:15:05"
},
{
"name": "symfony/console",
"version": "v2.3.19",
"version": "v2.3.21",
"target-dir": "Symfony/Component/Console",
"source": {
"type": "git",
"url": "https://github.com/symfony/Console.git",
"reference": "a2723f99716c2fa6411e2eb5842edbe680e4b462"
"reference": "aa12ac573c583a74c2cb26ad9be478e119f04ad1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/Console/zipball/a2723f99716c2fa6411e2eb5842edbe680e4b462",
"reference": "a2723f99716c2fa6411e2eb5842edbe680e4b462",
"url": "https://api.github.com/repos/symfony/Console/zipball/aa12ac573c583a74c2cb26ad9be478e119f04ad1",
"reference": "aa12ac573c583a74c2cb26ad9be478e119f04ad1",
"shasum": ""
},
"require": {
@@ -205,21 +205,21 @@
],
"description": "Symfony Console Component",
"homepage": "http://symfony.com",
"time": "2014-08-07 15:55:24"
"time": "2014-10-05 13:45:10"
},
{
"name": "symfony/debug",
"version": "v2.3.19",
"version": "v2.3.21",
"target-dir": "Symfony/Component/Debug",
"source": {
"type": "git",
"url": "https://github.com/symfony/Debug.git",
"reference": "91e3a1480c67601d2406cd938735abe0243e1c95"
"reference": "883f847ad179e92549a8cea372b08e5ef47ffe40"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/Debug/zipball/91e3a1480c67601d2406cd938735abe0243e1c95",
"reference": "91e3a1480c67601d2406cd938735abe0243e1c95",
"url": "https://api.github.com/repos/symfony/Debug/zipball/883f847ad179e92549a8cea372b08e5ef47ffe40",
"reference": "883f847ad179e92549a8cea372b08e5ef47ffe40",
"shasum": ""
},
"require": {
@@ -261,21 +261,21 @@
],
"description": "Symfony Debug Component",
"homepage": "http://symfony.com",
"time": "2014-07-07 10:13:42"
"time": "2014-10-09 16:42:17"
},
{
"name": "symfony/dependency-injection",
"version": "v2.3.19",
"version": "v2.3.21",
"target-dir": "Symfony/Component/DependencyInjection",
"source": {
"type": "git",
"url": "https://github.com/symfony/DependencyInjection.git",
"reference": "5ee5795515be251c56057d79154e561ee1efecd2"
"reference": "e2324e1c8c39faa5f27e6170b278d7f631574141"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/5ee5795515be251c56057d79154e561ee1efecd2",
"reference": "5ee5795515be251c56057d79154e561ee1efecd2",
"url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/e2324e1c8c39faa5f27e6170b278d7f631574141",
"reference": "e2324e1c8c39faa5f27e6170b278d7f631574141",
"shasum": ""
},
"require": {
@@ -317,21 +317,21 @@
],
"description": "Symfony DependencyInjection Component",
"homepage": "http://symfony.com",
"time": "2014-08-27 08:32:18"
"time": "2014-10-01 05:38:33"
},
{
"name": "symfony/event-dispatcher",
"version": "v2.3.19",
"version": "v2.3.21",
"target-dir": "Symfony/Component/EventDispatcher",
"source": {
"type": "git",
"url": "https://github.com/symfony/EventDispatcher.git",
"reference": "2c64e46d7e22bcafcab4413ff62bc389abf87ea5"
"reference": "3e0b837811fadd73c833c7c06a92201d953df59d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/2c64e46d7e22bcafcab4413ff62bc389abf87ea5",
"reference": "2c64e46d7e22bcafcab4413ff62bc389abf87ea5",
"url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/3e0b837811fadd73c833c7c06a92201d953df59d",
"reference": "3e0b837811fadd73c833c7c06a92201d953df59d",
"shasum": ""
},
"require": {
@@ -371,21 +371,21 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "http://symfony.com",
"time": "2014-07-25 15:00:14"
"time": "2014-10-01 05:39:06"
},
{
"name": "symfony/filesystem",
"version": "v2.3.19",
"version": "v2.3.21",
"target-dir": "Symfony/Component/Filesystem",
"source": {
"type": "git",
"url": "https://github.com/symfony/Filesystem.git",
"reference": "007359d2822d5eba4f04f6507bc9b46877c622b4"
"reference": "1c3a5fab445d1d4a5d57f8fbf1379696c9785942"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/Filesystem/zipball/007359d2822d5eba4f04f6507bc9b46877c622b4",
"reference": "007359d2822d5eba4f04f6507bc9b46877c622b4",
"url": "https://api.github.com/repos/symfony/Filesystem/zipball/1c3a5fab445d1d4a5d57f8fbf1379696c9785942",
"reference": "1c3a5fab445d1d4a5d57f8fbf1379696c9785942",
"shasum": ""
},
"require": {
@@ -418,21 +418,21 @@
],
"description": "Symfony Filesystem Component",
"homepage": "http://symfony.com",
"time": "2014-08-31 03:30:23"
"time": "2014-09-22 08:32:35"
},
{
"name": "symfony/http-foundation",
"version": "v2.3.19",
"version": "v2.3.21",
"target-dir": "Symfony/Component/HttpFoundation",
"source": {
"type": "git",
"url": "https://github.com/symfony/HttpFoundation.git",
"reference": "d0125fed988da9e189864c2e6de967b3ee7f1d98"
"reference": "30c90f08f948dd43e7310beae7a85c02ad2b655d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/d0125fed988da9e189864c2e6de967b3ee7f1d98",
"reference": "d0125fed988da9e189864c2e6de967b3ee7f1d98",
"url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/30c90f08f948dd43e7310beae7a85c02ad2b655d",
"reference": "30c90f08f948dd43e7310beae7a85c02ad2b655d",
"shasum": ""
},
"require": {
@@ -468,21 +468,21 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "http://symfony.com",
"time": "2014-09-03 07:39:11"
"time": "2014-10-23 13:11:04"
},
{
"name": "symfony/http-kernel",
"version": "v2.3.19",
"version": "v2.3.21",
"target-dir": "Symfony/Component/HttpKernel",
"source": {
"type": "git",
"url": "https://github.com/symfony/HttpKernel.git",
"reference": "a24817f69012b23ce7c554af6b4c7b53235c7c55"
"reference": "0154ff659004d4148e8da0f2bdb672efe55e6ee5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/HttpKernel/zipball/a24817f69012b23ce7c554af6b4c7b53235c7c55",
"reference": "a24817f69012b23ce7c554af6b4c7b53235c7c55",
"url": "https://api.github.com/repos/symfony/HttpKernel/zipball/0154ff659004d4148e8da0f2bdb672efe55e6ee5",
"reference": "0154ff659004d4148e8da0f2bdb672efe55e6ee5",
"shasum": ""
},
"require": {
@@ -539,21 +539,21 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "http://symfony.com",
"time": "2014-09-03 09:45:27"
"time": "2014-10-24 05:54:08"
},
{
"name": "symfony/routing",
"version": "v2.3.19",
"version": "v2.3.21",
"target-dir": "Symfony/Component/Routing",
"source": {
"type": "git",
"url": "https://github.com/symfony/Routing.git",
"reference": "aa2beef5d5f1d84250b5ca73a4056c0504e5969e"
"reference": "f7f8ebf9c99e5ebfdb908c3558a818c2883eab1f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/Routing/zipball/aa2beef5d5f1d84250b5ca73a4056c0504e5969e",
"reference": "aa2beef5d5f1d84250b5ca73a4056c0504e5969e",
"url": "https://api.github.com/repos/symfony/Routing/zipball/f7f8ebf9c99e5ebfdb908c3558a818c2883eab1f",
"reference": "f7f8ebf9c99e5ebfdb908c3558a818c2883eab1f",
"shasum": ""
},
"require": {
@@ -563,6 +563,7 @@
"doctrine/common": "~2.2",
"psr/log": "~1.0",
"symfony/config": "~2.2",
"symfony/http-foundation": "~2.3",
"symfony/yaml": "~2.0"
},
"suggest": {
@@ -597,21 +598,21 @@
],
"description": "Symfony Routing Component",
"homepage": "http://symfony.com",
"time": "2014-08-15 09:05:55"
"time": "2014-10-13 12:38:27"
},
{
"name": "symfony/yaml",
"version": "v2.3.19",
"version": "v2.3.21",
"target-dir": "Symfony/Component/Yaml",
"source": {
"type": "git",
"url": "https://github.com/symfony/Yaml.git",
"reference": "71ceeca3d8164f0c5313127b24ad056071ccf2c6"
"reference": "34687c6236f1dfcebc874fbebd8da74d90f9f64f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/Yaml/zipball/71ceeca3d8164f0c5313127b24ad056071ccf2c6",
"reference": "71ceeca3d8164f0c5313127b24ad056071ccf2c6",
"url": "https://api.github.com/repos/symfony/Yaml/zipball/34687c6236f1dfcebc874fbebd8da74d90f9f64f",
"reference": "34687c6236f1dfcebc874fbebd8da74d90f9f64f",
"shasum": ""
},
"require": {
@@ -644,7 +645,7 @@
],
"description": "Symfony Yaml Component",
"homepage": "http://symfony.com",
"time": "2014-08-28 01:42:35"
"time": "2014-10-01 05:38:33"
},
{
"name": "twig/twig",
@@ -702,21 +703,21 @@
"packages-dev": [
{
"name": "fabpot/goutte",
"version": "v1.0.3",
"version": "v1.0.7",
"source": {
"type": "git",
"url": "https://github.com/fabpot/Goutte.git",
"reference": "75c9f23c4122caf4ea3e87a42a00b471366e707f"
"url": "https://github.com/FriendsOfPHP/Goutte.git",
"reference": "794b196e76bdd37b5155cdecbad311f0a3b07625"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/fabpot/Goutte/zipball/75c9f23c4122caf4ea3e87a42a00b471366e707f",
"reference": "75c9f23c4122caf4ea3e87a42a00b471366e707f",
"url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/794b196e76bdd37b5155cdecbad311f0a3b07625",
"reference": "794b196e76bdd37b5155cdecbad311f0a3b07625",
"shasum": ""
},
"require": {
"ext-curl": "*",
"guzzle/http": ">=3.0.5,<3.8-dev",
"guzzle/http": "~3.1",
"php": ">=5.3.0",
"symfony/browser-kit": "~2.1",
"symfony/css-selector": "~2.1",
@@ -725,8 +726,8 @@
"symfony/process": "~2.1"
},
"require-dev": {
"guzzle/plugin-history": ">=3.0.5,<3.8-dev",
"guzzle/plugin-mock": ">=3.0.5,<3.8-dev"
"guzzle/plugin-history": "~3.1",
"guzzle/plugin-mock": "~3.1"
},
"type": "application",
"extra": {
@@ -746,9 +747,7 @@
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com",
"homepage": "http://fabien.potencier.org",
"role": "Lead Developer"
"email": "fabien@symfony.com"
}
],
"description": "A simple PHP Web Scraper",
@@ -756,7 +755,7 @@
"keywords": [
"scraper"
],
"time": "2013-08-16 06:03:22"
"time": "2014-10-09 15:52:51"
},
{
"name": "guzzle/common",
@@ -1591,16 +1590,16 @@
},
{
"name": "sami/sami",
"version": "v1.3",
"version": "v1.4",
"source": {
"type": "git",
"url": "https://github.com/fabpot/Sami.git",
"reference": "76f2ed80b3420f7e2f6dcd5b7218b5a5781f4110"
"url": "https://github.com/FriendsOfPHP/Sami.git",
"reference": "70f29c781f7bef30181c814b9471b2ceac694454"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/fabpot/Sami/zipball/76f2ed80b3420f7e2f6dcd5b7218b5a5781f4110",
"reference": "76f2ed80b3420f7e2f6dcd5b7218b5a5781f4110",
"url": "https://api.github.com/repos/FriendsOfPHP/Sami/zipball/70f29c781f7bef30181c814b9471b2ceac694454",
"reference": "70f29c781f7bef30181c814b9471b2ceac694454",
"shasum": ""
},
"require": {
@@ -1621,7 +1620,7 @@
"type": "application",
"extra": {
"branch-alias": {
"dev-master": "1.3-dev"
"dev-master": "1.4-dev"
}
},
"autoload": {
@@ -1636,9 +1635,7 @@
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com",
"homepage": "http://fabien.potencier.org",
"role": "Lead Developer"
"email": "fabien@symfony.com"
}
],
"description": "Sami, an API documentation generator",
@@ -1646,7 +1643,7 @@
"keywords": [
"phpdoc"
],
"time": "2013-11-30 17:16:25"
"time": "2014-06-25 11:24:03"
},
{
"name": "sebastian/comparator",
@@ -1987,17 +1984,17 @@
},
{
"name": "symfony/browser-kit",
"version": "v2.3.19",
"version": "v2.3.21",
"target-dir": "Symfony/Component/BrowserKit",
"source": {
"type": "git",
"url": "https://github.com/symfony/BrowserKit.git",
"reference": "262d698efaa788ce24ff9c987378789bf3f81ce9"
"reference": "6a403eedacb56d32dc2cc657cfeac09d640ae6bc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/BrowserKit/zipball/262d698efaa788ce24ff9c987378789bf3f81ce9",
"reference": "262d698efaa788ce24ff9c987378789bf3f81ce9",
"url": "https://api.github.com/repos/symfony/BrowserKit/zipball/6a403eedacb56d32dc2cc657cfeac09d640ae6bc",
"reference": "6a403eedacb56d32dc2cc657cfeac09d640ae6bc",
"shasum": ""
},
"require": {
@@ -2038,21 +2035,21 @@
],
"description": "Symfony BrowserKit Component",
"homepage": "http://symfony.com",
"time": "2014-08-05 07:20:55"
"time": "2014-09-22 08:32:35"
},
{
"name": "symfony/css-selector",
"version": "v2.3.19",
"version": "v2.3.21",
"target-dir": "Symfony/Component/CssSelector",
"source": {
"type": "git",
"url": "https://github.com/symfony/CssSelector.git",
"reference": "8953d325d3341c246abadb79be172de95ef80664"
"reference": "d9943386b648d21746bed25cc24f61fab1387943"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/CssSelector/zipball/8953d325d3341c246abadb79be172de95ef80664",
"reference": "8953d325d3341c246abadb79be172de95ef80664",
"url": "https://api.github.com/repos/symfony/CssSelector/zipball/d9943386b648d21746bed25cc24f61fab1387943",
"reference": "d9943386b648d21746bed25cc24f61fab1387943",
"shasum": ""
},
"require": {
@@ -2089,21 +2086,21 @@
],
"description": "Symfony CssSelector Component",
"homepage": "http://symfony.com",
"time": "2014-08-27 08:24:06"
"time": "2014-10-09 12:30:02"
},
{
"name": "symfony/dom-crawler",
"version": "v2.3.19",
"version": "v2.3.21",
"target-dir": "Symfony/Component/DomCrawler",
"source": {
"type": "git",
"url": "https://github.com/symfony/DomCrawler.git",
"reference": "bad8d98561f071639fa67b20680bffcc256ce252"
"reference": "64b90870ee3a4e88c9a7a12861683864de029d31"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/DomCrawler/zipball/bad8d98561f071639fa67b20680bffcc256ce252",
"reference": "bad8d98561f071639fa67b20680bffcc256ce252",
"url": "https://api.github.com/repos/symfony/DomCrawler/zipball/64b90870ee3a4e88c9a7a12861683864de029d31",
"reference": "64b90870ee3a4e88c9a7a12861683864de029d31",
"shasum": ""
},
"require": {
@@ -2142,21 +2139,21 @@
],
"description": "Symfony DomCrawler Component",
"homepage": "http://symfony.com",
"time": "2014-08-21 00:21:59"
"time": "2014-10-01 05:38:33"
},
{
"name": "symfony/finder",
"version": "v2.3.19",
"version": "v2.3.21",
"target-dir": "Symfony/Component/Finder",
"source": {
"type": "git",
"url": "https://github.com/symfony/Finder.git",
"reference": "f7a5a5a3b1fc0ec9a1a5b4429223a8726e0f4b55"
"reference": "fc25dab213d14468c39f12d47e5b79a72b898d4d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/Finder/zipball/f7a5a5a3b1fc0ec9a1a5b4429223a8726e0f4b55",
"reference": "f7a5a5a3b1fc0ec9a1a5b4429223a8726e0f4b55",
"url": "https://api.github.com/repos/symfony/Finder/zipball/fc25dab213d14468c39f12d47e5b79a72b898d4d",
"reference": "fc25dab213d14468c39f12d47e5b79a72b898d4d",
"shasum": ""
},
"require": {
@@ -2189,21 +2186,21 @@
],
"description": "Symfony Finder Component",
"homepage": "http://symfony.com",
"time": "2014-08-31 04:03:32"
"time": "2014-10-01 05:39:06"
},
{
"name": "symfony/process",
"version": "v2.3.19",
"version": "v2.3.21",
"target-dir": "Symfony/Component/Process",
"source": {
"type": "git",
"url": "https://github.com/symfony/Process.git",
"reference": "b8fc0e4b6750e4c458a38d038e6b4d538d4fe2bb"
"reference": "0434822691030547f2439d30ff68758c5576a0ce"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/Process/zipball/b8fc0e4b6750e4c458a38d038e6b4d538d4fe2bb",
"reference": "b8fc0e4b6750e4c458a38d038e6b4d538d4fe2bb",
"url": "https://api.github.com/repos/symfony/Process/zipball/0434822691030547f2439d30ff68758c5576a0ce",
"reference": "0434822691030547f2439d30ff68758c5576a0ce",
"shasum": ""
},
"require": {
@@ -2236,7 +2233,7 @@
],
"description": "Symfony Process Component",
"homepage": "http://symfony.com",
"time": "2014-08-28 09:02:24"
"time": "2014-10-01 05:38:33"
}
],
"aliases": [

View File

@@ -84,6 +84,7 @@ services:
- @config
- @cache
- @log
- %core.root_path%
tags:
- { name: console.command }

View File

@@ -75,6 +75,7 @@ services:
- @controller.provider
- @ext.manager
- @symfony_request
- @request
- @filesystem
- %core.root_path%
- %core.php_ext%
@@ -108,6 +109,9 @@ services:
filesystem:
class: phpbb\filesystem
file_downloader:
class: phpbb\file_downloader
http_kernel:
class: Symfony\Component\HttpKernel\HttpKernel
arguments:
@@ -155,6 +159,8 @@ services:
- null
- %core.disable_super_globals%
# WARNING: The Symfony request does not escape the input and should be used very carefully
# prefer the phpbb request (service @request) as possible
symfony_request:
class: phpbb\symfony_request
arguments:
@@ -178,4 +184,5 @@ services:
arguments:
- @cache
- @config
- @file_downloader
- @user

View File

@@ -46,6 +46,9 @@
<ol>
<li><a href="#changelog">Changelog</a>
<ol style="list-style-type: lower-roman;">
<li><a href="#v311">Changes since 3.1.1</a></li>
<li><a href="#v310">Changes since 3.1.0</a></li>
<li><a href="#v310RC6">Changes since 3.1.0-RC6</a></li>
<li><a href="#v310RC5">Changes since 3.1.0-RC5</a></li>
<li><a href="#v310RC4">Changes since 3.1.0-RC4</a></li>
<li><a href="#v310RC3">Changes since 3.1.0-RC3</a></li>
@@ -99,7 +102,133 @@
<div class="content">
<a name="v310RC5"></a><h3>1.i. Changes since 3.1.0-RC5</h3>
<a name="v311"></a><h3>1.i. Changes since 3.1.1</h3>
<h4>Security</h4>
<ul>
<li>[SECURITY-171] - Version helper does not properly escape version info</li>
<li>[SECURITY-169] - AJAX request with unexpected referrer causes infinite loop</li>
</ul>
<h4>Bug</h4>
<ul>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-10442">PHPBB3-10442</a>] - XHTML is invalid when a forum link without redirect counter is present</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-10744">PHPBB3-10744</a>] - Prevent user from installing styles with reserved directory names</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11863">PHPBB3-11863</a>] - User registration settings show incorrectly as disabled when board-wide emails are disabled</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12703">PHPBB3-12703</a>] - Notification System sends exact same SQL query multiple times</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13083">PHPBB3-13083</a>] - Language correction in NO_ENTRIES in acp_logs</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13100">PHPBB3-13100</a>] - Don't display &quot;delete reason&quot; dialog for shadow-topics</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13193">PHPBB3-13193</a>] - Post counts in Private Messages should link to the user's posts</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13197">PHPBB3-13197</a>] - Group Avatar not deleted from users</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13204">PHPBB3-13204</a>] - Login flood control error supresses incorrect credential error</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13209">PHPBB3-13209</a>] - Boolean (Yes/No) custom profile field doesn't show given name</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13216">PHPBB3-13216</a>] - Datetime tests fail randomly</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13228">PHPBB3-13228</a>] - &quot;Code: Select all&quot; font-size too big in Private Messages</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13239">PHPBB3-13239</a>] - Can´t upload Attachments on iOS</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13241">PHPBB3-13241</a>] - Topics are being duplicated in multipage forums</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13242">PHPBB3-13242</a>] - Validation error in Contact a Board Administrator</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13243">PHPBB3-13243</a>] - Debug error when clicking Re-check all versions on ACP manage extensions page</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13251">PHPBB3-13251</a>] - Database password containing special characters no longer accepted after upgrade to 3.1.0</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13253">PHPBB3-13253</a>] - MCP queue link in active topics search is missing</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13265">PHPBB3-13265</a>] - &quot;Edit profile&quot; link on view-own-profile page should only show if user has permission to edit</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13270">PHPBB3-13270</a>] - Upgrading from 3.0.12 to 3.1.1 does not display moderator soft delete permissions</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13277">PHPBB3-13277</a>] - Move Up &amp; Down does not take work in Internet Explorer</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13280">PHPBB3-13280</a>] - $user-&gt;page['page'] - is invalid resulting in confirm_box() not working correctly</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13284">PHPBB3-13284</a>] - Message body not included in email topic message </li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13298">PHPBB3-13298</a>] - Use mysql_free_result to free result sets which were requested using mysql_query()</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13300">PHPBB3-13300</a>] - Jabber field still shown in profile when feature is disabled</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13301">PHPBB3-13301</a>] - Apache Authentication is probably broken</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13303">PHPBB3-13303</a>] - Migrator caught in loop calculating dependencies</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13315">PHPBB3-13315</a>] - Upgrade from 3.0.12 to 3.1.1 resets CAPTCHA selection</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13316">PHPBB3-13316</a>] - reCAPTCHA does not work on secured connection</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13318">PHPBB3-13318</a>] - login_username doesn't have multibyte parameter set to true</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13323">PHPBB3-13323</a>] - posting.php can pass invalid auth option to acl_get()</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13332">PHPBB3-13332</a>] - Insufficient information passed to password drivers for converted boards</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13337">PHPBB3-13337</a>] - Mark subforums read triggers error if subforums contain no topics</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13338">PHPBB3-13338</a>] - Some tests fail when run on their own</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13342">PHPBB3-13342</a>] - 310/captcha_plugins migration changes recaptcha to nogd</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13349">PHPBB3-13349</a>] - Incorrect entities used for breadcrumb separator in CSS</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13354">PHPBB3-13354</a>] - Unknown column 'topic_logs' in 'where clause' when deleting topic log in MCP</li>
</ul>
<h4>Improvement</h4>
<ul>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12681">PHPBB3-12681</a>] - Cache the compiled routes and dump the url_generator</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12885">PHPBB3-12885</a>] - Wrong index page title when using Board Index text</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13023">PHPBB3-13023</a>] - [event] - Add Event posting_editor_buttons_custom_tags_before</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13133">PHPBB3-13133</a>] - Allow @vendor_extname in INCLUDECSS</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13182">PHPBB3-13182</a>] - [event] - Add posting.php core event to allow modifying the message before parsing</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13220">PHPBB3-13220</a>] - [event] - Add template events to memberlist_search.html</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13290">PHPBB3-13290</a>] - [event] - Add template event index_body_forumlist_body_after</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13294">PHPBB3-13294</a>] - [event] - Add message_parser.php core event for additional message handling before parsing</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13297">PHPBB3-13297</a>] - Add unicode modifier to url/email regular expression patterns</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13309">PHPBB3-13309</a>] - [event] - Add ACP template event acp_email_options_after</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13310">PHPBB3-13310</a>] - [event] - Add core event core.acp_email_modify_sql</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13326">PHPBB3-13326</a>] - Add viewtopic_url variable to a viewtopic event</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13328">PHPBB3-13328</a>] - [event] - Add event core.mcp_view_forum_modify_sql</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13347">PHPBB3-13347</a>] - [event] - Add new template events to acp_forums.html</li>
</ul>
<h4>New Feature</h4>
<ul>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12962">PHPBB3-12962</a>] - Use phantomjs and webdriver for UI testing</li>
</ul>
<h4>Task</h4>
<ul>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13324">PHPBB3-13324</a>] - Composer no longer downloads sami/sami and fabpot/goutte</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13325">PHPBB3-13325</a>] - Make installing dependencies for tests more user friendly or optional</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13331">PHPBB3-13331</a>] - Sami run as part of phing MUST NOT switch branches</li>
</ul>
<a name="v310"></a><h3>1.ii. Changes since 3.1.0</h3>
<h4>Security</h4>
<ul>
<li>[SECURITY-164] - Cross Site Scripting via PATH_INFO in page_name variable</li>
</ul>
<h4>Bug</h4>
<ul>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13248">PHPBB3-13248</a>] - Login functions need to use provider collection for retrieving provider</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13267">PHPBB3-13267</a>] - Automatic Update instructions indicate that only the install folder is necessary</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13268">PHPBB3-13268</a>] - MSSQL's get_existing_indexes() function improperly appends ternary result</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13271">PHPBB3-13271</a>] - Anonymous users can CC themselves on emails sent to admin via contact form</li>
</ul>
<h4>Task</h4>
<ul>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13262">PHPBB3-13262</a>] - Add note to docs about htaccess file when upgrading 3.0 to 3.1</li>
</ul>
<a name="v310RC6"></a><h3>1.iii. Changes since 3.1.0-RC6</h3>
<h4>Bug</h4>
<ul>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13126">PHPBB3-13126</a>] - More detailed output for migrations needed</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13208">PHPBB3-13208</a>] - Security issues are not pulled into the changelog</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13210">PHPBB3-13210</a>] - Queue Cron Job checks for wrong config variable queue_interval_config</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13211">PHPBB3-13211</a>] - Add possibility to save migrations output to log</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13221">PHPBB3-13221</a>] - Can't upgrade to 3.1 from 3.0.11 and older</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13223">PHPBB3-13223</a>] - Using get_username_string() for email template variables causes HTML markup in emails</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13225">PHPBB3-13225</a>] - phpbb_hash() undefined in phpbb\db\migration\data\v30x\release_3_0_5_rc1.php</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13226">PHPBB3-13226</a>] - Stray $rank_img in memberlist.php</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13227">PHPBB3-13227</a>] - Remote avatars do not work with cURL wrapper</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13229">PHPBB3-13229</a>] - Memberlist is getting overloaded with redundant SQL queries</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13230">PHPBB3-13230</a>] - Deprecated phpbb_clean_path() does not work anymore</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13231">PHPBB3-13231</a>] - The migration contact_admin_form must depends on config_db_text</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13232">PHPBB3-13232</a>] - Email queue does not get run</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13234">PHPBB3-13234</a>] - Remember me cookie gets unset by admin reauthentication</li>
</ul>
<h4>Improvement</h4>
<ul>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13207">PHPBB3-13207</a>] - Default subscription notification setting for new users does not include email</li>
</ul>
<h4>Task</h4>
<ul>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13215">PHPBB3-13215</a>] - Update Symfony Components to 2.3.21</li>
</ul>
<a name="v310RC5"></a><h3>1.iv. Changes since 3.1.0-RC5</h3>
<h4>Bug</h4>
<ul>
@@ -123,6 +252,10 @@
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13190">PHPBB3-13190</a>] - phpbb_session_login_keys_test::test_reset_keys fails on develop-ascraeus</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13194">PHPBB3-13194</a>] - BBCode isn't parsed when issuing a warning for a post</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13203">PHPBB3-13203</a>] - Use constant time comparison method for comparing password hashes</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13217">PHPBB3-13217</a>] - Remember me cookie leak</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13218">PHPBB3-13218</a>] - Missing token check in acp_styles</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13221">PHPBB3-13221</a>] - Can't upgrade to 3.1 from 3.0.11 and older</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13223">PHPBB3-13223</a>] - Using get_username_string() for email template variables causes HTML markup in emails</li>
</ul>
<h4>Improvement</h4>
<ul>
@@ -136,7 +269,7 @@
</ul>
<a name="v310RC4"></a><h3>1.ii. Changes since 3.1.0-RC4</h3>
<a name="v310RC4"></a><h3>1.v. Changes since 3.1.0-RC4</h3>
<h4>Bug</h4>
<ul>
@@ -203,7 +336,7 @@
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13123">PHPBB3-13123</a>] - Add events to allow post blocking and post pre/past processing</li>
</ul>
<a name="v310RC3"></a><h3>1.iii. Changes since 3.1.0-RC3</h3>
<a name="v310RC3"></a><h3>1.vi. Changes since 3.1.0-RC3</h3>
<h4>Bug</h4>
<ul>
@@ -293,7 +426,7 @@
</ul>
<a name="v310RC2"></a><h3>1.iv. Changes since 3.1.0-RC2</h3>
<a name="v310RC2"></a><h3>1.vii. Changes since 3.1.0-RC2</h3>
<h4>Bug</h4>
<ul>
@@ -417,7 +550,7 @@
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12948">PHPBB3-12948</a>] - Remove Travis CI &quot;broken opcache on PHP 5.5.7 and 5.5.8&quot; workaround.</li>
</ul>
<a name="v310RC1"></a><h3>1.v. Changes since 3.1.0-RC1</h3>
<a name="v310RC1"></a><h3>1.viii. Changes since 3.1.0-RC1</h3>
<h4>Bug</h4>
<ul>
@@ -488,7 +621,7 @@
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12829">PHPBB3-12829</a>] - Remove check for pgsql 8.3/8.2</li>
</ul>
<a name="v310b4"></a><h3>1.vi. Changes since 3.1.0-b4</h3>
<a name="v310b4"></a><h3>1.ix. Changes since 3.1.0-b4</h3>
<h4>Bug</h4>
<ul>
@@ -608,7 +741,7 @@
</ul>
<a name="v310b3"></a><h3>1.vii. Changes since 3.1.0-b3</h3>
<a name="v310b3"></a><h3>1.x. Changes since 3.1.0-b3</h3>
<h4>Bug</h4>
<ul>
@@ -715,7 +848,7 @@
</ul>
<a name="v310b2"></a><h3>1.viii. Changes since 3.1.0-b2</h3>
<a name="v310b2"></a><h3>1.xi. Changes since 3.1.0-b2</h3>
<h4>Bug</h4>
<ul>
@@ -880,7 +1013,7 @@
</ul>
<a name="v310b1"></a><h3>1.ix. Changes since 3.1.0-b1</h3>
<a name="v310b1"></a><h3>1.xii. Changes since 3.1.0-b1</h3>
<h4>Bug</h4>
<ul>
@@ -948,7 +1081,7 @@
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12302">PHPBB3-12302</a>] - Upgrade composer.phar to 1.0.0-alpha8</li>
</ul>
<a name="v310a3"></a><h3>1.x. Changes since 3.1.0-a3</h3>
<a name="v310a3"></a><h3>1.xiii. Changes since 3.1.0-a3</h3>
<h4>Bug</h4>
<ul>
@@ -1095,7 +1228,7 @@
</ul>
<a name="v310a2"></a><h3>1.xi. Changes since 3.1.0-a2</h3>
<a name="v310a2"></a><h3>1.xiv. Changes since 3.1.0-a2</h3>
<h4>Bug</h4>
<ul>
@@ -1203,7 +1336,7 @@
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12147">PHPBB3-12147</a>] - Remove Travis CI notification configuration</li>
</ul>
<a name="v310a1"></a><h3>1.xii. Changes since 3.1.0-a1</h3>
<a name="v310a1"></a><h3>1.xv. Changes since 3.1.0-a1</h3>
<h4>Bug</h4>
<ul>
@@ -1279,7 +1412,7 @@
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11998">PHPBB3-11998</a>] - Add console / command line client environment </li>
</ul>
<a name="v30x"></a><h3>1.xiii. Changes since 3.0.x</h3>
<a name="v30x"></a><h3>1.xvi. Changes since 3.0.x</h3>
<h4>Bug</h4>
<ul>
@@ -1960,7 +2093,7 @@
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11913">PHPBB3-11913</a>] - Apply reorganisation of download.phpbb.com to build_announcement.php</li>
</ul>
<a name="v3011"></a><h3>1.xiv. Changes since 3.0.11</h3>
<a name="v3011"></a><h3>1.xvii. Changes since 3.0.11</h3>
<h4>Bug</h4>
<ul>
@@ -2115,7 +2248,7 @@
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11753">PHPBB3-11753</a>] - Upgrade mysql_upgrader.php schema data.</li>
</ul>
<a name="v3010"></a><h3>1.xv. Changes since 3.0.10</h3>
<a name="v3010"></a><h3>1.xviii. Changes since 3.0.10</h3>
<h4>Bug</h4>
<ul>
@@ -2240,7 +2373,7 @@
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-10909">PHPBB3-10909</a>] - Update Travis Test Configuration: Travis no longer supports PHP 5.3.2</li>
</ul>
<a name="v309"></a><h3>1.xvi. Changes since 3.0.9</h3>
<a name="v309"></a><h3>1.xix. Changes since 3.0.9</h3>
<h4>Bug</h4>
<ul>
@@ -2376,7 +2509,7 @@
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-10480">PHPBB3-10480</a>] - Automate changelog building</li>
</ul>
<a name="v308"></a><h3>1.xvii. Changes since 3.0.8</h3>
<a name="v308"></a><h3>1.xx. Changes since 3.0.8</h3>
<h4> Bug
</h4>
@@ -2744,7 +2877,7 @@
</ul>
<a name="v307-PL1"></a><h3>1.xviii. Changes since 3.0.7-PL1</h3>
<a name="v307-PL1"></a><h3>1.xxi. Changes since 3.0.7-PL1</h3>
<h4> Security
</h4>
<ul>
@@ -3202,13 +3335,13 @@
</ul>
<a name="v307"></a><h3>1.xix. Changes since 3.0.7</h3>
<a name="v307"></a><h3>1.xxii. Changes since 3.0.7</h3>
<ul>
<li>[Sec] Do not expose forum content of forums with ACL entries but no actual permission in ATOM Feeds. (Bug #58595)</li>
</ul>
<a name="v306"></a><h3>1.xx. Changes since 3.0.6</h3>
<a name="v306"></a><h3>1.xxiii. Changes since 3.0.6</h3>
<ul>
<li>[Fix] Allow ban reason and length to be selected and copied in ACP and subsilver2 MCP. (Bug #51095)</li>
@@ -3312,7 +3445,7 @@
</ul>
<a name="v305"></a><h3>1.xxi. Changes since 3.0.5</h3>
<a name="v305"></a><h3>1.xxiv. Changes since 3.0.5</h3>
<ul>
<li>[Fix] Allow whitespaces in avatar gallery names. (Bug #44955)</li>
@@ -3534,7 +3667,7 @@
<li>[Feature] Send anonymous statistical information to phpBB on installation and update (optional).</li>
</ul>
<a name="v304"></a><h3>1.xxii. Changes since 3.0.4</h3>
<a name="v304"></a><h3>1.xxv. Changes since 3.0.4</h3>
<ul>
<li>[Fix] Delete user entry from ban list table upon user deletion (Bug #40015 - Patch by TerraFrost)</li>
@@ -3623,7 +3756,7 @@
<li>[Sec] Only use forum id supplied for posting if global announcement detected. (Reported by nickvergessen)</li>
</ul>
<a name="v303"></a><h3>1.xxiii. Changes since 3.0.3</h3>
<a name="v303"></a><h3>1.xxvi. Changes since 3.0.3</h3>
<ul>
<li>[Fix] Allow mixed-case template directories to be inherited (Bug #36725)</li>
@@ -3655,7 +3788,7 @@
<li>[Sec] Ask for forum password if post within passworded forum quoted in private message. (Reported by nickvergessen)</li>
</ul>
<a name="v302"></a><h3>1.xxiv. Changes since 3.0.2</h3>
<a name="v302"></a><h3>1.xxvii. Changes since 3.0.2</h3>
<ul>
<li>[Fix] Correctly set topic starter if first post in topic removed (Bug #30575 - Patch by blueray2048)</li>
@@ -3754,7 +3887,7 @@
<li>[Sec Precaution] Stricter validation of the HTTP_HOST header (Thanks to Techie-Micheal et al for pointing out possible issues in derived code)</li>
</ul>
<a name="v301"></a><h3>1.xxv. Changes since 3.0.1</h3>
<a name="v301"></a><h3>1.xxviii. Changes since 3.0.1</h3>
<ul>
<li>[Fix] Ability to set permissions on non-mysql dbms (Bug #24955)</li>
@@ -3802,7 +3935,7 @@
<li>[Sec] Only allow urls gone through redirect() being used within login_box(). (thanks nookieman)</li>
</ul>
<a name="v300"></a><h3>1.xxvi. Changes since 3.0.0</h3>
<a name="v300"></a><h3>1.xxix. Changes since 3.0.0</h3>
<ul>
<li>[Change] Validate birthdays (Bug #15004)</li>
@@ -3873,7 +4006,7 @@
<li>[Fix] Find and display colliding usernames correctly when converting from one database to another (Bug #23925)</li>
</ul>
<a name="v30rc8"></a><h3>1.xxvii. Changes since 3.0.RC8</h3>
<a name="v30rc8"></a><h3>1.xxx. Changes since 3.0.RC8</h3>
<ul>
<li>[Fix] Cleaned usernames contain only single spaces, so &quot;a_name&quot; and &quot;a__name&quot; are treated as the same name (Bug #15634)</li>
@@ -3882,7 +4015,7 @@
<li>[Fix] Call garbage_collection() within database updater to correctly close connections (affects Oracle for example)</li>
</ul>
<a name="v30rc7"></a><h3>1.xxviii. Changes since 3.0.RC7</h3>
<a name="v30rc7"></a><h3>1.xxxi. Changes since 3.0.RC7</h3>
<ul>
<li>[Fix] Fixed MSSQL related bug in the update system</li>
@@ -3917,7 +4050,7 @@
<li>[Fix] No duplication of active topics (Bug #15474)</li>
</ul>
<a name="v30rc6"></a><h3>1.xxix. Changes since 3.0.RC6</h3>
<a name="v30rc6"></a><h3>1.xxxii. Changes since 3.0.RC6</h3>
<ul>
<li>[Fix] Submitting language changes using acp_language (Bug #14736)</li>
@@ -3927,7 +4060,7 @@
<li>[Fix] Able to request new password (Bug #14743)</li>
</ul>
<a name="v30rc5"></a><h3>1.xxx. Changes since 3.0.RC5</h3>
<a name="v30rc5"></a><h3>1.xxxiii. Changes since 3.0.RC5</h3>
<ul>
<li>[Feature] Removing constant PHPBB_EMBEDDED in favor of using an exit_handler(); the constant was meant to achive this more or less.</li>
@@ -3990,7 +4123,7 @@
<li>[Sec] New password hashing mechanism for storing passwords (#i42)</li>
</ul>
<a name="v30rc4"></a><h3>1.xxxi. Changes since 3.0.RC4</h3>
<a name="v30rc4"></a><h3>1.xxxiv. Changes since 3.0.RC4</h3>
<ul>
<li>[Fix] MySQL, PostgreSQL and SQLite related database fixes (Bug #13862)</li>
@@ -4041,7 +4174,7 @@
<li>[Fix] odbc_autocommit causing existing result sets to be dropped (Bug #14182)</li>
</ul>
<a name="v30rc3"></a><h3>1.xxxii. Changes since 3.0.RC3</h3>
<a name="v30rc3"></a><h3>1.xxxv. Changes since 3.0.RC3</h3>
<ul>
<li>[Fix] Fixing some subsilver2 and prosilver style issues</li>
@@ -4150,7 +4283,7 @@
</ul>
<a name="v30rc2"></a><h3>1.xxxiii. Changes since 3.0.RC2</h3>
<a name="v30rc2"></a><h3>1.xxxvi. Changes since 3.0.RC2</h3>
<ul>
<li>[Fix] Re-allow searching within the memberlist</li>
@@ -4196,7 +4329,7 @@
</ul>
<a name="v30rc1"></a><h3>1.xxxiv. Changes since 3.0.RC1</h3>
<a name="v30rc1"></a><h3>1.xxxvii. Changes since 3.0.RC1</h3>
<ul>
<li>[Fix] (X)HTML issues within the templates (Bug #11255, #11255)</li>

View File

@@ -303,7 +303,7 @@
<ul>
<li>Go to the <a href="https://www.phpbb.com/downloads/">downloads page</a> and download the latest update package listed there, matching your current version.</li>
<li>Upload the uncompressed archive contents to your phpBB installation - only the install folder is required. Upload the whole install folder, retaining the file structure.</li>
<li>Upload the uncompressed archive contents to your phpBB installation - only the <code>install/</code> and <code>vendor/</code> folders are required. Upload these folders in their entirety, retaining the file structure.</li>
<li>After the install folder is present, phpBB will go offline automatically.</li>
<li>Point your browser to the install directory, for example <code>http://www.example.com/phpBB3/install/</code></li>
<li>Choose the "Update" Tab and follow the instructions</li>
@@ -347,7 +347,7 @@
<li>The <code>store/</code> directory</li>
</ul></li>
<li>Upload the contents of the 3.1.x Full Package into your forum's directory.</li>
<li>Upload the contents of the 3.1.x Full Package into your forum's directory. Make sure the root level .htaccess file is included in the upload.</li>
<li>Browse to install/database_update.php</li>
<li>Delete the <code>install/</code> directory</li>
</ol>
@@ -462,7 +462,7 @@
<hr />
<a name="anti_spam"></a><h2>8. Anti-Spam Measures</h2>
<div class="paragraph">
<div class="inner"><span class="corners-top"><span></span></span>

View File

@@ -16,11 +16,59 @@ acp_bbcodes_edit_fieldsets_after
* Since: 3.1.0-a3
* Purpose: Add settings to BBCode add/edit form
acp_email_options_after
===
* Location: adm/style/acp_email.html
* Since: 3.1.2-RC1
* Purpose: Add settings to mass email form
acp_forums_main_settings_append
===
* Location: adm/style/acp_forums.html
* Since: 3.1.2-RC1
* Purpose: Add settings to forums at end of main settings section
acp_forums_main_settings_prepend
===
* Location: adm/style/acp_forums.html
* Since: 3.1.2-RC1
* Purpose: Add settings to forums before main settings section
acp_forums_normal_settings_append
===
* Location: adm/style/acp_forums.html
* Since: 3.1.0-a1
* Purpose: Add settings to forums
* Purpose: Add settings to forums at end of normal settings section
acp_forums_normal_settings_prepend
===
* Location: adm/style/acp_forums.html
* Since: 3.1.2-RC1
* Purpose: Add settings to forums before normal settings section
acp_forums_prune_settings_append
===
* Location: adm/style/acp_forums.html
* Since: 3.1.2-RC1
* Purpose: Add settings to forums at end of prune settings section
acp_forums_prune_settings_prepend
===
* Location: adm/style/acp_forums.html
* Since: 3.1.2-RC1
* Purpose: Add settings to forums before prune settings section
acp_forums_rules_settings_append
===
* Location: adm/style/acp_forums.html
* Since: 3.1.2-RC1
* Purpose: Add settings to forums at end of rules settings section
acp_forums_rules_settings_prepend
===
* Location: adm/style/acp_forums.html
* Since: 3.1.2-RC1
* Purpose: Add settings to forums before rules settings section
acp_group_options_before
===
@@ -111,7 +159,7 @@ acp_ranks_list_column_before
* Locations:
+ adm/style/acp_ranks.html
* Since: 3.1.0-RC3
* Purpose: Add content after the last column (but before the action column)
* Purpose: Add content after the last column (but before the action column)
in the ranks list in the ACP
acp_ranks_list_header_after
@@ -126,7 +174,7 @@ acp_ranks_list_header_before
* Locations:
+ adm/style/acp_ranks.html
* Since: 3.1.0-RC3
* Purpose: Add content after the last header-column (but before the action column)
* Purpose: Add content after the last header-column (but before the action column)
in the ranks list in the ACP
acp_simple_footer_after
@@ -336,6 +384,14 @@ index_body_block_stats_prepend
* Since: 3.1.0-b3
* Purpose: Prepend content to the statistics list on the Board index
index_body_forumlist_body_after
===
* Locations:
+ styles/prosilver/template/index_body.html
+ styles/subsilver2/template/index_body.html
* Since: 3.1.1
* Purpose: Add content after the forum list body on the index page
index_body_markforums_after
===
* Locations:
@@ -418,6 +474,30 @@ memberlist_body_username_prepend
* Purpose: Add information before every username in the memberlist. Works in
all display modes (leader, group and normal memberlist).
memberlist_search_fields_after
===
* Locations:
+ styles/prosilver/template/memberlist_search.html
+ styles/subsilver2/template/memberlist_search.html
* Since: 3.1.2-RC1
* Purpose: Add information after the search fields column.
memberlist_search_fields_before
===
* Locations:
+ styles/prosilver/template/memberlist_search.html
+ styles/subsilver2/template/memberlist_search.html
* Since: 3.1.2-RC1
* Purpose: Add information before the search fields column.
memberlist_search_sorting_options_before
===
* Locations:
+ styles/prosilver/template/memberlist_search.html
+ styles/subsilver2/template/memberlist_search.html
* Since: 3.1.2-RC1
* Purpose: Add information before the search sorting options field.
memberlist_view_contact_after
===
* Locations:
@@ -756,6 +836,14 @@ posting_editor_buttons_before
* Since: 3.1.0-a3
* Purpose: Add content before the BBCode posting buttons
posting_editor_buttons_custom_tags_before
===
* Locations:
+ styles/prosilver/template/posting_buttons.html
+ styles/subsilver2/template/posting_buttons.html
* Since: 3.1.2-RC1
* Purpose: Add content inside the BBCode posting buttons and before the customs BBCode
posting_editor_message_after
===
* Locations:
@@ -1011,7 +1099,7 @@ ucp_pm_viewmessage_post_buttons_after
+ styles/prosilver/template/ucp_pm_viewmessage.html
+ styles/subsilver2/template/ucp_pm_viewmessage.html
* Since: 3.1.0-RC3
* Purpose: Add post button to private messages (next to edit, quote etc), at
* Purpose: Add post button to private messages (next to edit, quote etc), at
the end of the list.
ucp_pm_viewmessage_post_buttons_before
@@ -1020,7 +1108,7 @@ ucp_pm_viewmessage_post_buttons_before
+ styles/prosilver/template/ucp_pm_viewmessage.html
+ styles/subsilver2/template/ucp_pm_viewmessage.html
* Since: 3.1.0-RC3
* Purpose: Add post button to private messages (next to edit, quote etc), at
* Purpose: Add post button to private messages (next to edit, quote etc), at
the start of the list.
ucp_pm_viewmessage_print_head_append

View File

@@ -615,7 +615,15 @@ class acp_board
{
add_log('admin', 'LOG_CONFIG_' . strtoupper($mode));
trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
$message = $user->lang('CONFIG_UPDATED');
$message_type = E_USER_NOTICE;
if (!$config['email_enable'] && in_array($mode, array('email', 'registration')) &&
in_array($config['require_activation'], array(USER_ACTIVATION_SELF, USER_ACTIVATION_ADMIN)))
{
$message .= '<br /><br />' . $user->lang('ACC_ACTIVATION_WARNING');
$message_type = E_USER_WARNING;
}
trigger_error($message . adm_back_link($this->u_action), $message_type);
}
$this->tpl_name = 'acp_board';
@@ -792,20 +800,19 @@ class acp_board
global $user, $config;
$act_ary = array(
'ACC_DISABLE' => USER_ACTIVATION_DISABLE,
'ACC_NONE' => USER_ACTIVATION_NONE,
'ACC_DISABLE' => array(true, USER_ACTIVATION_DISABLE),
'ACC_NONE' => array(true, USER_ACTIVATION_NONE),
'ACC_USER' => array($config['email_enable'], USER_ACTIVATION_SELF),
'ACC_ADMIN' => array($config['email_enable'], USER_ACTIVATION_ADMIN),
);
if ($config['email_enable'])
{
$act_ary['ACC_USER'] = USER_ACTIVATION_SELF;
$act_ary['ACC_ADMIN'] = USER_ACTIVATION_ADMIN;
}
$act_options = '';
foreach ($act_ary as $key => $value)
$act_options = '';
foreach ($act_ary as $key => $data)
{
list($available, $value) = $data;
$selected = ($selected_value == $value) ? ' selected="selected"' : '';
$act_options .= '<option value="' . $value . '"' . $selected . '>' . $user->lang[$key] . '</option>';
$class = (!$available) ? ' class="disabled-option"' : '';
$act_options .= '<option value="' . $value . '"' . $selected . $class . '>' . $user->lang($key) . '</option>';
}
return $act_options;

View File

@@ -26,7 +26,7 @@ class acp_email
function main($id, $mode)
{
global $config, $db, $user, $auth, $template, $cache;
global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix;
global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix, $phpbb_dispatcher;
$user->add_lang('acp/email');
$this->tpl_name = 'acp_email';
@@ -72,11 +72,15 @@ class acp_email
if ($usernames)
{
// If giving usernames the admin is able to email inactive users too...
$sql = 'SELECT username, user_email, user_jabber, user_notify_type, user_lang
FROM ' . USERS_TABLE . '
WHERE ' . $db->sql_in_set('username_clean', array_map('utf8_clean_string', explode("\n", $usernames))) . '
AND user_allow_massemail = 1
ORDER BY user_lang, user_notify_type'; // , SUBSTRING(user_email FROM INSTR(user_email, '@'))
$sql_ary = array(
'SELECT' => 'username, user_email, user_jabber, user_notify_type, user_lang',
'FROM' => array(
USERS_TABLE => '',
),
'WHERE' => $db->sql_in_set('username_clean', array_map('utf8_clean_string', explode("\n", $usernames))) . '
AND user_allow_massemail = 1',
'ORDER_BY' => 'user_lang, user_notify_type',
);
}
else
{
@@ -123,8 +127,18 @@ class acp_email
),
);
}
$sql = $db->sql_build_query('SELECT', $sql_ary);
}
/**
* Modify sql query to change the list of users the email is sent to
*
* @event core.acp_email_modify_sql
* @var array sql_ary Array which is used to build the sql query
* @since 3.1.2-RC1
*/
$vars = array('sql_ary');
extract($phpbb_dispatcher->trigger_event('core.acp_email_modify_sql', compact($vars)));
$sql = $db->sql_build_query('SELECT', $sql_ary);
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);

View File

@@ -537,7 +537,7 @@ class acp_extensions
$version_check = $meta['extra']['version-check'];
$version_helper = new \phpbb\version_helper($this->cache, $this->config, $this->user);
$version_helper = new \phpbb\version_helper($this->cache, $this->config, new \phpbb\file_downloader(), $this->user);
$version_helper->set_current_version($meta['version']);
$version_helper->set_file_location($version_check['host'], $version_check['directory'], $version_check['filename']);
$version_helper->force_stability($this->config['extension_force_unstable'] ? 'unstable' : null);

View File

@@ -29,14 +29,31 @@ class acp_styles
protected $styles_path;
protected $styles_path_absolute = 'styles';
protected $default_style = 0;
protected $styles_list_cols = 0;
protected $reserved_style_names = array('adm', 'admin', 'all');
/** @var \phpbb\db\driver\driver_interface */
protected $db;
/** @var \phpbb\user */
protected $user;
/** @var \phpbb\template\template */
protected $template;
/** @var \phpbb\request\request_interface */
protected $request;
/** @var \phpbb\cache\driver\driver_interface */
protected $cache;
/** @var \phpbb\auth\auth */
protected $auth;
/** @var string */
protected $phpbb_root_path;
/** @var string */
protected $php_ext;
public function main($id, $mode)
@@ -164,6 +181,12 @@ class acp_styles
$last_installed = false;
foreach ($dirs as $dir)
{
if (in_array($dir, $this->reserved_style_names))
{
$messages[] = $this->user->lang('STYLE_NAME_RESERVED', htmlspecialchars($dir));
continue;
}
$found = false;
foreach ($styles as &$style)
{
@@ -809,7 +832,7 @@ class acp_styles
* Update styles tree
*
* @param array $styles Styles list, passed as reference
* @param array $style Current style, false if root
* @param array|false $style Current style, false if root
* @return bool True if something was updated, false if not
*/
protected function update_styles_tree(&$styles, $style = false)
@@ -1091,7 +1114,7 @@ class acp_styles
/**
* Install style
*
* @param $style style data
* @param array $style style data
* @return int Style id
*/
protected function install_style($style)

View File

@@ -28,7 +28,7 @@ if (!defined('IN_PHPBB'))
*/
// phpBB Version
define('PHPBB_VERSION', '3.1.0-RC6');
define('PHPBB_VERSION', '3.1.2-RC1');
// QA-related
// define('PHPBB_QA', 1);

View File

@@ -5254,7 +5254,7 @@ function page_footer($run_cron = true, $display_template = true, $exit_handler =
// Call cron-type script
$call_cron = false;
if (!defined('IN_CRON') && !$config['use_system_cron'] && $run_cron && !$config['board_disable'] && !$user->data['is_bot'] && !$cache->get('cron.lock_check'))
if (!defined('IN_CRON') && !$config['use_system_cron'] && $run_cron && !$config['board_disable'] && !$user->data['is_bot'] && !$cache->get('_cron.lock_check'))
{
$call_cron = true;
$time_now = (!empty($user->time_now) && is_int($user->time_now)) ? $user->time_now : time();
@@ -5286,7 +5286,7 @@ function page_footer($run_cron = true, $display_template = true, $exit_handler =
}
else
{
$cache->put('cron.lock_check', true, 300);
$cache->put('_cron.lock_check', true, 60);
}
}

View File

@@ -2512,6 +2512,7 @@ function phpbb_cache_moderators($db, $cache, $auth)
{
$usernames_ary[$row['user_id']] = $row['username'];
}
$db->sql_freeresult($result);
foreach ($hold_ary as $user_id => $forum_id_ary)
{
@@ -2806,6 +2807,7 @@ function view_inactive_users(&$users, &$user_count, $limit = 0, $offset = 0, $li
$users[] = $row;
}
$db->sql_freeresult($result);
return $offset;
}
@@ -2980,68 +2982,21 @@ function get_database_size()
/**
* Retrieve contents from remotely stored file
*
* @deprecated 3.1.2 Use file_downloader instead
*/
function get_remote_file($host, $directory, $filename, &$errstr, &$errno, $port = 80, $timeout = 6)
{
global $user;
global $phpbb_container;
if ($fsock = @fsockopen($host, $port, $errno, $errstr, $timeout))
{
@fputs($fsock, "GET $directory/$filename HTTP/1.0\r\n");
@fputs($fsock, "HOST: $host\r\n");
@fputs($fsock, "Connection: close\r\n\r\n");
// Get file downloader and assign $errstr and $errno
$file_downloader = $phpbb_container->get('file_downloader');
$timer_stop = time() + $timeout;
stream_set_timeout($fsock, $timeout);
$file_data = $file_downloader->get($host, $directory, $filename, $port, $timeout);
$errstr = $file_downloader->get_error_string();
$errno = $file_downloader->get_error_number();
$file_info = '';
$get_info = false;
while (!@feof($fsock))
{
if ($get_info)
{
$file_info .= @fread($fsock, 1024);
}
else
{
$line = @fgets($fsock, 1024);
if ($line == "\r\n")
{
$get_info = true;
}
else if (stripos($line, '404 not found') !== false)
{
$errstr = $user->lang('FILE_NOT_FOUND', $filename);
return false;
}
}
$stream_meta_data = stream_get_meta_data($fsock);
if (!empty($stream_meta_data['timed_out']) || time() >= $timer_stop)
{
$errstr = $user->lang['FSOCK_TIMEOUT'];
return false;
}
}
@fclose($fsock);
}
else
{
if ($errstr)
{
$errstr = utf8_convert_message($errstr);
return false;
}
else
{
$errstr = $user->lang['FSOCK_DISABLED'];
return false;
}
}
return $file_info;
return $file_data;
}
/*

View File

@@ -101,18 +101,21 @@ function phpbb_clean_path($path)
}
else if (!$phpbb_path_helper)
{
global $phpbb_root_path, $phpEx;
// The container is not yet loaded, use a new instance
if (!class_exists('\phpbb\path_helper'))
{
global $phpbb_root_path, $phpEx;
require($phpbb_root_path . 'phpbb/path_helper.' . $phpEx);
}
$request = new phpbb\request\request();
$phpbb_path_helper = new phpbb\path_helper(
new phpbb\symfony_request(
new phpbb\request\request()
$request
),
new phpbb\filesystem(),
$request,
$phpbb_root_path,
$phpEx
);

View File

@@ -712,7 +712,7 @@ function make_clickable_callback($type, $whitespace, $url, $relative_url, $class
break;
}
$short_url = (strlen($url) > 55) ? substr($url, 0, 39) . ' ... ' . substr($url, -10) : $url;
$short_url = (utf8_strlen($url) > 55) ? utf8_substr($url, 0, 39) . ' ... ' . utf8_substr($url, -10) : $url;
switch ($type)
{
@@ -788,28 +788,28 @@ function make_clickable($text, $server_url = false, $class = 'postlink')
// relative urls for this board
$magic_url_match_args[$server_url][] = array(
'#(^|[\n\t (>.])(' . preg_quote($server_url, '#') . ')/(' . get_preg_expression('relative_url_inline') . ')#i',
'#(^|[\n\t (>.])(' . preg_quote($server_url, '#') . ')/(' . get_preg_expression('relative_url_inline') . ')#iu',
MAGIC_URL_LOCAL,
$local_class,
);
// matches a xxxx://aaaaa.bbb.cccc. ...
$magic_url_match_args[$server_url][] = array(
'#(^|[\n\t (>.])(' . get_preg_expression('url_inline') . ')#i',
'#(^|[\n\t (>.])(' . get_preg_expression('url_inline') . ')#iu',
MAGIC_URL_FULL,
$class,
);
// matches a "www.xxxx.yyyy[/zzzz]" kinda lazy URL thing
$magic_url_match_args[$server_url][] = array(
'#(^|[\n\t (>])(' . get_preg_expression('www_url_inline') . ')#i',
'#(^|[\n\t (>])(' . get_preg_expression('www_url_inline') . ')#iu',
MAGIC_URL_WWW,
$class,
);
// matches an email@domain type address at the start of a line, or after a space or after what might be a BBCode.
$magic_url_match_args[$server_url][] = array(
'/(^|[\n\t (>])(' . get_preg_expression('email') . ')/i',
'/(^|[\n\t (>])(' . get_preg_expression('email') . ')/iu',
MAGIC_URL_EMAIL,
'',
);

View File

@@ -1491,7 +1491,7 @@ function phpbb_get_user_rank($user_data, $user_posts)
/**
* Prepare profile data
*/
function phpbb_show_profile($data, $user_notes_enabled = false, $warn_user_enabled = false)
function phpbb_show_profile($data, $user_notes_enabled = false, $warn_user_enabled = false, $check_can_receive_pm = true)
{
global $config, $auth, $user, $phpEx, $phpbb_root_path, $phpbb_dispatcher;
@@ -1559,7 +1559,7 @@ function phpbb_show_profile($data, $user_notes_enabled = false, $warn_user_enabl
}
// Can this user receive a Private Message?
$can_receive_pm = (
$can_receive_pm = $check_can_receive_pm && (
// They must be a "normal" user
$data['user_type'] != USER_IGNORE &&
@@ -1608,8 +1608,8 @@ function phpbb_show_profile($data, $user_notes_enabled = false, $warn_user_enabl
'U_EMAIL' => $email,
'U_JABBER' => ($data['user_jabber'] && $auth->acl_get('u_sendim')) ? append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=contact&amp;action=jabber&amp;u=' . $user_id) : '',
'USER_JABBER' => $data['user_jabber'],
'USER_JABBER_IMG' => ($data['user_jabber']) ? $user->img('icon_contact_jabber', $data['user_jabber']) : '',
'USER_JABBER' => ($config['jab_enable']) ? $data['user_jabber'] : '',
'USER_JABBER_IMG' => ($config['jab_enable'] && $data['user_jabber']) ? $user->img('icon_contact_jabber', $data['user_jabber']) : '',
'L_SEND_EMAIL_USER' => $user->lang('SEND_EMAIL_USER', $username),
'L_CONTACT_USER' => $user->lang('CONTACT_USER', $username),

View File

@@ -161,9 +161,10 @@ function user_update_name($old_name, $new_name)
*
* @param mixed $user_row An array containing the following keys (and the appropriate values): username, group_id (the group to place the user in), user_email and the user_type(usually 0). Additional entries not overridden by defaults will be forwarded.
* @param string $cp_data custom profile fields, see custom_profile::build_insert_sql_array
* @param array $notifications_data The notifications settings for the new user
* @return the new user's ID.
*/
function user_add($user_row, $cp_data = false)
function user_add($user_row, $cp_data = false, $notifications_data = null)
{
global $db, $user, $auth, $config, $phpbb_root_path, $phpEx;
global $phpbb_dispatcher, $phpbb_container;
@@ -347,6 +348,31 @@ function user_add($user_row, $cp_data = false)
set_config('newest_user_colour', $row['group_colour'], true);
}
// Use default notifications settings if notifications_data is not set
if ($notifications_data === null)
{
$notifications_data = array(
array(
'item_type' => 'notification.type.post',
'method' => 'notification.method.email',
),
array(
'item_type' => 'notification.type.topic',
'method' => 'notification.method.email',
),
);
}
// Subscribe user to notifications if necessary
if (!empty($notifications_data))
{
$phpbb_notifications = $phpbb_container->get('notification_manager');
foreach ($notifications_data as $subscription)
{
$phpbb_notifications->add_subscription($subscription['item_type'], 0, $subscription['method'], $user_id);
}
}
/**
* Event that returns user id, user detals and user CPF of newly registared user
*

View File

@@ -165,6 +165,22 @@ function mcp_forum_view($id, $mode, $action, $forum_info)
AND ' . $phpbb_content_visibility->get_visibility_sql('topic', $forum_id, 't.') . "
$limit_time_sql
ORDER BY t.topic_type DESC, $sort_order_sql";
/**
* Modify SQL query before MCP forum view topic list is queried
*
* @event core.mcp_view_forum_modify_sql
* @var string sql SQL query for forum view topic list
* @var int forum_id ID of the forum
* @var string limit_time_sql SQL query part for limit time
* @var string sort_order_sql SQL query part for sort order
* @var int topics_per_page Number of topics per page
* @var int start Start value
* @since 3.1.2-RC1
*/
$vars = array('sql', 'forum_id', 'limit_time_sql', 'sort_order_sql', 'topics_per_page', 'start');
extract($phpbb_dispatcher->trigger_event('core.mcp_view_forum_modify_sql', compact($vars)));
$result = $db->sql_query_limit($sql, $topics_per_page, $start);
$topic_list = $topic_tracking_info = array();

View File

@@ -137,7 +137,7 @@ class mcp_logs
if ($mode == 'topic_logs')
{
$conditions['topic_logs'] = $topic_id;
$conditions['topic_id'] = $topic_id;
}
$phpbb_log->delete('mod', $conditions);

View File

@@ -813,8 +813,17 @@ function mcp_delete_topic($topic_ids, $is_soft = false, $soft_delete_reason = ''
$user->add_lang('posting');
// If there are only shadow topics, we neither need a reason nor softdelete
$sql = 'SELECT topic_id
FROM ' . TOPICS_TABLE . '
WHERE ' . $db->sql_in_set('topic_id', $topic_ids) . '
AND topic_moved_id = 0';
$result = $db->sql_query_limit($sql, 1);
$only_shadow = !$db->sql_fetchfield('topic_id');
$db->sql_freeresult($result);
$only_softdeleted = false;
if ($auth->acl_get('m_delete', $forum_id) && $auth->acl_get('m_softdelete', $forum_id))
if (!$only_shadow && $auth->acl_get('m_delete', $forum_id) && $auth->acl_get('m_softdelete', $forum_id))
{
// If there are only soft deleted topics, we display a message why the option is not available
$sql = 'SELECT topic_id
@@ -827,6 +836,7 @@ function mcp_delete_topic($topic_ids, $is_soft = false, $soft_delete_reason = ''
}
$template->assign_vars(array(
'S_SHADOW_TOPICS' => $only_shadow,
'S_SOFTDELETED' => $only_softdeleted,
'S_TOPIC_MODE' => true,
'S_ALLOWED_DELETE' => $auth->acl_get('m_delete', $forum_id),
@@ -839,7 +849,7 @@ function mcp_delete_topic($topic_ids, $is_soft = false, $soft_delete_reason = ''
$l_confirm .= '_PERMANENTLY';
$s_hidden_fields['delete_permanent'] = '1';
}
else if (!$auth->acl_get('m_softdelete', $forum_id))
else if ($only_shadow || !$auth->acl_get('m_softdelete', $forum_id))
{
$s_hidden_fields['delete_permanent'] = '1';
}

View File

@@ -313,7 +313,7 @@ class bbcode_firstpass extends bbcode
$in = str_replace(' ', '%20', $in);
// Checking urls
if (!preg_match('#^' . get_preg_expression('url') . '$#i', $in) && !preg_match('#^' . get_preg_expression('www_url') . '$#i', $in))
if (!preg_match('#^' . get_preg_expression('url') . '$#i', $in) && !preg_match('#^' . get_preg_expression('www_url') . '$#iu', $in))
{
return '[img]' . $in . '[/img]';
}
@@ -381,8 +381,8 @@ class bbcode_firstpass extends bbcode
$in = str_replace(' ', '%20', $in);
// Make sure $in is a URL.
if (!preg_match('#^' . get_preg_expression('url') . '$#i', $in) &&
!preg_match('#^' . get_preg_expression('www_url') . '$#i', $in))
if (!preg_match('#^' . get_preg_expression('url') . '$#iu', $in) &&
!preg_match('#^' . get_preg_expression('www_url') . '$#iu', $in))
{
return '[flash=' . $width . ',' . $height . ']' . $in . '[/flash]';
}
@@ -973,9 +973,9 @@ class bbcode_firstpass extends bbcode
$url = str_replace(' ', '%20', $url);
// Checking urls
if (preg_match('#^' . get_preg_expression('url') . '$#i', $url) ||
preg_match('#^' . get_preg_expression('www_url') . '$#i', $url) ||
preg_match('#^' . preg_quote(generate_board_url(), '#') . get_preg_expression('relative_url') . '$#i', $url))
if (preg_match('#^' . get_preg_expression('url') . '$#iu', $url) ||
preg_match('#^' . get_preg_expression('www_url') . '$#iu', $url) ||
preg_match('#^' . preg_quote(generate_board_url(), '#') . get_preg_expression('relative_url') . '$#iu', $url))
{
$valid = true;
}
@@ -1103,7 +1103,7 @@ class parse_message extends bbcode_firstpass
*/
function parse($allow_bbcode, $allow_magic_url, $allow_smilies, $allow_img_bbcode = true, $allow_flash_bbcode = true, $allow_quote_bbcode = true, $allow_url_bbcode = true, $update_this_message = true, $mode = 'post')
{
global $config, $db, $user;
global $config, $db, $user, $phpbb_dispatcher;
$this->mode = $mode;
@@ -1158,6 +1158,49 @@ class parse_message extends bbcode_firstpass
}
}
/**
* This event can be used for additional message checks/cleanup before parsing
*
* @event core.message_parser_check_message
* @var bool allow_bbcode Do we allow BBCodes
* @var bool allow_magic_url Do we allow magic urls
* @var bool allow_smilies Do we allow smilies
* @var bool allow_img_bbcode Do we allow image BBCode
* @var bool allow_flash_bbcode Do we allow flash BBCode
* @var bool allow_quote_bbcode Do we allow quote BBCode
* @var bool allow_url_bbcode Do we allow url BBCode
* @var bool update_this_message Do we alter the parsed message
* @var string mode Posting mode
* @var string message The message text to parse
* @var bool return Do we return after the event is triggered if $warn_msg is not empty
* @var array warn_msg Array of the warning messages
* @since 3.1.2-RC1
*/
$message = $this->message;
$warn_msg = $this->warn_msg;
$return = false;
$vars = array(
'allow_bbcode',
'allow_magic_url',
'allow_smilies',
'allow_img_bbcode',
'allow_flash_bbcode',
'allow_quote_bbcode',
'allow_url_bbcode',
'update_this_message',
'mode',
'message',
'return',
'warn_msg',
);
extract($phpbb_dispatcher->trigger_event('core.message_parser_check_message', compact($vars)));
$this->message = $message;
$this->warn_msg = $warn_msg;
if ($return && !empty($this->warn_msg))
{
return (!$update_this_message) ? $return_message : $this->warn_msg;
}
// Prepare BBcode (just prepares some tags for better parsing)
if ($allow_bbcode && strpos($this->message, '[') !== false)
{

View File

@@ -34,11 +34,12 @@ class ucp_auth_link
*/
public function main($id, $mode)
{
global $config, $request, $template, $phpbb_container, $user;
global $request, $template, $phpbb_container, $user;
$error = array();
$auth_provider = $phpbb_container->get('auth.provider.' . $config['auth_method']);
$provider_collection = $phpbb_container->get('auth.provider_collection');
$auth_provider = $provider_collection->get_provider();
// confirm that the auth provider supports this page
$provider_data = $auth_provider->get_auth_link_data();

View File

@@ -39,7 +39,7 @@ class ucp_login_link
*/
function main($id, $mode)
{
global $config, $phpbb_container, $request, $template, $user;
global $phpbb_container, $request, $template, $user;
global $phpbb_root_path, $phpEx;
// Initialize necessary variables
@@ -57,8 +57,8 @@ class ucp_login_link
}
// Use the auth_provider requested even if different from configured
$auth_provider = 'auth.provider.' . $request->variable('auth_provider', $config['auth_method']);
$auth_provider = $phpbb_container->get($auth_provider);
$provider_collection = $phpbb_container->get('auth.provider_collection');
$auth_provider = $provider_collection->get_provider($request->variable('auth_provider', ''));
// Set the link_method to login_link
$data['link_method'] = 'login_link';
@@ -75,7 +75,7 @@ class ucp_login_link
{
if ($request->is_set_post('login'))
{
$login_username = $request->variable('login_username', '', false, \phpbb\request\request_interface::POST);
$login_username = $request->variable('login_username', '', true, \phpbb\request\request_interface::POST);
$login_password = $request->untrimmed_variable('login_password', '', true, \phpbb\request\request_interface::POST);
$login_result = $auth_provider->login($login_username, $login_password);

View File

@@ -197,7 +197,7 @@ function view_message($id, $mode, $folder_id, $msg_id, $folder, $message_row)
$u_pm = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;mode=compose&amp;u=' . $author_id);
}
if ($user_info['user_jabber'] && $auth->acl_get('u_sendim'))
if ($config['jab_enable'] && $user_info['user_jabber'] && $auth->acl_get('u_sendim'))
{
$u_jabber = append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=contact&amp;action=jabber&amp;u=' . $author_id);
}
@@ -213,6 +213,7 @@ function view_message($id, $mode, $folder_id, $msg_id, $folder, $message_row)
'AUTHOR_AVATAR' => (isset($user_info['avatar'])) ? $user_info['avatar'] : '',
'AUTHOR_JOINED' => $user->format_date($user_info['user_regdate']),
'AUTHOR_POSTS' => (int) $user_info['user_posts'],
'U_AUTHOR_POSTS' => ($config['load_search'] && $auth->acl_get('u_search')) ? append_sid("{$phpbb_root_path}search.$phpEx", "author_id=$author_id&amp;sr=posts") : '',
'CONTACT_USER' => $user->lang('CONTACT_USER', get_username_string('username', $author_id, $user_info['username'], $user_info['user_colour'], $user_info['username'])),
'ONLINE_IMG' => (!$config['load_onlinetrack']) ? '' : ((isset($user_info['online']) && $user_info['online']) ? $user->img('icon_user_online', $user->lang['ONLINE']) : $user->img('icon_user_offline', $user->lang['OFFLINE'])),

View File

@@ -33,7 +33,8 @@ class ucp_register
global $request, $phpbb_container;
//
if ($config['require_activation'] == USER_ACTIVATION_DISABLE)
if ($config['require_activation'] == USER_ACTIVATION_DISABLE ||
(in_array($config['require_activation'], array(USER_ACTIVATION_SELF, USER_ACTIVATION_ADMIN)) && !$config['email_enable']))
{
trigger_error('UCP_REGISTER_DISABLE');
}
@@ -87,8 +88,8 @@ class ucp_register
if (!empty($login_link_data))
{
// Confirm that we have all necessary data
$auth_provider = 'auth.provider.' . $request->variable('auth_provider', $config['auth_method']);
$auth_provider = $phpbb_container->get($auth_provider);
$provider_collection = $phpbb_container->get('auth.provider_collection');
$auth_provider = $provider_collection->get_provider($request->variable('auth_provider', ''));
$result = $auth_provider->login_link_has_necessary_data($login_link_data);
if ($result !== null)

View File

@@ -185,7 +185,7 @@ $template->assign_vars(array(
'U_MCP' => ($auth->acl_get('m_') || $auth->acl_getf_global('m_')) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=main&amp;mode=front', true, $user->session_id) : '')
);
$page_title = $user->lang['INDEX'];
$page_title = ($config['board_index_text'] !== '') ? $config['board_index_text'] : $user->lang['INDEX'];
/**
* You can use this event to modify the page title and load data for the index

View File

@@ -38,7 +38,7 @@ $dbms = $phpbb_config_php_file->convert_30_dbms_to_31($dbms);
$convertor_data = array(
'forum_name' => 'phpBB 2.0.x',
'version' => '1.0.3',
'phpbb_version' => '3.1.0-RC6',
'phpbb_version' => '3.1.2',
'author' => '<a href="https://www.phpbb.com/">phpBB Limited</a>',
'dbms' => $dbms,
'dbhost' => $dbhost,

View File

@@ -174,6 +174,8 @@ define('IN_DB_UPDATE', true);
// End startup code
$migrator = $phpbb_container->get('migrator');
$migrator->set_output_handler(new \phpbb\db\log_wrapper_migrator_output_handler($user, new \phpbb\db\html_migrator_output_handler($user), $phpbb_root_path . 'store/migrations_' . time() . '.log'));
$migrator->create_migrations_table();
$phpbb_extension_manager = $phpbb_container->get('ext.manager');
@@ -199,8 +201,6 @@ $safe_time_limit = min(15, ($phpbb_ini->get_int('max_execution_time') / 2));
while (!$migrator->finished())
{
$migration_start_time = microtime(true);
try
{
$migrator->update();
@@ -219,28 +219,6 @@ while (!$migrator->finished())
$migrator->last_run_migration['state']
);
if (isset($migrator->last_run_migration['effectively_installed']) && $migrator->last_run_migration['effectively_installed'])
{
echo $user->lang('MIGRATION_EFFECTIVELY_INSTALLED', $migrator->last_run_migration['name']);
}
else
{
if ($migrator->last_run_migration['task'] == 'process_data_step' && $state['migration_data_done'])
{
echo $user->lang('MIGRATION_DATA_DONE', $migrator->last_run_migration['name'], (microtime(true) - $migration_start_time));
}
else if ($migrator->last_run_migration['task'] == 'process_data_step')
{
echo $user->lang('MIGRATION_DATA_IN_PROGRESS', $migrator->last_run_migration['name'], (microtime(true) - $migration_start_time));
}
else if ($state['migration_schema_done'])
{
echo $user->lang('MIGRATION_SCHEMA_DONE', $migrator->last_run_migration['name'], (microtime(true) - $migration_start_time));
}
}
echo "<br />\n";
// Are we approaching the time limit? If so we want to pause the update and continue after refreshing
if ((time() - $update_start_time) >= $safe_time_limit)
{

View File

@@ -273,7 +273,7 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('tpl_allow_php', '0
INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_icons_path', 'images/upload_icons');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_path', 'files');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('use_system_cron', '0');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.1.0-RC6');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.1.2-RC1');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_expire_days', '90');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_gc', '14400');

View File

@@ -221,7 +221,8 @@ $lang = array_merge($lang, array(
'ACP_REGISTER_SETTINGS_EXPLAIN' => 'Here you are able to define registration and profile related settings.',
'ACC_ACTIVATION' => 'Account activation',
'ACC_ACTIVATION_EXPLAIN' => 'This determines whether users have immediate access to the board or if confirmation is required. You can also completely disable new registrations. “Board-wide email” must be enabled in order to use user or admin activation.',
'ACC_ACTIVATION_EXPLAIN' => 'This determines whether users have immediate access to the board or if confirmation is required. You can also completely disable new registrations. <em>“Board-wide email” must be enabled in order to use user or admin activation.</em>',
'ACC_ACTIVATION_WARNING' => 'Please note that the currently selected activation method requires emails to be enabled, otherwise registration will be disabled. We recommend to either select a different activation method or reenable emails.',
'NEW_MEMBER_POST_LIMIT' => 'New member post limit',
'NEW_MEMBER_POST_LIMIT_EXPLAIN' => 'New members are within the <em>Newly Registered Users</em> group until they reach this number of posts. You can use this group to keep them from using the PM system or to review their posts. <strong>A value of 0 disables this feature.</strong>',
'NEW_MEMBER_GROUP_DEFAULT' => 'Set Newly Registered Users group to default',
@@ -556,7 +557,7 @@ $lang = array_merge($lang, array(
'EMAIL_SIG' => 'Email signature',
'EMAIL_SIG_EXPLAIN' => 'This text will be attached to all emails the board sends.',
'ENABLE_EMAIL' => 'Enable board-wide emails',
'ENABLE_EMAIL_EXPLAIN' => 'If this is set to disabled no emails will be sent by the board at all. <em>Note the user and admin account activation settings require this setting to be enabled. If currently using “user” or “admin” activation in the activation settings, disabling this setting will require no activation of new accounts.</em>',
'ENABLE_EMAIL_EXPLAIN' => 'If this is set to disabled no emails will be sent by the board at all. <em>Note the user and admin account activation settings require this setting to be enabled. If currently using “user” or “admin” activation in the activation settings, disabling this setting will disable registration.</em>',
'SMTP_AUTH_METHOD' => 'Authentication method for SMTP',
'SMTP_AUTH_METHOD_EXPLAIN' => 'Only used if a username/password is set, ask your provider if you are unsure which method to use.',
'SMTP_CRAM_MD5' => 'CRAM-MD5',

View File

@@ -74,6 +74,7 @@ $lang = array_merge($lang, array(
'STYLE_INSTALLED_RETURN_INSTALLED_STYLES' => 'Return to installed styles list',
'STYLE_INSTALLED_RETURN_UNINSTALLED_STYLES' => 'Install more styles',
'STYLE_NAME' => 'Style name',
'STYLE_NAME_RESERVED' => 'Style "%s" can not be installed, because the name is reserved.',
'STYLE_NOT_INSTALLED' => 'Style "%s" was not installed.',
'STYLE_PATH' => 'Style path',
'STYLE_UNINSTALL' => 'Uninstall',

View File

@@ -547,7 +547,7 @@ $lang = array_merge($lang, array(
<ul style="margin-left: 20px; font-size: 1.1em;">
<li>Go to the <a href="https://www.phpbb.com/downloads/" title="https://www.phpbb.com/downloads/">phpBB.com downloads page</a> and download the "Automatic Update Package" archive.<br /><br /></li>
<li>Unpack the archive.<br /><br /></li>
<li>Upload the complete uncompressed install folder to your phpBB root directory (where your config.php file is).<br /><br /></li>
<li>Upload the complete uncompressed "install" and "vendor" folders to your phpBB root directory (where your config.php file is).<br /><br /></li>
</ul>
<p>Once uploaded your board will be offline for normal users due to the install directory you uploaded now present.<br /><br />

View File

@@ -237,7 +237,7 @@ $lang = array_merge($lang, array(
'NOT_MODERATOR' => 'You are not a moderator of this forum.',
'NO_DESTINATION_FORUM' => 'Please select a forum for destination.',
'NO_DESTINATION_FORUM_FOUND' => 'There is no destination forum available.',
'NO_ENTRIES' => 'No log entries for this period.',
'NO_ENTRIES' => 'No log entries.',
'NO_FEEDBACK' => 'No feedback exists for this user.',
'NO_FINAL_TOPIC_SELECTED' => 'You have to select a destination topic for merging posts.',
'NO_MATCHES_FOUND' => 'No matches found.',

View File

@@ -48,7 +48,7 @@ $lang = array_merge($lang, array(
'BEFORE' => 'Before',
'CC_EMAIL' => 'Send a copy of this email to yourself.',
'CC_SENDER' => 'Send a copy of this email to yourself.',
'CONTACT_ADMIN' => 'Contact a Board Administrator',
'DEST_LANG' => 'Language',

View File

@@ -41,12 +41,16 @@ $lang = array_merge($lang, array(
'GROUP_NOT_EXIST' => 'The group "%s" unexpectedly does not exist.',
'MIGRATION_APPLY_DEPENDENCIES' => 'Apply dependencies of %s.',
'MIGRATION_DATA_DONE' => 'Installed Data: %1$s; Time: %2$.2f seconds',
'MIGRATION_DATA_IN_PROGRESS' => 'Installing Data: %1$s; Time: %2$.2f seconds',
'MIGRATION_DATA_RUNNING' => 'Installing Data: %s.',
'MIGRATION_EFFECTIVELY_INSTALLED' => 'Migration already effectively installed (skipped): %s',
'MIGRATION_EXCEPTION_ERROR' => 'Something went wrong during the request and an exception was thrown. The changes made before the error occurred were reversed to the best of our abilities, but you should check the board for errors.',
'MIGRATION_NOT_FULFILLABLE' => 'The migration "%1$s" is not fulfillable, missing migration "%2$s".',
'MIGRATION_NOT_VALID' => '%s is not a valid migration.',
'MIGRATION_SCHEMA_DONE' => 'Installed Schema: %1$s; Time: %2$.2f seconds',
'MIGRATION_SCHEMA_RUNNING' => 'Installing Schema: %s.',
'MODULE_ERROR' => 'An error occurred while creating a module: %s',
'MODULE_INFO_FILE_NOT_EXIST' => 'A required module info file is missing: %2$s',

View File

@@ -681,7 +681,7 @@ switch ($mode)
'U_MCP_QUEUE' => ($auth->acl_getf_global('m_approve')) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=queue', true, $user->session_id) : '',
'U_SWITCH_PERMISSIONS' => ($auth->acl_get('a_switchperm') && $user->data['user_id'] != $user_id) ? append_sid("{$phpbb_root_path}ucp.$phpEx", "mode=switch_perm&amp;u={$user_id}&amp;hash=" . generate_link_hash('switchperm')) : '',
'U_EDIT_SELF' => ($user_id == $user->data['user_id']) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=ucp_profile&amp;mode=profile_info') : '',
'U_EDIT_SELF' => ($user_id == $user->data['user_id'] && $auth->acl_get('u_chgprofileinfo')) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=ucp_profile&amp;mode=profile_info') : '',
'S_USER_NOTES' => ($user_notes_enabled) ? true : false,
'S_WARN_USER' => ($warn_user_enabled) ? true : false,
@@ -1089,9 +1089,9 @@ switch ($mode)
{
$user_rank_data = phpbb_get_user_rank($group_row, false);
if ($rank_img)
if ($user_rank_data['img'])
{
$rank_img .= '<br />';
$user_rank_data['img'] .= '<br />';
}
}
@@ -1427,7 +1427,7 @@ switch ($mode)
$cp_row = (isset($profile_fields_cache[$user_id])) ? $cp->generate_profile_fields_template_data($profile_fields_cache[$user_id], false) : array();
}
$memberrow = array_merge(phpbb_show_profile($row), array(
$memberrow = array_merge(phpbb_show_profile($row, false, false, false), array(
'ROW_NUMBER' => $i + ($start + 1),
'S_CUSTOM_PROFILE' => (isset($cp_row['row']) && sizeof($cp_row['row'])) ? true : false,

View File

@@ -927,11 +927,11 @@ class auth
*/
function login($username, $password, $autologin = false, $viewonline = 1, $admin = 0)
{
global $config, $db, $user, $phpbb_root_path, $phpEx, $phpbb_container;
global $db, $user, $phpbb_root_path, $phpEx, $phpbb_container;
$method = trim(basename($config['auth_method']));
$provider_collection = $phpbb_container->get('auth.provider_collection');
$provider = $phpbb_container->get('auth.provider.' . $method);
$provider = $provider_collection->get_provider();
if ($provider)
{
$login = $provider->login($username, $password);

View File

@@ -137,7 +137,7 @@ class apache extends \phpbb\auth\provider\base
return array(
'status' => LOGIN_SUCCESS_CREATE_PROFILE,
'error_msg' => false,
'user_row' => user_row_apache($php_auth_user, $php_auth_pw),
'user_row' => $this->user_row($php_auth_user, $php_auth_pw),
);
}
@@ -185,7 +185,7 @@ class apache extends \phpbb\auth\provider\base
}
// create the user if he does not exist yet
user_add(user_row_apache($php_auth_user, $php_auth_pw));
user_add($this->user_row($php_auth_user, $php_auth_pw));
$sql = 'SELECT *
FROM ' . USERS_TABLE . "

View File

@@ -87,7 +87,7 @@ class db extends \phpbb\auth\provider\base
$username_clean = utf8_clean_string($username);
$sql = 'SELECT user_id, username, user_password, user_passchg, user_email, user_type, user_login_attempts
$sql = 'SELECT *
FROM ' . USERS_TABLE . "
WHERE username_clean = '" . $this->db->sql_escape($username_clean) . "'";
$result = $this->db->sql_query($sql);
@@ -123,7 +123,7 @@ class db extends \phpbb\auth\provider\base
'username_clean' => $username_clean,
);
$sql = 'INSERT INTO ' . LOGIN_ATTEMPT_TABLE . $this->db->sql_build_array('INSERT', $attempt_data);
$result = $this->db->sql_query($sql);
$this->db->sql_query($sql);
}
else
{
@@ -175,7 +175,7 @@ class db extends \phpbb\auth\provider\base
}
// Check password ...
if ($this->passwords_manager->check($password, $row['user_password']))
if ($this->passwords_manager->check($password, $row['user_password'], $row))
{
// Check for old password hash...
if ($this->passwords_manager->convert_flag || strlen($row['user_password']) == 32)
@@ -232,7 +232,7 @@ class db extends \phpbb\auth\provider\base
// Give status about wrong password...
return array(
'status' => ($show_captcha) ? LOGIN_ERROR_ATTEMPTS : LOGIN_ERROR_PASSWORD,
'error_msg' => ($show_captcha) ? 'LOGIN_ERROR_ATTEMPTS' : 'LOGIN_ERROR_PASSWORD',
'error_msg' => 'LOGIN_ERROR_PASSWORD',
'user_row' => $row,
);
}

View File

@@ -38,6 +38,7 @@ class provider_collection extends \phpbb\di\service_collection
/**
* Get an auth provider.
*
* @param string $provider_name The name of the auth provider
* @return object Default auth provider selected in config if it
* does exist. Otherwise the standard db auth
* provider.
@@ -46,11 +47,12 @@ class provider_collection extends \phpbb\di\service_collection
* auth provider exist. The db auth provider
* should always exist in a phpBB installation.
*/
public function get_provider()
public function get_provider($provider_name = '')
{
if ($this->offsetExists('auth.provider.' . basename(trim($this->config['auth_method']))))
$provider_name = ($provider_name !== '') ? $provider_name : basename(trim($this->config['auth_method']));
if ($this->offsetExists('auth.provider.' . $provider_name))
{
return $this->offsetGet('auth.provider.' . basename(trim($this->config['auth_method'])));
return $this->offsetGet('auth.provider.' . $provider_name);
}
// Revert to db auth provider if selected method does not exist
else if ($this->offsetExists('auth.provider.db'))

View File

@@ -154,7 +154,7 @@ class local extends \phpbb\avatar\driver\driver
*/
protected function get_avatar_list($user)
{
$avatar_list = ($this->cache == null) ? false : $this->cache->get('avatar_local_list');
$avatar_list = ($this->cache == null) ? false : $this->cache->get('_avatar_local_list');
if ($avatar_list === false)
{
@@ -192,7 +192,7 @@ class local extends \phpbb\avatar\driver\driver
if ($this->cache != null)
{
$this->cache->put('avatar_local_list', $avatar_list, 86400);
$this->cache->put('_avatar_local_list', $avatar_list, 86400);
}
}

View File

@@ -130,8 +130,24 @@ class remote extends \phpbb\avatar\driver\driver
{
// Timeout after 1 second
stream_set_timeout($file_stream, 1);
// read some data to ensure headers are present
fread($file_stream, 1024);
$meta = stream_get_meta_data($file_stream);
foreach ($meta['wrapper_data'] as $header)
if (isset($meta['wrapper_data']['headers']) && is_array($meta['wrapper_data']['headers']))
{
$headers = $meta['wrapper_data']['headers'];
}
else if (isset($meta['wrapper_data']) && is_array($meta['wrapper_data']))
{
$headers = $meta['wrapper_data'];
}
else
{
$headers = array();
}
foreach ($headers as $header)
{
$header = preg_split('/ /', $header, 2);
if (strtr(strtolower(trim($header[0], ':')), '_', '-') === 'content-type')

View File

@@ -326,17 +326,41 @@ class manager
$driver->delete($avatar_data);
}
$result = self::$default_row;
foreach ($result as $key => $value)
{
$result[$prefix . $key] = $value;
unset($result[$key]);
}
$result = $this->prefix_avatar_columns($prefix, self::$default_row);
$sql = 'UPDATE ' . $table . '
SET ' . $db->sql_build_array('UPDATE', $result) . '
WHERE ' . $prefix . 'id = ' . (int) $avatar_data['id'];
SET ' . $db->sql_build_array('UPDATE', $result) . '
WHERE ' . $prefix . 'id = ' . (int) $avatar_data['id'];
$db->sql_query($sql);
// Make sure we also delete this avatar from the users
if ($prefix === 'group_')
{
$result = $this->prefix_avatar_columns('user_', self::$default_row);
$sql = 'UPDATE ' . USERS_TABLE . '
SET ' . $db->sql_build_array('UPDATE', $result) . "
WHERE user_avatar = '" . $db->sql_escape($avatar_data['avatar']) . "'";
$db->sql_query($sql);
}
}
/**
* Prefix avatar columns
*
* @param string $prefix Column prefix
* @param array $data Column data
*
* @return array Column data with prefixed column names
*/
public function prefix_avatar_columns($prefix, $data)
{
foreach ($data as $key => $value)
{
$data[$prefix . $key] = $value;
unset($data[$key]);
}
return $data;
}
}

View File

@@ -26,8 +26,10 @@ class recaptcha extends captcha_abstract
var $challenge;
var $response;
// PHP4 Constructor
function phpbb_recaptcha()
/**
* Constructor
*/
public function __construct()
{
global $request;
$this->recaptcha_server = $request->is_secure() ? $this->recaptcha_server_secure : $this->recaptcha_server;

View File

@@ -0,0 +1,69 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb\console\command\db;
use phpbb\user;
use phpbb\db\migrator_output_handler_interface;
use Symfony\Component\Console\Output\OutputInterface;
class console_migrator_output_handler implements migrator_output_handler_interface
{
/**
* User object.
*
* @var user
*/
private $user;
/**
* Console output object.
*
* @var OutputInterface
*/
private $output;
/**
* Constructor
*
* @param user $user User object
* @param OutputInterface $output Console output object
*/
public function __construct(user $user, OutputInterface $output)
{
$this->user = $user;
$this->output = $output;
}
/**
* {@inheritdoc}
*/
public function write($message, $verbosity)
{
if ($verbosity <= $this->output->getVerbosity())
{
$translated_message = call_user_func_array(array($this->user, 'lang'), $message);
if ($verbosity === migrator_output_handler_interface::VERBOSITY_NORMAL)
{
$translated_message = '<info>' . $translated_message . '</info>';
}
else if ($verbosity === migrator_output_handler_interface::VERBOSITY_VERBOSE)
{
$translated_message = '<comment>' . $translated_message . '</comment>';
}
$this->output->writeln($translated_message);
}
}
}

View File

@@ -32,13 +32,17 @@ class migrate extends \phpbb\console\command\command
/** @var \phpbb\log\log */
protected $log;
function __construct(\phpbb\user $user, \phpbb\db\migrator $migrator, \phpbb\extension\manager $extension_manager, \phpbb\config\config $config, \phpbb\cache\service $cache, \phpbb\log\log $log)
/** @var string phpBB root path */
protected $phpbb_root_path;
function __construct(\phpbb\user $user, \phpbb\db\migrator $migrator, \phpbb\extension\manager $extension_manager, \phpbb\config\config $config, \phpbb\cache\service $cache, \phpbb\log\log $log, $phpbb_root_path)
{
$this->migrator = $migrator;
$this->extension_manager = $extension_manager;
$this->config = $config;
$this->cache = $cache;
$this->log = $log;
$this->phpbb_root_path = $phpbb_root_path;
parent::__construct($user);
$this->user->add_lang(array('common', 'install', 'migrator'));
}
@@ -53,6 +57,8 @@ class migrate extends \phpbb\console\command\command
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->migrator->set_output_handler(new \phpbb\db\log_wrapper_migrator_output_handler($this->user, new console_migrator_output_handler($this->user, $output), $this->phpbb_root_path . 'store/migrations_' . time() . '.log'));
$this->migrator->create_migrations_table();
$this->cache->purge();
@@ -61,8 +67,6 @@ class migrate extends \phpbb\console\command\command
$orig_version = $this->config['version'];
while (!$this->migrator->finished())
{
$migration_start_time = microtime(true);
try
{
$this->migrator->update();
@@ -73,36 +77,6 @@ class migrate extends \phpbb\console\command\command
$this->finalise_update();
return 1;
}
$migration_stop_time = microtime(true) - $migration_start_time;
$state = array_merge(
array(
'migration_schema_done' => false,
'migration_data_done' => false,
),
$this->migrator->last_run_migration['state']
);
if (!empty($this->migrator->last_run_migration['effectively_installed']))
{
$msg = $this->user->lang('MIGRATION_EFFECTIVELY_INSTALLED', $this->migrator->last_run_migration['name']);
$output->writeln("<comment>$msg</comment>");
}
else if ($this->migrator->last_run_migration['task'] == 'process_data_step' && $state['migration_data_done'])
{
$msg = $this->user->lang('MIGRATION_DATA_DONE', $this->migrator->last_run_migration['name'], $migration_stop_time);
$output->writeln("<info>$msg</info>");
}
else if ($this->migrator->last_run_migration['task'] == 'process_data_step')
{
$output->writeln($this->user->lang('MIGRATION_DATA_IN_PROGRESS', $this->migrator->last_run_migration['name'], $migration_stop_time));
}
else if ($state['migration_schema_done'])
{
$msg = $this->user->lang('MIGRATION_SCHEMA_DONE', $this->migrator->last_run_migration['name'], $migration_stop_time);
$output->writeln("<info>$msg</info>");
}
}
if ($orig_version != $this->config['version'])

View File

@@ -44,6 +44,9 @@ class helper
/* @var \phpbb\symfony_request */
protected $symfony_request;
/* @var \phpbb\request\request_interface */
protected $request;
/**
* @var \phpbb\filesystem The filesystem object
*/
@@ -70,16 +73,18 @@ class helper
* @param \phpbb\controller\provider $provider Path provider
* @param \phpbb\extension\manager $manager Extension manager object
* @param \phpbb\symfony_request $symfony_request Symfony Request object
* @param \phpbb\request\request_interface $request phpBB request object
* @param \phpbb\filesystem $filesystem The filesystem object
* @param string $phpbb_root_path phpBB root path
* @param string $php_ext PHP file extension
*/
public function __construct(\phpbb\template\template $template, \phpbb\user $user, \phpbb\config\config $config, \phpbb\controller\provider $provider, \phpbb\extension\manager $manager, \phpbb\symfony_request $symfony_request, \phpbb\filesystem $filesystem, $phpbb_root_path, $php_ext)
public function __construct(\phpbb\template\template $template, \phpbb\user $user, \phpbb\config\config $config, \phpbb\controller\provider $provider, \phpbb\extension\manager $manager, \phpbb\symfony_request $symfony_request, \phpbb\request\request_interface $request, \phpbb\filesystem $filesystem, $phpbb_root_path, $php_ext)
{
$this->template = $template;
$this->user = $user;
$this->config = $config;
$this->symfony_request = $symfony_request;
$this->request = $request;
$this->filesystem = $filesystem;
$this->phpbb_root_path = $phpbb_root_path;
$this->php_ext = $php_ext;
@@ -153,7 +158,7 @@ class helper
}
}
$base_url = $this->filesystem->clean_path($base_url);
$base_url = $this->request->escape($this->filesystem->clean_path($base_url), true);
$context->setBaseUrl($base_url);
@@ -197,6 +202,6 @@ class helper
*/
public function get_current_url()
{
return generate_board_url(true) . $this->symfony_request->getRequestUri();
return generate_board_url(true) . $this->request->escape($this->symfony_request->getRequestUri(), true);
}
}

View File

@@ -73,6 +73,7 @@ class manager
*/
public function find_one_ready_task()
{
shuffle($this->tasks);
foreach ($this->tasks as $task)
{
if ($task->is_ready())

View File

@@ -73,6 +73,6 @@ class queue extends \phpbb\cron\task\base
*/
public function should_run()
{
return $this->config['last_queue_run'] < time() - $this->config['queue_interval_config'];
return $this->config['last_queue_run'] < time() - $this->config['queue_interval'];
}
}

View File

@@ -0,0 +1,48 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb\db;
use phpbb\user;
class html_migrator_output_handler implements migrator_output_handler_interface
{
/**
* User object.
*
* @var user
*/
private $user;
/**
* Constructor
*
* @param user $user User object
*/
public function __construct(user $user)
{
$this->user = $user;
}
/**
* {@inheritdoc}
*/
public function write($message, $verbosity)
{
if ($verbosity <= migrator_output_handler_interface::VERBOSITY_VERBOSE)
{
$final_message = call_user_func_array(array($this->user, 'lang'), $message);
echo $final_message . "<br />\n";
}
}
}

View File

@@ -0,0 +1,95 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb\db;
use phpbb\user;
class log_wrapper_migrator_output_handler implements migrator_output_handler_interface
{
/**
* User object.
*
* @var user
*/
protected $user;
/**
* A migrator output handler
*
* @var migrator_output_handler_interface
*/
protected $migrator;
/**
* Log file handle
* @var resource
*/
protected $file_handle = false;
/**
* Constructor
*
* @param user $user User object
* @param migrator_output_handler_interface $migrator Migrator output handler
* @param string $log_file File to log to
*/
public function __construct(user $user, migrator_output_handler_interface $migrator, $log_file)
{
$this->user = $user;
$this->migrator = $migrator;
$this->file_open($log_file);
}
/**
* Open file for logging
*
* @param string $file File to open
*/
protected function file_open($file)
{
if (phpbb_is_writable(dirname($file)))
{
$this->file_handle = fopen($file, 'w');
}
else
{
throw new \RuntimeException('Unable to write to migrator log file');
}
}
/**
* {@inheritdoc}
*/
public function write($message, $verbosity)
{
$this->migrator->write($message, $verbosity);
if ($this->file_handle !== false)
{
$translated_message = call_user_func_array(array($this->user, 'lang'), $message) . "\n";
if ($verbosity <= migrator_output_handler_interface::VERBOSITY_NORMAL)
{
$translated_message = '[INFO] ' . $translated_message;
}
else
{
$translated_message = '[DEBUG] ' . $translated_message;
}
fwrite($this->file_handle, $translated_message);
fflush($this->file_handle);
}
}
}

View File

@@ -31,7 +31,6 @@ class release_3_0_12_rc1 extends \phpbb\db\migration\migration
{
return array(
array('custom', array(array(&$this, 'update_module_auth'))),
array('custom', array(array(&$this, 'update_bots'))),
array('custom', array(array(&$this, 'disable_bots_from_receiving_pms'))),
array('config.update', array('version', '3.0.12-RC1')),
@@ -70,60 +69,4 @@ class release_3_0_12_rc1 extends \phpbb\db\migration\migration
AND module_mode = \'signature\'';
$this->sql_query($sql);
}
public function update_bots()
{
// Update bots
if (!function_exists('user_delete'))
{
include($this->phpbb_root_path . 'includes/functions_user.' . $this->php_ext);
}
$bots_updates = array(
// Bot Deletions
'NG-Search [Bot]' => false,
'Nutch/CVS [Bot]' => false,
'OmniExplorer [Bot]' => false,
'Seekport [Bot]' => false,
'Synoo [Bot]' => false,
'WiseNut [Bot]' => false,
// Bot Updates
// Bot name to bot user agent map
'Baidu [Spider]' => 'Baiduspider',
'Exabot [Bot]' => 'Exabot',
'Voyager [Bot]' => 'voyager/',
'W3C [Validator]' => 'W3C_Validator',
);
foreach ($bots_updates as $bot_name => $bot_agent)
{
$sql = 'SELECT user_id
FROM ' . USERS_TABLE . '
WHERE user_type = ' . USER_IGNORE . "
AND username_clean = '" . $this->db->sql_escape(utf8_clean_string($bot_name)) . "'";
$result = $this->db->sql_query($sql);
$bot_user_id = (int) $this->db->sql_fetchfield('user_id');
$this->db->sql_freeresult($result);
if ($bot_user_id)
{
if ($bot_agent === false)
{
$sql = 'DELETE FROM ' . BOTS_TABLE . "
WHERE user_id = $bot_user_id";
$this->sql_query($sql);
user_delete('retain', $bot_user_id);
}
else
{
$sql = 'UPDATE ' . BOTS_TABLE . "
SET bot_agent = '" . $this->db->sql_escape($bot_agent) . "'
WHERE user_id = $bot_user_id";
$this->sql_query($sql);
}
}
}
}
}

View File

@@ -55,6 +55,9 @@ class release_3_0_5_rc1 extends \phpbb\db\migration\migration
public function hash_old_passwords()
{
global $phpbb_container;
$passwords_manager = $phpbb_container->get('passwords.manager');
$sql = 'SELECT user_id, user_password
FROM ' . $this->table_prefix . 'users
WHERE user_pass_convert = 1';
@@ -65,7 +68,7 @@ class release_3_0_5_rc1 extends \phpbb\db\migration\migration
if (strlen($row['user_password']) == 32)
{
$sql_ary = array(
'user_password' => phpbb_hash($row['user_password']),
'user_password' => '$CP$' . $passwords_manager->hash($row['user_password'], 'passwords.driver.salted_md5'),
);
$this->sql_query('UPDATE ' . $this->table_prefix . 'users SET ' . $this->db->sql_build_array('UPDATE', $sql_ary) . ' WHERE user_id = ' . $row['user_id']);

View File

@@ -30,7 +30,6 @@ class release_3_0_8_rc1 extends \phpbb\db\migration\migration
return array(
array('custom', array(array(&$this, 'update_file_extension_group_names'))),
array('custom', array(array(&$this, 'update_module_auth'))),
array('custom', array(array(&$this, 'update_bots'))),
array('custom', array(array(&$this, 'delete_orphan_shadow_topics'))),
array('module.add', array(
'acp',
@@ -114,70 +113,6 @@ class release_3_0_8_rc1 extends \phpbb\db\migration\migration
$this->sql_query($sql);
}
public function update_bots()
{
$bot_name = 'Bing [Bot]';
$bot_name_clean = utf8_clean_string($bot_name);
$sql = 'SELECT user_id
FROM ' . USERS_TABLE . "
WHERE username_clean = '" . $this->db->sql_escape($bot_name_clean) . "'";
$result = $this->db->sql_query($sql);
$bing_already_added = (bool) $this->db->sql_fetchfield('user_id');
$this->db->sql_freeresult($result);
if (!$bing_already_added)
{
$bot_agent = 'bingbot/';
$bot_ip = '';
$sql = 'SELECT group_id, group_colour
FROM ' . GROUPS_TABLE . "
WHERE group_name = 'BOTS'";
$result = $this->db->sql_query($sql);
$group_row = $this->db->sql_fetchrow($result);
$this->db->sql_freeresult($result);
if (!$group_row)
{
// default fallback, should never get here
$group_row['group_id'] = 6;
$group_row['group_colour'] = '9E8DA7';
}
if (!function_exists('user_add'))
{
include($this->phpbb_root_path . 'includes/functions_user.' . $this->php_ext);
}
$user_row = array(
'user_type' => USER_IGNORE,
'group_id' => $group_row['group_id'],
'username' => $bot_name,
'user_regdate' => time(),
'user_password' => '',
'user_colour' => $group_row['group_colour'],
'user_email' => '',
'user_lang' => $this->config['default_lang'],
'user_style' => $this->config['default_style'],
'user_timezone' => 0,
'user_dateformat' => $this->config['default_dateformat'],
'user_allow_massemail' => 0,
);
$user_id = user_add($user_row);
$sql = 'INSERT INTO ' . BOTS_TABLE . ' ' . $this->db->sql_build_array('INSERT', array(
'bot_active' => 1,
'bot_name' => (string) $bot_name,
'user_id' => (int) $user_id,
'bot_agent' => (string) $bot_agent,
'bot_ip' => (string) $bot_ip,
));
$this->sql_query($sql);
}
}
public function delete_orphan_shadow_topics()
{
// Delete shadow topics pointing to not existing topics

View File

@@ -0,0 +1,150 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb\db\migration\data\v310;
class bot_update extends \phpbb\db\migration\migration
{
static public function depends_on()
{
return array('\phpbb\db\migration\data\v310\rc6');
}
public function update_data()
{
return array(
array('custom', array(array(&$this, 'update_bing_bot'))),
array('custom', array(array(&$this, 'update_bots'))),
);
}
public function update_bing_bot()
{
$bot_name = 'Bing [Bot]';
$bot_name_clean = utf8_clean_string($bot_name);
$sql = 'SELECT user_id
FROM ' . USERS_TABLE . "
WHERE username_clean = '" . $this->db->sql_escape($bot_name_clean) . "'";
$result = $this->db->sql_query($sql);
$bing_already_added = (bool) $this->db->sql_fetchfield('user_id');
$this->db->sql_freeresult($result);
if (!$bing_already_added)
{
$bot_agent = 'bingbot/';
$bot_ip = '';
$sql = 'SELECT group_id, group_colour
FROM ' . GROUPS_TABLE . "
WHERE group_name = 'BOTS'";
$result = $this->db->sql_query($sql);
$group_row = $this->db->sql_fetchrow($result);
$this->db->sql_freeresult($result);
if (!$group_row)
{
// default fallback, should never get here
$group_row['group_id'] = 6;
$group_row['group_colour'] = '9E8DA7';
}
if (!function_exists('user_add'))
{
include($this->phpbb_root_path . 'includes/functions_user.' . $this->php_ext);
}
$user_row = array(
'user_type' => USER_IGNORE,
'group_id' => $group_row['group_id'],
'username' => $bot_name,
'user_regdate' => time(),
'user_password' => '',
'user_colour' => $group_row['group_colour'],
'user_email' => '',
'user_lang' => $this->config['default_lang'],
'user_style' => $this->config['default_style'],
'user_timezone' => 0,
'user_dateformat' => $this->config['default_dateformat'],
'user_allow_massemail' => 0,
);
$user_id = user_add($user_row);
$sql = 'INSERT INTO ' . BOTS_TABLE . ' ' . $this->db->sql_build_array('INSERT', array(
'bot_active' => 1,
'bot_name' => (string) $bot_name,
'user_id' => (int) $user_id,
'bot_agent' => (string) $bot_agent,
'bot_ip' => (string) $bot_ip,
));
$this->sql_query($sql);
}
}
public function update_bots()
{
// Update bots
if (!function_exists('user_delete'))
{
include($this->phpbb_root_path . 'includes/functions_user.' . $this->php_ext);
}
$bots_updates = array(
// Bot Deletions
'NG-Search [Bot]' => false,
'Nutch/CVS [Bot]' => false,
'OmniExplorer [Bot]' => false,
'Seekport [Bot]' => false,
'Synoo [Bot]' => false,
'WiseNut [Bot]' => false,
// Bot Updates
// Bot name to bot user agent map
'Baidu [Spider]' => 'Baiduspider',
'Exabot [Bot]' => 'Exabot',
'Voyager [Bot]' => 'voyager/',
'W3C [Validator]' => 'W3C_Validator',
);
foreach ($bots_updates as $bot_name => $bot_agent)
{
$sql = 'SELECT user_id
FROM ' . USERS_TABLE . '
WHERE user_type = ' . USER_IGNORE . "
AND username_clean = '" . $this->db->sql_escape(utf8_clean_string($bot_name)) . "'";
$result = $this->db->sql_query($sql);
$bot_user_id = (int) $this->db->sql_fetchfield('user_id');
$this->db->sql_freeresult($result);
if ($bot_user_id)
{
if ($bot_agent === false)
{
$sql = 'DELETE FROM ' . BOTS_TABLE . "
WHERE user_id = $bot_user_id";
$this->sql_query($sql);
user_delete('retain', $bot_user_id);
}
else
{
$sql = 'UPDATE ' . BOTS_TABLE . "
SET bot_agent = '" . $this->db->sql_escape($bot_agent) . "'
WHERE user_id = $bot_user_id";
$this->sql_query($sql);
}
}
}
}
}

View File

@@ -25,9 +25,13 @@ class captcha_plugins extends \phpbb\db\migration\migration
public function update_data()
{
$captcha_plugin = $this->config['captcha_plugin'];
if (strpos($this->config['captcha_plugin'], 'phpbb_captcha_') === 0)
if (strpos($captcha_plugin, 'phpbb_captcha_') === 0)
{
$captcha_plugin = substr($this->config['captcha_plugin'], strlen('phpbb_captcha_'));
$captcha_plugin = substr($captcha_plugin, strlen('phpbb_captcha_'));
}
else if (strpos($captcha_plugin, 'phpbb_') === 0)
{
$captcha_plugin = substr($captcha_plugin, strlen('phpbb_'));
}
return array(

View File

@@ -20,6 +20,11 @@ class contact_admin_form extends \phpbb\db\migration\migration
return isset($this->config['contact_admin_form_enable']);
}
static public function depends_on()
{
return array('\phpbb\db\migration\data\v310\config_db_text');
}
public function update_data()
{
return array(

View File

@@ -0,0 +1,32 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb\db\migration\data\v310;
class gold extends \phpbb\db\migration\migration
{
static public function depends_on()
{
return array(
'\phpbb\db\migration\data\v310\rc6',
'\phpbb\db\migration\data\v310\bot_update',
);
}
public function update_data()
{
return array(
array('config.update', array('version', '3.1.0')),
);
}
}

View File

@@ -29,7 +29,8 @@ class reset_missing_captcha_plugin extends \phpbb\db\migration\migration
{
return array(
array('if', array(
(!is_file($this->phpbb_root_path . "includes/captcha/plugins/{$this->config['captcha_plugin']}_plugin." . $this->php_ext)),
(is_dir($this->phpbb_root_path . 'includes/captcha/plugins/') &&
!is_file($this->phpbb_root_path . "includes/captcha/plugins/{$this->config['captcha_plugin']}_plugin." . $this->php_ext)),
array('config.update', array('captcha_plugin', 'phpbb_captcha_nogd')),
)),
);

View File

@@ -0,0 +1,31 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb\db\migration\data\v31x;
class m_softdelete_global extends \phpbb\db\migration\migration
{
static public function depends_on()
{
return array('\phpbb\db\migration\data\v31x\v311');
}
public function update_data()
{
return array(
// Make m_softdelete global. The add method will take care of updating
// it if it already exists.
array('permission.add', array('m_softdelete', true)),
);
}
}

View File

@@ -0,0 +1,136 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb\db\migration\data\v31x;
class style_update extends \phpbb\db\migration\migration
{
static public function depends_on()
{
return array('\phpbb\db\migration\data\v310\gold');
}
public function update_data()
{
return array(
array('custom', array(array($this, 'update_installed_styles'))),
);
}
public function update_installed_styles()
{
// Get all currently available styles
$styles = $this->find_style_dirs();
$style_paths = $style_ids = array();
$sql = 'SELECT style_path, style_id
FROM ' . $this->table_prefix . 'styles';
$result = $this->db->sql_query($sql);
while ($styles_row = $this->db->sql_fetchrow())
{
if (in_array($styles_row['style_path'], $styles))
{
$style_paths[] = $styles_row['style_path'];
$style_ids[] = $styles_row['style_id'];
}
}
$this->db->sql_freeresult($result);
// Install prosilver if no style is available and prosilver can be installed
if (empty($style_paths) && in_array('prosilver', $styles))
{
// Try to parse config file
$cfg = parse_cfg_file($this->phpbb_root_path . 'styles/prosilver/style.cfg');
// Stop running this if prosilver cfg file can't be read
if (empty($cfg))
{
throw new \RuntimeException('No styles available and could not fall back to prosilver.');
}
$style = array(
'style_name' => 'prosilver',
'style_copyright' => '&copy; phpBB Limited',
'style_active' => 1,
'style_path' => 'prosilver',
'bbcode_bitfield' => 'kNg=',
'style_parent_id' => 0,
'style_parent_tree' => '',
);
// Add to database
$this->db->sql_transaction('begin');
$sql = 'INSERT INTO ' . $this->table_prefix . 'styles
' . $this->db->sql_build_array('INSERT', $style);
$this->db->sql_query($sql);
$style_id = $this->db->sql_nextid();
$style_ids[] = $style_id;
$this->db->sql_transaction('commit');
// Set prosilver to default style
$this->config->set('default_style', $style_id);
}
else if (empty($styles) && empty($available_styles))
{
throw new \RuntimeException('No valid styles available');
}
// Make sure default style is available
if (!in_array($this->config['default_style'], $style_ids))
{
$this->config->set('default_style', array_pop($style_ids));
}
// Reset users to default style if their user_style is nonexistent
$sql = 'UPDATE ' . $this->table_prefix . "users
SET user_style = {$this->config['default_style']}
WHERE " . $this->db->sql_in_set('user_style', $style_ids, true, true);
$this->db->sql_query($sql);
}
/**
* Find all directories that have styles
* Copied from acp_styles
*
* @return array Directory names
*/
protected function find_style_dirs()
{
$styles = array();
$styles_path = $this->phpbb_root_path . 'styles/';
$dp = @opendir($styles_path);
if ($dp)
{
while (($file = readdir($dp)) !== false)
{
$dir = $styles_path . $file;
if ($file[0] == '.' || !is_dir($dir))
{
continue;
}
if (file_exists("{$dir}/style.cfg"))
{
$styles[] = $file;
}
}
closedir($dp);
}
return $styles;
}
}

View File

@@ -0,0 +1,32 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb\db\migration\data\v31x;
class v311 extends \phpbb\db\migration\migration
{
static public function depends_on()
{
return array(
'\phpbb\db\migration\data\v310\gold',
'\phpbb\db\migration\data\v31x\style_update',
);
}
public function update_data()
{
return array(
array('config.update', array('version', '3.1.1')),
);
}
}

View File

@@ -0,0 +1,32 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb\db\migration\data\v31x;
class v312rc1 extends \phpbb\db\migration\migration
{
static public function depends_on()
{
return array(
'\phpbb\db\migration\data\v31x\v311',
'\phpbb\db\migration\data\v31x\m_softdelete_global',
);
}
public function update_data()
{
return array(
array('config.update', array('version', '3.1.2-RC1')),
);
}
}

View File

@@ -58,6 +58,13 @@ class migrator
*/
protected $migrations = array();
/**
* Array of migrations that have been determined to be fulfillable
*
* @var array
*/
protected $fulfillable_migrations = array();
/**
* 'name,' 'class,' and 'state' of the last migration run
*
@@ -67,6 +74,13 @@ class migrator
*/
public $last_run_migration = false;
/**
* The output handler. A null handler is configured by default.
*
* @var migrator_output_handler
*/
public $output_handler;
/**
* Constructor of the database migrator
*/
@@ -84,6 +98,8 @@ class migrator
$this->table_prefix = $table_prefix;
$this->output_handler = new null_migrator_output_handler();
foreach ($tools as $tool)
{
$this->tools[$tool->get_name()] = $tool;
@@ -94,6 +110,16 @@ class migrator
$this->load_migration_state();
}
/**
* Set the output handler.
*
* @param migrator_output_handler $handler The output handler
*/
public function set_output_handler(migrator_output_handler_interface $handler)
{
$this->output_handler = $handler;
}
/**
* Loads all migrations and their application state from the database.
*
@@ -161,6 +187,10 @@ class migrator
return;
}
}
else
{
$this->output_handler->write(array('MIGRATION_EFFECTIVELY_INSTALLED', $name), migrator_output_handler_interface::VERBOSITY_DEBUG);
}
}
}
@@ -175,6 +205,7 @@ class migrator
{
if (!class_exists($name))
{
$this->output_handler->write(array('MIGRATION_NOT_VALID', $name), migrator_output_handler_interface::VERBOSITY_DEBUG);
return false;
}
@@ -191,6 +222,11 @@ class migrator
'migration_end_time' => 0,
);
if (!empty($state['migration_depends_on']))
{
$this->output_handler->write(array('MIGRATION_APPLY_DEPENDENCIES', $name), migrator_output_handler_interface::VERBOSITY_DEBUG);
}
foreach ($state['migration_depends_on'] as $depend)
{
if ($this->unfulfillable($depend) !== false)
@@ -227,6 +263,8 @@ class migrator
);
$this->last_run_migration['effectively_installed'] = true;
$this->output_handler->write(array('MIGRATION_EFFECTIVELY_INSTALLED', $name), migrator_output_handler_interface::VERBOSITY_VERBOSE);
}
else
{
@@ -238,23 +276,43 @@ class migrator
if (!$state['migration_schema_done'])
{
$this->output_handler->write(array('MIGRATION_SCHEMA_RUNNING', $name), migrator_output_handler_interface::VERBOSITY_VERBOSE);
$this->last_run_migration['task'] = 'process_schema_step';
$elapsed_time = microtime(true);
$steps = $this->helper->get_schema_steps($migration->update_schema());
$result = $this->process_data_step($steps, $state['migration_data_state']);
$elapsed_time = microtime(true) - $elapsed_time;
$state['migration_data_state'] = ($result === true) ? '' : $result;
$state['migration_schema_done'] = ($result === true);
$this->output_handler->write(array('MIGRATION_SCHEMA_DONE', $name, $elapsed_time), migrator_output_handler_interface::VERBOSITY_NORMAL);
}
else if (!$state['migration_data_done'])
{
try
{
$this->output_handler->write(array('MIGRATION_DATA_RUNNING', $name), migrator_output_handler_interface::VERBOSITY_VERBOSE);
$this->last_run_migration['task'] = 'process_data_step';
$elapsed_time = microtime(true);
$result = $this->process_data_step($migration->update_data(), $state['migration_data_state']);
$elapsed_time = microtime(true) - $elapsed_time;
$state['migration_data_state'] = ($result === true) ? '' : $result;
$state['migration_data_done'] = ($result === true);
$state['migration_end_time'] = ($result === true) ? time() : 0;
if ($state['migration_schema_done'])
{
$this->output_handler->write(array('MIGRATION_DATA_DONE', $name, $elapsed_time), migrator_output_handler_interface::VERBOSITY_NORMAL);
}
else
{
$this->output_handler->write(array('MIGRATION_DATA_IN_PROGRESS', $name, $elapsed_time), migrator_output_handler_interface::VERBOSITY_VERY_VERBOSE);
}
}
catch (\phpbb\db\migration\exception $e)
{
@@ -602,7 +660,7 @@ class migrator
*/
public function unfulfillable($name)
{
if (isset($this->migration_state[$name]))
if (isset($this->migration_state[$name]) || isset($this->fulfillable_migrations[$name]))
{
return false;
}
@@ -623,6 +681,7 @@ class migrator
return $unfulfillable;
}
}
$this->fulfillable_migrations[$name] = true;
return false;
}

View File

@@ -0,0 +1,31 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb\db;
interface migrator_output_handler_interface
{
const VERBOSITY_QUIET = 0;
const VERBOSITY_NORMAL = 1;
const VERBOSITY_VERBOSE = 2;
const VERBOSITY_VERY_VERBOSE = 3;
const VERBOSITY_DEBUG = 4;
/**
* Write output using the configured closure.
*
* @param string|array $message The message to write or an array containing the language key and all of its parameters.
* @param int $verbosity The verbosity of the message.
*/
public function write($message, $verbosity);
}

View File

@@ -11,9 +11,14 @@
*
*/
require __DIR__ . '/../build/' . basename(__FILE__);
namespace phpbb\db;
// Removing the versions array key will make Sami use the current branch.
unset($config['versions']);
return new Sami\Sami($iterator, $config);
class null_migrator_output_handler implements migrator_output_handler_interface
{
/**
* {@inheritdoc}
*/
public function write($message, $verbosity)
{
}
}

View File

@@ -2643,7 +2643,7 @@ class tools
AND cols.id = ix.id
WHERE ix.id = object_id('{$table_name}')
AND cols.name = '{$column_name}'
AND INDEXPROPERTY(ix.id, ix.name, 'IsUnique') = " . ($unique) ? '1' : '0';
AND INDEXPROPERTY(ix.id, ix.name, 'IsUnique') = " . ($unique ? '1' : '0');
}
else
{
@@ -2657,7 +2657,7 @@ class tools
AND cols.object_id = ix.object_id
WHERE ix.object_id = object_id('{$table_name}')
AND cols.name = '{$column_name}'
AND ix.is_unique = " . ($unique) ? '1' : '0';
AND ix.is_unique = " . ($unique ? '1' : '0');
}
break;

View File

@@ -39,16 +39,24 @@ class config extends Extension
*/
public function load(array $config, ContainerBuilder $container)
{
$container->setParameter('core.adm_relative_path', ($this->config_php->get('phpbb_adm_relative_path') ? $this->config_php->get('phpbb_adm_relative_path') : 'adm/'));
$container->setParameter('core.table_prefix', $this->config_php->get('table_prefix'));
$container->setParameter('cache.driver.class', $this->convert_30_acm_type($this->config_php->get('acm_type')));
$container->setParameter('dbal.driver.class', $this->config_php->convert_30_dbms_to_31($this->config_php->get('dbms')));
$container->setParameter('dbal.dbhost', $this->config_php->get('dbhost'));
$container->setParameter('dbal.dbuser', $this->config_php->get('dbuser'));
$container->setParameter('dbal.dbpasswd', $this->config_php->get('dbpasswd'));
$container->setParameter('dbal.dbname', $this->config_php->get('dbname'));
$container->setParameter('dbal.dbport', $this->config_php->get('dbport'));
$container->setParameter('dbal.new_link', defined('PHPBB_DB_NEW_LINK') && PHPBB_DB_NEW_LINK);
$parameters = array(
'core.adm_relative_path' => $this->config_php->get('phpbb_adm_relative_path') ? $this->config_php->get('phpbb_adm_relative_path') : 'adm/',
'core.table_prefix' => $this->config_php->get('table_prefix'),
'cache.driver.class' => $this->convert_30_acm_type($this->config_php->get('acm_type')),
'dbal.driver.class' => $this->config_php->convert_30_dbms_to_31($this->config_php->get('dbms')),
'dbal.dbhost' => $this->config_php->get('dbhost'),
'dbal.dbuser' => $this->config_php->get('dbuser'),
'dbal.dbpasswd' => $this->config_php->get('dbpasswd'),
'dbal.dbname' => $this->config_php->get('dbname'),
'dbal.dbport' => $this->config_php->get('dbport'),
'dbal.new_link' => defined('PHPBB_DB_NEW_LINK') && PHPBB_DB_NEW_LINK,
);
$parameter_bag = $container->getParameterBag();
foreach ($parameters as $parameter => $value)
{
$container->setParameter($parameter, $parameter_bag->escapeValue($value));
}
}
/**

View File

@@ -177,12 +177,24 @@ class metadata_manager
throw new \phpbb\extension\exception($this->user->lang('FILE_JSON_DECODE_ERR', $this->metadata_file));
}
array_walk_recursive($metadata, array($this, 'sanitize_json'));
$this->metadata = $metadata;
return true;
}
}
/**
* Sanitize input from JSON array using htmlspecialchars()
*
* @param mixed $value Value of array row
* @param string $key Key of array row
*/
public function sanitize_json(&$value, $key)
{
$value = htmlspecialchars($value);
}
/**
* This array handles the cleaning of the array
*
@@ -337,30 +349,30 @@ class metadata_manager
public function output_template_data()
{
$this->template->assign_vars(array(
'META_NAME' => htmlspecialchars($this->metadata['name']),
'META_TYPE' => htmlspecialchars($this->metadata['type']),
'META_DESCRIPTION' => (isset($this->metadata['description'])) ? htmlspecialchars($this->metadata['description']) : '',
'META_NAME' => $this->metadata['name'],
'META_TYPE' => $this->metadata['type'],
'META_DESCRIPTION' => (isset($this->metadata['description'])) ? $this->metadata['description'] : '',
'META_HOMEPAGE' => (isset($this->metadata['homepage'])) ? $this->metadata['homepage'] : '',
'META_VERSION' => (isset($this->metadata['version'])) ? htmlspecialchars($this->metadata['version']) : '',
'META_TIME' => (isset($this->metadata['time'])) ? htmlspecialchars($this->metadata['time']) : '',
'META_LICENSE' => htmlspecialchars($this->metadata['license']),
'META_VERSION' => (isset($this->metadata['version'])) ? $this->metadata['version'] : '',
'META_TIME' => (isset($this->metadata['time'])) ? $this->metadata['time'] : '',
'META_LICENSE' => $this->metadata['license'],
'META_REQUIRE_PHP' => (isset($this->metadata['require']['php'])) ? htmlspecialchars($this->metadata['require']['php']) : '',
'META_REQUIRE_PHP' => (isset($this->metadata['require']['php'])) ? $this->metadata['require']['php'] : '',
'META_REQUIRE_PHP_FAIL' => !$this->validate_require_php(),
'META_REQUIRE_PHPBB' => (isset($this->metadata['extra']['soft-require']['phpbb/phpbb'])) ? htmlspecialchars($this->metadata['extra']['soft-require']['phpbb/phpbb']) : '',
'META_REQUIRE_PHPBB' => (isset($this->metadata['extra']['soft-require']['phpbb/phpbb'])) ? $this->metadata['extra']['soft-require']['phpbb/phpbb'] : '',
'META_REQUIRE_PHPBB_FAIL' => !$this->validate_require_phpbb(),
'META_DISPLAY_NAME' => (isset($this->metadata['extra']['display-name'])) ? htmlspecialchars($this->metadata['extra']['display-name']) : '',
'META_DISPLAY_NAME' => (isset($this->metadata['extra']['display-name'])) ? $this->metadata['extra']['display-name'] : '',
));
foreach ($this->metadata['authors'] as $author)
{
$this->template->assign_block_vars('meta_authors', array(
'AUTHOR_NAME' => htmlspecialchars($author['name']),
'AUTHOR_NAME' => $author['name'],
'AUTHOR_EMAIL' => (isset($author['email'])) ? $author['email'] : '',
'AUTHOR_HOMEPAGE' => (isset($author['homepage'])) ? $author['homepage'] : '',
'AUTHOR_ROLE' => (isset($author['role'])) ? htmlspecialchars($author['role']) : '',
'AUTHOR_ROLE' => (isset($author['role'])) ? $author['role'] : '',
));
}
}

View File

@@ -0,0 +1,120 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb;
class file_downloader
{
/** @var string Error string */
protected $error_string = '';
/** @var int Error number */
protected $error_number = 0;
/**
* Retrieve contents from remotely stored file
*
* @param string $host File host
* @param string $directory Directory file is in
* @param string $filename Filename of file to retrieve
* @param int $port Port to connect to; default: 80
* @param int $timeout Connection timeout in seconds; default: 6
*
* @return mixed File data as string if file can be read and there is no
* timeout, false if there were errors or the connection timed out
*
* @throws \RuntimeException If data can't be retrieved and no error
* message is returned
*/
public function get($host, $directory, $filename, $port = 80, $timeout = 6)
{
// Set default values for error variables
$this->error_number = 0;
$this->error_string = '';
if ($socket = @fsockopen($host, $port, $this->error_number, $this->error_string, $timeout))
{
@fputs($socket, "GET $directory/$filename HTTP/1.0\r\n");
@fputs($socket, "HOST: $host\r\n");
@fputs($socket, "Connection: close\r\n\r\n");
$timer_stop = time() + $timeout;
stream_set_timeout($socket, $timeout);
$file_info = '';
$get_info = false;
while (!@feof($socket))
{
if ($get_info)
{
$file_info .= @fread($socket, 1024);
}
else
{
$line = @fgets($socket, 1024);
if ($line == "\r\n")
{
$get_info = true;
}
else if (stripos($line, '404 not found') !== false)
{
throw new \RuntimeException(array('FILE_NOT_FOUND', $filename));
}
}
$stream_meta_data = stream_get_meta_data($socket);
if (!empty($stream_meta_data['timed_out']) || time() >= $timer_stop)
{
throw new \RuntimeException('FSOCK_TIMEOUT');
}
}
@fclose($socket);
}
else
{
if ($this->error_string)
{
$this->error_string = utf8_convert_message($this->error_string);
return false;
}
else
{
throw new \RuntimeException('FSOCK_DISABLED');
}
}
return $file_info;
}
/**
* Get error string
*
* @return string Error string
*/
public function get_error_string()
{
return $this->error_string;
}
/**
* Get error number
*
* @return int Error number
*/
public function get_error_number()
{
return $this->error_number;
}
}

View File

@@ -178,6 +178,7 @@ class admin_form extends form
'S_CONTACT_ADMIN' => true,
'S_CONTACT_FORM' => $this->config['contact_admin_form_enable'],
'S_IS_REGISTERED' => $this->user->data['is_registered'],
'S_POST_ACTION' => append_sid($this->phpbb_root_path . 'memberlist.' . $this->phpEx, 'mode=contactadmin'),
'CONTACT_INFO' => $l_admin_info,
'MESSAGE' => $this->body,

View File

@@ -146,7 +146,7 @@ abstract class form
WHERE user_id = ' . $this->user->data['user_id'];
$this->db->sql_query($sql);
if ($this->cc_sender)
if ($this->cc_sender && $this->user->data['is_registered'])
{
$this->message->cc_sender();
}

View File

@@ -117,7 +117,7 @@ class topic_form extends form
'TOPIC_NAME' => htmlspecialchars_decode($this->topic_row['topic_title']),
'U_TOPIC' => generate_board_url() . '/viewtopic.' . $this->phpEx . '?f=' . $this->topic_row['forum_id'] . '&t=' . $this->topic_id,
));
$this->message->set_body($this->body);
$this->message->add_recipient(
$this->recipient_name,
$this->recipient_address,

View File

@@ -23,6 +23,9 @@ class manager
/** @var array */
protected $notification_types;
/** @var array */
protected $subscription_types;
/** @var array */
protected $notification_methods;
@@ -289,7 +292,7 @@ class manager
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) : '') .
(($item_parent_id !== false) ? ' AND ' . (is_array($item_parent_id) ? $this->db->sql_in_set('item_parent_id', $item_parent_id, false, true) : '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);
}
@@ -524,33 +527,36 @@ class manager
*/
public function get_subscription_types()
{
$subscription_types = array();
foreach ($this->notification_types as $type_name => $data)
if ($this->subscription_types === null)
{
$type = $this->get_item_type_class($type_name);
$this->subscription_types = array();
if ($type instanceof \phpbb\notification\type\type_interface && $type->is_available())
foreach ($this->notification_types as $type_name => $data)
{
$options = array_merge(array(
'id' => $type->get_type(),
'lang' => 'NOTIFICATION_TYPE_' . strtoupper($type->get_type()),
'group' => 'NOTIFICATION_GROUP_MISCELLANEOUS',
), (($type::$notification_option !== false) ? $type::$notification_option : array()));
$type = $this->get_item_type_class($type_name);
$subscription_types[$options['group']][$options['id']] = $options;
if ($type instanceof \phpbb\notification\type\type_interface && $type->is_available())
{
$options = array_merge(array(
'id' => $type->get_type(),
'lang' => 'NOTIFICATION_TYPE_' . strtoupper($type->get_type()),
'group' => 'NOTIFICATION_GROUP_MISCELLANEOUS',
), (($type::$notification_option !== false) ? $type::$notification_option : array()));
$this->subscription_types[$options['group']][$options['id']] = $options;
}
}
// Move Miscellaneous to the very last section
if (isset($this->subscription_types['NOTIFICATION_GROUP_MISCELLANEOUS']))
{
$miscellaneous = $this->subscription_types['NOTIFICATION_GROUP_MISCELLANEOUS'];
unset($this->subscription_types['NOTIFICATION_GROUP_MISCELLANEOUS']);
$this->subscription_types['NOTIFICATION_GROUP_MISCELLANEOUS'] = $miscellaneous;
}
}
// Move Miscellaneous to the very last section
if (isset($subscription_types['NOTIFICATION_GROUP_MISCELLANEOUS']))
{
$miscellaneous = $subscription_types['NOTIFICATION_GROUP_MISCELLANEOUS'];
unset($subscription_types['NOTIFICATION_GROUP_MISCELLANEOUS']);
$subscription_types['NOTIFICATION_GROUP_MISCELLANEOUS'] = $miscellaneous;
}
return $subscription_types;
return $this->subscription_types;
}
/**

View File

@@ -131,7 +131,7 @@ class admin_activate_user extends \phpbb\notification\type\base
public function get_email_template_variables()
{
$board_url = generate_board_url();
$username = $this->user_loader->get_username($this->item_id, 'no_profile');
$username = $this->user_loader->get_username($this->item_id, 'username');
return array(
'USERNAME' => htmlspecialchars_decode($username),

View File

@@ -154,6 +154,7 @@ class path_helper
return $this->web_root_path;
}
// We do not need to escape $path_info, $request_uri and $script_name because we can not find their content in the result.
// Path info (e.g. /foo/bar)
$path_info = $this->filesystem->clean_path($this->symfony_request->getPathInfo());
@@ -203,9 +204,12 @@ class path_helper
*/
if ($this->request->is_ajax() && $this->symfony_request->get('_referer'))
{
// We need to escape $absolute_board_url because it can be partially concatenated to the result.
$absolute_board_url = $this->request->escape($this->symfony_request->getSchemeAndHttpHost() . $this->symfony_request->getBasePath(), true);
$referer_web_root_path = $this->get_web_root_path_from_ajax_referer(
$this->symfony_request->get('_referer'),
$this->symfony_request->getSchemeAndHttpHost() . $this->symfony_request->getBasePath()
$absolute_board_url
);
return $this->web_root_path = $this->phpbb_root_path . $referer_web_root_path;
}
@@ -278,10 +282,16 @@ class path_helper
$referer_dir = dirname($referer_dir);
}
while (strpos($absolute_board_url, $referer_dir) !== 0)
while (($dir_position = strpos($absolute_board_url, $referer_dir)) !== 0)
{
$fixed_root_path .= '../';
$referer_dir = dirname($referer_dir);
// Just return phpbb_root_path if we reach the top directory
if ($referer_dir === '.')
{
return $this->phpbb_root_path;
}
}
$fixed_root_path .= substr($absolute_board_url, strlen($referer_dir) + 1);

View File

@@ -158,7 +158,19 @@ abstract class type_base implements type_interface
}
else
{
return $this->request->variable($key, '', true);
$default_value = '';
$lang_fields = array(
'l_lang_name',
'l_lang_explain',
'l_lang_default_value',
'l_lang_options',
);
if (in_array($key, $lang_fields))
{
$default_value = array(0 => '');
}
return $this->request->variable($key, $default_value, true);
}
}

View File

@@ -352,7 +352,7 @@ class type_bool extends type_base
}
}
if ($step == 3 && ($field_data[$key] || $action != 'edit') && $key == 'l_lang_options')
if ($key == 'l_lang_options' && $this->request->is_set($key))
{
$field_data[$key] = $this->request->variable($key, array(0 => array('')), true);

View File

@@ -416,4 +416,27 @@ class request implements \phpbb\request\request_interface
{
return $this->input[$super_global];
}
/**
* {@inheritdoc}
*/
public function escape($var, $multibyte)
{
if (is_array($var))
{
$result = array();
foreach ($var as $key => $value)
{
$this->type_cast_helper->set_var($key, $key, gettype($key), $multibyte);
$result[$key] = $this->escape($value, $multibyte);
}
$var = $result;
}
else
{
$this->type_cast_helper->set_var($var, $var, 'string', $multibyte);
}
return $var;
}
}

View File

@@ -142,4 +142,14 @@ interface request_interface
* @return array The original array of the requested super global.
*/
public function get_super_global($super_global = \phpbb\request\request_interface::REQUEST);
/**
* Escape a string variable.
*
* @param mixed $value The contents to fill with
* @param bool $multibyte Indicates whether string values may contain UTF-8 characters.
* Default is false, causing all bytes outside the ASCII range (0-127) to be replaced with question marks.
* @return string|array
*/
public function escape($value, $multibyte);
}

View File

@@ -31,10 +31,11 @@ class session
var $update_session_page = true;
/**
* Extract current session page
*
* @param string $root_path current root path (phpbb_root_path)
*/
* Extract current session page
*
* @param string $root_path current root path (phpbb_root_path)
* @return array
*/
static function extract_current_page($root_path)
{
global $request, $symfony_request, $phpbb_filesystem;
@@ -42,8 +43,8 @@ class session
$page_array = array();
// First of all, get the request uri...
$script_name = $symfony_request->getScriptName();
$args = explode('&', $symfony_request->getQueryString());
$script_name = $request->escape($symfony_request->getScriptName(), true);
$args = $request->escape(explode('&', $symfony_request->getQueryString()), true);
// If we are unable to get the script name we use REQUEST_URI as a failover and note it within the page array for easier support...
if (!$script_name)
@@ -61,8 +62,8 @@ class session
// Since some browser do not encode correctly we need to do this with some "special" characters...
// " -> %22, ' => %27, < -> %3C, > -> %3E
$find = array('"', "'", '<', '>');
$replace = array('%22', '%27', '%3C', '%3E');
$find = array('"', "'", '<', '>', '&quot;', '&lt;', '&gt;');
$replace = array('%22', '%27', '%3C', '%3E', '%22', '%3C', '%3E');
foreach ($args as $key => $argument)
{
@@ -87,7 +88,7 @@ class session
$symfony_request_path = $phpbb_filesystem->clean_path($symfony_request->getPathInfo());
if ($symfony_request_path !== '/')
{
$page_name .= $symfony_request_path;
$page_name .= str_replace('%2F', '/', urlencode($symfony_request_path));
}
// current directory within the phpBB root (for example: adm)
@@ -577,6 +578,43 @@ class session
}
}
$provider_collection = $phpbb_container->get('auth.provider_collection');
$provider = $provider_collection->get_provider();
$this->data = $provider->autologin();
if ($user_id !== false && sizeof($this->data) && $this->data['user_id'] != $user_id)
{
$this->data = array();
}
if (sizeof($this->data))
{
$this->cookie_data['k'] = '';
$this->cookie_data['u'] = $this->data['user_id'];
}
// If we're presented with an autologin key we'll join against it.
// Else if we've been passed a user_id we'll grab data based on that
if (isset($this->cookie_data['k']) && $this->cookie_data['k'] && $this->cookie_data['u'] && !sizeof($this->data))
{
$sql = 'SELECT u.*
FROM ' . USERS_TABLE . ' u, ' . SESSIONS_KEYS_TABLE . ' k
WHERE u.user_id = ' . (int) $this->cookie_data['u'] . '
AND u.user_type IN (' . USER_NORMAL . ', ' . USER_FOUNDER . ")
AND k.user_id = u.user_id
AND k.key_id = '" . $db->sql_escape(md5($this->cookie_data['k'])) . "'";
$result = $db->sql_query($sql);
$user_data = $db->sql_fetchrow($result);
if ($user_id === false || (isset($user_data['user_id']) && $user_id == $user_data['user_id']))
{
$this->data = $user_data;
$bot = false;
}
$db->sql_freeresult($result);
}
if ($user_id !== false && !sizeof($this->data))
{
$this->cookie_data['k'] = '';
@@ -591,34 +629,6 @@ class session
$db->sql_freeresult($result);
$bot = false;
}
else if (!$bot)
{
$provider_collection = $phpbb_container->get('auth.provider_collection');
$provider = $provider_collection->get_provider();
$this->data = $provider->autologin();
if (sizeof($this->data))
{
$this->cookie_data['k'] = '';
$this->cookie_data['u'] = $this->data['user_id'];
}
// If we're presented with an autologin key we'll join against it.
// Else if we've been passed a user_id we'll grab data based on that
if (isset($this->cookie_data['k']) && $this->cookie_data['k'] && $this->cookie_data['u'] && !sizeof($this->data))
{
$sql = 'SELECT u.*
FROM ' . USERS_TABLE . ' u, ' . SESSIONS_KEYS_TABLE . ' k
WHERE u.user_id = ' . (int) $this->cookie_data['u'] . '
AND u.user_type IN (' . USER_NORMAL . ', ' . USER_FOUNDER . ")
AND k.user_id = u.user_id
AND k.key_id = '" . $db->sql_escape(md5($this->cookie_data['k'])) . "'";
$result = $db->sql_query($sql);
$this->data = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
$bot = false;
}
}
// Bot user, if they have a SID in the Request URI we need to get rid of it
// otherwise they'll index this page with the SID, duplicate content oh my!

View File

@@ -15,6 +15,10 @@ namespace phpbb;
use Symfony\Component\HttpFoundation\Request;
/**
* WARNING: The Symfony request does not escape the input and should be used very carefully
* prefer the phpbb request as possible
*/
class symfony_request extends Request
{
/**
@@ -24,21 +28,12 @@ class symfony_request extends Request
*/
public function __construct(\phpbb\request\request_interface $phpbb_request)
{
// This function is meant to sanitize the global input arrays
$sanitizer = function(&$value, $key) {
$type_cast_helper = new \phpbb\request\type_cast_helper();
$type_cast_helper->set_var($value, $value, gettype($value), true);
};
$get_parameters = $phpbb_request->get_super_global(\phpbb\request\request_interface::GET);
$post_parameters = $phpbb_request->get_super_global(\phpbb\request\request_interface::POST);
$server_parameters = $phpbb_request->get_super_global(\phpbb\request\request_interface::SERVER);
$files_parameters = $phpbb_request->get_super_global(\phpbb\request\request_interface::FILES);
$cookie_parameters = $phpbb_request->get_super_global(\phpbb\request\request_interface::COOKIE);
array_walk_recursive($get_parameters, $sanitizer);
array_walk_recursive($post_parameters, $sanitizer);
parent::__construct($get_parameters, $post_parameters, array(), $cookie_parameters, $files_parameters, $server_parameters);
}
}

View File

@@ -189,13 +189,24 @@ class twig extends \phpbb\template\base
{
$path = $this->phpbb_root_path . trim($directory, '/') . "/{$name}/";
$template_path = $path . 'template/';
$theme_path = $path . 'theme/';
$is_valid_dir = false;
if (is_dir($template_path))
{
$is_valid_dir = true;
$paths[] = $template_path;
}
if (is_dir($theme_path))
{
$is_valid_dir = true;
$paths[] = $theme_path;
}
if ($is_valid_dir)
{
// Add the base style directory as a safe directory
$this->twig->getLoader()->addSafeDirectory($path);
$paths[] = $template_path;
}
}
}
@@ -253,25 +264,38 @@ class twig extends \phpbb\template\base
{
$ext_style_template_path = $ext_path . $template_dir['ext_path'];
$ext_style_path = dirname($ext_style_template_path);
$ext_style_theme_path = $ext_style_path . 'theme/';
}
else
{
$ext_style_path = $ext_path . 'styles/' . $template_dir['name'] . '/';
$ext_style_template_path = $ext_style_path . 'template/';
$ext_style_theme_path = $ext_style_path . 'theme/';
}
}
else
{
$ext_style_path = $ext_path . 'styles/' . $template_dir . '/';
$ext_style_template_path = $ext_style_path . 'template/';
$ext_style_theme_path = $ext_style_path . 'theme/';
}
$ok = false;
if (is_dir($ext_style_template_path))
{
$ok = true;
$paths[] = $ext_style_template_path;
}
if (is_dir($ext_style_theme_path))
{
$ok = true;
$paths[] = $ext_style_theme_path;
}
if ($ok)
{
// Add the base style directory as a safe directory
$this->twig->getLoader()->addSafeDirectory($ext_style_path);
$paths[] = $ext_style_template_path;
}
}

View File

@@ -50,6 +50,9 @@ class version_helper
/** @var \phpbb\config\config */
protected $config;
/** @var \phpbb\file_downloader */
protected $file_downloader;
/** @var \phpbb\user */
protected $user;
@@ -58,12 +61,14 @@ class version_helper
*
* @param \phpbb\cache\service $cache
* @param \phpbb\config\config $config
* @param \phpbb\file_downloader $file_downloader
* @param \phpbb\user $user
*/
public function __construct(\phpbb\cache\service $cache, \phpbb\config\config $config, \phpbb\user $user)
public function __construct(\phpbb\cache\service $cache, \phpbb\config\config $config, \phpbb\file_downloader $file_downloader, \phpbb\user $user)
{
$this->cache = $cache;
$this->config = $config;
$this->file_downloader = $file_downloader;
$this->user = $user;
if (defined('PHPBB_QA'))
@@ -239,7 +244,7 @@ class version_helper
*/
public function get_versions($force_update = false, $force_cache = false)
{
$cache_file = 'versioncheck_' . $this->host . $this->path . $this->file;
$cache_file = '_versioncheck_' . $this->host . $this->path . $this->file;
$info = $this->cache->get($cache_file);
@@ -249,16 +254,32 @@ class version_helper
}
else if ($info === false || $force_update)
{
$errstr = $errno = '';
$info = get_remote_file($this->host, $this->path, $this->file, $errstr, $errno);
if (!empty($errstr))
try {
$info = $this->file_downloader->get($this->host, $this->path, $this->file);
}
catch (\RuntimeException $exception)
{
throw new \RuntimeException($errstr);
throw new \RuntimeException(call_user_func_array(array($this->user, 'lang'), $exception->getMessage()));
}
$error_string = $this->file_downloader->get_error_string();
if (!empty($error_string))
{
throw new \RuntimeException($error_string);
}
$info = json_decode($info, true);
// Sanitize any data we retrieve from a server
if (!empty($info))
{
$json_sanitizer = function (&$value, $key) {
$type_cast_helper = new \phpbb\request\type_cast_helper();
$type_cast_helper->set_var($value, $value, gettype($value), true);
};
array_walk_recursive($info, $json_sanitizer);
}
if (empty($info['stable']) && empty($info['unstable']))
{
$this->user->add_lang('acp/common');
@@ -266,15 +287,6 @@ class version_helper
throw new \RuntimeException($this->user->lang('VERSIONCHECK_FAIL'));
}
// Replace & with &amp; on announcement links
foreach ($info as $stability => $branches)
{
foreach ($branches as $branch => $branch_data)
{
$info[$stability][$branch]['announcement'] = str_replace('&', '&amp;', $branch_data['announcement']);
}
}
$info['stable'] = (empty($info['stable'])) ? array() : $info['stable'];
$info['unstable'] = (empty($info['unstable'])) ? $info['stable'] : $info['unstable'];

View File

@@ -73,7 +73,6 @@ $current_time = time();
* @var bool preview Whether or not the post is being previewed
* @var bool save Whether or not a draft is being saved
* @var bool load Whether or not a draft is being loaded
* @var bool delete Whether or not the post is being deleted
* @var bool cancel Whether or not to cancel the form (returns to
* viewtopic or viewforum depending on if the user
* is posting a new topic or editing a post)
@@ -85,6 +84,7 @@ $current_time = time();
* NOTE: Should be actual language strings, NOT
* language keys.
* @since 3.1.0-a1
* @change 3.1.2-RC1 Removed 'delete' var as it does not exist
*/
$vars = array(
'post_id',
@@ -96,7 +96,6 @@ $vars = array(
'preview',
'save',
'load',
'delete',
'cancel',
'refresh',
'mode',
@@ -870,6 +869,43 @@ if ($submit || $preview || $refresh)
// Parse Attachments - before checksum is calculated
$message_parser->parse_attachments('fileupload', $mode, $forum_id, $submit, $preview, $refresh);
/**
* This event allows you to modify message text before parsing
*
* @event core.posting_modify_message_text
* @var array post_data Array with post data
* @var string mode What action to take if the form is submitted
* post|reply|quote|edit|delete|bump|smilies|popup
* @var int post_id ID of the post
* @var int topic_id ID of the topic
* @var int forum_id ID of the forum
* @var bool submit Whether or not the form has been submitted
* @var bool preview Whether or not the post is being previewed
* @var bool save Whether or not a draft is being saved
* @var bool load Whether or not a draft is being loaded
* @var bool cancel Whether or not to cancel the form (returns to
* viewtopic or viewforum depending on if the user
* is posting a new topic or editing a post)
* @var bool refresh Whether or not to retain previously submitted data
* @var object message_parser The message parser object
* @since 3.1.2-RC1
*/
$vars = array(
'post_data',
'mode',
'post_id',
'topic_id',
'forum_id',
'submit',
'preview',
'save',
'load',
'cancel',
'refresh',
'message_parser',
);
extract($phpbb_dispatcher->trigger_event('core.posting_modify_message_text', compact($vars)));
// Grab md5 'checksum' of new message
$message_md5 = md5($message_parser->message);
@@ -1125,7 +1161,7 @@ if ($submit || $preview || $refresh)
break;
}
if (!$auth->acl_get($auth_option, $forum_id))
if ($auth_option != '' && !$auth->acl_get($auth_option, $forum_id))
{
// There is a special case where a user edits his post whereby the topic type got changed by an admin/mod.
// Another case would be a mod not having sticky permissions for example but edit permissions.
@@ -1727,7 +1763,6 @@ $page_data = array(
* @var bool preview Whether or not the post is being previewed
* @var bool save Whether or not a draft is being saved
* @var bool load Whether or not a draft is being loaded
* @var bool delete Whether or not the post is being deleted
* @var bool cancel Whether or not to cancel the form (returns to
* viewtopic or viewforum depending on if the user
* is posting a new topic or editing a post)
@@ -1744,6 +1779,7 @@ $page_data = array(
* s_topic_icons, form_enctype, s_action, s_hidden_fields,
* post_id, topic_id, forum_id, submit, preview, save, load,
* delete, cancel, refresh, error, page_data, message_parser
* @change 3.1.2-RC1 Removed 'delete' var as it does not exist
*/
$vars = array(
'post_data',
@@ -1761,7 +1797,6 @@ $vars = array(
'preview',
'save',
'load',
'delete',
'cancel',
'refresh',
'error',

View File

@@ -922,7 +922,7 @@ if ($keywords || $author || $author_id || $search_id || $submit)
$posts_unapproved = ($row['topic_visibility'] == ITEM_APPROVED && $row['topic_posts_unapproved'] && $auth->acl_get('m_approve', $forum_id)) ? true : false;
$topic_deleted = $row['topic_visibility'] == ITEM_DELETED;
$u_mcp_queue = ($topic_unapproved || $posts_unapproved) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=queue&amp;mode=' . (($topic_unapproved) ? 'approve_details' : 'unapproved_posts') . "&amp;t=$result_topic_id", true, $user->session_id) : '';
$u_mcp_queue = (!$u_mcp_queue && $topic_deleted) ? append_sid("{$phpbb_root_path}mcp.$phpEx", "i=queue&amp;mode=deleted_topics&amp;t=$result_topic_id", true, $user->session_id) : '';
$u_mcp_queue = (!$u_mcp_queue && $topic_deleted) ? append_sid("{$phpbb_root_path}mcp.$phpEx", "i=queue&amp;mode=deleted_topics&amp;t=$result_topic_id", true, $user->session_id) : $u_mcp_queue;
$row['topic_title'] = preg_replace('#(?!<.*)(?<!\w)(' . $hilit . ')(?!\w|[^<>]*(?:</s(?:cript|tyle))?>)#is', '<span class="posthilit">$1</span>', $row['topic_title']);

View File

@@ -21,8 +21,8 @@
# General Information about this style
name = prosilver
copyright = © phpBB Limited, 2007
style_version = 3.1.0-RC6
phpbb_version = 3.1.0-RC6
style_version = 3.1.2
phpbb_version = 3.1.2
# Defining a different template bitfield
# template_bitfield = lNg=

View File

@@ -2,6 +2,7 @@
<form action="{S_CONFIRM_ACTION}" method="post">
<p>{MESSAGE_TEXT}</p>
<!-- IF not S_SHADOW_TOPICS -->
<!-- IF not S_SOFTDELETED and S_ALLOWED_DELETE and S_ALLOWED_SOFTDELETE -->
<label>
<strong>{L_DELETE_PERMANENTLY}{L_COLON}</strong>
@@ -14,6 +15,7 @@
<strong>{L_DELETE_REASON}{L_COLON}</strong><br /><span>{L_DELETE_REASON_EXPLAIN}</span><br />
<input type="text" name="delete_reason" value="" class="inputbox autowidth" maxlength="120" size="45" />
</label>
<!-- ENDIF -->
<fieldset class="submit-buttons">
<input type="button" name="confirm" value="{L_YES}" class="button1" />&nbsp;
@@ -33,6 +35,7 @@
<p>{MESSAGE_TEXT}</p>
<!-- IF not S_SHADOW_TOPICS -->
<fieldset class="fields1">
<!-- IF not S_SOFTDELETED and S_ALLOWED_DELETE and S_ALLOWED_SOFTDELETE -->
<dl>
@@ -51,6 +54,7 @@
<dd><input type="text" name="delete_reason" id="delete_reason" value="" class="inputbox autowidth" maxlength="120" size="45" /></dd>
</dl>
</fieldset>
<!-- ENDIF -->
<fieldset class="submit-buttons">
{S_HIDDEN_FIELDS}

View File

@@ -80,6 +80,8 @@
{L_POST_BY_AUTHOR} {forumrow.LAST_POSTER_FULL}
<!-- IF not S_IS_BOT --><a href="{forumrow.U_LAST_POST}">{LAST_POST_IMG}</a> <!-- ENDIF --><br />{forumrow.LAST_POST_TIME}<!-- ELSE -->{L_NO_POSTS}<br />&nbsp;<!-- ENDIF --></span>
</dd>
<!-- ELSE -->
<dd>&nbsp;</dd>
<!-- ENDIF -->
</dl>
<!-- EVENT forumlist_body_forum_row_append -->

View File

@@ -13,6 +13,8 @@
<!-- INCLUDE forumlist_body.html -->
<!-- EVENT index_body_forumlist_body_after -->
<!-- IF not S_USER_LOGGED_IN and not S_IS_BOT -->
<form method="post" action="{S_LOGIN_ACTION}" class="headerspace">
<h3><a href="{U_LOGIN_LOGOUT}">{L_LOGIN_LOGOUT}</a><!-- IF S_REGISTER_ENABLED -->&nbsp; &bull; &nbsp;<a href="{U_REGISTER}">{L_REGISTER}</a><!-- ENDIF --></h3>

Some files were not shown because too many files have changed in this diff Show More