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

Compare commits

...

626 Commits

Author SHA1 Message Date
Marc Alexander
a5d83e12ec [prep-release-3.1.11] Update changelog 2017-06-25 21:36:40 +02:00
Marc Alexander
08c146ee34 Merge branch '3.1.x' into prep-release-3.1.11 2017-06-25 21:32:12 +02:00
Marc Alexander
dc49a8a199 Merge pull request #4804 from rxu/ticket/15186
[ticket/15186] Fully implement the force_delete_allowed feature
2017-06-25 21:25:54 +02:00
Marc Alexander
d811743303 [prep-release-3.1.11] Update changelog for 3.1.11-RC1 2017-06-25 17:48:07 +02:00
Marc Alexander
65f7137825 [prep-release-3.1.11] Add migration for update to 3.1.11-RC1 2017-06-25 17:45:07 +02:00
Marc Alexander
04ef19595c [prep-release-3.1.11] Update version numbers to 3.1.11-RC1 2017-06-25 17:42:55 +02:00
Marc Alexander
71f9c6ebe5 Merge pull request #4860 from marc1706/ticket/14982
[ticket/14982] Always do a ban check except on contact me form
2017-06-25 17:27:42 +02:00
David Colón
cc556122f3 [ticket/14982] Always do a ban check except on contact me form
PHPBB3-14982
2017-06-25 15:32:49 +02:00
Marc Alexander
8938a0ce98 Merge pull request #4852 from javiexin/ticket/15248
[ticket/15248] Make use of event parameters of core.modify_posting_auth
2017-06-25 15:12:32 +02:00
Marc Alexander
689ebd3bb6 Merge pull request #4855 from dsinn/ticket/15250
[ticket/15250] Add core event to MCP at the end of merge_posts
2017-06-25 11:05:40 +02:00
Marc Alexander
ea8334b693 Merge pull request #4850 from rxu/ticket/15246
[ticket/15246] Allow use of Unix socket as memcache(d) host
2017-06-25 10:32:35 +02:00
Marc Alexander
e50e5dbcae Merge pull request #4842 from rxu/ticket/15238-3.1
[ticket/15238] Add console command to fix forums/modules left/right IDs
2017-06-25 10:20:19 +02:00
Daniel Sinn
127f5a3ffa [ticket/15250] Add core event to MCP at the end of merge_posts
PHPBB3-15250
2017-06-20 17:56:48 -04:00
rxu
9402339af9 [ticket/15238] Add missing protected keyword
PHPBB3-15238
2017-06-20 21:06:01 +07:00
javiexin
ca5243810f [ticket/15248] Make use of event parameters of core.modify_posting_auth
Fixes is_authed and error not behaving as expected by extensions.

PHPBB-15248
2017-06-19 23:29:54 +02:00
rxu
840cb510e4 [ticket/15238] More code cleanup
PHPBB3-15238
2017-06-18 23:15:05 +07:00
rxu
c1fa252fc1 [ticket/15238] Code cleanup, add docblocks
PHPBB3-15238
2017-06-18 23:14:09 +07:00
rxu
fd822ade20 [ticket/15238] Add console command to fix forums/modules left/right IDs
PHPBB3-15238
2017-06-18 23:14:09 +07:00
rxu
c255e1fae8 [ticket/15246] Allow use of Unix socket as memcache(d) host
PHPBB3-15246
2017-06-17 15:42:08 +07:00
Marc Alexander
1c4f49249f Merge pull request #4845 from javiexin/ticket/15241
[ticket/15241] Add ACP template event acp_profile_contact_last
2017-06-16 20:18:46 +02:00
Marc Alexander
65c6bae91d Merge pull request #4797 from marc1706/ticket/15178
[ticket/15178] Update dependencies for 3.1.x
2017-06-11 16:43:25 +02:00
Tristan Darricau
2a49420124 Merge pull request #4825 from marc1706/ticket/15219
[ticket/15219] Update hashes to bcrypt with cron

* github.com:phpbb/phpbb:
  [ticket/15219] Add console command for updating hashes to bcrypt
  [ticket/15219] Add missing space
  [ticket/15219] Update hashes to bcrypt with cron
2017-06-06 09:32:45 +02:00
javiexin
ecdc05a13e [ticket/15241] Add ACP template event acp_profile_contact_last
Event to place code in Profile Field configuration screen,
as additional information for Contact Profile Fields.

PHPBB-15241
2017-06-05 15:14:42 +02:00
Marc Alexander
05a8baffdb Merge pull request #4840 from rmcgirr83/ticket_15237
[ticket/15237] Fix unguarded includes to functions_user
2017-06-05 11:56:22 +02:00
Marc Alexander
3f6119c42b Merge pull request #4818 from rxu/ticket/15205
[ticket/15205] Add template events prepending/appending subforum link
2017-06-05 11:22:13 +02:00
Marc Alexander
f0dbfc56d5 Merge pull request #4812 from rxu/ticket/15200-3.1.x
[ticket/15200] Allow extensions using custom templates for help/faq controllers
2017-06-05 11:18:27 +02:00
Marc Alexander
acf9cdba01 Merge pull request #4810 from rxu/ticket/15199
[ticket/15199] Add core event to the messenger send() function
2017-06-05 11:13:35 +02:00
Marc Alexander
a6939fcb8e Merge pull request #4784 from rubencm/ticket/15150
[ticket/15150] Add Jabber SSL context configuration options
2017-06-05 11:00:38 +02:00
Marc Alexander
fb29d79bc1 Merge pull request #4782 from nomind60s/ticket/14498
[ticket/14498] Don't display 'Who is online' members when permission is No
2017-06-05 10:54:31 +02:00
Marc Alexander
b357f78546 Merge pull request #4747 from ErnadoO/ticket/15132
[ticket/15132] Add variable to the 'core.mcp_main_modify_shadow_sql' event
2017-06-03 11:43:06 +02:00
Marc Alexander
58bd7a90a9 Merge pull request #4746 from ErnadoO/ticket/15131
[ticket/15131] Add variable to the 'core.mcp_main_modify_fork_sql' event
2017-06-03 11:37:02 +02:00
Marc Alexander
170613848a [ticket/15219] Add console command for updating hashes to bcrypt
PHPBB3-15219
2017-06-03 11:07:34 +02:00
Erwan Nader
0914123391 [ticket/15132] Add variable to the 'core.mcp_main_modify_shadow_sql' event
PHPBB3-15132
2017-05-31 21:21:04 +02:00
Erwan Nader
e754a51acc [ticket/15131] Add variables to the 'core.mcp_main_modify_fork_sql' event
PHPBB3-15131
2017-05-31 21:04:22 +02:00
Marc Alexander
e3ec1440ef [ticket/15178] Run update again
PHPBB3-15178
2017-05-31 20:06:33 +02:00
Marc Alexander
635f73bc06 Merge pull request #4690 from javiexin/ticket/15081
[ticket/15081] Add acp_ext_details_notice template event
2017-05-30 19:05:44 +02:00
Marc Alexander
3f58b5f9ab Merge pull request #4717 from rmcgirr83/ticket/15107
[ticket/15107] Add message_parser to event
2017-05-25 08:52:41 +02:00
RMcGirr83
7a3e55bdb3 [ticket/15237] Fix unguarded includes to functions_user
https://tracker.phpbb.com/browse/PHPBB3-15237

PHPBB3-15237
2017-05-24 12:58:25 -04:00
Marc Alexander
03c30d4bc6 Merge pull request #4838 from marc1706/ticket/15020
[ticket/15020] Add Event for mcp_topic_postrow_post_subject
2017-05-21 14:20:03 +02:00
Daniel Mota
1a1def5339 [ticket/15020] Add Event for mcp_topic_postrow_post_subject
Add 2 events:
mcp_topic_postrow_post_subject_before
mcp_topic_postrow_post_subject_after

PHPBB3-15020
2017-05-21 13:04:47 +02:00
Marc Alexander
fbc8a4a275 Merge pull request #4837 from marc1706/ticket/14996
[ticket/14996] Add Event for search_results_topic_title_after
2017-05-21 12:49:15 +02:00
Daniel Mota
b63b83a920 [ticket/14996] Add Event for search_results_topic_title_after
PHPBB3-14996
2017-05-21 12:15:43 +02:00
Tristan Darricau
0984dbb3f8 Merge pull request #4832 from marc1706/ticket/15226
[ticket/15226] Add index for latest topics to topics table

* github.com:phpbb/phpbb:
  [ticket/15226] Add index for latest topics to topics table
2017-05-12 17:27:01 +02:00
Marc Alexander
18b29ca074 [ticket/15226] Add index for latest topics to topics table
PHPBB3-15226
2017-05-11 18:30:51 +02:00
Marc Alexander
7034986427 [ticket/15219] Add missing space
PHPBB3-15219
2017-05-05 21:25:29 -04:00
Marc Alexander
18fe3b2833 [ticket/15219] Update hashes to bcrypt with cron
PHPBB3-15219
2017-05-05 20:52:21 -04:00
Marc Alexander
ca9e3eb528 Merge pull request #4815 from kasimi/ticket/15187
[ticket/15187] Add paths of newly enabled extensions to template
2017-05-02 13:16:32 -04:00
rxu
e84459ba67 [ticket/15205] Add template events prepending/appending subforum link
PHPBB3-15205
2017-05-01 18:49:56 +07:00
kasimi
5808c9fae1 [ticket/15187] Use $this->template property 2017-04-29 13:45:20 +02:00
kasimi
bc404a3701 [ticket/15187] Add ACP style after enabling an extension 2017-04-29 11:01:55 +02:00
kasimi
0082dd8039 [ticket/15187] Reverted commits e6b7def & 90a80b7
PHPBB3-15187
2017-04-28 22:20:24 +02:00
kasimi
90a80b7b31 [ticket/15187] Fail gracefully if template service is unavailable 2017-04-28 16:58:08 +02:00
kasimi
e6b7defd38 [ticket/15187] Add paths of newly enabled extensions to template
When enabling an extension its paths aren't added immediately to
the template which results in ACP events not being registered in
the compiled template files.

PHPBB3-15187
2017-04-28 16:32:11 +02:00
Tristan Darricau
7254980753 Merge pull request #4657 from marc1706/ticket/7336
[ticket/7336] Index first post when splitting topics

* github.com:phpbb/phpbb:
  [ticket/7336] Index first post when splitting topics
  [ticket/7336] Add tests for indexing first post after splitting topics
2017-04-28 11:30:14 +02:00
rxu
33a62648d1 [ticket/15200] Allow extensions using custom templates for help/faq controllers
PHPBB3-15200
2017-04-27 16:22:03 +07:00
rxu
f5d49b61bb [ticket/15199] Add core event to the messenger send() function
PHPBB3-15199
2017-04-27 15:06:34 +07:00
Marc Alexander
e53343857a Merge pull request #4674 from senky/ticket/13730
[ticket/13730] Add core.delete_post_end event
2017-04-26 19:57:35 -04:00
Marc Alexander
994c1d79b1 Merge pull request #4672 from senky/ticket/13603
[ticket/13603] Add index_body_stat_blocks_after event
2017-04-26 19:52:35 -04:00
Marc Alexander
4c58dfc19a Merge pull request #4671 from senky/ticket/13605
[ticket/13605] Add core.ucp_pm_compose_predefined_message event
2017-04-26 19:30:47 -04:00
Tristan Darricau
a233f98bbf Merge pull request #4780 from marc1706/ticket/8116
[ticket/8116] Add pagination for IP tables and post info

* github.com:phpbb/phpbb:
  [ticket/8116] Add missing new line
  [ticket/8116] Correctly get other users who posted under IP
  [ticket/8116] Improve code and add tests for helper functions
  [ticket/8116] Add pagination for IP tables on post info
2017-04-21 23:54:18 +02:00
Marc Alexander
e72f6d4236 [ticket/8116] Add missing new line
PHPBB3-8116
2017-04-19 23:35:44 +02:00
Tristan Darricau
ff22d54eae Merge pull request #4670 from senky/ticket/13608
[ticket/13608] Add core.ucp_restore_permissions event

* github.com:phpbb/phpbb:
  [ticket/13608] Add core.ucp_restore_permissions event
2017-04-19 23:08:15 +02:00
Tristan Darricau
5bd497ae54 Merge pull request #4669 from senky/ticket/13609
[ticket/13609] Add core.ucp_switch_permissions event

* github.com:phpbb/phpbb:
  [ticket/13609] Add core.ucp_switch_permissions event
2017-04-19 23:04:11 +02:00
Tristan Darricau
8ae7d2495c Merge pull request #4763 from javiexin/ticket/15146
[ticket/15146] Date profile field validation incorrect

* github.com:phpbb/phpbb:
  [ticket/15146] Date profile field validation incorrect
2017-04-19 22:52:55 +02:00
Tristan Darricau
8d8886e7ba Merge pull request #4798 from javiexin/ticket/13735
[ticket/13735] Fix input type number for Firefox in prosilver

* github.com:phpbb/phpbb:
  [ticket/13735] Fix input type number for Firefox in prosilver
2017-04-19 22:20:14 +02:00
Tristan Darricau
d550f925ab Merge pull request #4781 from nomind60s/ticket/15151
[ticket/15151] ACP Cookie settings add explanatory text

* github.com:phpbb/phpbb:
  [ticket/15151] Use redirected link for consistency
  [ticket/15151] ACP Cookie settings explanatory text
  [ticket/15151] ACP Cookie settings add explanatory text where it was missing
2017-04-19 17:05:47 +02:00
rxu
f178c06b4f [ticket/15186] Fully implement the force_delete_allowed feature
PHPBB3-15186
2017-04-19 21:33:22 +07:00
nomind60s
d0486964ce [ticket/15151] Use redirected link for consistency
Other phpbb.com links used in the core use a redirect rather than a direct link
so change to make the Cookie settings link a redirect also.

PHPBB3-15151
2017-04-19 06:34:16 -06:00
Tristan Darricau
67995e1e09 Merge pull request #4796 from marc1706/ticket/15174
[ticket/15174] Increase timeout for loading indicator

* github.com:phpbb/phpbb:
  [ticket/15174] Split timeout message to extra method and set timeout to 60s
  [ticket/15174] Increase timeout for loading indicator
2017-04-18 23:41:34 +02:00
Tristan Darricau
2d33b6adc6 Merge pull request #4718 from javiexin/ticket/15108
[ticket/15108] Remove duplicate code in request->overwrite

* github.com:phpbb/phpbb:
  [ticket/15108] Remove duplicate code in request->context
2017-04-18 23:10:13 +02:00
Marc Alexander
771be9310d [ticket/8116] Correctly get other users who posted under IP
PHPBB3-8116
2017-04-18 19:33:05 +02:00
javiexin
3c8bdc8fb4 [ticket/13735] Fix input type number for Firefox in prosilver
PHPBB3-13735
2017-04-17 20:04:06 +02:00
Marc Alexander
3dd1f9e707 [ticket/15178] Update dependencies for 3.1.x
PHPBB3-15178
2017-04-17 12:40:09 +02:00
Marc Alexander
8303058ac6 Merge pull request #4689 from javiexin/ticket/15080
[ticket/15080] Save unneeded file loads for extension metadata
2017-04-17 10:19:19 +02:00
Marc Alexander
f645865333 [ticket/15174] Split timeout message to extra method and set timeout to 60s
PHPBB3-15174
2017-04-17 09:59:22 +02:00
Rubén Calvo
4efcfc2477 [ticket/15150] Remove php4 constructor
PHPBB-15150
2017-04-17 03:08:00 +02:00
Marc Alexander
8a624c4dcc [ticket/15174] Increase timeout for loading indicator
The timeout is rather low with 15 seconds until reporting
a timed out request. 25 seconds will be compatible with almost
any setup. A lot more changes would be needed to do proper
timeout checks on slow requests like purging the board cache.

PHPBB3-15174
2017-04-16 21:50:17 +02:00
Marc Alexander
1cbc6dedab Merge pull request #4592 from javiexin/ticket/14938
[ticket/14938] Inconsistency in ext_mgr all_available vs is_available
2017-04-16 15:07:24 +02:00
Marc Alexander
82e1b8fd72 Merge pull request #4581 from javiexin/ticket/14919
[ticket/14919] Do not directly use globals in acp_extensions
2017-04-16 09:49:21 +02:00
Marc Alexander
f9a596c544 Merge pull request #4761 from VSEphpbb/ticket/15142
[ticket/15142] Check extension updates on current branch
2017-04-11 21:26:52 +02:00
Marc Alexander
3bf133c96c Merge pull request #4778 from marc1706/ticket/15139
[ticket/15139] Assigned 'topics_per_page' before template included
2017-04-09 14:09:07 +02:00
Rubén Calvo
d0540eea52 [ticket/15150] Remove empty space
PHPBB3-15150
2017-04-04 14:28:03 +02:00
Rubén Calvo
601ffba0cf [ticket/15150] Use php5 constructor
PHPBB3-15150
2017-04-04 14:25:57 +02:00
Rubén Calvo
eadd5851d0 [ticket/15150] Use stream_* functions instead of socket_* functions
PHPBB3-15150
2017-04-04 14:14:48 +02:00
Rubén Calvo
d44dde390a [ticket/15150] Remove default values for arguments
PHPBB3-15150
2017-04-04 14:08:48 +02:00
Matt Friedman
450402ea42 [ticket/15142] Remove duplicate code
PHPBB3-15142
2017-04-03 11:34:40 -07:00
Rubén Calvo
43731202fd [ticket/15150] Hide errors if function stream_socket_client have been disabled
PHPBB3-15150
2017-04-02 15:20:49 +02:00
Rubén Calvo
4147c38838 [ticket/15150] Hide errors if function stream_socket_client have been disabled
PHPBB3-15150
2017-04-02 15:17:31 +02:00
Rubén Calvo
2f277b6f67 [ticket/15150] Fix template label tag
PHPBB3-15150
2017-03-30 20:26:55 +02:00
Rubén Calvo
32f3ddca70 [ticket/15150] Add Jabber SSL context configuration options
PHPBB3-15150
2017-03-30 10:04:50 +02:00
nomind60s
d4ecb910d8 [ticket/15151] ACP Cookie settings explanatory text
Fixed extraneous whitespace at end of line.

PHPBB3-15151
2017-03-29 14:42:02 -06:00
nomind60s
80b72e3d0b [ticket/14498] Don't display 'Who is online' members when permission is No
When the user permission 'Can view profiles, memberlist and online list' is
set to No (or Never) the user should not be able to see which members are
online in the following places, index page, view topic and view forum.

Before this change, guests and bots would see the list of members who are
online, which doesn't match with the user permission and could create privacy
issues where guests or bots could track when a member was online.

PHPBB3-14498
2017-03-29 13:19:55 -06:00
nomind60s
5bf3e4b3c6 [ticket/15151] ACP Cookie settings add explanatory text where it was missing
Improve the lead section to include a link to the phpBB.com Knowledge Base and
add explanation text for the Cookie domain, Cookie name and Cookie path fields.

PHPBB3-15151
2017-03-29 12:30:09 -06:00
Marc Alexander
e6a0e4caed [ticket/8116] Improve code and add tests for helper functions
PHPBB3-8116
2017-03-29 19:53:58 +02:00
Marc Alexander
2edf7056f0 [ticket/8116] Add pagination for IP tables on post info
Diff from previous patch by nickvergessen.

PHPBB3-8116
2017-03-28 22:10:03 +02:00
upstrocker
f991a99a14 [ticket/15139] Assigned 'topics_per_page' before template included
The element $config['topics_per_page'] was assigned a value after the
template was included, which led to incorrect page number display in the
header when pagination.
Now this var is assigned the correct value before the template is included

PHPBB3-15139
2017-03-28 20:41:38 +02:00
javiexin
71a3f12d2a [ticket/15146] Date profile field validation incorrect
Fix by changing select input field options to match validation range

PHPBB3-15146
2017-03-24 23:55:27 +01:00
Tristan Darricau
827ded82b8 Merge pull request #4757 from VSEphpbb/ticket/15143
[ticket/15143] Fix display of version update in ACP

* github.com:phpbb/phpbb:
  [ticket/15143] Fix display of version update in ACP
2017-03-24 23:18:50 +01:00
Matt Friedman
74054317d2 [ticket/15142] Add ext branch update tests
PHPBB3-15142
2017-03-24 11:47:28 -07:00
Matt Friedman
afddb81acf [ticket/15142] Handle versions for unmatched branches
PHPBB3-15142
2017-03-24 11:47:03 -07:00
Matt Friedman
91ab27ecc9 [ticket/15142] Check extension updates on current branch
PHPBB3-15142
2017-03-24 09:37:14 -07:00
Matt Friedman
45c3cb52e4 [ticket/15143] Fix display of version update in ACP
PHPBB3-15143
2017-03-22 12:14:05 -07:00
Tristan Darricau
927220c873 Merge branch 'mukeshkharita-ticket/14758' into 3.1.x
* mukeshkharita-ticket/14758:
  [ticket/14758] Improve the ACP Parameter wording

fixes #4724
2017-03-19 18:49:26 +01:00
Mukesh Kumar Kharita
dcdb0dcd23 [ticket/14758] Improve the ACP Parameter wording
PHPBB3-14758
2017-03-19 18:48:55 +01:00
Tristan Darricau
6abcfe41e0 Merge pull request #4734 from rxu/ticket/14806
[ticket/14806] Fix ACP test emails authentication failure

* github.com:phpbb/phpbb:
  [ticket/14806] Fix ACP test emails authentication failure
2017-03-19 18:44:41 +01:00
Tristan Darricau
c8670d5324 Merge pull request #4737 from marc1706/ticket/15122
[ticket/15122] Add cache driver for memcached

* marc1706/ticket/15122:
  [ticket/15122] Add cache driver for memcached
2017-03-19 18:14:52 +01:00
Tristan Darricau
0b2369901a Merge pull request #4745 from rxu/ticket/13558
[ticket/13558] Add smtp SSL context configuration options

* rxu/ticket/13558:
  [ticket/13558] Change options prefix and add settings precautions.
  [ticket/13558] Make SSL context specific options more SMTP general
  [ticket/13558] Add smtp SSL context configuration options
2017-03-19 18:04:53 +01:00
Tristan Darricau
d114a3d415 Merge pull request #4749 from marc1706/ticket/14844
[ticket/14844] Add CSS classes for strong and italics text to BBCodes

* marc1706/ticket/14844:
  [ticket/14844] Add CSS classes for strong and italics text to BBCodes
2017-03-19 18:00:31 +01:00
Marc Alexander
948ce2d84f Merge pull request #4578 from javiexin/ticket/14849
[ticket/14849] Add core.acp_extensions_run_action
2017-03-19 16:01:33 +01:00
Marc Alexander
59396771e6 Merge pull request #4703 from javiexin/ticket/15011
[ticket/15011] All errors on metadata throw exceptions
2017-03-19 15:49:33 +01:00
Marc Alexander
051644d663 [ticket/14844] Add CSS classes for strong and italics text to BBCodes
PHPBB3-14844
2017-03-19 15:35:51 +01:00
rxu
22b8632426 [ticket/13558] Change options prefix and add settings precautions.
PHPBB3-13558
2017-03-19 14:32:53 +07:00
Marc Alexander
0f95e607ff Merge pull request #4743 from rubencm/ticket/14820
[ticket/14820] Add style version in ACP
2017-03-19 00:01:30 +01:00
Erwan Nader
4cf998e9df [ticket/15132] Add variable to the 'core.mcp_main_modify_shadow_sql' event
PHPBB3-15132
2017-03-18 18:27:24 +01:00
Erwan Nader
716cff0c97 [ticket/15131] Add variables to the 'core.mcp_main_modify_fork_sql' event
PHPBB3-15131
2017-03-18 17:58:06 +01:00
rxu
2cc9b6a857 [ticket/13558] Make SSL context specific options more SMTP general
PHPBB3-13558
2017-03-18 01:11:32 +07:00
rxu
ac87784a11 [ticket/13558] Add smtp SSL context configuration options
PHPBB3-13558
2017-03-17 01:21:57 +07:00
Rubén Calvo
d10a5b67a1 [ticket/14820] Add style version in ACP
PHPBB3-14820
2017-03-16 00:00:50 +01:00
Marc Alexander
877e15a6e6 [ticket/15122] Add cache driver for memcached
PHPBB3-15122
2017-03-12 15:52:41 +01:00
rxu
4826f7c1d3 [ticket/14806] Fix ACP test emails authentication failure
PHPBB3-14806
2017-03-11 17:06:26 +07:00
Richard McGirr
d7c417de69 [ticket/15107] Add message_parser to event
https://tracker.phpbb.com/browse/PHPBB3-15107

PHPBB3-15107
2017-03-07 06:35:01 -05:00
javiexin
376e85c1d6 Merge branch '3.1.x' into ticket/15081 2017-03-05 15:07:26 +01:00
javiexin
18eaf10e5a [ticket/15108] Remove duplicate code in request->context
PHPBB3-15108
2017-03-02 15:51:51 +01:00
RMcGirr83
63f7fb1ea6 [ticket/15107] Add message_parser to event
https://tracker.phpbb.com/browse/PHPBB3-15107

PHPBB3-15107
2017-03-02 09:29:39 -05:00
Marc Alexander
9267235f30 Merge pull request #4605 from javiexin/ticket/14943
[ticket/14943] Fix template loop access by index
2017-02-23 22:21:16 +01:00
Marc Alexander
4c3ddea09f Merge remote-tracking branch 'origin/ticket/14927' into 3.1.x 2017-02-22 11:08:22 +01:00
Marc Alexander
bc86210db8 [ticket/14927] Put vars on one line
PHPBB3-14927
2017-02-21 22:15:12 +01:00
Marc Alexander
191a776ce6 Merge pull request #4636 from javiexin/ticket/14995
[ticket/14995] Add ACP template events acp_ext_list_*_name_after
2017-02-21 21:32:03 +01:00
Marc Alexander
896249f0e8 Merge pull request #4604 from rxu/ticket/13344
[ticket/13344] Add core event to acp/info/acp_logs.php
2017-02-21 21:10:35 +01:00
david63
bac6dbda5e [ticket/14927] Corrected order in docblock of event & target version
PHPBB3-14927
2017-02-21 20:46:58 +01:00
david63
1b46435734 [ticket/14927] Add items to core.user_add_modify_data
PHPBB3-14927
2017-02-21 20:44:00 +01:00
javiexin
cdca848018 [ticket/14849] Add core.acp_extensions_run_action
Rename event to core.acp_extensions_run_action_before

PHPBB-14849
2017-02-19 22:01:02 +01:00
Marc Alexander
481a592b8d Merge pull request #4598 from javiexin/ticket/14944
[ticket/14944] Add search for template loop indexes by key
2017-02-19 21:47:00 +01:00
javiexin
7f69580df3 Merge branch '3.1.x' into ticket/15011 2017-02-15 23:56:52 +01:00
javiexin
7646280d51 [ticket/15011] All errors on metadata throw exceptions
There is inconsistency in the way error are treated in metadata_manager.
Some method return false on error, others throw exception.  With this,
the usage is homogeneus, and the uses of these are also adapted.
Using same ticket as it is the same issue, solved in a different way.

PHPBB3-15011
2017-02-15 23:51:08 +01:00
Marc Alexander
b567c6e241 Merge pull request #4589 from senky/ticket/14929
[ticket/14929] Add error to core.posting_modify_message_text
2017-02-11 22:03:57 +01:00
Marc Alexander
45199adebd Merge pull request #4523 from senky/ticket/13429
[ticket/13429] Replace @change with @changed in event docblocks
2017-02-11 15:19:47 +01:00
javiexin
fc50fd272b Merge branch '3.1.x' into ticket/15081 2017-02-10 14:41:42 +01:00
javiexin
09f6637597 [ticket/15081] Add acp_ext_details_notice template event
PHPBB3-15081
2017-02-10 14:36:51 +01:00
javiexin
7b2ffaf78c [ticket/14938] Inconsistency in ext_mgr all_available vs is_available
Made is_available much more strict, in line with the checks in all_available
Refactor all_available to use is_available, saving duplicate code.
Further simplify is_available by using metadata_manager.
Make optional the template object on metadata_manager creation.
Fix extension_manager_mock to have config and user components.

PHPBB3-14938
2017-02-10 02:09:18 +01:00
javiexin
7313eb54b4 [ticket/14938] Inconsistency in ext_mgr all_available vs is_available
Made is_available much more strict, in line with the checks in all_available
Refactor all_available to use is_available, saving duplicate code.
Further simplify is_available by using metadata_manager.
Make optional the template object on metadata_manager creation.

PHPBB3-14938
2017-02-10 00:35:23 +01:00
javiexin
abd6bd8154 [ticket/14938] Inconsistency in ext_mgr all_available vs is_available
Made is_available much more strict, in line with the checks in all_available
Refactor all_available to use is_available, saving duplicate code.
Further simplify is_available by using metadata_manager.

PHPBB3-14938
2017-02-09 23:10:29 +01:00
javiexin
e0e59bc6c0 [ticket/15080] Save unneeded file loads for extension metadata
PHPBB3-15080
2017-02-09 22:03:53 +01:00
Jakub Senko
0ea839e595 [ticket/13730] Add core.delete_post_after event
PHPBB3-13730
2017-02-08 13:18:23 +01:00
Tristan Darricau
1470985ff2 Merge pull request #4660 from marc1706/ticket/13250
[ticket/13250] Replace slashes in cache file names

* marc1706/ticket/13250:
  [ticket/13250] Use faster str_replace() instead of preg_replace()
  [ticket/13250] Replace slashes in cache file names
2017-02-05 18:11:16 +01:00
Tristan Darricau
c3896c8b5d Merge pull request #4673 from senky/ticket/13601
[ticket/13601] Add core.acl_clear_prefetch_after event

* senky/ticket/13601:
  [ticket/13601] Add core.acl_clear_prefetch_after event
2017-02-05 18:05:53 +01:00
Tristan Darricau
c006479274 Merge pull request #4681 from VSEphpbb/ticket/15059
[ticket/15059] Preserve code line breaks and scroll overflow

* VSEphpbb/ticket/15059:
  [ticket/15059] Preserve code line breaks and scroll overflow
2017-02-05 17:50:35 +01:00
Matt Friedman
35b7e95098 [ticket/15059] Preserve code line breaks and scroll overflow
PHPBB3-15059
2017-01-30 08:48:42 -08:00
Máté Bartus
5cf1fc62db Merge pull request #4679 from marc1706/ticket/14998
[ticket/14998] Point only to install dir from acp_update
2017-01-29 14:29:44 +01:00
javiexin
849fd9df7d [ticket/14944] Add possibility to search for template loop indexes by key
Adds a new function to the template interface, and implements it in the
context class.  The function returns the ordinal index for a specified key,
with the same structure that the key for alter_block_array.
Reuses same code. Remove unneeded references, do nothing for int keys.
Check out of bounds or wrong blockname errors.  Added tests.
Remove default parameter value.

PHPBB3-14944
2017-01-28 21:34:08 +01:00
Marc Alexander
d81df55963 [ticket/14998] Point only to install dir from acp_update
PHPBB3-14998
2017-01-28 09:16:49 +01:00
Jakub Senko
9f2f541b4a [ticket/13603] Add index_body_stat_blocks_after event
PHPBB3-13603
2017-01-23 15:04:07 +01:00
Jakub Senko
d1df78604b [ticket/13601] Add core.acl_clear_prefetch_after event
PHPBB3-13601
2017-01-23 15:00:59 +01:00
Jakub Senko
15f6d66a61 [ticket/13608] Add core.ucp_restore_permissions event
PHPBB3-13608
2017-01-23 14:54:49 +01:00
Jakub Senko
1d38abdd7e [ticket/13605] Add core.ucp_pm_compose_predefined_message event
PHPBB3-13605
2017-01-23 14:14:36 +01:00
Jakub Senko
927c211d41 [ticket/13609] Add core.ucp_switch_permissions event
PHPBB3-13609
2017-01-23 14:04:02 +01:00
Jakub Senko
779758f219 [ticket/13429] Replace @change with @changed
PHPBB3-13429
2017-01-23 13:33:15 +01:00
Tristan Darricau
fb481f96d3 Merge pull request #4663 from marc1706/ticket/14997
[ticket/14997] Fixing topiclist_row_topic_title_after position

* marc1706/ticket/14997:
  [ticket/14997] Fixing topiclist_row_topic_title_after position
2017-01-22 23:20:59 +01:00
Tristan Darricau
085a839963 Merge pull request #4662 from marc1706/ticket/14968
[ticket/14968] Distinguish between update/upgrade & show upgrade info in ACP index

* marc1706/ticket/14968:
  [ticket/14968] Use earlier version as written in comment
  [ticket/14968] Update docblock and ensure method returns array
  [ticket/14968] Display possible upgrade on acp index and update page
  [ticket/14968] Add method for retrieving updates on current branch
2017-01-22 23:10:22 +01:00
Tristan Darricau
dcadfe092c Merge pull request #4665 from marc1706/ticket/15006
[ticket/15006] Pass inherit settings to form and use correct button

* marc1706/ticket/15006:
  [ticket/15006] Pass inherit settings to form and use correct button
2017-01-22 23:07:46 +01:00
Marc Alexander
59027c94f2 [ticket/15006] Pass inherit settings to form and use correct button
PHPBB3-15006
2017-01-22 19:20:18 +01:00
TarantinoMariachi
612abf391f [ticket/14997] Fixing topiclist_row_topic_title_after position
Fixing position as it is correctly on subsilver, or else it will appear
some problems when using polls or on topics with page numbers.

PHPBB3-14997
2017-01-22 17:41:31 +01:00
Marc Alexander
fbff3b77bd [ticket/13250] Use faster str_replace() instead of preg_replace()
PHPBB3-13250
2017-01-22 17:22:28 +01:00
Marc Alexander
38d0f2892e [ticket/14968] Use earlier version as written in comment
PHPBB3-14968
2017-01-22 17:01:12 +01:00
Marc Alexander
20a4d095de [ticket/14968] Update docblock and ensure method returns array
PHPBB3-14968
2017-01-22 16:58:37 +01:00
Marc Alexander
a620ce0713 [ticket/14968] Display possible upgrade on acp index and update page
PHPBB3-14968
2017-01-22 16:37:20 +01:00
Marc Alexander
0572d6e33a [ticket/14968] Add method for retrieving updates on current branch
PHPBB3-14968
2017-01-22 16:09:51 +01:00
Marc Alexander
6c09910c10 [ticket/13250] Replace slashes in cache file names
PHPBB3-13250
2017-01-21 11:21:38 +01:00
Tristan Darricau
3567f45e3d Merge pull request #4656 from marc1706/ticket/11611
[ticket/11611] Remove no longer used file for setting up git repository

* marc1706/ticket/11611:
  [ticket/11611] Remove no longer used file for setting up git repository
2017-01-20 20:55:15 +01:00
Marc Alexander
02a35baf70 [ticket/7336] Index first post when splitting topics
PHPBB3-7336
2017-01-16 22:29:57 +01:00
Marc Alexander
bad8f0b9bc [ticket/7336] Add tests for indexing first post after splitting topics
PHPBB3-7336
2017-01-16 22:29:04 +01:00
Marc Alexander
0d17b32e25 [ticket/11611] Remove no longer used file for setting up git repository
PHPBB3-11611
2017-01-16 20:57:06 +01:00
Tristan Darricau
0f640ab7af Merge pull request #4651 from marc1706/ticket/15011
[ticket/15011] Output meaningful errors when validating all metadata

* marc1706/ticket/15011:
  [ticket/15011] Output meaningful errors when validating all metadata
2017-01-15 18:15:00 +01:00
Tristan Darricau
766839a60a Merge pull request #4649 from marc1706/ticket/11076
[ticket/11076] State current and minimum required versions in old PHP notice

* marc1706/ticket/11076:
  [ticket/11076] State current and minimum required versions in old PHP notice
2017-01-15 18:11:35 +01:00
Marc Alexander
a0bd23b747 [ticket/15011] Output meaningful errors when validating all metadata
PHPBB3-15011
2017-01-15 17:56:12 +01:00
Marc Alexander
cb44dbc8cb [ticket/11076] State current and minimum required versions in old PHP notice
PHPBB3-11076
2017-01-15 15:32:55 +01:00
Tristan Darricau
c3b7332ea8 Merge pull request #4646 from javiexin/ticket/15011
[ticket/15011] Error not checked on metadata load failure

* javiexin/ticket/15011:
  [ticket/15011] Error not checked on metadata load failure
2017-01-15 11:58:00 +01:00
javiexin
b9189ec325 [ticket/15011] Error not checked on metadata load failure
PHPBB3-15011
2017-01-14 18:08:23 +01:00
Marc Alexander
8af6df3946 Merge pull request #4641 from VSEphpbb/ticket/15003
[ticket/15003] Do not check disabled checkboxes with marklist function
2017-01-14 14:58:48 +01:00
Matt Friedman
366e8583c8 [ticket/15003] Do not check disabled checkboxes with marklist function
PHPBB3-15003
2017-01-13 12:00:31 -08:00
javiexin
74f723e4ec [ticket/14995] Add ACP template events acp_ext_list_*_name_after
PHPBB3-14995
2017-01-12 22:26:56 +01:00
javiexin
d2ad751851 [ticket/14943] Fix template loop access by index
Allows inserting elements in a loop specified as 'outer[3].inner'.
This was coded, but malfunctioning.  Name incorrectly set on insert.
If block was empty, the insertion process should create it.
Checking for out of bounds indexes.

PHPBB3-14943
2017-01-12 21:25:39 +01:00
javiexin
20c03cccdd [ticket/14944] Add possibility to search for template loop indexes by key
Adds a new function to the template interface, and implements it in the
context class.  The function returns the ordinal index for a specified key,
with the same structure that the key for alter_block_array.
Reuses same code. Remove unneeded references, do nothing for int keys.
Check out of bounds or wrong blockname errors.  Added tests.

PHPBB3-14944
2017-01-08 00:00:47 +01:00
javiexin
76b3fbc006 [ticket/14943] Fix template loop access by index
Allows inserting elements in a loop specified as 'outer[3].inner'.
This was coded, but malfunctioning.  Name incorrectly set on insert.
Added more tests.

PHPBB3-14943
2017-01-07 20:12:32 +01:00
javiexin
c40642b827 [ticket/14943] Fix template loop access by index
Allows inserting elements in a loop specified as 'outer[3].inner'.
This was coded, but malfunctioning.  Name incorrectly set on insert.
Added tests.

PHPBB3-14943
2017-01-07 19:57:22 +01:00
Marc Alexander
9d7acd1897 Merge pull request #4613 from rxu/ticket/14958
[ticket/14958] Optimize Twig extension lang() function
2017-01-06 15:29:35 +01:00
Marc Alexander
77b3f36992 Merge pull request #4532 from senky/ticket/14662
[ticket/14662] Add memberlist_team_username_prepend/append
2017-01-04 22:15:37 +01:00
Marc Alexander
a0abb1e10e Merge pull request #4600 from hubaishan/ticket/14549
[ticket/14549] fix mcp page redirect back after topic merge and rised warning
2017-01-04 21:47:21 +01:00
Marc Alexander
2f6993fa81 Merge pull request #4595 from DavidIQ/ticket/14941
[ticket/14941] Apply changes individually for MySQL fulltext search
2017-01-04 20:31:41 +01:00
rxu
49c19a267f [ticket/14958] Optimize Twig extension lang() function
PHPBB3-14958
2017-01-05 00:42:27 +07:00
Marc Alexander
3d93fd40ed Merge pull request #4611 from marc1706/ticket/14838
[icket/14838] Do not query full attachments table in feeds
2017-01-04 17:44:07 +01:00
Marc Alexander
f2c4bf176d Merge pull request #4609 from marc1706/ticket/14957
[ticket/14957] Do not cache database config entries
2017-01-04 17:29:50 +01:00
Marc Alexander
dd89a369f3 [ticket/14838] Remove obsolete overriding method
PHPBB3-14838
2017-01-04 17:16:36 +01:00
Marc Alexander
c0882c1d34 [ticket/14838] Add simple test for fetch_attachments method
PHPBB3-14838
2017-01-03 22:57:14 +01:00
Marc Alexander
7cad25e4cb [ticket/14838] Do not query full attachments table in feeds
The fetch_attachments() will also now throw a runtime exception if a feed
tries to do this nonetheless.

PHPBB3-14838
2017-01-03 22:56:42 +01:00
Marc Alexander
ff411ee81b [ticket/14957] Do not use method return in write context
Fix for PHP 5.3.x compatibility.

PHPBB3-14957
2017-01-03 21:53:14 +01:00
Marc Alexander
14fd750b08 [ticket/14957] Do not cache database config entries
PHPBB3-14957
2017-01-03 21:29:30 +01:00
Tristan Darricau
bc96a9f1f6 Merge pull request #4607 from marc1706/ticket/14953
[ticket/14953] Use ORDER_BY instead of incorrect ORDER for sql query

* marc1706/ticket/14953:
  [ticket/14953] Use ORDER_BY instead of incorrect ORDER for sql query
2017-01-02 22:47:43 +01:00
Marc Alexander
7df7cfff33 [ticket/14953] Use ORDER_BY instead of incorrect ORDER for sql query
PHPBB3-14953
2017-01-02 22:39:40 +01:00
javiexin
45ea013b11 [ticket/14943] Fix template loop access by index
Allows inserting elements in a loop specified as 'outer[3].inner'.
This was coded, but malfunctioning.  Name incorrectly set on insert.

PHPBB3-14943
2017-01-01 21:22:29 +01:00
rxu
3e5e8fd0e3 [ticket/13344] Add core event to acp/info/acp_logs.php
PHPBB3-13344
2017-01-01 23:38:01 +07:00
javiexin
9658ecae8b [ticket/14938] Inconsistency in ext_mgr all_available vs is_available
Made is_available much more strict, in line with the checks in all_available
Refactor all_available to use is_available, saving duplicate code.

PHPBB3-14938
2016-12-30 21:50:04 +01:00
javiexin
d6771d6a7f [ticket/14849] Add core.acp_extensions_run_action
Moved the event to a slightly modified position.
Added an extra variable to the event.
Additional event to be run after the execution of the action in ACP.
Added a new action to allow for extension execution control.

PHPBB-14849
2016-12-30 21:43:15 +01:00
javiexin
c656bd60ef [ticket/14944] Add possibility to search for template loop indexes by key
Adds a new function to the template interface, and implements it in the
context class.  The function returns the ordinal index for a specified key,
with the same structure that the key for alter_block_array.
Reuses same code. Remove unneeded references, do nothing for int keys.

PHPBB3-14944
2016-12-30 18:03:09 +01:00
Tristan Darricau
4139e4f2b5 Merge pull request #4593 from javiexin/ticket/14940
[ticket/14940] Add ACP template event acp_ext_details_end
2016-12-30 10:21:00 +01:00
Tristan Darricau
3489780faa Merge pull request #4597 from javiexin/ticket/14943
[ticket/14943] Fix template loop access by index
2016-12-30 10:04:13 +01:00
hubaishan
40bc4ac484 [ticket/14549] Correcting $redirect var to avoid the bug
by this correct $redirect will go to clean mcp page after merge

PHPBB3-14549
2016-12-29 13:11:19 +03:00
Marc Alexander
3ccaac488b Merge pull request #4531 from senky/ticket/14817
[ticket/14817] Add core.send_file_to_browser_before
2016-12-28 22:19:12 +01:00
Marc Alexander
19b018ece0 Merge pull request #4528 from senky/ticket/14468
[ticket/14468] Add forum_id to core.viewforum_modify_topics_data
2016-12-28 22:15:21 +01:00
Marc Alexander
54e31efcbc Merge pull request #4525 from senky/ticket/14119
[ticket/14119] Add core.user_unban
2016-12-28 22:11:45 +01:00
javiexin
cff57f9076 [ticket/14944] Add possibility to search for template loop indexes by key
Adds a new function to the template interface, and implements it in the
context class.  The function returns the ordinal index for a specified key,
with the same structure that the key for alter_block_array.
Reuses same code.

PHPBB3-14944
2016-12-28 12:55:26 +01:00
javiexin
d9991bdaf1 [ticket/14943] Fix template loop access by index
Allows inserting elements in a loop specified as 'outer[3].inner'.
This was coded, but malfunctioning.

PHPBB3-14943
2016-12-28 12:37:53 +01:00
David Colón
0fc1de279e [ticket/14941] Apply changes individually for MySQL fulltext search 2016-12-27 14:06:23 -05:00
javiexin
87f82c404e [ticket/14940] Add ACP template event acp_ext_details_end
PHPBB3-14940
2016-12-27 02:07:46 +01:00
javiexin
efc2b46303 [ticket/14938] Inconsistency in ext_mgr all_available vs is_available
Made is_available much more strict, in line with the checks in all_available

PHPBB3-14938
2016-12-26 21:07:31 +01:00
Jakub Senko
fbcbd79d79 [ticket/14929] Add error to core.posting_modify_message_text
PHPBB3-14929
2016-12-26 13:32:31 +01:00
Marc Alexander
97a0f49be4 Merge pull request #4590 from marc1706/ticket/14923
[ticket/14923] Make sure start for queries is always set in migrations
2016-12-25 15:52:33 +01:00
javiexin
21803dc99b [ticket/14919] Do not directly use globals in acp_extensions
Declare all used variables (u_action, tpl_name, page_title). Fix typo.

PHPBB3-14919
2016-12-25 14:34:52 +01:00
Marc Alexander
c127591d25 Merge pull request #4544 from dsinn/ticket/14882
[ticket/14882] Add core event to MCP after move post sync
2016-12-25 11:57:52 +01:00
Marc Alexander
9e6207add3 [ticket/14923] Make sure start for queries is always set in migrations
PHPBB3-14923
2016-12-25 11:51:38 +01:00
Daniel Sinn
aa84ea8e5d [ticket/14882] Correct type of topic_id for function_admin's move_posts events
PHPBB3-14882
2016-12-20 16:46:50 -05:00
Marc Alexander
2d742beb92 Merge pull request #4580 from javiexin/ticket/14918
[ticket/14918] Simplify access to extension version metadata information
2016-12-20 20:27:34 +01:00
javiexin
84d2d767b9 [ticket/14919] Do not directly use globals in acp_extensions
Declare all used variables (u_action, tpl_name, page_title).

PHPBB3-14919
2016-12-19 15:51:43 +01:00
Jakub Senko
5f6fa321ef [ticket/14817] Add core.send_file_to_browser_before
PHPBB3-14817
2016-12-18 21:19:31 +01:00
Jakub Senko
cc42c09a95 [ticket/14662] Add memberlist_team_username_prepend/append
PHPBB3-14662
2016-12-18 21:15:36 +01:00
Marc Alexander
ea51dc25c1 Merge pull request #4538 from senky/ticket/14874
[ticket/14874] Increase size of emotion
2016-12-18 21:10:20 +01:00
Marc Alexander
0f000aff0d Merge pull request #4536 from senky/ticket/13845
[ticket/13845] Add core.ucp_profile_avatar_sql
2016-12-18 21:07:19 +01:00
Marc Alexander
445a8be895 Merge pull request #4535 from senky/ticket/14331
[ticket/14331] Add core.get_user_rank_after
2016-12-18 21:01:14 +01:00
Marc Alexander
956c7186ec Merge pull request #4534 from senky/ticket/14522
[ticket/14522] Add ucp_register_buttons_before
2016-12-18 20:49:53 +01:00
Marc Alexander
47e7cd7194 Merge pull request #4533 from senky/ticket/14524
[ticket/14524] Add core.ucp_register_requests_after
2016-12-18 20:47:41 +01:00
Marc Alexander
48659c2ce1 Merge pull request #4586 from Crizz0/ticket/14770
[ticket/14770] Reduce plupload resize quality
2016-12-18 20:40:42 +01:00
Máté Bartus
aa6c2fae5c Merge pull request #4587 from marc1706/ticket/14922
[ticket/14922] Make sure to pass hidden input on ajax form submissions
2016-12-18 19:06:56 +01:00
Marc Alexander
0e68c35cfd Merge pull request #4577 from Crizz0/ticket/14877
[ticket/14877] Replaces "mono" with "monospace" to avoid bad behaviour
2016-12-18 16:22:54 +01:00
Crizzo
71f82f2615 [ticket/14770] Decreases quality to 85, changes test to 85, too
PHPBB3-14770
2016-12-18 15:31:58 +01:00
Marc Alexander
573507e6a5 [ticket/14922] Make sure to pass hidden input on ajax form submissions
PHPBB3-14922
2016-12-18 15:18:52 +01:00
Crizzo
853362ddad [ticket/14770] Reduce plupload resize quality
PHPBB3-14770
2016-12-18 14:12:03 +01:00
Jakub Senko
ea73920261 [ticket/14468] Add forum_id to core.viewforum_modify_topics_data
PHPBB3-14468
2016-12-18 09:39:00 +01:00
Marc Alexander
b6ea338309 Merge pull request #4529 from senky/ticket/14520
[ticket/14520] Add ucp_pm_viewmessage_options_before
2016-12-17 23:38:56 +01:00
javiexin
b20d98a229 [ticket/14919] Do not directly use globals in acp_extensions
PHPBB3-14919
2016-12-17 22:27:44 +01:00
Jakub Senko
a03cec5b8d [ticket/14119] Add core.user_unban
PHPBB3-14119
2016-12-17 21:56:23 +01:00
Marc Alexander
fadec0d2b9 Merge pull request #4527 from senky/ticket/14390
[ticket/14390] Add ucp_main_front_user_activity_append/prepend
2016-12-17 16:40:17 +01:00
Marc Alexander
3c223b3a5d Merge pull request #4526 from senky/ticket/14239
[ticket/14239] Add core.ucp_remind_modify_select_sql
2016-12-17 16:20:29 +01:00
Marc Alexander
daee389e53 Merge pull request #4518 from senky/ticket/14870
[ticket/14870] Add events to ucp_pm_viewfolder:get_pm_from
2016-12-17 15:55:24 +01:00
javiexin
aad13389ce [ticket/14849] Add core.acp_extensions_run_action_after
Additional event to be run after the execution of the action in ACP.
Adding missing var as input to event.

PHPBB-14849
2016-12-16 20:40:28 +01:00
javiexin
620d033e06 [ticket/14849] Add core.acp_extensions_run_action_after
Additional event to be run after the execution of the action in ACP

PHPBB-14849
2016-12-16 15:05:22 +01:00
javiexin
fe79705e99 [ticket/14918] Simplify access to extension version metadata information
PHPBB3-14918
2016-12-16 13:46:42 +01:00
Jakub Senko
90b7d1fbda [ticket/14870] Add events to ucp_pm_viewfolder:get_pm_from
PHPBB3-14870
2016-12-16 12:23:21 +01:00
Jakub Senko
df96351244 [ticket/14239] Add core.ucp_remind_modify_select_sql
PHPBB3-14239
2016-12-13 11:26:45 +01:00
Marc Alexander
5235e6de53 Merge pull request #4520 from senky/ticket/14868
[ticket/14868] Add mcp_forum_actions_options template event
2016-12-12 22:07:59 +01:00
Jakub Senko
7e2d544016 [ticket/14874] Increase size of emotion
PHPBB3-14874
2016-12-12 19:44:41 +01:00
javiexin
aae6341989 [ticket/14849] Add core.acp_extensions_run_action
Moved the event to a slightly modified position to perform common
checks before calling the event, added an extra variable to allow
execution control, honor the extension modified value of u_action
(if any)

PHPBB-14849
2016-12-11 21:15:30 +01:00
Tristan Darricau
8eda17f430 Merge pull request #4567 from javiexin/ticket/14887
[ticket/14887] ACP profile step one lang specific event

* javiexin/ticket/14887:
  [ticket/14887] ACP profile step one lang specific event
2016-12-11 20:43:37 +01:00
Tristan Darricau
230e737790 Merge pull request #4558 from javiexin/ticket/14889
[ticket/14889] Missing method in profile fields type interface

* javiexin/ticket/14889:
  [ticket/14889] Missing method in profile fields type interface
2016-12-11 20:41:39 +01:00
Tristan Darricau
08d169c109 Merge pull request #4561 from rxu/ticket/14893
[ticket/14893] Fix undefined variable on reporting PM notification

* rxu/ticket/14893:
  [ticket/14893] Fix undefined variable on reporting PM notification
2016-12-11 20:28:21 +01:00
Tristan Darricau
e40afd8cd1 Merge pull request #4572 from javiexin/ticket/14855
[ticket/14855] Update notification and PM alert bubbles

* javiexin/ticket/14855:
  [ticket/14855] Update notification and PM alert bubbles
  [ticket/14855] Update notification and PM alert bubbles
  [ticket/14855] Update notification and PM alert bubbles
2016-12-11 20:11:17 +01:00
Tristan Darricau
ad3b7830b4 Merge pull request #4573 from rxu/ticket/14906
[ticket/14906] Delete redundant sig key in user_cache_data array

* rxu/ticket/14906:
  [ticket/14906] Delete redundant sig key in user_cache_data array
2016-12-11 19:51:53 +01:00
Christian Schnegelberger
3a4f1bc061 [ticket/14877] Replaces "mono" with "monospace" to avoid bad behaviour
PHPBB3-14877
2016-12-11 18:02:20 +01:00
Marc Alexander
96adf7f0d6 Merge pull request #4514 from senky/ticket/14759
[ticket/14759] Add core.mcp_main_modify_shadow_sql event
2016-12-11 15:58:12 +01:00
rxu
7d5d5b0f06 [ticket/14906] Delete redundant sig key in user_cache_data array
PHPBB3-14906
2016-12-11 00:52:32 +07:00
javiexin
daae2147c8 [ticket/14855] Update notification and PM alert bubbles
Alternative implementation without removing notification from
the DOM, but changing the class.  So that style designers
might have more options (show/not show).
Fix tests better.

PHPBB3-14855
2016-12-10 18:09:31 +01:00
Marc Alexander
c084990a68 Merge pull request #4513 from senky/ticket/14760
[ticket/14760] Add core.mcp_main_modify_fork_sql event
2016-12-10 13:37:52 +01:00
javiexin
41b3450f2f [ticket/14855] Update notification and PM alert bubbles
Alternative implementation without removing notification from
the DOM, but changing the class.  So that style designers
might have more options (show/not show).
Fix tests.

PHPBB3-14855
2016-12-10 11:41:11 +01:00
javiexin
959e5fb79d [ticket/14855] Update notification and PM alert bubbles
Alternative implementation without removing notification from
the DOM, but changing the class.  So that style designers
might have more options (show/not show).

PHPBB3-14855
2016-12-10 00:51:41 +01:00
javiexin
76ffd288fe [ticket/14887] ACP profile step one lang specific event
PHPBB3-14887
2016-12-08 12:16:07 +01:00
rxu
800411e514 [ticket/14893] Fix undefined variable on reporting PM notification
PHPBB3-14893
2016-12-07 00:40:21 +07:00
Marc Alexander
3322117c38 Merge pull request #4559 from javiexin/ticket/14890
[ticket/14890] Typo in input validation of profile fields of type string
2016-12-05 19:15:34 +01:00
javiexin
591eff9e78 [ticket/14890] Typo in input validation of profile fields of type string
This bug was introduced by PHPBB3-14272

PHPBB3-14890
2016-12-05 18:35:16 +01:00
javiexin
47e418e50e [ticket/14889] Missing method in profile fields type interface
Completes the profile fields type interface by defining a missing
required method for all implementations of a type.

PHPBB3-14889
2016-12-05 01:07:43 +01:00
Jakub Senko
839987fa19 [ticket/14868] Add mcp_forum_actions_options template event
PHPBB3-14868
2016-12-04 17:24:19 +01:00
Tristan Darricau
533d2b90b8 Merge pull request #4555 from javiexin/ticket/14888
[ticket/14888] Missing check for disabled profile field types

* javiexin/ticket/14888:
  [ticket/14888] Missing check for disabled profile field types
2016-12-04 10:31:29 +01:00
javiexin
99a99c5412 [ticket/14888] Missing check for disabled profile field types
Checks if a profile field type is enabled before using it.

PHPBB3-14888
2016-12-04 04:28:27 +01:00
Marc Alexander
5505f98aad Merge pull request #4524 from senky/ticket/13479
[ticket/13479] Add core.viewtopic_highlight_modify
2016-12-03 16:01:54 +01:00
Marc Alexander
fbe5193359 Merge pull request #4522 from senky/ticket/13149
[ticket/13149] Add core.phpbb_log_get_topic_auth_sql_before
2016-12-03 15:54:09 +01:00
Tristan Darricau
b51247e1da Merge pull request #4541 from marc1706/ticket/9590
[ticket/9590] Submit permissions form in chunks

* marc1706/ticket/9590:
  [ticket/9590] Correctly update submit size and replace all forum_id[]
  [ticket/9590] Further deduplicate code for form data
  [ticket/9590] Preserve selected forums after previous page redirect
  [ticket/9590] Support ajax submit of permissions for specific forums
  [ticket/9590] Correctly set roles and refresh page using POST
  [ticket/9590] Submit permissions form in chunks when using "Apply all"
2016-12-03 13:31:42 +01:00
Marc Alexander
c60caace5d Merge pull request #4552 from nicebb/ticket/13757
[ticket/13757] Properly fix bug with negative PM count
2016-12-02 16:39:50 +01:00
Victor A. Safronov
8f84119743 [ticket/13757] Properly fix bug with negative PM count
The fix from PR #4548 doesn't work as expected because
in phpBB the sql_affectedrows() method always returns
a count of matched rows instead of affected rows.
This commit fixes bug properly.

PHPBB3-13757
2016-12-02 16:54:49 +04:00
Marc Alexander
1ee9cc91d4 Merge pull request #4550 from hanakin/ticket/14881
[Ticket/14881] Add wrapper to jump actions to clear floats
2016-12-02 11:38:50 +01:00
hanakin
e1d2c4c900 [ticket/14881] Fix jumpbox-return link layout
PHPBB3-14881
2016-12-01 17:49:26 +01:00
hanakin
0e53442fd4 [ticket/14881] Add action-bar wrap to jump actions
PHPBB3-14881
2016-12-01 17:45:24 +01:00
Marc Alexander
365489a317 Merge pull request #4548 from nicebb/ticket/13757
[ticket/13757] Prevents the count of unread PMs from being negative
2016-12-01 11:41:17 +01:00
Victor A. Safronov
10753454bf [ticket/13757] Prevents the count of unread PMs from being negative
Sometimes the user_unread_privmsg flag in users table can become negative.
It happens when the unread message is requested by simultaneous concurrent
requests. Both requests will decrement the value of the flag.
This commit prevents updating the flag if the message already marked as read.

PHPBB3-13757
2016-11-30 23:59:36 +04:00
Daniel Sinn
78ff392b64 [ticket/14882] Add core event to MCP after move post sync
PHPBB3-14882
2016-11-29 13:34:28 -05:00
Marc Alexander
a3faf1fefc Merge pull request #4503 from rxu/ticket/14853
[ticket/14853] Add core event to allow modifying PM attachments download auth
2016-11-27 20:49:19 +01:00
Marc Alexander
642bfe9a39 Merge pull request #4512 from senky/ticket/14863
[ticket/14863] Properly treat plural rules in confirmation box title
2016-11-27 20:45:08 +01:00
Marc Alexander
5e36dd3d0b [ticket/9590] Correctly update submit size and replace all forum_id[]
PHPBB3-9590
2016-11-27 00:12:59 +01:00
Marc Alexander
0f46d35f75 [ticket/9590] Further deduplicate code for form data
PHPBB3-9590
2016-11-26 23:56:11 +01:00
Marc Alexander
b01b3b8b94 [ticket/9590] Preserve selected forums after previous page redirect
Also improved the way the forum ID list is generated when clicking
on "Apply all permissions".

PHPBB3-9590
2016-11-26 23:34:54 +01:00
Marc Alexander
997bdc7778 Merge pull request #4540 from nicebb/ticket/14876
[ticket/14876] Allows multibyte strings for exception messages
2016-11-26 16:41:27 +01:00
Marc Alexander
30b3fbb2cf [ticket/9590] Support ajax submit of permissions for specific forums
PHPBB3-9590
2016-11-26 13:28:15 +01:00
Marc Alexander
ff76a3e433 [ticket/9590] Correctly set roles and refresh page using POST
PHPBB3-9590
2016-11-26 12:31:22 +01:00
Marc Alexander
6c98e3b12f [ticket/9590] Submit permissions form in chunks when using "Apply all"
This will add an AJAX call that will submit the permissions form in chunks
of 5 fieldsets when clicking on "Apply all permissions".

PHPBB3-9590
2016-11-26 09:58:47 +01:00
Victor A. Safronov
390a37492d [ticket/14876] Allows multibyte strings for exception messages
All exception messages are sanitized via type_caster::set_var()
which is called with $multibyte = false.
This commit allows to pass multibyte messages as well.

PHPBB3-14876
2016-11-25 19:56:41 +04:00
Tristan Darricau
16620ea3d2 Merge pull request #4483 from marc1706/ticket/14750
[ticket/14750] Remove html5 invalid attributes from attachment file input

* marc1706/ticket/14750:
  [ticket/14750] Remove html5 invalid attributes from attachment file input
2016-11-24 14:12:13 +01:00
Jakub Senko
e9d8425f15 [ticket/13845] Add core.ucp_profile_avatar_sql
PHPBB3-13845
2016-11-21 23:03:21 +01:00
Jakub Senko
4dcd2351ea [ticket/14331] Add core.get_user_rank_after
PHPBB3-14331
2016-11-21 16:51:42 +01:00
Jakub Senko
255368843c [ticket/14522] Add ucp_register_buttons_before
PHPBB3-14522
2016-11-21 16:45:56 +01:00
Jakub Senko
619d323dd1 [ticket/14524] Add core.ucp_register_requests_after
PHPBB3-14524
2016-11-21 16:41:20 +01:00
Jakub Senko
8e3a38e80d [ticket/14520] Add ucp_pm_viewmessage_options_before
PHPBB3-14520
2016-11-20 19:02:06 +01:00
Jakub Senko
34cfa5f885 [ticket/14390] Add ucp_main_front_user_activity_append/prepend
PHPBB3-14390
2016-11-20 18:53:59 +01:00
Jakub Senko
2f1d2e847e [ticket/13429] Fix @change tags without description
PHPBB3-13429
2016-11-20 18:47:19 +01:00
Jakub Senko
2df3703b2a [ticket/13149] Add core.phpbb_log_get_topic_auth_sql_before
PHPBB3-13149
2016-11-20 18:42:36 +01:00
Jakub Senko
a1a3daaca8 [ticket/13479] Add core.viewtopic_highlight_modify
PHPBB3-13479
2016-11-20 18:16:49 +01:00
Jakub Senko
c2836725f9 [ticket/13429] Replace @changed with @change in event docblocks
PHPBB3-13429
2016-11-20 17:58:59 +01:00
Marc Alexander
dbd9c1f242 Merge pull request #4502 from rxu/ticket/14852
[ticket/14852] Add core event to modify email headers
2016-11-20 15:23:16 +01:00
Marc Alexander
d98fd7868b Merge pull request #4511 from senky/ticket/14842
[ticket/14842] Don't display filesize limit if there is none
2016-11-20 13:18:27 +01:00
Marc Alexander
6d58c4a4b5 Merge branch 'ticket/14850' into 3.1.x 2016-11-20 12:57:17 +01:00
Jmz
0d15a95f97 [ticket/14850] Add core.generate_smilies_before
Allows changing root_path of smilies to use CDN for example

PHPBB3-14850
2016-11-20 12:56:12 +01:00
Jmz
6bbc18fa40 [ticket/14850] Add core.smiley_text_root_path
Allows changing root_path of smilies to use CDN for example

PHPBB3-14850
2016-11-20 12:56:11 +01:00
Marc Alexander
16c3b40b4e Merge pull request #4519 from michaelcullum/ticket/14872
[ticket/14872] Remove sizeof/count restriction
2016-11-20 09:46:27 +01:00
Michael Cullum
ad4889be4b [ticket/14872] Remove sizeof/count restriction
PHPBB3-14872
2016-11-19 22:11:09 -05:00
Marc Alexander
34ebbbc7c3 Merge pull request #4497 from senky/ticket/14849
[ticket/14849] Add core.acp_extensions_run_action
2016-11-16 21:56:15 +01:00
Marc Alexander
1ff01d722a Merge pull request #4510 from senky/ticket/14864
[ticket/14864] Set maxlength=64 to dateformat in ACP
2016-11-16 21:53:27 +01:00
Jakub Senko
ba5243ba76 [ticket/14842] Don't display filesize limit if there is none
PHPBB3-14842
2016-11-15 14:22:42 +01:00
Tristan Darricau
8323de331e Merge pull request #4492 from marc1706/ticket/14831
[ticket/14831] Make sure migrations always start with backslash

* marc1706/ticket/14831:
  [ticket/14831] Rename migration and replace preg_replace() with simpler methods
  [ticket/14831] Compare depends_on for migrations and remove prefixless names
  [ticket/14831] Add migration for deduplicating entries and fix typo
  [ticket/14831] Add method for getting valid migration name
  [ticket/14831] Fall back to possible migration names instead of adding prefix
  [ticket/14831] Make sure migrations always start with backslash
2016-11-14 21:22:11 +01:00
Jakub Senko
b80b624551 [ticket/14849] Add core.acp_extensions_run_action
PHPBB3-14849
2016-11-13 22:34:28 +01:00
Marc Alexander
6e6a2c5df8 Merge pull request #4488 from senky/ticket/14825
Add core.auth_oauth_login_after and core.auth_oauth_link_after
2016-11-13 21:27:51 +01:00
Jakub Senko
df0388ccc5 [ticket/14825] Add core.auth_oauth_(login/link)_after
PHPBB3-14825
2016-11-13 18:19:21 +01:00
Jakub Senko
114cfe2c27 [ticket/14760] Add core.mcp_main_modify_fork_sql event
PHPBB3-14760
2016-11-13 18:15:07 +01:00
Jakub Senko
36d4169768 [ticket/14759] Add core.mcp_main_modify_shadow_sql event
PHPBB3-14759
2016-11-13 17:48:53 +01:00
Jakub Senko
260dc5ed7c [ticket/14863] Properly treat plural rules in confirmation box title
PHPBB3-14863
2016-11-13 17:21:41 +01:00
Jakub Senko
f8fb3e0f9f [ticket/14864] Set maxlength=64 to dateformat in ACP
PHPBB3-14864
2016-11-13 15:12:23 +01:00
Marc Alexander
372324cead Merge pull request #4504 from VSEphpbb/ticket/14855
[ticket/14855] Update notification and PM alert bubbles
2016-11-12 19:30:34 +01:00
Marc Alexander
39f5b82bc3 Merge pull request #4505 from JimMH/patch-1
[ticket/14859] Send notifications for PM reports to all users with correct permissions
2016-11-12 19:27:06 +01:00
Matt Friedman
55f7438187 [ticket/14855] Bump font size to 10px
PHPBB3-14855
2016-11-12 09:32:57 -08:00
Marc Alexander
c77798b1a3 Merge pull request #4496 from senky/ticket/14848
[ticket/14848] Add acp_ext_list_disabled/enabled_title_after
2016-11-12 17:14:35 +01:00
Marc Alexander
221cd3eb68 Merge pull request #4495 from senky/ticket/14847
[ticket/14847] Add core.acp_attachments_config_edit_add
2016-11-12 17:08:28 +01:00
Marc Alexander
bc4c82bae5 Merge pull request #4481 from senky/ticket/14819
[ticket/14819] Hide soft-deleted posts in topic review
2016-11-12 16:17:27 +01:00
Marc Alexander
577d669ba7 Merge pull request #4472 from dsinn/ticket/14804
[ticket/14804] Add core event to MCP after merging topics
2016-11-12 13:53:24 +01:00
Marc Alexander
a298ed1a66 Merge pull request #4507 from nickvergessen/ticket-14788
[ticket/14788] Farewell my friendz
2016-11-12 13:47:39 +01:00
Marc Alexander
43ea7168d1 Merge pull request #4506 from lavigor/ticket/14860
[ticket/14860] Broken link on subscriptions page on mobile devices
2016-11-12 13:44:29 +01:00
Joas Schilling
c9ea560c63 [ticket/14788] Farewell
PHPBB3-14788
2016-11-12 12:12:01 +01:00
Matt Friedman
0fd04f2e6f [ticket/14855] CSS updates
PHPBB3-14855
2016-11-11 16:38:46 -08:00
Matt Friedman
74285b4308 [ticket/14855] Update CSS
PHPBB3-14855
2016-11-11 09:32:25 -08:00
lavigor
cdf6464382 [ticket/14860] Broken link on subscriptions page on mobile devices
PHPBB3-14860
2016-11-08 16:50:53 +03:00
Jim Mossing Holsteyn
4533dd9fa0 [ticket/14859] Notifications for PM reports send to users with correct permissions
Tracker ticket (set the ticket ID to your ticket ID):

https://tracker.phpbb.com/browse/PHPBB3-14859

This addresses the problem that notifications of new PM reports were not sent out to moderators that weren't global moderators but did have the permission "Can close/delete PM reports". 

PHPBB3-14859
2016-11-07 16:06:50 +01:00
Matt Friedman
9b1e2e523c [ticket/14855] Update the comments
PHPBB3-14855
2016-11-06 16:12:39 -08:00
Matt Friedman
0e114f91f4 [ticket/14855] Remove notification bubble on mark all read
PHPBB3-14855
2016-11-06 10:00:50 -08:00
Tristan Darricau
9be9062df3 Merge pull request #4485 from marc1706/ticket/14795
[ticket/14795] Use maximum topic views instead of adding up views in merge

* github.com:phpbb/phpbb:
  [ticket/14795] Use maximum topic views instead of adding up views in merge
2016-11-06 15:47:20 +01:00
Tristan Darricau
dc32b900c5 Merge pull request #4486 from marc1706/ticket/11483
[ticket/11483] Generate user act key if database entry is empty

* github.com:phpbb/phpbb:
  [ticket/11483] Add tests for generating user act key on force reactivate
  [ticket/11483] Generate user act key if database entry is empty
2016-11-06 15:41:46 +01:00
Marc Alexander
ac36cc25eb [ticket/11483] Add tests for generating user act key on force reactivate
PHPBB3-11483
2016-11-06 11:58:31 +01:00
Matt Friedman
af2bf4ef36 [ticket/14855] Update notification functional test
PHPBB3-14855
2016-11-05 19:41:08 -07:00
Matt Friedman
87209fdd06 [ticket/14855] Fix responsive alert bubble CSS
PHPBB3-14855
2016-11-05 16:29:13 -07:00
Matt Friedman
c259a9b387 [ticket/14855] Update notification and PM alert bubbles
PHPBB3-14855
2016-11-05 16:15:50 -07:00
rxu
ad4fe1799f [ticket/14853] Add core event to allow modifying PM attachments download auth
PHPBB3-14853
2016-11-04 18:42:49 +07:00
rxu
6984f17f62 [ticket/14852] Add core event to modify email headers
PHPBB3-14852
2016-11-04 18:23:09 +07:00
Jakub Senko
2f6a258175 [ticket/14848] Add acp_ext_list_disabled/enabled_title_after
PHPBB3-14848
2016-11-02 10:03:11 +01:00
Jakub Senko
552691efbf [ticket/14847] Add core.acp_attachments_config_edit_add
PHPBB3-14847
2016-11-02 09:46:36 +01:00
Marc Alexander
85898d3d2c Merge pull request #4489 from rxu/ticket/14830
[ticket/14830] Fix FORM_INVALID error during some ACP setting operations
2016-10-28 19:36:49 +02:00
Marc Alexander
466bdee8e6 [ticket/14823] Move check_form_key() inside actual save data step
PHPBB3-14823
2016-10-28 21:37:00 +07:00
javiexin
10f430f393 Merge branch '3.1.x' of https://github.com/javiexin/phpbb into 3.1.x 2016-10-26 04:28:55 +02:00
Marc Alexander
ffc6623dd4 [ticket/14831] Rename migration and replace preg_replace() with simpler methods
PHPBB3-14831
2016-10-25 20:25:57 +02:00
Tristan Darricau
e3a85ff0a7 Merge pull request #4487 from gmixo/patch-2
[ticket/14818] Optimize generate_board_url function

* gmixo/patch-2:
  [ticket/14818] Optimize generate_board_url function
2016-10-24 23:08:06 +02:00
Tristan Darricau
163292bc11 Merge pull request #4491 from rxu/ticket/14831
[ticket/14831] Fix extension modules installation issues

* rxu/ticket/14831:
  [ticket/14831] Optimize code construction
  [ticket/14831] Add more tests against UCP modules
  [ticket/14831] Add more tests, better name for $e placeholder
  [ticket/14831] Do not throw exception on the module existence checking
  [ticket/14831] Fix module migrator tool
2016-10-24 22:24:23 +02:00
rxu
a41b16d06a [ticket/14830] Fix FORM_INVALID error on cpf settings changing
PHPBB3-14830
2016-10-24 23:22:00 +07:00
Marc Alexander
cac8ac8242 Merge pull request #4477 from rxu/ticket/14808
[ticket/14808] Add template event overall_header_searchbox_after
2016-10-24 18:21:14 +02:00
Marc Alexander
6f8c0df1c6 [ticket/14831] Compare depends_on for migrations and remove prefixless names
PHPBB3-14831
2016-10-23 22:17:19 +02:00
Marc Alexander
c891277996 [ticket/14831] Add migration for deduplicating entries and fix typo
PHPBB3-14831
2016-10-23 22:00:02 +02:00
rxu
cefbd39b82 [ticket/14830] Fix tests
PHPBB3-14830
2016-10-24 01:54:40 +07:00
rxu
77f1bac64b [ticket/14831] Optimize code construction
PHPBB3-14831
2016-10-24 01:41:24 +07:00
rxu
849cd74700 [ticket/14831] Add more tests against UCP modules
PHPBB3-14831
2016-10-23 23:33:03 +07:00
rxu
51ef1ae346 [ticket/14831] Add more tests, better name for $e placeholder
PHPBB3-14831
2016-10-23 22:44:47 +07:00
rxu
a02b124dd0 [ticket/14831] Do not throw exception on the module existence checking
PHPBB3-14831
2016-10-23 21:58:29 +07:00
Marc Alexander
3cb09358fe Merge pull request #4490 from kasimi/ticket/14827
[ticket/14827] Fix adding multiple form keys
2016-10-23 11:48:53 +02:00
Marc Alexander
9f2867b115 [ticket/14831] Add method for getting valid migration name
PHPBB3-14831
2016-10-23 11:37:10 +02:00
Marc Alexander
2059d57c04 [ticket/14831] Fall back to possible migration names instead of adding prefix
Instead of just adding the backslash as prefix if needed, this will take care
of falling back to any possible migration with or without backslash no matter
how the mgiration was saved in the database or called in the migrations file.
This will result in a more robust migrator in regards to naming the migrations
and previously run migrations.

PHPBB3-14831
2016-10-23 10:28:22 +02:00
rxu
0cc0920734 [ticket/14831] Fix module migrator tool
PHPBB3-14831
2016-10-23 00:57:37 +07:00
Marc Alexander
8b8f693d00 [ticket/14831] Make sure migrations always start with backslash
The migration system expects every migration to start with a backslash.
If depends on definitions do not supply that leading backslash, we should
make sure it's added manually before calling the depends on migration.

PHPBB3-14831
2016-10-22 19:19:36 +02:00
rxu
8afa9fdf28 [ticket/14830] Fix FORM_INVALID error during AСP search index deletion
PHPBB3-14830
2016-10-21 01:23:45 +07:00
rxu
244ff0f969 [ticket/14830] Fix ACP search control functional tests
PHPBB3-14830
2016-10-21 01:23:45 +07:00
rxu
eca10dc08f [ticket/14830] Fix FORM_INVALID error on search backend changing
PHPBB3-14830
2016-10-21 01:23:44 +07:00
rxu
8e54c9ef8b [ticket/14830] Fix link hash checking case
PHPBB3-14830
2016-10-21 01:23:43 +07:00
rxu
832a87b924 [ticket/14830] Fix FORM_INVALID error during AXP search index creation/deletion
PHPBB3-14830
2016-10-21 01:23:43 +07:00
Máté Bartus
05d0879795 Merge pull request #4482 from marc1706/ticket/14821
[ticket/14821] Replace escaped strong tags with actual tags
2016-10-20 18:33:48 +02:00
kasimi
f02afe58bc [ticket/14827] Possibility to add multiple form keys
PHPBB3-14827
2016-10-19 22:42:52 +02:00
Marc Alexander
d98a1c4bc4 [ticket/14821] Simplify regex for converting <strong> tags back to HTML
PHPBB3-14821
2016-10-18 22:07:54 +02:00
MIkhail Gulyaev
868d55913d [ticket/14818] Optimize generate_board_url function
if $config['force_server_vars'] no need to calculate $request
2016-10-17 12:54:08 +07:00
Marc Alexander
20148e4d06 [ticket/11483] Generate user act key if database entry is empty
The force reactivation action in the ACP will no longer overwrite the
generated activation key in case the key stored in the database is empty.
It will also save the generated key back to the database to actually allow
the activation by the user.

PHPBB3-11483
2016-10-16 11:16:06 +02:00
Marc Alexander
fce30d1d91 [ticket/14795] Use maximum topic views instead of adding up views in merge
Merging topics should not result in topic views being added up but rather in
the highest topic view showing up for the merged topic.

PHPBB3-14795
2016-10-16 10:55:00 +02:00
Marc Alexander
2406fe2e5e [ticket/14750] Remove html5 invalid attributes from attachment file input
PHPBB3-14750
2016-10-15 09:00:36 +02:00
Marc Alexander
1f0c616974 [ticket/14821] Replace escaped strong tags with actual tags
Everything else will still be escaped. This will however add back support for
bold text in exception messages.

PHPBB3-14821
2016-10-14 22:47:43 +02:00
Jakub Senko
4dfadfc97f [ticket/14819] Hide soft-deleted posts in topic review
PHPBB3-14819
2016-10-13 14:28:29 +02:00
Marc Alexander
1dd0ceabf6 Merge branch 'prep-release-3.1.10' into 3.1.x 2016-10-12 21:40:59 +02:00
rxu
98a6133c1e [ticket/14808] Add template event overall_header_searchbox_after
PHPBB3-14808
2016-10-04 16:58:51 +07:00
Tristan Darricau
1ad64f89b8 Merge pull request #4471 from dsinn/ticket/14802
[ticket/14802] Empty/blank lines should not be additional poll options

* dsinn/ticket/14802:
  [ticket/14802] Add test for empty/blank lines in poll options
  [ticket/14802] Empty/blank lines should not be additional poll options
2016-10-03 20:05:49 +02:00
Daniel Sinn
bf8ee698f9 [ticket/14802] Add test for empty/blank lines in poll options
PHPBB3-14802
2016-10-03 12:24:02 -04:00
Daniel Sinn
59b52d6312 [ticket/14804] Merge remote-tracking branch 'upstream/3.1.x' into ticket/14804
PHPBB3-14804
2016-10-03 10:24:30 -04:00
Marc Alexander
40354f1f90 Merge pull request #27 from phpbb/ticket/security-196
[ticket/security-196] Escapes the exception messages before displaying them
2016-10-02 22:25:30 +01:00
Marc Alexander
71e632b9f0 [prep-release-3.1.10] Add 3.1.10 migration 2016-10-02 21:07:18 +01:00
Marc Alexander
cb226f83be [prep-release-3.1.10] Update version numbers for 3.1.10 2016-10-02 21:06:56 +01:00
Tristan Darricau
85e4566223 Merge pull request #4467 from Senky/ticket/14786
[ticket/14786] Add mcp_forum_actions_before/after events

* Senky/ticket/14786:
  [ticket/14786] Add mcp_forum_actions_before/after events
2016-10-02 18:11:48 +02:00
Tristan Darricau
55a0570567 Merge pull request #4469 from rxu/ticket/14787-2
[ticket/14787] Add 1 more parameter to the core.search_modify_url_parameters

* rxu/ticket/14787-2:
  [ticket/14787] Add 1 more parameter to the core.search_modify_url_parameters
2016-10-02 18:08:09 +02:00
Tristan Darricau
b4e673acc1 Merge pull request #4470 from rxu/ticket/14801
[ticket/14801] Highlighting utf8 strings in search results

* rxu/ticket/14801:
  [ticket/14801] Highlighting utf8 strings in search results
2016-10-02 17:43:55 +02:00
Tristan Darricau
cd4190a72d Merge pull request #4474 from marc1706/ticket/14789
[ticket/14789] Move form key checks to where they actually do something

* marc1706/ticket/14789:
  [ticket/14789] Remove obsolete check_form_key() and add missing hashes
  [ticket/14789] Move form key checks to where they actually do something
2016-10-02 17:18:22 +02:00
Tristan Darricau
6b798d02fb Merge branch 'prep-release-3.1.10' into 3.1.x
* prep-release-3.1.10:
  [ticket/14789] Remove obsolete check_form_key() and add missing hashes
  [ticket/14789] Move form key checks to where they actually do something
2016-10-02 17:18:22 +02:00
Tristan Darricau
cdaed8dabf Merge pull request #4475 from marc1706/ticket/14805
[ticket/14805] Ignore platform requirements while building packages

* marc1706/ticket/14805:
  [ticket/14805] Ignore platform requirements while building packages
  [ticket/8301] Add log_time index
2016-10-02 17:14:49 +02:00
Tristan Darricau
165e0edb2a Merge branch 'prep-release-3.1.10' into 3.1.x
* prep-release-3.1.10:
  [ticket/14805] Ignore platform requirements while building packages
2016-10-02 17:14:49 +02:00
Marc Alexander
5a6933fee7 Merge pull request #4466 from Senky/ticket/14795
[ticket/14795] Merge topic views when merging topics
2016-10-01 16:58:02 +01:00
Marc Alexander
047c7375a5 [ticket/14805] Ignore platform requirements while building packages
PHPBB3-14805
2016-10-01 16:46:48 +01:00
Marc Alexander
f1eda6868f Merge pull request #4465 from Senky/ticket/8301
[ticket/8301] Add log_time index
2016-10-01 11:07:40 +01:00
Marc Alexander
4e5f29a21b [ticket/14789] Remove obsolete check_form_key() and add missing hashes
PHPBB3-14789
2016-09-30 23:26:04 +01:00
Marc Alexander
88d7c4fe57 [ticket/14789] Move form key checks to where they actually do something
PHPBB3-14789
2016-09-30 22:32:54 +01:00
Daniel Sinn
32d569c594 [ticket/14804] Fix undefined $topic_data after trying to port 3.2 changes to 3.1
PHPBB3-14804
2016-09-30 16:34:11 -04:00
Daniel Sinn
c6383d3f89 [ticket/14804] Rename event to mcp_forum_merge_topics_after; update @since
PHPBB3-14804
2016-09-30 15:58:10 -04:00
Daniel Sinn
1d25c80a9c [ticket/14804] Add core event to MCP after merging topics
Renamed $topic_data and defined $to_topic_data in order to avoid ambiguity
and to stop overwriting a variable.

PHPBB3-14804
2016-09-30 15:23:17 -04:00
Daniel Sinn
0b3951cb81 [ticket/14802] Empty/blank lines should not be additional poll options
PHPBB3-14802
2016-09-29 14:43:36 -04:00
rxu
ae76bfc99e [ticket/14801] Highlighting utf8 strings in search results
PHPBB3-14801
2016-09-29 17:18:58 +07:00
rxu
cc62b68243 [ticket/14787] Add 1 more parameter to the core.search_modify_url_parameters
PHPBB3-14787
2016-09-29 01:59:16 +07:00
Tristan Darricau
6972d06f59 Merge branch 'prep-release-3.1.10' into 3.1.x
* prep-release-3.1.10:
  [ticket/14799] purge_notifications() should not leave open transactions.
2016-09-28 20:53:10 +02:00
Tristan Darricau
2fd2fb94cf Merge pull request #4468 from markshawtoronto/ticket/14799
[ticket/14799] purge_notifications() should not leave open transactions.

* markshawtoronto/ticket/14799:
  [ticket/14799] purge_notifications() should not leave open transactions.
  [3.1.x] Increase version for 3.1.11 development
2016-09-28 20:50:06 +02:00
markshawtoronto
06c980f1ec [ticket/14799] purge_notifications() should not leave open transactions.
When running purge_notifications(), if a notification type does not exist
then a db transaction is started but never completed.

On an error in get_notification_type_id(), end the transaction.

PHPBB3-14799
2016-09-27 11:45:23 -04:00
Jakub Senko
f66ca6a9cc [ticket/14786] Add mcp_forum_actions_before/after events
PHPBB3-14786
2016-09-26 11:13:11 +02:00
Jakub Senko
ec24f739e8 [ticket/8301] Add log_time index
PHPBB3-8301
2016-09-25 19:51:37 +02:00
Jakub Senko
c588332aa5 [ticket/14795] Merge topic views when merging topics
PHPBB3-14795
2016-09-25 19:49:01 +02:00
Marc Alexander
51d830a6d3 [3.1.x] Increase version for 3.1.11 development 2016-09-24 21:39:47 +02:00
Marc Alexander
32d9efff47 Merge branch 'prep-release-3.1.10' into 3.1.x 2016-09-24 21:35:42 +02:00
Marc Alexander
7d73d1ff83 [prep-release-3.1.10] Add changelog for 3.1.10-RC1 2016-09-24 14:57:23 +02:00
Marc Alexander
c958ba13e8 [prep-release-3.1.10] Add migration for 3.1.10-RC1 2016-09-24 14:50:46 +02:00
Marc Alexander
2f17757f4e [prep-release-3.1.10] Update version to 3.1.10-RC1 2016-09-24 14:50:46 +02:00
Marc Alexander
b8bbf9db03 Merge pull request #4461 from marc1706/ticket/14785
[ticket/14785] Add template event overall_header_headerbar_after/before
2016-09-24 13:04:21 +02:00
Marc Alexander
4267cc3a43 Merge pull request #4462 from marc1706/ticket/14796
[ticket/14796] Use log_table class member instead of table constant
2016-09-24 11:50:15 +02:00
GerB
90e9d5c462 [ticket/14785] Add template event overall_header_headerbar_after/before
PHPBB3-14785
2016-09-24 11:04:23 +02:00
Tristan Darricau
cdd56c0505 Merge pull request #4394 from marc1706/ticket/14484
[ticket/14484] Add possibility to use extensions in UI tests

* marc1706/ticket/14484:
  [ticket/14484] Properly enable extensions in UI tests
  [ticket/14484] Move facebook/webdriver back to tests dir composer.json
  [ticket/14484] Move facebook webdriver to main composer.json
2016-09-24 10:31:06 +02:00
Marc Alexander
18f9c9f6e2 Merge pull request #3527 from Elsensee/ticket/13709
[ticket/13709] Add fallback for email templates used by extensions
2016-09-24 10:28:37 +02:00
Forumhulp.com
97040dc6ff [ticket/14796] Use log_table class member instead of table constant
Was still using the old LOG_TABLE constant in the delete method.

PHPBB3-14796
2016-09-24 10:19:12 +02:00
Marc Alexander
931582aad9 Merge pull request #4432 from Senky/ticket/14762
[ticket/14762] Add core event to session.php
2016-09-24 10:02:41 +02:00
Marc Alexander
3910387ee5 Merge pull request #4433 from Senky/ticket/14747
[ticket/14747] Add post_data to core.modify_posting_auth
2016-09-24 09:56:25 +02:00
Marc Alexander
d2f95ef875 Merge pull request #4460 from marc1706/ticket/14784
[ticket/14784] missing rewrite for lighttpd
2016-09-24 09:39:01 +02:00
Tobi Schäfer
537dca0892 [ticket/14784] missing rewrite for lighttpd
PHPBB3-14784
2016-09-24 08:21:27 +02:00
Marc Alexander
2436af94e3 Merge pull request #4392 from ErnadoO/PHPBB3-14592
[ticket/14592] [PHP] core.search_backend_search_after
2016-09-22 21:26:31 +02:00
Marc Alexander
75f57fa407 Merge pull request #4454 from rxu/tcket/14787-1
[ticket/14787] Add more parameters to the core.search_modify_url_parameters
2016-09-22 21:23:55 +02:00
rxu
a078336cb1 [ticket/14787] Add more parameters to the core.search_modify_url_parameters
PHPBB3-14787
2016-09-19 02:48:23 +07:00
Tristan Darricau
4da479d47f Merge pull request #4450 from rxu/ticket/14787
[ticket/14787] Add more parameters to the core.search_modify_url_pameters

* rxu/ticket/14787:
  [ticket/14787] Add more parameters to the core.search_modify_url_parameters
2016-09-18 21:25:14 +02:00
Tristan Darricau
bc08813866 Merge pull request #4452 from marc1706/ticket/14789
[ticket/14789] Further harden ACP link and form checks

* marc1706/ticket/14789:
  [ticket/14789] Add form tokens to tests and uncomment add_form_key
  [ticket/14789] Add link hashes and form tokens to all acp links/buttons
2016-09-18 21:12:19 +02:00
Erwan Nader
6b435cbf13 [ticket/14592] Fix variable type
PHPBB3-14592
2016-09-18 19:55:00 +02:00
Marc Alexander
72f6241aa2 [ticket/14789] Add form tokens to tests and uncomment add_form_key
PHPBB3-14789
2016-09-18 15:30:25 +02:00
Marc Alexander
585a3ed863 [ticket/14789] Add link hashes and form tokens to all acp links/buttons
This will further harden the ACP security by adding link hashes to links and
form tokens to forms that did not have these yet and result in modified
settings or write action on the filesystem or database. These few links and
forms were still relying on the global ACP protection, mainly due to them
not posing further risks of compromising data. After this change these will
now also be properly protected against tampering.

PHPBB3-14789
2016-09-18 15:29:50 +02:00
Jakub Senko
abb01946bd [ticket/14762] Add core event to session.php
PHPBB3-14762
2016-09-18 13:32:10 +02:00
Tristan Darricau
27e33f39f7 Merge pull request #4451 from marc1706/ticket/14788
[ticket/14788] Update CREDITS.txt

* marc1706/ticket/14788:
  [ticket/14788] Update CREDITS.txt
2016-09-18 13:28:36 +02:00
Marc Alexander
c3578bc3e3 Merge pull request #4442 from rxu/ticket/14781
[ticket/14781] Add core event to the function group_user_attributes()
2016-09-18 13:07:47 +02:00
Marc Alexander
0d3ca3883e [ticket/14788] Update CREDITS.txt
PHPBB3-14788
2016-09-18 12:16:44 +02:00
rxu
a084b07495 [ticket/14787] Add more parameters to the core.search_modify_url_parameters
PHPBB3-14787
2016-09-18 14:02:49 +07:00
Marc Alexander
bf397cb985 Merge pull request #4398 from wesleyfok/ticket/14638-3.1.x
Ticket/14638 3.1.x New UCP hooks for subscriptions
2016-09-17 13:04:32 +02:00
Marc Alexander
73b9327631 Merge pull request #4403 from rxu/ticket/14738
[ticket/14738] Add core events to improve modifying forum lists
2016-09-17 12:58:18 +02:00
Marc Alexander
bd59241110 Merge pull request #4406 from rmcgirr83/ticket/14581
[ticket/14581] Add core events to content_visibility
2016-09-17 08:54:00 +02:00
Marc Alexander
33584f12f0 Merge pull request #4449 from DavidIQ/ticket/14782
[ticket/14782] Don't use 'DISTINCT' when using 'SQL_CALC_FOUND_ROWS'
2016-09-17 00:04:59 +02:00
DavidIQ
2ae08dc3ba [ticket/14782] Don't use 'DISTINCT' when using 'SQL_CALC_FOUND_ROWS' 2016-09-16 17:05:20 -04:00
Andreas Fischer
32ba128ea5 Merge pull request #4444 from DavidIQ/ticket/14782
[ticket/14782] Use the $select variable in "Your Posts" search

* DavidIQ/ticket/14782:
  [ticket/14782] Use the $select variable in "Your Posts" search
2016-09-15 19:30:29 +02:00
Marc Alexander
70aa4407d3 Merge remote-tracking branch 'VSEphpbb/ticket/14783' into 3.1.x 2016-09-14 20:49:13 +02:00
Matt Friedman
5503c09cd5 [ticket/14783] Add template event before custom BBCodes in ACP
PHPBB3-14783
2016-09-14 10:37:27 -07:00
DavidIQ
6d589a8bb9 [ticket/14782] Use the $select variable in "Your Posts" search 2016-09-13 14:10:50 -04:00
rxu
43c52b073b [ticket/14781] Add core event to the function group_user_attributes()
PHPBB3-14781
2016-09-12 13:44:33 +07:00
Marc Alexander
4b8e8df55c Merge pull request #4371 from imkingdavid/ticket/14695
[ticket/14695] Add posting_editor_subject_prepend/append template events
2016-09-11 11:07:48 +02:00
Marc Alexander
dccb5564d2 Merge pull request #4438 from danchr/ticket/12133
[ticket/12133] fix download file names for WebKit-derived browsers
2016-09-09 23:39:20 +02:00
Marc Alexander
857a085496 Merge pull request #4428 from rmcgirr83/ticket/14755
[ticket/14755] Fix max length in mcp topic html file
2016-09-07 21:24:29 +02:00
Dan Villiom Podlaski Christiansen
ce48b4de57 [ticket/12133] fix download file names for WebKit-derived browsers
All browser engines that descend from WebKit declare themselves as
Safari in the user agent, including Chrome. Currently, the code
assumes that any Safari-like browser cannot handle the RFC-compliant
filename syntax. At least for recent versions of Safari, this is no
longer the case, and the legacy syntax results in URI-quoted
filenames. Using the standard syntax works as expected in both Safari
9 and Chrome 45.

The ticket reporting this issue is from January 2014, so we can safely
ignore compatibility: any browser still relying on the previous
behaviour is unlikely to receive security updates.

PHPBB3-12133
2016-09-07 03:17:44 +02:00
Marc Alexander
2efdaaa0e2 Merge pull request #4426 from bantu/ticket/14109
[ticket/14109] Increase MySQL Version for InnoDB FULLTEXT Index to 5.…
2016-09-06 21:50:22 +02:00
Jakub Senko
64178b40b8 [ticket/14747] Add post_data to core.modify_posting_auth
PHPBB3-14747
2016-09-03 11:11:55 +02:00
Tristan Darricau
65921a7891 Merge pull request #4396 from ErnadoO/ticket/14727
[ticket/14727] Event core.search_modify_submit_parameters

* ErnadoO/ticket/14727:
  [ticket/14727] Event core.search_modify_submit_parameters
2016-09-01 16:23:50 +02:00
Marc Alexander
f008708d5c Merge pull request #4377 from rxu/ticket/14703
[ticket/14703] Fix parent module selection for custom extension modules
2016-08-31 21:39:09 +02:00
Tristan Darricau
d737430a03 Merge pull request #4422 from Crizz0/ticket/14673
[ticket/14673] Changes wrong language variable in mcp_forum

* Crizz0/ticket/14673:
  [ticket/14673] Changes wrong language variable in mcp_forum
2016-08-31 19:08:05 +02:00
Richard McGirr
b3e8eb9feb [ticket/14755] Fix subsilver2
PHPBB3-14755
2016-08-31 05:37:06 -04:00
RMcGirr83
bd0244180b [ticket/14755] Fix max length in mcp topic html file
Move posts does not accept a topic number greater than 999999
topic_id set in both posts table and topics table accepts 10 digits

https://tracker.phpbb.com/browse/PHPBB3-14755

PHPBB3-14755
2016-08-30 12:56:10 -04:00
Andreas Fischer
3ee5472a8c [ticket/14109] Increase MySQL Version for InnoDB FULLTEXT Index to 5.6.8.
This is required for proper overall database operation. In previous versions,
InnoDB might error on ALTER statements when multiple FULLTEXT Indexes are
 defined.

PHPBB3-14109
2016-08-28 20:40:10 +01:00
rxu
557f85e7fc [ticket/14703] Improve exception testing
PHPBB3-14703
2016-08-28 21:51:52 +07:00
Marc Alexander
a019a86bfc Merge pull request #4338 from Senky/ticket/14469
Add viewforum_body_topicrow_before template event
2016-08-28 15:53:30 +02:00
Marc Alexander
71a70500ea Merge pull request #4389 from kasimi/ticket/14715-3.1.x
[ticket/14715] Add template events in posting_topic_review & mcp_topic
2016-08-28 15:41:59 +02:00
Marc Alexander
863d65112b Merge pull request #3659 from Elsensee/ticket/12230
[ticket/12230] Disable newly registered group when post limit is set to 0
2016-08-28 00:12:43 +02:00
Crizzo
429ecb938c [ticket/14673] Changes wrong language variable in mcp_forum
PHPBB3-14673
2016-08-22 21:23:01 +02:00
Marc Alexander
a36f96aefa Merge pull request #4415 from Elsensee/ticket/14743
[ticket/14743] Remove PHP7 from travis tests in 3.1.x
2016-08-21 10:06:41 +02:00
Marc Alexander
b14043b276 Merge pull request #4411 from Senky/ticket/12925
[ticket/12925] Pluralize permanent delete checkbox label
2016-08-21 09:51:23 +02:00
Marc Alexander
6bcc372af5 Merge pull request #4419 from Elsensee/ticket/14742
[ticket/14742] Further improvements to migrator
2016-08-21 09:24:19 +02:00
Oliver Schramm
eccb3d6602 [ticket/13709] Add fallback for email templates used by extensions
Also add a fallback to english for the core
like we do it in $user->add_lang()

PHPBB3-13709
2016-08-21 05:21:25 +02:00
Oliver Schramm
773f6d08a5 [ticket/14742] Reset migration_data_state before reverting
PHPBB3-14742
2016-08-20 22:31:08 +02:00
Oliver Schramm
463e8e4b13 [ticket/14742] Change constants to use Symfony values
This is to avoid errors when comparing verbosity levels
in a CLI output handler that is using Symfony's OutputInterface
for example.

PHPBB3-14742
2016-08-20 22:28:29 +02:00
Oliver Schramm
7c99fcf782 [ticket/14742] Pause after each update_data step too
Rewriting process_data_step() to remove the now
useless foreach() loop.

PHPBB3-14742
2016-08-20 22:20:21 +02:00
Oliver Schramm
775d1c855a [ticket/14742] Improve readability of the code
PHPBB3-14742
2016-08-20 22:20:20 +02:00
Oliver Schramm
e050cf5c11 [ticket/14742] Fix comments in migrator
PHPBB3-14742
2016-08-20 03:35:38 +02:00
Oliver Schramm
bb11294b96 [ticket/14743] Remove PHP7 from travis tests
PHPBB3-14743
2016-08-17 17:57:48 +02:00
Marc Alexander
488fd8f54c Merge pull request #4413 from wesleyfok/ticket/14745
[ticket/14745] Removed unneeded HTML ampersand
2016-08-16 21:02:06 +02:00
Wesley Fok
f68e98c064 [ticket/14745] Removed unneeded HTML ampersand
Changed the HTML ampersand entity in U_NOTIFICATION_SETTINGS into a bare
ampersand character.

PHPBB3-14745
2016-08-15 15:20:23 -04:00
Jakub Senko
c016e09ca4 [ticket/12925] Pluralize permanent delete checkbox label
PHPBB3-12925
2016-08-15 18:27:33 +02:00
Marc Alexander
48696b5148 Merge pull request #4409 from Elsensee/ticket/14742
[ticket/14742] Improvements to migrator
2016-08-13 22:57:40 +02:00
Oliver Schramm
263fbe54fc [ticket/14742] Enhance measured time for migrations
PHPBB3-14742
2016-08-12 02:03:52 +02:00
Oliver Schramm
4a92a8efb5 [ticket/14742] Improve verbosity of migrator output
PHPBB3-14742
2016-08-12 02:01:01 +02:00
Oliver Schramm
c12d67cd90 [ticket/14742] Add test for (not) reverting if
PHPBB3-14742
2016-08-11 18:11:39 +02:00
Oliver Schramm
52afa74f4e [ticket/14742] Avoid loop while reverting schema
PHPBB3-14742
2016-08-11 18:00:10 +02:00
Oliver Schramm
b00a39b9ad [ticket/14742] Make $last_run_migration protected
PHPBB3-14742
2016-08-11 17:59:51 +02:00
Oliver Schramm
6078bae7f8 [ticket/14742] Fix schema update
First make it work, then avoid a loop

PHPBB3-14742
2016-08-11 13:31:23 +02:00
Jakub Senko
317f3e848f [ticket/14469] Add viewforum_body_topicrow_before template event
PHPBB3-14469
2016-08-11 10:25:51 +02:00
Oliver Schramm
2ee8bd0c4a [ticket/14742] Add test for reverse_update_data()
PHPBB3-14742
2016-08-11 01:12:43 +02:00
Oliver Schramm
a277f9cf07 [ticket/14742] Small fixes to migrator
PHPBB3-14742
2016-08-11 01:09:11 +02:00
Oliver Schramm
8e1461ca61 [ticket/14742] Avoid loop while reverting data
This combines reverted updata_data and revert_data into a single array.

PHPBB3-14742
2016-08-11 01:09:11 +02:00
Oliver Schramm
9fb649793d [ticket/14742] Pause after each schema change
It is certainly better than running them all at once

PHPBB3-14742
2016-08-11 01:03:23 +02:00
Richard McGirr
b74e811496 [ticket/14581] Add core events to content_visibility
Events added for both changing the content visibility for both posts and topics,
executing right before and after the SQL UPDATE query for setting the
visibillity.

https://tracker.phpbb.com/browse/PHPBB3-14581

PHPBB3-14581
2016-08-10 06:49:49 -04:00
David King
7e1e3e1a5e [ticket/14695] Add posting_editor_subject_append/prepend subsilver2 to events.md
As per request in PR.

PHPBB3-14695
2016-08-09 21:18:59 -04:00
David King
0771eaa732 [ticket/14695] Added posting_editor_subject_append/prepend events to subsilver
As per request in PR.

PHPBB3-14695
2016-08-09 21:16:33 -04:00
David King
1455be2260 [ticket/14695] Put posting_editor_subject_append/prepend events on newlines
As per request in the PR.

PHPBB3-14695
2016-08-09 21:14:03 -04:00
rxu
3bf64de247 [ticket/14738] Add core events to improve modifying forum lists
PHPBB3-14738
2016-08-07 16:10:49 +07:00
Marc Alexander
2dae36e3fb Merge pull request #4400 from Elsensee/ticket/14731
[ticket/14731] Skip composer when exporting old versions
2016-08-04 20:44:33 +02:00
Oliver Schramm
6fd507f60d [ticket/14731] Skip composer when exporting old versions
PHPBB3-14731
2016-08-04 04:29:01 +02:00
Marc Alexander
5330ea0f09 Merge pull request #4324 from Senky/ticket/14516
[ticket/14516] Add memberlist_email_before event
2016-08-03 22:20:48 +02:00
Wesley Fok
3038bf5eaf [ticket/14638] Rollback changes from 3.2.x version
Mistakenly brought in the modified 3.2.x version verbatim instead of diffing
against the 3.1.x version of ucp_main.php. Removed any changes I didn't
explicitly make.

PHPBB3-14638
2016-08-03 13:27:06 -04:00
Wesley Fok
ba13832085 Merge remote-tracking branch 'upstream/3.1.x' into ticket/14638-3.1.x 2016-08-03 13:20:42 -04:00
Wesley Fok
2081a78095 [ticket/14638] New UCP hooks for subscriptions
Adds various event hooks to the Manage subscriptions page of the User
Control Panel. core.ucp_subscribed_post_data allows us to handle
additional post data from the form that unwatches subscriptions.
core.ucp_main_subscribed_forums_modify_query,
core.ucp_main_topiclist_count_modify_query and
core.ucp_main_topiclist_modify_query all modify the queries used to get
the list of subscribed forums and subscribed/bookmarked topics.
core.ucp_main_subscribed_forum_modify_template_vars and
core.ucp_main_topiclist_topic_modify_template_vars modify the template
variable array associated with each subscribed forum and topic row.

This is a backport to 3.1.x of the code in PR #4318.

PHPBB3-14638
2016-08-03 13:18:43 -04:00
Marc Alexander
f68820762b Merge pull request #4397 from Elsensee/ticket/14721
[ticket/14721] Avoid renaming deleted users
2016-08-01 20:42:09 +02:00
Oliver Schramm
f222f8a84a [ticket/14721] Avoid renaming deleted users
PHPBB3-14721
2016-08-01 00:26:47 +02:00
Marc Alexander
d51c67440e [ticket/14484] Properly enable extensions in UI tests
PHPBB3-14484
2016-07-31 20:08:58 +02:00
Erwan Nader
0cc41be3c0 [ticket/14727] Event core.search_modify_submit_parameters
PHPBB3-14727
2016-07-31 16:46:20 +02:00
Marc Alexander
4ac2547d62 Merge pull request #4301 from 3D-I/PHPBB3-14596
[ticket/14596] Deny installation of Ascraeus under PHP 7
2016-07-31 15:18:35 +02:00
Marc Alexander
ef132e1531 [ticket/14484] Move facebook/webdriver back to tests dir composer.json
This will make sure we don't try to install it to incompatible PHP 5.3.3.

PHPBB3-14484
2016-07-31 11:23:59 +02:00
Andreas Fischer
55223e6840 Merge pull request #4336 from Senky/ticket/14652
Fix typos in core.index_modify_birthdays_list vars descriptions

* Senky/ticket/14652:
  [ticket/14652] Fix typos in core.index_modify_birthdays_list vars descriptions
2016-07-29 09:41:50 +02:00
Marc Alexander
29d2c66922 [ticket/14484] Move facebook webdriver to main composer.json
Also updated ui test case file to have same feature set as
the 3.2.x version.

PHPBB3-14484
2016-07-27 19:41:42 +02:00
Marc Alexander
941be83395 Merge pull request #4391 from VSEphpbb/ticket/14720
[ticket/14720] Add "phpbb" as allowed global to jshintrc
2016-07-24 19:15:48 +02:00
rxu
8e8e25cc1f [ticket/14703] Fix the docblock
PHPBB3-14703
2016-07-24 23:35:20 +07:00
Erwan Nader
e7289fa019 [ticket/14592] Fixed docblock from unit tests
PHPBB3-14592
2016-07-24 18:25:20 +02:00
Erwan Nader
5b501e594c [ticket/14592] Fixed syntax errors from unit tests
PHPBB3-14592
2016-07-24 18:10:45 +02:00
Erwan Nader
4eecc95a42 [ticket/14592] [PHP] core.search_backend_search_after
PHPBB3-14592
2016-07-24 17:46:23 +02:00
rxu
5eb493fa86 [ticket/14703] Fix existance checking if multiple parent module_langname found
PHPBB3-14703
2016-07-24 21:22:37 +07:00
Matt Friedman
43e0283fb1 [ticket/14720] Add "phpbb" as allowed global to jshintrc
PHPBB3-14720
2016-07-23 19:14:30 -07:00
rxu
8cf2790d55 [ticket/14703] Add test for the case multiple parent module_langname found
PHPBB3-14703
2016-07-24 02:31:44 +07:00
rxu
eaafb758ce [ticket/14703] Select the parent module id from the several found
PHPBB3-14703
2016-07-23 21:34:05 +07:00
kasimi
33cd613406 [ticket/14715] Converted tabs to spaces
PHPBB3-14715
2016-07-22 12:17:15 +02:00
kasimi
20e08aa2a0 [ticket/14715] Fixed typos in events.md
PHPBB3-14715
2016-07-21 17:49:35 +02:00
kasimi
da7c41f167 [ticket/14715] Add template events in posting_topic_review & mcp_topic
The events will allow adding content before and after the post details
in topic review and topic moderation.

PHPBB3-14715
2016-07-21 17:48:42 +02:00
Máté Bartus
ef91c6abed Merge pull request #4387 from marc1706/ticket/14538
[ticket/14538] Update symfony dependencies to latest versions
2016-07-19 19:00:47 +02:00
Marc Alexander
f3fe610a5e [ticket/14538] Update symfony dependencies to latest versions
PHPBB3-14538
2016-07-19 17:58:41 +02:00
3Di
0026ed02ae [ticket/14596] Deny installation of Ascraeus under PHP 7
PHPBB3-14596
2016-07-18 23:45:58 +02:00
Marc Alexander
befacabf7e Merge pull request #4365 from rxu/ticket/14688
[ticket/14688] Add core events to the feeds
2016-07-17 21:32:20 +02:00
Jakub Senko
775df0eb8a [ticket/14516] Add memberlist_email_before event
PHPBB3-14516
2016-07-17 20:43:40 +02:00
rxu
3df9b2c8f8 [ticket/14688] Add core events to the feeds
PHPBB3-14688
2016-07-17 21:14:13 +07:00
Marc Alexander
e8454e018d Merge pull request #4378 from Crizz0/ticket/14704
[ticket/14704] Removes unused function and language files in base.php
2016-07-17 15:57:21 +02:00
Marc Alexander
78a0d10a5a Merge pull request #4384 from rxu/ticket/14713
[ticket/14713] Add core event to the admin function get_forum_list()
2016-07-17 15:54:09 +02:00
Marc Alexander
960dc08946 Merge pull request #4383 from rxu/ticket/14712
[ticket/14712] Add search core event to allow modifying the forum select list
2016-07-17 15:52:33 +02:00
Marc Alexander
d0a5f87a44 Merge pull request #4364 from kinerity/ticket/14687
[ticket/14687] Modify viewforum_modify_topicrow event
2016-07-17 11:06:43 +02:00
Marc Alexander
a1ecb6db69 Merge pull request #4361 from kinerity/ticket/14685
[ticket/14685] Add viewforum_get_announcement_topic_ids_data event
2016-07-17 10:57:57 +02:00
Marc Alexander
63db42522b Merge pull request #4321 from Senky/ticket/14615
[ticket/14615] Fix HTML5 validation errors on avatar deletion
2016-07-17 10:46:44 +02:00
rxu
a840d70bbf [ticket/14713] Add core event to the admin function get_forum_list()
PHPBB3-14713
2016-07-17 12:40:21 +07:00
rxu
51952005eb [ticket/14712] Add search core event to allow modifying the forum select list
PHPBB3-14712
2016-07-17 12:09:15 +07:00
Marc Alexander
b54aa81cdd Merge pull request #4337 from Senky/ticket/14506
Add mcp_move_before template event
2016-07-16 21:24:33 +02:00
Marc Alexander
6f109dd1ef Merge pull request #4374 from TheKigen/ticket/14616
[ticket/14616] Fixed auto-prune failing on large forums
2016-07-16 19:49:25 +02:00
Marc Alexander
38082c41e3 Merge pull request #4347 from Senky/ticket/14631
[ticket/14631] Load truncate_string() if needed
2016-07-14 20:11:48 +02:00
rxu
652e3da28d [ticket/14703] Refine the parent module selection for custom extension modules
PHPBB3-14703
2016-07-10 21:47:04 +07:00
Andreas Fischer
927cc2ebad Merge pull request #4379 from marc1706/ticket/14689
[ticket/14689] Build API docs for 3.2.x

* marc1706/ticket/14689:
  [ticket/14689] Build API docs for 3.2.x
2016-07-08 14:12:34 +02:00
Marc Alexander
2ec4855cba [ticket/14689] Build API docs for 3.2.x
PHPBB3-14689
2016-07-07 19:25:26 +02:00
Marc Alexander
55b854906d Merge pull request #4342 from Senky/ticket/14654
[ticket/14654] Change Imagemagick to ImageMagick
2016-07-07 19:15:33 +02:00
Max Krivanek
1c52968df6 [ticket/14616] Switch prune limit to sql_query_limit instead of sql_and
PHPBB3-14616
2016-07-06 23:00:35 -05:00
Marc Alexander
cddb884be6 Merge pull request #4354 from Stanzilla/smtp_explain
[ticket/14184] Add a _EXPLAIN translation entry for the SMTP server option
2016-07-06 19:23:54 +02:00
Crizzo
53b9216c78 [ticket/14704] Removes unused function and language files in base.php
PHPBB3-14704
2016-07-03 14:22:08 +02:00
rxu
a3c10f575b [ticket/14703] Fix parent module selection for custom modules removal
PHPBB3-14703
2016-07-03 02:23:34 +07:00
rxu
2f53761eaf [ticket/14703] Fix parent module selection for custom extension modules
PHPBB3-14703
2016-07-03 01:31:42 +07:00
Max Krivanek
c4b93c9c1c [ticket/14616] Added comma expected by test scripts.
PHPBB3-14616
2016-07-01 04:09:42 -05:00
Max Krivanek
65a4f0d631 [ticket/14616] Added prune_limit to event core.prune_sql
PHPBB3-14616
2016-06-28 20:47:46 -05:00
Max Krivanek
9170261885 [ticket/14616] Removed misplaced tab.
PHPBB3-14616
2016-06-27 04:42:01 -05:00
Max Krivanek
f75a01182f [ticket/14616] Fixed auto-prune failing on large forums
PHPBB3-14616
2016-06-27 04:20:12 -05:00
David King
7f1c4cd205 [ticket/14695] Updated version number in events.md
PHPBB3-14695
2016-06-25 22:58:57 +01:00
David King
e4336de68d [ticket/14695] Add posting_editor_subject_prepend/append template events
PHPBB3-14695
2016-06-25 21:16:54 +01:00
Kailey Truscott
4653951673 [ticket/14687] Modify viewforum_modify_topicrow event
Add s_type_switch and s_type_switch_test to event vars.

PHPBB3-14687
2016-06-20 18:21:05 -04:00
Kailey Truscott
a19bf11f73 [ticket/14685] Add viewforum_get_announcement_topic_ids_data event
Create a new event to alter the SQL array of announcements.

PHPBB3-14685
2016-06-19 21:30:03 -04:00
Marc Alexander
9595946508 Merge pull request #4358 from rxu/ticket/14683
[ticket/14683] Fix typos in email templates.
2016-06-19 22:07:38 +02:00
rxu
773a701d62 [ticket/14683] Fix typos in email templates.
PHPBB3-14683
2016-06-20 00:15:37 +07:00
Marc Alexander
c60dbede3e Merge pull request #4281 from rmcgirr83/ticket_13716
[ticket/13716] Check phpBB version against config version
2016-06-19 18:17:33 +02:00
Marc Alexander
aaa99b4719 Merge pull request #4351 from rmcgirr83/ticket_14672
[ticket/14672] Add template event after topic title
2016-06-19 18:04:22 +02:00
Marc Alexander
804236bce4 Merge pull request #4331 from Senky/ticket/13978
[ticket/13978] Add core.ucp_profile_modify_signature_sql_ary
2016-06-19 17:53:23 +02:00
Marc Alexander
cf8c13b04c Merge pull request #4329 from Senky/ticket/14429
[ticket/14429] Add core.obtain_users_online_string_before_modify
2016-06-19 17:49:01 +02:00
Marc Alexander
83f737a30a Merge pull request #4328 from Senky/ticket/13865
[ticket/13865] Add id_ary, show_results to core.search_modify_param_before
2016-06-19 17:46:09 +02:00
Marc Alexander
6764bea40c Merge pull request #4316 from rmcgirr83/ticket_14630
[ticket/14630] Add event to modify pm message
2016-06-19 17:17:26 +02:00
Benjamin Staneck
3708770eb9 [ticket/14184] Add a _EXPLAIN translation entry for the SMTP server option
This should help users trying to figure out why their
mail config is not working when they forgot to use a protocol prefix.

PHPBB3-14184
2016-06-17 08:46:02 +02:00
Marc Alexander
8d3716ab91 Merge pull request #4352 from marc1706/ticket/14626
[ticket/14626] Event core.make_jumpbox_modify_tpl_ary
2016-06-13 22:08:14 +02:00
Tobi Schäfer
cff2895599 [ticket/14626] Event core.make_jumpbox_modify_tpl_ary
PHPBB3-14626
2016-06-13 21:11:54 +02:00
Tobi Schäfer
516670225d [ticket/14626] Event core.make_jumpbox_modify_tpl_ary
https://tracker.phpbb.com/browse/PHPBB3-14626

PHPBB3-14626
2016-06-13 21:10:13 +02:00
Tobi Schäfer
256730c76a [ticket/14626] Event core.make_jumpbox_modify_tpl_ary
PHPBB3-14626
2016-06-13 21:10:13 +02:00
Richard McGirr
e9cbb45435 [ticket/14672] Change event name add to events.md
PHPBB3-14672
2016-06-13 06:26:55 -04:00
Richard McGirr
2a53831124 [ticket/14672] Add template event after topic title
PHPBB3-14672
2016-06-12 10:37:49 -04:00
Jakub Senko
7dc1af25bc [ticket/14654] Change Imagemagick to ImageMagick
PHPBB3-14654
2016-06-11 21:32:16 +02:00
Andreas Fischer
d316927225 Merge pull request #4345 from marc1706/ticket/14291
[ticket/14291] Do not update filesize if displaying thumbnail

* marc1706/ticket/14291:
  [ticket/14291] Do not update filesize if displaying thumbnail
2016-06-11 13:45:27 +02:00
Marc Alexander
cf2b96def7 Merge pull request #4346 from lavigor/ticket/14661
[ticket/14661] Fix a typo in twig.php
2016-06-08 20:47:14 +02:00
Marc Alexander
9d88238f89 Merge pull request #4348 from lavigor/ticket/14664
[ticket/14664] Fix PHPDoc comment in cron manager
2016-06-08 20:32:25 +02:00
lavigor
b2141fd1a8 [ticket/14664] Fix PHPDoc comment in cron manager
PHPBB3-14664
2016-06-07 23:40:31 +03:00
Jakub Senko
4cf666f0bc [ticket/14631] Load truncate_string() if needed
PHPBB3-14631
2016-06-07 19:39:15 +02:00
lavigor
ff8b5058e0 [ticket/14661] Fix a typo in twig.php
PHPBB3-14661
2016-06-05 13:40:40 +03:00
Richard McGirr
08acf2acba [ticket/14630] Rename core event
PHPBB3-14630
2016-06-02 05:18:14 -04:00
Marc Alexander
b63c61d099 Merge pull request #4343 from Senky/ticket/14643
[ticket/14643] Offer latest backup to restore by default
2016-05-31 21:43:16 +02:00
Marc Alexander
72248cab45 [ticket/14291] Do not update filesize if displaying thumbnail
PHPBB3-14291
2016-05-30 20:05:45 +02:00
Jakub Senko
73073ac8c3 [ticket/14643] Offer latest backup to restore by default
PHPBB3-14643
2016-05-29 17:28:33 +02:00
Jakub Senko
9961aefa38 [ticket/14652] Fix typos in core.index_modify_birthdays_list vars descriptions
PHPBB3-14652
2016-05-29 11:42:32 +02:00
Jakub Senko
6350798e97 [ticket/14506] Add mcp_move_before template event
PHPBB3-14506
2016-05-29 11:41:54 +02:00
Marc Alexander
0a512b2695 Merge pull request #4173 from lavigor/ticket/14466
[ticket/14466] Add an event to cron.php
2016-05-28 09:59:47 +02:00
Marc Alexander
e30518461c Merge pull request #4332 from Senky/ticket/11446
[ticket/11446] Use sql_in_set properly in phpbb_notification_manager
2016-05-27 21:16:32 +02:00
Jakub Senko
10d96d4f33 [ticket/14429] Add core.modify_users_online_string_modify
PHPBB3-14429
2016-05-27 13:46:23 +02:00
Máté Bartus
191b80a750 Merge pull request #4335 from marc1706/ticket/14650
[ticket/14650] Move CONTRIBUTING.md and add pull request template
2016-05-27 13:27:26 +02:00
Jakub Senko
c103c42857 [ticket/11446] Make get_notification_type_ids work with string too
PHPBB3-11446
2016-05-27 12:59:30 +02:00
Marc Alexander
dcf90a8d8b [ticket/14650] Semi-colon instead of slash to make Matt happy
PHPBB3-14650
2016-05-26 18:46:34 +02:00
Marc Alexander
a8fb33218c [ticket/14650] Move CONTRIBUTING.md and add pull request template
PHPBB3-14650
2016-05-26 18:34:55 +02:00
Jakub Senko
e6e4c0e62d [ticket/13978] Add core.ucp_profile_modify_signature_sql_ary
PHPBB3-13978
2016-05-24 18:07:11 +02:00
Jakub Senko
7e6371ea8e [ticket/11446] Use sql_in_set properly in phpbb_notification_manager
PHPBB3-11446
2016-05-23 18:13:17 +02:00
Jakub Senko
c3fd07a5f0 [ticket/13865] Add id_ary, show_results to core.search_modify_param_before
PHPBB3-13865
2016-05-22 14:26:01 +02:00
Oliver Schramm
559325fbd6 [ticket/12230] Remove users from new users group when post limit is 0
PHPBB3-12230
2016-05-17 16:56:42 +02:00
Richard McGirr
0d7625c534 [ticket/13716] Remove extra br tag and correct missing closing a html tag
PHPBB3-13716
2016-05-16 18:01:55 -04:00
Richard McGirr
06507f9fa6 [ticket/14630] Change event name and fix capitalization
PHPBB3-14630
2016-05-16 17:57:26 -04:00
Jakub Senko
9ca3cd519a [ticket/14615] Fix HTML5 validation errors on avatar deletion
PHPBB3-14615
2016-05-16 22:21:31 +02:00
Marc Alexander
e7262e2d39 Merge pull request #4314 from rmcgirr83/ticket_14624
[ticket/14624] Add event to ucp_profile in signature section
2016-05-15 23:52:37 +02:00
Marc Alexander
734972cc3d Merge pull request #4317 from rmcgirr83/ticket_14610
[ticket/14610] Don't log an error if the Q&A captcha has been solved
2016-05-12 19:15:58 +02:00
Richard McGirr
03348087d8 [ticket/14610] Implement lavigor method
PHPBB3-14610
2016-05-09 17:28:55 -04:00
Richard McGirr
f57f09f814 [ticket/14610] Remove whitespace
PHPBB3-14610
2016-05-08 09:24:11 -04:00
Richard McGirr
3572f4c92e [ticket/14610] Don't log an error if the Q&A captcha has been solved
https://tracker.phpbb.com/browse/PHPBB3-14610

PHPBB3-14610
2016-05-08 08:50:06 -04:00
Richard McGirr
c7bbcd7b84 [ticket/14630] Add event to modify pm message
https://tracker.phpbb.com/browse/PHPBB3-14630

PHPBB3-14630
2016-05-06 06:31:35 -04:00
Richard McGirr
c0f3463819 [ticket/14624] Remove whitespace
PHPBB3-14624
2016-05-05 06:42:28 -04:00
Richard McGirr
c3b30144e3 [ticket/14624] Fix typo and phpBB version
PHPBB3-14624
2016-05-05 06:10:56 -04:00
Richard McGirr
aa3c5286cd [ticket/14624] Move event so it actually works
PHPBB3-14624
2016-05-05 06:09:11 -04:00
Richard McGirr
8e1102b1da [ticket/14624] Add event to ucp_profile in signature section
PHPBB3-14624
2016-05-05 05:26:19 -04:00
3Di
269e253524 [ticket/14596] Deny installation of Ascraeus under PHP 7
PHPBB3-14596
2016-04-23 07:11:34 +02:00
Tristan Darricau
23bdb2eede [ticket/security-196] Escapes the exception messages before displaying them
SECURITY-196
2016-04-19 12:03:32 +02:00
Joas Schilling
4cdec74e94 Merge branch 'prep-release-3.1.9' into 3.1.x 2016-04-16 12:48:56 +02:00
Joas Schilling
1b01667c7b [prep-release-3.1.9] Add migration for 3.1.9 2016-04-16 12:16:23 +02:00
Joas Schilling
fdcedb262f [prep-release-3.1.9] Update version for 3.1.9 final 2016-04-16 12:13:36 +02:00
Máté Bartus
ed378a2ec3 Merge pull request #4287 from Nicofuma/ticket/14598
[ticket/14598] Support vars docblock in sniffer
2016-04-13 10:18:34 +02:00
Tristan Darricau
96bdcedacd [ticket/14598] Support vars docblock in sniffer
PHPBB3-14598
2016-04-12 22:26:57 +02:00
Richard McGirr
c938077172 [ticket/13716] Fix verboseness
PHPBB3-13716
2016-04-12 05:17:02 -04:00
Joas Schilling
58dfff38fa [3.1.x] Increase version for 3.1.10 development 2016-04-09 19:50:00 +02:00
Joas Schilling
c4ef83e4d2 Merge branch 'prep-release-3.1.9' into 3.1.x 2016-04-09 19:48:35 +02:00
Richard McGirr
e80f79fc9a [ticket/13716] Fix grammar and href title tags
PHPBB3-13716
2016-04-06 06:18:26 -04:00
RMcGirr83
920219dc56 [ticket/13716] Remove extraneous blank line
PHPBB3-13716
2016-04-05 14:55:42 -04:00
Richard McGirr
04f320cb01 [ticket/13716] Check phpBB version against config version
Display a warning in the ACP if the version constant (files)
does not match the phpbb_config version
(often indicating that the database updates hasn't been run)

PHPBB3-13716
2016-04-05 07:09:12 -04:00
lavigor
ebe5eb8342 [ticket/14466] Fix class name in PHPDoc comment.
PHPBB3-14466
2016-03-25 23:16:49 +03:00
lavigor
3479f95090 [ticket/14466] Add an event to cron.php
PHPBB3-14466
2016-02-07 16:50:17 +03:00
javiexin
054da80114 Merge pull request #1 from phpbb/3.1.x
Bring version up to date 20150708
2015-07-09 20:02:39 +02:00
249 changed files with 6894 additions and 1966 deletions

10
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,10 @@
Checklist:
- [ ] Correct branch: master for new features; 3.2.x, 3.1.x for fixes
- [ ] Tests pass
- [ ] Code follows coding guidelines: [master / 3.2.x](https://area51.phpbb.com/docs/master/coding-guidelines.html), [3.1.x](https://area51.phpbb.com/docs/31x/coding-guidelines.html)
- [ ] Commit follows commit message [format](https://wiki.phpbb.com/Git#Commit_Messages)
Tracker ticket (set the ticket ID to **your ticket ID**):
https://tracker.phpbb.com/browse/PHPBB3-12345

View File

@@ -19,6 +19,7 @@
"jquery": true,
"globals": {
"JSON": true
"JSON": true,
"phpbb": true
}
}

View File

@@ -22,12 +22,9 @@ matrix:
env: DB=mysqli
- php: 5.6
env: DB=mysqli
- php: 7.0
env: DB=mysqli
- php: hhvm
env: DB=mysqli
allow_failures:
- php: 7.0
- php: hhvm
fast_finish: true

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.9-RC1" />
<property name="prevversion" value="3.1.8" />
<property name="olderversions" value="3.0.14, 3.1.0, 3.1.1, 3.1.2, 3.1.3, 3.1.4, 3.1.5, 3.1.6, 3.1.7, 3.1.7-pl1" />
<property name="newversion" value="3.1.11-RC1" />
<property name="prevversion" value="3.1.10" />
<property name="olderversions" value="3.0.14, 3.1.0, 3.1.1, 3.1.2, 3.1.3, 3.1.4, 3.1.5, 3.1.6, 3.1.7, 3.1.7-pl1, 3.1.8, 3.1.9" />
<!-- no configuration should be needed beyond this point -->
<property name="oldversions" value="${olderversions}, ${prevversion}" />
@@ -49,7 +49,7 @@
-->
<target name="composer">
<exec dir="phpBB"
command="php ../composer.phar install --dev"
command="php ../composer.phar install --ignore-platform-reqs"
checkreturn="true"
passthru="true" />
</target>
@@ -143,6 +143,7 @@
<phingcall target="export">
<property name="revision" value="release-${version}" />
<property name="dir" value="build/old_versions/release-${version}" />
<property name="skip-composer" value="true" />
</phingcall>
<phingcall target="clean-diff-dir">
@@ -251,26 +252,35 @@
<equals arg1="${composer-has-dependencies}" arg2="1" trim="true" />
<then>
<!-- We have non-dev composer dependencies -->
<exec dir="."
command="git ls-tree ${revision} composer.phar"
checkreturn="true"
outputProperty='composer-ls-tree-output' />
<if>
<equals arg1="${composer-ls-tree-output}" arg2="" trim="true" />
<not><isset property="skip-composer" /></not>
<then>
<fail message="There are composer dependencies, but composer.phar is missing." />
</then>
<else>
<!-- Export the phar, install dependencies, delete phar. -->
<exec dir="."
command="git archive ${revision} composer.phar | tar -xf - -C ${dir}"
checkreturn="true" />
<exec dir="${dir}"
command="php composer.phar install --no-dev --optimize-autoloader"
command="git ls-tree ${revision} composer.phar"
checkreturn="true"
passthru="true" />
<delete file="${dir}/composer.phar" />
</else>
outputProperty='composer-ls-tree-output' />
<if>
<equals arg1="${composer-ls-tree-output}" arg2="" trim="true" />
<then>
<fail message="There are composer dependencies, but composer.phar is missing." />
</then>
<else>
<!-- Export the phar, install dependencies, delete phar. -->
<exec dir="."
command="git archive ${revision} composer.phar | tar -xf - -C ${dir}"
checkreturn="true" />
<exec dir="${dir}"
command="php composer.phar install --no-dev --optimize-autoloader --ignore-platform-reqs"
checkreturn="true"
passthru="true" />
<delete file="${dir}/composer.phar" />
<phingcall target="clean-vendor-dir">
<property name="dir" value="${dir}" />
</phingcall>
</else>
</if>
</then>
</if>
</then>
<else>
@@ -287,10 +297,6 @@
<delete dir="${dir}/develop" />
<delete dir="${dir}/install/data" />
<phingcall target="clean-vendor-dir">
<property name="dir" value="${dir}" />
</phingcall>
<echo msg="Setting permissions for checkout of ${revision} in ${dir}" />
<!-- set permissions of all files to 644, directories to 755 -->
<exec dir="${dir}" command="find . -type f|xargs chmod 644" escape="false" />
@@ -307,6 +313,7 @@
<delete dir="${dir}/vendor/lusitanian/oauth/examples" />
<delete dir="${dir}/vendor/lusitanian/oauth/tests" />
<delete file="${dir}/vendor/lusitanian/oauth/.gitignore" />
<delete file="${dir}/vendor/lusitanian/oauth/.scrutinizer.yml" />
<delete file="${dir}/vendor/lusitanian/oauth/.travis.yml" />
<delete file="${dir}/vendor/lusitanian/oauth/phpunit.xml.dist" />
<delete file="${dir}/vendor/lusitanian/oauth/README.md" />
@@ -381,10 +388,9 @@
<delete file="${dir}/vendor/twig/twig/.editorconfig" />
<delete file="${dir}/vendor/twig/twig/.gitignore" />
<delete file="${dir}/vendor/twig/twig/.travis.yml" />
<delete file="${dir}/vendor/twig/twig/AUTHORS" />
<delete file="${dir}/vendor/twig/twig/CHANGELOG" />
<delete file="${dir}/vendor/twig/twig/phpunit.xml.dist" />
<delete file="${dir}/vendor/twig/twig/README.markdown" />
<delete file="${dir}/vendor/twig/twig/README.rst" />
</target>
<target name="clean-diff-dir">

View File

@@ -129,53 +129,19 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements PHP_CodeSniffer_Sniff
}
}
$old_docblock = $stackPtr;
while (($docblock = $phpcsFile->findNext(T_DOC_COMMENT_CLOSE_TAG, ($old_docblock + 1))) !== false)
{
$old_docblock = $docblock;
$ok = $this->checkDocblock($phpcsFile, $docblock, $tokens, $class_name_full, $class_name_short) ? true : $ok;
}
// Checks in type hinting
$old_function_declaration = $stackPtr;
while (($function_declaration = $phpcsFile->findNext(T_FUNCTION, ($old_function_declaration + 1))) !== false)
{
$old_function_declaration = $function_declaration;
// Check docblocks
$find = array(
T_COMMENT,
T_DOC_COMMENT_CLOSE_TAG,
T_DOC_COMMENT,
T_CLASS,
T_FUNCTION,
T_OPEN_TAG,
);
$comment_end = $phpcsFile->findPrevious($find, ($function_declaration - 1));
if ($comment_end !== false)
{
if ($tokens[$comment_end]['code'] === T_DOC_COMMENT_CLOSE_TAG)
{
$comment_start = $tokens[$comment_end]['comment_opener'];
foreach ($tokens[$comment_start]['comment_tags'] as $tag) {
if ($tokens[$tag]['content'] !== '@param' && $tokens[$tag]['content'] !== '@return' && $tokens[$tag]['content'] !== '@throws') {
continue;
}
$classes = $tokens[($tag + 2)]['content'];
$space = strpos($classes, ' ');
if ($space !== false) {
$classes = substr($classes, 0, $space);
}
$tab = strpos($classes, "\t");
if ($tab !== false) {
$classes = substr($classes, 0, $tab);
}
$classes = explode('|', str_replace('[]', '', $classes));
foreach ($classes as $class)
{
$ok = $this->check($phpcsFile, $class, $class_name_full, $class_name_short, $tokens[$tag + 2]['line']) ? true : $ok;
}
}
}
}
// Check type hint
$params = $phpcsFile->getMethodParameters($function_declaration);
foreach ($params as $param)
@@ -234,4 +200,49 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements PHP_CodeSniffer_Sniff
return false;
}
/**
* @param PHP_CodeSniffer_File $phpcsFile
* @param int $field
* @param array $tokens
* @param string $class_name_full
* @param string $class_name_short
* @param bool $ok
*
* @return bool
*/
private function checkDocblock(PHP_CodeSniffer_File $phpcsFile, $comment_end, $tokens, $class_name_full, $class_name_short)
{
$ok = false;
$comment_start = $tokens[$comment_end]['comment_opener'];
foreach ($tokens[$comment_start]['comment_tags'] as $tag)
{
if (!in_array($tokens[$tag]['content'], array('@param', '@var', '@return', '@throws'), true))
{
continue;
}
$classes = $tokens[($tag + 2)]['content'];
$space = strpos($classes, ' ');
if ($space !== false)
{
$classes = substr($classes, 0, $space);
}
$tab = strpos($classes, "\t");
if ($tab !== false)
{
$classes = substr($classes, 0, $tab);
}
$classes = explode('|', str_replace('[]', '', $classes));
foreach ($classes as $class)
{
$ok = $this->check($phpcsFile, $class, $class_name_full, $class_name_short, $tokens[$tag + 2]['line']) ? true : $ok;
}
}
return $ok;
}
}

View File

@@ -25,6 +25,7 @@ $config['versions'] = Sami\Version\GitVersionCollection::create(__DIR__ . '/../'
*/
->add('3.0.x')
->add('3.1.x')
->add('3.2.x')
->add('master')
;

View File

@@ -1,292 +0,0 @@
#!/usr/bin/env php
<?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.
*
*/
function show_usage()
{
$filename = basename(__FILE__);
echo "$filename adds repositories of a github network as remotes to a local git repository.\n";
echo "\n";
echo "Usage: [php] $filename -s collaborators|organisation|contributors|forks [OPTIONS]\n";
echo "\n";
echo "Scopes:\n";
echo " collaborators Repositories of people who have push access to the specified repository\n";
echo " contributors Repositories of people who have contributed to the specified repository\n";
echo " organisation Repositories of members of the organisation at github\n";
echo " forks All repositories of the whole github network\n";
echo "\n";
echo "Options:\n";
echo " -s scope See description above (mandatory)\n";
echo " -u github_username Overwrites the github username (optional)\n";
echo " -r repository_name Overwrites the repository name (optional)\n";
echo " -m your_github_username Sets up ssh:// instead of git:// for pushable repositories (optional)\n";
echo " -d Outputs the commands instead of running them (optional)\n";
echo " -h This help text\n";
exit(1);
}
// Handle arguments
$opts = getopt('s:u:r:m:dh');
if (empty($opts) || isset($opts['h']))
{
show_usage();
}
$scope = get_arg($opts, 's', '');
$username = get_arg($opts, 'u', 'phpbb');
$repository = get_arg($opts, 'r', 'phpbb3');
$developer = get_arg($opts, 'm', '');
$dry_run = !get_arg($opts, 'd', true);
run(null, $dry_run);
exit(work($scope, $username, $repository, $developer));
function work($scope, $username, $repository, $developer)
{
// Get some basic data
$forks = get_forks($username, $repository);
$collaborators = get_collaborators($username, $repository);
if ($forks === false || $collaborators === false)
{
echo "Error: failed to retrieve forks or collaborators\n";
return 1;
}
switch ($scope)
{
case 'collaborators':
$remotes = array_intersect_key($forks, $collaborators);
break;
case 'organisation':
$remotes = array_intersect_key($forks, get_organisation_members($username));
break;
case 'contributors':
$remotes = array_intersect_key($forks, get_contributors($username, $repository));
break;
case 'forks':
$remotes = $forks;
break;
default:
show_usage();
}
if (file_exists('.git'))
{
add_remote($username, $repository, isset($collaborators[$developer]));
}
else
{
clone_repository($username, $repository, isset($collaborators[$developer]));
}
// Add private security repository for developers
if ($username == 'phpbb' && $repository == 'phpbb3' && isset($collaborators[$developer]))
{
run("git remote add $username-security " . get_repository_url($username, "$repository-security", true));
}
// Skip blessed repository.
unset($remotes[$username]);
foreach ($remotes as $remote)
{
add_remote($remote['username'], $remote['repository'], $remote['username'] == $developer);
}
run('git remote update');
}
function clone_repository($username, $repository, $pushable = false)
{
$url = get_repository_url($username, $repository, false);
run("git clone $url ./ --origin $username");
if ($pushable)
{
$ssh_url = get_repository_url($username, $repository, true);
run("git remote set-url --push $username $ssh_url");
}
}
function add_remote($username, $repository, $pushable = false)
{
$url = get_repository_url($username, $repository, false);
run("git remote add $username $url");
if ($pushable)
{
$ssh_url = get_repository_url($username, $repository, true);
run("git remote set-url --push $username $ssh_url");
}
}
function get_repository_url($username, $repository, $ssh = false)
{
$url_base = ($ssh) ? 'git@github.com:' : 'git://github.com/';
return $url_base . $username . '/' . $repository . '.git';
}
function api_request($query)
{
return api_url_request("https://api.github.com/$query?per_page=100");
}
function api_url_request($url)
{
$contents = file_get_contents($url, false, stream_context_create(array(
'http' => array(
'header' => "User-Agent: phpBB/1.0\r\n",
),
)));
$sub_request_result = array();
// Check headers for pagination links
if (!empty($http_response_header))
{
foreach ($http_response_header as $header_element)
{
// Find Link Header which gives us a link to the next page
if (strpos($header_element, 'Link: ') === 0)
{
list($head, $header_content) = explode(': ', $header_element);
foreach (explode(', ', $header_content) as $links)
{
list($url, $rel) = explode('; ', $links);
if ($rel == 'rel="next"')
{
// Found a next link, follow it and merge the results
$sub_request_result = api_url_request(substr($url, 1, -1));
}
}
}
}
}
if ($contents === false)
{
return false;
}
$contents = json_decode($contents);
if (isset($contents->message) && strpos($contents->message, 'API Rate Limit') === 0)
{
throw new RuntimeException('Reached github API Rate Limit. Please try again later' . "\n", 4);
}
return ($sub_request_result) ? array_merge($sub_request_result, $contents) : $contents;
}
function get_contributors($username, $repository)
{
$request = api_request("repos/$username/$repository/stats/contributors");
if ($request === false)
{
return false;
}
$usernames = array();
foreach ($request as $contribution)
{
$usernames[$contribution->author->login] = $contribution->author->login;
}
return $usernames;
}
function get_organisation_members($username)
{
$request = api_request("orgs/$username/public_members");
if ($request === false)
{
return false;
}
$usernames = array();
foreach ($request as $member)
{
$usernames[$member->login] = $member->login;
}
return $usernames;
}
function get_collaborators($username, $repository)
{
$request = api_request("repos/$username/$repository/collaborators");
if ($request === false)
{
return false;
}
$usernames = array();
foreach ($request as $collaborator)
{
$usernames[$collaborator->login] = $collaborator->login;
}
return $usernames;
}
function get_forks($username, $repository)
{
$request = api_request("repos/$username/$repository/forks");
if ($request === false)
{
return false;
}
$usernames = array();
foreach ($request as $fork)
{
$usernames[$fork->owner->login] = array(
'username' => $fork->owner->login,
'repository' => $fork->name,
);
}
return $usernames;
}
function get_arg($array, $index, $default)
{
return isset($array[$index]) ? $array[$index] : $default;
}
function run($cmd, $dry = false)
{
static $dry_run;
if (is_null($cmd))
{
$dry_run = $dry;
}
else if (!empty($dry_run))
{
echo "$cmd\n";
}
else
{
passthru(escapeshellcmd($cmd));
}
}

View File

@@ -14,7 +14,7 @@
<legend>{L_RESTORE_OPTIONS}</legend>
<dl>
<dt><label for="file">{L_SELECT_FILE}{L_COLON}</label></dt>
<dd><select id="file" name="file" size="10"><!-- BEGIN files --><option value="{files.FILE}"<!-- IF files.S_LAST_ROW --> selected="selected"<!-- ENDIF -->>{files.NAME}</option><!-- END files --></select></dd>
<dd><select id="file" name="file" size="10"><!-- BEGIN files --><option value="{files.FILE}"<!-- IF files.S_FIRST_ROW --> selected="selected"<!-- ENDIF -->>{files.NAME}</option><!-- END files --></select></dd>
</dl>
<p class="submit-buttons">

View File

@@ -21,6 +21,7 @@
<p>{VERSIONCHECK_FAIL_REASON}</p>
</div>
<!-- ENDIF -->
<!-- EVENT acp_ext_details_notice -->
<fieldset>
<legend>{L_EXT_DETAILS}</legend>
@@ -136,4 +137,5 @@
<!-- END meta_authors -->
</fieldset>
<!-- EVENT acp_ext_details_end -->
<!-- INCLUDE overall_footer.html -->

View File

@@ -44,11 +44,11 @@
<tbody>
<!-- IF .enabled -->
<tr>
<td class="row3" colspan="4"><strong>{L_EXTENSIONS_ENABLED}</strong></td>
<td class="row3" colspan="4"><strong>{L_EXTENSIONS_ENABLED}</strong><!-- EVENT acp_ext_list_enabled_title_after --></td>
</tr>
<!-- BEGIN enabled -->
<tr class="ext_enabled row-highlight">
<td><strong title="{enabled.NAME}">{enabled.META_DISPLAY_NAME}</strong></td>
<td><strong title="{enabled.NAME}">{enabled.META_DISPLAY_NAME}</strong><!-- EVENT acp_ext_list_enabled_name_after --></td>
<td style="text-align: center;">
<!-- IF enabled.S_VERSIONCHECK -->
<strong <!-- IF enabled.S_UP_TO_DATE -->style="color: #228822;"<!-- ELSE -->style="color: #BC2A4D;"<!-- ENDIF -->>{enabled.META_VERSION}</strong>
@@ -69,11 +69,11 @@
<!-- IF .disabled -->
<tr>
<td class="row3" colspan="4"><strong>{L_EXTENSIONS_DISABLED}</strong></td>
<td class="row3" colspan="4"><strong>{L_EXTENSIONS_DISABLED}</strong><!-- EVENT acp_ext_list_disabled_title_after --></td>
</tr>
<!-- BEGIN disabled -->
<tr class="ext_disabled row-highlight">
<td><strong title="{disabled.NAME}">{disabled.META_DISPLAY_NAME}</strong></td>
<td><strong title="{disabled.NAME}">{disabled.META_DISPLAY_NAME}</strong><!-- EVENT acp_ext_list_disabled_name_after --></td>
<td style="text-align: center;">
<!-- IF disabled.S_VERSIONCHECK -->
<strong <!-- IF disabled.S_UP_TO_DATE -->style="color: #228822;"<!-- ELSE -->style="color: #BC2A4D;"<!-- ENDIF -->>{disabled.META_VERSION}</strong>

View File

@@ -47,6 +47,21 @@
<dd><label><input type="radio" class="radio" id="jab_use_ssl" name="jab_use_ssl" value="1"<!-- IF JAB_USE_SSL --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
<label><input type="radio" class="radio" name="jab_use_ssl" value="0"<!-- IF not JAB_USE_SSL --> checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
</dl>
<dl>
<dt><label for="jab_verify_peer">{L_JAB_VERIFY_PEER}{L_COLON}</label><br /><span>{L_JAB_VERIFY_PEER_EXPLAIN}</span></dt>
<dd><label><input type="radio" class="radio" id="jab_verify_peer" name="jab_verify_peer" value="1"<!-- IF JAB_VERIFY_PEER --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
<label><input type="radio" class="radio" name="jab_verify_peer" value="0"<!-- IF not JAB_VERIFY_PEER --> checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
</dl>
<dl>
<dt><label for="jab_verify_peer_name">{L_JAB_VERIFY_PEER_NAME}{L_COLON}</label><br /><span>{L_JAB_VERIFY_PEER_NAME_EXPLAIN}</span></dt>
<dd><label><input type="radio" class="radio" id="jab_verify_peer_name" name="jab_verify_peer_name" value="1"<!-- IF JAB_VERIFY_PEER_NAME --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
<label><input type="radio" class="radio" name="jab_verify_peer_name" value="0"<!-- IF not JAB_VERIFY_PEER_NAME --> checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
</dl>
<dl>
<dt><label for="jab_allow_self_signed">{L_JAB_ALLOW_SELF_SIGNED}{L_COLON}</label><br /><span>{L_JAB_ALLOW_SELF_SIGNED_EXPLAIN}</span></dt>
<dd><label><input type="radio" class="radio" id="jab_allow_self_signed" name="jab_allow_self_signed" value="1"<!-- IF JAB_ALLOW_SELF_SIGNED --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
<label><input type="radio" class="radio" name="jab_allow_self_signed" value="0"<!-- IF not JAB_ALLOW_SELF_SIGNED --> checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
</dl>
<!-- ENDIF -->
<dl>
<dt><label for="jab_package_size">{L_JAB_PACKAGE_SIZE}{L_COLON}</label><br /><span>{L_JAB_PACKAGE_SIZE_EXPLAIN}</span></dt>

View File

@@ -14,7 +14,11 @@
<p>{L_ADMIN_INTRO}</p>
<!-- IF S_VERSIONCHECK_FAIL -->
<!-- IF S_UPDATE_INCOMPLETE -->
<div class="errorbox">
<p>{L_UPDATE_INCOMPLETE} <a href="{U_VERSIONCHECK}">{L_MORE_INFORMATION}</a></p>
</div>
<!-- ELSEIF S_VERSIONCHECK_FAIL -->
<div class="errorbox notice">
<p>{L_VERSIONCHECK_FAIL}</p>
<p>{VERSIONCHECK_FAIL_REASON}</p>
@@ -26,6 +30,11 @@
<p><a href="{U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE}</a> &middot; <a href="{U_VERSIONCHECK}">{L_MORE_INFORMATION}</a></p>
</div>
<!-- ENDIF -->
<!-- IF S_VERSION_UPGRADEABLE -->
<div class="errorbox notice">
<p>{UPGRADE_INSTRUCTIONS}</p>
</div>
<!-- ENDIF -->
<!-- IF S_SEARCH_INDEX_MISSING -->
<div class="errorbox">

View File

@@ -63,6 +63,7 @@
<!-- ENDIF -->
<!-- ENDIF -->
</select>
<!-- EVENT acp_posting_buttons_custom_tags_before -->
<!-- BEGIN custom_tags -->
<input type="button" class="button2" name="addbbcode{custom_tags.BBCODE_ID}" value="{custom_tags.BBCODE_TAG}" onclick="bbstyle({custom_tags.BBCODE_ID})" title="{custom_tags.BBCODE_HELPLINE}" />
<!-- END custom_tags -->

View File

@@ -85,6 +85,7 @@
<dd><input type="checkbox" class="radio" id="field_is_contact" name="field_is_contact" value="1"<!-- IF S_FIELD_CONTACT --> checked="checked"<!-- ENDIF --> /></dd>
<dd><input class="text medium" type="text" name="field_contact_desc" id="field_contact_desc" value="{FIELD_CONTACT_DESC}" /> <label for="field_contact_desc">{L_FIELD_CONTACT_DESC}</label></dd>
<dd><input class="text medium" type="text" name="field_contact_url" id="field_contact_url" value="{FIELD_CONTACT_URL}" /> <label for="field_contact_url">{L_FIELD_CONTACT_URL}</label></dd>
<!-- EVENT acp_profile_contact_last -->
</dl>
</fieldset>
@@ -127,6 +128,7 @@
<!-- ENDIF -->
</dl>
<!-- ENDIF -->
<!-- EVENT acp_profile_step_one_lang_after -->
</fieldset>
<fieldset class="quick">

View File

@@ -51,6 +51,10 @@
<dt><label>{L_STYLE_PATH}{L_COLON}</label></dt>
<dd><strong>{STYLE_PATH}</strong></dd>
</dl>
<dl>
<dt><label>{L_STYLE_VERSION}{L_COLON}</label></dt>
<dd><strong>{STYLE_VERSION}</strong></dd>
</dl>
<dl>
<dt><label for="name">{L_COPYRIGHT}{L_COLON}</label></dt>
<dd><strong>{STYLE_COPYRIGHT}</strong></dd>

View File

@@ -6,22 +6,43 @@
<p>{L_VERSION_CHECK_EXPLAIN}</p>
<!-- IF S_UPDATE_INCOMPLETE -->
<div class="errorbox">
<p>{L_UPDATE_INCOMPLETE} {L_UPDATE_INCOMPLETE_MORE}</p>
</div>
<!-- ENDIF -->
<!-- IF S_UP_TO_DATE -->
<div class="successbox">
<p>{L_VERSION_UP_TO_DATE_ACP} - <a href="{U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE}</a></p>
</div>
<!-- ELSE -->
<!-- ELSEIF not S_UPDATE_INCOMPLETE -->
<div class="errorbox">
<p>{L_VERSION_NOT_UP_TO_DATE_ACP} - <a href="{U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE}</a></p>
</div>
<!-- ENDIF -->
<!-- IF S_VERSION_UPGRADEABLE -->
<div class="errorbox notice">
<p>{UPGRADE_INSTRUCTIONS}</p>
</div>
<!-- ENDIF -->
<fieldset>
<legend></legend>
<!-- IF not S_UPDATE_INCOMPLETE -->
<dl>
<dt><label>{L_CURRENT_VERSION}</label></dt>
<dd><strong>{CURRENT_VERSION}</strong></dd>
</dl>
<!-- ELSE -->
<dl>
<dt><label>{L_FILES_VERSION}</label></dt>
<dd><strong>{FILES_VERSION}</strong></dd>
</dl>
<dl>
<dt><label>{L_DATABASE_VERSION}</label></dt>
<dd><strong>{CURRENT_VERSION}</strong></dd>
</dl>
<!-- ENDIF -->
</fieldset>
<!-- BEGIN updates_available -->
@@ -38,6 +59,11 @@
</fieldset>
<!-- END updates_available -->
<!-- IF S_UPDATE_INCOMPLETE -->
{INCOMPLETE_INSTRUCTIONS}
<br>
<!-- ENDIF -->
<!-- IF not S_UP_TO_DATE -->
{UPDATE_INSTRUCTIONS}
<br /><br />

View File

@@ -62,7 +62,127 @@ phpbb.addAjaxCallback('row_delete', function(res) {
}
});
/**
* Handler for submitting permissions form in chunks
* This call will submit permissions forms in chunks of 5 fieldsets.
*/
function submitPermissions() {
var $form = $('form#set-permissions'),
fieldsetList = $form.find('fieldset[id^=perm]'),
formDataSets = [],
$submitAllButton = $form.find('input[type=submit][name^=action]')[0],
$submitButton = $form.find('input[type=submit][data-clicked=true]')[0];
// Set proper start values for handling refresh of page
var permissionSubmitSize = 0,
permissionRequestCount = 0,
forumIds = [],
permissionSubmitFailed = false;
if ($submitAllButton !== $submitButton) {
fieldsetList = $form.find('fieldset#' + $submitButton.closest('fieldset.permissions').id);
}
$.each(fieldsetList, function (key, value) {
if (key % 5 === 0) {
formDataSets[Math.floor(key / 5)] = $form.find('fieldset#' + value.id).serialize();
} else {
formDataSets[Math.floor(key / 5)] += '&' + $form.find('fieldset#' + value.id).serialize();
}
});
permissionSubmitSize = formDataSets.length;
// Add each forum ID to forum ID list to preserve selected forums
$.each($form.find('input[type=hidden][name^=forum_id]'), function (key, value) {
if (value.name.match(/^forum_id\[([0-9]+)\]$/)) {
forumIds.push(value.value);
}
});
/**
* Handler for submitted permissions form chunk
*
* @param {object} res Object returned by AJAX call
*/
function handlePermissionReturn(res) {
permissionRequestCount++;
var $dark = $('#darkenwrapper');
if (res.S_USER_WARNING) {
phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT);
permissionSubmitFailed = true;
} else if (!permissionSubmitFailed && res.S_USER_NOTICE) {
// Display success message at the end of submitting the form
if (permissionRequestCount >= permissionSubmitSize) {
var $alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT);
var $alertBoxLink = $alert.find('p.alert_text > a');
// Create form to submit instead of normal "Back to previous page" link
if ($alertBoxLink) {
// Remove forum_id[] from URL
$alertBoxLink.attr('href', $alertBoxLink.attr('href').replace(/(&forum_id\[\]=[0-9]+)/g, ''));
var previousPageForm = '<form action="' + $alertBoxLink.attr('href') + '" method="post">';
$.each(forumIds, function (key, value) {
previousPageForm += '<input type="text" name="forum_id[]" value="' + value + '" />';
});
previousPageForm += '</form>';
$alertBoxLink.on('click', function (e) {
var $previousPageForm = $(previousPageForm);
$('body').append($previousPageForm);
e.preventDefault();
$previousPageForm.submit();
});
}
// Do not allow closing alert
$dark.off('click');
$alert.find('.alert_close').hide();
if (typeof res.REFRESH_DATA !== 'undefined') {
setTimeout(function () {
// Create forum to submit using POST. This will prevent
// exceeding the maximum length of URLs
var form = '<form action="' + res.REFRESH_DATA.url.replace(/(&forum_id\[\]=[0-9]+)/g, '') + '" method="post">';
$.each(forumIds, function (key, value) {
form += '<input type="text" name="forum_id[]" value="' + value + '" />';
});
form += '</form>';
$form = $(form);
$('body').append($form);
// Hide the alert even if we refresh the page, in case the user
// presses the back button.
$dark.fadeOut(phpbb.alertTime, function () {
if (typeof $alert !== 'undefined') {
$alert.hide();
}
});
// Submit form
$form.submit();
}, res.REFRESH_DATA.time * 1000); // Server specifies time in seconds
}
}
}
}
// Create AJAX request for each form data set
$.each(formDataSets, function (key, formData) {
$.ajax({
url: $form.action,
type: 'POST',
data: formData + '&' + $submitButton.name + '=' + encodeURIComponent($submitButton.value) +
'&creation_time=' + $form.find('input[type=hidden][name=creation_time]')[0].value +
'&form_token=' + $form.find('input[type=hidden][name=form_token]')[0].value +
'&' + $form.children('input[type=hidden]').serialize() +
'&' + $form.find('input[type=checkbox][name^=inherit]').serialize(),
success: handlePermissionReturn,
error: handlePermissionReturn
});
});
}
$('[data-ajax]').each(function() {
var $this = $(this),
@@ -83,6 +203,18 @@ $('[data-ajax]').each(function() {
*/
$(function() {
phpbb.resizeTextArea($('textarea:not(.no-auto-resize)'), {minHeight: 75});
var $setPermissionsForm = $('form#set-permissions');
if ($setPermissionsForm.length) {
$setPermissionsForm.on('submit', function (e) {
submitPermissions();
e.preventDefault();
});
$setPermissionsForm.find('input[type=submit]').click(function() {
$('input[type=submit]', $(this).parents($('form#set-permissions'))).removeAttr('data-clicked');
$(this).attr('data-clicked', true);
});
}
});

View File

@@ -53,7 +53,7 @@ function marklist(id, name, state)
for (var r = 0; r < rb.length; r++)
{
if (rb[r].name.substr(0, name.length) == name)
if (rb[r].name.substr(0, name.length) == name && rb[r].disabled !== true)
{
rb[r].checked = state;
}

View File

@@ -66,7 +66,7 @@ function marklist(id, name, state)
for (var r = 0; r < rb.length; r++)
{
if (rb[r].name.substr(0, name.length) == name)
if (rb[r].name.substr(0, name.length) == name && rb[r].disabled !== true)
{
rb[r].checked = state;
}

View File

@@ -33,20 +33,27 @@ phpbb.loadingIndicator = function() {
if (!$loadingIndicator.is(':visible')) {
$loadingIndicator.fadeIn(phpbb.alertTime);
// Wait fifteen seconds and display an error if nothing has been returned by then.
// Wait 60 seconds and display an error if nothing has been returned by then.
phpbb.clearLoadingTimeout();
phpbbAlertTimer = setTimeout(function() {
var $alert = $('#phpbb_alert');
if ($loadingIndicator.is(':visible')) {
phpbb.alert($alert.attr('data-l-err'), $alert.attr('data-l-timeout-processing-req'));
}
}, 15000);
phpbb.showTimeoutMessage();
}, 60000);
}
return $loadingIndicator;
};
/**
* Show timeout message
*/
phpbb.showTimeoutMessage = function () {
var $alert = $('#phpbb_alert');
if ($loadingIndicator.is(':visible')) {
phpbb.alert($alert.attr('data-l-err'), $alert.attr('data-l-timeout-processing-req'));
}
};
/**
* Clear loading alert timeout
*/

View File

@@ -34,7 +34,7 @@
"symfony/http-kernel": "2.3.*",
"symfony/routing": "2.3.*",
"symfony/yaml": "2.3.*",
"twig/twig": "1.*"
"twig/twig": "^1.0,<1.25"
},
"require-dev": {
"fabpot/goutte": "1.0.*",

298
phpBB/composer.lock generated
View File

@@ -1,10 +1,11 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"hash": "33fa9de480a8a9c8f7e3f2926cd4c034",
"hash": "ab3d7f33388bce90e6032110a537e61f",
"content-hash": "9c138398f4bc789098b020ed37f6ae20",
"packages": [
{
"name": "lusitanian/oauth",
@@ -71,22 +72,30 @@
},
{
"name": "psr/log",
"version": "1.0.0",
"version": "1.0.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "fe0936ee26643249e916849d48e3a51d5f5e278b"
"reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b",
"reference": "fe0936ee26643249e916849d48e3a51d5f5e278b",
"url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
"reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-0": {
"Psr\\Log\\": ""
"psr-4": {
"Psr\\Log\\": "Psr/Log/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -100,26 +109,27 @@
}
],
"description": "Common interface for logging libraries",
"homepage": "https://github.com/php-fig/log",
"keywords": [
"log",
"psr",
"psr-3"
],
"time": "2012-12-21 11:40:51"
"time": "2016-10-10 12:19:37"
},
{
"name": "symfony/config",
"version": "v2.3.39",
"version": "v2.3.42",
"target-dir": "Symfony/Component/Config",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
"reference": "1324aed10a750ed5a0446a71d95e321bf5d3bd24"
"reference": "16a645cef1c09ebfc907d3c9b3e9f5836a7d4d3b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/config/zipball/1324aed10a750ed5a0446a71d95e321bf5d3bd24",
"reference": "1324aed10a750ed5a0446a71d95e321bf5d3bd24",
"url": "https://api.github.com/repos/symfony/config/zipball/16a645cef1c09ebfc907d3c9b3e9f5836a7d4d3b",
"reference": "16a645cef1c09ebfc907d3c9b3e9f5836a7d4d3b",
"shasum": ""
},
"require": {
@@ -156,21 +166,21 @@
],
"description": "Symfony Config Component",
"homepage": "https://symfony.com",
"time": "2016-03-04 07:12:06"
"time": "2016-05-30 08:14:41"
},
{
"name": "symfony/console",
"version": "v2.3.39",
"version": "v2.3.42",
"target-dir": "Symfony/Component/Console",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "cc386594e19024e53e81ee7b6d6c37c221864c4e"
"reference": "20c12c6d6c5a087a66d4e77999451713a92a3507"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/cc386594e19024e53e81ee7b6d6c37c221864c4e",
"reference": "cc386594e19024e53e81ee7b6d6c37c221864c4e",
"url": "https://api.github.com/repos/symfony/console/zipball/20c12c6d6c5a087a66d4e77999451713a92a3507",
"reference": "20c12c6d6c5a087a66d4e77999451713a92a3507",
"shasum": ""
},
"require": {
@@ -212,21 +222,21 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
"time": "2016-03-04 09:20:54"
"time": "2016-05-26 08:04:58"
},
{
"name": "symfony/debug",
"version": "v2.3.39",
"version": "v2.3.42",
"target-dir": "Symfony/Component/Debug",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
"reference": "a6f7b78e406658897f689fa8b00a06205446bebd"
"reference": "863d29c31a1ddfcf1faedf5f8362f392e3261632"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/debug/zipball/a6f7b78e406658897f689fa8b00a06205446bebd",
"reference": "a6f7b78e406658897f689fa8b00a06205446bebd",
"url": "https://api.github.com/repos/symfony/debug/zipball/863d29c31a1ddfcf1faedf5f8362f392e3261632",
"reference": "863d29c31a1ddfcf1faedf5f8362f392e3261632",
"shasum": ""
},
"require": {
@@ -274,21 +284,21 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
"time": "2016-03-04 13:04:09"
"time": "2016-03-30 09:02:35"
},
{
"name": "symfony/dependency-injection",
"version": "v2.3.39",
"version": "v2.3.42",
"target-dir": "Symfony/Component/DependencyInjection",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
"reference": "7cbda8ce5b5e4bd865401cf243070708e1f9a5e6"
"reference": "06265ee128644eb70356bd72ab28c9ded6618d19"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/7cbda8ce5b5e4bd865401cf243070708e1f9a5e6",
"reference": "7cbda8ce5b5e4bd865401cf243070708e1f9a5e6",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/06265ee128644eb70356bd72ab28c9ded6618d19",
"reference": "06265ee128644eb70356bd72ab28c9ded6618d19",
"shasum": ""
},
"require": {
@@ -333,21 +343,21 @@
],
"description": "Symfony DependencyInjection Component",
"homepage": "https://symfony.com",
"time": "2016-03-08 16:58:37"
"time": "2016-05-30 08:31:06"
},
{
"name": "symfony/event-dispatcher",
"version": "v2.3.39",
"version": "v2.3.42",
"target-dir": "Symfony/Component/EventDispatcher",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "b2d9d812e21d6e00983061d49ee61a82f54cace7"
"reference": "fd6d162d97bf3e6060622e5c015af39ca72e33bc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b2d9d812e21d6e00983061d49ee61a82f54cace7",
"reference": "b2d9d812e21d6e00983061d49ee61a82f54cace7",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/fd6d162d97bf3e6060622e5c015af39ca72e33bc",
"reference": "fd6d162d97bf3e6060622e5c015af39ca72e33bc",
"shasum": ""
},
"require": {
@@ -390,21 +400,21 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
"time": "2016-03-04 07:12:06"
"time": "2016-04-04 09:22:54"
},
{
"name": "symfony/filesystem",
"version": "v2.3.39",
"version": "v2.3.42",
"target-dir": "Symfony/Component/Filesystem",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "56f6725f520a357e19deaef6558c3d223046b843"
"reference": "8fd9cd1da0afe63f0d9d4f27875782a2b7d590d3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/56f6725f520a357e19deaef6558c3d223046b843",
"reference": "56f6725f520a357e19deaef6558c3d223046b843",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/8fd9cd1da0afe63f0d9d4f27875782a2b7d590d3",
"reference": "8fd9cd1da0afe63f0d9d4f27875782a2b7d590d3",
"shasum": ""
},
"require": {
@@ -440,21 +450,21 @@
],
"description": "Symfony Filesystem Component",
"homepage": "https://symfony.com",
"time": "2016-03-10 16:50:02"
"time": "2016-04-12 15:20:10"
},
{
"name": "symfony/http-foundation",
"version": "v2.3.39",
"version": "v2.3.42",
"target-dir": "Symfony/Component/HttpFoundation",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "f5cd42d4895d9ede5d26cb1b2883dd4f7e455a40"
"reference": "9f4dbb1f3e3cad22d9462e0306c9c71212458f61"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/f5cd42d4895d9ede5d26cb1b2883dd4f7e455a40",
"reference": "f5cd42d4895d9ede5d26cb1b2883dd4f7e455a40",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/9f4dbb1f3e3cad22d9462e0306c9c71212458f61",
"reference": "9f4dbb1f3e3cad22d9462e0306c9c71212458f61",
"shasum": ""
},
"require": {
@@ -494,21 +504,21 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
"time": "2016-03-12 16:03:08"
"time": "2016-05-13 15:22:39"
},
{
"name": "symfony/http-kernel",
"version": "v2.3.39",
"version": "v2.3.42",
"target-dir": "Symfony/Component/HttpKernel",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "a704146970a1ff261c05e865b636bcc5d95f1b5b"
"reference": "57e0329236e8edf2b0e683043c604f7c9aba9398"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/a704146970a1ff261c05e865b636bcc5d95f1b5b",
"reference": "a704146970a1ff261c05e865b636bcc5d95f1b5b",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/57e0329236e8edf2b0e683043c604f7c9aba9398",
"reference": "57e0329236e8edf2b0e683043c604f7c9aba9398",
"shasum": ""
},
"require": {
@@ -570,20 +580,20 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
"time": "2016-03-13 16:38:02"
"time": "2016-05-30 08:41:10"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.1.1",
"version": "v1.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "1289d16209491b584839022f29257ad859b8532d"
"reference": "e79d363049d1c2128f133a2667e4f4190904f7f4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/1289d16209491b584839022f29257ad859b8532d",
"reference": "1289d16209491b584839022f29257ad859b8532d",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4",
"reference": "e79d363049d1c2128f133a2667e4f4190904f7f4",
"shasum": ""
},
"require": {
@@ -595,7 +605,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1-dev"
"dev-master": "1.3-dev"
}
},
"autoload": {
@@ -629,21 +639,21 @@
"portable",
"shim"
],
"time": "2016-01-20 09:13:37"
"time": "2016-11-14 01:06:16"
},
{
"name": "symfony/routing",
"version": "v2.3.39",
"version": "v2.3.42",
"target-dir": "Symfony/Component/Routing",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "9f464f27cb127232f5c32d5a736fe769e5249442"
"reference": "5b8a2bb7569df81401171829498809e90d6e446c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/9f464f27cb127232f5c32d5a736fe769e5249442",
"reference": "9f464f27cb127232f5c32d5a736fe769e5249442",
"url": "https://api.github.com/repos/symfony/routing/zipball/5b8a2bb7569df81401171829498809e90d6e446c",
"reference": "5b8a2bb7569df81401171829498809e90d6e446c",
"shasum": ""
},
"require": {
@@ -691,21 +701,21 @@
],
"description": "Symfony Routing Component",
"homepage": "https://symfony.com",
"time": "2016-03-04 07:12:06"
"time": "2016-05-29 10:13:06"
},
{
"name": "symfony/yaml",
"version": "v2.3.39",
"version": "v2.3.42",
"target-dir": "Symfony/Component/Yaml",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "d5a6f4c771ae5d3faedda30eeb8db4cfb40a59fe"
"reference": "2cb5f366f9e0df014fc93de46cc416ba0a3055f8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/d5a6f4c771ae5d3faedda30eeb8db4cfb40a59fe",
"reference": "d5a6f4c771ae5d3faedda30eeb8db4cfb40a59fe",
"url": "https://api.github.com/repos/symfony/yaml/zipball/2cb5f366f9e0df014fc93de46cc416ba0a3055f8",
"reference": "2cb5f366f9e0df014fc93de46cc416ba0a3055f8",
"shasum": ""
},
"require": {
@@ -741,20 +751,20 @@
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
"time": "2016-03-04 07:12:08"
"time": "2016-05-30 08:10:17"
},
{
"name": "twig/twig",
"version": "v1.24.0",
"version": "v1.24.2",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "3e5aa30ebfbafd5951fb1b01e338e1800ce7e0e8"
"reference": "33093f6e310e6976baeac7b14f3a6ec02f2d79b7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/3e5aa30ebfbafd5951fb1b01e338e1800ce7e0e8",
"reference": "3e5aa30ebfbafd5951fb1b01e338e1800ce7e0e8",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/33093f6e310e6976baeac7b14f3a6ec02f2d79b7",
"reference": "33093f6e310e6976baeac7b14f3a6ec02f2d79b7",
"shasum": ""
},
"require": {
@@ -802,7 +812,7 @@
"keywords": [
"templating"
],
"time": "2016-01-25 21:22:18"
"time": "2016-09-01 17:50:53"
}
],
"packages-dev": [
@@ -1066,16 +1076,16 @@
},
{
"name": "michelf/php-markdown",
"version": "1.6.0",
"version": "1.7.0",
"source": {
"type": "git",
"url": "https://github.com/michelf/php-markdown.git",
"reference": "156e56ee036505ec637d761ee62dc425d807183c"
"reference": "1f51cc520948f66cd2af8cbc45a5ee175e774220"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/michelf/php-markdown/zipball/156e56ee036505ec637d761ee62dc425d807183c",
"reference": "156e56ee036505ec637d761ee62dc425d807183c",
"url": "https://api.github.com/repos/michelf/php-markdown/zipball/1f51cc520948f66cd2af8cbc45a5ee175e774220",
"reference": "1f51cc520948f66cd2af8cbc45a5ee175e774220",
"shasum": ""
},
"require": {
@@ -1113,7 +1123,7 @@
"keywords": [
"markdown"
],
"time": "2015-12-24 01:37:31"
"time": "2016-10-29 18:58:20"
},
{
"name": "nikic/php-parser",
@@ -1421,22 +1431,30 @@
},
{
"name": "phpunit/php-timer",
"version": "1.0.7",
"version": "1.0.9",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-timer.git",
"reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b"
"reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b",
"reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b",
"url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
"reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
"php": "^5.3.3 || ^7.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
@@ -1458,20 +1476,20 @@
"keywords": [
"timer"
],
"time": "2015-06-21 08:01:12"
"time": "2017-02-26 11:10:40"
},
{
"name": "phpunit/php-token-stream",
"version": "1.4.8",
"version": "1.4.11",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-token-stream.git",
"reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da"
"reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da",
"reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da",
"url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7",
"reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7",
"shasum": ""
},
"require": {
@@ -1507,7 +1525,7 @@
"keywords": [
"tokenizer"
],
"time": "2015-09-15 10:49:45"
"time": "2017-02-27 10:12:30"
},
{
"name": "phpunit/phpunit",
@@ -1747,22 +1765,22 @@
},
{
"name": "sebastian/comparator",
"version": "1.2.0",
"version": "1.2.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
"reference": "937efb279bd37a375bcadf584dec0726f84dbf22"
"reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22",
"reference": "937efb279bd37a375bcadf584dec0726f84dbf22",
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
"reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"sebastian/diff": "~1.2",
"sebastian/exporter": "~1.2"
"sebastian/exporter": "~1.2 || ~2.0"
},
"require-dev": {
"phpunit/phpunit": "~4.4"
@@ -1807,27 +1825,27 @@
"compare",
"equality"
],
"time": "2015-07-26 15:48:44"
"time": "2017-01-29 09:50:25"
},
{
"name": "sebastian/diff",
"version": "1.4.1",
"version": "1.4.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
"reference": "13edfd8706462032c2f52b4b862974dd46b71c9e"
"reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e",
"reference": "13edfd8706462032c2f52b4b862974dd46b71c9e",
"url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4",
"reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
"php": "^5.3.3 || ^7.0"
},
"require-dev": {
"phpunit/phpunit": "~4.8"
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
},
"type": "library",
"extra": {
@@ -1859,27 +1877,27 @@
"keywords": [
"diff"
],
"time": "2015-12-08 07:14:41"
"time": "2017-05-22 07:24:03"
},
{
"name": "sebastian/environment",
"version": "1.3.5",
"version": "1.3.8",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
"reference": "dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf"
"reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf",
"reference": "dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf",
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea",
"reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
"php": "^5.3.3 || ^7.0"
},
"require-dev": {
"phpunit/phpunit": "~4.4"
"phpunit/phpunit": "^4.8 || ^5.0"
},
"type": "library",
"extra": {
@@ -1909,20 +1927,20 @@
"environment",
"hhvm"
],
"time": "2016-02-26 18:40:46"
"time": "2016-08-18 05:49:44"
},
{
"name": "sebastian/exporter",
"version": "1.2.1",
"version": "1.2.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
"reference": "7ae5513327cb536431847bcc0c10edba2701064e"
"reference": "42c4c2eec485ee3e159ec9884f95b431287edde4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e",
"reference": "7ae5513327cb536431847bcc0c10edba2701064e",
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4",
"reference": "42c4c2eec485ee3e159ec9884f95b431287edde4",
"shasum": ""
},
"require": {
@@ -1930,12 +1948,13 @@
"sebastian/recursion-context": "~1.0"
},
"require-dev": {
"ext-mbstring": "*",
"phpunit/phpunit": "~4.4"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.2.x-dev"
"dev-master": "1.3.x-dev"
}
},
"autoload": {
@@ -1975,20 +1994,20 @@
"export",
"exporter"
],
"time": "2015-06-21 07:55:53"
"time": "2016-06-17 09:04:28"
},
{
"name": "sebastian/recursion-context",
"version": "1.0.2",
"version": "1.0.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
"reference": "913401df809e99e4f47b27cdd781f4a258d58791"
"reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791",
"reference": "913401df809e99e4f47b27cdd781f4a258d58791",
"url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
"reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
"shasum": ""
},
"require": {
@@ -2028,7 +2047,7 @@
],
"description": "Provides functionality to recursively process PHP variables",
"homepage": "http://www.github.com/sebastianbergmann/recursion-context",
"time": "2015-11-11 19:50:13"
"time": "2016-10-03 07:41:43"
},
{
"name": "sebastian/version",
@@ -2067,19 +2086,20 @@
},
{
"name": "squizlabs/php_codesniffer",
"version": "2.5.1",
"version": "2.9.1",
"source": {
"type": "git",
"url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
"reference": "6731851d6aaf1d0d6c58feff1065227b7fda3ba8"
"reference": "dcbed1074f8244661eecddfc2a675430d8d33f62"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/6731851d6aaf1d0d6c58feff1065227b7fda3ba8",
"reference": "6731851d6aaf1d0d6c58feff1065227b7fda3ba8",
"url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62",
"reference": "dcbed1074f8244661eecddfc2a675430d8d33f62",
"shasum": ""
},
"require": {
"ext-simplexml": "*",
"ext-tokenizer": "*",
"ext-xmlwriter": "*",
"php": ">=5.1.2"
@@ -2140,11 +2160,11 @@
"phpcs",
"standards"
],
"time": "2016-01-19 23:39:10"
"time": "2017-05-22 02:43:20"
},
{
"name": "symfony/browser-kit",
"version": "v2.3.39",
"version": "v2.3.42",
"target-dir": "Symfony/Component/BrowserKit",
"source": {
"type": "git",
@@ -2202,7 +2222,7 @@
},
{
"name": "symfony/css-selector",
"version": "v2.3.39",
"version": "v2.3.42",
"target-dir": "Symfony/Component/CssSelector",
"source": {
"type": "git",
@@ -2256,17 +2276,17 @@
},
{
"name": "symfony/dom-crawler",
"version": "v2.3.39",
"version": "v2.3.42",
"target-dir": "Symfony/Component/DomCrawler",
"source": {
"type": "git",
"url": "https://github.com/symfony/dom-crawler.git",
"reference": "507dca599566359a4489aa732612347ff65b9a51"
"reference": "b1a52aeafe4dd31914c75e72fc9b9ca3a3e5981d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/507dca599566359a4489aa732612347ff65b9a51",
"reference": "507dca599566359a4489aa732612347ff65b9a51",
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b1a52aeafe4dd31914c75e72fc9b9ca3a3e5981d",
"reference": "b1a52aeafe4dd31914c75e72fc9b9ca3a3e5981d",
"shasum": ""
},
"require": {
@@ -2308,21 +2328,21 @@
],
"description": "Symfony DomCrawler Component",
"homepage": "https://symfony.com",
"time": "2016-03-04 07:12:08"
"time": "2016-04-06 13:13:46"
},
{
"name": "symfony/finder",
"version": "v2.3.39",
"version": "v2.3.42",
"target-dir": "Symfony/Component/Finder",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "24cbc57da78ef7d05250c657b18b1ddcb1298bdf"
"reference": "dce4b58434fc1cbd66e3006e539bb53074dfea82"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/24cbc57da78ef7d05250c657b18b1ddcb1298bdf",
"reference": "24cbc57da78ef7d05250c657b18b1ddcb1298bdf",
"url": "https://api.github.com/repos/symfony/finder/zipball/dce4b58434fc1cbd66e3006e539bb53074dfea82",
"reference": "dce4b58434fc1cbd66e3006e539bb53074dfea82",
"shasum": ""
},
"require": {
@@ -2358,21 +2378,21 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
"time": "2016-03-09 12:50:31"
"time": "2016-05-13 14:58:35"
},
{
"name": "symfony/process",
"version": "v2.3.39",
"version": "v2.3.42",
"target-dir": "Symfony/Component/Process",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "12b5d095f70d2dd706c181e51106005e008e5ca8"
"reference": "89aced1438655ad81fc828c2e2e555e9b88fef3b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/12b5d095f70d2dd706c181e51106005e008e5ca8",
"reference": "12b5d095f70d2dd706c181e51106005e008e5ca8",
"url": "https://api.github.com/repos/symfony/process/zipball/89aced1438655ad81fc828c2e2e555e9b88fef3b",
"reference": "89aced1438655ad81fc828c2e2e555e9b88fef3b",
"shasum": ""
},
"require": {
@@ -2408,7 +2428,7 @@
],
"description": "Symfony Process Component",
"homepage": "https://symfony.com",
"time": "2016-03-04 07:12:06"
"time": "2016-03-31 08:39:43"
}
],
"aliases": [],

View File

@@ -62,6 +62,7 @@ services:
- @auth.provider.oauth.service_collection
- %tables.users%
- @service_container
- @dispatcher
- %core.root_path%
- %core.php_ext%
tags:

View File

@@ -139,3 +139,24 @@ services:
- @dbal.conn
tags:
- { name: console.command }
console.command.fixup.update_hashes:
class: phpbb\console\command\fixup\update_hashes
arguments:
- @config
- @user
- @dbal.conn
- @passwords.manager
- @passwords.driver_collection
- %passwords.algorithms%
tags:
- { name: console.command }
console.command.fixup.fix_left_right_ids:
class: phpbb\console\command\fixup\fix_left_right_ids
arguments:
- @user
- @dbal.conn
- @cache.driver
tags:
- { name: console.command }

View File

@@ -146,3 +146,17 @@ services:
- [set_name, [cron.task.core.tidy_warnings]]
tags:
- { name: cron.task }
cron.task.core.update_hashes:
class: phpbb\cron\task\core\update_hashes
arguments:
- @config
- @dbal.conn
- @passwords.update.lock
- @passwords.manager
- @passwords.driver_collection
- %passwords.algorithms%
calls:
- [set_name, [cron.task.core.update_hashes]]
tags:
- { name: cron.task }

View File

@@ -5,9 +5,7 @@ services:
- @service_container
dbal.conn.driver:
class: %dbal.driver.class%
calls:
- [sql_connect, [%dbal.dbhost%, %dbal.dbuser%, %dbal.dbpasswd%, %dbal.dbname%, %dbal.dbport%, false, %dbal.new_link%]]
synthetic: true
dbal.tools:
class: phpbb\db\tools

View File

@@ -25,6 +25,7 @@ services:
- @user
- @auth
- @content.visibility
- @dispatcher
- %core.php_ext%
feed.forums:
@@ -38,6 +39,7 @@ services:
- @user
- @auth
- @content.visibility
- @dispatcher
- %core.php_ext%
feed.news:
@@ -51,6 +53,7 @@ services:
- @user
- @auth
- @content.visibility
- @dispatcher
- %core.php_ext%
feed.overall:
@@ -64,6 +67,7 @@ services:
- @user
- @auth
- @content.visibility
- @dispatcher
- %core.php_ext%
feed.topic:
@@ -77,6 +81,7 @@ services:
- @user
- @auth
- @content.visibility
- @dispatcher
- %core.php_ext%
feed.topics:
@@ -90,6 +95,7 @@ services:
- @user
- @auth
- @content.visibility
- @dispatcher
- %core.php_ext%
feed.topics_active:
@@ -103,4 +109,5 @@ services:
- @user
- @auth
- @content.visibility
- @dispatcher
- %core.php_ext%

View File

@@ -122,3 +122,10 @@ services:
- @passwords.driver_helper
tags:
- { name: passwords.driver }
passwords.update.lock:
class: phpbb\lock\db
arguments:
- update_hashes_lock
- '@config'
- '@dbal.conn'

View File

@@ -55,6 +55,18 @@ if ($cron_lock->acquire())
$task = $cron->find_task($cron_type);
if ($task)
{
/**
* This event enables you to catch the task before it runs
*
* @event core.cron_run_before
* @var \phpbb\cron\task\wrapper task Current Cron task
* @since 3.1.8-RC1
*/
$vars = array(
'task',
);
extract($phpbb_dispatcher->trigger_event('core.cron_run_before', compact($vars)));
if ($task->is_parametrized())
{
$task->parse_parameters($request);

View File

@@ -50,6 +50,8 @@
<ol>
<li><a href="#changelog">Changelog</a>
<ul>
<li><a href="#v3110">Changes since 3.1.10</a></li>
<li><a href="#v319">Changes since 3.1.9</a></li>
<li><a href="#v318">Changes since 3.1.8</a></li>
<li><a href="#v317pl1">Changes since 3.1.7-PL1</a></li>
<li><a href="#v317">Changes since 3.1.7</a></li>
@@ -118,7 +120,232 @@
<div class="content">
<a name="v318"></a><h3>Changes since 3.1.8</h3>
<a name="v3110"></a><h3>Changes since 3.1.10</h3>
<h4>Bug</h4>
<ul>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-7336">PHPBB3-7336</a>] - Words in new topic title aren't found by search after topic is split</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-8116">PHPBB3-8116</a>] - Server timeout or browsercrash after viewing postdetails</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-8301">PHPBB3-8301</a>] - admin log generate slow queries</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-9590">PHPBB3-9590</a>] - Unable to update permissions for more than 6 forums at a time</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11076">PHPBB3-11076</a>] - Update notification in ACP for minimum PHP version missing essential information</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11483">PHPBB3-11483</a>] - Forced Activation needs looking at.</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11611">PHPBB3-11611</a>] - setup_github_network.php no longer creates a repository</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13247">PHPBB3-13247</a>] - Online indicator in post profile hides behind certain avatars</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13250">PHPBB3-13250</a>] - File cache does not write entries starting with _ and containing a slash</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13429">PHPBB3-13429</a>] - Changes tag in docblock of events should be unified</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13558">PHPBB3-13558</a>] - Error - stream_socket_enable_crypto()</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13757">PHPBB3-13757</a>] - Negative PM count</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14468">PHPBB3-14468</a>] - [php] - 'core.viewforum_modify_topics_data' add parameter forum_id</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14549">PHPBB3-14549</a>] - Correctly redirect back after topic merge in MCP</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14770">PHPBB3-14770</a>] - Plupload: WRONG_FILESIZE is used wrong</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14795">PHPBB3-14795</a>] - Topic merge bug</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14801">PHPBB3-14801</a>] - Search highlight option doesn't always highlight unicode strings</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14802">PHPBB3-14802</a>] - Empty/blank lines should not be additional poll options</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14806">PHPBB3-14806</a>] - Authentication for e-mail is not working</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14819">PHPBB3-14819</a>] - Soft deleted posts visible in topic review</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14821">PHPBB3-14821</a>] - Do not expect parsed HTML in kernel subscriber output</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14830">PHPBB3-14830</a>] - FORM_INVALID error on ACP search and CPF settings</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14831">PHPBB3-14831</a>] - Extension migration file fails</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14838">PHPBB3-14838</a>] - feeds.attachments_base - server 500 error for large attachment tables</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14844">PHPBB3-14844</a>] - BBcodes B and I return &lt;strong&gt; and &lt;em&gt; tags instead of CSS under inherited styles</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14859">PHPBB3-14859</a>] - PM report notifications only sent out to full Global Moderators</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14860">PHPBB3-14860</a>] - Broken link on subscriptions page on mobile devices</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14863">PHPBB3-14863</a>] - &quot;Array&quot; in message title when permanently deleting posts</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14864">PHPBB3-14864</a>] - ACP datefromat text input still has 30 max length while dateformat field had been expanded to 64</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14876">PHPBB3-14876</a>] - Multibyte message is not displayed properly on exception</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14877">PHPBB3-14877</a>] - CSS error in &quot;.codebox code&quot; definition</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14881">PHPBB3-14881</a>] - Problems using EVENT (overall_footer_content_after)</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14888">PHPBB3-14888</a>] - Missing check for disabled profile field types</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14889">PHPBB3-14889</a>] - Missing method declaration in profile fields type interface</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14890">PHPBB3-14890</a>] - Wrong validation of input field in profile field type string</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14906">PHPBB3-14906</a>] - Duplicated sig key in user_cache_data array</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14923">PHPBB3-14923</a>] - SQL PostgreSQL blocking errors during DB update installation</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14938">PHPBB3-14938</a>] - Inconsistent data results from ext_mgr-&gt;all_available() vs ext_mgr-&gt;is_available()</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14941">PHPBB3-14941</a>] - MySQL Fulltext search index creating still fails on InnoDB</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14943">PHPBB3-14943</a>] - Template loop access gives PHP error</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14953">PHPBB3-14953</a>] - Incorrect &quot;order by&quot; definition in ucp_pm_viewfolder</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14968">PHPBB3-14968</a>] - Version check marks 3.1.10 boards as outdated </li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14997">PHPBB3-14997</a>] - Bad Position for topiclist_row_topic_title_after</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14998">PHPBB3-14998</a>] - ACP Update link is incorrect!</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15003">PHPBB3-15003</a>] - When using mark all, disabled check boxes should not become checked</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15006">PHPBB3-15006</a>] - Permission inheritance with checkbox not working</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15011">PHPBB3-15011</a>] - Error not checked on metadata load failure</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15108">PHPBB3-15108</a>] - Duplicate code in request-&gt;overwrite</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15143">PHPBB3-15143</a>] - version check on branch is broken</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15146">PHPBB3-15146</a>] - Date profile field validation incorrect</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15150">PHPBB3-15150</a>] - Yabber SSL/TLS certification</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15186">PHPBB3-15186</a>] - The force_delete_allowed flag does not affect actual posts deletion ability</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15187">PHPBB3-15187</a>] - ACP Template files not purged during Extension Enable</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15246">PHPBB3-15246</a>] - Memcache driver incorrectly handles Unix sockets</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15248">PHPBB3-15248</a>] - Event core.modify_posting_auth does not honor its parameters</li>
</ul>
<h4>Improvement</h4>
<ul>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-9211">PHPBB3-9211</a>] - List subforums-links separately in parent-forums' legend</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12749">PHPBB3-12749</a>] - core.submit_post_end add subject to the event data</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13457">PHPBB3-13457</a>] - New Hooks for ucp_main</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13459">PHPBB3-13459</a>] - New Template-Event in overall_header.html</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13479">PHPBB3-13479</a>] - Add hook for modifying highlighting on viewtopic</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13601">PHPBB3-13601</a>] - New event upon acl_clear_prefetch</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13603">PHPBB3-13603</a>] - New event upon index_body_online_block_after</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13605">PHPBB3-13605</a>] - New event upon ucp_pm_compose_predefined_message</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13608">PHPBB3-13608</a>] - New event upon ucp_restore_permissions</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13609">PHPBB3-13609</a>] - New event upon ucp_switch_permissions</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13845">PHPBB3-13845</a>] - Add event when user changes or delete avatar</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14119">PHPBB3-14119</a>] - [PHP] - (User) unban event request</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14239">PHPBB3-14239</a>] - [PHP] - Add event ucp_remind_modify_select_sql</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14331">PHPBB3-14331</a>] - Add rank calculation or result event access</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14520">PHPBB3-14520</a>] - [Template] - ucp_pm_viewmessage_message_body_after</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14522">PHPBB3-14522</a>] - [Template] - ucp_register_buttons_before</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14524">PHPBB3-14524</a>] - [PHP] - core.ucp_register_requests_after</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14733">PHPBB3-14733</a>] - Support increasing hashing cost factor</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14750">PHPBB3-14750</a>] - Fileupload form should not set invalid attributes for file input</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14758">PHPBB3-14758</a>] - ACP-Parameter &quot;Maximum thumbnail width in pixel&quot; should be &quot;Maximum thumbnail width/heigth in pixel:&quot;</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14759">PHPBB3-14759</a>] - Event core.mcp_main_modify_shadow_sql</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14760">PHPBB3-14760</a>] - Event core.mcp_main_modify_fork_sql</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14786">PHPBB3-14786</a>] - Add mcp_forum_actions_before/after events</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14804">PHPBB3-14804</a>] - Add core event to MCP after merging topics</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14805">PHPBB3-14805</a>] - Allow building package for previous versions on PHP 7</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14808">PHPBB3-14808</a>] - Add template event overall_header_searchbox_after</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14817">PHPBB3-14817</a>] - Add core event on includes/functions_download.php</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14825">PHPBB3-14825</a>] - Add OAuth events</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14827">PHPBB3-14827</a>] - Possibility to add multiple form keys</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14842">PHPBB3-14842</a>] - Avatar size 0 - unlimited</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14847">PHPBB3-14847</a>] - Add php event to add options in ACP Attachments</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14848">PHPBB3-14848</a>] - Add ACP template events after extensions list titles</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14849">PHPBB3-14849</a>] - Add ACP extension event</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14850">PHPBB3-14850</a>] - Add core events for smilies</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14852">PHPBB3-14852</a>] - Add core event to the function build_header()</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14853">PHPBB3-14853</a>] - Add core event to allow modifying PM attachments download auth</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14855">PHPBB3-14855</a>] - Update notifications and PM alert bubbles</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14870">PHPBB3-14870</a>] - Add php events to modify list of PMs</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14872">PHPBB3-14872</a>] - Remove count versus sizeof restriction in coding guidelines</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14874">PHPBB3-14874</a>] - Error on sending a .pak smiley</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14882">PHPBB3-14882</a>] - Add core event to MCP after move posts sync</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14887">PHPBB3-14887</a>] - ACP profile step 1 lang specific event</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14918">PHPBB3-14918</a>] - Provide quick access to extension version metadata</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14940">PHPBB3-14940</a>] - Add ACP template event acp_ext_details_end</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14957">PHPBB3-14957</a>] - Do not cache database config</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14958">PHPBB3-14958</a>] - Twig extension function lang() performs redundant template data copying</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15020">PHPBB3-15020</a>] - Add Events for mcp_topic_postrow_post_subject</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15059">PHPBB3-15059</a>] - Do not wrap content in code box</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15081">PHPBB3-15081</a>] - Add ACP template event acp_ext_details_notice</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15107">PHPBB3-15107</a>] - Add additional vars to event</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15131">PHPBB3-15131</a>] - Add variable to the 'core.mcp_main_modify_fork_sql' event</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15142">PHPBB3-15142</a>] - Extension Version Check Should Support Branches</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15151">PHPBB3-15151</a>] - ACP Cookie settings should contain explanatory text for all fields</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15199">PHPBB3-15199</a>] - Add core event to the function send() in the messenger</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15200">PHPBB3-15200</a>] - Allow extensions using custom templates for help/faq controllers </li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15205">PHPBB3-15205</a>] - Add template events to forumlist_body.html</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15219">PHPBB3-15219</a>] - Add cron to update passwords hashes to bcrypt</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15226">PHPBB3-15226</a>] - Add index for latest topics query in feeds</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15237">PHPBB3-15237</a>] - Unguarded includes functions_user</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15238">PHPBB3-15238</a>] - Add console command to fix left/right IDs for the forums and modules</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15241">PHPBB3-15241</a>] - Add ACP template event acp_profile_contact_last</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15250">PHPBB3-15250</a>] - Add core event to MCP at the end of merge_posts</li>
</ul>
<h4>New Feature</h4>
<ul>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12545">PHPBB3-12545</a>] - new pre-posting event</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13730">PHPBB3-13730</a>] - [PHP] - core.delete_post_end</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14390">PHPBB3-14390</a>] - [prosilver] - ucp_main_front_user_details_after</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14498">PHPBB3-14498</a>] - Not possible to deactivate display of &quot;who is online&quot; and birthdays for guests</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14662">PHPBB3-14662</a>] - [Template] - memberlist_team_username_prepend &amp; append</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14868">PHPBB3-14868</a>] - [Template] - mcp_forum_modify_select_after</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14996">PHPBB3-14996</a>] - [event] - Add Event search_results_topictitle_after</li>
</ul>
<h4>Sub-task</h4>
<ul>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13149">PHPBB3-13149</a>] - [Event] - core.phpbb_log_get_topic_auth_sql_before</li>
</ul>
<h4>Task</h4>
<ul>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15178">PHPBB3-15178</a>] - Update 3.1.x dependencies</li>
</ul>
<a name="v319"></a><h3>Changes since 3.1.9</h3>
<h4>Bug</h4>
<ul>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11446">PHPBB3-11446</a>] - Use sql_in_set as designed and consistent with the rest of phpBB code in phpbb_notification_manager</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12230">PHPBB3-12230</a>] - Do not auto remove user group when Newly Registered Users group was disabled</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12925">PHPBB3-12925</a>] - Use plural for permanent delete posts/topics confirmation</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14109">PHPBB3-14109</a>] - MySQL InnoDB does not support multiple index definitions on the same query.</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14291">PHPBB3-14291</a>] - Function send_file_to_browser() endlessly overwrites 'filesize' in ATTACHMENTS_TABLE</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14610">PHPBB3-14610</a>] - Q&amp;A CAPTCHA logs error when it has been solved</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14615">PHPBB3-14615</a>] - delete avatar triggers the new min max value in the HTML5 inputs</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14616">PHPBB3-14616</a>] - Auto-prune fails on large forums</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14631">PHPBB3-14631</a>] - 3.1.9 DB cli update crashes with PHP Fatal error: Call to undefined function phpbb\truncate_string()</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14654">PHPBB3-14654</a>] - Imagemagick &gt; ImageMagick</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14661">PHPBB3-14661</a>] - Fix a typo in twig.php</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14673">PHPBB3-14673</a>] - Missing Language Variable</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14683">PHPBB3-14683</a>] - Typos in operators in some email templates</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14703">PHPBB3-14703</a>] - module.add adds a module to the wrong parent</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14704">PHPBB3-14704</a>] - Remove unused language files and corresponding functions</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14721">PHPBB3-14721</a>] - New registrants choosing old deleted usernames get linked to old accounts with namechange</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14742">PHPBB3-14742</a>] - Improvements to migrator</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14745">PHPBB3-14745</a>] - &quot;U_NOTIFICATION_SETTINGS&quot; contains an HTML entity but is printed in a plaintext email</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14755">PHPBB3-14755</a>] - Error in MCP Move posts</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14782">PHPBB3-14782</a>] - Quick Links &gt; Your Posts gives mysql error</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14788">PHPBB3-14788</a>] - Update developer list to reflect team changes</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14796">PHPBB3-14796</a>] - Log table is using constant in log delete method</li>
</ul>
<h4>Improvement</h4>
<ul>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13709">PHPBB3-13709</a>] - Fallback to english in email templates by extensions</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13716">PHPBB3-13716</a>] - Check phpBB version constant against config version</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13865">PHPBB3-13865</a>] - Complement core event search_modify_param</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14184">PHPBB3-14184</a>] - Missing info on SMTP mail function option</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14429">PHPBB3-14429</a>] - core.obtain_users_online_string_modify</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14466">PHPBB3-14466</a>] - Add an event to cron.php</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14469">PHPBB3-14469</a>] - [Template] - &lt;!-- EVENT viewforum_topicrow_before --&gt;</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14516">PHPBB3-14516</a>] - [Template] - memberlist_email_before</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14581">PHPBB3-14581</a>] - Add core events relating to soft delete</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14592">PHPBB3-14592</a>] - [PHP] - core.search_backend_search_after</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14596">PHPBB3-14596</a>] - Prevent installs of 3.1 on PHP 7</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14624">PHPBB3-14624</a>] - Add event to ucp_profile in signature section</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14630">PHPBB3-14630</a>] - Add event to ucp_pm_compose</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14638">PHPBB3-14638</a>] - [PHP] - multiple UCP subscription events for form data and template variables</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14643">PHPBB3-14643</a>] - Select newest file in restore list</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14652">PHPBB3-14652</a>] - Typo birthdays</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14664">PHPBB3-14664</a>] - Fix PHPDoc comment in cron manager</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14672">PHPBB3-14672</a>] - Add template event to viewforum</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14685">PHPBB3-14685</a>] - PHP event for altering announcements sql</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14687">PHPBB3-14687</a>] - Modify viewforum_modify_topicrow</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14688">PHPBB3-14688</a>] - Add core events to the feeds</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14689">PHPBB3-14689</a>] - Build 3.2.x API docs</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14695">PHPBB3-14695</a>] - Add posting_editor_subject_prepend/append template events</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14712">PHPBB3-14712</a>] - Add search.php core event to allow modifying the forum select list</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14713">PHPBB3-14713</a>] - Add core event to the admin function get_forum_list()</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14715">PHPBB3-14715</a>] - Add template events in posting_topic_review &amp; mcp_topic</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14720">PHPBB3-14720</a>] - Add global javascript variable 'phpbb' to jshint settings</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14727">PHPBB3-14727</a>] - Event core.search_modify_submit_parameters</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14738">PHPBB3-14738</a>] - Add core events to improve modifying forum lists</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14747">PHPBB3-14747</a>] - Add topic_last_poster_id and topic_last_post_time to Event core.modify_posting_auth</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14762">PHPBB3-14762</a>] - Add core event to session.php to alter IP address</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14781">PHPBB3-14781</a>] - Add core event to the function group_user_attributes()</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14783">PHPBB3-14783</a>] - Event - ACP Posting Buttons Before Custom BBCodes</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14784">PHPBB3-14784</a>] - missing rewrite for lighttpd</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14785">PHPBB3-14785</a>] - [Template event] - overall_header_headerbar_append</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14787">PHPBB3-14787</a>] - Add more parameters to the core.search_modify_url_parameters event</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14789">PHPBB3-14789</a>] - Add missing link hash and form token checks to ACP</li>
</ul>
<h4>New Feature</h4>
<ul>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13978">PHPBB3-13978</a>] - [PHP] - User control panel - on signature change</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14484">PHPBB3-14484</a>] - Support extensions in UI tests</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14506">PHPBB3-14506</a>] - [Template] - mcp_move_before</li>
</ul>
<h4>Task</h4>
<ul>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12133">PHPBB3-12133</a>] - Update list of browsers supporting filename* in Content-Disposition</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14538">PHPBB3-14538</a>] - Update composer dependencies</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14598">PHPBB3-14598</a>] - Phing Sniffer Testing Use Statements in DocBlocks</li>
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14743">PHPBB3-14743</a>] - Remove PHP7 from test matrix in 3.1.x</li>
</ul>
<a name="v318"></a><h3>Changes since 3.1.8</h3>
<h4>Bug</h4>
<ul>

View File

@@ -1,6 +1,6 @@
/**
*
* phpBB © Copyright phpBB Limited 2003-2014
* phpBB © Copyright phpBB Limited 2003-2016
* http://www.phpbb.com
*
* phpBB is free software. You can redistribute it and/or modify it
@@ -20,14 +20,13 @@
phpBB Project Manager: Marshalrusty (Yuriy Rusko)
phpBB Lead Developer: naderman (Nils Adermann)
phpBB Product Manager: naderman (Nils Adermann)
phpBB Lead Developer: Marc (Marc Alexander)
phpBB Developers: bantu (Andreas Fischer)
CHItA (Máté Bartus)
dhruv.goel92 (Dhruv Goel)
Elsensee (Oliver Schramm)
marc1706 (Marc Alexander)
nickvergessen (Joas Schilling)
Nicofuma (Tristan Darricau)
prototech (Cesar Gallegos)
@@ -54,11 +53,13 @@ phpBB Developers: A_Jelly_Doughnut (Josh Woody) [01/2010 - 11/2010]
ckwalsh (Cullen Walsh) [01/2010 - 07/2011]
DavidMJ (David M.) [12/2005 - 08/2009]
dhn (Dominik Dröscher) [05/2007 - 01/2011]
dhruv.goel92 (Dhruv Goel) [04/2013 - 05/2016]
EXreaction (Nathan Guse) [07/2012 - 05/2014]
GrahamJE (Graham Eames) [09/2005 - 11/2006]
igorw (Igor Wiedler) [08/2010 - 02/2013]
imkingdavid (David King) [11/2012 - 06/2014]
kellanved (Henry Sudhof) [04/2007 - 03/2011]
nickvergessen (Joas Schilling)[04/2010 - 12/2015]
Oleg (Oleg Pudeyev) [01/2011 - 05/2013]
rxu (Ruslan Uzdenov) [04/2010 - 12/2012]
TerraFrost (Jim Wigginton) [04/2009 - 01/2011]

View File

@@ -160,7 +160,7 @@
<li>zlib Compression support</li>
<li>Remote FTP support</li>
<li>XML support</li>
<li>Imagemagick support</li>
<li>ImageMagick support</li>
<li>GD Support</li>
</ul>
</li>

View File

@@ -1122,9 +1122,6 @@ append_sid(&quot;{$phpbb_root_path}memberlist.$phpEx&quot;, 'mode=group&amp;amp;
<p>Some of these functions are only chosen over others because of personal preference and have no benefit other than maintaining consistency throughout the code.</p>
<ul>
<li>
<p>Use <code>sizeof</code> instead of <code>count</code></p>
</li>
<li>
<p>Use <code>strpos</code> instead of <code>strstr</code></p>
</li>

View File

@@ -58,6 +58,42 @@ acp_email_options_after
* Since: 3.1.2-RC1
* Purpose: Add settings to mass email form
acp_ext_details_end
===
* Location: adm/style/acp_ext_details.html
* Since: 3.1.11-RC1
* Purpose: Add more detailed information on extension after the available information.
acp_ext_details_notice
===
* Location: adm/style/acp_ext_details.html
* Since: 3.1.11-RC1
* Purpose: Add extension detail notices after version check information.
acp_ext_list_disabled_name_after
===
* Location: adm/style/acp_ext_list.html
* Since: 3.1.11-RC1
* Purpose: Add content after the name of disabled extensions in the list
acp_ext_list_disabled_title_after
===
* Location: adm/style/acp_ext_list.html
* Since: 3.1.11-RC1
* Purpose: Add text after disabled extensions section title.
acp_ext_list_enabled_name_after
===
* Location: adm/style/acp_ext_list.html
* Since: 3.1.11-RC1
* Purpose: Add content after the name of enabled extensions in the list
acp_ext_list_enabled_title_after
===
* Location: adm/style/acp_ext_list.html
* Since: 3.1.11-RC1
* Purpose: Add text after enabled extensions section title.
acp_forums_custom_settings
===
* Location: adm/style/acp_forums.html
@@ -343,6 +379,13 @@ acp_posting_buttons_before
* Since: 3.1.0-b4
* Purpose: Add content before BBCode posting buttons in the ACP
acp_posting_buttons_custom_tags_before
===
* Locations:
+ adm/style/acp_posting_buttons.html
* Since: 3.1.10-RC1
* Purpose: Add content before the custom BBCodes in the ACP
acp_profile_contact_before
===
* Locations:
@@ -350,6 +393,20 @@ acp_profile_contact_before
* Since: 3.1.6-RC1
* Purpose: Add extra options to custom profile field configuration in the ACP
acp_profile_contact_last
===
* Locations:
+ adm/style/acp_profile.html
* Since: 3.1.11-RC1
* Purpose: Add contact specific options to custom profile fields in the ACP
acp_profile_step_one_lang_after
===
* Locations:
+ adm/style/acp_profile.html
* Since: 3.1.11-RC1
* Purpose: Add extra lang specific options to custom profile field step one configuration in the ACP
acp_prune_forums_append
===
* Locations:
@@ -643,6 +700,22 @@ forumlist_body_last_post_title_prepend
* Since: 3.1.0-a1
* Purpose: Add content before the post title of the latest post in a forum on the forum list.
forumlist_body_subforum_link_append
===
* Locations:
+ styles/prosilver/template/forumlist_body.html
+ styles/subsilver2/template/forumlist_body.html
* Since: 3.1.11-RC1
* Purpose: Add content at the end of subforum link item.
forumlist_body_subforum_link_prepend
===
* Locations:
+ styles/prosilver/template/forumlist_body.html
+ styles/subsilver2/template/forumlist_body.html
* Since: 3.1.11-RC1
* Purpose: Add content at the start of subforum link item.
forumlist_body_subforums_after
===
* Locations:
@@ -667,6 +740,14 @@ forumlist_body_last_row_after
* Since: 3.1.0-b2
* Purpose: Add content after the very last row of the forum list.
index_body_birthday_block_before
===
* Locations:
+ styles/prosilver/template/index_body.html
+ styles/subsilver2/template/index_body.html
* Since: 3.1.11-RC1
* Purpose: Add new statistic blocks before the Birthday block
index_body_block_birthday_append
===
* Locations:
@@ -787,6 +868,30 @@ mcp_ban_unban_before
* Since: 3.1.0-RC3
* Purpose: Add additional fields to the unban form in MCP
mcp_forum_actions_after
===
* Locations:
+ styles/prosilver/template/mcp_forum.html
+ styles/subsilver2/template/mcp_forum.html
* Since: 3.1.11-RC1
* Purpose: Add some information after actions fieldset
mcp_forum_actions_append
===
* Locations:
+ styles/prosilver/template/mcp_forum.html
+ styles/subsilver2/template/mcp_forum.html
* Since: 3.1.11-RC1
* Purpose: Add additional options to actions select
mcp_forum_actions_before
===
* Locations:
+ styles/prosilver/template/mcp_forum.html
+ styles/subsilver2/template/mcp_forum.html
* Since: 3.1.11-RC1
* Purpose: Add some information before actions fieldset
mcp_forum_topic_title_before
===
* Locations:
@@ -843,6 +948,14 @@ mcp_front_latest_unapproved_before
* Since: 3.1.3-RC1
* Purpose: Add content before latest unapproved posts list
mcp_move_before
===
* Locations:
+ styles/prosilver/template/mcp_move.html
+ styles/subsilver2/template/mcp_move.html
* Since: 3.1.10-RC1
* Purpose: Add content before move topic/post form
mcp_post_additional_options
===
* Locations:
@@ -867,6 +980,36 @@ mcp_topic_options_before
* Since: 3.1.6-RC1
* Purpose: Add some options (field, checkbox, ...) before the subject field when split a subject
mcp_topic_postrow_post_details_after
===
* Locations:
+ styles/prosilver/template/mcp_topic.html
+ styles/subsilver2/template/mcp_topic.html
* Since: 3.1.10-RC1
* Purpose: Add content after post details in topic moderation
mcp_topic_postrow_post_details_before
===
* Locations:
+ styles/prosilver/template/mcp_topic.html
+ styles/subsilver2/template/mcp_topic.html
* Since: 3.1.10-RC1
* Purpose: Add content before post details in topic moderation
mcp_topic_postrow_post_subject_after
===
* Locations:
+ styles/prosilver/template/mcp_topic.html
* Since: 3.1.11-RC1
* Purpose: Add content after post subject in topic moderation
mcp_topic_postrow_post_subject_before
===
* Locations:
+ styles/prosilver/template/mcp_topic.html
* Since: 3.1.11-RC1
* Purpose: Add content before post subject in topic moderation
mcp_topic_topic_title_after
===
* Locations:
@@ -951,6 +1094,14 @@ memberlist_body_username_prepend
* Purpose: Add information before every username in the memberlist. Works in
all display modes (leader, group and normal memberlist).
memberlist_email_before
===
* Locations:
+ styles/prosilver/template/memberlist_email.html
+ styles/subsilver2/template/memberlist_email.html
* Since: 3.1.10-RC1
* Purpose: Allow adding customizations before the memberlist_email form.
memberlist_search_fields_after
===
* Locations:
@@ -975,6 +1126,22 @@ memberlist_search_sorting_options_before
* Since: 3.1.2-RC1
* Purpose: Add information before the search sorting options field.
memberlist_team_username_append
===
* Locations:
+ styles/prosilver/template/memberlist_team.html
+ styles/subsilver2/template/memberlist_team.html
* Since: 3.1.11-RC1
* Purpose: Append information to username of team member
memberlist_team_username_prepend
===
* Locations:
+ styles/prosilver/template/memberlist_team.html
+ styles/subsilver2/template/memberlist_team.html
* Since: 3.1.11-RC1
* Purpose: Add information before team user username
memberlist_view_contact_after
===
* Locations:
@@ -1336,6 +1503,20 @@ overall_header_head_append
* Since: 3.1.0-a1
* Purpose: Add asset calls directly before the `</head>` tag
overall_header_headerbar_after
===
* Locations:
+ styles/prosilver/template/overall_header.html
* Since: 3.1.10-RC1
* Purpose: Add content at the end of the headerbar
overall_header_headerbar_before
===
* Locations:
+ styles/prosilver/template/overall_header.html
* Since: 3.1.10-RC1
* Purpose: Add content at the beginning of the headerbar
overall_header_navbar_before
===
* Locations:
@@ -1384,6 +1565,13 @@ overall_header_page_body_before
* Since: 3.1.0-b3
* Purpose: Add content after the page-header, but before the page-body
overall_header_searchbox_after
===
* Locations:
+ styles/prosilver/template/overall_header.html
* Since: 3.1.11-RC1
* Purpose: Add content after the search box in the header
overall_header_searchbox_before
===
* Locations:
@@ -1487,6 +1675,14 @@ posting_editor_subject_after
* Since: 3.1.0-a2
* Purpose: Add field (e.g. textbox) to the posting screen after the subject
posting_editor_subject_append
===
* Locations:
+ styles/prosilver/template/posting_editor.html
+ styles/subsilver2/template/posting_body.html
* Since: 3.1.10-RC1
* Purpose: Add field, text, etc. to the posting after the subject text box
posting_editor_subject_before
===
* Locations:
@@ -1495,6 +1691,14 @@ posting_editor_subject_before
* Since: 3.1.0-a2
* Purpose: Add field (e.g. textbox) to the posting screen before the subject
posting_editor_subject_prepend
===
* Locations:
+ styles/prosilver/template/posting_editor.html
+ styles/subsilver2/template/posting_body.html
* Since: 3.1.10-RC1
* Purpose: Add field, text, etc. to the posting before the subject text box
posting_editor_submit_buttons
===
* Locations:
@@ -1556,6 +1760,22 @@ posting_preview_poll_after
* Since: 3.1.7-RC1
* Purpose: Add content after the poll preview block
posting_topic_review_row_post_details_after
===
* Locations:
+ styles/prosilver/template/posting_topic_review.html
+ styles/subsilver2/template/posting_topic_review.html
* Since: 3.1.10-RC1
* Purpose: Add content after post details in topic review
posting_topic_review_row_post_details_before
===
* Locations:
+ styles/prosilver/template/posting_topic_review.html
+ styles/subsilver2/template/posting_topic_review.html
* Since: 3.1.10-RC1
* Purpose: Add content before post details in topic review
posting_topic_title_after
===
* Locations:
@@ -1794,6 +2014,13 @@ search_results_topic_before
* Since: 3.1.0-b4
* Purpose: Add data before search result topics
search_results_topic_title_after
===
* Locations:
+ styles/prosilver/template/search_results.html
* Since: 3.1.11-RC1
* Purpose: Add data after search results topic title
simple_footer_after
===
* Locations:
@@ -1853,6 +2080,18 @@ topiclist_row_append
* Changed: 3.1.6-RC1 Added event to mcp_forum.html
* Purpose: Add content into topic rows (inside the elements containing topic titles)
topiclist_row_topic_title_after
===
* Locations:
+ styles/prosilver/template/search_results.html
+ styles/prosilver/template/viewforum_body.html
+ styles/prosilver/template/mcp_forum.html
+ styles/subsilver2/template/search_results.html
+ styles/subsilver2/template/viewforum_body.html
+ styles/subsilver2/template/mcp_forum.html
* Since: 3.1.10-RC1
* Purpose: Add content into topic rows (after the elements containing the topic titles)
ucp_agreement_terms_after
===
* Locations:
@@ -1877,6 +2116,14 @@ ucp_main_front_user_activity_after
* Since: 3.1.6-RC1
* Purpose: Add content right after the user activity info viewing UCP front page
ucp_main_front_user_activity_append
===
* Locations:
+ styles/prosilver/template/ucp_main_front.html
+ styles/subsilver2/template/ucp_main_front.html
* Since: 3.1.11-RC1
* Purpose: Add content after last user activity info viewing UCP front page
ucp_main_front_user_activity_before
===
* Locations:
@@ -1885,6 +2132,14 @@ ucp_main_front_user_activity_before
* Since: 3.1.6-RC1
* Purpose: Add content right before the user activity info viewing UCP front page
ucp_main_front_user_activity_prepend
===
* Locations:
+ styles/prosilver/template/ucp_main_front.html
+ styles/subsilver2/template/ucp_main_front.html
* Since: 3.1.11-RC1
* Purpose: Add content before first user activity info viewing UCP front page
ucp_pm_history_post_buttons_after
===
* Locations:
@@ -1981,6 +2236,13 @@ ucp_pm_viewmessage_custom_fields_before
* Purpose: Add data before the custom fields on the user profile when viewing
a private message
ucp_pm_viewmessage_options_before
===
* Locations:
+ styles/prosilver/template/ucp_pm_viewmessage.html
* Since: 3.1.11-RC1
* Purpose: Add content right before display options
ucp_pm_viewmessage_post_buttons_after
===
* Locations:
@@ -2139,6 +2401,14 @@ ucp_profile_register_details_after
* Since: 3.1.4-RC1
* Purpose: Add options in profile page fieldset - after confirm password field.
ucp_register_buttons_before
===
* Locations:
+ styles/prosilver/template/ucp_register.html
+ styles/subsilver2/template/ucp_register.html
* Since: 3.1.11-RC1
* Purpose: Add content before buttons in registration form.
ucp_register_credentials_before
===
* Locations:
@@ -2227,6 +2497,14 @@ viewforum_body_topic_row_prepend
* Since: 3.1.7-RC1
* Purpose: Add content at the end of the topic list item.
viewforum_body_topicrow_row_before
===
* Locations:
+ styles/prosilver/template/viewforum_body.html
+ styles/subsilver2/template/viewforum_body.html
* Since: 3.1.10-RC1
* Purpose: Add content before list of topics.
viewforum_buttons_bottom_before
===
* Locations:

View File

@@ -1,7 +1,7 @@
# Sample lighttpd configuration file for phpBB.
# Global settings have been removed, copy them
# from your system's lighttpd.conf.
# Tested with lighttpd 1.4.26
# Tested with lighttpd 1.4.35
# If you want to use the X-Sendfile feature,
# uncomment the 'allow-x-send-file' for the fastcgi
@@ -16,6 +16,7 @@
server.modules += (
"mod_access",
"mod_fastcgi",
"mod_rewrite",
"mod_accesslog"
)
@@ -49,7 +50,15 @@ $HTTP["host"] == "www.myforums.com" {
$HTTP["url"] =~ "/\.htaccess|/\.htpasswd|/\.htgroups" {
url.access-deny = ( "" )
}
# The following 3 lines will rewrite URLs passed through the front controller
# to not require app.php in the actual URL. In other words, a controller is
# by default accessed at /app.php/my/controller, but can also be accessed at
# /my/controller
url.rewrite-if-not-file = (
"^/(.*)$" => "/app.php/$1"
)
fastcgi.server = ( ".php" =>
((
"bin-path" => "/usr/bin/php-cgi",

View File

@@ -262,7 +262,7 @@ else
* @var string mode Download mode
* @var bool thumbnail Flag indicating if the file is a thumbnail
* @since 3.1.6-RC1
* @change 3.1.7-RC1 Fixing wrong name of a variable (replacing "extension" by "extensions")
* @changed 3.1.7-RC1 Fixing wrong name of a variable (replacing "extension" by "extensions")
*/
$vars = array(
'attach_id',

View File

@@ -25,6 +25,7 @@ $auth->acl($user->data);
$user->setup();
$mode = request_var('mode', '');
$template_file = 'faq_body.html';
// Load the appropriate faq file
switch ($mode)
@@ -47,13 +48,16 @@ switch ($mode)
* @var string lang_file Language file containing the help data
* @var string ext_name Vendor and extension name where the help
* language file can be loaded from
* @var string template_file Template file name
* @since 3.1.4-RC1
* @changed 3.1.11-RC1 Added template_file var
*/
$vars = array(
'page_title',
'mode',
'lang_file',
'ext_name',
'template_file',
);
extract($phpbb_dispatcher->trigger_event('core.faq_mode_validation', compact($vars)));
@@ -106,7 +110,7 @@ $template->assign_vars(array(
page_header($l_title);
$template->set_filenames(array(
'body' => 'faq_body.html')
'body' => $template_file)
);
make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));

View File

@@ -84,6 +84,20 @@ $feed->open();
// Iterate through items
while ($row = $feed->get_item())
{
/**
* Event to modify the feed row
*
* @event core.feed_modify_feed_row
* @var int forum_id Forum ID
* @var string mode Feeds mode (forums|topics|topics_new|topics_active|news)
* @var array row Array with feed data
* @var int topic_id Topic ID
*
* @since 3.1.10-RC1
*/
$vars = array('forum_id', 'mode', 'row', 'topic_id');
extract($phpbb_dispatcher->trigger_event('core.feed_modify_feed_row', compact($vars)));
// BBCode options to correctly disable urls, smilies, bbcode...
if ($feed->get('options') === NULL)
{

View File

@@ -42,7 +42,7 @@ class acp_attachments
function main($id, $mode)
{
global $db, $user, $auth, $template, $cache, $phpbb_container;
global $db, $user, $auth, $template, $cache, $phpbb_container, $phpbb_dispatcher;
global $config, $phpbb_admin_path, $phpbb_root_path, $phpEx;
$this->id = $id;
@@ -162,6 +162,18 @@ class acp_attachments
)
);
/**
* Event to add and/or modify acp_attachement configurations
*
* @event core.acp_attachments_config_edit_add
* @var array display_vars Array of config values to display and process
* @var string mode Mode of the config page we are displaying
* @var boolean submit Do we display the form or process the submission
* @since 3.1.11-RC1
*/
$vars = array('display_vars', 'mode', 'submit');
extract($phpbb_dispatcher->trigger_event('core.acp_attachments_config_edit_add', compact($vars)));
$this->new_config = $config;
$cfg_array = (isset($_REQUEST['config'])) ? request_var('config', array('' => '')) : $this->new_config;
$error = array();

View File

@@ -26,7 +26,7 @@ if (!defined('IN_PHPBB'))
class acp_board
{
var $u_action;
var $new_config = array();
var $new_config;
function main($id, $mode)
{
@@ -318,9 +318,9 @@ class acp_board
'title' => 'ACP_COOKIE_SETTINGS',
'vars' => array(
'legend1' => 'ACP_COOKIE_SETTINGS',
'cookie_domain' => array('lang' => 'COOKIE_DOMAIN', 'validate' => 'string', 'type' => 'text::255', 'explain' => false),
'cookie_name' => array('lang' => 'COOKIE_NAME', 'validate' => 'string', 'type' => 'text::16', 'explain' => false),
'cookie_path' => array('lang' => 'COOKIE_PATH', 'validate' => 'string', 'type' => 'text::255', 'explain' => false),
'cookie_domain' => array('lang' => 'COOKIE_DOMAIN', 'validate' => 'string', 'type' => 'text::255', 'explain' => true),
'cookie_name' => array('lang' => 'COOKIE_NAME', 'validate' => 'string', 'type' => 'text::16', 'explain' => true),
'cookie_path' => array('lang' => 'COOKIE_PATH', 'validate' => 'string', 'type' => 'text::255', 'explain' => true),
'cookie_secure' => array('lang' => 'COOKIE_SECURE', 'validate' => 'bool', 'type' => 'radio:disabled_enabled', 'explain' => true),
)
);
@@ -449,11 +449,14 @@ class acp_board
'legend2' => 'SMTP_SETTINGS',
'smtp_delivery' => array('lang' => 'USE_SMTP', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'smtp_host' => array('lang' => 'SMTP_SERVER', 'validate' => 'string', 'type' => 'text:25:50', 'explain' => false),
'smtp_host' => array('lang' => 'SMTP_SERVER', 'validate' => 'string', 'type' => 'text:25:50', 'explain' => true),
'smtp_port' => array('lang' => 'SMTP_PORT', 'validate' => 'int:0:99999', 'type' => 'number:0:99999', 'explain' => true),
'smtp_auth_method' => array('lang' => 'SMTP_AUTH_METHOD', 'validate' => 'string', 'type' => 'select', 'method' => 'mail_auth_select', 'explain' => true),
'smtp_username' => array('lang' => 'SMTP_USERNAME', 'validate' => 'string', 'type' => 'text:25:255', 'explain' => true),
'smtp_password' => array('lang' => 'SMTP_PASSWORD', 'validate' => 'string', 'type' => 'password:25:255', 'explain' => true),
'smtp_verify_peer' => array('lang' => 'SMTP_VERIFY_PEER', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'smtp_verify_peer_name' => array('lang' => 'SMTP_VERIFY_PEER_NAME', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'smtp_allow_self_signed'=> array('lang' => 'SMTP_ALLOW_SELF_SIGNED','validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'legend3' => 'ACP_SUBMIT_CHANGES',
)
@@ -482,7 +485,7 @@ class acp_board
$user->add_lang($display_vars['lang']);
}
$this->new_config = $config;
$this->new_config = clone $config;
$cfg_array = (isset($_REQUEST['config'])) ? utf8_normalize_nfc(request_var('config', array('' => ''), true)) : $this->new_config;
$error = array();
@@ -1017,7 +1020,7 @@ class acp_board
$user->timezone = $old_tz;
return "<select name=\"dateoptions\" id=\"dateoptions\" onchange=\"if (this.value == 'custom') { document.getElementById('" . addslashes($key) . "').value = '" . addslashes($value) . "'; } else { document.getElementById('" . addslashes($key) . "').value = this.value; }\">$dateformat_options</select>
<input type=\"text\" name=\"config[$key]\" id=\"$key\" value=\"$value\" maxlength=\"30\" />";
<input type=\"text\" name=\"config[$key]\" id=\"$key\" value=\"$value\" maxlength=\"64\" />";
}
/**

View File

@@ -39,6 +39,9 @@ class acp_database
$action = request_var('action', '');
$submit = (isset($_POST['submit'])) ? true : false;
$form_key = 'acp_database';
add_form_key($form_key);
$template->assign_vars(array(
'MODE' => $mode
));
@@ -62,6 +65,11 @@ class acp_database
trigger_error($user->lang['TABLE_SELECT_ERROR'] . adm_back_link($this->u_action), E_USER_WARNING);
}
if (!check_form_key($form_key))
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
}
$store = $download = $structure = $schema_data = false;
if ($where == 'store_and_download' || $where == 'store')

View File

@@ -22,55 +22,81 @@ if (!defined('IN_PHPBB'))
class acp_extensions
{
var $u_action;
var $tpl_name;
var $page_title;
private $db;
private $config;
private $template;
private $user;
private $cache;
private $log;
private $request;
private $phpbb_dispatcher;
private $ext_manager;
function main()
{
// Start the page
global $config, $user, $template, $request, $phpbb_extension_manager, $db, $phpbb_root_path, $phpEx, $phpbb_log, $cache;
global $config, $user, $template, $request, $phpbb_extension_manager, $phpbb_root_path, $phpEx, $phpbb_log, $cache, $phpbb_dispatcher;
$this->db = $db;
$this->config = $config;
$this->template = $template;
$this->user = $user;
$this->cache = $cache;
$this->request = $request;
$this->log = $phpbb_log;
$this->phpbb_dispatcher = $phpbb_dispatcher;
$this->ext_manager = $phpbb_extension_manager;
$user->add_lang(array('install', 'acp/extensions', 'migrator'));
$this->user->add_lang(array('install', 'acp/extensions', 'migrator'));
$this->page_title = 'ACP_EXTENSIONS';
$action = $request->variable('action', 'list');
$ext_name = $request->variable('ext_name', '');
$action = $this->request->variable('action', 'list');
$ext_name = $this->request->variable('ext_name', '');
// What is a safe limit of execution time? Half the max execution time should be safe.
$safe_time_limit = (ini_get('max_execution_time') / 2);
$start_time = time();
// Cancel action
if ($request->is_set_post('cancel'))
if ($this->request->is_set_post('cancel'))
{
$action = 'list';
$ext_name = '';
}
if (in_array($action, array('enable', 'disable', 'delete_data')) && !check_link_hash($request->variable('hash', ''), $action . '.' . $ext_name))
if (in_array($action, array('enable', 'disable', 'delete_data')) && !check_link_hash($this->request->variable('hash', ''), $action . '.' . $ext_name))
{
trigger_error('FORM_INVALID', E_USER_WARNING);
}
/**
* Event to run a specific action on extension
*
* @event core.acp_extensions_run_action_before
* @var string action Action to run; if the event completes execution of the action, should be set to 'none'
* @var string u_action Url we are at
* @var string ext_name Extension name from request
* @var int safe_time_limit Safe limit of execution time
* @var int start_time Start time
* @var string tpl_name Template file to load
* @since 3.1.11-RC1
* @changed 3.2.1-RC1 Renamed to core.acp_extensions_run_action_before, added tpl_name, added action 'none'
*/
$u_action = $this->u_action;
$tpl_name = '';
$vars = array('action', 'u_action', 'ext_name', 'safe_time_limit', 'start_time', 'tpl_name');
extract($this->phpbb_dispatcher->trigger_event('core.acp_extensions_run_action_before', compact($vars)));
// In case they have been updated by the event
$this->u_action = $u_action;
$this->tpl_name = $tpl_name;
// If they've specified an extension, let's load the metadata manager and validate it.
if ($ext_name)
{
$md_manager = new \phpbb\extension\metadata_manager($ext_name, $config, $phpbb_extension_manager, $template, $user, $phpbb_root_path);
$md_manager = $this->ext_manager->create_extension_metadata_manager($ext_name, $this->template);
try
{
@@ -85,6 +111,10 @@ class acp_extensions
// What are we doing?
switch ($action)
{
case 'none':
// Intentionally empty, used by extensions that execute additional actions in the prior event
break;
case 'set_config_version_check_force_unstable':
$force_unstable = $this->request->variable('force_unstable', false);
@@ -94,12 +124,12 @@ class acp_extensions
'force_unstable' => $force_unstable,
));
confirm_box(false, $user->lang('EXTENSION_FORCE_UNSTABLE_CONFIRM'), $s_hidden_fields);
confirm_box(false, $this->user->lang('EXTENSION_FORCE_UNSTABLE_CONFIRM'), $s_hidden_fields);
}
else
{
$config->set('extension_force_unstable', false);
trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
$this->config->set('extension_force_unstable', false);
trigger_error($this->user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
}
break;
@@ -107,17 +137,17 @@ class acp_extensions
default:
if (confirm_box(true))
{
$config->set('extension_force_unstable', true);
trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
$this->config->set('extension_force_unstable', true);
trigger_error($this->user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
}
$this->list_enabled_exts($phpbb_extension_manager);
$this->list_disabled_exts($phpbb_extension_manager);
$this->list_available_exts($phpbb_extension_manager);
$this->list_enabled_exts();
$this->list_disabled_exts();
$this->list_available_exts();
$this->template->assign_vars(array(
'U_VERSIONCHECK_FORCE' => $this->u_action . '&amp;action=list&amp;versioncheck_force=1',
'FORCE_UNSTABLE' => $config['extension_force_unstable'],
'FORCE_UNSTABLE' => $this->config['extension_force_unstable'],
'U_ACTION' => $this->u_action,
));
@@ -125,30 +155,29 @@ class acp_extensions
break;
case 'enable_pre':
if (!$md_manager->validate_dir())
try
{
trigger_error($user->lang['EXTENSION_DIR_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
$md_manager->validate_enable();
}
catch (\phpbb\extension\exception $e)
{
trigger_error($e . adm_back_link($this->u_action), E_USER_WARNING);
}
if (!$md_manager->validate_enable())
{
trigger_error($user->lang['EXTENSION_NOT_AVAILABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
}
$extension = $phpbb_extension_manager->get_extension($ext_name);
$extension = $this->ext_manager->get_extension($ext_name);
if (!$extension->is_enableable())
{
trigger_error($user->lang['EXTENSION_NOT_ENABLEABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
trigger_error($this->user->lang['EXTENSION_NOT_ENABLEABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
}
if ($phpbb_extension_manager->is_enabled($ext_name))
if ($this->ext_manager->is_enabled($ext_name))
{
redirect($this->u_action);
}
$this->tpl_name = 'acp_ext_enable';
$template->assign_vars(array(
$this->template->assign_vars(array(
'PRE' => true,
'L_CONFIRM_MESSAGE' => $this->user->lang('EXTENSION_ENABLE_CONFIRM', $md_manager->get_metadata('display-name')),
'U_ENABLE' => $this->u_action . '&amp;action=enable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('enable.' . $ext_name),
@@ -156,57 +185,65 @@ class acp_extensions
break;
case 'enable':
if (!$md_manager->validate_dir())
try
{
trigger_error($user->lang['EXTENSION_DIR_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
$md_manager->validate_enable();
}
catch (\phpbb\extension\exception $e)
{
trigger_error($e . adm_back_link($this->u_action), E_USER_WARNING);
}
if (!$md_manager->validate_enable())
{
trigger_error($user->lang['EXTENSION_NOT_AVAILABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
}
$extension = $phpbb_extension_manager->get_extension($ext_name);
$extension = $this->ext_manager->get_extension($ext_name);
if (!$extension->is_enableable())
{
trigger_error($user->lang['EXTENSION_NOT_ENABLEABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
trigger_error($this->user->lang['EXTENSION_NOT_ENABLEABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
}
try
{
while ($phpbb_extension_manager->enable_step($ext_name))
while ($this->ext_manager->enable_step($ext_name))
{
// Are we approaching the time limit? If so we want to pause the update and continue after refreshing
if ((time() - $start_time) >= $safe_time_limit)
{
$template->assign_var('S_NEXT_STEP', true);
$this->template->assign_var('S_NEXT_STEP', true);
meta_refresh(0, $this->u_action . '&amp;action=enable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('enable.' . $ext_name));
}
}
$this->log->add('admin', $user->data['user_id'], $user->ip, 'LOG_EXT_ENABLE', time(), array($ext_name));
// Update custom style for admin area
$this->template->set_custom_style(array(
array(
'name' => 'adm',
'ext_path' => 'adm/style/',
),
), array($phpbb_root_path . 'adm/style'));
$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_EXT_ENABLE', time(), array($ext_name));
}
catch (\phpbb\db\migration\exception $e)
{
$template->assign_var('MIGRATOR_ERROR', $e->getLocalisedMessage($user));
$this->template->assign_var('MIGRATOR_ERROR', $e->getLocalisedMessage($this->user));
}
$this->tpl_name = 'acp_ext_enable';
$template->assign_vars(array(
$this->template->assign_vars(array(
'U_RETURN' => $this->u_action . '&amp;action=list',
));
break;
case 'disable_pre':
if (!$phpbb_extension_manager->is_enabled($ext_name))
if (!$this->ext_manager->is_enabled($ext_name))
{
redirect($this->u_action);
}
$this->tpl_name = 'acp_ext_disable';
$template->assign_vars(array(
$this->template->assign_vars(array(
'PRE' => true,
'L_CONFIRM_MESSAGE' => $this->user->lang('EXTENSION_DISABLE_CONFIRM', $md_manager->get_metadata('display-name')),
'U_DISABLE' => $this->u_action . '&amp;action=disable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('disable.' . $ext_name),
@@ -214,38 +251,38 @@ class acp_extensions
break;
case 'disable':
if (!$phpbb_extension_manager->is_enabled($ext_name))
if (!$this->ext_manager->is_enabled($ext_name))
{
redirect($this->u_action);
}
while ($phpbb_extension_manager->disable_step($ext_name))
while ($this->ext_manager->disable_step($ext_name))
{
// Are we approaching the time limit? If so we want to pause the update and continue after refreshing
if ((time() - $start_time) >= $safe_time_limit)
{
$template->assign_var('S_NEXT_STEP', true);
$this->template->assign_var('S_NEXT_STEP', true);
meta_refresh(0, $this->u_action . '&amp;action=disable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('disable.' . $ext_name));
}
}
$this->log->add('admin', $user->data['user_id'], $user->ip, 'LOG_EXT_DISABLE', time(), array($ext_name));
$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_EXT_DISABLE', time(), array($ext_name));
$this->tpl_name = 'acp_ext_disable';
$template->assign_vars(array(
$this->template->assign_vars(array(
'U_RETURN' => $this->u_action . '&amp;action=list',
));
break;
case 'delete_data_pre':
if ($phpbb_extension_manager->is_enabled($ext_name))
if ($this->ext_manager->is_enabled($ext_name))
{
redirect($this->u_action);
}
$this->tpl_name = 'acp_ext_delete_data';
$template->assign_vars(array(
$this->template->assign_vars(array(
'PRE' => true,
'L_CONFIRM_MESSAGE' => $this->user->lang('EXTENSION_DELETE_DATA_CONFIRM', $md_manager->get_metadata('display-name')),
'U_PURGE' => $this->u_action . '&amp;action=delete_data&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('delete_data.' . $ext_name),
@@ -253,33 +290,33 @@ class acp_extensions
break;
case 'delete_data':
if ($phpbb_extension_manager->is_enabled($ext_name))
if ($this->ext_manager->is_enabled($ext_name))
{
redirect($this->u_action);
}
try
{
while ($phpbb_extension_manager->purge_step($ext_name))
while ($this->ext_manager->purge_step($ext_name))
{
// Are we approaching the time limit? If so we want to pause the update and continue after refreshing
if ((time() - $start_time) >= $safe_time_limit)
{
$template->assign_var('S_NEXT_STEP', true);
$this->template->assign_var('S_NEXT_STEP', true);
meta_refresh(0, $this->u_action . '&amp;action=delete_data&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('delete_data.' . $ext_name));
}
}
$this->log->add('admin', $user->data['user_id'], $user->ip, 'LOG_EXT_PURGE', time(), array($ext_name));
$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_EXT_PURGE', time(), array($ext_name));
}
catch (\phpbb\db\migration\exception $e)
{
$template->assign_var('MIGRATOR_ERROR', $e->getLocalisedMessage($user));
$this->template->assign_var('MIGRATOR_ERROR', $e->getLocalisedMessage($this->user));
}
$this->tpl_name = 'acp_ext_delete_data';
$template->assign_vars(array(
$this->template->assign_vars(array(
'U_RETURN' => $this->u_action . '&amp;action=list',
));
break;
@@ -290,28 +327,25 @@ class acp_extensions
try
{
$updates_available = $this->version_check($md_manager, $request->variable('versioncheck_force', false));
$updates_available = $this->version_check($md_manager, $this->request->variable('versioncheck_force', false));
$template->assign_vars(array(
$this->template->assign_vars(array(
'S_UP_TO_DATE' => empty($updates_available),
'S_VERSIONCHECK' => true,
'UP_TO_DATE_MSG' => $this->user->lang(empty($updates_available) ? 'UP_TO_DATE' : 'NOT_UP_TO_DATE', $md_manager->get_metadata('display-name')),
));
foreach ($updates_available as $branch => $version_data)
{
$template->assign_block_vars('updates_available', $version_data);
}
$this->template->assign_block_vars('updates_available', $updates_available);
}
catch (\RuntimeException $e)
{
$template->assign_vars(array(
$this->template->assign_vars(array(
'S_VERSIONCHECK_STATUS' => $e->getCode(),
'VERSIONCHECK_FAIL_REASON' => ($e->getMessage() !== $user->lang('VERSIONCHECK_FAIL')) ? $e->getMessage() : '',
'VERSIONCHECK_FAIL_REASON' => ($e->getMessage() !== $this->user->lang('VERSIONCHECK_FAIL')) ? $e->getMessage() : '',
));
}
$template->assign_vars(array(
$this->template->assign_vars(array(
'U_BACK' => $this->u_action . '&amp;action=list',
'U_VERSIONCHECK_FORCE' => $this->u_action . '&amp;action=details&amp;versioncheck_force=1&amp;ext_name=' . urlencode($md_manager->get_metadata('name')),
));
@@ -319,21 +353,41 @@ class acp_extensions
$this->tpl_name = 'acp_ext_details';
break;
}
/**
* Event to run after a specific action on extension has completed
*
* @event core.acp_extensions_run_action_after
* @var string action Action that has run
* @var string u_action Url we are at
* @var string ext_name Extension name from request
* @var int safe_time_limit Safe limit of execution time
* @var int start_time Start time
* @var string tpl_name Template file to load
* @since 3.1.11-RC1
*/
$u_action = $this->u_action;
$tpl_name = $this->tpl_name;
$vars = array('action', 'u_action', 'ext_name', 'safe_time_limit', 'start_time', 'tpl_name');
extract($this->phpbb_dispatcher->trigger_event('core.acp_extensions_run_action_after', compact($vars)));
// In case they have been updated by the event
$this->u_action = $u_action;
$this->tpl_name = $tpl_name;
}
/**
* Lists all the enabled extensions and dumps to the template
*
* @param $phpbb_extension_manager An instance of the extension manager
* @return null
*/
public function list_enabled_exts(\phpbb\extension\manager $phpbb_extension_manager)
public function list_enabled_exts()
{
$enabled_extension_meta_data = array();
foreach ($phpbb_extension_manager->all_enabled() as $name => $location)
foreach ($this->ext_manager->all_enabled() as $name => $location)
{
$md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, $this->template);
$md_manager = $this->ext_manager->create_extension_metadata_manager($name, $this->template);
try
{
@@ -381,16 +435,15 @@ class acp_extensions
/**
* Lists all the disabled extensions and dumps to the template
*
* @param $phpbb_extension_manager An instance of the extension manager
* @return null
*/
public function list_disabled_exts(\phpbb\extension\manager $phpbb_extension_manager)
public function list_disabled_exts()
{
$disabled_extension_meta_data = array();
foreach ($phpbb_extension_manager->all_disabled() as $name => $location)
foreach ($this->ext_manager->all_disabled() as $name => $location)
{
$md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, $this->template);
$md_manager = $this->ext_manager->create_extension_metadata_manager($name, $this->template);
try
{
@@ -439,18 +492,17 @@ class acp_extensions
/**
* Lists all the available extensions and dumps to the template
*
* @param $phpbb_extension_manager An instance of the extension manager
* @return null
*/
public function list_available_exts(\phpbb\extension\manager $phpbb_extension_manager)
public function list_available_exts()
{
$uninstalled = array_diff_key($phpbb_extension_manager->all_available(), $phpbb_extension_manager->all_configured());
$uninstalled = array_diff_key($this->ext_manager->all_available(), $this->ext_manager->all_configured());
$available_extension_meta_data = array();
foreach ($uninstalled as $name => $location)
{
$md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, $this->template);
$md_manager = $this->ext_manager->create_extension_metadata_manager($name, $this->template);
try
{
@@ -519,7 +571,7 @@ class acp_extensions
* @param \phpbb\extension\metadata_manager $md_manager The metadata manager for the version to check.
* @param bool $force_update Ignores cached data. Defaults to false.
* @param bool $force_cache Force the use of the cache. Override $force_update.
* @return string
* @return array
* @throws RuntimeException
*/
protected function version_check(\phpbb\extension\metadata_manager $md_manager, $force_update = false, $force_cache = false)
@@ -538,7 +590,7 @@ class acp_extensions
$version_helper->set_file_location($version_check['host'], $version_check['directory'], $version_check['filename'], isset($version_check['ssl']) ? $version_check['ssl'] : false);
$version_helper->force_stability($this->config['extension_force_unstable'] ? 'unstable' : null);
return $updates = $version_helper->get_suggested_updates($force_update, $force_cache);
return $version_helper->get_ext_update_on_branch($force_update, $force_cache);
}
/**

View File

@@ -842,9 +842,26 @@ class acp_forums
ORDER BY left_id";
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
$rowset = array();
while ($row = $db->sql_fetchrow($result))
{
do
$rowset[(int) $row['forum_id']] = $row;
}
$db->sql_freeresult($result);
/**
* Modify the forum list data
*
* @event core.acp_manage_forums_modify_forum_list
* @var array rowset Array with the forums list data
* @since 3.1.10-RC1
*/
$vars = array('rowset');
extract($phpbb_dispatcher->trigger_event('core.acp_manage_forums_modify_forum_list', compact($vars)));
if (!empty($rowset))
{
foreach ($rowset as $row)
{
$forum_type = $row['forum_type'];
@@ -888,7 +905,6 @@ class acp_forums
'U_SYNC' => $url . '&amp;action=sync')
);
}
while ($row = $db->sql_fetchrow($result));
}
else if ($this->parent_id)
{
@@ -904,7 +920,7 @@ class acp_forums
'U_SYNC' => $url . '&amp;action=sync')
);
}
$db->sql_freeresult($result);
unset($rowset);
$template->assign_vars(array(
'ERROR_MSG' => (sizeof($errors)) ? implode('<br />', $errors) : '',

View File

@@ -40,6 +40,10 @@ class acp_icons
$action = (isset($_POST['edit'])) ? 'edit' : $action;
$action = (isset($_POST['import'])) ? 'import' : $action;
$icon_id = request_var('id', 0);
$submit = $request->is_set_post('submit', false);
$form_key = 'acp_icons';
add_form_key($form_key);
$mode = ($mode == 'smilies') ? 'smilies' : 'icons';
@@ -325,6 +329,11 @@ class acp_icons
case 'create':
case 'modify':
if (!check_form_key($form_key))
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
}
// Get items to create/modify
$images = (isset($_POST['image'])) ? array_keys(request_var('image', array('' => 0))) : array();
@@ -513,6 +522,11 @@ class acp_icons
{
$order = 0;
if (!check_form_key($form_key))
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
}
if (!($pak_ary = @file($phpbb_root_path . $img_path . '/' . $pak)))
{
trigger_error($user->lang['PAK_FILE_NOT_READABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
@@ -698,7 +712,7 @@ class acp_icons
$template->assign_vars(array(
'MESSAGE_TITLE' => $user->lang['EXPORT_' . $lang],
'MESSAGE_TEXT' => sprintf($user->lang['EXPORT_' . $lang . '_EXPLAIN'], '<a href="' . $this->u_action . '&amp;action=send">', '</a>'),
'MESSAGE_TEXT' => sprintf($user->lang['EXPORT_' . $lang . '_EXPLAIN'], '<a href="' . $this->u_action . '&amp;action=send&amp;hash=' . generate_link_hash('acp_icons') . '">', '</a>'),
'S_USER_NOTICE' => true,
)
@@ -710,6 +724,11 @@ class acp_icons
case 'send':
if (!check_link_hash($request->variable('hash', ''), 'acp_icons'))
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
}
$sql = "SELECT *
FROM $table
ORDER BY {$fields}_order";
@@ -811,6 +830,11 @@ class acp_icons
case 'move_up':
case 'move_down':
if (!check_link_hash($request->variable('hash', ''), 'acp_icons'))
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
}
// Get current order id...
$sql = "SELECT {$fields}_order as current_order
FROM $table
@@ -928,8 +952,8 @@ class acp_icons
'EMOTION' => (isset($row['emotion'])) ? $row['emotion'] : '',
'U_EDIT' => $this->u_action . '&amp;action=edit&amp;id=' . $row[$fields . '_id'],
'U_DELETE' => $this->u_action . '&amp;action=delete&amp;id=' . $row[$fields . '_id'],
'U_MOVE_UP' => $this->u_action . '&amp;action=move_up&amp;id=' . $row[$fields . '_id'] . '&amp;start=' . $pagination_start,
'U_MOVE_DOWN' => $this->u_action . '&amp;action=move_down&amp;id=' . $row[$fields . '_id'] . '&amp;start=' . $pagination_start,
'U_MOVE_UP' => $this->u_action . '&amp;action=move_up&amp;id=' . $row[$fields . '_id'] . '&amp;start=' . $pagination_start . '&amp;hash=' . generate_link_hash('acp_icons'),
'U_MOVE_DOWN' => $this->u_action . '&amp;action=move_down&amp;id=' . $row[$fields . '_id'] . '&amp;start=' . $pagination_start . '&amp;hash=' . generate_link_hash('acp_icons'),
));
if (!$spacer && !$row['display_on_posting'])

View File

@@ -50,13 +50,16 @@ class acp_jabber
$this->tpl_name = 'acp_jabber';
$this->page_title = 'ACP_JABBER_SETTINGS';
$jab_enable = request_var('jab_enable', (bool) $config['jab_enable']);
$jab_host = request_var('jab_host', (string) $config['jab_host']);
$jab_port = request_var('jab_port', (int) $config['jab_port']);
$jab_username = request_var('jab_username', (string) $config['jab_username']);
$jab_password = request_var('jab_password', (string) $config['jab_password']);
$jab_package_size = request_var('jab_package_size', (int) $config['jab_package_size']);
$jab_use_ssl = request_var('jab_use_ssl', (bool) $config['jab_use_ssl']);
$jab_enable = request_var('jab_enable', (bool) $config['jab_enable']);
$jab_host = request_var('jab_host', (string) $config['jab_host']);
$jab_port = request_var('jab_port', (int) $config['jab_port']);
$jab_username = request_var('jab_username', (string) $config['jab_username']);
$jab_password = request_var('jab_password', (string) $config['jab_password']);
$jab_package_size = request_var('jab_package_size', (int) $config['jab_package_size']);
$jab_use_ssl = request_var('jab_use_ssl', (bool) $config['jab_use_ssl']);
$jab_verify_peer = request_var('jab_verify_peer', (bool) $config['jab_verify_peer']);
$jab_verify_peer_name = request_var('jab_verify_peer_name', (bool) $config['jab_verify_peer_name']);
$jab_allow_self_signed = request_var('jab_allow_self_signed', (bool) $config['jab_allow_self_signed']);
$form_name = 'acp_jabber';
add_form_key($form_name);
@@ -76,7 +79,7 @@ class acp_jabber
// Is this feature enabled? Then try to establish a connection
if ($jab_enable)
{
$jabber = new jabber($jab_host, $jab_port, $jab_username, $jab_password, $jab_use_ssl);
$jabber = new jabber($jab_host, $jab_port, $jab_username, $jab_password, $jab_use_ssl, $jab_verify_peer, $jab_verify_peer_name, $jab_allow_self_signed);
if (!$jabber->connect())
{
@@ -116,6 +119,9 @@ class acp_jabber
}
set_config('jab_package_size', $jab_package_size);
set_config('jab_use_ssl', $jab_use_ssl);
set_config('jab_verify_peer', $jab_verify_peer);
set_config('jab_verify_peer_name', $jab_verify_peer_name);
set_config('jab_allow_self_signed', $jab_allow_self_signed);
add_log('admin', 'LOG_' . $log);
trigger_error($message . adm_back_link($this->u_action));
@@ -131,6 +137,9 @@ class acp_jabber
'JAB_PASSWORD' => $jab_password !== '' ? '********' : '',
'JAB_PACKAGE_SIZE' => $jab_package_size,
'JAB_USE_SSL' => $jab_use_ssl,
'JAB_VERIFY_PEER' => $jab_verify_peer,
'JAB_VERIFY_PEER_NAME' => $jab_verify_peer_name,
'JAB_ALLOW_SELF_SIGNED' => $jab_allow_self_signed,
'S_CAN_USE_SSL' => jabber::can_use_ssl(),
'S_GTALK_NOTE' => (!@function_exists('dns_get_record')) ? true : false,
));

View File

@@ -244,6 +244,11 @@ class acp_language
break;
case 'install':
if (!check_link_hash($request->variable('hash', ''), 'acp_language'))
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
}
$lang_iso = request_var('iso', '');
$lang_iso = basename($lang_iso);
@@ -423,7 +428,7 @@ class acp_language
'ISO' => htmlspecialchars($lang_ary['iso']),
'LOCAL_NAME' => htmlspecialchars($lang_ary['local_name'], ENT_COMPAT, 'UTF-8'),
'NAME' => htmlspecialchars($lang_ary['name'], ENT_COMPAT, 'UTF-8'),
'U_INSTALL' => $this->u_action . '&amp;action=install&amp;iso=' . urlencode($lang_ary['iso']))
'U_INSTALL' => $this->u_action . '&amp;action=install&amp;iso=' . urlencode($lang_ary['iso']) . '&amp;hash=' . generate_link_hash('acp_language'))
);
}
}

View File

@@ -421,23 +421,33 @@ class acp_main
// Version check
$user->add_lang('install');
if ($auth->acl_get('a_server') && version_compare(PHP_VERSION, '5.3.3', '<'))
if ($auth->acl_get('a_server') && version_compare(PHP_VERSION, '5.4.0', '<'))
{
$template->assign_vars(array(
'S_PHP_VERSION_OLD' => true,
'L_PHP_VERSION_OLD' => sprintf($user->lang['PHP_VERSION_OLD'], '<a href="https://www.phpbb.com/community/viewtopic.php?f=14&amp;t=2152375">', '</a>'),
'L_PHP_VERSION_OLD' => sprintf($user->lang['PHP_VERSION_OLD'], PHP_VERSION, '5.4.0', '<a href="https://www.phpbb.com/support/docs/en/3.2/ug/quickstart/requirements">', '</a>'),
));
}
if ($auth->acl_get('a_board'))
{
/** @var \phpbb\version_helper $version_helper */
$version_helper = $phpbb_container->get('version_helper');
try
{
$recheck = $request->variable('versioncheck_force', false);
$updates_available = $version_helper->get_suggested_updates($recheck);
$updates_available = $version_helper->get_update_on_branch($recheck);
$upgrades_available = $version_helper->get_suggested_updates();
if (!empty($upgrades_available))
{
$upgrades_available = array_pop($upgrades_available);
}
$template->assign_var('S_VERSION_UP_TO_DATE', empty($updates_available));
$template->assign_vars(array(
'S_VERSION_UP_TO_DATE' => empty($updates_available),
'S_VERSION_UPGRADEABLE' => !empty($upgrades_available),
'UPGRADE_INSTRUCTIONS' => !empty($upgrades_available) ? $user->lang('UPGRADE_INSTRUCTIONS', $upgrades_available['current'], $upgrades_available['announcement']) : false,
));
}
catch (\RuntimeException $e)
{
@@ -453,6 +463,12 @@ class acp_main
$template->assign_var('S_VERSION_UP_TO_DATE', true);
}
// Incomplete update?
if (phpbb_version_compare($config['version'], PHPBB_VERSION, '<'))
{
$template->assign_var('S_UPDATE_INCOMPLETE', true);
}
/**
* Notice admin
*

View File

@@ -46,6 +46,9 @@ class acp_modules
$user->add_lang('acp/modules');
$this->tpl_name = 'acp_modules';
$form_key = 'acp_modules';
add_form_key($form_key);
// module class
$this->module_class = $mode;
@@ -119,6 +122,11 @@ class acp_modules
trigger_error($user->lang['NO_MODULE_ID'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
}
if (!check_link_hash($request->variable('hash', ''), 'acp_modules'))
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
}
$sql = 'SELECT *
FROM ' . MODULES_TABLE . "
WHERE module_class = '" . $db->sql_escape($this->module_class) . "'
@@ -150,6 +158,11 @@ class acp_modules
trigger_error($user->lang['NO_MODULE_ID'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
}
if (!check_link_hash($request->variable('hash', ''), 'acp_modules'))
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
}
$sql = 'SELECT *
FROM ' . MODULES_TABLE . "
WHERE module_class = '" . $db->sql_escape($this->module_class) . "'
@@ -273,6 +286,11 @@ class acp_modules
if ($submit)
{
if (!check_form_key($form_key))
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
}
if (!$module_data['module_langname'])
{
trigger_error($user->lang['NO_MODULE_LANGNAME'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
@@ -460,12 +478,12 @@ class acp_modules
'S_ACP_MODULE_MANAGEMENT' => ($this->module_class == 'acp' && ($row['module_basename'] == 'modules' || $row['module_langname'] == 'ACP_MODULE_MANAGEMENT')) ? true : false,
'U_MODULE' => $this->u_action . '&amp;parent_id=' . $row['module_id'],
'U_MOVE_UP' => $url . '&amp;action=move_up',
'U_MOVE_DOWN' => $url . '&amp;action=move_down',
'U_MOVE_UP' => $url . '&amp;action=move_up&amp;hash=' . generate_link_hash('acp_modules'),
'U_MOVE_DOWN' => $url . '&amp;action=move_down&amp;hash=' . generate_link_hash('acp_modules'),
'U_EDIT' => $url . '&amp;action=edit',
'U_DELETE' => $url . '&amp;action=delete',
'U_ENABLE' => $url . '&amp;action=enable',
'U_DISABLE' => $url . '&amp;action=disable')
'U_ENABLE' => $url . '&amp;action=enable&amp;hash=' . generate_link_hash('acp_modules'),
'U_DISABLE' => $url . '&amp;action=disable&amp;hash=' . generate_link_hash('acp_modules'))
);
}
while ($row = $db->sql_fetchrow($result));
@@ -484,8 +502,8 @@ class acp_modules
'U_EDIT' => $url . '&amp;action=edit',
'U_DELETE' => $url . '&amp;action=delete',
'U_ENABLE' => $url . '&amp;action=enable',
'U_DISABLE' => $url . '&amp;action=disable')
'U_ENABLE' => $url . '&amp;action=enable&amp;hash=' . generate_link_hash('acp_modules'),
'U_DISABLE' => $url . '&amp;action=disable&amp;hash=' . generate_link_hash('acp_modules'))
);
}
$db->sql_freeresult($result);

View File

@@ -366,6 +366,11 @@ class acp_permission_roles
case 'move_up':
case 'move_down':
if (!check_link_hash($request->variable('hash', ''), 'acp_permission_roles'))
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
}
$sql = 'SELECT role_order
FROM ' . ACL_ROLES_TABLE . "
WHERE role_id = $role_id";
@@ -440,8 +445,8 @@ class acp_permission_roles
'U_EDIT' => $this->u_action . '&amp;action=edit&amp;role_id=' . $row['role_id'],
'U_REMOVE' => $this->u_action . '&amp;action=remove&amp;role_id=' . $row['role_id'],
'U_MOVE_UP' => $this->u_action . '&amp;action=move_up&amp;role_id=' . $row['role_id'],
'U_MOVE_DOWN' => $this->u_action . '&amp;action=move_down&amp;role_id=' . $row['role_id'],
'U_MOVE_UP' => $this->u_action . '&amp;action=move_up&amp;role_id=' . $row['role_id'] . '&amp;hash=' . generate_link_hash('acp_permission_roles'),
'U_MOVE_DOWN' => $this->u_action . '&amp;action=move_down&amp;role_id=' . $row['role_id'] . '&amp;hash=' . generate_link_hash('acp_permission_roles'),
'U_DISPLAY_ITEMS' => ($row['role_id'] == $display_item) ? '' : $this->u_action . '&amp;display_item=' . $row['role_id'] . '#assigned_to')
);

View File

@@ -755,6 +755,7 @@ class acp_permissions
$this->log_action($mode, 'add', $permission_type, $ug_type, $ug_id, $forum_id);
meta_refresh(5, $this->u_action);
trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action));
}
@@ -825,10 +826,12 @@ class acp_permissions
if ($mode == 'setting_forum_local' || $mode == 'setting_mod_local')
{
meta_refresh(5, $this->u_action . '&amp;forum_id[]=' . implode('&amp;forum_id[]=', $forum_ids));
trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action . '&amp;forum_id[]=' . implode('&amp;forum_id[]=', $forum_ids)));
}
else
{
meta_refresh(5, $this->u_action);
trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action));
}
}
@@ -899,10 +902,12 @@ class acp_permissions
if ($mode == 'setting_forum_local' || $mode == 'setting_mod_local')
{
meta_refresh(5, $this->u_action . '&amp;forum_id[]=' . implode('&amp;forum_id[]=', $forum_id));
trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action . '&amp;forum_id[]=' . implode('&amp;forum_id[]=', $forum_id)));
}
else
{
meta_refresh(5, $this->u_action);
trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action));
}
}

View File

@@ -53,6 +53,9 @@ class acp_profile
$error = array();
$s_hidden_fields = '';
$form_key = 'acp_profile';
add_form_key($form_key);
if (!$field_id && in_array($action, array('delete','activate', 'deactivate', 'move_up', 'move_down', 'edit')))
{
trigger_error($user->lang['NO_FIELD_ID'] . adm_back_link($this->u_action), E_USER_WARNING);
@@ -161,6 +164,11 @@ class acp_profile
case 'activate':
if (!check_link_hash($request->variable('hash', ''), 'acp_profile'))
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
}
$sql = 'SELECT lang_id
FROM ' . LANG_TABLE . "
WHERE lang_iso = '" . $db->sql_escape($config['default_lang']) . "'";
@@ -201,6 +209,11 @@ class acp_profile
case 'deactivate':
if (!check_link_hash($request->variable('hash', ''), 'acp_profile'))
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
}
$sql = 'UPDATE ' . PROFILE_FIELDS_TABLE . "
SET field_active = 0
WHERE field_id = $field_id";
@@ -230,6 +243,11 @@ class acp_profile
case 'move_up':
case 'move_down':
if (!check_link_hash($request->variable('hash', ''), 'acp_profile'))
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
}
$sql = 'SELECT field_order
FROM ' . PROFILE_FIELDS_TABLE . "
WHERE field_id = $field_id";
@@ -581,6 +599,11 @@ class acp_profile
{
if (($step == 3 && (sizeof($this->lang_defs['iso']) == 1 || $save)) || ($action == 'edit' && $save))
{
if (!check_form_key($form_key))
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
}
$this->save_profile_field($cp, $field_type, $action);
}
}
@@ -729,18 +752,22 @@ class acp_profile
$s_one_need_edit = true;
}
if (!isset($this->type_collection[$row['field_type']]))
{
continue;
}
$profile_field = $this->type_collection[$row['field_type']];
$template->assign_block_vars('fields', array(
'FIELD_IDENT' => $row['field_ident'],
'FIELD_TYPE' => $profile_field->get_name(),
'L_ACTIVATE_DEACTIVATE' => $user->lang[$active_lang],
'U_ACTIVATE_DEACTIVATE' => $this->u_action . "&amp;action=$active_value&amp;field_id=$id",
'U_ACTIVATE_DEACTIVATE' => $this->u_action . "&amp;action=$active_value&amp;field_id=$id" . '&amp;hash=' . generate_link_hash('acp_profile'),
'U_EDIT' => $this->u_action . "&amp;action=edit&amp;field_id=$id",
'U_TRANSLATE' => $this->u_action . "&amp;action=edit&amp;field_id=$id&amp;step=3",
'U_DELETE' => $this->u_action . "&amp;action=delete&amp;field_id=$id",
'U_MOVE_UP' => $this->u_action . "&amp;action=move_up&amp;field_id=$id",
'U_MOVE_DOWN' => $this->u_action . "&amp;action=move_down&amp;field_id=$id",
'U_MOVE_UP' => $this->u_action . "&amp;action=move_up&amp;field_id=$id" . '&amp;hash=' . generate_link_hash('acp_profile'),
'U_MOVE_DOWN' => $this->u_action . "&amp;action=move_down&amp;field_id=$id" . '&amp;hash=' . generate_link_hash('acp_profile'),
'S_NEED_EDIT' => $s_need_edit)
);

View File

@@ -282,6 +282,11 @@ class acp_reasons
case 'move_up':
case 'move_down':
if (!check_link_hash($request->variable('hash', ''), 'acp_reasons'))
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
}
$sql = 'SELECT reason_order
FROM ' . REPORTS_REASONS_TABLE . "
WHERE reason_id = $reason_id";
@@ -383,8 +388,8 @@ class acp_reasons
'U_EDIT' => $this->u_action . '&amp;action=edit&amp;id=' . $row['reason_id'],
'U_DELETE' => (!$other_reason) ? $this->u_action . '&amp;action=delete&amp;id=' . $row['reason_id'] : '',
'U_MOVE_UP' => $this->u_action . '&amp;action=move_up&amp;id=' . $row['reason_id'],
'U_MOVE_DOWN' => $this->u_action . '&amp;action=move_down&amp;id=' . $row['reason_id'])
'U_MOVE_UP' => $this->u_action . '&amp;action=move_up&amp;id=' . $row['reason_id'] . '&amp;hash=' . generate_link_hash('acp_reasons'),
'U_MOVE_DOWN' => $this->u_action . '&amp;action=move_down&amp;id=' . $row['reason_id'] . '&amp;hash=' . generate_link_hash('acp_reasons'))
);
}
$db->sql_freeresult($result);

View File

@@ -50,11 +50,16 @@ class acp_search
function settings($id, $mode)
{
global $db, $user, $auth, $template, $cache;
global $db, $user, $auth, $template, $cache, $request;
global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
$submit = (isset($_POST['submit'])) ? true : false;
if ($submit && !check_link_hash($request->variable('hash', ''), 'acp_search'))
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
}
$search_types = $this->get_search_types();
$settings = array(
@@ -226,13 +231,13 @@ class acp_search
'S_YES_SEARCH' => (bool) $config['load_search'],
'S_SETTINGS' => true,
'U_ACTION' => $this->u_action)
'U_ACTION' => $this->u_action . '&amp;hash=' . generate_link_hash('acp_search'))
);
}
function index($id, $mode)
{
global $db, $user, $auth, $template, $cache;
global $db, $user, $auth, $template, $cache, $request;
global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
$action = request_var('action', '');
@@ -244,6 +249,12 @@ class acp_search
$this->state = array();
$this->save_state();
}
$submit = $request->is_set_post('submit', false);
if (!check_link_hash($request->variable('hash', ''), 'acp_search') && in_array($action, array('create', 'delete')))
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
}
if ($action)
{
@@ -294,7 +305,7 @@ class acp_search
if (method_exists($this->search, 'delete_index'))
{
// pass a reference to myself so the $search object can make use of save_state() and attributes
if ($error = $this->search->delete_index($this, append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&mode=$mode&action=delete", false)))
if ($error = $this->search->delete_index($this, append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&mode=$mode&action=delete&hash=" . generate_link_hash('acp_search'), false)))
{
$this->state = array('');
$this->save_state();
@@ -339,7 +350,7 @@ class acp_search
$mtime = explode(' ', microtime());
$totaltime = $mtime[0] + $mtime[1] - $starttime;
$rows_per_second = $row_count / $totaltime;
meta_refresh(1, append_sid($this->u_action . '&amp;action=delete&amp;skip_rows=' . $post_counter));
meta_refresh(1, append_sid($this->u_action . '&amp;action=delete&amp;skip_rows=' . $post_counter . '&amp;hash=' . generate_link_hash('acp_search')));
trigger_error($user->lang('SEARCH_INDEX_DELETE_REDIRECT', (int) $row_count, $post_counter, $rows_per_second));
}
}
@@ -429,7 +440,7 @@ class acp_search
$mtime = explode(' ', microtime());
$totaltime = $mtime[0] + $mtime[1] - $starttime;
$rows_per_second = $row_count / $totaltime;
meta_refresh(1, append_sid($this->u_action . '&amp;action=create&amp;skip_rows=' . $post_counter));
meta_refresh(1, append_sid($this->u_action . '&amp;action=create&amp;skip_rows=' . $post_counter . '&amp;hash=' . generate_link_hash('acp_search')));
trigger_error($user->lang('SEARCH_INDEX_CREATE_REDIRECT', (int) $row_count, $post_counter) . $user->lang('SEARCH_INDEX_CREATE_REDIRECT_RATE', $rows_per_second));
}
}
@@ -508,7 +519,7 @@ class acp_search
$template->assign_vars(array(
'S_INDEX' => true,
'U_ACTION' => $this->u_action,
'U_ACTION' => $this->u_action . '&amp;hash=' . generate_link_hash('acp_search'),
'U_PROGRESS_BAR' => append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&amp;mode=$mode&amp;action=progress_bar"),
'UA_PROGRESS_BAR' => addslashes(append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&amp;mode=$mode&amp;action=progress_bar")),
));
@@ -517,7 +528,7 @@ class acp_search
{
$template->assign_vars(array(
'S_CONTINUE_INDEXING' => $this->state[1],
'U_CONTINUE_INDEXING' => $this->u_action . '&amp;action=' . $this->state[1],
'U_CONTINUE_INDEXING' => $this->u_action . '&amp;action=' . $this->state[1] . '&amp;hash=' . generate_link_hash('acp_search'),
'L_CONTINUE' => ($this->state[1] == 'create') ? $user->lang['CONTINUE_INDEXING'] : $user->lang['CONTINUE_DELETING_INDEX'],
'L_CONTINUE_EXPLAIN' => ($this->state[1] == 'create') ? $user->lang['CONTINUE_INDEXING_EXPLAIN'] : $user->lang['CONTINUE_DELETING_INDEX_EXPLAIN'])
);

View File

@@ -433,6 +433,9 @@ class acp_styles
trigger_error($this->user->lang['NO_MATCHING_STYLES_FOUND'] . adm_back_link($this->u_action), E_USER_WARNING);
}
// Read style configuration file
$style_cfg = $this->read_style_cfg($style['style_path']);
// Find all available parent styles
$list = $this->find_possible_parents($styles, $id);
@@ -579,6 +582,7 @@ class acp_styles
'STYLE_ID' => $style['style_id'],
'STYLE_NAME' => htmlspecialchars($style['style_name']),
'STYLE_PATH' => htmlspecialchars($style['style_path']),
'STYLE_VERSION' => htmlspecialchars($style_cfg['style_version']),
'STYLE_COPYRIGHT' => strip_tags($style['style_copyright']),
'STYLE_PARENT' => $style['style_parent_id'],
'S_STYLE_ACTIVE' => $style['style_active'],

View File

@@ -37,7 +37,12 @@ class acp_update
try
{
$recheck = $request->variable('versioncheck_force', false);
$updates_available = $version_helper->get_suggested_updates($recheck);
$updates_available = $version_helper->get_update_on_branch($recheck);
$upgrades_available = $version_helper->get_suggested_updates();
if (!empty($upgrades_available))
{
$upgrades_available = array_pop($upgrades_available);
}
}
catch (\RuntimeException $e)
{
@@ -46,12 +51,9 @@ class acp_update
$updates_available = array();
}
foreach ($updates_available as $branch => $version_data)
{
$template->assign_block_vars('updates_available', $version_data);
}
$template->assign_block_vars('updates_available', $updates_available);
$update_link = append_sid($phpbb_root_path . 'install/index.' . $phpEx, 'mode=update');
$update_link = append_sid($phpbb_root_path . 'install/');
$template->assign_vars(array(
'S_UP_TO_DATE' => empty($updates_available),
@@ -61,6 +63,20 @@ class acp_update
'CURRENT_VERSION' => $config['version'],
'UPDATE_INSTRUCTIONS' => sprintf($user->lang['UPDATE_INSTRUCTIONS'], $update_link),
'S_VERSION_UPGRADEABLE' => !empty($upgrades_available),
'UPGRADE_INSTRUCTIONS' => !empty($upgrades_available) ? $user->lang('UPGRADE_INSTRUCTIONS', $upgrades_available['current'], $upgrades_available['announcement']) : false,
));
// Incomplete update?
if (phpbb_version_compare($config['version'], PHPBB_VERSION, '<'))
{
$database_update_link = append_sid($phpbb_root_path . 'install/database_update.' . $phpEx);
$template->assign_vars(array(
'S_UPDATE_INCOMPLETE' => true,
'FILES_VERSION' => PHPBB_VERSION,
'INCOMPLETE_INSTRUCTIONS' => $user->lang('UPDATE_INCOMPLETE_EXPLAIN', $database_update_link),
));
}
}
}

View File

@@ -373,11 +373,6 @@ class acp_users
if ($user_row['user_type'] == USER_NORMAL)
{
user_active_flip('deactivate', $user_id, INACTIVE_REMIND);
$sql = 'UPDATE ' . USERS_TABLE . "
SET user_actkey = '" . $db->sql_escape($user_actkey) . "'
WHERE user_id = $user_id";
$db->sql_query($sql);
}
else
{
@@ -386,8 +381,18 @@ class acp_users
FROM ' . USERS_TABLE . '
WHERE user_id = ' . $user_id;
$result = $db->sql_query($sql);
$user_actkey = (string) $db->sql_fetchfield('user_actkey');
$user_activation_key = (string) $db->sql_fetchfield('user_actkey');
$db->sql_freeresult($result);
$user_actkey = empty($user_activation_key) ? $user_actkey : $user_activation_key;
}
if ($user_row['user_type'] == USER_NORMAL || empty($user_activation_key))
{
$sql = 'UPDATE ' . USERS_TABLE . "
SET user_actkey = '" . $db->sql_escape($user_actkey) . "'
WHERE user_id = $user_id";
$db->sql_query($sql);
}
$messenger = new messenger(false);
@@ -1924,7 +1929,7 @@ class acp_users
'S_FORM_ENCTYPE' => ' enctype="multipart/form-data"',
'L_AVATAR_EXPLAIN' => sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], $config['avatar_filesize'] / 1024),
'L_AVATAR_EXPLAIN' => $user->lang(($config['avatar_filesize'] == 0) ? 'AVATAR_EXPLAIN_NO_FILESIZE' : 'AVATAR_EXPLAIN', $config['avatar_max_width'], $config['avatar_max_height'], $config['avatar_filesize'] / 1024),
'S_AVATARS_ENABLED' => ($config['allow_avatar'] && $avatars_enabled),
));
@@ -2274,6 +2279,12 @@ class acp_users
{
trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action . '&amp;u=' . $user_id), E_USER_WARNING);
}
if (!check_link_hash($request->variable('hash', ''), 'acp_users'))
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
}
group_user_attributes($action, $group_id, $user_id);
if ($action == 'default')
@@ -2431,8 +2442,8 @@ class acp_users
{
$template->assign_block_vars('group', array(
'U_EDIT_GROUP' => append_sid("{$phpbb_admin_path}index.$phpEx", "i=groups&amp;mode=manage&amp;action=edit&amp;u=$user_id&amp;g={$data['group_id']}&amp;back_link=acp_users_groups"),
'U_DEFAULT' => $this->u_action . "&amp;action=default&amp;u=$user_id&amp;g=" . $data['group_id'],
'U_DEMOTE_PROMOTE' => $this->u_action . '&amp;action=' . (($data['group_leader']) ? 'demote' : 'promote') . "&amp;u=$user_id&amp;g=" . $data['group_id'],
'U_DEFAULT' => $this->u_action . "&amp;action=default&amp;u=$user_id&amp;g=" . $data['group_id'] . '&amp;hash=' . generate_link_hash('acp_users'),
'U_DEMOTE_PROMOTE' => $this->u_action . '&amp;action=' . (($data['group_leader']) ? 'demote' : 'promote') . "&amp;u=$user_id&amp;g=" . $data['group_id'] . '&amp;hash=' . generate_link_hash('acp_users'),
'U_DELETE' => $this->u_action . "&amp;action=delete&amp;u=$user_id&amp;g=" . $data['group_id'],
'U_APPROVE' => ($group_type == 'pending') ? $this->u_action . "&amp;action=approve&amp;u=$user_id&amp;g=" . $data['group_id'] : '',

View File

@@ -15,16 +15,31 @@ class acp_logs_info
{
function module()
{
global $phpbb_dispatcher;
$modes = array(
'admin' => array('title' => 'ACP_ADMIN_LOGS', 'auth' => 'acl_a_viewlogs', 'cat' => array('ACP_FORUM_LOGS')),
'mod' => array('title' => 'ACP_MOD_LOGS', 'auth' => 'acl_a_viewlogs', 'cat' => array('ACP_FORUM_LOGS')),
'users' => array('title' => 'ACP_USERS_LOGS', 'auth' => 'acl_a_viewlogs', 'cat' => array('ACP_FORUM_LOGS')),
'critical' => array('title' => 'ACP_CRITICAL_LOGS', 'auth' => 'acl_a_viewlogs', 'cat' => array('ACP_FORUM_LOGS')),
);
/**
* Event to add or modify ACP log modulemodes
*
* @event core.acp_logs_info_modify_modes
* @var array modes Array with modes info
* @since 3.1.11-RC1
* @since 3.2.1-RC1
*/
$vars = array('modes');
extract($phpbb_dispatcher->trigger_event('core.acp_logs_info_modify_modes', compact($vars)));
return array(
'filename' => 'acp_logs',
'title' => 'ACP_LOGGING',
'version' => '1.0.0',
'modes' => array(
'admin' => array('title' => 'ACP_ADMIN_LOGS', 'auth' => 'acl_a_viewlogs', 'cat' => array('ACP_FORUM_LOGS')),
'mod' => array('title' => 'ACP_MOD_LOGS', 'auth' => 'acl_a_viewlogs', 'cat' => array('ACP_FORUM_LOGS')),
'users' => array('title' => 'ACP_USERS_LOGS', 'auth' => 'acl_a_viewlogs', 'cat' => array('ACP_FORUM_LOGS')),
'critical' => array('title' => 'ACP_CRITICAL_LOGS', 'auth' => 'acl_a_viewlogs', 'cat' => array('ACP_FORUM_LOGS')),
),
'modes' => $modes,
);
}

View File

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

View File

@@ -2233,13 +2233,6 @@ function generate_board_url($without_script_path = false)
global $config, $user, $request;
$server_name = $user->host;
$server_port = $request->server('SERVER_PORT', 0);
$forwarded_proto = $request->server('HTTP_X_FORWARDED_PROTO');
if (!empty($forwarded_proto) && $forwarded_proto === 'https')
{
$server_port = 443;
}
// Forcing server vars is the only way to specify/override the protocol
if ($config['force_server_vars'] || !$server_name)
@@ -2254,6 +2247,13 @@ function generate_board_url($without_script_path = false)
}
else
{
$server_port = $request->server('SERVER_PORT', 0);
$forwarded_proto = $request->server('HTTP_X_FORWARDED_PROTO');
if (!empty($forwarded_proto) && $forwarded_proto === 'https')
{
$server_port = 443;
}
// Do not rely on cookie_secure, users seem to think that it means a secured cookie instead of an encrypted connection
$cookie_secure = $request->is_secure() ? 1 : 0;
$url = (($cookie_secure) ? 'https://' : 'http://') . $server_name;
@@ -2609,8 +2609,9 @@ function check_link_hash($token, $link_name)
/**
* Add a secret token to the form (requires the S_FORM_TOKEN template variable)
* @param string $form_name The name of the form; has to match the name used in check_form_key, otherwise no restrictions apply
* @param string $template_variable_suffix A string that is appended to the name of the template variable to which the form elements are assigned
*/
function add_form_key($form_name)
function add_form_key($form_name, $template_variable_suffix = '')
{
global $config, $template, $user, $phpbb_dispatcher;
@@ -2627,13 +2628,15 @@ function add_form_key($form_name)
* Perform additional actions on creation of the form token
*
* @event core.add_form_key
* @var string form_name The form name
* @var int now Current time timestamp
* @var string s_fields Generated hidden fields
* @var string token Form token
* @var string token_sid User session ID
* @var string form_name The form name
* @var int now Current time timestamp
* @var string s_fields Generated hidden fields
* @var string token Form token
* @var string token_sid User session ID
* @var string template_variable_suffix The string that is appended to template variable name
*
* @since 3.1.0-RC3
* @changed 3.1.11-RC1 Added template_variable_suffix
*/
$vars = array(
'form_name',
@@ -2641,12 +2644,11 @@ function add_form_key($form_name)
's_fields',
'token',
'token_sid',
'template_variable_suffix',
);
extract($phpbb_dispatcher->trigger_event('core.add_form_key', compact($vars)));
$template->assign_vars(array(
'S_FORM_TOKEN' => $s_fields,
));
$template->assign_var('S_FORM_TOKEN' . $template_variable_suffix, $s_fields);
}
/**
@@ -2774,7 +2776,7 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo
$u_action .= ((strpos($u_action, '?') === false) ? '?' : '&amp;') . 'confirm_key=' . $confirm_key;
$template->assign_vars(array(
'MESSAGE_TITLE' => (!isset($user->lang[$title])) ? $user->lang['CONFIRM'] : $user->lang[$title],
'MESSAGE_TITLE' => (!isset($user->lang[$title])) ? $user->lang['CONFIRM'] : $user->lang($title, 1),
'MESSAGE_TEXT' => (!isset($user->lang[$title . '_CONFIRM'])) ? $title : $user->lang[$title . '_CONFIRM'],
'YES_VALUE' => $user->lang['YES'],
@@ -4334,6 +4336,30 @@ function obtain_users_online_string($online_users, $item_id = 0, $item = 'forum'
}
}
}
/**
* Modify online userlist data
*
* @event core.obtain_users_online_string_before_modify
* @var array online_users Array with online users data
* from obtain_users_online()
* @var int item_id Restrict online users to item id
* @var string item Restrict online users to a certain
* session item, e.g. forum for
* session_forum_id
* @var array rowset Array with online users data
* @var array user_online_link Array with online users items (usernames)
* @since 3.1.10-RC1
*/
$vars = array(
'online_users',
'item_id',
'item',
'rowset',
'user_online_link',
);
extract($phpbb_dispatcher->trigger_event('core.obtain_users_online_string_before_modify', compact($vars)));
$online_userlist = implode(', ', $user_online_link);
if (!$online_userlist)

View File

@@ -65,7 +65,7 @@ function recalc_nested_sets(&$new_id, $pkey, $table, $parent_id = 0, $where = ar
*/
function make_forum_select($select_id = false, $ignore_id = false, $ignore_acl = false, $ignore_nonpost = false, $ignore_emptycat = true, $only_acl_post = false, $return_array = false)
{
global $db, $user, $auth;
global $db, $user, $auth, $phpbb_dispatcher;
// This query is identical to the jumpbox one
$sql = 'SELECT forum_id, forum_name, parent_id, forum_type, forum_flags, forum_options, left_id, right_id
@@ -73,16 +73,33 @@ function make_forum_select($select_id = false, $ignore_id = false, $ignore_acl =
ORDER BY left_id ASC';
$result = $db->sql_query($sql, 600);
$rowset = array();
while ($row = $db->sql_fetchrow($result))
{
$rowset[(int) $row['forum_id']] = $row;
}
$db->sql_freeresult($result);
$right = 0;
$padding_store = array('0' => '');
$padding = '';
$forum_list = ($return_array) ? array() : '';
/**
* Modify the forum list data
*
* @event core.make_forum_select_modify_forum_list
* @var array rowset Array with the forums list data
* @since 3.1.10-RC1
*/
$vars = array('rowset');
extract($phpbb_dispatcher->trigger_event('core.make_forum_select_modify_forum_list', compact($vars)));
// Sometimes it could happen that forums will be displayed here not be displayed within the index page
// This is the result of forums not displayed at index, having list permissions and a parent of a forum with no permissions.
// If this happens, the padding could be "broken"
while ($row = $db->sql_fetchrow($result))
foreach ($rowset as $row)
{
if ($row['left_id'] < $right)
{
@@ -133,8 +150,7 @@ function make_forum_select($select_id = false, $ignore_id = false, $ignore_acl =
$forum_list .= '<option value="' . $row['forum_id'] . '"' . (($disabled) ? ' disabled="disabled" class="disabled-option"' : $selected) . '>' . $padding . $row['forum_name'] . '</option>';
}
}
$db->sql_freeresult($result);
unset($padding_store);
unset($padding_store, $rowset);
return $forum_list;
}
@@ -201,7 +217,7 @@ function group_select_options($group_id, $exclude_ids = false, $manage_founder =
*/
function get_forum_list($acl_list = 'f_list', $id_only = true, $postable_only = false, $no_cache = false)
{
global $db, $auth;
global $db, $auth, $phpbb_dispatcher;
static $forum_rows;
if (!isset($forum_rows))
@@ -256,6 +272,16 @@ function get_forum_list($acl_list = 'f_list', $id_only = true, $postable_only =
}
}
/**
* Modify the forum list data
*
* @event core.get_forum_list_modify_data
* @var array rowset Array with the forum list data
* @since 3.1.10-RC1
*/
$vars = array('rowset');
extract($phpbb_dispatcher->trigger_event('core.get_forum_list_modify_data', compact($vars)));
return $rowset;
}
@@ -615,8 +641,8 @@ function move_posts($post_ids, $topic_id, $auto_sync = true)
*
* @event core.move_posts_before
* @var array post_ids Array of post ids to move
* @var string topic_id The topic id the posts are moved to
* @var bool auto_sync Whether or not to perform auto sync
* @var int topic_id The topic id the posts are moved to
* @var bool auto_sync Whether or not to perform auto sync
* @var array forum_ids Array of the forum ids the posts are moved from
* @var array topic_ids Array of the topic ids the posts are moved from
* @var array forum_row Array with the forum id of the topic the posts are moved to
@@ -647,8 +673,8 @@ function move_posts($post_ids, $topic_id, $auto_sync = true)
*
* @event core.move_posts_after
* @var array post_ids Array of the moved post ids
* @var string topic_id The topic id the posts are moved to
* @var bool auto_sync Whether or not to perform auto sync
* @var int topic_id The topic id the posts are moved to
* @var bool auto_sync Whether or not to perform auto sync
* @var array forum_ids Array of the forum ids the posts are moved from
* @var array topic_ids Array of the topic ids the posts are moved from
* @var array forum_row Array with the forum id of the topic the posts are moved to
@@ -672,6 +698,28 @@ function move_posts($post_ids, $topic_id, $auto_sync = true)
sync('topic_attachment', 'topic_id', $topic_ids);
sync('topic', 'topic_id', $topic_ids, true);
sync('forum', 'forum_id', $forum_ids, true, true);
/**
* Perform additional actions after move post sync
*
* @event core.move_posts_sync_after
* @var array post_ids Array of the moved post ids
* @var int topic_id The topic id the posts are moved to
* @var bool auto_sync Whether or not to perform auto sync
* @var array forum_ids Array of the forum ids the posts are moved from
* @var array topic_ids Array of the topic ids the posts are moved from
* @var array forum_row Array with the forum id of the topic the posts are moved to
* @since 3.1.11-RC1
*/
$vars = array(
'post_ids',
'topic_id',
'auto_sync',
'forum_ids',
'topic_ids',
'forum_row',
);
extract($phpbb_dispatcher->trigger_event('core.move_posts_sync_after', compact($vars)));
}
// Update posted information
@@ -2531,7 +2579,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
/**
* Prune function
*/
function prune($forum_id, $prune_mode, $prune_date, $prune_flags = 0, $auto_sync = true)
function prune($forum_id, $prune_mode, $prune_date, $prune_flags = 0, $auto_sync = true, $prune_limit = 0)
{
global $db, $phpbb_dispatcher;
@@ -2583,9 +2631,19 @@ function prune($forum_id, $prune_mode, $prune_date, $prune_flags = 0, $auto_sync
* @var int prune_flags The prune flags
* @var bool auto_sync Whether or not to perform auto sync
* @var string sql_and SQL text appended to where clause
* @var int prune_limit The prune limit
* @since 3.1.3-RC1
* @changed 3.1.10-RC1 Added prune_limit
*/
$vars = array('forum_id', 'prune_mode', 'prune_date', 'prune_flags', 'auto_sync', 'sql_and');
$vars = array(
'forum_id',
'prune_mode',
'prune_date',
'prune_flags',
'auto_sync',
'sql_and',
'prune_limit',
);
extract($phpbb_dispatcher->trigger_event('core.prune_sql', compact($vars)));
$sql = 'SELECT topic_id
@@ -2593,7 +2651,7 @@ function prune($forum_id, $prune_mode, $prune_date, $prune_flags = 0, $auto_sync
WHERE ' . $db->sql_in_set('forum_id', $forum_id) . "
AND poll_start = 0
$sql_and";
$result = $db->sql_query($sql);
$result = $db->sql_query_limit($sql, $prune_limit);
$topic_list = array();
while ($row = $db->sql_fetchrow($result))
@@ -2610,7 +2668,7 @@ function prune($forum_id, $prune_mode, $prune_date, $prune_flags = 0, $auto_sync
AND poll_start > 0
AND poll_last_vote < $prune_date
$sql_and";
$result = $db->sql_query($sql);
$result = $db->sql_query_limit($sql, $prune_limit);
while ($row = $db->sql_fetchrow($result))
{
@@ -2643,12 +2701,15 @@ function auto_prune($forum_id, $prune_mode, $prune_flags, $prune_days, $prune_fr
$prune_date = time() - ($prune_days * 86400);
$next_prune = time() + ($prune_freq * 86400);
prune($forum_id, $prune_mode, $prune_date, $prune_flags, true);
$result = prune($forum_id, $prune_mode, $prune_date, $prune_flags, true, 300);
$sql = 'UPDATE ' . FORUMS_TABLE . "
SET prune_next = $next_prune
WHERE forum_id = $forum_id";
$db->sql_query($sql);
if ($result['topics'] == 0 && $result['posts'] == 0)
{
$sql = 'UPDATE ' . FORUMS_TABLE . "
SET prune_next = $next_prune
WHERE forum_id = $forum_id";
$db->sql_query($sql);
}
add_log('admin', 'LOG_AUTO_PRUNE', $row['forum_name']);
}

View File

@@ -150,7 +150,7 @@ function gen_sort_selects(&$limit_days, &$sort_by_text, &$sort_days, &$sort_key,
*/
function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list = false, $force_display = false)
{
global $config, $auth, $template, $user, $db, $phpbb_path_helper;
global $config, $auth, $template, $user, $db, $phpbb_path_helper, $phpbb_dispatcher;
// We only return if the jumpbox is not forced to be displayed (in case it is needed for functionality)
if (!$config['load_jumpbox'] && $force_display === false)
@@ -163,16 +163,33 @@ function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list
ORDER BY left_id ASC';
$result = $db->sql_query($sql, 600);
$rowset = array();
while ($row = $db->sql_fetchrow($result))
{
$rowset[(int) $row['forum_id']] = $row;
}
$db->sql_freeresult($result);
$right = $padding = 0;
$padding_store = array('0' => 0);
$display_jumpbox = false;
$iteration = 0;
/**
* Modify the jumpbox forum list data
*
* @event core.make_jumpbox_modify_forum_list
* @var array rowset Array with the forums list data
* @since 3.1.10-RC1
*/
$vars = array('rowset');
extract($phpbb_dispatcher->trigger_event('core.make_jumpbox_modify_forum_list', compact($vars)));
// Sometimes it could happen that forums will be displayed here not be displayed within the index page
// This is the result of forums not displayed at index, having list permissions and a parent of a forum with no permissions.
// If this happens, the padding could be "broken"
while ($row = $db->sql_fetchrow($result))
foreach ($rowset as $row)
{
if ($row['left_id'] < $right)
{
@@ -205,20 +222,21 @@ function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list
continue;
}
$tpl_ary = array();
if (!$display_jumpbox)
{
$template->assign_block_vars('jumpbox_forums', array(
$tpl_ary[] = array(
'FORUM_ID' => ($select_all) ? 0 : -1,
'FORUM_NAME' => ($select_all) ? $user->lang['ALL_FORUMS'] : $user->lang['SELECT_FORUM'],
'S_FORUM_COUNT' => $iteration,
'LINK' => $phpbb_path_helper->append_url_params($action, array('f' => $forum_id)),
));
);
$iteration++;
$display_jumpbox = true;
}
$template->assign_block_vars('jumpbox_forums', array(
$tpl_ary[] = array(
'FORUM_ID' => $row['forum_id'],
'FORUM_NAME' => $row['forum_name'],
'SELECTED' => ($row['forum_id'] == $forum_id) ? ' selected="selected"' : '',
@@ -227,7 +245,25 @@ function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list
'S_IS_LINK' => ($row['forum_type'] == FORUM_LINK) ? true : false,
'S_IS_POST' => ($row['forum_type'] == FORUM_POST) ? true : false,
'LINK' => $phpbb_path_helper->append_url_params($action, array('f' => $row['forum_id'])),
));
);
/**
* Modify the jumpbox before it is assigned to the template
*
* @event core.make_jumpbox_modify_tpl_ary
* @var array row The data of the forum
* @var array tpl_ary Template data of the forum
* @since 3.1.10-RC1
*/
$vars = array(
'row',
'tpl_ary',
);
extract($phpbb_dispatcher->trigger_event('core.make_jumpbox_modify_tpl_ary', compact($vars)));
$template->assign_block_vars_array('jumpbox_forums', $tpl_ary);
unset($tpl_ary);
for ($i = 0; $i < $padding; $i++)
{
@@ -235,8 +271,7 @@ function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list
}
$iteration++;
}
$db->sql_freeresult($result);
unset($padding_store);
unset($padding_store, $rowset);
$url_parts = $phpbb_path_helper->get_url_parts($action);
@@ -644,9 +679,11 @@ function generate_text_for_storage(&$text, &$uid, &$bitfield, &$flags, $allow_bb
* @var string uid The BBCode UID
* @var string bitfield The BBCode Bitfield
* @var int flags The BBCode Flags
* @var string message_parser The message_parser object
* @since 3.1.0-a1
* @changed 3.1.11-RC1 Added message_parser to vars
*/
$vars = array('text', 'uid', 'bitfield', 'flags');
$vars = array('text', 'uid', 'bitfield', 'flags', 'message_parser');
extract($phpbb_dispatcher->trigger_event('core.modify_text_for_storage_after', compact($vars)));
return $message_parser->warn_msg;
@@ -945,7 +982,7 @@ function bbcode_nl2br($text)
*/
function smiley_text($text, $force_option = false)
{
global $config, $user, $phpbb_path_helper;
global $config, $user, $phpbb_path_helper, $phpbb_dispatcher;
if ($force_option || !$config['allow_smilies'] || !$user->optionget('viewsmilies'))
{
@@ -954,6 +991,16 @@ function smiley_text($text, $force_option = false)
else
{
$root_path = (defined('PHPBB_USE_BOARD_URL_PATH') && PHPBB_USE_BOARD_URL_PATH) ? generate_board_url() . '/' : $phpbb_path_helper->get_web_root_path();
/**
* Event to override the root_path for smilies
*
* @event core.smiley_text_root_path
* @var string root_path root_path for smilies
* @since 3.1.11-RC1
*/
$vars = array('root_path');
extract($phpbb_dispatcher->trigger_event('core.smiley_text_root_path', compact($vars)));
return preg_replace('#<!\-\- s(.*?) \-\-><img src="\{SMILIES_PATH\}\/(.*?) \/><!\-\- s\1 \-\->#', '<img class="smilies" src="' . $root_path . $config['smilies_path'] . '/\2 />', $text);
}
}

View File

@@ -646,7 +646,7 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod
* @var array row The data of the forum
* @var array subforums_row Template data of subforums
* @since 3.1.0-a1
* @change 3.1.0-b5 Added var subforums_row
* @changed 3.1.0-b5 Added var subforums_row
*/
$vars = array('forum_row', 'row', 'subforums_row');
extract($phpbb_dispatcher->trigger_event('core.display_forums_modify_template_vars', compact($vars)));
@@ -1554,6 +1554,23 @@ function phpbb_get_user_rank($user_data, $user_posts)
}
}
/**
* Modify a user's rank before displaying
*
* @event core.get_user_rank_after
* @var array user_data Array with user's data
* @var int user_posts User_posts to change
* @var array user_rank_data User rank data
* @since 3.1.11-RC1
*/
$vars = array(
'user_data',
'user_posts',
'user_rank_data',
);
extract($phpbb_dispatcher->trigger_event('core.get_user_rank_after', compact($vars)));
return $user_rank_data;
}

View File

@@ -124,7 +124,7 @@ function wrap_img_in_html($src, $title)
*/
function send_file_to_browser($attachment, $upload_dir, $category)
{
global $user, $db, $config, $phpbb_root_path;
global $user, $db, $config, $phpbb_dispatcher, $phpbb_root_path;
$filename = $phpbb_root_path . $upload_dir . '/' . $attachment['physical_filename'];
@@ -149,6 +149,26 @@ function send_file_to_browser($attachment, $upload_dir, $category)
// Now send the File Contents to the Browser
$size = @filesize($filename);
/**
* Event to alter attachment before it is sent to browser.
*
* @event core.send_file_to_browser_before
* @var array attachment Attachment data
* @var string upload_dir Relative path of upload directory
* @var int category Attachment category
* @var string filename Path to file, including filename
* @var int size File size
* @since 3.1.11-RC1
*/
$vars = array(
'attachment',
'upload_dir',
'category',
'filename',
'size',
);
extract($phpbb_dispatcher->trigger_event('core.send_file_to_browser_before', compact($vars)));
// To correctly display further errors we need to make sure we are using the correct headers for both (unsetting content-length may not work)
// Check if headers already sent or not able to get the file contents.
@@ -166,7 +186,7 @@ function send_file_to_browser($attachment, $upload_dir, $category)
}
// Make sure the database record for the filesize is correct
if ($size > 0 && $size != $attachment['filesize'])
if ($size > 0 && $size != $attachment['filesize'] && strpos($attachment['physical_filename'], 'thumb_') === false)
{
// Update database record
$sql = 'UPDATE ' . ATTACHMENTS_TABLE . '
@@ -284,7 +304,7 @@ function header_filename($file)
// There be dragons here.
// Not many follows the RFC...
if (strpos($user_agent, 'MSIE') !== false || strpos($user_agent, 'Safari') !== false || strpos($user_agent, 'Konqueror') !== false)
if (strpos($user_agent, 'MSIE') !== false || strpos($user_agent, 'Konqueror') !== false)
{
return "filename=" . rawurlencode($file);
}
@@ -677,6 +697,8 @@ function phpbb_download_handle_forum_auth($db, $auth, $topic_id)
*/
function phpbb_download_handle_pm_auth($db, $auth, $user_id, $msg_id)
{
global $phpbb_dispatcher;
if (!$auth->acl_get('u_pm_download'))
{
send_status_line(403, 'Forbidden');
@@ -685,6 +707,18 @@ function phpbb_download_handle_pm_auth($db, $auth, $user_id, $msg_id)
$allowed = phpbb_download_check_pm_auth($db, $user_id, $msg_id);
/**
* Event to modify PM attachments download auth
*
* @event core.modify_pm_attach_download_auth
* @var bool allowed Whether the user is allowed to download from that PM or not
* @var int msg_id The id of the PM to download from
* @var int user_id The user id for auth check
* @since 3.1.11-RC1
*/
$vars = array('allowed', 'msg_id', 'user_id');
extract($phpbb_dispatcher->trigger_event('core.modify_pm_attach_download_auth', compact($vars)));
if (!$allowed)
{
send_status_line(403, 'Forbidden');

View File

@@ -41,6 +41,9 @@ class jabber
var $username;
var $password;
var $use_ssl;
var $verify_peer;
var $verify_peer_name;
var $allow_self_signed;
var $resource = 'functions_jabber.phpbb.php';
var $enable_logging;
@@ -49,8 +52,18 @@ class jabber
var $features = array();
/**
* Constructor
*
* @param string $server Jabber server
* @param int $port Jabber server port
* @param string $username Jabber username or JID
* @param string $password Jabber password
* @param boold $use_ssl Use ssl
* @param bool $verify_peer Verify SSL certificate
* @param bool $verify_peer_name Verify Jabber peer name
* @param bool $allow_self_signed Allow self signed certificates
*/
function jabber($server, $port, $username, $password, $use_ssl = false)
function __construct($server, $port, $username, $password, $use_ssl = false, $verify_peer = true, $verify_peer_name = true, $allow_self_signed = false)
{
$this->connect_server = ($server) ? $server : 'localhost';
$this->port = ($port) ? $port : 5222;
@@ -71,6 +84,9 @@ class jabber
$this->password = $password;
$this->use_ssl = ($use_ssl && self::can_use_ssl()) ? true : false;
$this->verify_peer = $verify_peer;
$this->verify_peer_name = $verify_peer_name;
$this->allow_self_signed = $allow_self_signed;
// Change port if we use SSL
if ($this->port == 5222 && $this->use_ssl)
@@ -96,7 +112,7 @@ class jabber
*/
static public function can_use_tls()
{
if (!@extension_loaded('openssl') || !function_exists('stream_socket_enable_crypto') || !function_exists('stream_get_meta_data') || !function_exists('socket_set_blocking') || !function_exists('stream_get_wrappers'))
if (!@extension_loaded('openssl') || !function_exists('stream_socket_enable_crypto') || !function_exists('stream_get_meta_data') || !function_exists('stream_set_blocking') || !function_exists('stream_get_wrappers'))
{
return false;
}
@@ -139,7 +155,7 @@ class jabber
$this->session['ssl'] = $this->use_ssl;
if ($this->open_socket($this->connect_server, $this->port, $this->use_ssl))
if ($this->open_socket($this->connect_server, $this->port, $this->use_ssl, $this->verify_peer, $this->verify_peer_name, $this->allow_self_signed))
{
$this->send("<?xml version='1.0' encoding='UTF-8' ?" . ">\n");
$this->send("<stream:stream to='{$this->server}' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>\n");
@@ -227,10 +243,13 @@ class jabber
* @param string $server host to connect to
* @param int $port port number
* @param bool $use_ssl use ssl or not
* @param bool $verify_peer verify ssl certificate
* @param bool $verify_peer_name verify peer name
* @param bool $allow_self_signed allow self-signed ssl certificates
* @access public
* @return bool
*/
function open_socket($server, $port, $use_ssl = false)
function open_socket($server, $port, $use_ssl, $verify_peer, $verify_peer_name, $allow_self_signed)
{
if (@function_exists('dns_get_record'))
{
@@ -241,12 +260,26 @@ class jabber
}
}
$server = $use_ssl ? 'ssl://' . $server : $server;
$options = array();
if ($this->connection = @fsockopen($server, $port, $errorno, $errorstr, $this->timeout))
if ($use_ssl)
{
socket_set_blocking($this->connection, 0);
socket_set_timeout($this->connection, 60);
$remote_socket = 'ssl://' . $server . ':' . $port;
// Set ssl context options, see http://php.net/manual/en/context.ssl.php
$options['ssl'] = array('verify_peer' => $verify_peer, 'verify_peer_name' => $verify_peer_name, 'allow_self_signed' => $allow_self_signed);
}
else
{
$remote_socket = $server . ':' . $port;
}
$socket_context = stream_context_create($options);
if ($this->connection = @stream_socket_client($remote_socket, $errorno, $errorstr, $this->timeout, STREAM_CLIENT_CONNECT, $socket_context))
{
stream_set_blocking($this->connection, 0);
stream_set_timeout($this->connection, 60);
return true;
}
@@ -563,7 +596,7 @@ class jabber
case 'proceed':
// continue switching to TLS
$meta = stream_get_meta_data($this->connection);
socket_set_blocking($this->connection, 1);
stream_set_blocking($this->connection, 1);
if (!stream_socket_enable_crypto($this->connection, true, STREAM_CRYPTO_METHOD_TLS_CLIENT))
{
@@ -571,7 +604,7 @@ class jabber
return false;
}
socket_set_blocking($this->connection, $meta['blocked']);
stream_set_blocking($this->connection, $meta['blocked']);
$this->session['tls'] = true;
// new stream

View File

@@ -231,6 +231,13 @@ class messenger
$template_lang = basename($config['default_lang']);
}
$ext_template_paths = array(
array(
'name' => $template_lang . '_email',
'ext_path' => 'language/' . $template_lang . '/email' . $template_dir_prefix,
),
);
if ($template_path)
{
$template_paths = array(
@@ -246,23 +253,38 @@ class messenger
$template_path . $template_dir_prefix,
);
$board_language = basename($config['default_lang']);
// we can only specify default language fallback when the path is not a custom one for which we
// do not know the default language alternative
if ($template_lang !== basename($config['default_lang']))
if ($template_lang !== $board_language)
{
$fallback_template_path = (!empty($user->lang_path)) ? $user->lang_path : $phpbb_root_path . 'language/';
$fallback_template_path .= basename($config['default_lang']) . '/email';
$fallback_template_path .= $board_language . '/email';
$template_paths[] = $fallback_template_path . $template_dir_prefix;
$ext_template_paths[] = array(
'name' => $board_language . '_email',
'ext_path' => 'language/' . $board_language . '/email' . $template_dir_prefix,
);
}
// If everything fails just fall back to en template
if ($template_lang !== 'en' && $board_language !== 'en')
{
$fallback_template_path = (!empty($user->lang_path)) ? $user->lang_path : $phpbb_root_path . 'language/';
$fallback_template_path .= 'en/email';
$template_paths[] = $fallback_template_path . $template_dir_prefix;
$ext_template_paths[] = array(
'name' => 'en_email',
'ext_path' => 'language/en/email' . $template_dir_prefix,
);
}
}
$this->set_template_paths(array(
array(
'name' => $template_lang . '_email',
'ext_path' => 'language/' . $template_lang . '/email' . $template_dir_prefix,
),
), $template_paths);
$this->set_template_paths($ext_template_paths, $template_paths);
$this->template->set_filenames(array(
'body' => $template_file . '.txt',
@@ -290,10 +312,16 @@ class messenger
/**
* Send the mail out to the recipients set previously in var $this->addresses
*
* @param int $method User notification method NOTIFY_EMAIL|NOTIFY_IM|NOTIFY_BOTH
* @param bool $break Flag indicating if the function only formats the subject
* and the message without sending it
*
* @return bool
*/
function send($method = NOTIFY_EMAIL, $break = false)
{
global $config, $user;
global $config, $user, $phpbb_dispatcher;
// We add some standard variables we always use, no need to specify them always
$this->assign_vars(array(
@@ -302,6 +330,30 @@ class messenger
'SITENAME' => htmlspecialchars_decode($config['sitename']),
));
$subject = $this->subject;
$message = $this->msg;
/**
* Event to modify notification message text before parsing
*
* @event core.modify_notification_message
* @var int method User notification method NOTIFY_EMAIL|NOTIFY_IM|NOTIFY_BOTH
* @var bool break Flag indicating if the function only formats the subject
* and the message without sending it
* @var string subject The message subject
* @var string message The message text
* @since 3.1.11-RC1
*/
$vars = array(
'method',
'break',
'subject',
'message',
);
extract($phpbb_dispatcher->trigger_event('core.modify_notification_message', compact($vars)));
$this->subject = $subject;
$this->msg = $message;
unset($subject, $message);
// Parse message through template
$this->msg = trim($this->template->assign_display('body'));
@@ -416,7 +468,7 @@ class messenger
*/
function build_header($to, $cc, $bcc)
{
global $config;
global $config, $phpbb_dispatcher;
// We could use keys here, but we won't do this for 3.0.x to retain backwards compatibility
$headers = array();
@@ -448,6 +500,16 @@ class messenger
$headers[] = 'X-MimeOLE: phpBB3';
$headers[] = 'X-phpBB-Origin: phpbb://' . str_replace(array('http://', 'https://'), array('', ''), generate_board_url());
/**
* Event to modify email header entries
*
* @event core.modify_email_headers
* @var array headers Array containing email header entries
* @since 3.1.11-RC1
*/
$vars = array('headers');
extract($phpbb_dispatcher->trigger_event('core.modify_email_headers', compact($vars)));
if (sizeof($this->extra_headers))
{
$headers = array_merge($headers, $this->extra_headers);
@@ -593,7 +655,7 @@ class messenger
if (!$use_queue)
{
include_once($phpbb_root_path . 'includes/functions_jabber.' . $phpEx);
$this->jabber = new jabber($config['jab_host'], $config['jab_port'], $config['jab_username'], htmlspecialchars_decode($config['jab_password']), $config['jab_use_ssl']);
$this->jabber = new jabber($config['jab_host'], $config['jab_port'], $config['jab_username'], htmlspecialchars_decode($config['jab_password']), $config['jab_use_ssl'], $config['jab_verify_peer'], $config['jab_verify_peer_name'], $config['jab_allow_self_signed']);
if (!$this->jabber->connect())
{
@@ -768,7 +830,7 @@ class queue
}
include_once($phpbb_root_path . 'includes/functions_jabber.' . $phpEx);
$this->jabber = new jabber($config['jab_host'], $config['jab_port'], $config['jab_username'], htmlspecialchars_decode($config['jab_password']), $config['jab_use_ssl']);
$this->jabber = new jabber($config['jab_host'], $config['jab_port'], $config['jab_username'], htmlspecialchars_decode($config['jab_password']), $config['jab_use_ssl'], $config['jab_verify_peer'], $config['jab_verify_peer_name'], $config['jab_allow_self_signed']);
if (!$this->jabber->connect())
{
@@ -1014,7 +1076,18 @@ function smtpmail($addresses, $subject, $message, &$err_msg, $headers = false)
}
$collector = new \phpbb\error_collector;
$collector->install();
$smtp->socket = fsockopen($config['smtp_host'], $config['smtp_port'], $errno, $errstr, 20);
$options = array();
$verify_peer = (bool) $config['smtp_verify_peer'];
$verify_peer_name = (bool) $config['smtp_verify_peer_name'];
$allow_self_signed = (bool) $config['smtp_allow_self_signed'];
$remote_socket = $config['smtp_host'] . ':' . $config['smtp_port'];
// Set ssl context options, see http://php.net/manual/en/context.ssl.php
$options['ssl'] = array('verify_peer' => $verify_peer, 'verify_peer_name' => $verify_peer_name, 'allow_self_signed' => $allow_self_signed);
$socket_context = stream_context_create($options);
$smtp->socket = @stream_socket_client($remote_socket, $errno, $errstr, 20, STREAM_CLIENT_CONNECT, $socket_context);
$collector->uninstall();
$error_contents = $collector->format_errors();

View File

@@ -119,6 +119,15 @@ function generate_smilies($mode, $forum_id)
foreach ($smilies as $row)
{
/**
* Modify smiley root path before populating smiley list
*
* @event core.generate_smilies_before
* @var string root_path root_path for smilies
* @since 3.1.11-RC1
*/
$vars = array('root_path');
extract($phpbb_dispatcher->trigger_event('core.generate_smilies_before', compact($vars)));
$template->assign_block_vars('smiley', array(
'SMILEY_CODE' => $row['code'],
'A_SMILEY_CODE' => addslashes($row['code']),
@@ -702,7 +711,7 @@ function create_thumbnail($source, $destination, $mimetype)
$used_imagick = false;
// Only use imagemagick if defined and the passthru function not disabled
// Only use ImageMagick if defined and the passthru function not disabled
if ($config['img_imagick'] && function_exists('passthru'))
{
if (substr($config['img_imagick'], -1) !== '/')
@@ -1074,7 +1083,7 @@ function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id
}
$sql_ary = array(
'SELECT' => 'u.username, u.user_id, u.user_colour, p.*, z.friend, z.foe',
'SELECT' => 'u.username, u.user_id, u.user_colour, p.*, z.friend, z.foe, uu.username as post_delete_username, uu.user_colour as post_delete_user_colour',
'FROM' => array(
USERS_TABLE => 'u',
@@ -1086,6 +1095,10 @@ function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id
'FROM' => array(ZEBRA_TABLE => 'z'),
'ON' => 'z.user_id = ' . $user->data['user_id'] . ' AND z.zebra_id = p.poster_id',
),
array(
'FROM' => array(USERS_TABLE => 'uu'),
'ON' => 'uu.user_id = p.post_delete_user',
),
),
'WHERE' => $db->sql_in_set('p.post_id', $post_list) . '
@@ -1194,6 +1207,31 @@ function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id
$post_anchor = ($mode == 'post_review') ? 'ppr' . $row['post_id'] : 'pr' . $row['post_id'];
$u_show_post = append_sid($phpbb_root_path . 'viewtopic.' . $phpEx, "f=$forum_id&amp;t=$topic_id&amp;p={$row['post_id']}&amp;view=show#p{$row['post_id']}");
$l_deleted_message = '';
if ($row['post_visibility'] == ITEM_DELETED)
{
$display_postername = get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username']);
// User having deleted the post also being the post author?
if (!$row['post_delete_user'] || $row['post_delete_user'] == $poster_id)
{
$display_username = $display_postername;
}
else
{
$display_username = get_username_string('full', $row['post_delete_user'], $row['post_delete_username'], $row['post_delete_user_colour']);
}
if ($row['post_delete_reason'])
{
$l_deleted_message = $user->lang('POST_DELETED_BY_REASON', $display_postername, $display_username, $user->format_date($row['post_delete_time'], false, true), $row['post_delete_reason']);
}
else
{
$l_deleted_message = $user->lang('POST_DELETED_BY', $display_postername, $display_username, $user->format_date($row['post_delete_time'], false, true));
}
}
$post_row = array(
'POST_AUTHOR_FULL' => get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username']),
'POST_AUTHOR_COLOUR' => get_username_string('colour', $poster_id, $row['username'], $row['user_colour'], $row['post_username']),
@@ -1204,6 +1242,8 @@ function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id
'S_FRIEND' => ($row['friend']) ? true : false,
'S_IGNORE_POST' => ($row['foe']) ? true : false,
'L_IGNORE_POST' => ($row['foe']) ? sprintf($user->lang['POST_BY_FOE'], get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username']), "<a href=\"{$u_show_post}\" onclick=\"phpbb.toggleDisplay('{$post_anchor}', 1); return false;\">", '</a>') : '',
'S_POST_DELETED' => ($row['post_visibility'] == ITEM_DELETED) ? true : false,
'L_DELETE_POST' => $l_deleted_message,
'POST_SUBJECT' => $post_subject,
'MINI_POST_IMG' => $user->img('icon_post_target', $user->lang['POST']),
@@ -1275,7 +1315,7 @@ function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id
*/
function delete_post($forum_id, $topic_id, $post_id, &$data, $is_soft = false, $softdelete_reason = '')
{
global $db, $user, $auth, $phpbb_container;
global $db, $user, $auth, $phpbb_container, $phpbb_dispatcher;
global $config, $phpEx, $phpbb_root_path;
// Specify our post mode
@@ -1526,6 +1566,34 @@ function delete_post($forum_id, $topic_id, $post_id, &$data, $is_soft = false, $
sync('topic_reported', 'topic_id', array($topic_id));
}
/**
* This event is used for performing actions directly after a post or topic
* has been deleted.
*
* @event core.delete_post_after
* @var int forum_id Post forum ID
* @var int topic_id Post topic ID
* @var int post_id Post ID
* @var array data Post data
* @var bool is_soft Soft delete flag
* @var string softdelete_reason Soft delete reason
* @var string post_mode delete_topic, delete_first_post, delete_last_post or delete
* @var mixed next_post_id Next post ID in the topic (post ID or false)
*
* @since 3.1.11-RC1
*/
$vars = array(
'forum_id',
'topic_id',
'post_id',
'data',
'is_soft',
'softdelete_reason',
'post_mode',
'next_post_id',
);
extract($phpbb_dispatcher->trigger_event('core.delete_post_after', compact($vars)));
return $next_post_id;
}
@@ -2474,7 +2542,7 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
* @var string url The "Return to topic" URL
*
* @since 3.1.0-a3
* @change 3.1.0-RC3 Added vars mode, subject, username, topic_type,
* @changed 3.1.0-RC3 Added vars mode, subject, username, topic_type,
* poll, update_message, update_search_index
*/
$vars = array(
@@ -2623,16 +2691,54 @@ function phpbb_upload_popup($forum_style = 0)
/**
* Do the various checks required for removing posts as well as removing it
*
* @param int $forum_id The id of the forum
* @param int $topic_id The id of the topic
* @param int $post_id The id of the post
* @param array $post_data Array with the post data
* @param bool $is_soft The flag indicating whether it is the soft delete mode
* @param string $delete_reason Description for the post deletion reason
*
* @return null
*/
function phpbb_handle_post_delete($forum_id, $topic_id, $post_id, &$post_data, $is_soft = false, $delete_reason = '')
{
global $user, $auth, $config, $request;
global $phpbb_root_path, $phpEx;
global $phpbb_root_path, $phpEx, $phpbb_dispatcher;
$force_delete_allowed = $force_softdelete_allowed = false;
$perm_check = ($is_soft) ? 'softdelete' : 'delete';
/**
* This event allows to modify the conditions for the post deletion
*
* @event core.handle_post_delete_conditions
* @var int forum_id The id of the forum
* @var int topic_id The id of the topic
* @var int post_id The id of the post
* @var array post_data Array with the post data
* @var bool is_soft The flag indicating whether it is the soft delete mode
* @var string delete_reason Description for the post deletion reason
* @var bool force_delete_allowed Allow the user to delete the post (all permissions and conditions are ignored)
* @var bool force_softdelete_allowed Allow the user to softdelete the post (all permissions and conditions are ignored)
* @var string perm_check The deletion mode softdelete|delete
* @since 3.1.11-RC1
*/
$vars = array(
'forum_id',
'topic_id',
'post_id',
'post_data',
'is_soft',
'delete_reason',
'force_delete_allowed',
'force_softdelete_allowed',
'perm_check',
);
extract($phpbb_dispatcher->trigger_event('core.handle_post_delete_conditions', compact($vars)));
// If moderator removing post or user itself removing post, present a confirmation screen
if ($auth->acl_get("m_$perm_check", $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get("f_$perm_check", $forum_id) && $post_id == $post_data['topic_last_post_id'] && !$post_data['post_edit_locked'] && ($post_data['post_time'] > time() - ($config['delete_time'] * 60) || !$config['delete_time'])))
if ($force_delete_allowed || ($is_soft && $force_softdelete_allowed) || $auth->acl_get("m_$perm_check", $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get("f_$perm_check", $forum_id) && $post_id == $post_data['topic_last_post_id'] && !$post_data['post_edit_locked'] && ($post_data['post_time'] > time() - ($config['delete_time'] * 60) || !$config['delete_time'])))
{
$s_hidden_fields = array(
'p' => $post_id,
@@ -2689,10 +2795,10 @@ function phpbb_handle_post_delete($forum_id, $topic_id, $post_id, &$post_data, $
}
else
{
global $user, $template, $request;
global $template;
$can_delete = $auth->acl_get('m_delete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_delete', $forum_id));
$can_softdelete = $auth->acl_get('m_softdelete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_softdelete', $forum_id));
$can_delete = $force_delete_allowed || ($auth->acl_get('m_delete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_delete', $forum_id)));
$can_softdelete = $force_softdelete_allowed || ($auth->acl_get('m_softdelete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_softdelete', $forum_id)));
$template->assign_vars(array(
'S_SOFTDELETED' => $post_data['post_visibility'] == ITEM_DELETED,

View File

@@ -889,9 +889,16 @@ function update_unread_status($unread, $msg_id, $user_id, $folder_id)
SET pm_unread = 0
WHERE msg_id = $msg_id
AND user_id = $user_id
AND folder_id = $folder_id";
AND folder_id = $folder_id
AND pm_unread = 1";
$db->sql_query($sql);
// If the message is already marked as read, we just skip the rest to avoid negative PM count
if (!$db->sql_affectedrows())
{
return;
}
$sql = 'UPDATE ' . USERS_TABLE . "
SET user_unread_privmsg = user_unread_privmsg - 1
WHERE user_id = $user_id";

View File

@@ -119,19 +119,29 @@ function user_update_name($old_name, $new_name)
global $config, $db, $cache, $phpbb_dispatcher;
$update_ary = array(
FORUMS_TABLE => array('forum_last_poster_name'),
MODERATOR_CACHE_TABLE => array('username'),
POSTS_TABLE => array('post_username'),
TOPICS_TABLE => array('topic_first_poster_name', 'topic_last_poster_name'),
FORUMS_TABLE => array(
'forum_last_poster_id' => 'forum_last_poster_name',
),
MODERATOR_CACHE_TABLE => array(
'user_id' => 'username',
),
POSTS_TABLE => array(
'poster_id' => 'post_username',
),
TOPICS_TABLE => array(
'topic_poster' => 'topic_first_poster_name',
'topic_last_poster_id' => 'topic_last_poster_name',
),
);
foreach ($update_ary as $table => $field_ary)
{
foreach ($field_ary as $field)
foreach ($field_ary as $id_field => $name_field)
{
$sql = "UPDATE $table
SET $field = '" . $db->sql_escape($new_name) . "'
WHERE $field = '" . $db->sql_escape($old_name) . "'";
SET $name_field = '" . $db->sql_escape($new_name) . "'
WHERE $name_field = '" . $db->sql_escape($old_name) . "'
AND $id_field <> " . ANONYMOUS;
$db->sql_query($sql);
}
}
@@ -262,13 +272,15 @@ function user_add($user_row, $cp_data = false, $notifications_data = null)
* Use this event to modify the values to be inserted when a user is added
*
* @event core.user_add_modify_data
* @var array user_row Array of user details submited to user_add
* @var array cp_data Array of Custom profile fields submited to user_add
* @var array sql_ary Array of data to be inserted when a user is added
* @var array user_row Array of user details submited to user_add
* @var array cp_data Array of Custom profile fields submited to user_add
* @var array sql_ary Array of data to be inserted when a user is added
* @var array notifications_data Array of notification data to be inserted when a user is added
* @since 3.1.0-a1
* @change 3.1.0-b5
* @changed 3.1.0-b5 Added user_row and cp_data
* @changed 3.1.11-RC1 Added notifications_data
*/
$vars = array('user_row', 'cp_data', 'sql_ary');
$vars = array('user_row', 'cp_data', 'sql_ary', 'notifications_data');
extract($phpbb_dispatcher->trigger_event('core.user_add_modify_data', compact($vars)));
$sql = 'INSERT INTO ' . USERS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
@@ -1281,7 +1293,7 @@ function user_ban($mode, $ban, $ban_len, $ban_len_other, $ban_exclude, $ban_reas
*/
function user_unban($mode, $ban)
{
global $db, $user, $auth, $cache;
global $db, $user, $auth, $cache, $phpbb_dispatcher;
// Delete stale bans
$sql = 'DELETE FROM ' . BANLIST_TABLE . '
@@ -1348,6 +1360,20 @@ function user_unban($mode, $ban)
add_log('user', $user_id, 'LOG_UNBAN_' . strtoupper($mode), $l_unban_list);
}
}
/**
* Use this event to perform actions after the unban has been performed
*
* @event core.user_unban
* @var string mode One of the following: user, ip, email
* @var array user_ids_ary Array with user_ids
* @since 3.1.11-RC1
*/
$vars = array(
'mode',
'user_ids_ary',
);
extract($phpbb_dispatcher->trigger_event('core.user_unban', compact($vars)));
}
$cache->destroy('sql', BANLIST_TABLE);
@@ -2269,7 +2295,7 @@ function phpbb_avatar_explanation_string()
{
global $config, $user;
return $user->lang('AVATAR_EXPLAIN',
return $user->lang(($config['avatar_filesize'] == 0) ? 'AVATAR_EXPLAIN_NO_FILESIZE' : 'AVATAR_EXPLAIN',
$user->lang('PIXELS', (int) $config['avatar_max_width']),
$user->lang('PIXELS', (int) $config['avatar_max_height']),
round($config['avatar_filesize'] / 1024));
@@ -3076,7 +3102,7 @@ function remove_default_rank($group_id, $user_ids)
*/
function group_user_attributes($action, $group_id, $user_id_ary = false, $username_ary = false, $group_name = false, $group_attributes = false)
{
global $db, $auth, $phpbb_root_path, $phpEx, $config, $phpbb_container;
global $db, $auth, $phpbb_root_path, $phpEx, $config, $phpbb_container, $phpbb_dispatcher;
// We need both username and user_id info
$result = user_get_id_name($user_id_ary, $username_ary);
@@ -3207,6 +3233,28 @@ function group_user_attributes($action, $group_id, $user_id_ary = false, $userna
break;
}
/**
* Event to perform additional actions on setting user group attributes
*
* @event core.user_set_group_attributes
* @var int group_id ID of the group
* @var string group_name Name of the group
* @var array user_id_ary IDs of the users to set group attributes
* @var array username_ary Names of the users to set group attributes
* @var array group_attributes Group attributes which were changed
* @var string action Action to perform over the group members
* @since 3.1.10-RC1
*/
$vars = array(
'group_id',
'group_name',
'user_id_ary',
'username_ary',
'group_attributes',
'action',
);
extract($phpbb_dispatcher->trigger_event('core.user_set_group_attributes', compact($vars)));
// Clear permissions cache of relevant users
$auth->acl_clear_prefetch($user_id_ary);

View File

@@ -28,7 +28,10 @@ class mcp_ban
global $db, $user, $auth, $template, $request, $phpbb_dispatcher;
global $phpbb_root_path, $phpEx;
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
if (!function_exists('user_ban'))
{
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
}
// Include the admin banning interface...
include($phpbb_root_path . 'includes/acp/acp_ban.' . $phpEx);

View File

@@ -273,7 +273,7 @@ function mcp_forum_view($id, $mode, $action, $forum_info)
'TOPIC_ICON_IMG_WIDTH' => (!empty($icons[$row['icon_id']])) ? $icons[$row['icon_id']]['width'] : '',
'TOPIC_ICON_IMG_HEIGHT' => (!empty($icons[$row['icon_id']])) ? $icons[$row['icon_id']]['height'] : '',
'UNAPPROVED_IMG' => ($topic_unapproved || $posts_unapproved) ? $user->img('icon_topic_unapproved', ($topic_unapproved) ? 'TOPIC_UNAPPROVED' : 'POSTS_UNAPPROVED') : '',
'DELETED_IMG' => ($topic_deleted) ? $user->img('icon_topic_deleted', 'POSTS_DELETED') : '',
'DELETED_IMG' => ($topic_deleted) ? $user->img('icon_topic_deleted', 'TOPIC_DELETED') : '',
'TOPIC_AUTHOR' => get_username_string('username', $row['topic_poster'], $row['topic_first_poster_name'], $row['topic_first_poster_colour']),
'TOPIC_AUTHOR_COLOUR' => get_username_string('colour', $row['topic_poster'], $row['topic_first_poster_name'], $row['topic_first_poster_colour']),
@@ -396,7 +396,7 @@ function mcp_resync_topics($topic_ids)
*/
function merge_topics($forum_id, $topic_ids, $to_topic_id)
{
global $db, $template, $user, $phpEx, $phpbb_root_path, $auth;
global $db, $template, $user, $phpEx, $phpbb_root_path, $auth, $phpbb_dispatcher;
if (!sizeof($topic_ids))
{
@@ -411,21 +411,23 @@ function merge_topics($forum_id, $topic_ids, $to_topic_id)
$sync_topics = array_merge($topic_ids, array($to_topic_id));
$topic_data = phpbb_get_topic_data($sync_topics, 'm_merge');
$all_topic_data = phpbb_get_topic_data($sync_topics, 'm_merge');
if (!sizeof($topic_data) || empty($topic_data[$to_topic_id]))
if (!sizeof($all_topic_data) || empty($all_topic_data[$to_topic_id]))
{
$template->assign_var('MESSAGE', $user->lang['NO_FINAL_TOPIC_SELECTED']);
return;
}
$sync_forums = array();
foreach ($topic_data as $data)
$topic_views = 0;
foreach ($all_topic_data as $data)
{
$sync_forums[$data['forum_id']] = $data['forum_id'];
$topic_views = max($topic_views, $data['topic_views']);
}
$topic_data = $topic_data[$to_topic_id];
$to_topic_data = $all_topic_data[$to_topic_id];
$post_id_list = request_var('post_id_list', array(0));
$start = request_var('start', 0);
@@ -456,7 +458,7 @@ function merge_topics($forum_id, $topic_ids, $to_topic_id)
return;
}
$redirect = request_var('redirect', build_url(array('quickmod')));
$redirect = request_var('redirect', "{$phpbb_root_path}mcp.$phpEx?f=$forum_id&amp;i=main&amp;mode=forum_view");
$s_hidden_fields = build_hidden_fields(array(
'i' => 'main',
@@ -473,10 +475,16 @@ function merge_topics($forum_id, $topic_ids, $to_topic_id)
if (confirm_box(true))
{
$to_forum_id = $topic_data['forum_id'];
$to_forum_id = $to_topic_data['forum_id'];
move_posts($post_id_list, $to_topic_id, false);
add_log('mod', $to_forum_id, $to_topic_id, 'LOG_MERGE', $topic_data['topic_title']);
add_log('mod', $to_forum_id, $to_topic_id, 'LOG_MERGE', $to_topic_data['topic_title']);
// Update topic views count
$sql = 'UPDATE ' . TOPICS_TABLE . '
SET topic_views = ' . $topic_views . '
WHERE topic_id = ' . $to_topic_id;
$db->sql_query($sql);
// Message and return links
$success_msg = 'POSTS_MERGED_SUCCESS';
@@ -503,6 +511,20 @@ function merge_topics($forum_id, $topic_ids, $to_topic_id)
$redirect = request_var('redirect', "{$phpbb_root_path}viewtopic.$phpEx?f=$to_forum_id&amp;t=$to_topic_id");
$redirect = reapply_sid($redirect);
/**
* Perform additional actions after merging topics.
*
* @event core.mcp_forum_merge_topics_after
* @var array all_topic_data The data from all topics involved in the merge
* @var int to_topic_id The ID of the topic into which the rest are merged
* @since 3.1.11-RC1
*/
$vars = array(
'all_topic_data',
'to_topic_id',
);
extract($phpbb_dispatcher->trigger_event('core.mcp_forum_merge_topics_after', compact($vars)));
meta_refresh(3, $redirect);
trigger_error($user->lang[$success_msg] . '<br /><br />' . $return_link);
}

View File

@@ -164,7 +164,7 @@ class mcp_main
* @var string action Topic quick moderation action name
* @var bool quickmod Flag indicating whether MCP is in quick moderation mode
* @since 3.1.0-a4
* @change 3.1.0-RC4 Added variables: action, quickmod
* @changed 3.1.0-RC4 Added variables: action, quickmod
*/
$vars = array('action', 'quickmod');
extract($phpbb_dispatcher->trigger_event('core.modify_quickmod_actions', compact($vars)));
@@ -463,7 +463,7 @@ function change_topic_type($action, $topic_ids)
*/
function mcp_move_topic($topic_ids)
{
global $auth, $user, $db, $template, $phpbb_log, $request;
global $auth, $user, $db, $template, $phpbb_log, $request, $phpbb_dispatcher;
global $phpEx, $phpbb_root_path;
// Here we limit the operation to one forum only
@@ -625,6 +625,21 @@ function mcp_move_topic($topic_ids)
'poll_last_vote' => (int) $row['poll_last_vote']
);
/**
* Perform actions before shadow topic is created.
*
* @event core.mcp_main_modify_shadow_sql
* @var array shadow SQL array to be used by $db->sql_build_array
* @var array row Topic data
* @since 3.1.11-RC1
* @changed 3.1.11-RC1 Added variable: row
*/
$vars = array(
'shadow',
'row',
);
extract($phpbb_dispatcher->trigger_event('core.mcp_main_modify_shadow_sql', compact($vars)));
$db->sql_query('INSERT INTO ' . TOPICS_TABLE . $db->sql_build_array('INSERT', $shadow));
// Shadow topics only count on new "topics" and not posts... a shadow topic alone has 0 posts
@@ -877,11 +892,12 @@ 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),
'S_ALLOWED_SOFTDELETE' => $auth->acl_get('m_softdelete', $forum_id),
'S_SHADOW_TOPICS' => $only_shadow,
'S_SOFTDELETED' => $only_softdeleted,
'S_TOPIC_MODE' => true,
'S_ALLOWED_DELETE' => $auth->acl_get('m_delete', $forum_id),
'S_ALLOWED_SOFTDELETE' => $auth->acl_get('m_softdelete', $forum_id),
'DELETE_TOPIC_PERMANENTLY_EXPLAIN' => $user->lang('DELETE_TOPIC_PERMANENTLY', sizeof($topic_ids)),
));
$l_confirm = (sizeof($topic_ids) == 1) ? 'DELETE_TOPIC' : 'DELETE_TOPICS';
@@ -1116,9 +1132,10 @@ function mcp_delete_post($post_ids, $is_soft = false, $soft_delete_reason = '',
}
$template->assign_vars(array(
'S_SOFTDELETED' => $only_softdeleted,
'S_ALLOWED_DELETE' => $auth->acl_get('m_delete', $forum_id),
'S_ALLOWED_SOFTDELETE' => $auth->acl_get('m_softdelete', $forum_id),
'S_SOFTDELETED' => $only_softdeleted,
'S_ALLOWED_DELETE' => $auth->acl_get('m_delete', $forum_id),
'S_ALLOWED_SOFTDELETE' => $auth->acl_get('m_softdelete', $forum_id),
'DELETE_POST_PERMANENTLY_EXPLAIN' => $user->lang('DELETE_POST_PERMANENTLY', sizeof($post_ids)),
));
$l_confirm = (sizeof($post_ids) == 1) ? 'DELETE_POST' : 'DELETE_POSTS';
@@ -1279,6 +1296,21 @@ function mcp_fork_topic($topic_ids)
'poll_vote_change' => (int) $topic_row['poll_vote_change'],
);
/**
* Perform actions before forked topic is created.
*
* @event core.mcp_main_modify_fork_sql
* @var array sql_ary SQL array to be used by $db->sql_build_array
* @var array topic_row Topic data
* @since 3.1.11-RC1
* @changed 3.1.11-RC1 Added variable: topic_row
*/
$vars = array(
'sql_ary',
'topic_row',
);
extract($phpbb_dispatcher->trigger_event('core.mcp_main_modify_fork_sql', compact($vars)));
$db->sql_query('INSERT INTO ' . TOPICS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
$new_topic_id = $db->sql_nextid();
$new_topic_id_list[$topic_id] = $new_topic_id;

View File

@@ -24,8 +24,8 @@ if (!defined('IN_PHPBB'))
*/
function mcp_post_details($id, $mode, $action)
{
global $phpEx, $phpbb_root_path, $config;
global $template, $db, $user, $auth, $cache;
global $phpEx, $phpbb_root_path, $config, $request;
global $template, $db, $user, $auth, $cache, $phpbb_container;
global $phpbb_dispatcher;
$user->add_lang('posting');
@@ -53,7 +53,10 @@ function mcp_post_details($id, $mode, $action)
if ($auth->acl_get('m_info', $post_info['forum_id']))
{
$ip = request_var('ip', '');
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
if (!function_exists('user_ipwhois'))
{
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
}
$template->assign_vars(array(
'RETURN_POST' => sprintf($user->lang['RETURN_POST'], '<a href="' . append_sid("{$phpbb_root_path}mcp.$phpEx", "i=$id&amp;mode=$mode&amp;p=$post_id") . '">', '</a>'),
@@ -355,7 +358,11 @@ function mcp_post_details($id, $mode, $action)
// Get IP
if ($auth->acl_get('m_info', $post_info['forum_id']))
{
$rdns_ip_num = request_var('rdns', '');
/** @var \phpbb\pagination $pagination */
$pagination = $phpbb_container->get('pagination');
$rdns_ip_num = $request->variable('rdns', '');
$start_users = $request->variable('start_users', 0);
if ($rdns_ip_num != 'all')
{
@@ -364,24 +371,47 @@ function mcp_post_details($id, $mode, $action)
);
}
$num_users = false;
if ($start_users)
{
$num_users = phpbb_get_num_posters_for_ip($db, $post_info['poster_ip']);
$start_users = $pagination->validate_start($start_users, $config['posts_per_page'], $num_users);
}
// Get other users who've posted under this IP
$sql = 'SELECT poster_id, COUNT(poster_id) as postings
FROM ' . POSTS_TABLE . "
WHERE poster_ip = '" . $db->sql_escape($post_info['poster_ip']) . "'
AND poster_id <> " . (int) $post_info['poster_id'] . "
GROUP BY poster_id
ORDER BY postings DESC";
$result = $db->sql_query($sql);
ORDER BY postings DESC, poster_id ASC";
$result = $db->sql_query_limit($sql, $config['posts_per_page'], $start_users);
$page_users = 0;
while ($row = $db->sql_fetchrow($result))
{
// Fill the user select list with users who have posted under this IP
if ($row['poster_id'] != $post_info['poster_id'])
{
$users_ary[$row['poster_id']] = $row;
}
$page_users++;
$users_ary[$row['poster_id']] = $row;
}
$db->sql_freeresult($result);
if ($page_users == $config['posts_per_page'] || $start_users)
{
if ($num_users === false)
{
$num_users = phpbb_get_num_posters_for_ip($db, $post_info['poster_ip']);
}
$pagination->generate_template_pagination(
$url . '&amp;i=main&amp;mode=post_details',
'pagination',
'start_users',
$num_users,
$config['posts_per_page'],
$start_users
);
}
if (sizeof($users_ary))
{
// Get the usernames
@@ -415,16 +445,26 @@ function mcp_post_details($id, $mode, $action)
// A compound index on poster_id, poster_ip (posts table) would help speed up this query a lot,
// but the extra size is only valuable if there are persons having more than a thousands posts.
// This is better left to the really really big forums.
$start_ips = $request->variable('start_ips', 0);
$num_ips = false;
if ($start_ips)
{
$num_ips = phpbb_get_num_ips_for_poster($db, $post_info['poster_id']);
$start_ips = $pagination->validate_start($start_ips, $config['posts_per_page'], $num_ips);
}
$sql = 'SELECT poster_ip, COUNT(poster_ip) AS postings
FROM ' . POSTS_TABLE . '
WHERE poster_id = ' . $post_info['poster_id'] . "
GROUP BY poster_ip
ORDER BY postings DESC";
$result = $db->sql_query($sql);
ORDER BY postings DESC, poster_ip ASC";
$result = $db->sql_query_limit($sql, $config['posts_per_page'], $start_ips);
$page_ips = 0;
while ($row = $db->sql_fetchrow($result))
{
$page_ips++;
$hostname = (($rdns_ip_num == $row['poster_ip'] || $rdns_ip_num == 'all') && $row['poster_ip']) ? @gethostbyaddr($row['poster_ip']) : '';
$template->assign_block_vars('iprow', array(
@@ -439,6 +479,23 @@ function mcp_post_details($id, $mode, $action)
}
$db->sql_freeresult($result);
if ($page_ips == $config['posts_per_page'] || $start_ips)
{
if ($num_ips === false)
{
$num_ips = phpbb_get_num_ips_for_poster($db, $post_info['poster_id']);
}
$pagination->generate_template_pagination(
$url . '&amp;i=main&amp;mode=post_details',
'pagination_ips',
'start_ips',
$num_ips,
$config['posts_per_page'],
$start_ips
);
}
$user_select = '';
if (sizeof($usernames_ary))
@@ -456,6 +513,44 @@ function mcp_post_details($id, $mode, $action)
}
/**
* Get the number of posters for a given ip
*
* @param \phpbb\db\driver\driver_interface $db DBAL interface
* @param string $poster_ip IP
* @return int Number of posters
*/
function phpbb_get_num_posters_for_ip(\phpbb\db\driver\driver_interface $db, $poster_ip)
{
$sql = 'SELECT COUNT(DISTINCT poster_id) as num_users
FROM ' . POSTS_TABLE . "
WHERE poster_ip = '" . $db->sql_escape($poster_ip) . "'";
$result = $db->sql_query($sql);
$num_users = (int) $db->sql_fetchfield('num_users');
$db->sql_freeresult($result);
return $num_users;
}
/**
* Get the number of ips for a given poster
*
* @param \phpbb\db\driver\driver_interface $db
* @param int $poster_id Poster user ID
* @return int Number of IPs for given poster
*/
function phpbb_get_num_ips_for_poster(\phpbb\db\driver\driver_interface $db, $poster_id)
{
$sql = 'SELECT COUNT(DISTINCT poster_ip) as num_ips
FROM ' . POSTS_TABLE . '
WHERE poster_id = ' . (int) $poster_id;
$result = $db->sql_query($sql);
$num_ips = (int) $db->sql_fetchfield('num_ips');
$db->sql_freeresult($result);
return $num_ips;
}
/**
* Change a post's poster
*/

View File

@@ -407,6 +407,7 @@ function mcp_topic_view($id, $mode, $action)
function split_topic($action, $topic_id, $to_forum_id, $subject)
{
global $db, $template, $user, $phpEx, $phpbb_root_path, $auth, $config;
global $phpbb_dispatcher;
$post_id_list = request_var('post_id_list', array(0));
$forum_id = request_var('forum_id', 0);
@@ -567,6 +568,47 @@ function split_topic($action, $topic_id, $to_forum_id, $subject)
WHERE post_id = {$post_id_list[0]}";
$db->sql_query($sql);
// Grab data for first post in split topic
$sql_array = array(
'SELECT' => 'p.post_id, p.forum_id, p.poster_id, p.post_text, f.enable_indexing',
'FROM' => array(
POSTS_TABLE => 'p',
),
'LEFT_JOIN' => array(
array(
'FROM' => array(FORUMS_TABLE => 'f'),
'ON' => 'p.forum_id = f.forum_id',
)
),
'WHERE' => "post_id = {$post_id_list[0]}",
);
$sql = $db->sql_build_query('SELECT', $sql_array);
$result = $db->sql_query($sql);
$first_post_data = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
// Index first post as if it were edited
if ($first_post_data['enable_indexing'])
{
// Select the search method and do some additional checks to ensure it can actually be utilised
$search_type = $config['search_type'];
if (!class_exists($search_type))
{
trigger_error('NO_SUCH_SEARCH_MODULE');
}
$error = false;
$search = new $search_type($error, $phpbb_root_path, $phpEx, $auth, $config, $db, $user, $phpbb_dispatcher);
if ($error)
{
trigger_error($error);
}
$search->index('edit', $first_post_data['post_id'], $first_post_data['post_text'], $subject, $first_post_data['poster_id'], $first_post_data['forum_id']);
}
// Copy topic subscriptions to new topic
$sql = 'SELECT user_id, notify_status
FROM ' . TOPICS_WATCH_TABLE . '
@@ -634,7 +676,7 @@ function split_topic($action, $topic_id, $to_forum_id, $subject)
*/
function merge_posts($topic_id, $to_topic_id)
{
global $db, $template, $user, $phpEx, $phpbb_root_path, $auth;
global $db, $template, $user, $phpEx, $phpbb_root_path, $auth, $phpbb_dispatcher;
if (!$to_topic_id)
{
@@ -735,6 +777,20 @@ function merge_posts($topic_id, $to_topic_id)
$redirect = request_var('redirect', "{$phpbb_root_path}viewtopic.$phpEx?f=$to_forum_id&amp;t=$to_topic_id");
$redirect = reapply_sid($redirect);
/**
* Perform additional actions after merging posts.
*
* @event core.mcp_topics_merge_posts_after
* @var int topic_id The topic ID from which posts are being moved
* @var int to_topic_id The topic ID to which posts are being moved
* @since 3.1.11-RC1
*/
$vars = array(
'topic_id',
'to_topic_id',
);
extract($phpbb_dispatcher->trigger_event('core.mcp_topics_merge_posts_after', compact($vars)));
meta_refresh(3, $redirect);
trigger_error($user->lang[$success_msg] . '<br /><br />' . $return_link);
}

View File

@@ -1171,7 +1171,7 @@ class parse_message extends bbcode_firstpass
* @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
* @change 3.1.3-RC1 Added vars $bbcode_bitfield and $bbcode_uid
* @changed 3.1.3-RC1 Added vars $bbcode_bitfield and $bbcode_uid
*/
$message = $this->message;
$warn_msg = $this->warn_msg;
@@ -1822,7 +1822,7 @@ class parse_message extends bbcode_firstpass
$this->message = $poll['poll_title'];
$this->bbcode_bitfield = $bbcode_bitfield;
$poll['poll_options'] = explode("\n", trim($poll['poll_option_text']));
$poll['poll_options'] = preg_split('/\s*?\n\s*/', trim($poll['poll_option_text']));
$poll['poll_options_size'] = sizeof($poll['poll_options']);
if (!$poll['poll_title'] && $poll['poll_options_size'])

View File

@@ -35,7 +35,7 @@ class ucp_main
function main($id, $mode)
{
global $config, $db, $user, $auth, $template, $phpbb_root_path, $phpEx;
global $config, $db, $user, $auth, $template, $phpbb_root_path, $phpEx, $phpbb_dispatcher;
global $request;
switch ($mode)
@@ -215,6 +215,14 @@ class ucp_main
$unwatch = (isset($_POST['unwatch'])) ? true : false;
/**
* Read and potentially modify the post data used to remove subscriptions to forums/topics
*
* @event core.ucp_main_subscribed_post_data
* @since 3.1.10-RC1
*/
$phpbb_dispatcher->dispatch('core.ucp_main_subscribed_post_data');
if ($unwatch)
{
if (check_form_key('ucp_front_subscribed'))
@@ -300,6 +308,20 @@ class ucp_main
$tracking_topics = ($tracking_topics) ? tracking_unserialize($tracking_topics) : array();
}
/**
* Modify the query used to retrieve a list of subscribed forums
*
* @event core.ucp_main_subscribed_forums_modify_query
* @var array sql_array The subscribed forums query
* @var array forbidden_forums The list of forbidden forums
* @since 3.1.10-RC1
*/
$vars = array(
'sql_array',
'forbidden_forums',
);
extract($phpbb_dispatcher->trigger_event('core.ucp_main_subscribed_forums_modify_query', compact($vars)));
$sql = $db->sql_build_query('SELECT', $sql_array);
$result = $db->sql_query($sql);
@@ -341,7 +363,7 @@ class ucp_main
$last_post_time = $last_post_url = '';
}
$template->assign_block_vars('forumrow', array(
$template_vars = array(
'FORUM_ID' => $forum_id,
'FORUM_IMG_STYLE' => $folder_image,
'FORUM_FOLDER_IMG' => $user->img($folder_image, $folder_alt),
@@ -360,8 +382,36 @@ class ucp_main
'S_UNREAD_FORUM' => $unread_forum,
'U_LAST_POST' => $last_post_url,
'U_VIEWFORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $row['forum_id']))
'U_VIEWFORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $row['forum_id'])
);
/**
* Add template variables to a subscribed forum row.
*
* @event core.ucp_main_subscribed_forum_modify_template_vars
* @var array template_vars Array containing the template variables for the row
* @var array row Array containing the subscribed forum row data
* @var int forum_id Forum ID
* @var string folder_image Folder image
* @var string folder_alt Alt text for the folder image
* @var bool unread_forum Whether the forum has unread content or not
* @var string last_post_time The time of the most recent post, expressed as a formatted date string
* @var string last_post_url The URL of the most recent post in the forum
* @since 3.1.10-RC1
*/
$vars = array(
'template_vars',
'row',
'forum_id',
'folder_image',
'folder_alt',
'unread_forum',
'last_post_time',
'last_post_url',
);
extract($phpbb_dispatcher->trigger_event('core.ucp_main_subscribed_forum_modify_template_vars', compact($vars)));
$template->assign_block_vars('forumrow', $template_vars);
}
$db->sql_freeresult($result);
}
@@ -643,7 +693,7 @@ class ucp_main
*/
function assign_topiclist($mode = 'subscribed', $forbidden_forum_ary = array())
{
global $user, $db, $template, $config, $cache, $auth, $phpbb_root_path, $phpEx, $phpbb_container;
global $user, $db, $template, $config, $cache, $auth, $phpbb_root_path, $phpEx, $phpbb_container, $request, $phpbb_dispatcher;
$table = ($mode == 'subscribed') ? TOPICS_WATCH_TABLE : BOOKMARKS_TABLE;
$start = request_var('start', 0);
@@ -664,6 +714,23 @@ class ucp_main
AND i.user_id = ' . $user->data['user_id'] . '
AND ' . $db->sql_in_set('t.forum_id', $forbidden_forum_ary, true, true),
);
/**
* Modify the query used to retrieve the count of subscribed/bookmarked topics
*
* @event core.ucp_main_topiclist_count_modify_query
* @var array sql_array The subscribed/bookmarked topics query
* @var array forbidden_forum_ary The list of forbidden forums
* @var string mode The type of topic list ('subscribed' or 'bookmarks')
* @since 3.1.10-RC1
*/
$vars = array(
'sql_array',
'forbidden_forum_ary',
'mode',
);
extract($phpbb_dispatcher->trigger_event('core.ucp_main_topiclist_count_modify_query', compact($vars)));
$sql = $db->sql_build_query('SELECT', $sql_array);
$result = $db->sql_query($sql);
$topics_count = (int) $db->sql_fetchfield('topics_count');
@@ -732,6 +799,22 @@ class ucp_main
$sql_array['SELECT'] .= ', tp.topic_posted';
}
/**
* Modify the query used to retrieve the list of subscribed/bookmarked topics
*
* @event core.ucp_main_topiclist_modify_query
* @var array sql_array The subscribed/bookmarked topics query
* @var array forbidden_forum_ary The list of forbidden forums
* @var string mode The type of topic list ('subscribed' or 'bookmarks')
* @since 3.1.10-RC1
*/
$vars = array(
'sql_array',
'forbidden_forum_ary',
'mode',
);
extract($phpbb_dispatcher->trigger_event('core.ucp_main_topiclist_modify_query', compact($vars)));
$sql = $db->sql_build_query('SELECT', $sql_array);
$result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
@@ -796,7 +879,7 @@ class ucp_main
$view_topic_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", $view_topic_url_params);
// Send vars to template
$template->assign_block_vars('topicrow', array(
$template_vars = array(
'FORUM_ID' => $forum_id,
'TOPIC_ID' => $topic_id,
'FIRST_POST_TIME' => $user->format_date($row['topic_time']),
@@ -838,7 +921,41 @@ class ucp_main
'U_LAST_POST' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", $view_topic_url_params . '&amp;p=' . $row['topic_last_post_id']) . '#p' . $row['topic_last_post_id'],
'U_VIEW_TOPIC' => $view_topic_url,
'U_VIEW_FORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id),
));
);
/**
* Add template variables to a subscribed/bookmarked topic row.
*
* @event core.ucp_main_topiclist_topic_modify_template_vars
* @var array template_vars Array containing the template variables for the row
* @var array row Array containing the subscribed/bookmarked topic row data
* @var int forum_id ID of the forum containing the topic
* @var int topic_id Topic ID
* @var int replies Number of replies in the topic
* @var string topic_type Topic type
* @var string folder_img Folder image
* @var string folder_alt Alt text for the folder image
* @var array icons Array containing topic icons
* @var bool unread_topic Whether the topic has unread content or not
* @var string view_topic_url The URL of the topic
* @since 3.1.10-RC1
*/
$vars = array(
'template_vars',
'row',
'forum_id',
'topic_id',
'replies',
'topic_type',
'folder_img',
'folder_alt',
'icons',
'unread_topic',
'view_topic_url',
);
extract($phpbb_dispatcher->trigger_event('core.ucp_main_topiclist_topic_modify_template_vars', compact($vars)));
$template->assign_block_vars('topicrow', $template_vars);
$pagination->generate_template_pagination(append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $row['forum_id'] . "&amp;t=$topic_id"), 'topicrow.pagination', 'start', $replies + 1, $config['posts_per_page'], 1, true, true);
}

View File

@@ -450,6 +450,17 @@ function compose_pm($id, $mode, $action, $user_folders = array())
$message_attachment = 0;
$message_text = $message_subject = '';
/**
* Predefine message text and subject
*
* @event core.ucp_pm_compose_predefined_message
* @var string message_text Message text
* @var string message_subject Messate subject
* @since 3.1.11-RC1
*/
$vars = array('message_text', 'message_subject');
extract($phpbb_dispatcher->trigger_event('core.ucp_pm_compose_predefined_message', compact($vars)));
if ($to_user_id && $to_user_id != ANONYMOUS && $action == 'post')
{
$address_list['u'][$to_user_id] = 'to';
@@ -751,6 +762,34 @@ function compose_pm($id, $mode, $action, $user_folders = array())
$enable_urls = (isset($_POST['disable_magic_url'])) ? 0 : 1;
$enable_sig = (!$config['allow_sig'] ||!$config['allow_sig_pm']) ? false : ((isset($_POST['attach_sig'])) ? true : false);
/**
* Modify private message
*
* @event core.ucp_pm_compose_modify_parse_before
* @var bool enable_bbcode Whether or not bbcode is enabled
* @var bool enable_smilies Whether or not smilies are enabled
* @var bool enable_urls Whether or not urls are enabled
* @var bool enable_sig Whether or not signature is enabled
* @var string subject PM subject text
* @var object message_parser The message parser object
* @var bool submit Whether or not the form has been sumitted
* @var bool preview Whether or not the signature is being previewed
* @var array error Any error strings
* @since 3.1.10-RC1
*/
$vars = array(
'enable_bbcode',
'enable_smilies',
'enable_urls',
'enable_sig',
'subject',
'message_parser',
'submit',
'preview',
'error',
);
extract($phpbb_dispatcher->trigger_event('core.ucp_pm_compose_modify_parse_before', compact($vars)));
if ($submit)
{
$status_switch = (($enable_bbcode+1) << 8) + (($enable_smilies+1) << 4) + (($enable_urls+1) << 2) + (($enable_sig+1) << 1);

View File

@@ -397,7 +397,7 @@ function view_folder($id, $mode, $folder_id, $folder)
*/
function get_pm_from($folder_id, $folder, $user_id)
{
global $user, $db, $template, $config, $auth, $phpbb_container, $phpbb_root_path, $phpEx;
global $user, $db, $template, $config, $auth, $phpbb_container, $phpbb_root_path, $phpEx, $phpbb_dispatcher;
$start = request_var('start', 0);
@@ -461,7 +461,7 @@ function get_pm_from($folder_id, $folder, $user_id)
$start = $pagination->validate_start($start, $config['topics_per_page'], $pm_count);
$pagination->generate_template_pagination($base_url, 'pagination', 'start', $pm_count, $config['topics_per_page'], $start);
$template->assign_vars(array(
$template_vars = array(
'TOTAL_MESSAGES' => $user->lang('VIEW_PM_MESSAGES', (int) $pm_count),
'POST_IMG' => (!$auth->acl_get('u_sendpm')) ? $user->img('button_topic_locked', 'POST_PM_LOCKED') : $user->img('button_pm_new', 'POST_NEW_PM'),
@@ -475,7 +475,33 @@ function get_pm_from($folder_id, $folder, $user_id)
'U_POST_NEW_TOPIC' => ($auth->acl_get('u_sendpm')) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;mode=compose') : '',
'S_PM_ACTION' => append_sid("{$phpbb_root_path}ucp.$phpEx", "i=pm&amp;mode=view&amp;action=view_folder&amp;f=$folder_id" . (($start !== 0) ? "&amp;start=$start" : '')),
));
);
/**
* Modify template variables before they are assigned
*
* @event core.ucp_pm_view_folder_get_pm_from_template
* @var int folder_id Folder ID
* @var array folder Folder data
* @var int user_id User ID
* @var string base_url Pagination base URL
* @var int start Pagination start
* @var int pm_count Count of PMs
* @var array template_vars Template variables to be assigned
* @since 3.1.11-RC1
*/
$vars = array(
'folder_id',
'folder',
'user_id',
'base_url',
'start',
'pm_count',
'template_vars',
);
extract($phpbb_dispatcher->trigger_event('core.ucp_pm_view_folder_get_pm_from_template', compact($vars)));
$template->assign_vars($template_vars);
// Grab all pm data
$rowset = $pm_list = array();
@@ -509,15 +535,38 @@ function get_pm_from($folder_id, $folder, $user_id)
$sql_sort_order = $sort_by_sql[$sort_key] . ' ' . $direction;
}
$sql = 'SELECT t.*, p.root_level, p.message_time, p.message_subject, p.icon_id, p.to_address, p.message_attachment, p.bcc_address, u.username, u.username_clean, u.user_colour, p.message_reported
FROM ' . PRIVMSGS_TO_TABLE . ' t, ' . PRIVMSGS_TABLE . ' p, ' . USERS_TABLE . " u
WHERE t.user_id = $user_id
$sql_ary = array(
'SELECT' => 't.*, p.root_level, p.message_time, p.message_subject, p.icon_id, p.to_address, p.message_attachment, p.bcc_address, u.username, u.username_clean, u.user_colour, p.message_reported',
'FROM' => array(
PRIVMSGS_TO_TABLE => 't',
PRIVMSGS_TABLE => 'p',
USERS_TABLE => 'u',
),
'WHERE' => "t.user_id = $user_id
AND p.author_id = u.user_id
AND $folder_sql
AND t.msg_id = p.msg_id
$sql_limit_time
ORDER BY $sql_sort_order";
$result = $db->sql_query_limit($sql, $sql_limit, $sql_start);
$sql_limit_time",
'ORDER_BY' => $sql_sort_order,
);
/**
* Modify SQL before it is executed
*
* @event core.ucp_pm_view_folder_get_pm_from_sql
* @var array sql_ary SQL array
* @var int sql_limit SQL limit
* @var int sql_start SQL start
* @since 3.1.11-RC1
*/
$vars = array(
'sql_ary',
'sql_limit',
'sql_start',
);
extract($phpbb_dispatcher->trigger_event('core.ucp_pm_view_folder_get_pm_from_sql', compact($vars)));
$result = $db->sql_query_limit($db->sql_build_query('SELECT', $sql_ary), $sql_limit, $sql_start);
$pm_reported = array();
while ($row = $db->sql_fetchrow($result))

View File

@@ -479,6 +479,32 @@ class ucp_profile
{
$message_parser = new parse_message($signature);
/**
* Modify user signature on editing profile in UCP
*
* @event core.ucp_profile_modify_signature
* @var bool enable_bbcode Whether or not bbcode is enabled
* @var bool enable_smilies Whether or not smilies are enabled
* @var bool enable_urls Whether or not urls are enabled
* @var string signature Users signature text
* @var object message_parser The message parser object
* @var array error Any error strings
* @var bool submit Whether or not the form has been sumitted
* @var bool preview Whether or not the signature is being previewed
* @since 3.1.10-RC1
*/
$vars = array(
'enable_bbcode',
'enable_smilies',
'enable_urls',
'signature',
'message_parser',
'error',
'submit',
'preview',
);
extract($phpbb_dispatcher->trigger_event('core.ucp_profile_modify_signature', compact($vars)));
// Allowing Quote BBCode
$message_parser->parse($enable_bbcode, $enable_urls, $enable_smilies, $config['allow_sig_img'], $config['allow_sig_flash'], true, $config['allow_sig_links'], true, 'sig');
@@ -505,6 +531,16 @@ class ucp_profile
'user_sig_bbcode_bitfield' => $message_parser->bbcode_bitfield
);
/**
* Modify user registration data before submitting it to the database
*
* @event core.ucp_profile_modify_signature_sql_ary
* @var array sql_ary Array with user signature data to submit to the database
* @since 3.1.10-RC1
*/
$vars = array('sql_ary');
extract($phpbb_dispatcher->trigger_event('core.ucp_profile_modify_signature_sql_ary', compact($vars)));
$sql = 'UPDATE ' . USERS_TABLE . '
SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
WHERE user_id = ' . $user->data['user_id'];
@@ -597,10 +633,19 @@ class ucp_profile
'user_avatar_height' => $result['avatar_height'],
);
/**
* Trigger events on successfull avatar change
*
* @event core.ucp_profile_avatar_sql
* @var array result Array with data to be stored in DB
* @since 3.1.11-RC1
*/
$vars = array('result');
extract($phpbb_dispatcher->trigger_event('core.ucp_profile_avatar_sql', compact($vars)));
$sql = 'UPDATE ' . USERS_TABLE . '
SET ' . $db->sql_build_array('UPDATE', $result) . '
WHERE user_id = ' . (int) $user->data['user_id'];
$db->sql_query($sql);
meta_refresh(3, $this->u_action);

View File

@@ -45,6 +45,28 @@ class ucp_register
$change_lang = request_var('change_lang', '');
$user_lang = request_var('lang', $user->lang_name);
/**
* Add UCP register data before they are assigned to the template or submitted
*
* To assign data to the template, use $template->assign_vars()
*
* @event core.ucp_register_requests_after
* @var bool coppa Is set coppa
* @var bool agreed Did user agree to coppa?
* @var bool submit Is set post submit?
* @var string change_lang Change language request
* @var string user_lang User language request
* @since 3.1.11-RC1
*/
$vars = array(
'coppa',
'agreed',
'submit',
'change_lang',
'user_lang',
);
extract($phpbb_dispatcher->trigger_event('core.ucp_register_requests_after', compact($vars)));
if ($agreed)
{
add_form_key('ucp_register');

View File

@@ -30,7 +30,7 @@ class ucp_remind
function main($id, $mode)
{
global $config, $phpbb_root_path, $phpEx;
global $db, $user, $auth, $template, $phpbb_container;
global $db, $user, $auth, $template, $phpbb_container, $phpbb_dispatcher;
if (!$config['allow_password_reset'])
{
@@ -43,10 +43,30 @@ class ucp_remind
if ($submit)
{
$sql = 'SELECT user_id, username, user_permissions, user_email, user_jabber, user_notify_type, user_type, user_lang, user_inactive_reason
FROM ' . USERS_TABLE . "
WHERE user_email_hash = '" . $db->sql_escape(phpbb_email_hash($email)) . "'
AND username_clean = '" . $db->sql_escape(utf8_clean_string($username)) . "'";
$sql_array = array(
'SELECT' => 'user_id, username, user_permissions, user_email, user_jabber, user_notify_type, user_type, user_lang, user_inactive_reason',
'FROM' => array(USERS_TABLE => 'u'),
'WHERE' => "user_email_hash = '" . $db->sql_escape(phpbb_email_hash($email)) . "'
AND username_clean = '" . $db->sql_escape(utf8_clean_string($username)) . "'"
);
/**
* Change SQL query for fetching user data
*
* @event core.ucp_remind_modify_select_sql
* @var string email User's email from the form
* @var string username User's username from the form
* @var array sql_array Fully assembled SQL query with keys SELECT, FROM, WHERE
* @since 3.1.11-RC1
*/
$vars = array(
'email',
'username',
'sql_array',
);
extract($phpbb_dispatcher->trigger_event('core.ucp_remind_modify_select_sql', compact($vars)));
$sql = $db->sql_build_query('SELECT', $sql_array);
$result = $db->sql_query($sql);
$user_row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);

View File

@@ -184,8 +184,8 @@ if ($config['load_birthdays'] && $config['allow_birthdays'] && $auth->acl_gets('
* Event to modify the birthdays list
*
* @event core.index_modify_birthdays_list
* @var array birthdays Array with the users birhtdays data
* @var array rows Array with the birhtdays SQL query result
* @var array birthdays Array with the users birthdays data
* @var array rows Array with the birthdays SQL query result
* @since 3.1.7-RC1
*/
$vars = array('birthdays', 'rows');

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.9',
'phpbb_version' => '3.1.11',
'author' => '<a href="https://www.phpbb.com/">phpBB Limited</a>',
'dbms' => $dbms,
'dbhost' => $dbhost,

View File

@@ -211,13 +211,6 @@ while (!$migrator->finished())
phpbb_end_update($cache, $config);
}
$state = array_merge(array(
'migration_schema_done' => false,
'migration_data_done' => false,
),
$migrator->last_run_migration['state']
);
// 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

@@ -151,10 +151,10 @@ class install_install extends module
'LEGEND_EXPLAIN' => $lang['PHP_SETTINGS_EXPLAIN'],
));
// Test the minimum PHP version
// Test the minimum and maximum version of PHP
$php_version = PHP_VERSION;
if (version_compare($php_version, '5.3.3') < 0)
if ((version_compare($php_version, '5.3.3') < 0) || (version_compare($php_version, '7.0.0-dev', '>=')))
{
$result = '<strong style="color:red">' . $lang['NO'] . '</strong>';
}
@@ -404,7 +404,7 @@ class install_install extends module
));
}
// Can we find Imagemagick anywhere on the system?
// Can we find ImageMagick anywhere on the system?
$exe = (DIRECTORY_SEPARATOR == '\\') ? '.exe' : '';
$magic_home = getenv('MAGICK_HOME');

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.9-RC1');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.1.11-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

@@ -117,7 +117,7 @@ $lang = array_merge($lang, array(
'IMAGE_LINK_SIZE' => 'Image link dimensions',
'IMAGE_LINK_SIZE_EXPLAIN' => 'Display image attachment as an inline text link if image is larger than this. To disable this behaviour, set the values to 0px by 0px.',
'IMAGICK_PATH' => 'Imagemagick path',
'IMAGICK_PATH' => 'ImageMagick path',
'IMAGICK_PATH_EXPLAIN' => 'Full path to the imagemagick convert application, e.g. <samp>/usr/bin/</samp>.',
'MAX_ATTACHMENTS' => 'Maximum number of attachments per post',
@@ -125,7 +125,7 @@ $lang = array_merge($lang, array(
'MAX_EXTGROUP_FILESIZE' => 'Maximum file size',
'MAX_IMAGE_SIZE' => 'Maximum image dimensions',
'MAX_IMAGE_SIZE_EXPLAIN' => 'Maximum size of image attachments. Set both values to 0px by 0px to disable dimension checking.',
'MAX_THUMB_WIDTH' => 'Maximum thumbnail width in pixel',
'MAX_THUMB_WIDTH' => 'Maximum thumbnail width/height in pixel',
'MAX_THUMB_WIDTH_EXPLAIN' => 'A generated thumbnail will not exceed the width set here.',
'MIN_THUMB_FILESIZE' => 'Minimum thumbnail file size',
'MIN_THUMB_FILESIZE_EXPLAIN' => 'Do not create a thumbnail for images smaller than this.',
@@ -153,7 +153,7 @@ $lang = array_merge($lang, array(
'REMOVE_DISALLOWED_IPS' => 'Remove or un-exclude <em>disallowed</em> IPs/hostnames',
'RESYNC_FILES_STATS_CONFIRM' => 'Are you sure you wish to resynchronise file statistics?',
'SEARCH_IMAGICK' => 'Search for Imagemagick',
'SEARCH_IMAGICK' => 'Search for ImageMagick',
'SECURE_ALLOW_DENY' => 'Allow/Deny list',
'SECURE_ALLOW_DENY_EXPLAIN' => 'Change the default behaviour when secure downloads are enabled of the Allow/Deny list to that of a <strong>whitelist</strong> (Allow) or a <strong>blacklist</strong> (Deny).',
'SECURE_DOWNLOADS' => 'Enable secure downloads',

View File

@@ -345,11 +345,14 @@ $lang = array_merge($lang, array(
// Cookie Settings
$lang = array_merge($lang, array(
'ACP_COOKIE_SETTINGS_EXPLAIN' => 'These details define the data used to send cookies to your users browsers. In most cases the default values for the cookie settings should be sufficient. If you do need to change any do so with care, incorrect settings can prevent users logging in.',
'ACP_COOKIE_SETTINGS_EXPLAIN' => 'These details define the data used to send cookies to your users browsers. In most cases the default values for the cookie settings should be sufficient. If you do need to change any do so with care, incorrect settings can prevent users logging in. If you have problems with users staying logging in to your board, visit the <b><a href="https://www.phpbb.com/support/go/cookie-settings/">phpBB.com Knowledge Base - Fixing incorrect cookie settings</a></b>.',
'COOKIE_DOMAIN' => 'Cookie domain',
'COOKIE_DOMAIN_EXPLAIN' => 'In most cases the cookie domain is optional. Leave it blank if you are unsure.<br /><br /> In the case where you have a board integrated with other software or have multiple domains, then to determine the cookie domain you need to do the following. If you have something like <i>example.com</i> and <i>forums.example.com</i>, or perhaps <i>forums.example.com</i> and <i>blog.example.com</i>. Remove the subdomains until you find the common domain, <i>example.com</i>. Now add a dot in front of the common domain and you would enter .example.com (note the dot at the beginning).',
'COOKIE_NAME' => 'Cookie name',
'COOKIE_NAME_EXPLAIN' => 'This can be anything what you want, make it original. Whenever the cookie settings are changed the name of the cookie should be changed.',
'COOKIE_PATH' => 'Cookie path',
'COOKIE_PATH_EXPLAIN' => 'Note that this is always a slash, it does not matter what your board URL is.',
'COOKIE_SECURE' => 'Cookie secure',
'COOKIE_SECURE_EXPLAIN' => 'If your server is running via SSL set this to enabled else leave as disabled. Having this enabled and not running via SSL will result in server errors during redirects.',
'ONLINE_LENGTH' => 'View online time span',
@@ -558,6 +561,8 @@ $lang = array_merge($lang, array(
'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 disable registration.</em>',
'SMTP_ALLOW_SELF_SIGNED' => 'Allow self-signed SSL certificates',
'SMTP_ALLOW_SELF_SIGNED_EXPLAIN'=> 'Allow connections to SMTP server with self-signed SSL certificate.<em><strong>Warning:</strong> Allowing self-signed SSL certificates may cause security implications.</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',
@@ -570,9 +575,15 @@ $lang = array_merge($lang, array(
'SMTP_PORT' => 'SMTP server port',
'SMTP_PORT_EXPLAIN' => 'Only change this if you know your SMTP server is on a different port.',
'SMTP_SERVER' => 'SMTP server address',
'SMTP_SERVER_EXPLAIN' => 'Note that you have to provide the protocol that your server uses. If you are using SSL, this has to be "ssl://your.mailserver.com"',
'SMTP_SETTINGS' => 'SMTP settings',
'SMTP_USERNAME' => 'SMTP username',
'SMTP_USERNAME_EXPLAIN' => 'Only enter a username if your SMTP server requires it.',
'SMTP_VERIFY_PEER' => 'Verify SSL certificate',
'SMTP_VERIFY_PEER_EXPLAIN' => 'Require verification of SSL certificate used by SMTP server.<em><strong>Warning:</strong> Connecting peers with unverified SSL certificates may cause security implications.</em>',
'SMTP_VERIFY_PEER_NAME' => 'Verify SMTP peer name',
'SMTP_VERIFY_PEER_NAME_EXPLAIN' => 'Require verification of peer name for SMTP servers using SSL / TLS connections.<em><strong>Warning:</strong> Connecting to unverified peers may cause security implications.</em>',
'USE_SMTP' => 'Use SMTP server for email',
'USE_SMTP_EXPLAIN' => 'Select “Yes” if you want or have to send email via a named server instead of the local mail function.',
));
@@ -581,20 +592,26 @@ $lang = array_merge($lang, array(
$lang = array_merge($lang, array(
'ACP_JABBER_SETTINGS_EXPLAIN' => 'Here you can enable and control the use of Jabber for instant messaging and board notifications. Jabber is an open source protocol and therefore available for use by anyone. Some Jabber servers include gateways or transports which allow you to contact users on other networks. Not all servers offer all transports and changes in protocols can prevent transports from operating. Please be sure to enter already registered account details - phpBB will use the details you enter here as is.',
'JAB_ENABLE' => 'Enable Jabber',
'JAB_ENABLE_EXPLAIN' => 'Enables use of Jabber messaging and notifications.',
'JAB_GTALK_NOTE' => 'Please note that GTalk will not work because the <samp>dns_get_record</samp> function could not be found. This function is not available in PHP4, and is not implemented on Windows platforms. It currently does not work on BSD-based systems, including Mac OS.',
'JAB_PACKAGE_SIZE' => 'Jabber package size',
'JAB_PACKAGE_SIZE_EXPLAIN' => 'This is the number of messages sent in one package. If set to 0 the message is sent immediately and will not be queued for later sending.',
'JAB_PASSWORD' => 'Jabber password',
'JAB_PASSWORD_EXPLAIN' => '<em><strong>Warning:</strong> This password will be stored as plain text in the database, visible to everybody who can access your database or who can view this configuration page.</em>',
'JAB_PORT' => 'Jabber port',
'JAB_PORT_EXPLAIN' => 'Leave blank unless you know it is not port 5222.',
'JAB_SERVER' => 'Jabber server',
'JAB_SERVER_EXPLAIN' => 'See %sjabber.org%s for a list of servers.',
'JAB_SETTINGS_CHANGED' => 'Jabber settings changed successfully.',
'JAB_USE_SSL' => 'Use SSL to connect',
'JAB_USE_SSL_EXPLAIN' => 'If enabled a secure connection is tried to be established. The Jabber port will be modified to 5223 if port 5222 is specified.',
'JAB_USERNAME' => 'Jabber username or JID',
'JAB_USERNAME_EXPLAIN' => 'Specify a registered username or a valid JID. The username will not be checked for validity. If you only specify a username, then your JID will be the username and the server you specified above. Else, specify a valid JID, for example user@jabber.org.',
'JAB_ALLOW_SELF_SIGNED' => 'Allow self-signed SSL certificates',
'JAB_ALLOW_SELF_SIGNED_EXPLAIN' => 'Allow connections to Jabber server with self-signed SSL certificate.<em><strong>Warning:</strong> Allowing self-signed SSL certificates may cause security implications.</em>',
'JAB_ENABLE' => 'Enable Jabber',
'JAB_ENABLE_EXPLAIN' => 'Enables use of Jabber messaging and notifications.',
'JAB_GTALK_NOTE' => 'Please note that GTalk will not work because the <samp>dns_get_record</samp> function could not be found. This function is not available in PHP4, and is not implemented on Windows platforms. It currently does not work on BSD-based systems, including Mac OS.',
'JAB_PACKAGE_SIZE' => 'Jabber package size',
'JAB_PACKAGE_SIZE_EXPLAIN' => 'This is the number of messages sent in one package. If set to 0 the message is sent immediately and will not be queued for later sending.',
'JAB_PASSWORD' => 'Jabber password',
'JAB_PASSWORD_EXPLAIN' => '<em><strong>Warning:</strong> This password will be stored as plain text in the database, visible to everybody who can access your database or who can view this configuration page.</em>',
'JAB_PORT' => 'Jabber port',
'JAB_PORT_EXPLAIN' => 'Leave blank unless you know it is not port 5222.',
'JAB_SERVER' => 'Jabber server',
'JAB_SERVER_EXPLAIN' => 'See %sjabber.org%s for a list of servers.',
'JAB_SETTINGS_CHANGED' => 'Jabber settings changed successfully.',
'JAB_USE_SSL' => 'Use SSL to connect',
'JAB_USE_SSL_EXPLAIN' => 'If enabled a secure connection is tried to be established. The Jabber port will be modified to 5223 if port 5222 is specified.',
'JAB_USERNAME' => 'Jabber username or JID',
'JAB_USERNAME_EXPLAIN' => 'Specify a registered username or a valid JID. The username will not be checked for validity. If you only specify a username, then your JID will be the username and the server you specified above. Else, specify a valid JID, for example user@jabber.org.',
'JAB_VERIFY_PEER' => 'Verify SSL certificate',
'JAB_VERIFY_PEER_EXPLAIN' => 'Require verification of SSL certificate used by Jabber server.<em><strong>Warning:</strong> Connecting peers with unverified SSL certificates may cause security implications.</em>',
'JAB_VERIFY_PEER_NAME' => 'Verify Jabber peer name',
'JAB_VERIFY_PEER_NAME_EXPLAIN' => 'Require verification of peer name for Jabber servers using SSL / TLS connections.<em><strong>Warning:</strong> Connecting to unverified peers may cause security implications.</em>',
));

View File

@@ -373,7 +373,7 @@ $lang = array_merge($lang, array(
'NUMBER_USERS' => 'Number of users',
'NUMBER_ORPHAN' => 'Orphan attachments',
'PHP_VERSION_OLD' => 'The version of PHP on this server will no longer be supported by future versions of phpBB. %sDetails%s',
'PHP_VERSION_OLD' => 'The version of PHP on this server (%1$s) will no longer be supported by future versions of phpBB. The minimum required version will be PHP %2$s. %3$sDetails%4$s',
'POSTS_PER_DAY' => 'Posts per day',

View File

@@ -54,7 +54,7 @@ $lang = array_merge($lang, array(
'DELETING_INDEX_IN_PROGRESS_EXPLAIN' => 'The search backend is currently cleaning its index. This can take a few minutes.',
'FULLTEXT_MYSQL_INCOMPATIBLE_DATABASE' => 'The MySQL fulltext backend can only be used with MySQL4 and above.',
'FULLTEXT_MYSQL_NOT_SUPPORTED' => 'MySQL fulltext indexes can only be used with MyISAM or InnoDB tables. MySQL 5.6.4 or later is required for fulltext indexes on InnoDB tables.',
'FULLTEXT_MYSQL_NOT_SUPPORTED' => 'MySQL fulltext indexes can only be used with MyISAM or InnoDB tables. MySQL 5.6.8 or later is required for fulltext indexes on InnoDB tables.',
'FULLTEXT_MYSQL_TOTAL_POSTS' => 'Total number of indexed posts',
'FULLTEXT_MYSQL_MIN_SEARCH_CHARS_EXPLAIN' => 'Words with at least this many characters will be indexed for searching. You or your host can only change this setting by changing the mysql configuration.',
'FULLTEXT_MYSQL_MAX_SEARCH_CHARS_EXPLAIN' => 'Words with no more than this many characters will be indexed for searching. You or your host can only change this setting by changing the mysql configuration.',

View File

@@ -81,6 +81,7 @@ $lang = array_merge($lang, array(
'STYLE_UNINSTALL_DEPENDENT' => 'Style "%s" cannot be uninstalled because it has one or more child styles.',
'STYLE_UNINSTALLED' => 'Style "%s" uninstalled successfully.',
'STYLE_USED_BY' => 'Used by (including robots)',
'STYLE_VERSION' => 'Style version',
'UNINSTALL_DEFAULT' => 'You cannot uninstall the default style.',

View File

@@ -55,6 +55,7 @@ $lang = array_merge($lang, array(
'CLI_DESCRIPTION_DISABLE_EXTENSION' => 'Disables the specified extension.',
'CLI_DESCRIPTION_ENABLE_EXTENSION' => 'Enables the specified extension.',
'CLI_DESCRIPTION_FIND_MIGRATIONS' => 'Finds migrations that are not depended upon.',
'CLI_DESCRIPTION_FIX_LEFT_RIGHT_IDS' => 'Repairs the tree structure of the forums and modules.',
'CLI_DESCRIPTION_GET_CONFIG' => 'Gets a configuration options value',
'CLI_DESCRIPTION_INCREMENT_CONFIG' => 'Increments a configuration options integer value',
'CLI_DESCRIPTION_LIST_EXTENSIONS' => 'Lists all extensions in the database and on the filesystem.',
@@ -64,6 +65,7 @@ $lang = array_merge($lang, array(
'CLI_DESCRIPTION_RECALCULATE_EMAIL_HASH' => 'Recalculates the user_email_hash column of the users table.',
'CLI_DESCRIPTION_SET_ATOMIC_CONFIG' => 'Sets a configuration options value only if the old matches the current value',
'CLI_DESCRIPTION_SET_CONFIG' => 'Sets a configuration options value',
'CLI_DESCRIPTION_UPDATE_HASH_BCRYPT' => 'Updates outdated password hashes to be hashed with bcrypt.',
'CLI_EXTENSION_DISABLE_FAILURE' => 'Could not disable extension %s',
'CLI_EXTENSION_DISABLE_SUCCESS' => 'Successfully disabled extension %s',
@@ -77,7 +79,9 @@ $lang = array_merge($lang, array(
'CLI_EXTENSIONS_DISABLED' => 'Disabled',
'CLI_EXTENSIONS_ENABLED' => 'Enabled',
'CLI_FIXUP_FIX_LEFT_RIGHT_IDS_SUCCESS' => 'Successfully repaired the tree structure of the forums and modules.',
'CLI_FIXUP_RECALCULATE_EMAIL_HASH_SUCCESS' => 'Successfully recalculated all email hashes.',
'CLI_FIXUP_UPDATE_HASH_BCRYPT_SUCCESS' => 'Successfully updated outdated password hashes to bcrypt.'
));
// Additional help for commands.

View File

@@ -336,6 +336,7 @@ $lang = array_merge($lang, array(
'INTERESTS' => 'Interests',
'INVALID_DIGEST_CHALLENGE' => 'Invalid digest challenge.',
'INVALID_EMAIL_LOG' => '<strong>%s</strong> possibly an invalid email address?',
'INVALID_FEED_ATTACHMENTS' => 'The selected feed tried fetching attachments with invalid constraints.',
'INVALID_PLURAL_RULE' => 'The chosen plural rule is invalid. Valid values are integers between 0 and 15.',
'IP' => 'IP',
'IP_BLACKLISTED' => 'Your IP %1$s has been blocked because it is blacklisted. For details please see <a href="%2$s">%2$s</a>.',

View File

@@ -2,7 +2,7 @@ Subject: Forum post notification - "{FORUM_NAME}"
Hello {USERNAME},
You are receiving this notification because you are watching the forum "{FORUM_NAME}" at "{SITENAME}". This forum has received a new reply to the topic "{TOPIC_TITLE}"<!-- IF AUTHOR_NAME !== '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit. You can use the following link to view the last unread reply, no more notifications will be sent until you visit the topic.
You are receiving this notification because you are watching the forum "{FORUM_NAME}" at "{SITENAME}". This forum has received a new reply to the topic "{TOPIC_TITLE}"<!-- IF AUTHOR_NAME != '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit. You can use the following link to view the last unread reply, no more notifications will be sent until you visit the topic.
{U_NEWEST_POST}

View File

@@ -2,7 +2,7 @@ Subject: New topic notification - "{FORUM_NAME}"
Hello {USERNAME},
You are receiving this notification because you are watching the forum "{FORUM_NAME}" at "{SITENAME}". This forum has received a new topic<!-- IF AUTHOR_NAME !== '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit, "{TOPIC_TITLE}". You can use the following link to view the forum, no more notifications will be sent until you visit the forum.
You are receiving this notification because you are watching the forum "{FORUM_NAME}" at "{SITENAME}". This forum has received a new topic<!-- IF AUTHOR_NAME != '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit, "{TOPIC_TITLE}". You can use the following link to view the forum, no more notifications will be sent until you visit the forum.
{U_FORUM}

View File

@@ -2,7 +2,7 @@ Subject: New topic notification - "{FORUM_NAME}"
Hello {USERNAME},
You are receiving this notification because you are watching the forum "{FORUM_NAME}" at "{SITENAME}". This forum has received a new topic<!-- IF AUTHOR_NAME !== '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit, "{TOPIC_TITLE}". You can use the following link to view the forum, no more notifications will be sent until you visit the forum.
You are receiving this notification because you are watching the forum "{FORUM_NAME}" at "{SITENAME}". This forum has received a new topic<!-- IF AUTHOR_NAME != '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit, "{TOPIC_TITLE}". You can use the following link to view the forum, no more notifications will be sent until you visit the forum.
{U_FORUM}

View File

@@ -2,7 +2,7 @@ Subject: Topic reply notification - "{TOPIC_TITLE}"
Hello {USERNAME},
You are receiving this notification because you are watching the topic "{TOPIC_TITLE}" at "{SITENAME}". This topic has received a reply<!-- IF AUTHOR_NAME !== '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit. You can use the following link to view the replies made, no more notifications will be sent until you visit the topic.
You are receiving this notification because you are watching the topic "{TOPIC_TITLE}" at "{SITENAME}". This topic has received a reply<!-- IF AUTHOR_NAME != '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit. You can use the following link to view the replies made, no more notifications will be sent until you visit the topic.
If you want to view the newest post made since your last visit, click the following link:
{U_NEWEST_POST}

View File

@@ -2,7 +2,7 @@ Subject: Topic reply notification - "{TOPIC_TITLE}"
Hello {USERNAME},
You are receiving this notification because you are watching the topic "{TOPIC_TITLE}" at "{SITENAME}". This topic has received a reply<!-- IF AUTHOR_NAME !== '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit. No more notifications will be sent until you visit the topic.
You are receiving this notification because you are watching the topic "{TOPIC_TITLE}" at "{SITENAME}". This topic has received a reply<!-- IF AUTHOR_NAME != '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit. No more notifications will be sent until you visit the topic.
If you want to view the newest post made since your last visit, click the following link:
{U_NEWEST_POST}

View File

@@ -44,7 +44,7 @@ $lang = array_merge($lang, array(
'ADMIN_TEST' => 'Check administrator settings',
'ADMIN_USERNAME' => 'Administrator username',
'ADMIN_USERNAME_EXPLAIN' => 'Please enter a username between 3 and 20 characters in length.',
'APP_MAGICK' => 'Imagemagick support [ Attachments ]',
'APP_MAGICK' => 'ImageMagick support [ Attachments ]',
'AUTHOR_NOTES' => 'Author notes<br />» %s',
'AVAILABLE' => 'Available',
'AVAILABLE_CONVERTORS' => 'Available convertors',
@@ -282,7 +282,7 @@ $lang = array_merge($lang, array(
'NOT_UNDERSTAND' => 'Could not understand %s #%d, table %s (“%s”)',
'NO_CONVERTORS' => 'No convertors are available for use.',
'NO_CONVERT_SPECIFIED' => 'No convertor specified.',
'NO_LOCATION' => 'Cannot determine location. If you know Imagemagick is installed, you may specify the location later within your administration control panel',
'NO_LOCATION' => 'Cannot determine location. If you know ImageMagick is installed, you may specify the location later within your administration control panel',
'NO_TABLES_FOUND' => 'No tables found.',
'OVERVIEW_BODY' => 'Welcome to phpBB3!<br /><br />phpBB® is the most widely used open source bulletin board solution in the world. phpBB3 is the latest installment in a package line started in 2000. Like its predecessors, phpBB3 is feature-rich, user-friendly, and fully supported by the phpBB Team. phpBB3 greatly improves on what made phpBB2 popular, and adds commonly requested features that were not present in previous versions. We hope it exceeds your expectations.<br /><br />This installation system will guide you through installing phpBB3, updating to the latest version of phpBB3 from past releases, as well as converting to phpBB3 from a different discussion board system (including phpBB2). For more information, we encourage you to read <a href="../docs/INSTALL.html">the installation guide</a>.<br /><br />To read the phpBB3 license or learn about obtaining support and our stance on it, please select the respective options from the side menu. To continue, please select the appropriate tab above.',
@@ -301,10 +301,10 @@ $lang = array_merge($lang, array(
'PHP_REGISTER_GLOBALS_EXPLAIN' => 'phpBB will still run if this setting is enabled, but if possible, it is recommended that register_globals is disabled on your PHP install for security reasons.',
'PHP_SAFE_MODE' => 'Safe mode',
'PHP_SETTINGS' => 'PHP version and settings',
'PHP_SETTINGS_EXPLAIN' => '<strong>Required</strong> - You must be running at least version 5.3.3 of PHP in order to install phpBB. If <var>safe mode</var> is displayed below your PHP installation is running in that mode. This will impose limitations on remote administration and similar features.',
'PHP_SETTINGS_EXPLAIN' => '<strong>Required</strong> - You must be running at least version 5.3.3 of PHP (PHP 7 is not supported) in order to install phpBB. If <var>safe mode</var> is displayed below your PHP installation is running in that mode. This will impose limitations on remote administration and similar features.',
'PHP_URL_FOPEN_SUPPORT' => 'PHP setting <var>allow_url_fopen</var> is enabled',
'PHP_URL_FOPEN_SUPPORT_EXPLAIN' => '<strong>Optional</strong> - This setting is optional, however certain phpBB functions like off-site avatars will not work properly without it.',
'PHP_VERSION_REQD' => 'PHP version >= 5.3.3',
'PHP_VERSION_REQD' => 'PHP version: >= 5.3.3, < 7.0.0-dev',
'POST_ID' => 'Post ID',
'PREFIX_FOUND' => 'A scan of your tables has shown a valid installation using <strong>%s</strong> as table prefix.',
'PREPROCESS_STEP' => 'Executing pre-processing functions/queries',
@@ -400,6 +400,7 @@ $lang = array_merge($lang, array(
'DATABASE_UPDATE_CONTINUE' => 'Continue database update',
'DATABASE_UPDATE_INFO_OLD' => 'The database update file within the install directory is outdated. Please make sure you uploaded the correct version of the file.',
'DATABASE_UPDATE_NOT_COMPLETED' => 'The database update has not yet completed.',
'DATABASE_VERSION' => 'Database version',
'DELETE_USER_REMOVE' => 'Delete user and remove posts',
'DELETE_USER_RETAIN' => 'Delete user but keep posts',
'DESTINATION' => 'Destination file',
@@ -439,6 +440,7 @@ $lang = array_merge($lang, array(
'FILES_NOT_MODIFIED_EXPLAIN' => 'The following files are not modified and represent the original phpBB files from the version you want to update from.',
'FILES_UP_TO_DATE' => 'Already updated files',
'FILES_UP_TO_DATE_EXPLAIN' => 'The following files are already up to date and do not need to be updated.',
'FILES_VERSION' => 'Files Version',
'FTP_SETTINGS' => 'FTP settings',
'FTP_UPDATE_METHOD' => 'FTP upload',
@@ -486,6 +488,7 @@ $lang = array_merge($lang, array(
'OLD_UPDATE_FILES' => 'Update files are out of date. The update files found are for updating from phpBB %1$s to phpBB %2$s but the latest version of phpBB is %3$s.',
'PACKAGE_UPDATES_TO' => 'Current package updates to version',
'PACKAGE_VERSION' => 'Package version installed',
'PERFORM_DATABASE_UPDATE' => 'Perform database update',
'PERFORM_DATABASE_UPDATE_EXPLAIN' => 'Below you will find a button to the database update script. The database update can take a while, so please do not stop the execution if it seems to hang. After the database update has been performed just follow the instructions to continue the update process.',
'PREVIOUS_VERSION' => 'Previous version',
@@ -530,6 +533,12 @@ $lang = array_merge($lang, array(
'UPDATE_DATABASE_SCHEMA' => 'Updating database schema',
'UPDATE_FILES' => 'Update files',
'UPDATE_FILES_NOTICE' => 'Please make sure you have updated your board files too, this file is only updating your database.',
'UPDATE_INCOMPLETE' => 'Your phpBB installation has not been correctly updated.',
'UPDATE_INCOMPLETE_MORE' => 'Please read the information below in order to fix this error.',
'UPDATE_INCOMPLETE_EXPLAIN' => '<h1>Incomplete update</h1>
<p>We noticed that the last update of your phpBB installation hasnt been completed. Visit the <a href="%1$s" title="%1$s">database_update script</a> and run it. If it is missing, please <a href="https://www.phpbb.com/downloads/" title="phpBB downloads">download your package version</a>, upload the "install" folder to your phpBB root directory (where your config.php file is) and <a href="%1$s" title="%1$s">run the database update script</a>.</p>',
'UPDATE_INSTALLATION' => 'Update phpBB installation',
'UPDATE_INSTALLATION_EXPLAIN' => 'With this option, it is possible to update your phpBB installation to the latest version.<br />During the process all of your files will be checked for their integrity. You are able to review all differences and files before the update.<br /><br />The file update itself can be done in two different ways.</p><h2>Manual Update</h2><p>With this update you only download your personal set of changed files to make sure you do not lose your file modifications you may have done. After you downloaded this package you need to manually upload the files to their correct position under your phpBB root directory. Once done, you are able to do the file check stage again to see if you moved the files to their correct location.</p><h2>Automatic Update with FTP</h2><p>This method is similar to the first one but without the need to download the changed files and uploading them on your own. This will be done for you. In order to use this method you need to know your FTP login details since you will be asked for them. Once finished you will be redirected to the file check again to make sure everything got updated correctly.<br /><br />',
'UPDATE_INSTRUCTIONS' => '
@@ -565,6 +574,7 @@ $lang = array_merge($lang, array(
'UPDATING_DATA' => 'Updating data',
'UPDATING_TO_LATEST_STABLE' => 'Updating database to latest stable release',
'UPDATED_VERSION' => 'Updated version',
'UPGRADE_INSTRUCTIONS' => 'A new feature release <strong>%1$s</strong> is available. Please read <a href="%2$s" title="%2$s"><strong>the release announcement</strong></a> to learn about what it has to offer, and how to upgrade.',
'UPLOAD_METHOD' => 'Upload method',
'UPDATE_DB_SUCCESS' => 'Database update was successful.',

View File

@@ -50,6 +50,7 @@ $lang = array_merge($lang, array(
'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_IN_PROGRESS' => 'Installing Schema: %1$s; Time: %2$.2f seconds',
'MIGRATION_SCHEMA_RUNNING' => 'Installing Schema: %s.',
'MIGRATION_INVALID_DATA_MISSING_CONDITION' => 'A migration is invalid. An if statement helper is missing a condition.',
@@ -60,9 +61,12 @@ $lang = array_merge($lang, array(
'MIGRATION_INVALID_DATA_UNDEFINED_METHOD' => 'A migration is invalid. An undefined migration tool method was encountered.',
'MODULE_ERROR' => 'An error occurred while creating a module: %s',
'MODULE_EXISTS' => 'A module already exists: %s',
'MODULE_EXIST_MULTIPLE' => 'Several modules with the given parent module langname already exist: %s. Try using before/after keys to clarify the module placement.',
'MODULE_INFO_FILE_NOT_EXIST' => 'A required module info file is missing: %2$s',
'MODULE_NOT_EXIST' => 'A required module does not exist: %s',
'PARENT_MODULE_FIND_ERROR' => 'Unable to determine the parent module identifier: %s',
'PERMISSION_NOT_EXIST' => 'The permission setting "%s" unexpectedly does not exist.',
'ROLE_NOT_EXIST' => 'The permission role "%s" unexpectedly does not exist.',

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